packages feed

Agda 2.5.2 → 2.5.3

raw patch · 309 files changed

+16415/−23305 lines, 309 filesdep +asyncdep +blaze-htmldep +stmdep −base-orphansdep −shuffledep −transformers-compatdep ~Agdadep ~EdisonCoredep ~Win32PVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: async, blaze-html, stm, text-icu, uri-encode

Dependencies removed: base-orphans, shuffle, transformers-compat, uhc-light, uhc-util, uulib, xhtml

Dependency ranges changed: Agda, EdisonCore, Win32, array, base, bytestring, containers, deepseq, directory, equivalence, filepath, mtl, pretty, process, template-haskell, time, transformers

API changes (from Hackage documentation)

- Agda.Auto.CaseSplit: eqelr :: Elr o -> Elr o -> Bool
- Agda.Auto.CaseSplit: mm :: a -> MM a b
- Agda.Auto.CaseSplit: rename :: (Nat -> Nat) -> MExp o -> MExp o
- Agda.Auto.CaseSplit: renamep :: (Nat -> Nat) -> CSPat o -> CSPat o
- Agda.Auto.CaseSplit: rm :: MM a b -> a
- Agda.Auto.Convert: cnvh :: LensHiding a => a -> FMode
- Agda.Auto.Convert: frommy :: MExp O -> ExceptT String IO Term
- Agda.Auto.Convert: frommyExp :: MExp O -> ExceptT String IO Term
- Agda.Auto.Convert: frommyType :: MExp O -> ExceptT String IO Type
- Agda.Auto.Convert: norm :: Normalise t => t -> TCM t
- Agda.Auto.Convert: tomyClause :: Clause -> TOM (Maybe ([Pat O], MExp O))
- Agda.Auto.Convert: tomyClauses :: [Clause] -> TOM [([Pat O], MExp O)]
- Agda.Auto.Convert: tomyExp :: Term -> TOM (MExp O)
- Agda.Auto.Convert: tomyExps :: Args -> TOM (MM (ArgList O) (RefInfo O))
- Agda.Auto.Convert: tomyPat :: Arg Pattern -> TOM (Pat O)
- Agda.Auto.Convert: tomyType :: Type -> TOM (MExp O)
- Agda.Auto.Convert: weaken :: Int -> MExp O -> MExp O
- Agda.Auto.Convert: weakens :: Int -> MArgList O -> MArgList O
- Agda.Auto.NarrowingSearch: Pair :: a -> b -> Pair a b
- Agda.Auto.NarrowingSearch: data Pair a b
- Agda.Auto.NarrowingSearch: type Prio = Int
- Agda.Auto.NarrowingSearch: type RefCreateEnv blk = StateT (IORef [SubConstraints blk], Int) IO
- Agda.Auto.SearchControl: [eriInfTypeUnknown, eriIsEliminand] :: ExpRefInfo o -> Bool
- Agda.Auto.Syntax: Hidden :: FMode
- Agda.Auto.Syntax: Instance :: FMode
- Agda.Auto.Syntax: NotHidden :: FMode
- Agda.Auto.Syntax: data FMode
- Agda.Auto.Syntax: data HNExp o
- Agda.Auto.Syntax: expandExp :: MExp o -> IO (MExp o)
- Agda.Auto.Syntax: instance GHC.Classes.Eq Agda.Auto.Syntax.FMode
- Agda.Auto.Syntax: stringToMyId :: String -> MId
- Agda.Auto.Syntax: weakarglist :: Nat -> ICArgList o -> ICArgList o
- Agda.Auto.Syntax: weakelr :: Nat -> Elr o -> Elr o
- Agda.Auto.Syntax: weaki :: Nat -> Clos a o -> Clos a o
- Agda.Benchmarking: Operators :: Phase
- Agda.Benchmarking: instance GHC.Enum.Bounded Agda.Benchmarking.Phase
- Agda.Benchmarking: instance GHC.Enum.Enum Agda.Benchmarking.Phase
- Agda.Compiler.Epic.AuxAST: App :: Var -> [Expr] -> Expr
- Agda.Compiler.Epic.AuxAST: BrInt :: Int -> Expr -> Branch
- Agda.Compiler.Epic.AuxAST: Branch :: Tag -> QName -> [Var] -> Expr -> Branch
- Agda.Compiler.Epic.AuxAST: Case :: Expr -> [Branch] -> Expr
- Agda.Compiler.Epic.AuxAST: Con :: Tag -> QName -> [Expr] -> Expr
- Agda.Compiler.Epic.AuxAST: Default :: Expr -> Branch
- Agda.Compiler.Epic.AuxAST: EpicFun :: Var -> Maybe QName -> Comment -> String -> Fun
- Agda.Compiler.Epic.AuxAST: Fun :: Inline -> Var -> Maybe QName -> Comment -> [Var] -> Expr -> Fun
- Agda.Compiler.Epic.AuxAST: IMPOSSIBLE :: Expr
- Agda.Compiler.Epic.AuxAST: If :: Expr -> Expr -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: LChar :: Char -> Lit
- Agda.Compiler.Epic.AuxAST: LFloat :: Double -> Lit
- Agda.Compiler.Epic.AuxAST: LInt :: Integer -> Lit
- Agda.Compiler.Epic.AuxAST: LString :: String -> Lit
- Agda.Compiler.Epic.AuxAST: Lam :: Var -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: Lazy :: Expr -> Expr
- Agda.Compiler.Epic.AuxAST: Let :: Var -> Expr -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: Lit :: Lit -> Expr
- Agda.Compiler.Epic.AuxAST: UNIT :: Expr
- Agda.Compiler.Epic.AuxAST: Var :: Var -> Expr
- Agda.Compiler.Epic.AuxAST: [brExpr] :: Branch -> Expr
- Agda.Compiler.Epic.AuxAST: [brInt] :: Branch -> Int
- Agda.Compiler.Epic.AuxAST: [brName] :: Branch -> QName
- Agda.Compiler.Epic.AuxAST: [brTag] :: Branch -> Tag
- Agda.Compiler.Epic.AuxAST: [brVars] :: Branch -> [Var]
- Agda.Compiler.Epic.AuxAST: [funArgs] :: Fun -> [Var]
- Agda.Compiler.Epic.AuxAST: [funComment] :: Fun -> Comment
- Agda.Compiler.Epic.AuxAST: [funEpicCode] :: Fun -> String
- Agda.Compiler.Epic.AuxAST: [funExpr] :: Fun -> Expr
- Agda.Compiler.Epic.AuxAST: [funInline] :: Fun -> Inline
- Agda.Compiler.Epic.AuxAST: [funName] :: Fun -> Var
- Agda.Compiler.Epic.AuxAST: [funQName] :: Fun -> Maybe QName
- Agda.Compiler.Epic.AuxAST: apps :: Var -> [Expr] -> Expr
- Agda.Compiler.Epic.AuxAST: casee :: Expr -> [Branch] -> Expr
- Agda.Compiler.Epic.AuxAST: data Branch
- Agda.Compiler.Epic.AuxAST: data Expr
- Agda.Compiler.Epic.AuxAST: data Fun
- Agda.Compiler.Epic.AuxAST: data Lit
- Agda.Compiler.Epic.AuxAST: fv :: Expr -> [Var]
- Agda.Compiler.Epic.AuxAST: getBrVars :: Branch -> [Var]
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Eq Agda.Compiler.Epic.AuxAST.Branch
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Eq Agda.Compiler.Epic.AuxAST.Expr
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Eq Agda.Compiler.Epic.AuxAST.Fun
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Eq Agda.Compiler.Epic.AuxAST.Lit
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Ord Agda.Compiler.Epic.AuxAST.Branch
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Ord Agda.Compiler.Epic.AuxAST.Expr
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Ord Agda.Compiler.Epic.AuxAST.Fun
- Agda.Compiler.Epic.AuxAST: instance GHC.Classes.Ord Agda.Compiler.Epic.AuxAST.Lit
- Agda.Compiler.Epic.AuxAST: instance GHC.Show.Show Agda.Compiler.Epic.AuxAST.Branch
- Agda.Compiler.Epic.AuxAST: instance GHC.Show.Show Agda.Compiler.Epic.AuxAST.Expr
- Agda.Compiler.Epic.AuxAST: instance GHC.Show.Show Agda.Compiler.Epic.AuxAST.Fun
- Agda.Compiler.Epic.AuxAST: instance GHC.Show.Show Agda.Compiler.Epic.AuxAST.Lit
- Agda.Compiler.Epic.AuxAST: lazy :: Expr -> Expr
- Agda.Compiler.Epic.AuxAST: lett :: Var -> Expr -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: subst :: Var -> Var -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: substBranch :: Var -> Var -> Branch -> Branch
- Agda.Compiler.Epic.AuxAST: substs :: [(Var, Var)] -> Expr -> Expr
- Agda.Compiler.Epic.AuxAST: type Comment = String
- Agda.Compiler.Epic.AuxAST: type Inline = Bool
- Agda.Compiler.Epic.CaseOpts: caseOpts :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.CaseOpts: caseOptsExpr :: Expr -> Compile TCM Expr
- Agda.Compiler.Epic.CompileState: CompileState :: [Var] -> Map TopLevelModuleName (EInterface, Set FilePath) -> EInterface -> EInterface -> String -> CompileState
- Agda.Compiler.Epic.CompileState: [compiledModules] :: CompileState -> Map TopLevelModuleName (EInterface, Set FilePath)
- Agda.Compiler.Epic.CompileState: [curFun] :: CompileState -> String
- Agda.Compiler.Epic.CompileState: [curModule] :: CompileState -> EInterface
- Agda.Compiler.Epic.CompileState: [importedModules] :: CompileState -> EInterface
- Agda.Compiler.Epic.CompileState: [nameSupply] :: CompileState -> [Var]
- Agda.Compiler.Epic.CompileState: addDefName :: QName -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: assignConstrTag :: QName -> Compile TCM Tag
- Agda.Compiler.Epic.CompileState: assignConstrTag' :: QName -> [QName] -> Compile TCM Tag
- Agda.Compiler.Epic.CompileState: bindExpr :: Expr -> (Var -> Compile TCM Expr) -> Compile TCM Expr
- Agda.Compiler.Epic.CompileState: constrInScope :: QName -> Compile TCM Bool
- Agda.Compiler.Epic.CompileState: constructorArity :: Num a => QName -> TCM a
- Agda.Compiler.Epic.CompileState: data CompileState
- Agda.Compiler.Epic.CompileState: epicError :: String -> Compile TCM a
- Agda.Compiler.Epic.CompileState: getConArity :: QName -> Compile TCM Int
- Agda.Compiler.Epic.CompileState: getConData :: QName -> Compile TCM QName
- Agda.Compiler.Epic.CompileState: getConstrTag :: QName -> Compile TCM Tag
- Agda.Compiler.Epic.CompileState: getConstrTag' :: QName -> Compile TCM (Maybe Tag)
- Agda.Compiler.Epic.CompileState: getDataCon :: QName -> Compile TCM [QName]
- Agda.Compiler.Epic.CompileState: getDelayed :: QName -> Compile TCM Bool
- Agda.Compiler.Epic.CompileState: getForcedArgs :: QName -> Compile TCM ForcedArgs
- Agda.Compiler.Epic.CompileState: getMain :: Compile TCM Var
- Agda.Compiler.Epic.CompileState: getType :: QName -> Compile TCM Type
- Agda.Compiler.Epic.CompileState: getsEI :: (EInterface -> a) -> Compile TCM a
- Agda.Compiler.Epic.CompileState: initCompileState :: CompileState
- Agda.Compiler.Epic.CompileState: instance GHC.Show.Show Agda.Compiler.Epic.CompileState.CompileState
- Agda.Compiler.Epic.CompileState: lookInterface :: (EInterface -> Maybe a) -> Compile TCM a -> Compile TCM a
- Agda.Compiler.Epic.CompileState: modifyEI :: (EInterface -> EInterface) -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: newName :: Compile TCM Var
- Agda.Compiler.Epic.CompileState: putConArity :: QName -> Int -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: putConstrTag :: QName -> Tag -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: putDelayed :: QName -> Bool -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: putForcedArgs :: QName -> ForcedArgs -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: putMain :: QName -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: replaceAt :: Int -> [a] -> [a] -> [a]
- Agda.Compiler.Epic.CompileState: resetNameSupply :: Compile TCM ()
- Agda.Compiler.Epic.CompileState: topBindings :: Compile TCM (Set Var)
- Agda.Compiler.Epic.CompileState: type Compile = StateT CompileState
- Agda.Compiler.Epic.CompileState: unqname :: QName -> Var
- Agda.Compiler.Epic.Compiler: compilerMain :: Interface -> TCM ()
- Agda.Compiler.Epic.Epic: prettyEpic :: Expr -> String
- Agda.Compiler.Epic.Epic: prettyEpicFun :: MonadTCM m => Fun -> Compile m String
- Agda.Compiler.Epic.Erasure: (&&-) :: Relevance -> Relevance -> Relevance
- Agda.Compiler.Epic.Erasure: (||-) :: Relevance -> Relevance -> Relevance
- Agda.Compiler.Epic.Erasure: ErasureState :: Map Var [Relevance] -> Map Var Fun -> ErasureState
- Agda.Compiler.Epic.Erasure: [funs] :: ErasureState -> Map Var Fun
- Agda.Compiler.Epic.Erasure: [relevancies] :: ErasureState -> Map Var [Relevance]
- Agda.Compiler.Epic.Erasure: data ErasureState
- Agda.Compiler.Epic.Erasure: diff :: Eq a => Map k a -> Map k a -> [(k, (a, a))]
- Agda.Compiler.Epic.Erasure: erasure :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Erasure: ignoreForced :: Relevance -> Bool
- Agda.Compiler.Epic.Erasure: infixr 2 ||-
- Agda.Compiler.Epic.Erasure: infixr 3 &&-
- Agda.Compiler.Epic.Erasure: initialRels :: Type -> Relevance -> [Relevance]
- Agda.Compiler.Epic.Erasure: initiate :: Fun -> Erasure (Compile TCM) ()
- Agda.Compiler.Epic.Erasure: isIrr :: Relevance -> Bool
- Agda.Compiler.Epic.Erasure: isRel :: Relevance -> Bool
- Agda.Compiler.Epic.Erasure: relevant :: Monad m => Var -> Expr -> Erasure m Relevance
- Agda.Compiler.Epic.Erasure: removeUnused :: Map Var [Relevance] -> Expr -> Expr
- Agda.Compiler.Epic.Erasure: step :: Integer -> Erasure (Compile TCM) (Map Var [Relevance])
- Agda.Compiler.Epic.Erasure: type Erasure = StateT ErasureState
- Agda.Compiler.Epic.ForceConstrs: forceConstrs :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.ForceConstrs: forceFun :: Fun -> Compile TCM Fun
- Agda.Compiler.Epic.ForceConstrs: makeForcedArgs :: Type -> ForcedArgs
- Agda.Compiler.Epic.Forcing: buildTerm :: Var -> Nat -> Term -> Compile TCM (Expr -> Expr, Var)
- Agda.Compiler.Epic.Forcing: dataParameters :: QName -> Compile TCM Nat
- Agda.Compiler.Epic.Forcing: dataParametersTCM :: QName -> TCM Nat
- Agda.Compiler.Epic.Forcing: findPosition :: Nat -> [Maybe Term] -> Compile TCM (Maybe (Nat, Term))
- Agda.Compiler.Epic.Forcing: forcedExpr :: [Var] -> Telescope -> Expr -> Compile TCM Expr
- Agda.Compiler.Epic.Forcing: insertTele :: (QName, Args) -> Int -> Maybe Type -> Term -> Telescope -> Compile TCM (Telescope, (Telescope, Type, Type))
- Agda.Compiler.Epic.Forcing: mkCon :: QName -> Int -> Term
- Agda.Compiler.Epic.Forcing: piApplyM' :: Type -> Args -> TCM Type
- Agda.Compiler.Epic.Forcing: remForced :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Forcing: replaceForced :: ([Var], [Var]) -> Telescope -> [Var] -> [Maybe Term] -> Expr -> Compile TCM Expr
- Agda.Compiler.Epic.Forcing: report :: Int -> TCM Doc -> Compile TCM ()
- Agda.Compiler.Epic.Forcing: takeTele :: Int -> Telescope -> Telescope
- Agda.Compiler.Epic.Forcing: unifyI :: Telescope -> FlexibleVars -> Type -> Args -> Args -> Compile TCM [Maybe Term]
- Agda.Compiler.Epic.FromAgda: compileClauses :: QName -> Int -> CompiledClauses -> Compile TCM Fun
- Agda.Compiler.Epic.FromAgda: fromAgda :: Maybe Term -> [(QName, Definition)] -> Compile TCM [Fun]
- Agda.Compiler.Epic.FromAgda: reverseCCBody :: Int -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.FromAgda: substLit :: Literal -> Compile TCM Lit
- Agda.Compiler.Epic.FromAgda: substTerm :: [Var] -> Term -> Compile TCM Expr
- Agda.Compiler.Epic.FromAgda: translateDefn :: Maybe Term -> (QName, Definition) -> Compile TCM (Maybe Fun)
- Agda.Compiler.Epic.Injection: (!!!!) :: Ord k => Map k v -> k -> v
- Agda.Compiler.Epic.Injection: (<:) :: Injectible a => a -> a -> ReaderT (Map QName InjectiveFun) (Compile TCM) InjConstraints
- Agda.Compiler.Epic.Injection: IsTag :: Tag -> TagEq
- Agda.Compiler.Epic.Injection: Same :: Int -> TagEq
- Agda.Compiler.Epic.Injection: Tags :: IntMap (Set QName) -> Map QName TagEq -> Tags
- Agda.Compiler.Epic.Injection: [constrGroup] :: Tags -> Map QName TagEq
- Agda.Compiler.Epic.Injection: [eqGroups] :: Tags -> IntMap (Set QName)
- Agda.Compiler.Epic.Injection: addConstraint :: QName -> QName -> InjConstraints -> InjConstraints
- Agda.Compiler.Epic.Injection: class Injectible a
- Agda.Compiler.Epic.Injection: data TagEq
- Agda.Compiler.Epic.Injection: data Tags
- Agda.Compiler.Epic.Injection: emptyC :: InjConstraints
- Agda.Compiler.Epic.Injection: findInjection :: [(QName, Definition)] -> Compile TCM [(QName, Definition)]
- Agda.Compiler.Epic.Injection: initialTags :: Map QName Tag -> [QName] -> Tags
- Agda.Compiler.Epic.Injection: insertAt :: (Nat, Term) -> Term -> Term
- Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible Agda.Syntax.Internal.Term
- Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible a => Agda.Compiler.Epic.Injection.Injectible (Agda.Syntax.Common.Arg a)
- Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible a => Agda.Compiler.Epic.Injection.Injectible (Agda.Syntax.Internal.Elim' a)
- Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible a => Agda.Compiler.Epic.Injection.Injectible [a]
- Agda.Compiler.Epic.Injection: instance GHC.Classes.Eq Agda.Compiler.Epic.Injection.TagEq
- Agda.Compiler.Epic.Injection: isInjective :: QName -> [Clause] -> Compile TCM (Maybe ((QName, InjectiveFun), [(QName, QName)]))
- Agda.Compiler.Epic.Injection: isInjectiveHere :: QName -> Int -> Clause -> Compile TCM InjConstraints
- Agda.Compiler.Epic.Injection: litInt :: Literal -> Bool
- Agda.Compiler.Epic.Injection: litToCon :: Literal -> TCM Term
- Agda.Compiler.Epic.Injection: mergeGroups :: Int -> Int -> Tags -> Compile TCM (Maybe Tags)
- Agda.Compiler.Epic.Injection: nrBinds :: Num i => Pattern -> i
- Agda.Compiler.Epic.Injection: patternToTerm :: Nat -> Pattern -> Term
- Agda.Compiler.Epic.Injection: replaceFunCC :: QName -> CompiledClauses -> Compile TCM ()
- Agda.Compiler.Epic.Injection: setTag :: Int -> Tag -> Tags -> Compile TCM (Maybe Tags)
- Agda.Compiler.Epic.Injection: solve :: [QName] -> [((QName, InjectiveFun), [(QName, QName)])] -> Compile TCM [(QName, InjectiveFun)]
- Agda.Compiler.Epic.Injection: substForDot :: [NamedArg (Pattern' a)] -> Substitution
- Agda.Compiler.Epic.Injection: type InjConstraints = Maybe [(QName, QName)]
- Agda.Compiler.Epic.Injection: unifiable :: QName -> QName -> Compile TCM Bool
- Agda.Compiler.Epic.Injection: unify :: QName -> QName -> Tags -> Compile TCM (Maybe Tags)
- Agda.Compiler.Epic.Injection: unionConstraints :: [InjConstraints] -> InjConstraints
- Agda.Compiler.Epic.Interface: EInterface :: Map QName Tag -> Set Var -> Map QName Bool -> Map QName Int -> Maybe QName -> Map Var RelevantArgs -> Map QName ForcedArgs -> Map QName InjectiveFun -> EInterface
- Agda.Compiler.Epic.Interface: Forced :: Forced
- Agda.Compiler.Epic.Interface: InjectiveFun :: Nat -> Nat -> InjectiveFun
- Agda.Compiler.Epic.Interface: Irr :: Relevance
- Agda.Compiler.Epic.Interface: NotForced :: Forced
- Agda.Compiler.Epic.Interface: PrimTag :: Var -> Tag
- Agda.Compiler.Epic.Interface: Rel :: Relevance
- Agda.Compiler.Epic.Interface: Tag :: Int -> Tag
- Agda.Compiler.Epic.Interface: [conArity] :: EInterface -> Map QName Int
- Agda.Compiler.Epic.Interface: [constrTags] :: EInterface -> Map QName Tag
- Agda.Compiler.Epic.Interface: [defDelayed] :: EInterface -> Map QName Bool
- Agda.Compiler.Epic.Interface: [definitions] :: EInterface -> Set Var
- Agda.Compiler.Epic.Interface: [forcedArgs] :: EInterface -> Map QName ForcedArgs
- Agda.Compiler.Epic.Interface: [injArg] :: InjectiveFun -> Nat
- Agda.Compiler.Epic.Interface: [injArity] :: InjectiveFun -> Nat
- Agda.Compiler.Epic.Interface: [injectiveFuns] :: EInterface -> Map QName InjectiveFun
- Agda.Compiler.Epic.Interface: [mainName] :: EInterface -> Maybe QName
- Agda.Compiler.Epic.Interface: [relevantArgs] :: EInterface -> Map Var RelevantArgs
- Agda.Compiler.Epic.Interface: data EInterface
- Agda.Compiler.Epic.Interface: data Forced
- Agda.Compiler.Epic.Interface: data InjectiveFun
- Agda.Compiler.Epic.Interface: data Relevance
- Agda.Compiler.Epic.Interface: data Tag
- Agda.Compiler.Epic.Interface: forced :: ForcedArgs -> [a] -> [a]
- Agda.Compiler.Epic.Interface: instance Data.Semigroup.Semigroup Agda.Compiler.Epic.Interface.EInterface
- Agda.Compiler.Epic.Interface: instance GHC.Base.Monoid Agda.Compiler.Epic.Interface.EInterface
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Eq Agda.Compiler.Epic.Interface.Forced
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Eq Agda.Compiler.Epic.Interface.InjectiveFun
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Eq Agda.Compiler.Epic.Interface.Relevance
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Eq Agda.Compiler.Epic.Interface.Tag
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Ord Agda.Compiler.Epic.Interface.Relevance
- Agda.Compiler.Epic.Interface: instance GHC.Classes.Ord Agda.Compiler.Epic.Interface.Tag
- Agda.Compiler.Epic.Interface: instance GHC.Show.Show Agda.Compiler.Epic.Interface.EInterface
- Agda.Compiler.Epic.Interface: instance GHC.Show.Show Agda.Compiler.Epic.Interface.Forced
- Agda.Compiler.Epic.Interface: instance GHC.Show.Show Agda.Compiler.Epic.Interface.InjectiveFun
- Agda.Compiler.Epic.Interface: instance GHC.Show.Show Agda.Compiler.Epic.Interface.Relevance
- Agda.Compiler.Epic.Interface: instance GHC.Show.Show Agda.Compiler.Epic.Interface.Tag
- Agda.Compiler.Epic.Interface: notForced :: ForcedArgs -> [a] -> [a]
- Agda.Compiler.Epic.Interface: pairwiseFilter :: [Bool] -> [a] -> [a]
- Agda.Compiler.Epic.Interface: type ForcedArgs = [Forced]
- Agda.Compiler.Epic.Interface: type RelevantArgs = [Relevance]
- Agda.Compiler.Epic.Interface: type Var = String
- Agda.Compiler.Epic.NatDetection: argIsDef :: Type -> QName -> Bool
- Agda.Compiler.Epic.NatDetection: getNatish :: Compile TCM [(ForcedArgs, [QName])]
- Agda.Compiler.Epic.NatDetection: isNatish :: QName -> Defn -> Compile TCM (Maybe (ForcedArgs, [QName]))
- Agda.Compiler.Epic.NatDetection: isRec :: Int -> Type -> QName -> Bool
- Agda.Compiler.Epic.NatDetection: nrRel :: ForcedArgs -> Integer
- Agda.Compiler.Epic.Primitive: PrimTF :: Map QName Var -> (Expr -> [Branch] -> Expr) -> PrimTransform
- Agda.Compiler.Epic.Primitive: [mapCon] :: PrimTransform -> Map QName Var
- Agda.Compiler.Epic.Primitive: [translateCase] :: PrimTransform -> Expr -> [Branch] -> Expr
- Agda.Compiler.Epic.Primitive: boolPrimTF :: [QName] -> PrimTransform
- Agda.Compiler.Epic.Primitive: data PrimTransform
- Agda.Compiler.Epic.Primitive: defName :: Term -> QName
- Agda.Compiler.Epic.Primitive: getBuiltins :: Compile TCM [PrimTransform]
- Agda.Compiler.Epic.Primitive: initialPrims :: Compile TCM ()
- Agda.Compiler.Epic.Primitive: natPrimTF :: ForcedArgs -> [QName] -> PrimTransform
- Agda.Compiler.Epic.Primitive: prFalse :: Var
- Agda.Compiler.Epic.Primitive: prNatEquality :: Var
- Agda.Compiler.Epic.Primitive: prPred :: Var
- Agda.Compiler.Epic.Primitive: prSuc :: Var
- Agda.Compiler.Epic.Primitive: prTrue :: Var
- Agda.Compiler.Epic.Primitive: prZero :: Var
- Agda.Compiler.Epic.Primitive: primExpr :: [PrimTransform] -> Expr -> Compile TCM Expr
- Agda.Compiler.Epic.Primitive: primFun :: [PrimTransform] -> Fun -> Compile TCM Fun
- Agda.Compiler.Epic.Primitive: primNatCaseZD :: Expr -> Expr -> Expr -> Expr
- Agda.Compiler.Epic.Primitive: primNatCaseZS :: Expr -> Expr -> Var -> Expr -> Expr
- Agda.Compiler.Epic.Primitive: primitivise :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Smashing: (+++) :: Telescope -> Telescope -> Telescope
- Agda.Compiler.Epic.Smashing: buildLambda :: (Ord n, Num n) => n -> Expr -> Expr
- Agda.Compiler.Epic.Smashing: defnPars :: Integral n => Defn -> n
- Agda.Compiler.Epic.Smashing: inferable :: Set QName -> QName -> [Arg Term] -> Compile TCM (Maybe Expr)
- Agda.Compiler.Epic.Smashing: inferableTerm :: Set QName -> Term -> Compile TCM (Maybe Expr)
- Agda.Compiler.Epic.Smashing: smash'em :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Smashing: smashable :: Int -> Type -> Compile TCM (Maybe Expr)
- Agda.Compiler.Epic.Static: class Evaluate a
- Agda.Compiler.Epic.Static: etaExpand :: Term -> Compile TCM Term
- Agda.Compiler.Epic.Static: evaluate :: Evaluate a => a -> Compile TCM a
- Agda.Compiler.Epic.Static: evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate Agda.Syntax.Internal.Term
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate (Agda.Syntax.Common.Arg a)
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate (Agda.Syntax.Internal.Abs a)
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate (Agda.Syntax.Internal.Elim' a)
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate [a]
- Agda.Compiler.Epic.Static: normaliseStatic :: CompiledClauses -> Compile TCM CompiledClauses
- Agda.Compiler.HaskellTypes: getHsType :: QName -> TCM HaskellType
- Agda.Compiler.HaskellTypes: getHsVar :: Nat -> TCM HaskellCode
- Agda.Compiler.HaskellTypes: haskellType :: Type -> TCM HaskellType
- Agda.Compiler.HaskellTypes: hsApp :: String -> [HaskellType] -> HaskellType
- Agda.Compiler.HaskellTypes: hsForall :: String -> HaskellType -> HaskellType
- Agda.Compiler.HaskellTypes: hsFun :: HaskellKind -> HaskellKind -> HaskellKind
- Agda.Compiler.HaskellTypes: hsKFun :: HaskellKind -> HaskellKind -> HaskellKind
- Agda.Compiler.HaskellTypes: hsStar :: HaskellKind
- Agda.Compiler.HaskellTypes: hsUnit :: HaskellType
- Agda.Compiler.HaskellTypes: hsVar :: Name -> HaskellType
- Agda.Compiler.HaskellTypes: notAHaskellType :: Type -> TCM a
- Agda.Compiler.HaskellTypes: type HaskellKind = String
- Agda.Compiler.JS.Compiler: compile :: IsMain -> Interface -> TCM ()
- Agda.Compiler.JS.Compiler: compilerMain :: Interface -> TCM ()
- Agda.Compiler.JS.Pretty: instance (Agda.Compiler.JS.Pretty.Pretty a, Agda.Compiler.JS.Pretty.Pretty b) => Agda.Compiler.JS.Pretty.Pretties (Data.Map.Base.Map a b)
- Agda.Compiler.JS.Syntax: [isCoind] :: Export -> Bool
- Agda.Compiler.JS.Syntax: instance Agda.Compiler.JS.Syntax.Globals a => Agda.Compiler.JS.Syntax.Globals (Data.Map.Base.Map k a)
- Agda.Compiler.JS.Syntax: instance Agda.Compiler.JS.Syntax.Uses a => Agda.Compiler.JS.Syntax.Uses (Data.Map.Base.Map k a)
- Agda.Compiler.MAlonzo.Compiler: compile :: Interface -> TCM ()
- Agda.Compiler.MAlonzo.Compiler: compilerMain :: IsMain -> Interface -> TCM ()
- Agda.Compiler.MAlonzo.Compiler: definitions :: Definitions -> TCM [Decl]
- Agda.Compiler.Treeless.DelayCoinduction: delayCoinduction :: TTerm -> Type -> TCM TTerm
- Agda.Compiler.Treeless.DelayCoinduction: outputIsInf :: Maybe CoinductionKit -> Type -> TCM Bool
- Agda.Compiler.Treeless.DelayCoinduction: transform :: CoinductionKit -> TTerm -> Type -> TCM TTerm
- Agda.Compiler.Treeless.DelayCoinduction: underLambdas :: Int -> (TTerm -> TTerm) -> TTerm -> TTerm
- Agda.Compiler.UHC.Bridge: class Serialize a
- Agda.Compiler.UHC.Bridge: ctagCons :: EHCOpts -> CTag
- Agda.Compiler.UHC.Bridge: ctagFalse :: EHCOpts -> CTag
- Agda.Compiler.UHC.Bridge: ctagNil :: EHCOpts -> CTag
- Agda.Compiler.UHC.Bridge: ctagTrue :: EHCOpts -> CTag
- Agda.Compiler.UHC.Bridge: ctagUnit :: CTag
- Agda.Compiler.UHC.Bridge: data CAlt
- Agda.Compiler.UHC.Bridge: data CBind
- Agda.Compiler.UHC.Bridge: data CDataCon
- Agda.Compiler.UHC.Bridge: data CDeclMeta
- Agda.Compiler.UHC.Bridge: data CExport
- Agda.Compiler.UHC.Bridge: data CExpr
- Agda.Compiler.UHC.Bridge: data CImport
- Agda.Compiler.UHC.Bridge: data CModule
- Agda.Compiler.UHC.Bridge: data CPat
- Agda.Compiler.UHC.Bridge: data CPatFld
- Agda.Compiler.UHC.Bridge: data CTag
- Agda.Compiler.UHC.Bridge: data EHCOpts
- Agda.Compiler.UHC.Bridge: data HsName
- Agda.Compiler.UHC.Bridge: defaultEHCOpts :: EHCOpts
- Agda.Compiler.UHC.Bridge: destructCTag :: a -> (HsName -> HsName -> Int -> Int -> a) -> CTag -> a
- Agda.Compiler.UHC.Bridge: disp :: PP_Doc -> Int -> ShowS
- Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.PP Agda.Compiler.UHC.Bridge.CExpr
- Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CExpr
- Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CModule
- Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CTag
- Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.HsName
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.CExpr
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.CTag
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.HsName
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.CExpr
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.CTag
- Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.HsName
- Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.CExpr
- Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.CTag
- Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.HsName
- Agda.Compiler.UHC.Bridge: mkAlt :: CPat -> CExpr -> CAlt
- Agda.Compiler.UHC.Bridge: mkApp :: CExpr -> [CExpr] -> CExpr
- Agda.Compiler.UHC.Bridge: mkBind1 :: HsName -> CExpr -> CBind
- Agda.Compiler.UHC.Bridge: mkBind1Nm1 :: HsName -> CBind
- Agda.Compiler.UHC.Bridge: mkCTag :: HsName -> HsName -> Int -> Int -> CTag
- Agda.Compiler.UHC.Bridge: mkCase :: CExpr -> [CAlt] -> CExpr
- Agda.Compiler.UHC.Bridge: mkChar :: Char -> CExpr
- Agda.Compiler.UHC.Bridge: mkError :: EHCOpts -> String -> CExpr
- Agda.Compiler.UHC.Bridge: mkExport :: HsName -> CExport
- Agda.Compiler.UHC.Bridge: mkHsName :: [String] -> String -> HsName
- Agda.Compiler.UHC.Bridge: mkHsName1 :: String -> HsName
- Agda.Compiler.UHC.Bridge: mkImport :: HsName -> CImport
- Agda.Compiler.UHC.Bridge: mkInt :: EHCOpts -> Int -> CExpr
- Agda.Compiler.UHC.Bridge: mkInteger :: EHCOpts -> Integer -> CExpr
- Agda.Compiler.UHC.Bridge: mkLam :: [HsName] -> CExpr -> CExpr
- Agda.Compiler.UHC.Bridge: mkLet1Plain :: HsName -> CExpr -> CExpr -> CExpr
- Agda.Compiler.UHC.Bridge: mkLet1Strict :: HsName -> CExpr -> CExpr -> CExpr
- Agda.Compiler.UHC.Bridge: mkLetRec :: [CBind] -> CExpr -> CExpr
- Agda.Compiler.UHC.Bridge: mkMain :: HsName -> CExpr
- Agda.Compiler.UHC.Bridge: mkMetaData :: HsName -> [CDataCon] -> CDeclMeta
- Agda.Compiler.UHC.Bridge: mkMetaDataCon :: HsName -> Int -> Int -> CDataCon
- Agda.Compiler.UHC.Bridge: mkMetaDataConFromCTag :: CTag -> Maybe CDataCon
- Agda.Compiler.UHC.Bridge: mkModule :: HsName -> [CExport] -> [CImport] -> [CDeclMeta] -> CExpr -> CModule
- Agda.Compiler.UHC.Bridge: mkPatCon :: CTag -> CPatRest -> [CPatFld] -> CPat
- Agda.Compiler.UHC.Bridge: mkPatFldBind :: (HsName, CExpr) -> CBind -> CPatFld
- Agda.Compiler.UHC.Bridge: mkPatRestEmpty :: CPatRest
- Agda.Compiler.UHC.Bridge: mkString :: EHCOpts -> String -> CExpr
- Agda.Compiler.UHC.Bridge: mkTagTup :: CTag -> [CExpr] -> CExpr
- Agda.Compiler.UHC.Bridge: mkUndefined :: EHCOpts -> CExpr
- Agda.Compiler.UHC.Bridge: mkUniqueHsName :: String -> [String] -> String -> HsName
- Agda.Compiler.UHC.Bridge: mkUnit :: EHCOpts -> CExpr
- Agda.Compiler.UHC.Bridge: mkVar :: HsName -> CExpr
- Agda.Compiler.UHC.Bridge: parseExpr :: EHCOpts -> String -> Either [String] CExpr
- Agda.Compiler.UHC.Bridge: pp :: PP a => a -> PP_Doc
- Agda.Compiler.UHC.Bridge: printModule :: EHCOpts -> CModule -> PP_Doc
- Agda.Compiler.UHC.Bridge: putPPFile :: String -> PP_Doc -> Int -> IO ()
- Agda.Compiler.UHC.Bridge: putSerializeFile :: FilePath -> a -> IO ()
- Agda.Compiler.UHC.Bridge: serialize :: x -> Put
- Agda.Compiler.UHC.Bridge: type PP_Doc = String
- Agda.Compiler.UHC.Bridge: uhcBackendEnabled :: Bool
- Agda.Compiler.UHC.Bridge: unserialize :: Get x
- Agda.Compiler.UHC.CompileState: addExports :: Monad m => [HsName] -> CompileT m ()
- Agda.Compiler.UHC.CompileState: addMetaCon :: QName -> CDataCon -> Compile ()
- Agda.Compiler.UHC.CompileState: addMetaData :: QName -> ([CDataCon] -> CDeclMeta) -> Compile ()
- Agda.Compiler.UHC.CompileState: conArityAndPars :: QName -> TCM (Nat, Nat)
- Agda.Compiler.UHC.CompileState: data CompileT m a
- Agda.Compiler.UHC.CompileState: data CoreMeta
- Agda.Compiler.UHC.CompileState: dataRecCons :: Defn -> [QName]
- Agda.Compiler.UHC.CompileState: freshLocalName :: Monad m => CompileT m HsName
- Agda.Compiler.UHC.CompileState: getConstrCTag :: QName -> Compile CTag
- Agda.Compiler.UHC.CompileState: getConstrFun :: QName -> Compile HsName
- Agda.Compiler.UHC.CompileState: getCoreName :: QName -> Compile HsName
- Agda.Compiler.UHC.CompileState: getCoreName1 :: QName -> TCM HsName
- Agda.Compiler.UHC.CompileState: getDeclMetas :: Compile [CDeclMeta]
- Agda.Compiler.UHC.CompileState: getExports :: Compile [CExport]
- Agda.Compiler.UHC.CompileState: instance Agda.TypeChecking.Monad.Base.MonadTCM m => Agda.TypeChecking.Monad.Base.MonadTCM (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance Control.Monad.Trans.Class.MonadTrans Agda.Compiler.UHC.CompileState.CompileT
- Agda.Compiler.UHC.CompileState: instance Data.Semigroup.Semigroup Agda.Compiler.UHC.CompileState.CoreMeta
- Agda.Compiler.UHC.CompileState: instance GHC.Base.Functor m => GHC.Base.Functor (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance GHC.Base.Monad m => GHC.Base.Applicative (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance GHC.Base.Monad m => GHC.Base.Monad (Agda.Compiler.UHC.CompileState.CompileT m)
- Agda.Compiler.UHC.CompileState: instance GHC.Base.Monoid Agda.Compiler.UHC.CompileState.CoreMeta
- Agda.Compiler.UHC.CompileState: moduleNameToCoreName :: ModuleName -> HsName
- Agda.Compiler.UHC.CompileState: moduleNameToCoreNameParts :: ModuleName -> [String]
- Agda.Compiler.UHC.CompileState: runCompileT :: MonadIO m => ModuleName -> CompileT m a -> m a
- Agda.Compiler.UHC.CompileState: type Compile = CompileT TCM
- Agda.Compiler.UHC.Compiler: compilerMain :: IsMain -> Interface -> TCM ()
- Agda.Compiler.UHC.FromAgda: BuiltinKit :: (QName -> Bool) -> (QName -> Bool) -> BuiltinKit
- Agda.Compiler.UHC.FromAgda: TTEnv :: [HsName] -> TTEnv
- Agda.Compiler.UHC.FromAgda: [isInt] :: BuiltinKit -> QName -> Bool
- Agda.Compiler.UHC.FromAgda: [isNat] :: BuiltinKit -> QName -> Bool
- Agda.Compiler.UHC.FromAgda: [nmEnv] :: TTEnv -> [HsName]
- Agda.Compiler.UHC.FromAgda: addToEnv :: [HsName] -> TT a -> TT a
- Agda.Compiler.UHC.FromAgda: buildPrimCases :: CExpr -> CExpr -> [TAlt] -> CExpr -> TT CExpr
- Agda.Compiler.UHC.FromAgda: builtinKit :: TCM BuiltinKit
- Agda.Compiler.UHC.FromAgda: compileConAlt :: TAlt -> TT CAlt
- Agda.Compiler.UHC.FromAgda: compilePrim :: TPrim -> CExpr
- Agda.Compiler.UHC.FromAgda: compileTerm :: TTerm -> TT CExpr
- Agda.Compiler.UHC.FromAgda: coreError :: String -> CExpr
- Agda.Compiler.UHC.FromAgda: createMainModule :: ModuleName -> HsName -> CModule
- Agda.Compiler.UHC.FromAgda: data BuiltinKit
- Agda.Compiler.UHC.FromAgda: data TTEnv
- Agda.Compiler.UHC.FromAgda: defaultBranches :: QName -> [TAlt] -> CExpr -> TT [CAlt]
- Agda.Compiler.UHC.FromAgda: fromAgdaModule :: ModuleName -> [ModuleName] -> Interface -> TCM CModule
- Agda.Compiler.UHC.FromAgda: getCTagArity :: CTag -> Int
- Agda.Compiler.UHC.FromAgda: litToCore :: Literal -> CExpr
- Agda.Compiler.UHC.FromAgda: makeConAlt :: QName -> ([HsName] -> TT CExpr) -> TT CAlt
- Agda.Compiler.UHC.FromAgda: mkIfThenElse :: CExpr -> CExpr -> CExpr -> CExpr
- Agda.Compiler.UHC.FromAgda: opts :: EHCOpts
- Agda.Compiler.UHC.FromAgda: runTT :: TT a -> Compile a
- Agda.Compiler.UHC.FromAgda: translateDefn :: (QName, Definition) -> Compile [CBind]
- Agda.Compiler.UHC.FromAgda: type TT = ReaderT TTEnv Compile
- Agda.Compiler.UHC.MagicTypes: HsDataType :: HsName -> HsDataType
- Agda.Compiler.UHC.MagicTypes: HsUnit :: HsDataType
- Agda.Compiler.UHC.MagicTypes: builtinUnitCtor :: HsName
- Agda.Compiler.UHC.MagicTypes: data HsDataType
- Agda.Compiler.UHC.MagicTypes: getMagicTypes :: MagicTypeInfo
- Agda.Compiler.UHC.MagicTypes: type MagicConstrInfo = Map MagicName CTag
- Agda.Compiler.UHC.MagicTypes: type MagicName = String
- Agda.Compiler.UHC.MagicTypes: type MagicTypeInfo = Map MagicName (HsDataType, MagicConstrInfo)
- Agda.Compiler.UHC.Pragmas.Base: CCMagic :: MagicName -> MagicName -> CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: CCNormal :: HsName -> HsName -> Int -> CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: CTMagic :: MagicName -> CoreType
- Agda.Compiler.UHC.Pragmas.Base: CTNormal :: String -> CoreType
- Agda.Compiler.UHC.Pragmas.Base: coreConstrToCTag :: CoreConstr -> Int -> CTag
- Agda.Compiler.UHC.Pragmas.Base: data CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: data CoreType
- Agda.Compiler.UHC.Pragmas.Base: data HsName
- Agda.Compiler.UHC.Pragmas.Base: instance GHC.Classes.Eq Agda.Compiler.UHC.Pragmas.Base.CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: instance GHC.Classes.Eq Agda.Compiler.UHC.Pragmas.Base.CoreType
- Agda.Compiler.UHC.Pragmas.Base: instance GHC.Show.Show Agda.Compiler.UHC.Pragmas.Base.CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: instance GHC.Show.Show Agda.Compiler.UHC.Pragmas.Base.CoreType
- Agda.Compiler.UHC.Pragmas.Base: setTag :: CoreConstr -> Int -> CoreConstr
- Agda.Compiler.UHC.Pragmas.Base: type CoreExpr = String
- Agda.Compiler.UHC.Pragmas.Parse: coreExprToCExpr :: CoreExpr -> Either String CExpr
- Agda.Compiler.UHC.Pragmas.Parse: parseCoreConstrs :: MonadTCM m => CoreType -> [String] -> m [CoreConstr]
- Agda.Compiler.UHC.Pragmas.Parse: parseCoreData :: MonadTCM m => String -> m CoreType
- Agda.Compiler.UHC.Pragmas.Parse: parseCoreExpr :: String -> Either String CoreExpr
- Agda.Compiler.UHC.Primitives: primFunNm :: String -> HsName
- Agda.Compiler.UHC.Primitives: primFunctions :: Map String ((CompileT TCM) CExpr)
- Agda.Interaction.Imports: AllWarnings :: WhichWarnings
- Agda.Interaction.Imports: ErrorWarnings :: WhichWarnings
- Agda.Interaction.Imports: classifyWarning :: Warning -> WhichWarnings
- Agda.Interaction.Imports: classifyWarnings :: [TCWarning] -> ([TCWarning], [TCWarning])
- Agda.Interaction.Imports: data WhichWarnings
- Agda.Interaction.Imports: instance GHC.Classes.Eq Agda.Interaction.Imports.WhichWarnings
- Agda.Interaction.Imports: instance GHC.Classes.Ord Agda.Interaction.Imports.WhichWarnings
- Agda.Interaction.InteractionTop: GHC :: Backend
- Agda.Interaction.InteractionTop: GHCNoMain :: Backend
- Agda.Interaction.InteractionTop: JS :: Backend
- Agda.Interaction.InteractionTop: data Backend
- Agda.Interaction.InteractionTop: instance GHC.Classes.Eq Agda.Interaction.InteractionTop.Backend
- Agda.Interaction.InteractionTop: instance GHC.Read.Read Agda.Interaction.InteractionTop.Backend
- Agda.Interaction.InteractionTop: instance GHC.Show.Show Agda.Interaction.InteractionTop.Backend
- Agda.Interaction.Library.Parse: stripComments :: String -> String
- Agda.Interaction.Options: [optEpicCompile] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optEpicFlags] :: CommandLineOptions -> [String]
- Agda.Interaction.Options: [optGhcCallGhc] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optGhcCompile] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optGhcFlags] :: CommandLineOptions -> [String]
- Agda.Interaction.Options: [optJSCompile] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optUHCBin] :: CommandLineOptions -> Maybe FilePath
- Agda.Interaction.Options: [optUHCCallUHC] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optUHCCompile] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optUHCFlags] :: CommandLineOptions -> [String]
- Agda.Interaction.Options: [optUHCTextualCore] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optUHCTraceLevel] :: CommandLineOptions -> Int
- Agda.Syntax.Abstract: CompiledDeclareDataPragma :: QName -> String -> Pragma
- Agda.Syntax.Abstract: CompiledEpicPragma :: QName -> String -> Pragma
- Agda.Syntax.Common: UnusedArg :: Relevance
- Agda.Syntax.Common: [argInfoOverlappable] :: ArgInfo -> Bool
- Agda.Syntax.Common: irrelevantOrUnused :: Relevance -> Bool
- Agda.Syntax.Common: notHidden :: LensHiding a => a -> Bool
- Agda.Syntax.Concrete: CompiledDeclareDataPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: CompiledEpicPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete.Definitions: instance Agda.Utils.Except.Error Agda.Syntax.Concrete.Definitions.DeclarationException
- Agda.Syntax.Concrete.Definitions: type Nice = StateT NiceEnv (Either DeclarationException)
- Agda.Syntax.Concrete.Name: fromTopLevelModuleName :: TopLevelModuleName -> QName
- Agda.Syntax.Concrete.Name: newtype TopLevelModuleName
- Agda.Syntax.Concrete.Operators.Parser: notPlaceholder :: Parser e e
- Agda.Syntax.Concrete.Operators.Parser: sat' :: (e -> Bool) -> Parser e e
- Agda.Syntax.Concrete.Operators.Parser.Monad: annotate :: (Doc -> Doc) -> Parser tok a -> Parser tok a
- Agda.Syntax.Concrete.Operators.Parser.Monad: tok :: (Eq tok, Show tok) => MaybePlaceholder tok -> Parser tok (MaybePlaceholder tok)
- Agda.Syntax.Concrete.Operators.Parser.Monad: token :: Parser tok (MaybePlaceholder tok)
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Notation.Notation
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Positivity.Occurrence.Occurrence
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty [Agda.Syntax.Concrete.Declaration]
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty [Agda.Syntax.Concrete.Pattern]
- Agda.Syntax.Info: instance (GHC.Show.Show Agda.Syntax.Concrete.OpenShortHand, GHC.Show.Show Agda.Syntax.Concrete.ImportDirective) => GHC.Show.Show Agda.Syntax.Info.ModuleInfo
- Agda.Syntax.Internal: [clauseRange] :: Clause -> Range
- Agda.Syntax.Internal: [eqtLevel] :: EqualityView -> Arg Term
- Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Internal.Elim
- Agda.Syntax.Internal.Generic: traverseTerm :: TermLike a => (Term -> Term) -> a -> a
- Agda.Syntax.Internal.Names: namesInFoldable :: (Foldable f, NamesIn a) => f a -> Set QName
- Agda.Syntax.Parser.Lexer: instance GHC.Base.Functor Agda.Syntax.Parser.Lexer.AlexLastAcc
- Agda.Syntax.Parser.Literate: [layerType] :: Layer -> LayerType
- Agda.Syntax.Parser.Literate: data LayerType
- Agda.Syntax.Parser.Literate: instance GHC.Classes.Eq Agda.Syntax.Parser.Literate.LayerType
- Agda.Syntax.Parser.Literate: instance GHC.Show.Show Agda.Syntax.Parser.Literate.LayerType
- Agda.Syntax.Parser.Tokens: KwCOMPILED_DECLARE_DATA :: Keyword
- Agda.Syntax.Parser.Tokens: KwCOMPILED_EPIC :: Keyword
- Agda.Syntax.Position: instance (GHC.Classes.Ord a, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Data.Set.Base.Set a)
- Agda.Syntax.Position: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Data.Map.Base.Map k a)
- Agda.Syntax.Scope.Base: ShadowedVar :: Name -> [AbstractName] -> LocalVar
- Agda.Syntax.Scope.Monad: getContextPrecedence :: ScopeM Precedence
- Agda.Syntax.Scope.Monad: setContextPrecedence :: Precedence -> ScopeM ()
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.PatternVars (Agda.Syntax.Abstract.Pattern' e)
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.PatternVars a => Agda.Syntax.Translation.ConcreteToAbstract.PatternVars (Agda.Syntax.Common.Arg a)
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.PatternVars a => Agda.Syntax.Translation.ConcreteToAbstract.PatternVars (Agda.Syntax.Common.Named n a)
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.PatternVars a => Agda.Syntax.Translation.ConcreteToAbstract.PatternVars (Agda.Syntax.Concrete.FieldAssignment' a)
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.PatternVars a => Agda.Syntax.Translation.ConcreteToAbstract.PatternVars [a]
- Agda.Syntax.Translation.InternalToAbstract: instance (Agda.TypeChecking.Free.Free i, Agda.Syntax.Translation.InternalToAbstract.Reify i a) => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Internal.Abs i) (Agda.Syntax.Abstract.Name.Name, a)
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.BlankVars Agda.Syntax.Abstract.Pattern
- Agda.Termination.Monad: ConDBP :: QName -> [DeBruijnPat' a] -> DeBruijnPat' a
- Agda.Termination.Monad: LitDBP :: Literal -> DeBruijnPat' a
- Agda.Termination.Monad: ProjDBP :: ProjOrigin -> QName -> DeBruijnPat' a
- Agda.Termination.Monad: TermDBP :: Term -> DeBruijnPat' a
- Agda.Termination.Monad: VarDBP :: a -> DeBruijnPat' a
- Agda.Termination.Monad: data DeBruijnPat' a
- Agda.Termination.Monad: instance Agda.Syntax.Abstract.Name.IsProjP (Agda.Termination.Monad.DeBruijnPat' a)
- Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars (Agda.Termination.Monad.Masked Agda.Termination.Monad.DeBruijnPat)
- Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars Agda.Termination.Monad.DeBruijnPat
- Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars Agda.Termination.Monad.DeBruijnPats
- Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars Agda.Termination.Monad.MaskedDeBruijnPats
- Agda.Termination.Monad: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Termination.Monad.DeBruijnPat
- Agda.Termination.Monad: instance GHC.Base.Functor Agda.Termination.Monad.DeBruijnPat'
- Agda.Termination.Monad: instance GHC.Show.Show a => GHC.Show.Show (Agda.Termination.Monad.DeBruijnPat' a)
- Agda.Termination.Monad: raiseDBP :: Int -> DeBruijnPats -> DeBruijnPats
- Agda.Termination.Monad: type DeBruijnPat = DeBruijnPat' Int
- Agda.Termination.Monad: type DeBruijnPats = [DeBruijnPat]
- Agda.Termination.Monad: type MaskedDeBruijnPats = [Masked DeBruijnPat]
- Agda.Termination.TermCheck: type DeBruijnPat = DeBruijnPat' Int
- Agda.TypeChecking.CompiledClause: data CompiledClauses
- Agda.TypeChecking.CompiledClause: instance Agda.Utils.Pretty.Pretty a => GHC.Show.Show (Agda.TypeChecking.CompiledClause.Case a)
- Agda.TypeChecking.CompiledClause: instance GHC.Base.Monoid c => Data.Semigroup.Semigroup (Agda.TypeChecking.CompiledClause.WithArity c)
- Agda.TypeChecking.CompiledClause: instance GHC.Base.Monoid c => GHC.Base.Monoid (Agda.TypeChecking.CompiledClause.WithArity c)
- Agda.TypeChecking.CompiledClause: instance GHC.Base.Monoid m => Data.Semigroup.Semigroup (Agda.TypeChecking.CompiledClause.Case m)
- Agda.TypeChecking.CompiledClause: instance GHC.Base.Monoid m => GHC.Base.Monoid (Agda.TypeChecking.CompiledClause.Case m)
- Agda.TypeChecking.CompiledClause: instance GHC.Show.Show Agda.TypeChecking.CompiledClause.CompiledClauses
- Agda.TypeChecking.Coverage.Match: instance GHC.Base.Monoid a => Data.Semigroup.Semigroup (Agda.TypeChecking.Coverage.Match.Match a)
- Agda.TypeChecking.Coverage.Match: instance GHC.Base.Monoid a => GHC.Base.Monoid (Agda.TypeChecking.Coverage.Match.Match a)
- Agda.TypeChecking.Coverage.SplitTree: instance GHC.Show.Show a => GHC.Show.Show (Agda.TypeChecking.Coverage.SplitTree.SplitTree' a)
- Agda.TypeChecking.Coverage.SplitTree: instance GHC.Show.Show a => GHC.Show.Show (Agda.TypeChecking.Coverage.SplitTree.SplitTreeLabel a)
- Agda.TypeChecking.Datatypes: IsData :: DataOrRecord
- Agda.TypeChecking.Datatypes: IsRecord :: DataOrRecord
- Agda.TypeChecking.Datatypes: data DataOrRecord
- Agda.TypeChecking.Datatypes: getConstructorArity :: QName -> TCM Nat
- Agda.TypeChecking.Datatypes: instance GHC.Classes.Eq Agda.TypeChecking.Datatypes.DataOrRecord
- Agda.TypeChecking.Datatypes: instance GHC.Classes.Ord Agda.TypeChecking.Datatypes.DataOrRecord
- Agda.TypeChecking.Datatypes: instance GHC.Show.Show Agda.TypeChecking.Datatypes.DataOrRecord
- Agda.TypeChecking.Free: allRelevantOrUnusedVars :: Free' a VarSet => a -> VarSet
- Agda.TypeChecking.Free: allRelevantOrUnusedVarsIgnoring :: Free' a VarSet => IgnoreSorts -> a -> VarSet
- Agda.TypeChecking.Free: class Free' a c
- Agda.TypeChecking.Free: type Free a = Free' a Any
- Agda.TypeChecking.Free: type FreeV a = Free' a FreeVars
- Agda.TypeChecking.Free: type FreeVS a = Free' a VarSet
- Agda.TypeChecking.Free.Lazy: [feBinders] :: FreeEnv c -> !Int
- Agda.TypeChecking.Free.Lazy: class Free' a c
- Agda.TypeChecking.Free.Lazy: instance (Agda.TypeChecking.Free.Lazy.Free' a c, Agda.TypeChecking.Free.Lazy.Free' b c) => Agda.TypeChecking.Free.Lazy.Free' (a, b) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.Clause c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.EqualityView c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.Level c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.LevelAtom c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.PlusLevel c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.Sort c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.Term c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Common.Arg a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Common.Dom a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Abs a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Elim' a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Tele a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Type' a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (GHC.Base.Maybe a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' [a] c
- Agda.TypeChecking.Free.Lazy: instance GHC.Base.Monoid c => Data.Semigroup.Semigroup (Agda.TypeChecking.Free.Lazy.FreeM c)
- Agda.TypeChecking.Free.Lazy: instance GHC.Base.Monoid c => GHC.Base.Monoid (Agda.TypeChecking.Free.Lazy.FreeM c)
- Agda.TypeChecking.Monad.Base: CantSplit :: QName -> Telescope -> Args -> Args -> SplitError
- Agda.TypeChecking.Monad.Base: CompiledRep :: Maybe HaskellRepresentation -> Maybe HaskellExport -> Maybe EpicCode -> Maybe JSCode -> Maybe CoreRepresentation -> CompiledRepresentation
- Agda.TypeChecking.Monad.Base: CoverageCantSplitIrrelevantType :: Type -> TypeError
- Agda.TypeChecking.Monad.Base: CoverageCantSplitOn :: QName -> Telescope -> Args -> Args -> TypeError
- Agda.TypeChecking.Monad.Base: CoverageCantSplitType :: Type -> TypeError
- Agda.TypeChecking.Monad.Base: CoverageFailure :: QName -> [[NamedArg DeBruijnPattern]] -> TypeError
- Agda.TypeChecking.Monad.Base: CrConstr :: CoreConstr -> CoreRepresentation
- Agda.TypeChecking.Monad.Base: CrDefn :: CoreExpr -> CoreRepresentation
- Agda.TypeChecking.Monad.Base: CrType :: CoreType -> CoreRepresentation
- Agda.TypeChecking.Monad.Base: HeterogeneousEquality :: Term -> Type -> Term -> Type -> TypeError
- Agda.TypeChecking.Monad.Base: HsDefn :: HaskellType -> HaskellCode -> HaskellRepresentation
- Agda.TypeChecking.Monad.Base: HsExport :: HaskellType -> String -> HaskellExport
- Agda.TypeChecking.Monad.Base: HsType :: HaskellType -> HaskellRepresentation
- Agda.TypeChecking.Monad.Base: IncompletePatternMatching :: Term -> [Elim] -> TypeError
- Agda.TypeChecking.Monad.Base: IndexVariablesNotDistinct :: [Nat] -> [Arg Term] -> TypeError
- Agda.TypeChecking.Monad.Base: IndicesFreeInParameters :: [Nat] -> [Arg Term] -> [Arg Term] -> TypeError
- Agda.TypeChecking.Monad.Base: IndicesNotConstructorApplications :: [Arg Term] -> TypeError
- Agda.TypeChecking.Monad.Base: NotInductive :: Term -> TypeError
- Agda.TypeChecking.Monad.Base: OperatorChangeMessage :: TypeError -> TypeError
- Agda.TypeChecking.Monad.Base: UnificationRecursiveEq :: Type -> Int -> Term -> TypeError
- Agda.TypeChecking.Monad.Base: WithoutKError :: Type -> Term -> Term -> TypeError
- Agda.TypeChecking.Monad.Base: [compiledCore] :: CompiledRepresentation -> Maybe CoreRepresentation
- Agda.TypeChecking.Monad.Base: [compiledEpic] :: CompiledRepresentation -> Maybe EpicCode
- Agda.TypeChecking.Monad.Base: [compiledHaskell] :: CompiledRepresentation -> Maybe HaskellRepresentation
- Agda.TypeChecking.Monad.Base: [compiledJS] :: CompiledRepresentation -> Maybe JSCode
- Agda.TypeChecking.Monad.Base: [exportHaskell] :: CompiledRepresentation -> Maybe HaskellExport
- Agda.TypeChecking.Monad.Base: [iHaskellCode] :: Interface -> [String]
- Agda.TypeChecking.Monad.Base: [iHaskellImportsUHC] :: Interface -> Set String
- Agda.TypeChecking.Monad.Base: [iHaskellImports] :: Interface -> Set String
- Agda.TypeChecking.Monad.Base: [recRecursive] :: Defn -> Bool
- Agda.TypeChecking.Monad.Base: [stPostSolvedInteractionPoints] :: PostScopeState -> !InteractionPoints
- Agda.TypeChecking.Monad.Base: [stPreHaskellCode] :: PreScopeState -> ![String]
- Agda.TypeChecking.Monad.Base: [stPreHaskellImportsUHC] :: PreScopeState -> !(Set String)
- Agda.TypeChecking.Monad.Base: [stPreHaskellImports] :: PreScopeState -> !(Set String)
- Agda.TypeChecking.Monad.Base: [tcWarningClosure] :: TCWarning -> Closure Warning
- Agda.TypeChecking.Monad.Base: [tcWarningState] :: TCWarning -> TCState
- Agda.TypeChecking.Monad.Base: data CompiledRepresentation
- Agda.TypeChecking.Monad.Base: data CoreRepresentation
- Agda.TypeChecking.Monad.Base: data HaskellExport
- Agda.TypeChecking.Monad.Base: data HaskellRepresentation
- Agda.TypeChecking.Monad.Base: data Section
- Agda.TypeChecking.Monad.Base: defCoreDef :: Definition -> Maybe CoreRepresentation
- Agda.TypeChecking.Monad.Base: defEpicDef :: Definition -> Maybe EpicCode
- Agda.TypeChecking.Monad.Base: defJSDef :: Definition -> Maybe JSCode
- Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.Candidate c
- Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.Constraint c
- Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.DisplayForm c
- Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.DisplayTerm c
- Agda.TypeChecking.Monad.Base: instance Agda.Utils.Except.Error Agda.TypeChecking.Monad.Base.SplitError
- Agda.TypeChecking.Monad.Base: instance Agda.Utils.Except.Error Agda.TypeChecking.Monad.Base.UnquoteError
- Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.CompiledRepresentation
- Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.CoreRepresentation
- Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.HaskellExport
- Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.HaskellRepresentation
- Agda.TypeChecking.Monad.Base: runPM :: PM a -> TCM a
- Agda.TypeChecking.Monad.Base: stHaskellCode :: Lens' [String] TCState
- Agda.TypeChecking.Monad.Base: stHaskellImports :: Lens' (Set String) TCState
- Agda.TypeChecking.Monad.Base: stHaskellImportsUHC :: Lens' (Set String) TCState
- Agda.TypeChecking.Monad.Base: stSolvedInteractionPoints :: Lens' InteractionPoints TCState
- Agda.TypeChecking.Monad.Base: tcWarning :: TCWarning -> Warning
- Agda.TypeChecking.Monad.Base: type EpicCode = String
- Agda.TypeChecking.Monad.Base: type HaskellCode = String
- Agda.TypeChecking.Monad.Base: type HaskellType = String
- Agda.TypeChecking.Monad.Base: type JSCode = String
- Agda.TypeChecking.Monad.Base: warning :: MonadTCM tcm => Warning -> tcm ()
- Agda.TypeChecking.Monad.Base: warning_ :: MonadTCM tcm => Warning -> tcm TCWarning
- Agda.TypeChecking.Monad.Constraints: currentProblem :: TCM ProblemId
- Agda.TypeChecking.Monad.Exception: ExceptionT :: m (Either err a) -> ExceptionT err m a
- Agda.TypeChecking.Monad.Exception: [runExceptionT] :: ExceptionT err m a -> m (Either err a)
- Agda.TypeChecking.Monad.Exception: catchException :: MonadException err m => m a -> (err -> m a) -> m a
- Agda.TypeChecking.Monad.Exception: class Error err => MonadException err m | m -> err
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, Agda.TypeChecking.Monad.Base.MonadTCM tcm) => Agda.TypeChecking.Monad.Base.MonadTCM (Agda.TypeChecking.Monad.Exception.ExceptionT err tcm)
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, Control.Monad.Error.Class.MonadError err' m) => Control.Monad.Error.Class.MonadError err' (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, Control.Monad.IO.Class.MonadIO m) => Control.Monad.IO.Class.MonadIO (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (Agda.Utils.Except.Error err, GHC.Base.Applicative m, GHC.Base.Monad m) => GHC.Base.Applicative (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.TypeChecking.Monad.Exception.MonadException err m) => Agda.TypeChecking.Monad.Exception.MonadException err (Control.Monad.Trans.Reader.ReaderT r m)
- Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.TypeChecking.Monad.Exception.MonadException err m) => Agda.TypeChecking.Monad.Exception.MonadException err (Control.Monad.Trans.State.Lazy.StateT s m)
- Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.TypeChecking.Monad.Exception.MonadException err m, GHC.Base.Monoid w) => Agda.TypeChecking.Monad.Exception.MonadException err (Control.Monad.Trans.Writer.Lazy.WriterT w m)
- Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.Utils.Except.Error err) => Agda.TypeChecking.Monad.Exception.MonadException err (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.Utils.Except.Error err) => GHC.Base.Monad (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Exception: instance Control.Monad.Trans.Class.MonadTrans (Agda.TypeChecking.Monad.Exception.ExceptionT err)
- Agda.TypeChecking.Monad.Exception: instance GHC.Base.Functor f => GHC.Base.Functor (Agda.TypeChecking.Monad.Exception.ExceptionT err f)
- Agda.TypeChecking.Monad.Exception: newtype ExceptionT err m a
- Agda.TypeChecking.Monad.Exception: throwException :: MonadException err m => err -> m a
- Agda.TypeChecking.Monad.Options: class (Functor m, Applicative m, Monad m) => HasOptions m
- Agda.TypeChecking.Monad.Options: commandLineOptions :: HasOptions m => m CommandLineOptions
- Agda.TypeChecking.Monad.Options: displayDebugMessage :: MonadTCM tcm => Int -> String -> tcm ()
- Agda.TypeChecking.Monad.Options: instance Control.Monad.IO.Class.MonadIO m => Agda.TypeChecking.Monad.Options.HasOptions (Agda.TypeChecking.Monad.Base.TCMT m)
- Agda.TypeChecking.Monad.Options: pragmaOptions :: HasOptions m => m PragmaOptions
- Agda.TypeChecking.Monad.Options: reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
- Agda.TypeChecking.Monad.Options: reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> TCM Doc -> tcm ()
- Agda.TypeChecking.Monad.Options: reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
- Agda.TypeChecking.Monad.Options: verboseBracket :: MonadTCM tcm => VerboseKey -> Int -> String -> TCM a -> tcm a
- Agda.TypeChecking.Monad.Signature: addCoreConstr :: QName -> CoreConstr -> TCM ()
- Agda.TypeChecking.Monad.Signature: addEpicCode :: QName -> EpicCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: ensureNoCompiledHaskell :: QName -> TCM ()
- Agda.TypeChecking.Monad.Signature: instance (Agda.TypeChecking.Monad.Signature.HasConstInfo m, Agda.Utils.Except.Error err) => Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.TypeChecking.Monad.Exception.ExceptionT err m)
- Agda.TypeChecking.Monad.Signature: sortOfConst :: QName -> TCM Sort
- Agda.TypeChecking.Monad.State: getHaskellImports :: TCM (Set String)
- Agda.TypeChecking.Monad.State: getHaskellImportsUHC :: TCM (Set String)
- Agda.TypeChecking.Polarity: mkUnused :: Relevance -> Relevance
- Agda.TypeChecking.Polarity: nonvariantToUnusedArg :: [Polarity] -> Type -> TCM Type
- Agda.TypeChecking.Polarity: nonvariantToUnusedArgInClause :: [Polarity] -> Clause -> Clause
- Agda.TypeChecking.Polarity: nonvariantToUnusedArgInDef :: [Polarity] -> Defn -> Defn
- Agda.TypeChecking.Positivity: etaExpandClause :: Nat -> Clause -> Clause
- Agda.TypeChecking.Positivity: instance GHC.Show.Show Agda.TypeChecking.Positivity.Node
- Agda.TypeChecking.Pretty: instance (Agda.TypeChecking.Pretty.PrettyTCM k, Agda.TypeChecking.Pretty.PrettyTCM v) => Agda.TypeChecking.Pretty.PrettyTCM (Data.Map.Base.Map k v)
- Agda.TypeChecking.Pretty: instance (GHC.Show.Show a, Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Substitute.Class.Subst a a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Substitution' a)
- Agda.TypeChecking.Pretty: raisePatVars :: Int -> NLPat -> NLPat
- Agda.TypeChecking.Pretty: raisePatVarsInType :: Int -> NLPType -> NLPType
- Agda.TypeChecking.Records: recRecursive_ :: Defn -> Bool
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate e => Agda.TypeChecking.Reduce.Instantiate (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull e => Agda.TypeChecking.Reduce.InstantiateFull (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise e => Agda.TypeChecking.Reduce.Normalise (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce e => Agda.TypeChecking.Reduce.Reduce (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify e => Agda.TypeChecking.Reduce.Simplify (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce.Monad: instance Agda.TypeChecking.Monad.Options.HasOptions Agda.TypeChecking.Monad.Base.ReduceM
- Agda.TypeChecking.Reduce.Monad: traceSDoc :: VerboseKey -> Int -> TCM Doc -> ReduceM a -> ReduceM a
- Agda.TypeChecking.Reduce.Monad: traceSLn :: HasOptions m => VerboseKey -> Int -> String -> m a -> m a
- Agda.TypeChecking.Rewriting: class KillCtxId a
- Agda.TypeChecking.Rewriting: instance (GHC.Base.Functor f, Agda.TypeChecking.Rewriting.KillCtxId a) => Agda.TypeChecking.Rewriting.KillCtxId (f a)
- Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.NLPType c
- Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Free.Lazy.Free' Agda.TypeChecking.Monad.Base.NLPat c
- Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Rewriting.KillCtxId Agda.TypeChecking.Monad.Base.NLPType
- Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Rewriting.KillCtxId Agda.TypeChecking.Monad.Base.NLPat
- Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Rewriting.KillCtxId Agda.TypeChecking.Monad.Base.RewriteRule
- Agda.TypeChecking.Rewriting: killCtxId :: KillCtxId a => a -> a
- Agda.TypeChecking.Rewriting: rebindLocalRewriteRules :: TCM ()
- Agda.TypeChecking.Rewriting.NonLinMatch: class RaiseNLP a where raiseNLP = raiseNLPFrom 0
- Agda.TypeChecking.Rewriting.NonLinMatch: instance (Agda.TypeChecking.Rewriting.NonLinMatch.Match a b, Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a, Agda.TypeChecking.Substitute.Class.Subst t2 b) => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Monad.Options.HasOptions Agda.TypeChecking.Rewriting.NonLinMatch.NLM
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP Agda.TypeChecking.Monad.Base.NLPType
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP Agda.TypeChecking.Monad.Base.NLPat
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Common.Arg a)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Common.Dom a)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (GHC.Base.Maybe a)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP [a]
- Agda.TypeChecking.Rewriting.NonLinMatch: raiseNLP :: RaiseNLP a => Int -> a -> a
- Agda.TypeChecking.Rewriting.NonLinMatch: raiseNLPFrom :: RaiseNLP a => Int -> Int -> a -> a
- Agda.TypeChecking.Rewriting.NonLinMatch: traceSDocNLM :: VerboseKey -> Int -> TCM Doc -> NLM a -> NLM a
- Agda.TypeChecking.Rules.Def: containsAbsurdPattern :: Pattern -> Bool
- Agda.TypeChecking.Rules.LHS.AsPatterns: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.AsPatterns.ElimType
- Agda.TypeChecking.Rules.LHS.Problem: defaultFlexibleVar :: a -> FlexibleVar a
- Agda.TypeChecking.Rules.LHS.Problem: flexibleVarFromHiding :: Hiding -> a -> FlexibleVar a
- Agda.TypeChecking.Rules.LHS.Unify: unifyIndices_ :: MonadTCM tcm => Telescope -> FlexibleVars -> Type -> Args -> Args -> tcm (Telescope, PatternSubstitution, [NamedArg DeBruijnPattern])
- 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: icode15 :: (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, EmbPrj o) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> 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: 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: valu15 :: (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, EmbPrj o) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> p) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R p
- 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.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 Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Sequence.Seq a)
- 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.Compiler.UHC.Bridge.HsName
- Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.UHC.Pragmas.Base.CoreConstr
- Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.UHC.Pragmas.Base.CoreType
- 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.CoreRepresentation
- 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.SizedTypes.Syntax: instance (GHC.Show.Show r, GHC.Show.Show f) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.Constraint' r f)
- Agda.TypeChecking.SizedTypes.Syntax: instance (GHC.Show.Show r, GHC.Show.Show f) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.Syntax: instance Agda.TypeChecking.SizedTypes.Syntax.Substitute r f a => Agda.TypeChecking.SizedTypes.Syntax.Substitute r f (Data.Map.Base.Map k a)
- Agda.TypeChecking.SizedTypes.Syntax: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.Syntax.Polarity
- Agda.TypeChecking.SizedTypes.Syntax: instance GHC.Show.Show flex => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.PolarityAssignment flex)
- Agda.TypeChecking.SizedTypes.Syntax: type Solution rigid flex = Map flex (SizeExpr' rigid flex)
- Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Show.Show rigid, GHC.Show.Show flex) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex)
- Agda.TypeChecking.Substitute: instance (GHC.Classes.Ord k, Agda.TypeChecking.Substitute.Class.Subst t a) => Agda.TypeChecking.Substitute.Class.Subst t (Data.Map.Base.Map k a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Abstract v => Agda.TypeChecking.Substitute.Class.Abstract (Data.Map.Base.Map k v)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Apply v => Agda.TypeChecking.Substitute.Class.Apply (Data.Map.Base.Map k v)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.NLPType
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.NLPat
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.RewriteRule
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.TeleNoAbs Agda.TypeChecking.Substitute.ListTel
- Agda.TypeChecking.Substitute: telFromList :: ListTel -> Telescope
- Agda.TypeChecking.Substitute: telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope
- Agda.TypeChecking.Substitute: telToArgs :: Telescope -> [Arg ArgName]
- Agda.TypeChecking.Substitute: telToList :: Telescope -> ListTel
- Agda.TypeChecking.Substitute: type ListTel = ListTel' ArgName
- Agda.TypeChecking.Substitute: type ListTel' a = [Dom (a, Type)]
- Agda.TypeChecking.Telescope: intro1 :: (MonadTCM tcm) => Type -> (Type -> tcm a) -> tcm a
- Agda.Utils.Maybe: allJustsOrNothings :: [Maybe a] -> Maybe (Maybe [a])
- Agda.Utils.Maybe.Strict: instance GHC.Base.Monoid a => Data.Semigroup.Semigroup (Data.Strict.Maybe.Maybe a)
- Agda.Utils.Maybe.Strict: instance GHC.Base.Monoid a => GHC.Base.Monoid (Data.Strict.Maybe.Maybe a)
- Agda.Utils.Monad: modify' :: MonadState s m => (s -> s) -> m ()
- Agda.Utils.Monad: thread :: (a -> Cont r b) -> [a] -> Cont r [b]
- Agda.Utils.Monad: type Cont r a = (a -> r) -> r
- Agda.Utils.Monad: unless_ :: Monad m => Bool -> m a -> m ()
- Agda.Utils.Monad: when_ :: Monad m => Bool -> m a -> m ()
- Agda.Utils.Monad: zipWithM' :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c]
- Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.IntMap.Base.IntMap a)
- Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Map.Base.Map k a)
- Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Sequence.Seq a)
- Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Set.Base.Set a)
- Agda.Utils.Null: instance Agda.Utils.Null.Null Data.IntSet.Base.IntSet
- Agda.Utils.PartialOrd: instance GHC.Classes.Ord a => Agda.Utils.PartialOrd.PartialOrd (Agda.Utils.PartialOrd.Inclusion (Data.Set.Base.Set a))
- Agda.Utils.Permutation: instance Agda.Utils.Permutation.InversePermute [GHC.Base.Maybe a] (Data.IntMap.Base.IntMap a)
- Agda.Utils.Pretty: instance Agda.Utils.Pretty.Pretty GHC.Base.String
- Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton (GHC.Types.Int, a) (Data.IntMap.Base.IntMap a)
- Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton (k, a) (Data.Map.Base.Map k a)
- Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton GHC.Types.Int Data.IntSet.Base.IntSet
- Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton a (Data.Sequence.Seq a)
- Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton a (Data.Set.Base.Set a)
- Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.IntMap.Base.IntMap a)
- Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Map.Base.Map k a)
- Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Sequence.Seq a)
- Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Set.Base.Set a)
- Agda.Utils.Size: instance Agda.Utils.Size.Sized Data.IntSet.Base.IntSet
+ Agda.Auto.Auto: AutoResult :: AutoProgress -> Maybe String -> AutoResult
+ Agda.Auto.Auto: FunClauses :: [String] -> AutoProgress
+ Agda.Auto.Auto: Refinement :: String -> AutoProgress
+ Agda.Auto.Auto: Solutions :: [(InteractionId, String)] -> AutoProgress
+ Agda.Auto.Auto: [autoMessage] :: AutoResult -> Maybe String
+ Agda.Auto.Auto: [autoProgress] :: AutoResult -> AutoProgress
+ Agda.Auto.Auto: data AutoProgress
+ Agda.Auto.Auto: data AutoResult
+ Agda.Auto.CaseSplit: class Lift t
+ Agda.Auto.CaseSplit: class LocalTerminationEnv a
+ Agda.Auto.CaseSplit: class Replace o t u | t u -> o
+ Agda.Auto.CaseSplit: class Unify o t | t -> o
+ Agda.Auto.CaseSplit: instance (Agda.Auto.CaseSplit.LocalTerminationEnv a, Agda.Auto.CaseSplit.LocalTerminationEnv b) => Agda.Auto.CaseSplit.LocalTerminationEnv (a, b)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Lift (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Lift (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Lift t => Agda.Auto.CaseSplit.Lift (Agda.Auto.NarrowingSearch.MM t r)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Lift t => Agda.Auto.CaseSplit.Lift (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.LocalTerminationEnv (Agda.Auto.CaseSplit.CSPatI o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.LocalTerminationEnv (Agda.Auto.Syntax.MArgList o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.LocalTerminationEnv (Agda.Auto.Syntax.MExp o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.LocalTerminationEnv a => Agda.Auto.CaseSplit.LocalTerminationEnv (Agda.Auto.CaseSplit.HI a)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.LocalTerminationEnv a => Agda.Auto.CaseSplit.LocalTerminationEnv [a]
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Replace o (Agda.Auto.Syntax.ArgList o) (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Replace o (Agda.Auto.Syntax.Exp o) (Agda.Auto.Syntax.MExp o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Replace o t u => Agda.Auto.CaseSplit.Replace o (Agda.Auto.NarrowingSearch.MM t (Agda.Auto.Syntax.RefInfo o)) u
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Replace o t u => Agda.Auto.CaseSplit.Replace o (Agda.Auto.Syntax.Abs t) (Agda.Auto.Syntax.Abs u)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Unify o (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Unify o (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Unify o t => Agda.Auto.CaseSplit.Unify o (Agda.Auto.NarrowingSearch.MM t (Agda.Auto.Syntax.RefInfo o))
+ Agda.Auto.CaseSplit: instance Agda.Auto.CaseSplit.Unify o t => Agda.Auto.CaseSplit.Unify o (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.CaseSplit: instance Agda.Auto.Syntax.Renaming (Agda.Auto.CaseSplit.CSPatI o)
+ Agda.Auto.CaseSplit: instance Agda.Auto.Syntax.Renaming t => Agda.Auto.Syntax.Renaming (Agda.Auto.CaseSplit.HI t)
+ Agda.Auto.CaseSplit: lift' :: Lift t => Nat -> Nat -> t -> t
+ Agda.Auto.CaseSplit: notequal' :: Unify o t => t -> t -> ReaderT (Nat, Nat) (StateT (Assignments o) IO) Bool
+ Agda.Auto.CaseSplit: replace' :: Replace o t u => Nat -> MExp o -> t -> Reader (Nat, Nat) u
+ Agda.Auto.CaseSplit: sizeAndBoundVars :: LocalTerminationEnv a => a -> (Sum Nat, [Nat])
+ Agda.Auto.CaseSplit: type Assignments o = [(Nat, Exp o)]
+ Agda.Auto.CaseSplit: unify :: Unify o t => t -> t -> Maybe (Assignments o)
+ Agda.Auto.CaseSplit: unify' :: Unify o t => t -> t -> StateT (Assignments o) Maybe ()
+ Agda.Auto.CaseSplit: unifyVar :: Nat -> Exp o -> StateT (Assignments o) Maybe ()
+ Agda.Auto.Convert: Hint :: Bool -> QName -> Hint
+ Agda.Auto.Convert: [hintIsConstructor] :: Hint -> Bool
+ Agda.Auto.Convert: [hintQName] :: Hint -> QName
+ Agda.Auto.Convert: class Conversion m a b
+ Agda.Auto.Convert: convert :: Conversion m a b => a -> m b
+ Agda.Auto.Convert: data Hint
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT (Agda.Auto.Syntax.Exp Agda.Auto.Convert.O) Agda.Syntax.Internal.Term
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT (Agda.Auto.Syntax.Exp Agda.Auto.Convert.O) Agda.Syntax.Internal.Type
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT a b => Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT (Agda.Auto.NarrowingSearch.MM a (Agda.Auto.Syntax.RefInfo Agda.Auto.Convert.O)) b
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT a b => Agda.Auto.Convert.Conversion Agda.Auto.Convert.MOT (Agda.Auto.Syntax.Abs a) (Agda.Syntax.Internal.Abs b)
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM (Agda.Syntax.Common.Arg Agda.Syntax.Internal.Pattern) (Agda.Auto.Syntax.Pat Agda.Auto.Convert.O)
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM Agda.Syntax.Internal.Args (Agda.Auto.NarrowingSearch.MM (Agda.Auto.Syntax.ArgList Agda.Auto.Convert.O) (Agda.Auto.Syntax.RefInfo Agda.Auto.Convert.O))
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM Agda.Syntax.Internal.Clause (GHC.Base.Maybe ([Agda.Auto.Syntax.Pat Agda.Auto.Convert.O], Agda.Auto.Syntax.MExp Agda.Auto.Convert.O))
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM Agda.Syntax.Internal.Term (Agda.Auto.Syntax.MExp Agda.Auto.Convert.O)
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM Agda.Syntax.Internal.Type (Agda.Auto.Syntax.MExp Agda.Auto.Convert.O)
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM [Agda.Syntax.Internal.Clause] [([Agda.Auto.Syntax.Pat Agda.Auto.Convert.O], Agda.Auto.Syntax.MExp Agda.Auto.Convert.O)]
+ Agda.Auto.Convert: instance Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM a b => Agda.Auto.Convert.Conversion Agda.Auto.Convert.TOM (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Hiding, b)
+ Agda.Auto.Convert: literalsNotImplemented :: TCM a
+ Agda.Auto.Convert: type MOT = ExceptT String IO
+ Agda.Auto.NarrowingSearch: Cost :: Int -> Cost
+ Agda.Auto.NarrowingSearch: Move :: Cost -> RefCreateEnv blk a -> Move' blk a
+ Agda.Auto.NarrowingSearch: Prio :: Int -> Prio
+ Agda.Auto.NarrowingSearch: RefCreateEnv :: StateT ((IORef [SubConstraints blk]), Int) IO a -> RefCreateEnv blk a
+ Agda.Auto.NarrowingSearch: [getCost] :: Cost -> Int
+ Agda.Auto.NarrowingSearch: [getPrio] :: Prio -> Int
+ Agda.Auto.NarrowingSearch: [moveCost] :: Move' blk a -> Cost
+ Agda.Auto.NarrowingSearch: [moveNext] :: Move' blk a -> RefCreateEnv blk a
+ Agda.Auto.NarrowingSearch: [runRefCreateEnv] :: RefCreateEnv blk a -> StateT ((IORef [SubConstraints blk]), Int) IO a
+ Agda.Auto.NarrowingSearch: data Move' blk a
+ Agda.Auto.NarrowingSearch: instance GHC.Base.Applicative (Agda.Auto.NarrowingSearch.RefCreateEnv blk)
+ Agda.Auto.NarrowingSearch: instance GHC.Base.Functor (Agda.Auto.NarrowingSearch.RefCreateEnv blk)
+ Agda.Auto.NarrowingSearch: instance GHC.Base.Monad (Agda.Auto.NarrowingSearch.RefCreateEnv blk)
+ Agda.Auto.NarrowingSearch: instance GHC.Classes.Eq Agda.Auto.NarrowingSearch.Cost
+ Agda.Auto.NarrowingSearch: instance GHC.Classes.Eq Agda.Auto.NarrowingSearch.Prio
+ Agda.Auto.NarrowingSearch: instance GHC.Classes.Ord Agda.Auto.NarrowingSearch.Cost
+ Agda.Auto.NarrowingSearch: instance GHC.Classes.Ord Agda.Auto.NarrowingSearch.Prio
+ Agda.Auto.NarrowingSearch: instance GHC.Num.Num Agda.Auto.NarrowingSearch.Cost
+ Agda.Auto.NarrowingSearch: instance GHC.Num.Num Agda.Auto.NarrowingSearch.Prio
+ Agda.Auto.NarrowingSearch: newtype Cost
+ Agda.Auto.NarrowingSearch: newtype Prio
+ Agda.Auto.NarrowingSearch: newtype RefCreateEnv blk a
+ Agda.Auto.NarrowingSearch: rm :: Empty -> MM a b -> a
+ Agda.Auto.Options: AHMModule :: AutoHintMode
+ Agda.Auto.Options: AHMNone :: AutoHintMode
+ Agda.Auto.Options: AutoOptions :: Hints -> TimeOut -> Int -> Mode -> AutoHintMode -> AutoOptions
+ Agda.Auto.Options: C :: AutoToken
+ Agda.Auto.Options: D :: AutoToken
+ Agda.Auto.Options: H :: String -> AutoToken
+ Agda.Auto.Options: L :: AutoToken
+ Agda.Auto.Options: M :: AutoToken
+ Agda.Auto.Options: MCaseSplit :: Mode
+ Agda.Auto.Options: MNormal :: Bool -> Bool -> Mode
+ Agda.Auto.Options: MRefine :: Bool -> Mode
+ Agda.Auto.Options: R :: AutoToken
+ Agda.Auto.Options: S :: Int -> AutoToken
+ Agda.Auto.Options: T :: Int -> AutoToken
+ Agda.Auto.Options: TimeOut :: Int -> TimeOut
+ Agda.Auto.Options: [autoHintMode] :: AutoOptions -> AutoHintMode
+ Agda.Auto.Options: [autoHints] :: AutoOptions -> Hints
+ Agda.Auto.Options: [autoMode] :: AutoOptions -> Mode
+ Agda.Auto.Options: [autoPick] :: AutoOptions -> Int
+ Agda.Auto.Options: [autoTimeOut] :: AutoOptions -> TimeOut
+ Agda.Auto.Options: [getTimeOut] :: TimeOut -> Int
+ Agda.Auto.Options: aoHintMode :: Lens' AutoHintMode AutoOptions
+ Agda.Auto.Options: aoHints :: Lens' Hints AutoOptions
+ Agda.Auto.Options: aoMode :: Lens' Mode AutoOptions
+ Agda.Auto.Options: aoPick :: Lens' Int AutoOptions
+ Agda.Auto.Options: aoTimeOut :: Lens' TimeOut AutoOptions
+ Agda.Auto.Options: autoTokens :: [String] -> [AutoToken]
+ Agda.Auto.Options: data AutoHintMode
+ Agda.Auto.Options: data AutoOptions
+ Agda.Auto.Options: data AutoToken
+ Agda.Auto.Options: data Mode
+ Agda.Auto.Options: initAutoOptions :: AutoOptions
+ Agda.Auto.Options: instance GHC.Show.Show Agda.Auto.Options.TimeOut
+ Agda.Auto.Options: newtype TimeOut
+ Agda.Auto.Options: parseArgs :: String -> AutoOptions
+ Agda.Auto.Options: type Hints = [String]
+ Agda.Auto.SearchControl: [eriInfTypeUnknown] :: ExpRefInfo o -> Bool
+ Agda.Auto.SearchControl: [eriIsEliminand] :: ExpRefInfo o -> Bool
+ Agda.Auto.SearchControl: costUnificationIf :: Bool -> Cost
+ Agda.Auto.SearchControl: eqBeginStep2 :: UId o -> EqReasoningConsts o -> Move o
+ Agda.Auto.SearchControl: eqCong :: UId o -> EqReasoningConsts o -> Move o
+ Agda.Auto.SearchControl: eqEnd :: UId o -> EqReasoningConsts o -> Move o
+ Agda.Auto.SearchControl: eqStep :: UId o -> EqReasoningConsts o -> Move o
+ Agda.Auto.SearchControl: eqSym :: UId o -> EqReasoningConsts o -> Move o
+ Agda.Auto.SearchControl: foldArgs :: [(Hiding, MExp o)] -> MArgList o
+ Agda.Auto.SearchControl: initExpRefInfo :: ExpRefInfo o
+ Agda.Auto.SearchControl: newAbs :: MId -> RefCreateEnv blk (Abs (MM a blk))
+ Agda.Auto.SearchControl: newApp :: UId o -> ConstRef o -> [Hiding] -> RefCreateEnv (RefInfo o) (Exp o)
+ Agda.Auto.SearchControl: newApp' :: UId o -> ConstRef o -> [Hiding] -> [MExp o] -> RefCreateEnv (RefInfo o) (Exp o)
+ Agda.Auto.SearchControl: newArgs :: [Hiding] -> RefCreateEnv (RefInfo o) (MArgList o)
+ Agda.Auto.SearchControl: newArgs' :: [Hiding] -> [MExp o] -> RefCreateEnv (RefInfo o) (MArgList o)
+ Agda.Auto.SearchControl: newLam :: Hiding -> MId -> RefCreateEnv (RefInfo o) (Exp o)
+ Agda.Auto.SearchControl: newPi :: UId o -> Bool -> Hiding -> RefCreateEnv (RefInfo o) (Exp o)
+ Agda.Auto.SearchControl: pickUid :: forall o. [UId o] -> [Maybe (UId o)] -> (Maybe (UId o), Bool)
+ Agda.Auto.SearchControl: type Move o = Move' (RefInfo o) (Exp o)
+ Agda.Auto.Syntax: WithSeenUIds :: [Maybe (UId o)] -> a -> WithSeenUIds a o
+ Agda.Auto.Syntax: [rawValue] :: WithSeenUIds a o -> a
+ Agda.Auto.Syntax: [seenUIds] :: WithSeenUIds a o -> [Maybe (UId o)]
+ Agda.Auto.Syntax: class ExpandMetas t
+ Agda.Auto.Syntax: class FreeVars t
+ Agda.Auto.Syntax: class MetaliseOKH t
+ Agda.Auto.Syntax: class Renaming t
+ Agda.Auto.Syntax: class Weakening t
+ Agda.Auto.Syntax: data HNExp' o
+ Agda.Auto.Syntax: data WithSeenUIds a o
+ Agda.Auto.Syntax: expandMetas :: ExpandMetas t => t -> IO t
+ Agda.Auto.Syntax: freeVars :: FreeVars t => t -> Set Nat
+ Agda.Auto.Syntax: freeVarsOffset :: FreeVars t => Nat -> t -> Set Nat
+ Agda.Auto.Syntax: getConst :: Elr o -> Maybe (ConstRef o)
+ Agda.Auto.Syntax: getVar :: Elr o -> Maybe Nat
+ Agda.Auto.Syntax: instance (Agda.Auto.Syntax.FreeVars a, Agda.Auto.Syntax.FreeVars b) => Agda.Auto.Syntax.FreeVars (a, b)
+ Agda.Auto.Syntax: instance (Agda.Auto.Syntax.Renaming a, Agda.Auto.Syntax.Renaming b) => Agda.Auto.Syntax.Renaming (a, b)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.ExpandMetas (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.ExpandMetas (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.ExpandMetas t => Agda.Auto.Syntax.ExpandMetas (Agda.Auto.NarrowingSearch.MM t a)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.ExpandMetas t => Agda.Auto.Syntax.ExpandMetas (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.FreeVars (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.FreeVars (Agda.Auto.Syntax.Elr o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.FreeVars (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.FreeVars t => Agda.Auto.Syntax.FreeVars (Agda.Auto.NarrowingSearch.MM t a)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.FreeVars t => Agda.Auto.Syntax.FreeVars (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.MetaliseOKH (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.MetaliseOKH (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.MetaliseOKH t => Agda.Auto.Syntax.MetaliseOKH (Agda.Auto.NarrowingSearch.MM t a)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.MetaliseOKH t => Agda.Auto.Syntax.MetaliseOKH (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Renaming (Agda.Auto.Syntax.ArgList o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Renaming (Agda.Auto.Syntax.Elr o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Renaming (Agda.Auto.Syntax.Exp o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Renaming t => Agda.Auto.Syntax.Renaming (Agda.Auto.NarrowingSearch.MM t a)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Renaming t => Agda.Auto.Syntax.Renaming (Agda.Auto.Syntax.Abs t)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Weakening (Agda.Auto.Syntax.Clos a o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Weakening (Agda.Auto.Syntax.Elr o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Weakening (Agda.Auto.Syntax.ICArgList o)
+ Agda.Auto.Syntax: instance Agda.Auto.Syntax.Weakening a => Agda.Auto.Syntax.Weakening (Agda.Auto.Syntax.TrBr a o)
+ Agda.Auto.Syntax: instance GHC.Classes.Eq (Agda.Auto.Syntax.Elr o)
+ Agda.Auto.Syntax: metaliseOKH :: MetaliseOKH t => t -> IO t
+ Agda.Auto.Syntax: rename :: Renaming t => (Nat -> Nat) -> t -> t
+ Agda.Auto.Syntax: renameOffset :: Renaming t => Nat -> (Nat -> Nat) -> t -> t
+ Agda.Auto.Syntax: type HNExp o = WithSeenUIds (HNExp' o) o
+ Agda.Auto.Syntax: weak' :: Weakening t => Nat -> t -> t
+ Agda.Benchmarking: Definition :: QName -> Phase
+ Agda.Benchmarking: OperatorsExpr :: Phase
+ Agda.Benchmarking: OperatorsPattern :: Phase
+ Agda.Benchmarking: TopModule :: TopLevelModuleName -> Phase
+ Agda.Benchmarking: isDefAccount :: Account -> Bool
+ Agda.Benchmarking: isInternalAccount :: Account -> Bool
+ Agda.Benchmarking: isModuleAccount :: Account -> Bool
+ Agda.Compiler.Backend: Backend' :: String -> Maybe String -> opts -> [OptDescr (Flag opts)] -> (opts -> Bool) -> (opts -> TCM env) -> (env -> IsMain -> Map ModuleName mod -> TCM ()) -> (env -> ModuleName -> FilePath -> TCM (Recompile menv mod)) -> (env -> menv -> IsMain -> ModuleName -> [def] -> TCM mod) -> (env -> menv -> Definition -> TCM def) -> Bool -> Backend' opts env menv mod def
+ Agda.Compiler.Backend: IsMain :: IsMain
+ Agda.Compiler.Backend: NotMain :: IsMain
+ Agda.Compiler.Backend: Recompile :: menv -> Recompile menv mod
+ Agda.Compiler.Backend: Skip :: mod -> Recompile menv mod
+ Agda.Compiler.Backend: [Backend] :: Backend' opts env menv mod def -> Backend
+ Agda.Compiler.Backend: [backendName] :: Backend' opts env menv mod def -> String
+ Agda.Compiler.Backend: [backendVersion] :: Backend' opts env menv mod def -> Maybe String
+ Agda.Compiler.Backend: [commandLineFlags] :: Backend' opts env menv mod def -> [OptDescr (Flag opts)]
+ Agda.Compiler.Backend: [compileDef] :: Backend' opts env menv mod def -> env -> menv -> Definition -> TCM def
+ Agda.Compiler.Backend: [isEnabled] :: Backend' opts env menv mod def -> opts -> Bool
+ Agda.Compiler.Backend: [options] :: Backend' opts env menv mod def -> opts
+ Agda.Compiler.Backend: [postCompile] :: Backend' opts env menv mod def -> env -> IsMain -> Map ModuleName mod -> TCM ()
+ Agda.Compiler.Backend: [postModule] :: Backend' opts env menv mod def -> env -> menv -> IsMain -> ModuleName -> [def] -> TCM mod
+ Agda.Compiler.Backend: [preCompile] :: Backend' opts env menv mod def -> opts -> TCM env
+ Agda.Compiler.Backend: [preModule] :: Backend' opts env menv mod def -> env -> ModuleName -> FilePath -> TCM (Recompile menv mod)
+ Agda.Compiler.Backend: [scopeCheckingSuffices] :: Backend' opts env menv mod def -> Bool
+ Agda.Compiler.Backend: backendInteraction :: [Backend] -> (TCM (Maybe Interface) -> TCM ()) -> TCM (Maybe Interface) -> TCM ()
+ Agda.Compiler.Backend: callBackend :: String -> IsMain -> Interface -> TCM ()
+ Agda.Compiler.Backend: data Backend
+ Agda.Compiler.Backend: data Backend' opts env menv mod def
+ Agda.Compiler.Backend: data IsMain
+ Agda.Compiler.Backend: data Recompile menv mod
+ Agda.Compiler.Backend: parseBackendOptions :: [Backend] -> [String] -> OptM ([Backend], CommandLineOptions)
+ Agda.Compiler.Backend: toTreeless :: QName -> TCM (Maybe TTerm)
+ Agda.Compiler.Backend: type Flag opts = opts -> OptM opts
+ Agda.Compiler.Common: instance Data.Semigroup.Semigroup Agda.Compiler.Common.IsMain
+ Agda.Compiler.Common: instance GHC.Base.Monoid Agda.Compiler.Common.IsMain
+ Agda.Compiler.JS.Compiler: JSOptions :: Bool -> JSOptions
+ Agda.Compiler.JS.Compiler: [optJSCompile] :: JSOptions -> Bool
+ Agda.Compiler.JS.Compiler: checkCompilerPragmas :: QName -> TCM ()
+ Agda.Compiler.JS.Compiler: compileTerm' :: Maybe CoinductionKit -> TTerm -> TCM Exp
+ Agda.Compiler.JS.Compiler: data JSOptions
+ Agda.Compiler.JS.Compiler: defJSDef :: Definition -> Maybe String
+ Agda.Compiler.JS.Compiler: defaultJSOptions :: JSOptions
+ Agda.Compiler.JS.Compiler: flatName :: MemberId
+ Agda.Compiler.JS.Compiler: jsBackend :: Backend
+ Agda.Compiler.JS.Compiler: jsBackend' :: Backend' JSOptions JSOptions JSModuleEnv () (Maybe Export)
+ Agda.Compiler.JS.Compiler: jsCommandLineFlags :: [OptDescr (Flag JSOptions)]
+ Agda.Compiler.JS.Compiler: jsCompileDef :: JSOptions -> JSModuleEnv -> Definition -> TCM (Maybe Export)
+ Agda.Compiler.JS.Compiler: jsPostCompile :: JSOptions -> IsMain -> a -> TCM ()
+ Agda.Compiler.JS.Compiler: jsPostModule :: JSOptions -> JSModuleEnv -> IsMain -> ModuleName -> [Maybe Export] -> TCM ()
+ Agda.Compiler.JS.Compiler: jsPreCompile :: JSOptions -> TCM JSOptions
+ Agda.Compiler.JS.Compiler: jsPreModule :: JSOptions -> ModuleName -> FilePath -> TCM (Recompile JSModuleEnv ())
+ Agda.Compiler.JS.Compiler: type JSModuleEnv = Maybe CoinductionKit
+ Agda.Compiler.JS.Pretty: instance (Agda.Compiler.JS.Pretty.Pretty a, Agda.Compiler.JS.Pretty.Pretty b) => Agda.Compiler.JS.Pretty.Pretties (Data.Map.Internal.Map a b)
+ Agda.Compiler.JS.Pretty: isValidJSIdent :: String -> Bool
+ Agda.Compiler.JS.Pretty: variableName :: String -> String
+ Agda.Compiler.JS.Syntax: instance Agda.Compiler.JS.Syntax.Globals a => Agda.Compiler.JS.Syntax.Globals (Data.Map.Internal.Map k a)
+ Agda.Compiler.JS.Syntax: instance Agda.Compiler.JS.Syntax.Uses a => Agda.Compiler.JS.Syntax.Uses (Data.Map.Internal.Map k a)
+ Agda.Compiler.MAlonzo.Compiler: GHCOptions :: Bool -> Bool -> [String] -> GHCOptions
+ Agda.Compiler.MAlonzo.Compiler: [optGhcCallGhc] :: GHCOptions -> Bool
+ Agda.Compiler.MAlonzo.Compiler: [optGhcCompile] :: GHCOptions -> Bool
+ Agda.Compiler.MAlonzo.Compiler: [optGhcFlags] :: GHCOptions -> [String]
+ Agda.Compiler.MAlonzo.Compiler: compiledTypeSynonym :: QName -> String -> Nat -> Decl
+ Agda.Compiler.MAlonzo.Compiler: compiledcondecl :: QName -> TCM Decl
+ Agda.Compiler.MAlonzo.Compiler: constructorCoverageCode :: QName -> Int -> [QName] -> HaskellType -> [HaskellCode] -> TCM [Decl]
+ Agda.Compiler.MAlonzo.Compiler: data GHCOptions
+ Agda.Compiler.MAlonzo.Compiler: defaultGHCOptions :: GHCOptions
+ Agda.Compiler.MAlonzo.Compiler: ghcBackend :: Backend
+ Agda.Compiler.MAlonzo.Compiler: ghcBackend' :: Backend' GHCOptions GHCOptions GHCModuleEnv IsMain [Decl]
+ Agda.Compiler.MAlonzo.Compiler: ghcCommandLineFlags :: [OptDescr (Flag GHCOptions)]
+ Agda.Compiler.MAlonzo.Compiler: ghcCompileDef :: GHCOptions -> GHCModuleEnv -> Definition -> TCM [Decl]
+ Agda.Compiler.MAlonzo.Compiler: ghcPostCompile :: GHCOptions -> IsMain -> Map ModuleName IsMain -> TCM ()
+ Agda.Compiler.MAlonzo.Compiler: ghcPostModule :: GHCOptions -> GHCModuleEnv -> IsMain -> ModuleName -> [[Decl]] -> TCM IsMain
+ Agda.Compiler.MAlonzo.Compiler: ghcPreCompile :: GHCOptions -> TCM GHCOptions
+ Agda.Compiler.MAlonzo.Compiler: ghcPreModule :: GHCOptions -> ModuleName -> FilePath -> TCM (Recompile GHCModuleEnv IsMain)
+ Agda.Compiler.MAlonzo.Compiler: type GHCModuleEnv = Maybe CoinductionKit
+ Agda.Compiler.MAlonzo.HaskellTypes: checkConstructorCount :: QName -> [QName] -> [HaskellCode] -> TCM ()
+ Agda.Compiler.MAlonzo.HaskellTypes: getHsType :: QName -> TCM HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: getHsVar :: Nat -> TCM HaskellCode
+ Agda.Compiler.MAlonzo.HaskellTypes: haskellType :: QName -> TCM HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: haskellType' :: Type -> TCM HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: hsApp :: String -> [HaskellType] -> HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: hsForall :: String -> HaskellType -> HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: hsFun :: HaskellKind -> HaskellKind -> HaskellKind
+ Agda.Compiler.MAlonzo.HaskellTypes: hsKFun :: HaskellKind -> HaskellKind -> HaskellKind
+ Agda.Compiler.MAlonzo.HaskellTypes: hsStar :: HaskellKind
+ Agda.Compiler.MAlonzo.HaskellTypes: hsUnit :: HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: hsVar :: Name -> HaskellType
+ Agda.Compiler.MAlonzo.HaskellTypes: notAHaskellType :: Type -> TCM a
+ Agda.Compiler.MAlonzo.HaskellTypes: type HaskellKind = String
+ Agda.Compiler.MAlonzo.Pragmas: ForeignFileHeaderPragma :: KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: ForeignImport :: KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: ForeignOther :: KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: HsData :: Range -> HaskellType -> [HaskellCode] -> HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: HsDefn :: Range -> HaskellCode -> HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: HsExport :: Range -> HaskellCode -> HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: HsType :: Range -> HaskellType -> HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: classifyForeign :: String -> KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: classifyPragma :: String -> KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: data HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: data KindOfForeignCode
+ Agda.Compiler.MAlonzo.Pragmas: foreignHaskell :: TCM ([String], [String], [String])
+ Agda.Compiler.MAlonzo.Pragmas: getHaskellConstructor :: QName -> TCM (Maybe HaskellCode)
+ Agda.Compiler.MAlonzo.Pragmas: getHaskellPragma :: QName -> TCM (Maybe HaskellPragma)
+ Agda.Compiler.MAlonzo.Pragmas: instance Agda.Syntax.Position.HasRange Agda.Compiler.MAlonzo.Pragmas.HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: instance GHC.Classes.Eq Agda.Compiler.MAlonzo.Pragmas.HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: instance GHC.Show.Show Agda.Compiler.MAlonzo.Pragmas.HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: parseHaskellPragma :: CompilerPragma -> TCM HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: parsePragma :: CompilerPragma -> Either String HaskellPragma
+ Agda.Compiler.MAlonzo.Pragmas: partitionByKindOfForeignCode :: (a -> KindOfForeignCode) -> [a] -> ([a], [a], [a])
+ Agda.Compiler.MAlonzo.Pragmas: sanityCheckPragma :: Definition -> Maybe HaskellPragma -> TCM ()
+ Agda.Compiler.MAlonzo.Primitives: hasMainFunction :: Interface -> IsMain
+ Agda.Compiler.MAlonzo.Primitives: isMainFunction :: QName -> Bool
+ Agda.Compiler.Treeless.EliminateDefaults: eliminateCaseDefaults :: TTerm -> TCM TTerm
+ Agda.Interaction.BasicOps: WithForce :: UseForce
+ Agda.Interaction.BasicOps: WithoutForce :: UseForce
+ Agda.Interaction.BasicOps: data UseForce
+ Agda.Interaction.BasicOps: instance GHC.Classes.Eq Agda.Interaction.BasicOps.UseForce
+ Agda.Interaction.BasicOps: instance GHC.Read.Read Agda.Interaction.BasicOps.UseForce
+ Agda.Interaction.BasicOps: instance GHC.Show.Show Agda.Interaction.BasicOps.ComputeMode
+ Agda.Interaction.BasicOps: instance GHC.Show.Show Agda.Interaction.BasicOps.Rewrite
+ Agda.Interaction.BasicOps: instance GHC.Show.Show Agda.Interaction.BasicOps.UseForce
+ Agda.Interaction.Highlighting.LaTeX: instance GHC.Classes.Eq Agda.Interaction.Highlighting.LaTeX.Kind
+ Agda.Interaction.Highlighting.LaTeX: instance GHC.Show.Show Agda.Interaction.Highlighting.LaTeX.AlignmentColumn
+ Agda.Interaction.Highlighting.LaTeX: instance GHC.Show.Show Agda.Interaction.Highlighting.LaTeX.Kind
+ Agda.Interaction.Highlighting.LaTeX: instance GHC.Show.Show Agda.Interaction.Highlighting.LaTeX.Output
+ Agda.Interaction.Highlighting.Precise: CatchallClause :: OtherAspect
+ Agda.Interaction.Highlighting.Precise: CoverageProblem :: OtherAspect
+ Agda.Interaction.Highlighting.Precise: DefinitionSite :: TopLevelModuleName -> Int -> Bool -> Maybe String -> DefinitionSite
+ Agda.Interaction.Highlighting.Precise: Option :: Aspect
+ Agda.Interaction.Highlighting.Precise: ReachabilityProblem :: OtherAspect
+ Agda.Interaction.Highlighting.Precise: [defSiteAnchor] :: DefinitionSite -> Maybe String
+ Agda.Interaction.Highlighting.Precise: [defSiteHere] :: DefinitionSite -> Bool
+ Agda.Interaction.Highlighting.Precise: [defSiteModule] :: DefinitionSite -> TopLevelModuleName
+ Agda.Interaction.Highlighting.Precise: [defSitePos] :: DefinitionSite -> Int
+ Agda.Interaction.Highlighting.Precise: data DefinitionSite
+ Agda.Interaction.Highlighting.Precise: instance GHC.Classes.Eq Agda.Interaction.Highlighting.Precise.DefinitionSite
+ Agda.Interaction.Highlighting.Precise: instance GHC.Show.Show Agda.Interaction.Highlighting.Precise.DefinitionSite
+ Agda.Interaction.Imports: ScopeCheck :: Mode
+ Agda.Interaction.Imports: TypeCheck :: Mode
+ Agda.Interaction.Imports: data Mode
+ Agda.Interaction.Imports: errorWarningsOfTCErr :: TCErr -> TCM [TCWarning]
+ Agda.Interaction.Imports: includeStateChanges :: MainInterface -> Bool
+ Agda.Interaction.Imports: instance GHC.Classes.Eq Agda.Interaction.Imports.Mode
+ Agda.Interaction.Imports: instance GHC.Show.Show Agda.Interaction.Imports.Mode
+ Agda.Interaction.InteractionTop: Cmd_abort :: Interaction' range
+ Agda.Interaction.InteractionTop: Cmd_goal_type_context_check :: Rewrite -> InteractionId -> range -> String -> Interaction' range
+ Agda.Interaction.InteractionTop: Command :: IOTCM -> Command
+ Agda.Interaction.InteractionTop: Done :: Command
+ Agda.Interaction.InteractionTop: Error :: String -> Command
+ Agda.Interaction.InteractionTop: OtherBackend :: String -> CompilerBackend
+ Agda.Interaction.InteractionTop: QuickLaTeX :: CompilerBackend
+ Agda.Interaction.InteractionTop: [commandQueue] :: CommandState -> CommandQueue
+ Agda.Interaction.InteractionTop: data Command
+ Agda.Interaction.InteractionTop: data CompilerBackend
+ Agda.Interaction.InteractionTop: initialiseCommandQueue :: IO Command -> IO CommandQueue
+ Agda.Interaction.InteractionTop: instance GHC.Classes.Eq Agda.Interaction.InteractionTop.CompilerBackend
+ Agda.Interaction.InteractionTop: instance GHC.Read.Read Agda.Interaction.InteractionTop.CompilerBackend
+ Agda.Interaction.InteractionTop: instance GHC.Show.Show Agda.Interaction.InteractionTop.Command
+ Agda.Interaction.InteractionTop: instance GHC.Show.Show Agda.Interaction.InteractionTop.CompilerBackend
+ Agda.Interaction.InteractionTop: instance GHC.Show.Show range => GHC.Show.Show (Agda.Interaction.InteractionTop.IOTCM' range)
+ Agda.Interaction.InteractionTop: instance GHC.Show.Show range => GHC.Show.Show (Agda.Interaction.InteractionTop.Interaction' range)
+ Agda.Interaction.InteractionTop: maybeAbort :: CommandM () -> CommandM ()
+ Agda.Interaction.InteractionTop: nextCommand :: CommandM Command
+ Agda.Interaction.InteractionTop: type CommandQueue = TChan Command
+ Agda.Interaction.Library: VersionView :: LibName -> [Integer] -> VersionView
+ Agda.Interaction.Library: [vvBase] :: VersionView -> LibName
+ Agda.Interaction.Library: [vvNumbers] :: VersionView -> [Integer]
+ Agda.Interaction.Library: data VersionView
+ Agda.Interaction.Library: findLib' :: (a -> LibName) -> LibName -> [a] -> [a]
+ Agda.Interaction.Library: instance GHC.Classes.Eq Agda.Interaction.Library.VersionView
+ Agda.Interaction.Library: instance GHC.Show.Show Agda.Interaction.Library.VersionView
+ Agda.Interaction.Library: unVersionView :: VersionView -> LibName
+ Agda.Interaction.Library: versionView :: LibName -> VersionView
+ Agda.Interaction.Library.Base: emptyLibFile :: AgdaLibFile
+ Agda.Interaction.Library.Base: libNameForCurrentDir :: LibName
+ Agda.Interaction.Library.Parse: trimLineComment :: String -> String
+ Agda.Interaction.Library.Parse: type LineNumber = Int
+ Agda.Interaction.Options: IgnoreAllWarnings :: WarningMode
+ Agda.Interaction.Options: LeaveAlone :: WarningMode
+ Agda.Interaction.Options: NoArg :: a -> ArgDescr a
+ Agda.Interaction.Options: OptArg :: (Maybe String -> a) -> String -> ArgDescr a
+ Agda.Interaction.Options: Option :: [Char] -> [String] -> ArgDescr a -> String -> OptDescr a
+ Agda.Interaction.Options: ReqArg :: (String -> a) -> String -> ArgDescr a
+ Agda.Interaction.Options: TurnIntoErrors :: WarningMode
+ Agda.Interaction.Options: [optCountClusters] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optOnlyScopeChecking] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optWarningMode] :: PragmaOptions -> WarningMode
+ Agda.Interaction.Options: data ArgDescr a :: * -> *
+ Agda.Interaction.Options: data OptDescr a :: * -> *
+ Agda.Interaction.Options: data WarningMode
+ Agda.Interaction.Options: instance GHC.Classes.Eq Agda.Interaction.Options.WarningMode
+ Agda.Interaction.Options: instance GHC.Show.Show Agda.Interaction.Options.WarningMode
+ Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensSafeMode Agda.Interaction.Options.PragmaOptions
+ Agda.Interaction.Response: Resp_DoneAborting :: Response
+ Agda.Main: backendUsage :: Backend -> String
+ Agda.Main: builtinBackends :: [Backend]
+ Agda.Main: defaultInteraction :: CommandLineOptions -> TCM (Maybe Interface) -> TCM ()
+ Agda.Main: runAgda' :: [Backend] -> IO ()
+ Agda.Syntax.Abstract: CompilePragma :: String -> QName -> String -> Pragma
+ Agda.Syntax.Abstract: EtaPragma :: QName -> Pragma
+ Agda.Syntax.Abstract: InjectivePragma :: QName -> Pragma
+ Agda.Syntax.Abstract: StrippedDot :: Expr -> Term -> Type -> StrippedDotPattern
+ Agda.Syntax.Abstract: [clauseStrippedDots] :: Clause' lhs -> [StrippedDotPattern]
+ Agda.Syntax.Abstract: data StrippedDotPattern
+ Agda.Syntax.Abstract: instance Agda.Syntax.Position.KillRange Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.Axiom
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.Declaration
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.LHS
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.LamBinding
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.LetBinding
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.ModuleApplication
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.NamedDotPattern
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.Pragma
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.RHS
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.ScopeCopyInfo
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.SpineLHS
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.TypedBinding
+ Agda.Syntax.Abstract: instance Data.Data.Data Agda.Syntax.Abstract.TypedBindings
+ Agda.Syntax.Abstract: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Abstract.LHSCore' e)
+ Agda.Syntax.Abstract: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Abstract.Pattern' e)
+ Agda.Syntax.Abstract: instance Data.Data.Data lhs => Data.Data.Data (Agda.Syntax.Abstract.Clause' lhs)
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Abstract: instance GHC.Show.Show Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Abstract.Name: instance Data.Data.Data Agda.Syntax.Abstract.Name.AmbiguousQName
+ Agda.Syntax.Abstract.Name: instance Data.Data.Data Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Abstract.Name: instance Data.Data.Data Agda.Syntax.Abstract.Name.Name
+ Agda.Syntax.Abstract.Name: instance Data.Data.Data Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Abstract.Pattern: class APatternLike a p | p -> a
+ Agda.Syntax.Abstract.Pattern: class MapNamedArgPattern a
+ Agda.Syntax.Abstract.Pattern: containsAPattern :: APatternLike a p => (Pattern' a -> Bool) -> p -> Bool
+ Agda.Syntax.Abstract.Pattern: containsAbsurdPattern :: APatternLike a p => p -> Bool
+ Agda.Syntax.Abstract.Pattern: containsAsPattern :: APatternLike a p => p -> Bool
+ Agda.Syntax.Abstract.Pattern: foldAPattern :: (APatternLike a p, Monoid m) => (Pattern' a -> m) -> p -> m
+ Agda.Syntax.Abstract.Pattern: foldrAPattern :: (APatternLike a p, Monoid m, Foldable f, APatternLike a b, f b ~ p) => (Pattern' a -> m -> m) -> p -> m
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a (Agda.Syntax.Abstract.Pattern' a)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a b => Agda.Syntax.Abstract.Pattern.APatternLike a (Agda.Syntax.Common.Arg b)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a b => Agda.Syntax.Abstract.Pattern.APatternLike a (Agda.Syntax.Common.Named n b)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a b => Agda.Syntax.Abstract.Pattern.APatternLike a (Agda.Syntax.Concrete.FieldAssignment' b)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a b => Agda.Syntax.Abstract.Pattern.APatternLike a (GHC.Base.Maybe b)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.APatternLike a b => Agda.Syntax.Abstract.Pattern.APatternLike a [b]
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.MapNamedArgPattern Agda.Syntax.Abstract.Pattern.NAP
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.MapNamedArgPattern a => Agda.Syntax.Abstract.Pattern.MapNamedArgPattern (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.MapNamedArgPattern a => Agda.Syntax.Abstract.Pattern.MapNamedArgPattern (GHC.Base.Maybe a)
+ Agda.Syntax.Abstract.Pattern: instance Agda.Syntax.Abstract.Pattern.MapNamedArgPattern a => Agda.Syntax.Abstract.Pattern.MapNamedArgPattern [a]
+ Agda.Syntax.Abstract.Pattern: mapNamedArgPattern :: (MapNamedArgPattern a, Functor f, MapNamedArgPattern a', a ~ f a') => (NAP -> NAP) -> a -> a
+ Agda.Syntax.Abstract.Pattern: patternVars :: forall a p. APatternLike a p => p -> [Name]
+ Agda.Syntax.Abstract.Pattern: postTraverseAPatternM :: (APatternLike a b, Monad m) => (Pattern' a -> m (Pattern' a)) -> b -> m b
+ Agda.Syntax.Abstract.Pattern: preTraverseAPatternM :: (APatternLike a b, Monad m) => (Pattern' a -> m (Pattern' a)) -> b -> m b
+ Agda.Syntax.Abstract.Pattern: traverseAPatternM :: (APatternLike a p, Traversable f, APatternLike a q, f q ~ p, Monad m) => (Pattern' a -> m (Pattern' a)) -> (Pattern' a -> m (Pattern' a)) -> p -> m p
+ Agda.Syntax.Abstract.Pattern: type NAP = NamedArg Pattern
+ Agda.Syntax.Abstract.Views: LamView :: [(LamInfo, LamBinding)] -> Expr -> LamView
+ Agda.Syntax.Abstract.Views: data LamView
+ Agda.Syntax.Abstract.Views: lamView :: Expr -> LamView
+ Agda.Syntax.Common: CaseSplit :: Origin
+ Agda.Syntax.Common: ConOSplit :: ConOrigin
+ Agda.Syntax.Common: IsData :: DataOrRecord
+ Agda.Syntax.Common: IsRecord :: DataOrRecord
+ Agda.Syntax.Common: NoOverlap :: Overlappable
+ Agda.Syntax.Common: WithOrigin :: !Origin -> a -> WithOrigin a
+ Agda.Syntax.Common: YesOverlap :: Overlappable
+ Agda.Syntax.Common: [whHiding] :: WithHiding a -> !Hiding
+ Agda.Syntax.Common: [whThing] :: WithHiding a -> a
+ Agda.Syntax.Common: [woOrigin] :: WithOrigin a -> !Origin
+ Agda.Syntax.Common: [woThing] :: WithOrigin a -> a
+ Agda.Syntax.Common: data DataOrRecord
+ Agda.Syntax.Common: data Overlappable
+ Agda.Syntax.Common: data WithOrigin a
+ Agda.Syntax.Common: hidden :: LensHiding a => a -> Bool
+ Agda.Syntax.Common: instance (Data.Data.Data a, Data.Data.Data name) => Data.Data.Data (Agda.Syntax.Common.Named name a)
+ Agda.Syntax.Common: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Common: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Agda.Syntax.Common.Renaming' a b)
+ Agda.Syntax.Common: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.WithOrigin
+ Agda.Syntax.Common: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Common.Access
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Access
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Big
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.ConOrigin
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.DataOrRecord
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Delayed
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Hiding
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Induction
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.InteractionId
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.IsAbstract
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.IsInfix
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.IsInstance
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.NameId
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Origin
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.PositionInName
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.ProjOrigin
+ Agda.Syntax.Common: instance Data.Data.Data Agda.Syntax.Common.Relevance
+ Agda.Syntax.Common: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Common.Ranged a)
+ Agda.Syntax.Common: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Common.WithHiding a)
+ Agda.Syntax.Common: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Common: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Common.MaybePlaceholder e)
+ Agda.Syntax.Common: instance Data.Data.Data m => Data.Data.Data (Agda.Syntax.Common.TerminationCheck m)
+ Agda.Syntax.Common: instance Data.Foldable.Foldable Agda.Syntax.Common.WithOrigin
+ Agda.Syntax.Common: instance Data.Semigroup.Semigroup Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance Data.Traversable.Traversable Agda.Syntax.Common.WithOrigin
+ Agda.Syntax.Common: instance GHC.Base.Functor Agda.Syntax.Common.WithOrigin
+ Agda.Syntax.Common: instance GHC.Base.Monoid Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.DataOrRecord
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.DataOrRecord
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.DataOrRecord
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.Overlappable
+ Agda.Syntax.Common: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Common.WithOrigin a)
+ Agda.Syntax.Common: irrelevant :: Relevance -> Bool
+ Agda.Syntax.Common: isInstance :: LensHiding a => a -> Bool
+ Agda.Syntax.Common: isOverlappable :: LensHiding a => a -> Bool
+ Agda.Syntax.Common: makeInstance' :: LensHiding a => Overlappable -> a -> a
+ Agda.Syntax.Common: sameHiding :: (LensHiding a, LensHiding b) => a -> b -> Bool
+ Agda.Syntax.Common: setNamedArg :: NamedArg a -> b -> NamedArg b
+ Agda.Syntax.Concrete: CompilePragma :: Range -> String -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: EtaPragma :: Range -> QName -> Pragma
+ Agda.Syntax.Concrete: ForeignPragma :: Range -> String -> String -> Pragma
+ Agda.Syntax.Concrete: InjectivePragma :: Range -> QName -> Pragma
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.AsName
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.BoundName
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.Declaration
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.Expr
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.LHS
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.ModuleApplication
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.OpenShortHand
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.Pattern
+ Agda.Syntax.Concrete: instance Data.Data.Data Agda.Syntax.Concrete.Pragma
+ Agda.Syntax.Concrete: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Concrete.LamBinding' a)
+ Agda.Syntax.Concrete: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Concrete.TypedBindings' a)
+ Agda.Syntax.Concrete: instance Data.Data.Data decls => Data.Data.Data (Agda.Syntax.Concrete.WhereClause' decls)
+ Agda.Syntax.Concrete: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Concrete.OpApp e)
+ Agda.Syntax.Concrete: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Concrete.RHS' e)
+ Agda.Syntax.Concrete: instance Data.Data.Data e => Data.Data.Data (Agda.Syntax.Concrete.TypedBinding' e)
+ Agda.Syntax.Concrete: instance GHC.Classes.Eq Agda.Syntax.Concrete.BoundName
+ Agda.Syntax.Concrete: instance GHC.Show.Show Agda.Syntax.Concrete.BoundName
+ Agda.Syntax.Concrete.Definitions: data DeclarationWarning
+ Agda.Syntax.Concrete.Definitions: data Nice a
+ Agda.Syntax.Concrete.Definitions: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.DeclarationWarning
+ Agda.Syntax.Concrete.Definitions: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.Definitions.DeclarationWarning
+ Agda.Syntax.Concrete.Definitions: instance Control.Monad.Error.Class.MonadError Agda.Syntax.Concrete.Definitions.DeclarationException Agda.Syntax.Concrete.Definitions.Nice
+ Agda.Syntax.Concrete.Definitions: instance Control.Monad.State.Class.MonadState Agda.Syntax.Concrete.Definitions.NiceEnv Agda.Syntax.Concrete.Definitions.Nice
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.Clause
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.DataRecOrFun
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.DeclarationException
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.DeclarationWarning
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.KindOfBlock
+ Agda.Syntax.Concrete.Definitions: instance Data.Data.Data Agda.Syntax.Concrete.Definitions.NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: instance GHC.Base.Applicative Agda.Syntax.Concrete.Definitions.Nice
+ Agda.Syntax.Concrete.Definitions: instance GHC.Base.Functor Agda.Syntax.Concrete.Definitions.Nice
+ Agda.Syntax.Concrete.Definitions: instance GHC.Base.Monad Agda.Syntax.Concrete.Definitions.Nice
+ Agda.Syntax.Concrete.Definitions: instance GHC.Show.Show Agda.Syntax.Concrete.Definitions.DeclarationException
+ Agda.Syntax.Concrete.Definitions: instance GHC.Show.Show Agda.Syntax.Concrete.Definitions.DeclarationWarning
+ Agda.Syntax.Concrete.Name: [moduleNameRange] :: TopLevelModuleName -> Range
+ Agda.Syntax.Concrete.Name: data TopLevelModuleName
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Name.TopLevelModuleName
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Name.TopLevelModuleName
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Position.SetRange Agda.Syntax.Concrete.Name.TopLevelModuleName
+ Agda.Syntax.Concrete.Name: instance Data.Data.Data Agda.Syntax.Concrete.Name.Name
+ Agda.Syntax.Concrete.Name: instance Data.Data.Data Agda.Syntax.Concrete.Name.NamePart
+ Agda.Syntax.Concrete.Name: instance Data.Data.Data Agda.Syntax.Concrete.Name.QName
+ Agda.Syntax.Concrete.Name: instance Data.Data.Data Agda.Syntax.Concrete.Name.TopLevelModuleName
+ Agda.Syntax.Concrete.Name: isQualified :: QName -> Bool
+ Agda.Syntax.Concrete.Operators.Parser: satNoPlaceholder :: (e -> Maybe a) -> Parser e a
+ Agda.Syntax.Concrete.Operators.Parser.Monad: doc :: Doc -> Parser tok a -> Parser tok a
+ Agda.Syntax.Concrete.Operators.Parser.Monad: sat' :: (MaybePlaceholder tok -> Maybe a) -> Parser tok a
+ Agda.Syntax.Fixity: appBrackets' :: Bool -> PrecedenceStack -> Bool
+ Agda.Syntax.Fixity: headPrecedence :: PrecedenceStack -> Precedence
+ Agda.Syntax.Fixity: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Fixity.Precedence
+ Agda.Syntax.Fixity: instance Data.Data.Data Agda.Syntax.Fixity.Associativity
+ Agda.Syntax.Fixity: instance Data.Data.Data Agda.Syntax.Fixity.Fixity
+ Agda.Syntax.Fixity: instance Data.Data.Data Agda.Syntax.Fixity.Fixity'
+ Agda.Syntax.Fixity: instance Data.Data.Data Agda.Syntax.Fixity.Precedence
+ Agda.Syntax.Fixity: instance Data.Data.Data Agda.Syntax.Fixity.PrecedenceLevel
+ Agda.Syntax.Fixity: instance Data.Data.Data x => Data.Data.Data (Agda.Syntax.Fixity.ThingWithFixity x)
+ Agda.Syntax.Fixity: lamBrackets' :: Bool -> PrecedenceStack -> Bool
+ Agda.Syntax.Fixity: opBrackets' :: Bool -> Fixity -> PrecedenceStack -> Bool
+ Agda.Syntax.Fixity: pushPrecedence :: Precedence -> PrecedenceStack -> PrecedenceStack
+ Agda.Syntax.Fixity: type PrecedenceStack = [Precedence]
+ Agda.Syntax.Info: LamInfo :: Range -> Origin -> Bool -> LamInfo
+ Agda.Syntax.Info: [lamOrigin] :: LamInfo -> Origin
+ Agda.Syntax.Info: [lamParens] :: LamInfo -> Bool
+ Agda.Syntax.Info: [lamRange] :: LamInfo -> Range
+ Agda.Syntax.Info: data LamInfo
+ Agda.Syntax.Info: defaultLamInfo :: Range -> LamInfo
+ Agda.Syntax.Info: defaultLamInfo_ :: LamInfo
+ Agda.Syntax.Info: instance Agda.Syntax.Common.LensOrigin Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance Agda.Syntax.Position.HasRange Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance Agda.Syntax.Position.KillRange Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.ConPatInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.DeclInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.DefInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.ExprInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.LHSInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.LetInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.MetaInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.ModuleInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.MutualInfo
+ Agda.Syntax.Info: instance Data.Data.Data Agda.Syntax.Info.PatInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance GHC.Classes.Ord Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance GHC.Show.Show Agda.Syntax.Info.LamInfo
+ Agda.Syntax.Info: instance GHC.Show.Show Agda.Syntax.Info.ModuleInfo
+ Agda.Syntax.Internal: AbsurdP :: (Pattern' x) -> Pattern' x
+ Agda.Syntax.Internal: [clauseFullRange] :: Clause -> Range
+ Agda.Syntax.Internal: [clauseLHSRange] :: Clause -> Range
+ Agda.Syntax.Internal: [clauseUnreachable] :: Clause -> Maybe Bool
+ Agda.Syntax.Internal: [eqtParams] :: EqualityView -> [Arg Term]
+ Agda.Syntax.Internal: class PatternVars a b | b -> a
+ Agda.Syntax.Internal: class TelToArgs a
+ Agda.Syntax.Internal: instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Internal.Elim' a)
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.PatternVars a (Agda.Syntax.Common.Arg (Agda.Syntax.Internal.Pattern' a))
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.PatternVars a (Agda.Syntax.Common.NamedArg (Agda.Syntax.Internal.Pattern' a))
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.PatternVars a b => Agda.Syntax.Internal.PatternVars a [b]
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.TelToArgs Agda.Syntax.Internal.ListTel
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.TelToArgs Agda.Syntax.Internal.Telescope
+ Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Internal.ConHead
+ Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty tm => Agda.Utils.Pretty.Pretty (Agda.Syntax.Internal.Elim' tm)
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.Clause
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.ConHead
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.ConPatternInfo
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.DBPatVar
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.Level
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.LevelAtom
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.NotBlocked
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.PlusLevel
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.Sort
+ Agda.Syntax.Internal: instance Data.Data.Data Agda.Syntax.Internal.Term
+ Agda.Syntax.Internal: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Internal.Abs a)
+ Agda.Syntax.Internal: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Internal.Elim' a)
+ Agda.Syntax.Internal: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Internal.Substitution' a)
+ Agda.Syntax.Internal: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Internal.Tele a)
+ Agda.Syntax.Internal: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Internal.Type' a)
+ Agda.Syntax.Internal: instance Data.Data.Data x => Data.Data.Data (Agda.Syntax.Internal.Pattern' x)
+ Agda.Syntax.Internal: isSort :: Term -> Maybe Sort
+ Agda.Syntax.Internal: telFromList :: ListTel -> Telescope
+ Agda.Syntax.Internal: telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope
+ Agda.Syntax.Internal: telToArgs :: TelToArgs a => a -> [Arg ArgName]
+ Agda.Syntax.Internal: telToList :: Telescope -> ListTel
+ Agda.Syntax.Internal: type ListTel = ListTel' ArgName
+ Agda.Syntax.Internal: type ListTel' a = [Dom (a, Type)]
+ Agda.Syntax.Internal.Pattern: class PatternLike a b
+ Agda.Syntax.Internal.Pattern: foldPattern :: (PatternLike a b, Monoid m) => (Pattern' a -> m) -> b -> m
+ Agda.Syntax.Internal.Pattern: foldrPattern :: (PatternLike a b, Monoid m, Foldable f, PatternLike a p, f p ~ b) => (Pattern' a -> m -> m) -> b -> m
+ Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.PatternLike a (Agda.Syntax.Internal.Pattern' a)
+ Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.PatternLike a b => Agda.Syntax.Internal.Pattern.PatternLike a (Agda.Syntax.Common.Arg b)
+ Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.PatternLike a b => Agda.Syntax.Internal.Pattern.PatternLike a (Agda.Syntax.Common.Named x b)
+ Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.PatternLike a b => Agda.Syntax.Internal.Pattern.PatternLike a [b]
+ Agda.Syntax.Internal.Pattern: postTraversePatternM :: (PatternLike a b, Monad m) => (Pattern' a -> m (Pattern' a)) -> b -> m b
+ Agda.Syntax.Internal.Pattern: preTraversePatternM :: (PatternLike a b, Monad m) => (Pattern' a -> m (Pattern' a)) -> b -> m b
+ Agda.Syntax.Internal.Pattern: traversePatternM :: (PatternLike a b, Traversable f, PatternLike a p, f p ~ b, Monad m) => (Pattern' a -> m (Pattern' a)) -> (Pattern' a -> m (Pattern' a)) -> b -> m b
+ Agda.Syntax.Literal: instance Data.Data.Data Agda.Syntax.Literal.Literal
+ Agda.Syntax.Notation: instance Data.Data.Data Agda.Syntax.Notation.GenPart
+ Agda.Syntax.Parser.LexActions: beginWith :: LexState -> LexAction a -> LexAction a
+ Agda.Syntax.Parser.Literate: [layerRole] :: Layer -> LayerRole
+ Agda.Syntax.Parser.Literate: atomizeLayers :: Layers -> [(LayerRole, Char)]
+ Agda.Syntax.Parser.Literate: data LayerRole
+ Agda.Syntax.Parser.Literate: instance GHC.Classes.Eq Agda.Syntax.Parser.Literate.LayerRole
+ Agda.Syntax.Parser.Literate: instance GHC.Show.Show Agda.Syntax.Parser.Literate.LayerRole
+ Agda.Syntax.Parser.Literate: isCodeLayer :: Layer -> Bool
+ Agda.Syntax.Parser.Literate: literateMd :: Position -> String -> [Layer]
+ Agda.Syntax.Parser.Literate: type Layers = [Layer]
+ Agda.Syntax.Parser.Monad: instance Data.Data.Data Agda.Syntax.Parser.Monad.ParseWarning
+ Agda.Syntax.Parser.Tokens: KwCOMPILE :: Keyword
+ Agda.Syntax.Parser.Tokens: KwETA :: Keyword
+ Agda.Syntax.Parser.Tokens: KwFOREIGN :: Keyword
+ Agda.Syntax.Parser.Tokens: KwINJECTIVE :: Keyword
+ Agda.Syntax.Position: instance (GHC.Classes.Ord a, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Data.Set.Internal.Set a)
+ Agda.Syntax.Position: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Data.Map.Internal.Map k a)
+ Agda.Syntax.Position: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Position.Interval' a)
+ Agda.Syntax.Position: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Position.Position' a)
+ Agda.Syntax.Position: instance Data.Data.Data a => Data.Data.Data (Agda.Syntax.Position.Range' a)
+ Agda.Syntax.Scope.Base: [localLetBound] :: LocalVar -> Bool
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.AbstractModule
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.AbstractName
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.LocalVar
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.NameSpace
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.NameSpaceId
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.Scope
+ Agda.Syntax.Scope.Base: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Base.ScopeInfo
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.AbstractModule
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.AbstractName
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.KindOfName
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.LocalVar
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.NameSpace
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.NameSpaceId
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.Scope
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.ScopeInfo
+ Agda.Syntax.Scope.Base: instance Data.Data.Data Agda.Syntax.Scope.Base.WhyInScope
+ Agda.Syntax.Scope.Base: instance GHC.Show.Show Agda.Syntax.Scope.Base.WhyInScope
+ Agda.Syntax.Scope.Base: prettyNameSpace :: NameSpace -> [Doc]
+ Agda.Syntax.Scope.Monad: [resolvedLetBound] :: ResolvedName -> Bool
+ Agda.Syntax.Scope.Monad: [resolvedVar] :: ResolvedName -> Name
+ Agda.Syntax.Scope.Monad: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Scope.Monad.ResolvedName
+ Agda.Syntax.Scope.Monad: popContextPrecedence :: ScopeM ()
+ Agda.Syntax.Scope.Monad: pushContextPrecedence :: Precedence -> ScopeM ()
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.SplitPattern (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)) (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.SplitPattern Agda.Syntax.Abstract.Pattern) Agda.Syntax.Abstract.Pattern
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.UserPattern (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)) (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.UserPattern Agda.Syntax.Abstract.Pattern) Agda.Syntax.Abstract.Pattern
+ Agda.Syntax.Translation.InternalToAbstract: instance (Agda.TypeChecking.Free.Lazy.Free i, Agda.Syntax.Translation.InternalToAbstract.Reify i a) => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Internal.Abs i) (Agda.Syntax.Abstract.Name.Name, a)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.BlankVars Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.BlankVars a => Agda.Syntax.Translation.InternalToAbstract.BlankVars (Agda.Syntax.Abstract.Pattern' a)
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.CaseType
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.Compiled
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.TAlt
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.TError
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.TPrim
+ Agda.Syntax.Treeless: instance Data.Data.Data Agda.Syntax.Treeless.TTerm
+ Agda.Termination.Monad: [terHaveInlinedWith] :: TerEnv -> Bool
+ Agda.Termination.Monad: instance (Data.Semigroup.Semigroup m, GHC.Base.Monoid m) => GHC.Base.Monoid (Agda.Termination.Monad.TerM m)
+ Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars (Agda.Termination.Monad.Masked Agda.Syntax.Internal.DeBruijnPattern)
+ Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars Agda.Syntax.Internal.DeBruijnPattern
+ Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars Agda.Termination.Monad.MaskedDeBruijnPatterns
+ Agda.Termination.Monad: instance Agda.Termination.Monad.UsableSizeVars [Agda.Syntax.Internal.DeBruijnPattern]
+ Agda.Termination.Monad: instance Agda.TypeChecking.Monad.Base.HasOptions Agda.Termination.Monad.TerM
+ Agda.Termination.Monad: instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.Termination.Monad.TerM
+ Agda.Termination.Monad: instance Data.Semigroup.Semigroup m => Data.Semigroup.Semigroup (Agda.Termination.Monad.TerM m)
+ Agda.Termination.Monad: terGetHaveInlinedWith :: TerM Bool
+ Agda.Termination.Monad: terSetHaveInlinedWith :: TerM a -> TerM a
+ Agda.Termination.Monad: type MaskedDeBruijnPatterns = [Masked DeBruijnPattern]
+ Agda.Termination.Order: setUsability :: Bool -> Order -> Order
+ Agda.Termination.SparseMatrix: zipAssocWith :: (Ord i) => ([(i, a)] -> [(i, c)]) -> ([(i, b)] -> [(i, c)]) -> (a -> Maybe c) -> (b -> Maybe c) -> (a -> b -> Maybe c) -> [(i, a)] -> [(i, b)] -> [(i, c)]
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.TermToPattern Agda.Syntax.Internal.Term Agda.Syntax.Internal.DeBruijnPattern
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b)
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern (Agda.Syntax.Common.Named c a) (Agda.Syntax.Common.Named c b)
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern [a] [b]
+ Agda.TypeChecking.CheckInternal: [relevanceAction] :: Action -> Relevance -> Relevance -> Relevance
+ Agda.TypeChecking.CheckInternal: eraseUnusedAction :: Action
+ Agda.TypeChecking.CheckInternal: inferSort :: Term -> TCM Sort
+ Agda.TypeChecking.CompiledClause: data CompiledClauses' a
+ Agda.TypeChecking.CompiledClause: instance (Data.Semigroup.Semigroup c, GHC.Base.Monoid c) => GHC.Base.Monoid (Agda.TypeChecking.CompiledClause.WithArity c)
+ Agda.TypeChecking.CompiledClause: instance (Data.Semigroup.Semigroup m, GHC.Base.Monoid m) => GHC.Base.Monoid (Agda.TypeChecking.CompiledClause.Case m)
+ Agda.TypeChecking.CompiledClause: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.TypeChecking.CompiledClause.Case a)
+ Agda.TypeChecking.CompiledClause: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.TypeChecking.CompiledClause.CompiledClauses' a)
+ Agda.TypeChecking.CompiledClause: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.TypeChecking.CompiledClause.WithArity a)
+ Agda.TypeChecking.CompiledClause: instance Data.Data.Data a => Data.Data.Data (Agda.TypeChecking.CompiledClause.CompiledClauses' a)
+ Agda.TypeChecking.CompiledClause: instance Data.Data.Data c => Data.Data.Data (Agda.TypeChecking.CompiledClause.Case c)
+ Agda.TypeChecking.CompiledClause: instance Data.Data.Data c => Data.Data.Data (Agda.TypeChecking.CompiledClause.WithArity c)
+ Agda.TypeChecking.CompiledClause: instance Data.Foldable.Foldable Agda.TypeChecking.CompiledClause.CompiledClauses'
+ Agda.TypeChecking.CompiledClause: instance Data.Semigroup.Semigroup c => Data.Semigroup.Semigroup (Agda.TypeChecking.CompiledClause.WithArity c)
+ Agda.TypeChecking.CompiledClause: instance Data.Semigroup.Semigroup m => Data.Semigroup.Semigroup (Agda.TypeChecking.CompiledClause.Case m)
+ Agda.TypeChecking.CompiledClause: instance Data.Traversable.Traversable Agda.TypeChecking.CompiledClause.CompiledClauses'
+ Agda.TypeChecking.CompiledClause: instance GHC.Base.Functor Agda.TypeChecking.CompiledClause.CompiledClauses'
+ Agda.TypeChecking.CompiledClause: instance GHC.Show.Show a => GHC.Show.Show (Agda.TypeChecking.CompiledClause.CompiledClauses' a)
+ Agda.TypeChecking.CompiledClause: instance GHC.Show.Show c => GHC.Show.Show (Agda.TypeChecking.CompiledClause.Case c)
+ Agda.TypeChecking.CompiledClause: instance GHC.Show.Show c => GHC.Show.Show (Agda.TypeChecking.CompiledClause.WithArity c)
+ Agda.TypeChecking.CompiledClause: type CompiledClauses = CompiledClauses' Term
+ Agda.TypeChecking.Conversion: antiUnify :: ProblemId -> Type -> Term -> Term -> TCM Term
+ Agda.TypeChecking.Conversion: antiUnifyElims :: ProblemId -> Type -> Term -> Elims -> Elims -> TCM Term
+ Agda.TypeChecking.Conversion: antiUnifyType :: ProblemId -> Type -> Type -> TCM Type
+ Agda.TypeChecking.Conversion: computeElimHeadType :: QName -> Elims -> Elims -> TCM Type
+ Agda.TypeChecking.Coverage.Match: instance (Data.Semigroup.Semigroup a, GHC.Base.Monoid a) => GHC.Base.Monoid (Agda.TypeChecking.Coverage.Match.Match a)
+ Agda.TypeChecking.Coverage.Match: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Coverage.Match.BlockingVar
+ Agda.TypeChecking.Coverage.Match: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Agda.TypeChecking.Coverage.Match.Match a)
+ Agda.TypeChecking.Coverage.SplitTree: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.Coverage.SplitTree.SplitTree' a)
+ Agda.TypeChecking.Coverage.SplitTree: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.Coverage.SplitTree.SplitTreeLabel a)
+ Agda.TypeChecking.Datatypes: getFullyAppliedConType :: ConHead -> Type -> TCM (Maybe ((QName, Type, Args), Type))
+ Agda.TypeChecking.DisplayForm: class SubstWithOrigin a
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg Agda.Syntax.Internal.Term)
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg Agda.TypeChecking.Monad.Base.DisplayTerm)
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg a) => Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin Agda.Syntax.Internal.Term
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.SubstWithOrigin a => Agda.TypeChecking.DisplayForm.SubstWithOrigin [a]
+ Agda.TypeChecking.DisplayForm: substWithOrigin :: SubstWithOrigin a => Substitution -> [WithOrigin Term] -> a -> a
+ Agda.TypeChecking.Empty: instance Data.Semigroup.Semigroup Agda.TypeChecking.Empty.ErrorNonEmpty
+ Agda.TypeChecking.Empty: instance GHC.Base.Monoid Agda.TypeChecking.Empty.ErrorNonEmpty
+ Agda.TypeChecking.Errors: dropTopLevelModule :: QName -> TCM QName
+ Agda.TypeChecking.Errors: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.NegativeUnification
+ Agda.TypeChecking.Errors: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.UnificationFailure
+ Agda.TypeChecking.Errors: prettyTCWarnings' :: [TCWarning] -> TCM [String]
+ Agda.TypeChecking.Errors: prettyWarning :: MonadTCM tcm => Warning -> tcm Doc
+ Agda.TypeChecking.Errors: sayWhen :: Range -> Maybe (Closure Call) -> TCM Doc -> TCM Doc
+ Agda.TypeChecking.Errors: stringTCErr :: String -> TCErr
+ Agda.TypeChecking.Free: class Free a
+ Agda.TypeChecking.Free: class (Semigroup a, Monoid a) => IsVarSet a
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet Agda.TypeChecking.Free.FreeVars
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet Agda.TypeChecking.Free.VarSet
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet Data.Monoid.All
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet Data.Monoid.Any
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet [GHC.Types.Int]
+ Agda.TypeChecking.Free: instance Agda.TypeChecking.Free.Lazy.IsVarSet a => Agda.TypeChecking.Free.Lazy.IsVarSet (Agda.TypeChecking.Free.RelevantIn a)
+ Agda.TypeChecking.Free: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Agda.TypeChecking.Free.RelevantIn a)
+ Agda.TypeChecking.Free: instance GHC.Base.Monoid a => GHC.Base.Monoid (Agda.TypeChecking.Free.RelevantIn a)
+ Agda.TypeChecking.Free: withVarOcc :: IsVarSet a => VarOcc -> a -> a
+ Agda.TypeChecking.Free.Lazy: class Free a
+ Agda.TypeChecking.Free.Lazy: class (Semigroup a, Monoid a) => IsVarSet a
+ Agda.TypeChecking.Free.Lazy: composeVarOcc :: VarOcc -> VarOcc -> VarOcc
+ Agda.TypeChecking.Free.Lazy: instance (Agda.TypeChecking.Free.Lazy.Free a, Agda.TypeChecking.Free.Lazy.Free b) => Agda.TypeChecking.Free.Lazy.Free (a, b)
+ Agda.TypeChecking.Free.Lazy: instance (Data.Semigroup.Semigroup c, GHC.Base.Monoid c) => GHC.Base.Monoid (Agda.TypeChecking.Free.Lazy.FreeM c)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.Clause
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.Level
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.LevelAtom
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.PlusLevel
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.Sort
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (Agda.Syntax.Internal.Type' a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free (GHC.Base.Maybe a)
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free a => Agda.TypeChecking.Free.Lazy.Free [a]
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.IsVarSet Agda.TypeChecking.Free.Lazy.VarMap
+ Agda.TypeChecking.Free.Lazy: instance Data.Semigroup.Semigroup c => Data.Semigroup.Semigroup (Agda.TypeChecking.Free.Lazy.FreeM c)
+ Agda.TypeChecking.Free.Lazy: runFreeM :: IsVarSet c => SingleVar c -> IgnoreSorts -> FreeM c -> c
+ Agda.TypeChecking.Free.Lazy: subVar :: Int -> Maybe Variable -> Maybe Variable
+ Agda.TypeChecking.Free.Lazy: withVarOcc :: IsVarSet a => VarOcc -> a -> a
+ Agda.TypeChecking.Functions: etaExpandClause :: MonadTCM tcm => Clause -> tcm Clause
+ Agda.TypeChecking.Functions: getDef :: Term -> TCM (Maybe QName)
+ Agda.TypeChecking.Monad.Base: AbstractConstructorNotInScope :: QName -> TypeError
+ Agda.TypeChecking.Monad.Base: CompilerPragma :: Range -> String -> CompilerPragma
+ Agda.TypeChecking.Monad.Base: CoverageIssue :: QName -> [(Telescope, [NamedArg DeBruijnPattern])] -> Warning
+ Agda.TypeChecking.Monad.Base: DeprecationWarning :: String -> String -> String -> Warning
+ Agda.TypeChecking.Monad.Base: ForeignCode :: Range -> String -> ForeignCode
+ Agda.TypeChecking.Monad.Base: GenericNonFatalError :: Doc -> Warning
+ Agda.TypeChecking.Monad.Base: GenericWarning :: Doc -> Warning
+ Agda.TypeChecking.Monad.Base: ImpossibleConstructor :: QName -> NegativeUnification -> TypeError
+ Agda.TypeChecking.Monad.Base: NicifierIssue :: [DeclarationWarning] -> Warning
+ Agda.TypeChecking.Monad.Base: RecursiveReductions :: AllowedReduction
+ Agda.TypeChecking.Monad.Base: UnconfirmedReductions :: AllowedReduction
+ Agda.TypeChecking.Monad.Base: UnifyRecursiveEq :: Telescope -> Type -> Int -> Term -> UnificationFailure
+ Agda.TypeChecking.Monad.Base: UnifyReflexiveEq :: Telescope -> Type -> Term -> UnificationFailure
+ Agda.TypeChecking.Monad.Base: UselessInline :: QName -> Warning
+ Agda.TypeChecking.Monad.Base: UselessPublic :: Warning
+ Agda.TypeChecking.Monad.Base: [cantSplitFailures] :: SplitError -> [UnificationFailure]
+ Agda.TypeChecking.Monad.Base: [conArity] :: Defn -> Int
+ Agda.TypeChecking.Monad.Base: [defInjective] :: Definition -> Bool
+ Agda.TypeChecking.Monad.Base: [iForeignCode] :: Interface -> Map BackendName [ForeignCode]
+ Agda.TypeChecking.Monad.Base: [iWarnings] :: Interface -> [TCWarning]
+ Agda.TypeChecking.Monad.Base: [ipSolved] :: InteractionPoint -> Bool
+ Agda.TypeChecking.Monad.Base: [stPersistBackends] :: PersistentTCState -> [Backend]
+ Agda.TypeChecking.Monad.Base: [stPreForeignCode] :: PreScopeState -> !(Map BackendName [ForeignCode])
+ Agda.TypeChecking.Monad.Base: [tcWarningPrintedWarning] :: TCWarning -> Doc
+ Agda.TypeChecking.Monad.Base: [tcWarningRange] :: TCWarning -> Range
+ Agda.TypeChecking.Monad.Base: [tcWarning] :: TCWarning -> Warning
+ Agda.TypeChecking.Monad.Base: class (Functor m, Applicative m, Monad m) => HasOptions m
+ Agda.TypeChecking.Monad.Base: commandLineOptions :: HasOptions m => m CommandLineOptions
+ Agda.TypeChecking.Monad.Base: data CompilerPragma
+ Agda.TypeChecking.Monad.Base: data ForeignCode
+ Agda.TypeChecking.Monad.Base: data NegativeUnification
+ Agda.TypeChecking.Monad.Base: data UnificationFailure
+ Agda.TypeChecking.Monad.Base: defCompilerPragmas :: BackendName -> Definition -> [CompilerPragma]
+ Agda.TypeChecking.Monad.Base: defConstructors :: Defn -> [QName]
+ Agda.TypeChecking.Monad.Base: defTerminationUnconfirmed :: Definition -> Bool
+ Agda.TypeChecking.Monad.Base: equalHeadConstructors :: Warning -> Warning -> Bool
+ Agda.TypeChecking.Monad.Base: getPartialDefs :: ReadTCState tcm => tcm [QName]
+ Agda.TypeChecking.Monad.Base: ghcBackendName :: BackendName
+ Agda.TypeChecking.Monad.Base: ifTopLevelAndHighlightingLevelIsOr :: MonadTCM tcm => HighlightingLevel -> Bool -> tcm () -> tcm ()
+ Agda.TypeChecking.Monad.Base: instance (Agda.TypeChecking.Monad.Base.HasOptions m, GHC.Base.Monoid w) => Agda.TypeChecking.Monad.Base.HasOptions (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Agda.TypeChecking.Monad.Base: instance Agda.Syntax.Position.HasRange Agda.TypeChecking.Monad.Base.CompilerPragma
+ Agda.TypeChecking.Monad.Base: instance Agda.Syntax.Position.HasRange Agda.TypeChecking.Monad.Base.TCWarning
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.Constraint
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.DisplayForm
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasOptions m => Agda.TypeChecking.Monad.Base.HasOptions (Agda.Utils.ListT.ListT m)
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasOptions m => Agda.TypeChecking.Monad.Base.HasOptions (Control.Monad.Trans.Except.ExceptT e m)
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasOptions m => Agda.TypeChecking.Monad.Base.HasOptions (Control.Monad.Trans.Maybe.MaybeT m)
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasOptions m => Agda.TypeChecking.Monad.Base.HasOptions (Control.Monad.Trans.Reader.ReaderT r m)
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasOptions m => Agda.TypeChecking.Monad.Base.HasOptions (Control.Monad.Trans.State.Lazy.StateT s m)
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.CompareDirection
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.Definition
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.Defn
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.Polarity
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.Section
+ Agda.TypeChecking.Monad.Base: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Monad.Base.TermHead
+ Agda.TypeChecking.Monad.Base: instance Control.Monad.IO.Class.MonadIO m => Agda.TypeChecking.Monad.Base.HasOptions (Agda.TypeChecking.Monad.Base.TCMT m)
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.AbstractMode
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.AllowedReduction
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Call
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.CallInfo
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Comparison
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.CompilerPragma
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Constraint
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ContextEntry
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.CtxId
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Definition
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Defn
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.DisplayForm
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.EtaEquality
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ExpandHidden
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.FunctionFlag
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.HighlightingLevel
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.HighlightingMethod
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.IPClause
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ModuleParameters
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.MutualId
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.NLPType
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Polarity
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ProblemConstraint
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ProblemId
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.ProjLams
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Projection
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.RewriteRule
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Section
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Signature
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Simplification
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.TCEnv
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.TermHead
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.TerminationError
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.UnquoteFlags
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data Agda.TypeChecking.Monad.Base.Warning
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data a => Data.Data.Data (Agda.TypeChecking.Monad.Base.Closure a)
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data a => Data.Data.Data (Agda.TypeChecking.Monad.Base.Local a)
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data a => Data.Data.Data (Agda.TypeChecking.Monad.Base.Open a)
+ Agda.TypeChecking.Monad.Base: instance Data.Data.Data c => Data.Data.Data (Agda.TypeChecking.Monad.Base.FunctionInverse' c)
+ Agda.TypeChecking.Monad.Base: instance Data.Foldable.Foldable Agda.TypeChecking.Monad.Base.Open
+ Agda.TypeChecking.Monad.Base: instance Data.Traversable.Traversable Agda.TypeChecking.Monad.Base.Open
+ Agda.TypeChecking.Monad.Base: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.CompilerPragma
+ Agda.TypeChecking.Monad.Base: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.TCWarning
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.CompilerPragma
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.ForeignCode
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.NegativeUnification
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.UnificationFailure
+ Agda.TypeChecking.Monad.Base: jsBackendName :: BackendName
+ Agda.TypeChecking.Monad.Base: newtype Section
+ Agda.TypeChecking.Monad.Base: pragmaOptions :: HasOptions m => m PragmaOptions
+ Agda.TypeChecking.Monad.Base: recRecursive :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: stBackends :: Lens' [Backend] TCState
+ Agda.TypeChecking.Monad.Base: stForeignCode :: Lens' (Map BackendName [ForeignCode]) TCState
+ Agda.TypeChecking.Monad.Base: tcWarningOrigin :: TCWarning -> SrcFile
+ Agda.TypeChecking.Monad.Base: type BackendName = String
+ Agda.TypeChecking.Monad.Base: type CompiledRepresentation = Map BackendName [CompilerPragma]
+ Agda.TypeChecking.Monad.Base: uhcBackendName :: BackendName
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMDebugPrint :: String
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMDebugPrint :: TCM Term
+ Agda.TypeChecking.Monad.Caching: noCacheForImportedModule :: TCM a -> TCM a
+ Agda.TypeChecking.Monad.Constraints: addAwakeConstraint' :: Constraint -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: addConstraintTo :: Lens' Constraints TCState -> Constraint -> TCM ()
+ Agda.TypeChecking.Monad.Context: KeepNames :: a -> KeepNames a
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.TypeChecking.Monad.Context.KeepNames Agda.Syntax.Internal.Telescope)
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.TypeChecking.Monad.Context.KeepNames GHC.Base.String, Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Context: newtype KeepNames a
+ Agda.TypeChecking.Monad.Context: underAbstraction' :: (Subst t a, MonadTCM tcm, AddContext (name, Dom Type)) => (String -> name) -> Dom Type -> Abs a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Debug: class (Functor m, Applicative m, Monad m) => MonadDebug m
+ Agda.TypeChecking.Monad.Debug: displayDebugMessage :: MonadDebug m => Int -> String -> m ()
+ Agda.TypeChecking.Monad.Debug: formatDebugMessage :: MonadDebug m => VerboseKey -> Int -> TCM Doc -> m String
+ Agda.TypeChecking.Monad.Debug: instance (Agda.TypeChecking.Monad.Debug.MonadDebug m, GHC.Base.Monoid w) => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Agda.TypeChecking.Monad.Debug: instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.Utils.ListT.ListT m)
+ Agda.TypeChecking.Monad.Debug: instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Except.ExceptT e m)
+ Agda.TypeChecking.Monad.Debug: instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Maybe.MaybeT m)
+ Agda.TypeChecking.Monad.Debug: instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Reader.ReaderT r m)
+ Agda.TypeChecking.Monad.Debug: instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.State.Lazy.StateT s m)
+ Agda.TypeChecking.Monad.Debug: instance Control.Monad.IO.Class.MonadIO m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.TypeChecking.Monad.Base.TCMT m)
+ Agda.TypeChecking.Monad.Debug: reportS :: (HasOptions m, MonadDebug m) => VerboseKey -> Int -> String -> m ()
+ Agda.TypeChecking.Monad.Debug: reportSDoc :: (HasOptions m, MonadDebug m) => VerboseKey -> Int -> TCM Doc -> m ()
+ Agda.TypeChecking.Monad.Debug: reportSLn :: (HasOptions m, MonadDebug m) => VerboseKey -> Int -> String -> m ()
+ Agda.TypeChecking.Monad.Debug: traceDebugMessage :: MonadDebug m => Int -> String -> m a -> m a
+ Agda.TypeChecking.Monad.Debug: traceSDoc :: (HasOptions m, MonadDebug m) => VerboseKey -> Int -> TCM Doc -> m a -> m a
+ Agda.TypeChecking.Monad.Debug: traceSLn :: (HasOptions m, MonadDebug m) => VerboseKey -> Int -> String -> m a -> m a
+ Agda.TypeChecking.Monad.Debug: verboseBracket :: (HasOptions m, MonadDebug m, MonadError err m) => VerboseKey -> Int -> String -> m a -> m a
+ Agda.TypeChecking.Monad.MetaVars: setMetaOccursCheck :: MetaId -> RunMetaOccursCheck -> TCM ()
+ Agda.TypeChecking.Monad.Options: hasExactVerbosity :: HasOptions m => VerboseKey -> Int -> m Bool
+ Agda.TypeChecking.Monad.Options: whenExactVerbosity :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()
+ Agda.TypeChecking.Monad.Options: withPragmaOptions :: (PragmaOptions -> PragmaOptions) -> TCM a -> TCM a
+ Agda.TypeChecking.Monad.Signature: SigAbstract :: SigError
+ Agda.TypeChecking.Monad.Signature: SigUnknown :: String -> SigError
+ Agda.TypeChecking.Monad.Signature: addDeprecatedPragma :: String -> BackendName -> QName -> String -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addHaskellData :: QName -> HaskellType -> [HaskellCode] -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addPragma :: BackendName -> QName -> String -> TCM ()
+ Agda.TypeChecking.Monad.Signature: data SigError
+ Agda.TypeChecking.Monad.Signature: dataFormat :: String -> [String] -> String
+ Agda.TypeChecking.Monad.Signature: defaultGetConstInfo :: (HasOptions m, MonadDebug m) => TCState -> TCEnv -> QName -> m (Either SigError Definition)
+ Agda.TypeChecking.Monad.Signature: definitelyNonRecursive_ :: Defn -> Bool
+ Agda.TypeChecking.Monad.Signature: getConstInfo' :: HasConstInfo m => QName -> m (Either SigError Definition)
+ Agda.TypeChecking.Monad.Signature: getMutual_ :: Defn -> Maybe [QName]
+ Agda.TypeChecking.Monad.Signature: getUniqueCompilerPragma :: BackendName -> QName -> TCM (Maybe CompilerPragma)
+ Agda.TypeChecking.Monad.Signature: instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Except.ExceptT err m)
+ Agda.TypeChecking.Monad.Signature: instantiateRewriteRule :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadReader TCEnv m, MonadDebug m) => RewriteRule -> m RewriteRule
+ Agda.TypeChecking.Monad.Signature: instantiateRewriteRules :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadReader TCEnv m, MonadDebug m) => RewriteRules -> m RewriteRules
+ Agda.TypeChecking.Monad.Signature: markInjective :: QName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: mkPragma :: String -> TCM CompilerPragma
+ Agda.TypeChecking.Monad.Signature: sigError :: (String -> a) -> a -> SigError -> a
+ Agda.TypeChecking.Monad.Signature: type CoreCode = String
+ Agda.TypeChecking.Monad.Signature: type HaskellCode = String
+ Agda.TypeChecking.Monad.Signature: type HaskellType = String
+ Agda.TypeChecking.Monad.Signature: type JSCode = String
+ Agda.TypeChecking.Monad.SizedTypes: instance Agda.TypeChecking.Monad.SizedTypes.IsSizeType a => Agda.TypeChecking.Monad.SizedTypes.IsSizeType (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Monad.SizedTypes: instance Agda.TypeChecking.Monad.SizedTypes.IsSizeType a => Agda.TypeChecking.Monad.SizedTypes.IsSizeType (b, a)
+ Agda.TypeChecking.Monad.State: addCompilerPragma :: BackendName -> CompilerPragma -> Definition -> Definition
+ Agda.TypeChecking.Monad.State: addDeprecatedForeignCode :: String -> BackendName -> String -> TCM ()
+ Agda.TypeChecking.Monad.State: addForeignCode :: BackendName -> String -> TCM ()
+ Agda.TypeChecking.Monad.State: updateFunCopatternLHS :: (Bool -> Bool) -> Defn -> Defn
+ Agda.TypeChecking.Patterns.Abstract: expandPatternSynonyms' :: Pattern -> TCM Pattern
+ Agda.TypeChecking.Polarity: polarityFromPositivity :: QName -> TCM ()
+ Agda.TypeChecking.Positivity: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Positivity.Node
+ Agda.TypeChecking.Positivity.Occurrence: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Positivity.Occurrence.Occurrence
+ Agda.TypeChecking.Positivity.Occurrence: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Positivity.Occurrence.OccursWhere
+ Agda.TypeChecking.Positivity.Occurrence: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.Positivity.Occurrence.Where
+ Agda.TypeChecking.Positivity.Occurrence: instance Data.Data.Data Agda.TypeChecking.Positivity.Occurrence.Occurrence
+ Agda.TypeChecking.Positivity.Occurrence: instance Data.Data.Data Agda.TypeChecking.Positivity.Occurrence.OccursWhere
+ Agda.TypeChecking.Positivity.Occurrence: instance Data.Data.Data Agda.TypeChecking.Positivity.Occurrence.Where
+ Agda.TypeChecking.Pretty: (<?>) :: TCM Doc -> TCM Doc -> TCM Doc
+ Agda.TypeChecking.Pretty: infixl 5 $+$
+ Agda.TypeChecking.Pretty: infixl 6 <?>
+ Agda.TypeChecking.Pretty: instance (Agda.TypeChecking.Pretty.PrettyTCM k, Agda.TypeChecking.Pretty.PrettyTCM v) => Agda.TypeChecking.Pretty.PrettyTCM (Data.Map.Internal.Map k v)
+ Agda.TypeChecking.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Substitute.Class.Subst a a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Substitution' a)
+ Agda.TypeChecking.Pretty: prettyTCMPatterns :: [NamedArg DeBruijnPattern] -> TCM [Doc]
+ Agda.TypeChecking.Pretty: pshow :: Show a => a -> TCM Doc
+ Agda.TypeChecking.Primitive: getReflArgInfo :: ConHead -> TCM (Maybe ArgInfo)
+ Agda.TypeChecking.RecordPatterns: instance Agda.TypeChecking.Monad.Base.HasOptions Agda.TypeChecking.RecordPatterns.RecPatM
+ Agda.TypeChecking.RecordPatterns: instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.TypeChecking.RecordPatterns.RecPatM
+ Agda.TypeChecking.Records: ArgT :: (Dom Type) -> ElimType
+ Agda.TypeChecking.Records: ProjT :: Dom Type -> Type -> ElimType
+ Agda.TypeChecking.Records: [projTField] :: ElimType -> Type
+ Agda.TypeChecking.Records: [projTRec] :: ElimType -> Dom Type
+ Agda.TypeChecking.Records: data ElimType
+ Agda.TypeChecking.Records: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Records.ElimType
+ Agda.TypeChecking.Records: typeElims :: Type -> Term -> Elims -> TCM [ElimType]
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate e => Agda.TypeChecking.Reduce.Instantiate (Data.Map.Internal.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull e => Agda.TypeChecking.Reduce.InstantiateFull (Data.Map.Internal.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise e => Agda.TypeChecking.Reduce.Normalise (Data.Map.Internal.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce e => Agda.TypeChecking.Reduce.Reduce (Data.Map.Internal.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify e => Agda.TypeChecking.Reduce.Simplify (Data.Map.Internal.Map k e)
+ Agda.TypeChecking.Reduce.Monad: instance Agda.TypeChecking.Monad.Base.HasOptions Agda.TypeChecking.Monad.Base.ReduceM
+ Agda.TypeChecking.Reduce.Monad: instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.TypeChecking.Monad.Base.ReduceM
+ Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.NLPType
+ Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Rewriting: nlPatVarsUnder :: NLPatVars a => Int -> a -> IntSet
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance (Agda.TypeChecking.Rewriting.NonLinMatch.Match a b, Agda.TypeChecking.Substitute.Class.Subst t1 a, Agda.TypeChecking.Substitute.Class.Subst t2 b) => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b)
+ Agda.TypeChecking.Rules.Data: bindParameters' :: [Type] -> [LamBinding] -> Type -> (Telescope -> Type -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Def: [wfParentTel] :: WithFunctionProblem -> Telescope
+ Agda.TypeChecking.Rules.LHS: checkStrippedDotPattern :: StrippedDotPattern -> TCM ()
+ Agda.TypeChecking.Rules.LHS: problemAllVariables :: Problem -> Bool
+ Agda.TypeChecking.Rules.LHS.Problem: AbsurdFocus :: PatInfo -> Int -> Type -> Focus
+ Agda.TypeChecking.Rules.LHS.Problem: OtherFlex :: FlexibleVarKind
+ Agda.TypeChecking.Rules.LHS.Problem: [absurdFocusRange] :: Focus -> PatInfo
+ Agda.TypeChecking.Rules.LHS.Problem: [absurdFocusType] :: Focus -> Type
+ Agda.TypeChecking.Rules.LHS.Problem: [absurdFocusVar] :: Focus -> Int
+ Agda.TypeChecking.Rules.LHS.Problem: [flexOrigin] :: FlexibleVar a -> Origin
+ Agda.TypeChecking.Rules.LHS.Problem: [lhsShouldBeEmptyTypes] :: LHSState -> [(Range, Type)]
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.Syntax.Common.LensOrigin (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a)
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.Syntax.Common.Origin
+ Agda.TypeChecking.Rules.Term: lambdaAddContext :: Name -> ArgName -> Dom Type -> TCM a -> TCM a
+ Agda.TypeChecking.Rules.Term: lambdaIrrelevanceCheck :: LensRelevance dom => ArgInfo -> dom -> TCM ArgInfo
+ Agda.TypeChecking.Serialise.Base: class ICODE t b
+ Agda.TypeChecking.Serialise.Base: class VALU t b
+ Agda.TypeChecking.Serialise.Base: icodeArgs :: (ICODE t b, IsBase t ~ b) => All EmbPrj (Domains t) => Proxy t -> Products (Domains t) -> S [Int32]
+ Agda.TypeChecking.Serialise.Base: icodeN' :: forall t. ICODE t (IsBase t) => Currying (Domains t) (S Int32) => All EmbPrj (Domains t) => t -> Arrows (Domains t) (S Int32)
+ Agda.TypeChecking.Serialise.Base: icodeNode :: Node -> S Int32
+ Agda.TypeChecking.Serialise.Base: instance Agda.TypeChecking.Serialise.Base.ICODE t (Agda.Utils.TypeLevel.IsBase t) => Agda.TypeChecking.Serialise.Base.ICODE (a -> t) 'GHC.Types.False
+ Agda.TypeChecking.Serialise.Base: instance Agda.TypeChecking.Serialise.Base.VALU t 'GHC.Types.True
+ Agda.TypeChecking.Serialise.Base: instance Agda.TypeChecking.Serialise.Base.VALU t (Agda.Utils.TypeLevel.IsBase t) => Agda.TypeChecking.Serialise.Base.VALU (a -> t) 'GHC.Types.False
+ Agda.TypeChecking.Serialise.Base: instance Agda.Utils.TypeLevel.IsBase t ~ 'GHC.Types.True => Agda.TypeChecking.Serialise.Base.ICODE t 'GHC.Types.True
+ Agda.TypeChecking.Serialise.Base: valuN :: forall t. VALU t (IsBase t) => Currying (Constant Int32 (Domains t)) (R (CoDomain t)) => All EmbPrj (Domains t) => t -> Arrows (Constant Int32 (Domains t)) (R (CoDomain t))
+ Agda.TypeChecking.Serialise.Base: valuN' :: (VALU t b, b ~ IsBase t) => All EmbPrj (Domains t) => t -> Products (Constant Int32 (Domains t)) -> R (CoDomain t)
+ Agda.TypeChecking.Serialise.Base: valueArgs :: (VALU t b, b ~ IsBase t) => All EmbPrj (CoDomain t : Domains t) => Proxy t -> Node -> Maybe (Products (Constant Int32 (Domains t)))
+ Agda.TypeChecking.Serialise.Base: valueN :: forall t. VALU t (IsBase t) => All EmbPrj (CoDomain t : Domains t) => t -> Int32 -> R (CoDomain t)
+ Agda.TypeChecking.Serialise.Instances.Common: SerialisedRange :: Range -> SerialisedRange
+ Agda.TypeChecking.Serialise.Instances.Common: [underlyingRange] :: SerialisedRange -> Range
+ Agda.TypeChecking.Serialise.Instances.Common: instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Set.Internal.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 (Agda.Utils.Trie.Trie a b)
+ 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.Internal.Map a b)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.DataOrRecord
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.Empty.Empty
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.Impossible.Impossible
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Sequence.Internal.Seq a)
+ Agda.TypeChecking.Serialise.Instances.Common: newtype SerialisedRange
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CompilerPragma
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ForeignCode
+ Agda.TypeChecking.Serialise.Instances.Errors: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Definitions.DeclarationWarning
+ Agda.TypeChecking.Serialise.Instances.Errors: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.TCWarning
+ Agda.TypeChecking.Serialise.Instances.Errors: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Warning
+ Agda.TypeChecking.Serialise.Instances.Errors: instance Agda.TypeChecking.Serialise.Base.EmbPrj Text.PrettyPrint.HughesPJ.Doc
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.DefinitionSite
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Substitution' a)
+ Agda.TypeChecking.SizedTypes: takeSizeConstraints :: TCM [Closure Constraint]
+ Agda.TypeChecking.SizedTypes.Solve: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Solve.NamedRigid
+ Agda.TypeChecking.SizedTypes.Solve: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Solve.SizeMeta
+ Agda.TypeChecking.SizedTypes.Syntax: Solution :: Map flex (SizeExpr' rigid flex) -> Solution rigid flex
+ Agda.TypeChecking.SizedTypes.Syntax: [theSolution] :: Solution rigid flex -> Map flex (SizeExpr' rigid flex)
+ Agda.TypeChecking.SizedTypes.Syntax: emptySolution :: Solution r f
+ Agda.TypeChecking.SizedTypes.Syntax: instance (Agda.Utils.Pretty.Pretty r, Agda.Utils.Pretty.Pretty f) => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.SizedTypes.Syntax.Constraint' r f)
+ Agda.TypeChecking.SizedTypes.Syntax: instance (Agda.Utils.Pretty.Pretty r, Agda.Utils.Pretty.Pretty f) => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.Syntax: instance (Agda.Utils.Pretty.Pretty r, Agda.Utils.Pretty.Pretty f) => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.SizedTypes.Syntax.Solution r f)
+ Agda.TypeChecking.SizedTypes.Syntax: instance (GHC.Show.Show flex, GHC.Show.Show rigid) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' rigid flex)
+ Agda.TypeChecking.SizedTypes.Syntax: instance (GHC.Show.Show rigid, GHC.Show.Show flex) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.Constraint' rigid flex)
+ Agda.TypeChecking.SizedTypes.Syntax: instance (GHC.Show.Show rigid, GHC.Show.Show flex) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.Syntax.Solution rigid flex)
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.TypeChecking.SizedTypes.Syntax.Substitute r f a => Agda.TypeChecking.SizedTypes.Syntax.Substitute r f (Data.Map.Internal.Map k a)
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Null.Null (Agda.TypeChecking.SizedTypes.Syntax.Solution rigid flex)
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Syntax.Cmp
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Syntax.Flex
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Syntax.Offset
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Syntax.Polarity
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.Syntax.Rigid
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.Utils.Pretty.Pretty flex => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.SizedTypes.Syntax.PolarityAssignment flex)
+ Agda.TypeChecking.SizedTypes.Syntax: instance GHC.Classes.Ord f => Agda.TypeChecking.SizedTypes.Syntax.Substitute r f (Agda.TypeChecking.SizedTypes.Syntax.Solution r f)
+ Agda.TypeChecking.SizedTypes.Syntax: newtype Solution rigid flex
+ Agda.TypeChecking.SizedTypes.Utils: setDebugging :: Bool -> IO ()
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance (Agda.Utils.Pretty.Pretty rigid, Agda.Utils.Pretty.Pretty flex) => Agda.Utils.Pretty.Pretty (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Show.Show flex, GHC.Show.Show rigid) => GHC.Show.Show (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.WarshallSolver.Label
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.SizedTypes.WarshallSolver.Weight
+ Agda.TypeChecking.Substitute: applyNLPatSubst :: (Subst Term a) => Substitution' NLPat -> a -> a
+ Agda.TypeChecking.Substitute: instance (GHC.Classes.Ord k, Agda.TypeChecking.Substitute.Class.Subst t a) => Agda.TypeChecking.Substitute.Class.Subst t (Data.Map.Internal.Map k a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Abstract v => Agda.TypeChecking.Substitute.Class.Abstract (Data.Map.Internal.Map k v)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Apply v => Agda.TypeChecking.Substitute.Class.Apply (Data.Map.Internal.Map k v)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term Agda.Syntax.Abstract.StrippedDotPattern
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPat Agda.TypeChecking.Monad.Base.NLPType
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPat Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPat Agda.TypeChecking.Monad.Base.RewriteRule
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.TeleNoAbs Agda.Syntax.Internal.ListTel
+ Agda.TypeChecking.Substitute: typeArgsWithTel :: Telescope -> [Term] -> Maybe [Dom Type]
+ Agda.TypeChecking.Substitute.Class: instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term Agda.Syntax.Abstract.Name.QName
+ Agda.TypeChecking.Telescope: typeArity :: Type -> TCM Nat
+ Agda.TypeChecking.Warnings: AllWarnings :: WhichWarnings
+ Agda.TypeChecking.Warnings: ErrorWarnings :: WhichWarnings
+ Agda.TypeChecking.Warnings: classifyWarning :: Warning -> WhichWarnings
+ Agda.TypeChecking.Warnings: classifyWarnings :: [TCWarning] -> ([TCWarning], [TCWarning])
+ Agda.TypeChecking.Warnings: data WhichWarnings
+ Agda.TypeChecking.Warnings: genericNonFatalError :: MonadTCM tcm => Doc -> tcm ()
+ Agda.TypeChecking.Warnings: genericWarning :: MonadTCM tcm => Doc -> tcm ()
+ Agda.TypeChecking.Warnings: instance GHC.Classes.Eq Agda.TypeChecking.Warnings.WhichWarnings
+ Agda.TypeChecking.Warnings: instance GHC.Classes.Ord Agda.TypeChecking.Warnings.WhichWarnings
+ Agda.TypeChecking.Warnings: isUnsolvedWarning :: Warning -> Bool
+ Agda.TypeChecking.Warnings: runPM :: PM a -> TCM a
+ Agda.TypeChecking.Warnings: warning :: MonadTCM tcm => Warning -> tcm ()
+ Agda.TypeChecking.Warnings: warning_ :: MonadTCM tcm => Warning -> tcm TCWarning
+ Agda.Utils.Benchmark: BenchmarkOff :: BenchmarkOn a
+ Agda.Utils.Benchmark: BenchmarkOn :: BenchmarkOn a
+ Agda.Utils.Benchmark: BenchmarkSome :: (Account a -> Bool) -> BenchmarkOn a
+ Agda.Utils.Benchmark: data BenchmarkOn a
+ Agda.Utils.Benchmark: isBenchmarkOn :: Account a -> BenchmarkOn a -> Bool
+ Agda.Utils.Either: fromLeftM :: Monad m => (b -> m a) -> Either a b -> m a
+ Agda.Utils.Either: fromRightM :: Monad m => (a -> m b) -> Either a b -> m b
+ Agda.Utils.Empty: instance Data.Data.Data Agda.Utils.Empty.Empty
+ Agda.Utils.Empty: toImpossible :: Empty -> IO Impossible
+ Agda.Utils.FileName: instance Data.Data.Data Agda.Utils.FileName.AbsolutePath
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: instance (Agda.Utils.Pretty.Pretty s, Agda.Utils.Pretty.Pretty t, Agda.Utils.Pretty.Pretty e) => Agda.Utils.Pretty.Pretty (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge s t e)
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: instance (Agda.Utils.Pretty.Pretty s, Agda.Utils.Pretty.Pretty t, Agda.Utils.Pretty.Pretty e) => Agda.Utils.Pretty.Pretty (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph s t e)
+ Agda.Utils.Haskell.Syntax: OtherPragma :: String -> ModulePragma
+ Agda.Utils.Haskell.Syntax: PatSyn :: Pat -> Pat -> Decl
+ Agda.Utils.IO: catchIO :: CatchIO m => m a -> (IOException -> m a) -> m a
+ Agda.Utils.IO: class CatchIO m
+ Agda.Utils.IO: instance Agda.Utils.IO.CatchIO GHC.Types.IO
+ Agda.Utils.IO: instance Agda.Utils.IO.CatchIO m => Agda.Utils.IO.CatchIO (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Agda.Utils.IO.UTF8: writeTextToFile :: FilePath -> Text -> IO ()
+ Agda.Utils.Impossible: Unreachable :: String -> Integer -> Impossible
+ Agda.Utils.IndexedList: [Cons] :: p x -> All p xs -> All p (x : xs)
+ Agda.Utils.IndexedList: [Nil] :: All p '[]
+ Agda.Utils.IndexedList: [Some] :: f i -> Some f
+ Agda.Utils.IndexedList: [Suc] :: Index xs x -> Index (y : xs) x
+ Agda.Utils.IndexedList: [Zero] :: Index (x : xs) x
+ Agda.Utils.IndexedList: allIndices :: All p xs -> All (Index xs) xs
+ Agda.Utils.IndexedList: data All :: (x -> *) -> [x] -> *
+ Agda.Utils.IndexedList: data Index :: [x] -> x -> *
+ Agda.Utils.IndexedList: data Some :: (k -> *) -> *
+ Agda.Utils.IndexedList: forgetAll :: (forall x. b x -> a) -> All b xs -> [a]
+ Agda.Utils.IndexedList: forgetIndex :: Index xs x -> Int
+ Agda.Utils.IndexedList: lIndex :: Index xs x -> Lens' (p x) (All p xs)
+ Agda.Utils.IndexedList: lookupIndex :: All p xs -> Index xs x -> p x
+ Agda.Utils.IndexedList: makeAll :: (a -> Some b) -> [a] -> Some (All b)
+ Agda.Utils.IndexedList: mapWithIndex :: (forall x. Index xs x -> p x -> q x) -> All p xs -> All q xs
+ Agda.Utils.IndexedList: withSome :: Some b -> (forall i. b i -> a) -> a
+ Agda.Utils.Lens: lFst :: Lens' a (a, b)
+ Agda.Utils.Lens: lSnd :: Lens' b (a, b)
+ Agda.Utils.List: last2 :: [a] -> Maybe (a, a)
+ Agda.Utils.Maybe: boolToMaybe :: Bool -> a -> Maybe a
+ Agda.Utils.Maybe: ifJust :: Maybe a -> (a -> b) -> b -> b
+ Agda.Utils.Maybe.Strict: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Data.Strict.Maybe.Maybe a)
+ Agda.Utils.Maybe.Strict: instance Data.Semigroup.Semigroup a => GHC.Base.Monoid (Data.Strict.Maybe.Maybe a)
+ Agda.Utils.Monad: orEitherM :: (Monoid e, Monad m, Functor m) => [m (Either e b)] -> m (Either e b)
+ Agda.Utils.Monoid: MaxNat :: Int -> MaxNat
+ Agda.Utils.Monoid: [getMaxNat] :: MaxNat -> Int
+ Agda.Utils.Monoid: instance Data.Semigroup.Semigroup Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Base.Monoid Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Classes.Eq Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Classes.Ord Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Enum.Enum Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Num.Num Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: instance GHC.Show.Show Agda.Utils.Monoid.MaxNat
+ Agda.Utils.Monoid: newtype MaxNat
+ Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.IntMap.Internal.IntMap a)
+ Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Map.Internal.Map k a)
+ Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Sequence.Internal.Seq a)
+ Agda.Utils.Null: instance Agda.Utils.Null.Null (Data.Set.Internal.Set a)
+ Agda.Utils.Null: instance Agda.Utils.Null.Null Data.IntSet.Internal.IntSet
+ Agda.Utils.Parser.MemoisedCPS: atomP :: Int
+ Agda.Utils.Parser.MemoisedCPS: bindP :: Int
+ Agda.Utils.Parser.MemoisedCPS: choiceP :: Int
+ Agda.Utils.Parser.MemoisedCPS: doc :: ParserClass p k r tok => Doc -> p a -> p a
+ Agda.Utils.Parser.MemoisedCPS: sat' :: ParserClass p k r tok => (tok -> Maybe a) -> p a
+ Agda.Utils.Parser.MemoisedCPS: seqP :: Int
+ Agda.Utils.Parser.MemoisedCPS: starP :: Int
+ Agda.Utils.Parser.MemoisedCPS: type DocP = (Doc, Int)
+ Agda.Utils.PartialOrd: instance GHC.Classes.Ord a => Agda.Utils.PartialOrd.PartialOrd (Agda.Utils.PartialOrd.Inclusion (Data.Set.Internal.Set a))
+ Agda.Utils.Permutation: instance Agda.Utils.Permutation.InversePermute [GHC.Base.Maybe a] (Data.IntMap.Internal.IntMap a)
+ Agda.Utils.Permutation: instance Data.Data.Data Agda.Utils.Permutation.Permutation
+ Agda.Utils.Permutation: instance Data.Data.Data a => Data.Data.Data (Agda.Utils.Permutation.Drop a)
+ Agda.Utils.Pointer: instance Data.Data.Data a => Data.Data.Data (Agda.Utils.Pointer.Ptr a)
+ Agda.Utils.Pointer: instance Data.Typeable.Internal.Typeable a => Data.Data.Data (GHC.IORef.IORef a)
+ Agda.Utils.Pretty: (<?>) :: Doc -> Doc -> Doc
+ Agda.Utils.Pretty: infixl 6 <?>
+ Agda.Utils.Pretty: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (GHC.Base.Maybe a)
+ Agda.Utils.Pretty: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty [a]
+ Agda.Utils.Pretty: instance Data.Data.Data Text.PrettyPrint.HughesPJ.Doc
+ Agda.Utils.Pretty: prettyList_ :: Pretty a => [a] -> Doc
+ Agda.Utils.Pretty: pshow :: Show a => a -> Doc
+ Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton (GHC.Types.Int, a) (Data.IntMap.Internal.IntMap a)
+ Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton (k, a) (Data.Map.Internal.Map k a)
+ Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton GHC.Types.Int Data.IntSet.Internal.IntSet
+ Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton a (Data.Sequence.Internal.Seq a)
+ Agda.Utils.Singleton: instance Agda.Utils.Singleton.Singleton a (Data.Set.Internal.Set a)
+ Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.IntMap.Internal.IntMap a)
+ Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Map.Internal.Map k a)
+ Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Sequence.Internal.Seq a)
+ Agda.Utils.Size: instance Agda.Utils.Size.Sized (Data.Set.Internal.Set a)
+ Agda.Utils.Size: instance Agda.Utils.Size.Sized Data.IntSet.Internal.IntSet
+ Agda.Utils.String: delimiter :: String -> String
+ Agda.Utils.Three: One :: Three
+ Agda.Utils.Three: Three :: Three
+ Agda.Utils.Three: Two :: Three
+ Agda.Utils.Three: data Three
+ Agda.Utils.Three: instance GHC.Classes.Eq Agda.Utils.Three.Three
+ Agda.Utils.Three: instance GHC.Classes.Ord Agda.Utils.Three.Three
+ Agda.Utils.Three: instance GHC.Enum.Bounded Agda.Utils.Three.Three
+ Agda.Utils.Three: instance GHC.Enum.Enum Agda.Utils.Three.Three
+ Agda.Utils.Three: instance GHC.Show.Show Agda.Utils.Three.Three
+ Agda.Utils.Three: partition3 :: (a -> Three) -> [a] -> ([a], [a], [a])
+ Agda.Utils.Time: fromMilliseconds :: Integer -> CPUTime
+ Agda.Utils.Trie: Trie :: !(Maybe v) -> !(Map k (Trie k v)) -> Trie k v
+ Agda.Utils.Trie: filter :: Ord k => (v -> Bool) -> Trie k v -> Trie k v
+ Agda.Utils.Trie: mapSubTries :: Ord k => (Trie k u -> Maybe v) -> Trie k u -> Trie k v
+ Agda.Utils.Trie: toListOrderedBy :: Ord k => (v -> v -> Ordering) -> Trie k v -> [([k], v)]
+ Agda.Utils.TypeLevel: class Currying as b
+ Agda.Utils.TypeLevel: currys :: Currying as b => Proxy as -> Proxy b -> (Products as -> b) -> Arrows as b
+ Agda.Utils.TypeLevel: data ConsMap0 :: (Function k l -> *) -> Function k (Function [l] [l] -> *) -> *
+ Agda.Utils.TypeLevel: data ConsMap1 :: (Function k l -> *) -> k -> Function [l] [l] -> *
+ Agda.Utils.TypeLevel: data Constant0 :: Function a (Function b a -> *) -> *
+ Agda.Utils.TypeLevel: data Constant1 :: * -> Function b a -> *
+ Agda.Utils.TypeLevel: data Function :: * -> * -> *
+ Agda.Utils.TypeLevel: instance Agda.Utils.TypeLevel.Currying '[] b
+ Agda.Utils.TypeLevel: instance Agda.Utils.TypeLevel.Currying as b => Agda.Utils.TypeLevel.Currying (a : as) b
+ Agda.Utils.TypeLevel: type Arrows (as :: [*]) (r :: *) = Foldr (->) r as
+ Agda.Utils.TypeLevel: type Products (as :: [*]) = Foldr (,) () as
+ Agda.Utils.TypeLevel: uncurrys :: Currying as b => Proxy as -> Proxy b -> Arrows as b -> Products as -> b
- Agda.Auto.Auto: auto :: InteractionId -> Range -> String -> TCM (Either [(InteractionId, String)] (Either [String] String), Maybe String)
+ Agda.Auto.Auto: auto :: InteractionId -> Range -> String -> TCM AutoResult
- Agda.Auto.CaseSplit: HI :: FMode -> a -> HI a
+ Agda.Auto.CaseSplit: HI :: Hiding -> a -> HI a
- Agda.Auto.CaseSplit: caseSplitSearch :: forall o. IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: caseSplitSearch :: forall o. IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Cost -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
- Agda.Auto.CaseSplit: caseSplitSearch' :: forall o. (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: caseSplitSearch' :: forall o. (Cost -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Cost -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
- Agda.Auto.CaseSplit: concatargs :: MM (ArgList o) (RefInfo o) -> MArgList o -> MArgList o
+ Agda.Auto.CaseSplit: concatargs :: MArgList o -> MArgList o -> MArgList o
- Agda.Auto.CaseSplit: costAddVarDepth :: Nat
+ Agda.Auto.CaseSplit: costAddVarDepth :: Cost
- Agda.Auto.CaseSplit: costCaseSplitHigh :: Nat
+ Agda.Auto.CaseSplit: costCaseSplitHigh :: Cost
- Agda.Auto.CaseSplit: costCaseSplitLow :: Nat
+ Agda.Auto.CaseSplit: costCaseSplitLow :: Cost
- Agda.Auto.CaseSplit: costCaseSplitVeryHigh :: Nat
+ Agda.Auto.CaseSplit: costCaseSplitVeryHigh :: Cost
- Agda.Auto.CaseSplit: freevars :: MExp o -> [Nat]
+ Agda.Auto.CaseSplit: freevars :: FreeVars t => t -> [Nat]
- Agda.Auto.CaseSplit: lift :: Nat -> MExp o -> MExp o
+ Agda.Auto.CaseSplit: lift :: Lift t => Nat -> t -> t
- Agda.Auto.CaseSplit: notequal :: Nat -> Nat -> MExp o -> MExp o -> IO Bool
+ Agda.Auto.CaseSplit: notequal :: Unify o t => Nat -> Nat -> t -> t -> IO Bool
- Agda.Auto.CaseSplit: replace :: Nat -> Nat -> MExp o -> MExp o -> MExp o
+ Agda.Auto.CaseSplit: replace :: Replace o t u => Nat -> Nat -> MExp o -> t -> u
- Agda.Auto.CaseSplit: replacep :: Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o
+ Agda.Auto.CaseSplit: replacep :: forall o. Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o
- Agda.Auto.CaseSplit: unifyexp :: MExp o -> MExp o -> Maybe [(Nat, MExp o)]
+ Agda.Auto.CaseSplit: unifyexp :: MExp o -> MExp o -> Maybe ([(Nat, MExp o)])
- Agda.Auto.Convert: constructPats :: Map QName (TMode, ConstRef O) -> MetaId -> Clause -> TCM ([(FMode, MId)], [CSPat O])
+ Agda.Auto.Convert: constructPats :: Map QName (TMode, ConstRef O) -> MetaId -> Clause -> TCM ([(Hiding, MId)], [CSPat O])
- Agda.Auto.Convert: icnvh :: FMode -> ArgInfo
+ Agda.Auto.Convert: icnvh :: Hiding -> ArgInfo
- Agda.Auto.Convert: tomy :: MetaId -> [(Bool, QName)] -> [Type] -> TCM ([ConstRef O], [MExp O], Map MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [MetaId]), [(Bool, MExp O, MExp O)], Map QName (TMode, ConstRef O))
+ Agda.Auto.Convert: tomy :: MetaId -> [Hint] -> [Type] -> TCM ([ConstRef O], [MExp O], Map MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [MetaId]), [(Bool, MExp O, MExp O)], Map QName (TMode, ConstRef O))
- Agda.Auto.NarrowingSearch: AddExtraRef :: String -> (Metavar a blk) -> (Int, RefCreateEnv blk a) -> Prop blk
+ Agda.Auto.NarrowingSearch: AddExtraRef :: String -> (Metavar a blk) -> (Move' blk a) -> Prop blk
- Agda.Auto.NarrowingSearch: Metavar :: IORef (Maybe a) -> IORef Bool -> IORef [(QPB a blk, Maybe (CTree blk))] -> IORef [SubConstraints blk] -> IORef [(Int, RefCreateEnv blk a)] -> Metavar a blk
+ Agda.Auto.NarrowingSearch: Metavar :: IORef (Maybe a) -> IORef Bool -> IORef [(QPB a blk, Maybe (CTree blk))] -> IORef [SubConstraints blk] -> IORef [Move' blk a] -> Metavar a blk
- Agda.Auto.NarrowingSearch: [mextrarefs] :: Metavar a blk -> IORef [(Int, RefCreateEnv blk a)]
+ Agda.Auto.NarrowingSearch: [mextrarefs] :: Metavar a blk -> IORef [Move' blk a]
- Agda.Auto.NarrowingSearch: refinements :: Refinable a blk => blk -> [blk] -> Metavar a blk -> IO [(Int, RefCreateEnv blk a)]
+ Agda.Auto.NarrowingSearch: refinements :: Refinable a blk => blk -> [blk] -> Metavar a blk -> IO [Move' blk a]
- Agda.Auto.NarrowingSearch: topSearch :: forall blk. IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
+ Agda.Auto.NarrowingSearch: topSearch :: forall blk. IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Cost -> Cost -> IO Bool
- Agda.Auto.SearchControl: ExpRefInfo :: Maybe (RefInfo o) -> [RefInfo o] -> Bool -> Maybe ([UId o], [Elr o]) -> Maybe Bool -> Bool -> Maybe EqReasoningState -> ExpRefInfo o
+ Agda.Auto.SearchControl: ExpRefInfo :: Maybe (RefInfo o) -> [RefInfo o] -> Bool -> Bool -> Maybe ([UId o], [Elr o]) -> Maybe Bool -> Bool -> Maybe EqReasoningState -> ExpRefInfo o
- Agda.Auto.SearchControl: costAbsurdLam :: Int
+ Agda.Auto.SearchControl: costAbsurdLam :: Cost
- Agda.Auto.SearchControl: costAppConstructor :: Int
+ Agda.Auto.SearchControl: costAppConstructor :: Cost
- Agda.Auto.SearchControl: costAppConstructorSingle :: Int
+ Agda.Auto.SearchControl: costAppConstructorSingle :: Cost
- Agda.Auto.SearchControl: costAppExtraRef :: Int
+ Agda.Auto.SearchControl: costAppExtraRef :: Cost
- Agda.Auto.SearchControl: costAppHint :: Int
+ Agda.Auto.SearchControl: costAppHint :: Cost
- Agda.Auto.SearchControl: costAppHintUsed :: Int
+ Agda.Auto.SearchControl: costAppHintUsed :: Cost
- Agda.Auto.SearchControl: costAppRecCall :: Int
+ Agda.Auto.SearchControl: costAppRecCall :: Cost
- Agda.Auto.SearchControl: costAppRecCallUsed :: Int
+ Agda.Auto.SearchControl: costAppRecCallUsed :: Cost
- Agda.Auto.SearchControl: costAppVar :: Int
+ Agda.Auto.SearchControl: costAppVar :: Cost
- Agda.Auto.SearchControl: costAppVarUsed :: Int
+ Agda.Auto.SearchControl: costAppVarUsed :: Cost
- Agda.Auto.SearchControl: costEqCong :: Int
+ Agda.Auto.SearchControl: costEqCong :: Cost
- Agda.Auto.SearchControl: costEqEnd :: Int
+ Agda.Auto.SearchControl: costEqEnd :: Cost
- Agda.Auto.SearchControl: costEqStep :: Int
+ Agda.Auto.SearchControl: costEqStep :: Cost
- Agda.Auto.SearchControl: costEqSym :: Int
+ Agda.Auto.SearchControl: costEqSym :: Cost
- Agda.Auto.SearchControl: costIncrease :: Int
+ Agda.Auto.SearchControl: costIncrease :: Cost
- Agda.Auto.SearchControl: costInferredTypeUnkown :: Int
+ Agda.Auto.SearchControl: costInferredTypeUnkown :: Cost
- Agda.Auto.SearchControl: costIotaStep :: Int
+ Agda.Auto.SearchControl: costIotaStep :: Cost
- Agda.Auto.SearchControl: costLam :: Int
+ Agda.Auto.SearchControl: costLam :: Cost
- Agda.Auto.SearchControl: costLamUnfold :: Int
+ Agda.Auto.SearchControl: costLamUnfold :: Cost
- Agda.Auto.SearchControl: costPi :: Int
+ Agda.Auto.SearchControl: costPi :: Cost
- Agda.Auto.SearchControl: costSort :: Int
+ Agda.Auto.SearchControl: costSort :: Cost
- Agda.Auto.SearchControl: costUnification :: Int
+ Agda.Auto.SearchControl: costUnification :: Cost
- Agda.Auto.SearchControl: costUnificationOccurs :: Int
+ Agda.Auto.SearchControl: costUnificationOccurs :: Cost
- Agda.Auto.SearchControl: extraref :: UId o -> [Maybe (UId o)] -> ConstRef o -> (Int, StateT (IORef [SubConstraints (RefInfo o)], Int) IO (Exp o))
+ Agda.Auto.SearchControl: extraref :: UId o -> [Maybe (UId o)] -> ConstRef o -> Move o
- Agda.Auto.SearchControl: prioAbsurdLambda :: Int
+ Agda.Auto.SearchControl: prioAbsurdLambda :: Prio
- Agda.Auto.SearchControl: prioCompBeta :: Int
+ Agda.Auto.SearchControl: prioCompBeta :: Prio
- Agda.Auto.SearchControl: prioCompBetaStructured :: Int
+ Agda.Auto.SearchControl: prioCompBetaStructured :: Prio
- Agda.Auto.SearchControl: prioCompChoice :: Int
+ Agda.Auto.SearchControl: prioCompChoice :: Prio
- Agda.Auto.SearchControl: prioCompCopy :: Int
+ Agda.Auto.SearchControl: prioCompCopy :: Prio
- Agda.Auto.SearchControl: prioCompIota :: Int
+ Agda.Auto.SearchControl: prioCompIota :: Prio
- Agda.Auto.SearchControl: prioCompUnif :: Int
+ Agda.Auto.SearchControl: prioCompUnif :: Prio
- Agda.Auto.SearchControl: prioCompareArgList :: Int
+ Agda.Auto.SearchControl: prioCompareArgList :: Prio
- Agda.Auto.SearchControl: prioInferredTypeUnknown :: Int
+ Agda.Auto.SearchControl: prioInferredTypeUnknown :: Prio
- Agda.Auto.SearchControl: prioNo :: Int
+ Agda.Auto.SearchControl: prioNo :: Prio
- Agda.Auto.SearchControl: prioNoIota :: Int
+ Agda.Auto.SearchControl: prioNoIota :: Prio
- Agda.Auto.SearchControl: prioProjIndex :: Int
+ Agda.Auto.SearchControl: prioProjIndex :: Prio
- Agda.Auto.SearchControl: prioTypeUnknown :: Int
+ Agda.Auto.SearchControl: prioTypeUnknown :: Prio
- Agda.Auto.SearchControl: prioTypecheck :: Bool -> Int
+ Agda.Auto.SearchControl: prioTypecheck :: Bool -> Prio
- Agda.Auto.SearchControl: prioTypecheckArgList :: Int
+ Agda.Auto.SearchControl: prioTypecheckArgList :: Prio
- Agda.Auto.Syntax: ALCons :: FMode -> (MExp o) -> (MArgList o) -> ArgList o
+ Agda.Auto.Syntax: ALCons :: Hiding -> (MExp o) -> (MArgList o) -> ArgList o
- Agda.Auto.Syntax: ALProj :: (MArgList o) -> (MM (ConstRef o) (RefInfo o)) -> FMode -> (MArgList o) -> ArgList o
+ Agda.Auto.Syntax: ALProj :: (MArgList o) -> (MM (ConstRef o) (RefInfo o)) -> Hiding -> (MArgList o) -> ArgList o
- Agda.Auto.Syntax: AbsurdLambda :: FMode -> Exp o
+ Agda.Auto.Syntax: AbsurdLambda :: Hiding -> Exp o
- Agda.Auto.Syntax: HNALCons :: FMode -> (ICExp o) -> (ICArgList o) -> HNArgList o
+ Agda.Auto.Syntax: HNALCons :: Hiding -> (ICExp o) -> (ICArgList o) -> HNArgList o
- Agda.Auto.Syntax: HNApp :: [Maybe (UId o)] -> (Elr o) -> (ICArgList o) -> HNExp o
+ Agda.Auto.Syntax: HNApp :: (Elr o) -> (ICArgList o) -> HNExp' o
- Agda.Auto.Syntax: HNLam :: [Maybe (UId o)] -> FMode -> (Abs (ICExp o)) -> HNExp o
+ Agda.Auto.Syntax: HNLam :: Hiding -> (Abs (ICExp o)) -> HNExp' o
- Agda.Auto.Syntax: HNPi :: [Maybe (UId o)] -> FMode -> Bool -> (ICExp o) -> (Abs (ICExp o)) -> HNExp o
+ Agda.Auto.Syntax: HNPi :: Hiding -> Bool -> (ICExp o) -> (Abs (ICExp o)) -> HNExp' o
- Agda.Auto.Syntax: HNSort :: Sort -> HNExp o
+ Agda.Auto.Syntax: HNSort :: Sort -> HNExp' o
- Agda.Auto.Syntax: Lam :: FMode -> (Abs (MExp o)) -> Exp o
+ Agda.Auto.Syntax: Lam :: Hiding -> (Abs (MExp o)) -> Exp o
- Agda.Auto.Syntax: Pi :: (Maybe (UId o)) -> FMode -> Bool -> (MExp o) -> (Abs (MExp o)) -> Exp o
+ Agda.Auto.Syntax: Pi :: (Maybe (UId o)) -> Hiding -> Bool -> (MExp o) -> (Abs (MExp o)) -> Exp o
- Agda.Auto.Syntax: weak :: Nat -> CExp o -> CExp o
+ Agda.Auto.Syntax: weak :: Weakening t => Nat -> t -> t
- Agda.Auto.Typecheck: addend :: FMode -> MExp o -> MM (Exp o) blk -> MM (Exp o) blk
+ Agda.Auto.Typecheck: addend :: Hiding -> MExp o -> MM (Exp o) blk -> MM (Exp o) blk
- Agda.Auto.Typecheck: maybeor :: Bool -> Int -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o))
+ Agda.Auto.Typecheck: maybeor :: Bool -> Prio -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o))
- Agda.Compiler.Common: doCompile :: IsMain -> Interface -> (IsMain -> Interface -> TCM ()) -> TCM ()
+ Agda.Compiler.Common: doCompile :: forall r. Monoid r => IsMain -> Interface -> (IsMain -> Interface -> TCM r) -> TCM r
- Agda.Compiler.JS.Syntax: Export :: [MemberId] -> Bool -> Exp -> Export
+ Agda.Compiler.JS.Syntax: Export :: [MemberId] -> Exp -> Export
- Agda.Compiler.MAlonzo.Compiler: callGHC :: IsMain -> Interface -> TCM ()
+ Agda.Compiler.MAlonzo.Compiler: callGHC :: GHCOptions -> IsMain -> Map ModuleName IsMain -> TCM ()
- Agda.Compiler.MAlonzo.Compiler: checkConstructorType :: QName -> TCM [Decl]
+ Agda.Compiler.MAlonzo.Compiler: checkConstructorType :: QName -> HaskellCode -> TCM [Decl]
- Agda.Compiler.MAlonzo.Compiler: checkCover :: QName -> HaskellType -> Nat -> [QName] -> TCM [Decl]
+ Agda.Compiler.MAlonzo.Compiler: checkCover :: QName -> HaskellType -> Nat -> [QName] -> [HaskellCode] -> TCM [Decl]
- Agda.Interaction.BasicOps: give :: InteractionId -> Maybe Range -> Expr -> TCM Expr
+ Agda.Interaction.BasicOps: give :: UseForce -> InteractionId -> Maybe Range -> Expr -> TCM Expr
- Agda.Interaction.BasicOps: giveExpr :: Maybe InteractionId -> MetaId -> Expr -> TCM ()
+ Agda.Interaction.BasicOps: giveExpr :: UseForce -> Maybe InteractionId -> MetaId -> Expr -> TCM ()
- Agda.Interaction.BasicOps: refine :: InteractionId -> Maybe Range -> Expr -> TCM Expr
+ Agda.Interaction.BasicOps: refine :: UseForce -> InteractionId -> Maybe Range -> Expr -> TCM Expr
- Agda.Interaction.FindFile: moduleName' :: AbsolutePath -> TCM (Ranged TopLevelModuleName)
+ Agda.Interaction.FindFile: moduleName' :: AbsolutePath -> TCM TopLevelModuleName
- Agda.Interaction.Highlighting.Emacs: lispifyHighlightingInfo :: HighlightingInfo -> ModuleToSource -> TCM (Lisp String)
+ Agda.Interaction.Highlighting.Emacs: lispifyHighlightingInfo :: HighlightingInfo -> HighlightingMethod -> ModuleToSource -> IO (Lisp String)
- Agda.Interaction.Highlighting.Generate: generateAndPrintSyntaxInfo :: Declaration -> Level -> TCM ()
+ Agda.Interaction.Highlighting.Generate: generateAndPrintSyntaxInfo :: Declaration -> Level -> Bool -> TCM ()
- Agda.Interaction.Highlighting.HTML: generatePage :: (FilePath -> FilePath -> String -> String) -> FilePath -> TopLevelModuleName -> TCM ()
+ Agda.Interaction.Highlighting.HTML: generatePage :: (FilePath -> FilePath -> String -> Text) -> FilePath -> TopLevelModuleName -> TCM ()
- Agda.Interaction.Highlighting.HTML: page :: FilePath -> TopLevelModuleName -> Html -> String
+ Agda.Interaction.Highlighting.HTML: page :: FilePath -> TopLevelModuleName -> Html -> Text
- Agda.Interaction.Highlighting.Precise: Aspects :: Maybe Aspect -> [OtherAspect] -> Maybe String -> Maybe (TopLevelModuleName, Int) -> Aspects
+ Agda.Interaction.Highlighting.Precise: Aspects :: Maybe Aspect -> [OtherAspect] -> Maybe String -> Maybe DefinitionSite -> Aspects
- Agda.Interaction.Highlighting.Precise: [definitionSite] :: Aspects -> Maybe (TopLevelModuleName, Int)
+ Agda.Interaction.Highlighting.Precise: [definitionSite] :: Aspects -> Maybe DefinitionSite
- Agda.Interaction.Imports: MainInterface :: MainInterface
+ Agda.Interaction.Imports: MainInterface :: Mode -> MainInterface
- Agda.Interaction.Imports: addImportedThings :: Signature -> BuiltinThings PrimFun -> Set String -> Set String -> PatternSynDefns -> DisplayForms -> TCM ()
+ Agda.Interaction.Imports: addImportedThings :: Signature -> BuiltinThings PrimFun -> PatternSynDefns -> DisplayForms -> [TCWarning] -> TCM ()
- Agda.Interaction.Imports: alreadyVisited :: TopLevelModuleName -> TCM (Interface, MaybeWarnings) -> TCM (Interface, MaybeWarnings)
+ Agda.Interaction.Imports: alreadyVisited :: TopLevelModuleName -> MainInterface -> TCM (Interface, MaybeWarnings) -> TCM (Interface, MaybeWarnings)
- Agda.Interaction.Imports: buildInterface :: AbsolutePath -> TopLevelInfo -> HighlightingInfo -> Set String -> Set String -> [OptionsPragma] -> TCM Interface
+ Agda.Interaction.Imports: buildInterface :: AbsolutePath -> TopLevelInfo -> HighlightingInfo -> [OptionsPragma] -> TCM Interface
- Agda.Interaction.Imports: createInterface :: AbsolutePath -> TopLevelModuleName -> Bool -> TCM (Interface, MaybeWarnings)
+ Agda.Interaction.Imports: createInterface :: AbsolutePath -> TopLevelModuleName -> MainInterface -> TCM (Interface, MaybeWarnings)
- Agda.Interaction.Imports: getStoredInterface :: TopLevelModuleName -> AbsolutePath -> Bool -> TCM (Bool, (Interface, MaybeWarnings))
+ Agda.Interaction.Imports: getStoredInterface :: TopLevelModuleName -> AbsolutePath -> MainInterface -> TCM (Bool, (Interface, MaybeWarnings))
- Agda.Interaction.Imports: typeCheck :: TopLevelModuleName -> AbsolutePath -> Bool -> TCM (Bool, (Interface, MaybeWarnings))
+ Agda.Interaction.Imports: typeCheck :: TopLevelModuleName -> AbsolutePath -> MainInterface -> TCM (Bool, (Interface, MaybeWarnings))
- Agda.Interaction.Imports: typeCheckMain :: AbsolutePath -> TCM (Interface, MaybeWarnings)
+ Agda.Interaction.Imports: typeCheckMain :: AbsolutePath -> Mode -> TCM (Interface, MaybeWarnings)
- Agda.Interaction.InteractionTop: Cmd_compile :: Backend -> FilePath -> [String] -> Interaction' range
+ Agda.Interaction.InteractionTop: Cmd_compile :: CompilerBackend -> FilePath -> [String] -> Interaction' range
- Agda.Interaction.InteractionTop: Cmd_give :: InteractionId -> range -> String -> Interaction' range
+ Agda.Interaction.InteractionTop: Cmd_give :: UseForce -> InteractionId -> range -> String -> Interaction' range
- Agda.Interaction.InteractionTop: CommandState :: [InteractionId] -> Maybe (AbsolutePath, ClockTime) -> CommandLineOptions -> !OldInteractionScopes -> CommandState
+ Agda.Interaction.InteractionTop: CommandState :: [InteractionId] -> Maybe (AbsolutePath, ClockTime) -> CommandLineOptions -> !OldInteractionScopes -> CommandQueue -> CommandState
- Agda.Interaction.InteractionTop: LaTeX :: Backend
+ Agda.Interaction.InteractionTop: LaTeX :: CompilerBackend
- Agda.Interaction.InteractionTop: cmd_load' :: FilePath -> [String] -> Bool -> ((Interface, MaybeWarnings) -> CommandM ()) -> CommandM ()
+ Agda.Interaction.InteractionTop: cmd_load' :: FilePath -> [String] -> Bool -> Mode -> ((Interface, MaybeWarnings) -> CommandM ()) -> CommandM ()
- Agda.Interaction.InteractionTop: give_gen :: InteractionId -> Range -> String -> GiveRefine -> CommandM ()
+ Agda.Interaction.InteractionTop: give_gen :: UseForce -> InteractionId -> Range -> String -> GiveRefine -> CommandM ()
- Agda.Interaction.InteractionTop: initCommandState :: CommandState
+ Agda.Interaction.InteractionTop: initCommandState :: CommandQueue -> CommandState
- Agda.Interaction.InteractionTop: tellToUpdateHighlighting :: Maybe (HighlightingInfo, ModuleToSource) -> IO [Response]
+ Agda.Interaction.InteractionTop: tellToUpdateHighlighting :: Maybe (HighlightingInfo, HighlightingMethod, ModuleToSource) -> IO [Response]
- Agda.Interaction.Options: Options :: String -> Maybe FilePath -> [FilePath] -> [AbsolutePath] -> [LibName] -> Maybe FilePath -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [String] -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Int -> [String] -> Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> Maybe FilePath -> FilePath -> FilePath -> Maybe FilePath -> Bool -> Bool -> PragmaOptions -> [String] -> Bool -> Bool -> Bool -> CommandLineOptions
+ Agda.Interaction.Options: Options :: String -> Maybe FilePath -> [FilePath] -> [AbsolutePath] -> [LibName] -> Maybe FilePath -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> Maybe FilePath -> FilePath -> Bool -> FilePath -> Maybe FilePath -> Bool -> Bool -> PragmaOptions -> Bool -> Bool -> Bool -> CommandLineOptions
- Agda.Interaction.Options: PragmaOptions :: Bool -> Bool -> Verbosity -> Bool -> Bool -> Bool -> Bool -> CutOff -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Int -> PragmaOptions
+ Agda.Interaction.Options: PragmaOptions :: Bool -> Bool -> Verbosity -> Bool -> Bool -> Bool -> Bool -> CutOff -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Int -> Bool -> WarningMode -> Bool -> PragmaOptions
- Agda.Interaction.Options: [optCompileNoMain] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optCompileNoMain] :: PragmaOptions -> Bool
- Agda.Interaction.Options: [optSafe] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optSafe] :: PragmaOptions -> Bool
- Agda.Interaction.Options.Lenses: class LensCommandLineOptions a where setCommandLineOptions = mapCommandLineOptions . const mapCommandLineOptions f a = setCommandLineOptions (f $ getCommandLineOptions a) a
+ Agda.Interaction.Options.Lenses: class LensCommandLineOptions a
- Agda.Interaction.Options.Lenses: class LensIncludePaths a where setIncludePaths = mapIncludePaths . const mapIncludePaths f a = setIncludePaths (f $ getIncludePaths a) a setAbsoluteIncludePaths = mapAbsoluteIncludePaths . const mapAbsoluteIncludePaths f a = setAbsoluteIncludePaths (f $ getAbsoluteIncludePaths a) a
+ Agda.Interaction.Options.Lenses: class LensIncludePaths a
- Agda.Interaction.Options.Lenses: class LensPersistentVerbosity a where setPersistentVerbosity = mapPersistentVerbosity . const mapPersistentVerbosity f a = setPersistentVerbosity (f $ getPersistentVerbosity a) a
+ Agda.Interaction.Options.Lenses: class LensPersistentVerbosity a
- Agda.Interaction.Options.Lenses: class LensPragmaOptions a where setPragmaOptions = mapPragmaOptions . const mapPragmaOptions f a = setPragmaOptions (f $ getPragmaOptions a) a
+ Agda.Interaction.Options.Lenses: class LensPragmaOptions a
- Agda.Interaction.Options.Lenses: class LensSafeMode a where setSafeMode = mapSafeMode . const mapSafeMode f a = setSafeMode (f $ getSafeMode a) a
+ Agda.Interaction.Options.Lenses: class LensSafeMode a
- Agda.Interaction.Options.Lenses: class LensVerbosity a where setVerbosity = mapVerbosity . const mapVerbosity f a = setVerbosity (f $ getVerbosity a) a
+ Agda.Interaction.Options.Lenses: class LensVerbosity a
- Agda.Interaction.Response: Info_CompilationOk :: DisplayInfo
+ Agda.Interaction.Response: Info_CompilationOk :: String -> String -> DisplayInfo
- Agda.Interaction.Response: Resp_HighlightingInfo :: HighlightingInfo -> ModuleToSource -> Response
+ Agda.Interaction.Response: Resp_HighlightingInfo :: HighlightingInfo -> HighlightingMethod -> ModuleToSource -> Response
- Agda.Interaction.Response: type InteractionOutputCallback = Response -> TCM ()
+ Agda.Interaction.Response: type InteractionOutputCallback = Response -> IO ()
- Agda.Interaction.SearchAbout: findMentions :: Rewrite -> Range -> String -> TCM [(Name, Type)]
+ Agda.Interaction.SearchAbout: findMentions :: Rewrite -> Range -> String -> ScopeM [(Name, Type)]
- Agda.Main: printUsage :: IO ()
+ Agda.Main: printUsage :: [Backend] -> IO ()
- Agda.Main: printVersion :: IO ()
+ Agda.Main: printVersion :: [Backend] -> IO ()
- Agda.Main: runAgda :: TCM ()
+ Agda.Main: runAgda :: [Backend] -> IO ()
- Agda.Main: runAgdaWithOptions :: TCM () -> String -> CommandLineOptions -> TCM ()
+ Agda.Main: runAgdaWithOptions :: [Backend] -> TCM () -> (TCM (Maybe Interface) -> TCM a) -> String -> CommandLineOptions -> TCM (Maybe a)
- Agda.Syntax.Abstract: AbsurdLam :: ExprInfo -> Hiding -> Expr
+ Agda.Syntax.Abstract: AbsurdLam :: LamInfo -> Hiding -> Expr
- Agda.Syntax.Abstract: Clause :: lhs -> [NamedDotPattern] -> RHS -> [Declaration] -> Bool -> Clause' lhs
+ Agda.Syntax.Abstract: Clause :: lhs -> [NamedDotPattern] -> [StrippedDotPattern] -> RHS -> [Declaration] -> Bool -> Clause' lhs
- Agda.Syntax.Abstract: ExtendedLam :: ExprInfo -> DefInfo -> QName -> [Clause] -> Expr
+ Agda.Syntax.Abstract: ExtendedLam :: LamInfo -> DefInfo -> QName -> [Clause] -> Expr
- Agda.Syntax.Abstract: Lam :: ExprInfo -> LamBinding -> Expr -> Expr
+ Agda.Syntax.Abstract: Lam :: LamInfo -> LamBinding -> Expr -> Expr
- Agda.Syntax.Abstract.Name: class MkName a where mkName_ = mkName noRange
+ Agda.Syntax.Abstract.Name: class MkName a
- Agda.Syntax.Abstract.Views: class ExprLike a where recurseExpr = traverse . recurseExpr foldExpr f = getConst . recurseExpr (\ pre post -> Const (f pre) <* post) traverseExpr f = recurseExpr (\ pre post -> f =<< post) mapExpr f = runIdentity . traverseExpr (Identity . f)
+ Agda.Syntax.Abstract.Views: class ExprLike a
- Agda.Syntax.Common: ArgInfo :: Hiding -> Relevance -> Origin -> Bool -> ArgInfo
+ Agda.Syntax.Common: ArgInfo :: Hiding -> Relevance -> Origin -> ArgInfo
- Agda.Syntax.Common: Instance :: Hiding
+ Agda.Syntax.Common: Instance :: Overlappable -> Hiding
- Agda.Syntax.Common: class LensArgInfo a where setArgInfo ai = mapArgInfo (const ai) mapArgInfo f a = setArgInfo (f $ getArgInfo a) a
+ Agda.Syntax.Common: class LensArgInfo a
- Agda.Syntax.Common: class LensHiding a where setHiding h = mapHiding (const h) mapHiding f a = setHiding (f $ getHiding a) a
+ Agda.Syntax.Common: class LensHiding a
- Agda.Syntax.Common: class LensOrigin a where setOrigin o = mapOrigin (const o) mapOrigin f a = setOrigin (f $ getOrigin a) a
+ Agda.Syntax.Common: class LensOrigin a
- Agda.Syntax.Common: class LensRelevance a where setRelevance h = mapRelevance (const h) mapRelevance f a = setRelevance (f $ getRelevance a) a
+ Agda.Syntax.Common: class LensRelevance a
- Agda.Syntax.Common: class Eq a => Underscore a where isUnderscore = (== underscore)
+ Agda.Syntax.Common: class Eq a => Underscore a
- Agda.Syntax.Common: unusableRelevance :: Relevance -> Bool
+ Agda.Syntax.Common: unusableRelevance :: LensRelevance a => a -> Bool
- Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity' -> IsAbstract -> TerminationCheck -> Name -> [Clause] -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity' -> IsAbstract -> IsInstance -> TerminationCheck -> Name -> [Clause] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: PolarityPragmasButNotPostulates :: [Name] -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: PolarityPragmasButNotPostulates :: [Name] -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: UnknownNamesInFixityDecl :: [Name] -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UnknownNamesInFixityDecl :: [Name] -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: UnknownNamesInPolarityPragmas :: [Name] -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UnknownNamesInPolarityPragmas :: [Name] -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: UselessAbstract :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UselessAbstract :: Range -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: UselessInstance :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UselessInstance :: Range -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: UselessPrivate :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UselessPrivate :: Range -> DeclarationWarning
- Agda.Syntax.Concrete.Definitions: WrongParameters :: Name -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: WrongParameters :: Name -> Params -> Params -> DeclarationException
- Agda.Syntax.Concrete.Definitions: runNice :: Nice a -> Either DeclarationException a
+ Agda.Syntax.Concrete.Definitions: runNice :: Nice a -> (Either DeclarationException a, NiceWarnings)
- Agda.Syntax.Concrete.Generic: class ExprLike a where traverseExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 43)) foldExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 44))
+ Agda.Syntax.Concrete.Generic: class ExprLike a
- Agda.Syntax.Concrete.Name: TopLevelModuleName :: [String] -> TopLevelModuleName
+ Agda.Syntax.Concrete.Name: TopLevelModuleName :: Range -> [String] -> TopLevelModuleName
- Agda.Syntax.Concrete.Operators.Parser: [In] :: NK InfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [In] :: NK 'InfixNotation
- Agda.Syntax.Concrete.Operators.Parser: [Non] :: NK NonfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Non] :: NK 'NonfixNotation
- Agda.Syntax.Concrete.Operators.Parser: [Post] :: NK PostfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Post] :: NK 'PostfixNotation
- Agda.Syntax.Concrete.Operators.Parser: [Pre] :: NK PrefixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Pre] :: NK 'PrefixNotation
- Agda.Syntax.Concrete.Pretty: prettyOpApp :: Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc]
+ Agda.Syntax.Concrete.Pretty: prettyOpApp :: forall a. Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc]
- Agda.Syntax.Fixity: appBrackets :: Precedence -> Bool
+ Agda.Syntax.Fixity: appBrackets :: PrecedenceStack -> Bool
- Agda.Syntax.Fixity: lamBrackets :: Precedence -> Bool
+ Agda.Syntax.Fixity: lamBrackets :: PrecedenceStack -> Bool
- Agda.Syntax.Fixity: opBrackets :: Fixity -> Precedence -> Bool
+ Agda.Syntax.Fixity: opBrackets :: Fixity -> PrecedenceStack -> Bool
- Agda.Syntax.Fixity: piBrackets :: Precedence -> Bool
+ Agda.Syntax.Fixity: piBrackets :: PrecedenceStack -> Bool
- Agda.Syntax.Fixity: roundFixBrackets :: Precedence -> Bool
+ Agda.Syntax.Fixity: roundFixBrackets :: PrecedenceStack -> Bool
- Agda.Syntax.Fixity: withAppBrackets :: Precedence -> Bool
+ Agda.Syntax.Fixity: withAppBrackets :: PrecedenceStack -> Bool
- Agda.Syntax.Internal: Clause :: Range -> Telescope -> [NamedArg DeBruijnPattern] -> Maybe Term -> Maybe (Arg Type) -> Bool -> Clause
+ Agda.Syntax.Internal: Clause :: Range -> Range -> Telescope -> [NamedArg DeBruijnPattern] -> Maybe Term -> Maybe (Arg Type) -> Bool -> Maybe Bool -> Clause
- Agda.Syntax.Internal: EmptyS :: Substitution' a
+ Agda.Syntax.Internal: EmptyS :: Empty -> Substitution' a
- Agda.Syntax.Internal: EqualityType :: Sort -> QName -> Arg Term -> Arg Term -> Arg Term -> Arg Term -> EqualityView
+ Agda.Syntax.Internal: EqualityType :: Sort -> QName -> [Arg Term] -> Arg Term -> Arg Term -> Arg Term -> EqualityView
- Agda.Syntax.Internal: class LensConName a where setConName = mapConName . const mapConName f a = setConName (f (getConName a)) a
+ Agda.Syntax.Internal: class LensConName a
- Agda.Syntax.Internal: class LensSort a where getSort a = a ^. lensSort
+ Agda.Syntax.Internal: class LensSort a
- Agda.Syntax.Internal: class TermSize a where termSize = getSum . tsize
+ Agda.Syntax.Internal: class TermSize a
- Agda.Syntax.Internal: patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]
+ Agda.Syntax.Internal: patternVars :: PatternVars a b => b -> [Arg (Either a Term)]
- Agda.Syntax.Internal.Defs: getDefs :: (GetDefs a, MonadGetDefs m) => a -> m ()
+ Agda.Syntax.Internal.Defs: getDefs :: (GetDefs a, MonadGetDefs m, Foldable f, GetDefs b, f b ~ a) => a -> m ()
- Agda.Syntax.Internal.Generic: foldTerm :: (TermLike a, Monoid m) => (Term -> m) -> a -> m
+ Agda.Syntax.Internal.Generic: foldTerm :: (TermLike a, Monoid m, Foldable f, TermLike b, f b ~ a) => (Term -> m) -> a -> m
- Agda.Syntax.Internal.Generic: traverseTermM :: (TermLike a, Monad m) => (Term -> m Term) -> a -> m a
+ Agda.Syntax.Internal.Generic: traverseTermM :: (TermLike a, Monad m, Traversable f, TermLike b, f b ~ a) => (Term -> m Term) -> a -> m a
- Agda.Syntax.Internal.Names: namesIn :: NamesIn a => a -> Set QName
+ Agda.Syntax.Internal.Names: namesIn :: (NamesIn a, Foldable f, NamesIn b, f b ~ a) => a -> Set QName
- Agda.Syntax.Internal.Pattern: labelPatVars :: LabelPatVars a b i => a -> State [i] b
+ Agda.Syntax.Internal.Pattern: labelPatVars :: (LabelPatVars a b i, Traversable f, LabelPatVars a' b' i, f a' ~ a, f b' ~ b) => a -> State [i] b
- Agda.Syntax.Internal.Pattern: unlabelPatVars :: LabelPatVars a b i => b -> a
+ Agda.Syntax.Internal.Pattern: unlabelPatVars :: (LabelPatVars a b i, Traversable f, LabelPatVars a' b' i, f a' ~ a, f b' ~ b) => b -> a
- Agda.Syntax.Internal.SanityCheck: sanityCheckSubst :: (Pretty a, FreeVS a) => Telescope -> Substitution' a -> Telescope -> TCM ()
+ Agda.Syntax.Internal.SanityCheck: sanityCheckSubst :: (Pretty a, Free a) => Telescope -> Substitution' a -> Telescope -> TCM ()
- Agda.Syntax.Internal.SanityCheck: sanityCheckVars :: (Pretty a, FreeVS a) => Telescope -> a -> TCM ()
+ Agda.Syntax.Internal.SanityCheck: sanityCheckVars :: (Pretty a, Free a) => Telescope -> a -> TCM ()
- Agda.Syntax.Parser.Literate: Code :: LayerType
+ Agda.Syntax.Parser.Literate: Code :: LayerRole
- Agda.Syntax.Parser.Literate: Comment :: LayerType
+ Agda.Syntax.Parser.Literate: Comment :: LayerRole
- Agda.Syntax.Parser.Literate: Layer :: LayerType -> Interval -> String -> Layer
+ Agda.Syntax.Parser.Literate: Layer :: LayerRole -> Interval -> String -> Layer
- Agda.Syntax.Parser.Literate: Markup :: LayerType
+ Agda.Syntax.Parser.Literate: Markup :: LayerRole
- Agda.Syntax.Parser.Literate: isCode :: Layer -> Bool
+ Agda.Syntax.Parser.Literate: isCode :: LayerRole -> Bool
- Agda.Syntax.Scope.Base: LocalVar :: Name -> LocalVar
+ Agda.Syntax.Scope.Base: LocalVar :: Name -> Bool -> [AbstractName] -> LocalVar
- Agda.Syntax.Scope.Base: Scope :: ModuleName -> [ModuleName] -> ScopeNameSpaces -> Map QName ModuleName -> Bool -> Scope
+ Agda.Syntax.Scope.Base: Scope :: ModuleName -> [ModuleName] -> ScopeNameSpaces -> Map QName ModuleName -> Maybe DataOrRecord -> Scope
- Agda.Syntax.Scope.Base: ScopeInfo :: ModuleName -> Map ModuleName Scope -> LocalVars -> Precedence -> Map QName [QName] -> Map ModuleName [QName] -> InScopeSet -> ScopeInfo
+ Agda.Syntax.Scope.Base: ScopeInfo :: ModuleName -> Map ModuleName Scope -> LocalVars -> PrecedenceStack -> Map QName [QName] -> Map ModuleName [QName] -> InScopeSet -> ScopeInfo
- Agda.Syntax.Scope.Base: [scopeDatatypeModule] :: Scope -> Bool
+ Agda.Syntax.Scope.Base: [scopeDatatypeModule] :: Scope -> Maybe DataOrRecord
- Agda.Syntax.Scope.Base: [scopePrecedence] :: ScopeInfo -> Precedence
+ Agda.Syntax.Scope.Base: [scopePrecedence] :: ScopeInfo -> PrecedenceStack
- Agda.Syntax.Scope.Base: blockOfLines :: String -> [String] -> [String]
+ Agda.Syntax.Scope.Base: blockOfLines :: Doc -> [Doc] -> [Doc]
- Agda.Syntax.Scope.Monad: VarName :: Name -> ResolvedName
+ Agda.Syntax.Scope.Monad: VarName :: Name -> Bool -> ResolvedName
- Agda.Syntax.Scope.Monad: bindVariable :: Name -> Name -> ScopeM ()
+ Agda.Syntax.Scope.Monad: bindVariable :: Bool -> Name -> Name -> ScopeM ()
- Agda.Syntax.Scope.Monad: createModule :: Bool -> ModuleName -> ScopeM ()
+ Agda.Syntax.Scope.Monad: createModule :: Maybe DataOrRecord -> ModuleName -> ScopeM ()
- Agda.Syntax.Scope.Monad: isDatatypeModule :: ModuleName -> ScopeM Bool
+ Agda.Syntax.Scope.Monad: isDatatypeModule :: ModuleName -> ScopeM (Maybe DataOrRecord)
- Agda.Syntax.Translation.AbstractToConcrete: class ToConcrete a c | a -> c where toConcrete x = bindToConcrete x return bindToConcrete x ret = ret =<< toConcrete x
+ Agda.Syntax.Translation.AbstractToConcrete: class ToConcrete a c | a -> c
- Agda.Syntax.Translation.InternalToAbstract: class Reify i a | i -> a where reifyWhen _ = reify
+ Agda.Syntax.Translation.InternalToAbstract: class Reify i a | i -> a
- Agda.Termination.CallGraph: (>*<) :: (CallComb a, ?cutoff :: CutOff) => a -> a -> a
+ Agda.Termination.CallGraph: (>*<) :: (CallComb a, (?cutoff :: CutOff)) => a -> a -> a
- Agda.Termination.CallMatrix: (>*<) :: (CallComb a, ?cutoff :: CutOff) => a -> a -> a
+ Agda.Termination.CallMatrix: (>*<) :: (CallComb a, (?cutoff :: CutOff)) => a -> a -> a
- Agda.Termination.Inlining: inlineWithClauses :: QName -> Clause -> TCM [Clause]
+ Agda.Termination.Inlining: inlineWithClauses :: QName -> Clause -> TCM (Maybe [Clause])
- Agda.Termination.Monad: TerEnv :: Bool -> Bool -> Bool -> Maybe QName -> Maybe QName -> CutOff -> QName -> MutualNames -> [QName] -> Maybe Target -> Delayed -> [Bool] -> Bool -> Int -> MaskedDeBruijnPats -> !Int -> !Guarded -> Bool -> VarSet -> TerEnv
+ Agda.Termination.Monad: TerEnv :: Bool -> Bool -> Bool -> Maybe QName -> Maybe QName -> CutOff -> QName -> MutualNames -> [QName] -> Bool -> Maybe Target -> Delayed -> [Bool] -> Bool -> Int -> MaskedDeBruijnPatterns -> !Int -> !Guarded -> Bool -> VarSet -> TerEnv
- Agda.Termination.Monad: [terPatterns] :: TerEnv -> MaskedDeBruijnPats
+ Agda.Termination.Monad: [terPatterns] :: TerEnv -> MaskedDeBruijnPatterns
- Agda.Termination.Monad: class (Functor m, Monad m) => MonadTer m where terAsks f = f <$> terAsk
+ Agda.Termination.Monad: class (Functor m, Monad m) => MonadTer m
- Agda.Termination.Monad: patternDepth :: DeBruijnPat' a -> Int
+ Agda.Termination.Monad: patternDepth :: forall a. Pattern' a -> Int
- Agda.Termination.Monad: terGetPatterns :: TerM (MaskedDeBruijnPats)
+ Agda.Termination.Monad: terGetPatterns :: TerM (MaskedDeBruijnPatterns)
- Agda.Termination.Monad: terSetPatterns :: MaskedDeBruijnPats -> TerM a -> TerM a
+ Agda.Termination.Monad: terSetPatterns :: MaskedDeBruijnPatterns -> TerM a -> TerM a
- Agda.Termination.Monad: unusedVar :: DeBruijnPat
+ Agda.Termination.Monad: unusedVar :: DeBruijnPattern
- Agda.Termination.Order: Decr :: {-# UNPACK #-} !Int -> Order
+ Agda.Termination.Order: Decr :: !Bool -> {-# UNPACK #-} !Int -> Order
- Agda.Termination.Order: decr :: (?cutoff :: CutOff) => Int -> Order
+ Agda.Termination.Order: decr :: (?cutoff :: CutOff) => Bool -> Int -> Order
- Agda.TypeChecking.CheckInternal: Action :: (Type -> Term -> TCM Term) -> (Type -> Term -> TCM Term) -> Action
+ Agda.TypeChecking.CheckInternal: Action :: (Type -> Term -> TCM Term) -> (Type -> Term -> TCM Term) -> (Relevance -> Relevance -> Relevance) -> Action
- Agda.TypeChecking.CompiledClause: Case :: (Arg Int) -> (Case CompiledClauses) -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Case :: (Arg Int) -> (Case (CompiledClauses' a)) -> CompiledClauses' a
- Agda.TypeChecking.CompiledClause: Done :: [Arg ArgName] -> Term -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Done :: [Arg ArgName] -> a -> CompiledClauses' a
- Agda.TypeChecking.CompiledClause: Fail :: CompiledClauses
+ Agda.TypeChecking.CompiledClause: Fail :: CompiledClauses' a
- Agda.TypeChecking.CompiledClause: prettyMap :: (Show k, Pretty v) => Map k v -> [Doc]
+ Agda.TypeChecking.CompiledClause: prettyMap :: (Pretty k, Pretty v) => Map k v -> [Doc]
- Agda.TypeChecking.Coverage.Match: isTrivialPattern :: Pattern' a -> Bool
+ Agda.TypeChecking.Coverage.Match: isTrivialPattern :: (HasConstInfo m) => Pattern' a -> m Bool
- Agda.TypeChecking.Datatypes: getConForm :: QName -> TCM ConHead
+ Agda.TypeChecking.Datatypes: getConForm :: QName -> TCM (Either SigError ConHead)
- Agda.TypeChecking.Datatypes: getConHead :: QName -> TCM ConHead
+ Agda.TypeChecking.Datatypes: getConHead :: QName -> TCM (Either SigError ConHead)
- Agda.TypeChecking.Datatypes: getConType :: ConHead -> Type -> TCM (Maybe Type)
+ Agda.TypeChecking.Datatypes: getConType :: ConHead -> Type -> TCM (Maybe ((QName, Type, Args), Type))
- Agda.TypeChecking.Datatypes: getOrigConHead :: QName -> TCM ConHead
+ Agda.TypeChecking.Datatypes: getOrigConHead :: QName -> TCM (Either SigError ConHead)
- Agda.TypeChecking.DisplayForm: match :: Match a => a -> a -> MaybeT TCM [Term]
+ Agda.TypeChecking.DisplayForm: match :: Match a => a -> a -> MaybeT TCM [WithOrigin Term]
- Agda.TypeChecking.Free: allFreeVars :: Free' a VarSet => a -> VarSet
+ Agda.TypeChecking.Free: allFreeVars :: Free a => a -> VarSet
- Agda.TypeChecking.Free: allRelevantVars :: Free' a VarSet => a -> VarSet
+ Agda.TypeChecking.Free: allRelevantVars :: Free a => a -> VarSet
- Agda.TypeChecking.Free: allRelevantVarsIgnoring :: Free' a VarSet => IgnoreSorts -> a -> VarSet
+ Agda.TypeChecking.Free: allRelevantVarsIgnoring :: Free a => IgnoreSorts -> a -> VarSet
- Agda.TypeChecking.Free: closed :: Free' a All => a -> Bool
+ Agda.TypeChecking.Free: closed :: Free a => a -> Bool
- Agda.TypeChecking.Free: freeVars :: (Monoid c, Singleton Variable c, Free' a c) => a -> c
+ Agda.TypeChecking.Free: freeVars :: (IsVarSet c, Singleton Variable c, Free a) => a -> c
- Agda.TypeChecking.Free: freeVars' :: (Free' a c, Monoid c) => a -> FreeM c
+ Agda.TypeChecking.Free: freeVars' :: (Free a, IsVarSet c) => a -> FreeM c
- Agda.TypeChecking.Free: occurrence :: FreeV a => Nat -> a -> Occurrence
+ Agda.TypeChecking.Free: occurrence :: Free a => Nat -> a -> Occurrence
- Agda.TypeChecking.Free: runFree :: (Monoid c, Free' a c) => SingleVar c -> IgnoreSorts -> a -> c
+ Agda.TypeChecking.Free: runFree :: (IsVarSet c, Free a) => SingleVar c -> IgnoreSorts -> a -> c
- Agda.TypeChecking.Free.Lazy: FreeEnv :: !IgnoreSorts -> !Int -> !FlexRig -> !Relevance -> SingleVar c -> FreeEnv c
+ Agda.TypeChecking.Free.Lazy: FreeEnv :: !IgnoreSorts -> !FlexRig -> !Relevance -> (Maybe Variable -> c) -> FreeEnv c
- Agda.TypeChecking.Free.Lazy: [feSingleton] :: FreeEnv c -> SingleVar c
+ Agda.TypeChecking.Free.Lazy: [feSingleton] :: FreeEnv c -> Maybe Variable -> c
- Agda.TypeChecking.Free.Lazy: freeVars' :: (Free' a c, Monoid c) => a -> FreeM c
+ Agda.TypeChecking.Free.Lazy: freeVars' :: (Free a, IsVarSet c) => a -> FreeM c
- Agda.TypeChecking.Free.Lazy: initFreeEnv :: SingleVar c -> FreeEnv c
+ Agda.TypeChecking.Free.Lazy: initFreeEnv :: Monoid c => SingleVar c -> FreeEnv c
- Agda.TypeChecking.Free.Lazy: type Variable = (Int, VarOcc)
+ Agda.TypeChecking.Free.Lazy: type Variable = Int
- Agda.TypeChecking.Free.Lazy: variable :: (Monoid c) => Int -> FreeM c
+ Agda.TypeChecking.Free.Lazy: variable :: IsVarSet c => Int -> FreeM c
- Agda.TypeChecking.MetaVars.Occurs: foldRigid :: (FoldRigid a, Monoid (TCM m)) => (Nat -> TCM m) -> a -> TCM m
+ Agda.TypeChecking.MetaVars.Occurs: foldRigid :: (FoldRigid a, (Monoid (TCM m))) => (Nat -> TCM m) -> a -> TCM m
- Agda.TypeChecking.Monad.Base: AbstractDefn :: Defn
+ Agda.TypeChecking.Monad.Base: AbstractDefn :: Defn -> Defn
- Agda.TypeChecking.Monad.Base: Constructor :: Nat -> ConHead -> QName -> IsAbstract -> Induction -> [Bool] -> Defn
+ Agda.TypeChecking.Monad.Base: Constructor :: Int -> Int -> ConHead -> QName -> IsAbstract -> Induction -> [Bool] -> Defn
- Agda.TypeChecking.Monad.Base: CoverageNoExactSplit :: QName -> Clause -> TypeError
+ Agda.TypeChecking.Monad.Base: CoverageNoExactSplit :: QName -> [Clause] -> Warning
- Agda.TypeChecking.Monad.Base: Datatype :: Nat -> Permutation -> Drop Permutation -> Nat -> Induction -> (Maybe Clause) -> [QName] -> Sort -> [QName] -> IsAbstract -> Defn
+ Agda.TypeChecking.Monad.Base: Datatype :: Nat -> Permutation -> Drop Permutation -> Nat -> Induction -> (Maybe Clause) -> [QName] -> Sort -> Maybe [QName] -> IsAbstract -> Defn
- Agda.TypeChecking.Monad.Base: Defn :: ArgInfo -> QName -> Type -> [Polarity] -> [Occurrence] -> [LocalDisplayForm] -> MutualId -> CompiledRepresentation -> Maybe QName -> Bool -> Bool -> Defn -> Definition
+ Agda.TypeChecking.Monad.Base: Defn :: ArgInfo -> QName -> Type -> [Polarity] -> [Occurrence] -> [LocalDisplayForm] -> MutualId -> CompiledRepresentation -> Maybe QName -> Bool -> Bool -> Bool -> Defn -> Definition
- Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> Maybe Compiled -> FunctionInverse -> [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Set FunctionFlag -> Maybe Bool -> Maybe ExtLamInfo -> Maybe QName -> Bool -> Defn
+ Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> Maybe Compiled -> FunctionInverse -> Maybe [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Set FunctionFlag -> Maybe Bool -> Maybe ExtLamInfo -> Maybe QName -> Bool -> Defn
- Agda.TypeChecking.Monad.Base: IOException :: Range -> IOException -> TCErr
+ Agda.TypeChecking.Monad.Base: IOException :: TCState -> Range -> IOException -> TCErr
- Agda.TypeChecking.Monad.Base: InteractionPoint :: Range -> Maybe MetaId -> IPClause -> InteractionPoint
+ Agda.TypeChecking.Monad.Base: InteractionPoint :: Range -> Maybe MetaId -> Bool -> IPClause -> InteractionPoint
- Agda.TypeChecking.Monad.Base: Interface :: Hash -> [(ModuleName, Hash)] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> DisplayForms -> BuiltinThings (String, QName) -> Set String -> Set String -> [String] -> HighlightingInfo -> [OptionsPragma] -> PatternSynDefns -> Interface
+ Agda.TypeChecking.Monad.Base: Interface :: Hash -> [(ModuleName, Hash)] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> DisplayForms -> BuiltinThings (String, QName) -> Map BackendName [ForeignCode] -> HighlightingInfo -> [OptionsPragma] -> PatternSynDefns -> [TCWarning] -> Interface
- Agda.TypeChecking.Monad.Base: PConstr :: [ProblemId] -> Closure Constraint -> ProblemConstraint
+ Agda.TypeChecking.Monad.Base: PConstr :: Set ProblemId -> Closure Constraint -> ProblemConstraint
- Agda.TypeChecking.Monad.Base: PVar :: (Maybe CtxId) -> !Int -> [Arg Int] -> NLPat
+ Agda.TypeChecking.Monad.Base: PVar :: !Int -> [Arg Int] -> NLPat
- Agda.TypeChecking.Monad.Base: PersistentTCSt :: DecodedModules -> CommandLineOptions -> InteractionOutputCallback -> !Benchmark -> !Statistics -> !(Maybe LoadedFileCache) -> PersistentTCState
+ Agda.TypeChecking.Monad.Base: PersistentTCSt :: DecodedModules -> CommandLineOptions -> InteractionOutputCallback -> !Benchmark -> !Statistics -> !(Maybe LoadedFileCache) -> [Backend] -> PersistentTCState
- Agda.TypeChecking.Monad.Base: PostScopeState :: !CompressedFile -> !DisambiguatedNames -> !MetaStore -> !InteractionPoints -> !InteractionPoints -> !Constraints -> !Constraints -> !Bool -> !(Set QName) -> !Signature -> !ModuleParamDict -> !DisplayForms -> !(Maybe ModuleName) -> !TempInstanceTable -> !Statistics -> ![TCWarning] -> !(Map MutualId MutualBlock) -> !(BuiltinThings PrimFun) -> !MetaId -> !MutualId -> !CtxId -> !ProblemId -> !Int -> !NameId -> PostScopeState
+ Agda.TypeChecking.Monad.Base: PostScopeState :: !CompressedFile -> !DisambiguatedNames -> !MetaStore -> !InteractionPoints -> !Constraints -> !Constraints -> !Bool -> !(Set QName) -> !Signature -> !ModuleParamDict -> !DisplayForms -> !(Maybe ModuleName) -> !TempInstanceTable -> !Statistics -> ![TCWarning] -> !(Map MutualId MutualBlock) -> !(BuiltinThings PrimFun) -> !MetaId -> !MutualId -> !CtxId -> !ProblemId -> !Int -> !NameId -> PostScopeState
- Agda.TypeChecking.Monad.Base: PreScopeState :: !CompressedFile -> !Signature -> !(Set ModuleName) -> !ModuleToSource -> !VisitedModules -> !ScopeInfo -> !PatternSynDefns -> !PatternSynDefns -> !PragmaOptions -> !(BuiltinThings PrimFun) -> !DisplayForms -> !InstanceTable -> !(Set String) -> !(Set String) -> ![String] -> !InteractionId -> PreScopeState
+ Agda.TypeChecking.Monad.Base: PreScopeState :: !CompressedFile -> !Signature -> !(Set ModuleName) -> !ModuleToSource -> !VisitedModules -> !ScopeInfo -> !PatternSynDefns -> !PatternSynDefns -> !PragmaOptions -> !(BuiltinThings PrimFun) -> !DisplayForms -> !InstanceTable -> !(Map BackendName [ForeignCode]) -> !InteractionId -> PreScopeState
- Agda.TypeChecking.Monad.Base: Projection :: Bool -> QName -> Arg QName -> Int -> ProjLams -> Projection
+ Agda.TypeChecking.Monad.Base: Projection :: Maybe QName -> QName -> Arg QName -> Int -> ProjLams -> Projection
- Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> ConHead -> Bool -> [Arg QName] -> Telescope -> [QName] -> EtaEquality -> Maybe Induction -> Bool -> IsAbstract -> Defn
+ Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> ConHead -> Bool -> [Arg QName] -> Telescope -> Maybe [QName] -> EtaEquality -> Maybe Induction -> IsAbstract -> Defn
- Agda.TypeChecking.Monad.Base: SafeFlagNoPositivityCheck :: TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagNoPositivityCheck :: Warning
- Agda.TypeChecking.Monad.Base: SafeFlagNonTerminating :: TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagNonTerminating :: Warning
- Agda.TypeChecking.Monad.Base: SafeFlagPolarity :: TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPolarity :: Warning
- Agda.TypeChecking.Monad.Base: SafeFlagPostulate :: Name -> TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPostulate :: Name -> Warning
- Agda.TypeChecking.Monad.Base: SafeFlagPragma :: [String] -> TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPragma :: [String] -> Warning
- Agda.TypeChecking.Monad.Base: SafeFlagPrimTrustMe :: TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPrimTrustMe :: Warning
- Agda.TypeChecking.Monad.Base: SafeFlagTerminating :: TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagTerminating :: Warning
- Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> Maybe AbsolutePath -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> TerminationCheck () -> Bool -> Bool -> Bool -> [ProblemId] -> AbstractMode -> Relevance -> Bool -> Range -> Range -> IPClause -> Maybe (Closure Call) -> HighlightingLevel -> HighlightingMethod -> !Int -> Bool -> ExpandHidden -> Maybe QName -> Simplification -> AllowedReductions -> Bool -> Bool -> Bool -> Bool -> UnquoteFlags -> !Int -> TCEnv
+ Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> Maybe AbsolutePath -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> TerminationCheck () -> Bool -> Bool -> Bool -> Set ProblemId -> AbstractMode -> Relevance -> Bool -> Range -> Range -> IPClause -> Maybe (Closure Call) -> HighlightingLevel -> HighlightingMethod -> !Int -> Bool -> ExpandHidden -> Maybe QName -> Simplification -> AllowedReductions -> Bool -> Bool -> Bool -> Bool -> UnquoteFlags -> !Int -> TCEnv
- Agda.TypeChecking.Monad.Base: TCWarning :: TCState -> Closure Warning -> TCWarning
+ Agda.TypeChecking.Monad.Base: TCWarning :: Range -> Warning -> Doc -> TCWarning
- Agda.TypeChecking.Monad.Base: TooManyPolarities :: QName -> Integer -> TypeError
+ Agda.TypeChecking.Monad.Base: TooManyPolarities :: QName -> Int -> TypeError
- Agda.TypeChecking.Monad.Base: UnificationStuck :: Telescope -> [Term] -> [Term] -> TypeError
+ Agda.TypeChecking.Monad.Base: UnificationStuck :: QName -> Telescope -> Args -> Args -> [UnificationFailure] -> SplitError
- Agda.TypeChecking.Monad.Base: UnifyConflict :: ConHead -> ConHead -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyConflict :: Telescope -> Term -> Term -> NegativeUnification
- Agda.TypeChecking.Monad.Base: UnifyCycle :: Int -> Term -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyCycle :: Telescope -> Int -> Term -> NegativeUnification
- Agda.TypeChecking.Monad.Base: UnifyIndicesNotVars :: Type -> Term -> Term -> Args -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyIndicesNotVars :: Telescope -> Type -> Term -> Term -> Args -> UnificationFailure
- Agda.TypeChecking.Monad.Base: UnreachableClauses :: QName -> [[NamedArg DeBruijnPattern]] -> TypeError
+ Agda.TypeChecking.Monad.Base: UnreachableClauses :: QName -> [[NamedArg DeBruijnPattern]] -> Warning
- Agda.TypeChecking.Monad.Base: WithClausePatternMismatch :: Pattern -> Pattern -> TypeError
+ Agda.TypeChecking.Monad.Base: WithClausePatternMismatch :: Pattern -> (NamedArg DeBruijnPattern) -> TypeError
- Agda.TypeChecking.Monad.Base: WrongIrrelevanceInLambda :: Type -> TypeError
+ Agda.TypeChecking.Monad.Base: WrongIrrelevanceInLambda :: TypeError
- Agda.TypeChecking.Monad.Base: [conPars] :: Defn -> Nat
+ Agda.TypeChecking.Monad.Base: [conPars] :: Defn -> Int
- Agda.TypeChecking.Monad.Base: [constraintProblems] :: ProblemConstraint -> [ProblemId]
+ Agda.TypeChecking.Monad.Base: [constraintProblems] :: ProblemConstraint -> Set ProblemId
- Agda.TypeChecking.Monad.Base: [dataMutual] :: Defn -> [QName]
+ Agda.TypeChecking.Monad.Base: [dataMutual] :: Defn -> Maybe [QName]
- Agda.TypeChecking.Monad.Base: [envActiveProblems] :: TCEnv -> [ProblemId]
+ Agda.TypeChecking.Monad.Base: [envActiveProblems] :: TCEnv -> Set ProblemId
- Agda.TypeChecking.Monad.Base: [funMutual] :: Defn -> [QName]
+ Agda.TypeChecking.Monad.Base: [funMutual] :: Defn -> Maybe [QName]
- Agda.TypeChecking.Monad.Base: [projProper] :: Projection -> Bool
+ Agda.TypeChecking.Monad.Base: [projProper] :: Projection -> Maybe QName
- Agda.TypeChecking.Monad.Base: [recMutual] :: Defn -> [QName]
+ Agda.TypeChecking.Monad.Base: [recMutual] :: Defn -> Maybe [QName]
- Agda.TypeChecking.Monad.Base: class Enum i => HasFresh i where nextFresh' = succ
+ Agda.TypeChecking.Monad.Base: class Enum i => HasFresh i
- Agda.TypeChecking.Monad.Base: class (Applicative tcm, MonadIO tcm, MonadReader TCEnv tcm, MonadState TCState tcm) => MonadTCM tcm
+ Agda.TypeChecking.Monad.Base: class (Applicative tcm, MonadIO tcm, MonadReader TCEnv tcm, MonadState TCState tcm, HasOptions tcm) => MonadTCM tcm
- Agda.TypeChecking.Monad.Base: eActiveProblems :: Lens' [ProblemId] TCEnv
+ Agda.TypeChecking.Monad.Base: eActiveProblems :: Lens' (Set ProblemId) TCEnv
- Agda.TypeChecking.Monad.Base: freshName :: (MonadState TCState m, HasFresh NameId) => Range -> String -> m Name
+ Agda.TypeChecking.Monad.Base: freshName :: MonadState TCState m => Range -> String -> m Name
- Agda.TypeChecking.Monad.Base: freshName_ :: (FreshName a, MonadState TCState m, HasFresh NameId) => a -> m Name
+ Agda.TypeChecking.Monad.Base: freshName_ :: (FreshName a, MonadState TCState m) => a -> m Name
- Agda.TypeChecking.Monad.Base: freshNoName :: (MonadState TCState m, HasFresh NameId) => Range -> m Name
+ Agda.TypeChecking.Monad.Base: freshNoName :: MonadState TCState m => Range -> m Name
- Agda.TypeChecking.Monad.Base: freshNoName_ :: (MonadState TCState m, HasFresh NameId) => m Name
+ Agda.TypeChecking.Monad.Base: freshNoName_ :: MonadState TCState m => m Name
- Agda.TypeChecking.Monad.Benchmark: class (Ord a, Functor m, MonadIO m) => MonadBench a m | m -> a where getsBenchmark f = f <$> getBenchmark putBenchmark b = modifyBenchmark $ const b modifyBenchmark f = do { b <- getBenchmark; putBenchmark $! f b }
+ Agda.TypeChecking.Monad.Benchmark: class (Ord a, Functor m, MonadIO m) => MonadBench a m | m -> a
- Agda.TypeChecking.Monad.Constraints: buildProblemConstraint :: [ProblemId] -> Constraint -> TCM ProblemConstraint
+ Agda.TypeChecking.Monad.Constraints: buildProblemConstraint :: Set ProblemId -> Constraint -> TCM ProblemConstraint
- Agda.TypeChecking.Monad.Constraints: solvingProblems :: [ProblemId] -> TCM a -> TCM a
+ Agda.TypeChecking.Monad.Constraints: solvingProblems :: Set ProblemId -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Context: addContext' :: (MonadTCM tcm, AddContext b) => b -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: addContext' :: (MonadTCM tcm, MonadDebug tcm, AddContext b) => b -> tcm a -> tcm a
- Agda.TypeChecking.Monad.Context: getModuleParameterSub :: MonadTCM tcm => ModuleName -> tcm Substitution
+ Agda.TypeChecking.Monad.Context: getModuleParameterSub :: (Functor m, ReadTCState m) => ModuleName -> m Substitution
- Agda.TypeChecking.Monad.Context: updateModuleParameters :: MonadTCM tcm => Substitution -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: updateModuleParameters :: (MonadTCM tcm, MonadDebug tcm) => Substitution -> tcm a -> tcm a
- Agda.TypeChecking.Monad.Context: weakenModuleParameters :: MonadTCM tcm => Nat -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: weakenModuleParameters :: (MonadTCM tcm, MonadDebug tcm) => Nat -> tcm a -> tcm a
- Agda.TypeChecking.Monad.Local: makeGlobal :: Free' a All => a -> TCM (Local a)
+ Agda.TypeChecking.Monad.Local: makeGlobal :: Free a => a -> TCM (Local a)
- Agda.TypeChecking.Monad.Local: makeLocal :: Free' a All => a -> TCM (Local a)
+ Agda.TypeChecking.Monad.Local: makeLocal :: Free a => a -> TCM (Local a)
- Agda.TypeChecking.Monad.Options: verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()
+ Agda.TypeChecking.Monad.Options: verboseS :: HasOptions m => VerboseKey -> Int -> m () -> m ()
- Agda.TypeChecking.Monad.Signature: addCoreCode :: QName -> CoreExpr -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addCoreCode :: QName -> CoreCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: addCoreType :: QName -> CoreType -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addCoreType :: QName -> CoreCode -> [CoreCode] -> TCM ()
- Agda.TypeChecking.Monad.Signature: addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addHaskellCode :: QName -> HaskellCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: addHaskellExport :: QName -> HaskellType -> String -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addHaskellExport :: QName -> String -> TCM ()
- Agda.TypeChecking.Monad.Signature: addJSCode :: QName -> String -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addJSCode :: QName -> JSCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: class (Functor m, Applicative m, Monad m) => HasConstInfo m
+ Agda.TypeChecking.Monad.Signature: class (Functor m, Applicative m, Monad m, HasOptions m, MonadDebug m) => HasConstInfo m
- Agda.TypeChecking.Monad.Signature: freeVarsToApply :: QName -> TCM Args
+ Agda.TypeChecking.Monad.Signature: freeVarsToApply :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadReader TCEnv m, MonadDebug m) => QName -> m Args
- Agda.TypeChecking.Monad.Signature: getModuleFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadReader TCEnv m) => ModuleName -> m Nat
+ Agda.TypeChecking.Monad.Signature: getModuleFreeVars :: (Functor m, Applicative m, MonadReader TCEnv m, ReadTCState m) => ModuleName -> m Nat
- Agda.TypeChecking.Monad.Signature: getMutual :: QName -> TCM [QName]
+ Agda.TypeChecking.Monad.Signature: getMutual :: QName -> TCM (Maybe [QName])
- Agda.TypeChecking.Monad.Signature: moduleParamsToApply :: ModuleName -> TCM Args
+ Agda.TypeChecking.Monad.Signature: moduleParamsToApply :: (Functor m, Applicative m, HasOptions m, MonadReader TCEnv m, ReadTCState m, MonadDebug m) => ModuleName -> m Args
- Agda.TypeChecking.Monad.Signature: whatInduction :: QName -> TCM Induction
+ Agda.TypeChecking.Monad.Signature: whatInduction :: MonadTCM tcm => QName -> tcm Induction
- Agda.TypeChecking.Monad.Trace: traceCall :: MonadTCM tcm => Call -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Trace: traceCall :: (MonadTCM tcm, MonadDebug tcm) => Call -> tcm a -> tcm a
- Agda.TypeChecking.Monad.Trace: traceCallCPS :: MonadTCM tcm => Call -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Trace: traceCallCPS :: (MonadTCM tcm, MonadDebug tcm) => Call -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Trace: traceCallCPS_ :: MonadTCM tcm => Call -> tcm a -> (tcm a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Trace: traceCallCPS_ :: (MonadTCM tcm, MonadDebug tcm) => Call -> tcm a -> (tcm a -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Trace: traceCallM :: MonadTCM tcm => tcm Call -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Trace: traceCallM :: (MonadTCM tcm, MonadDebug tcm) => tcm Call -> tcm a -> tcm a
- Agda.TypeChecking.Patterns.Abstract: expandPatternSynonyms :: ExpandPatternSynonyms a => a -> TCM a
+ Agda.TypeChecking.Patterns.Abstract: expandPatternSynonyms :: (ExpandPatternSynonyms a, Traversable f, ExpandPatternSynonyms b, f b ~ a) => a -> TCM a
- Agda.TypeChecking.Polarity: computePolarity :: QName -> TCM ()
+ Agda.TypeChecking.Polarity: computePolarity :: [QName] -> TCM ()
- Agda.TypeChecking.Primitive: class ToTerm a where toTermR = (pure .) <$> toTerm
+ Agda.TypeChecking.Primitive: class ToTerm a
- Agda.TypeChecking.Reduce: class Reduce t where reduce' t = ignoreBlocking <$> reduceB' t reduceB' t = notBlocked <$> reduce' t
+ Agda.TypeChecking.Reduce: class Reduce t
- Agda.TypeChecking.Rewriting.NonLinMatch: reallyFree :: (Reduce a, Normalise a, Free' a FreeVars) => (Int -> Bool) -> a -> ReduceM (Either Blocked_ (Maybe a))
+ Agda.TypeChecking.Rewriting.NonLinMatch: reallyFree :: (Reduce a, Normalise a, Free a) => (Int -> Bool) -> a -> ReduceM (Either Blocked_ (Maybe a))
- Agda.TypeChecking.Rules.Data: fitsIn :: Type -> Sort -> TCM ()
+ Agda.TypeChecking.Rules.Data: fitsIn :: Type -> Sort -> TCM Int
- Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Type -> Telescope -> Telescope -> [Term] -> [EqualityView] -> Type -> [NamedArg DeBruijnPattern] -> Nat -> Permutation -> Permutation -> Permutation -> [Clause] -> WithFunctionProblem
+ Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Type -> Telescope -> Telescope -> Telescope -> [Term] -> [EqualityView] -> Type -> [NamedArg DeBruijnPattern] -> Nat -> Permutation -> Permutation -> Permutation -> [Clause] -> WithFunctionProblem
- Agda.TypeChecking.Rules.LHS: checkLeftHandSide :: Call -> Maybe QName -> [NamedArg Pattern] -> Type -> Maybe Substitution -> (LHSResult -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.LHS: checkLeftHandSide :: Call -> Maybe QName -> [NamedArg Pattern] -> Type -> Maybe Substitution -> [StrippedDotPattern] -> (LHSResult -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.LHS: class IsFlexiblePattern a where isFlexiblePattern p = isJust <$> runMaybeT (maybeFlexiblePattern p)
+ Agda.TypeChecking.Rules.LHS: class IsFlexiblePattern a
- Agda.TypeChecking.Rules.LHS.Problem: FlexibleVar :: Hiding -> FlexibleVarKind -> Maybe Int -> a -> FlexibleVar a
+ Agda.TypeChecking.Rules.LHS.Problem: FlexibleVar :: Hiding -> Origin -> FlexibleVarKind -> Maybe Int -> a -> FlexibleVar a
- Agda.TypeChecking.Rules.LHS.Problem: LHSState :: Problem -> [DotPatternInst] -> LHSState
+ Agda.TypeChecking.Rules.LHS.Problem: LHSState :: Problem -> [DotPatternInst] -> [(Range, Type)] -> LHSState
- Agda.TypeChecking.Rules.LHS.Unify: DontKnow :: TCErr -> UnificationResult' a
+ Agda.TypeChecking.Rules.LHS.Unify: DontKnow :: [UnificationFailure] -> UnificationResult' a
- Agda.TypeChecking.Rules.LHS.Unify: NoUnify :: TCErr -> UnificationResult' a
+ Agda.TypeChecking.Rules.LHS.Unify: NoUnify :: NegativeUnification -> UnificationResult' a
- Agda.TypeChecking.Rules.Term: checkAbsurdLambda :: ExprInfo -> Hiding -> Expr -> Type -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkAbsurdLambda :: LamInfo -> Hiding -> Expr -> Type -> TCM Term
- Agda.TypeChecking.Rules.Term: checkExtendedLambda :: ExprInfo -> DefInfo -> QName -> [Clause] -> Expr -> Type -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkExtendedLambda :: LamInfo -> DefInfo -> QName -> [Clause] -> Expr -> Type -> TCM Term
- Agda.TypeChecking.Serialise: class Typeable a => EmbPrj a where icode a = do { tickICode a; icod_ a }
+ Agda.TypeChecking.Serialise: class Typeable a => EmbPrj a
- Agda.TypeChecking.Serialise.Base: class Typeable a => EmbPrj a where icode a = do { tickICode a; icod_ a }
+ Agda.TypeChecking.Serialise.Base: class Typeable a => EmbPrj a
- Agda.TypeChecking.Serialise.Base: icodeN :: Node -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeN :: forall t. ICODE t (IsBase t) => Currying (Domains t) (S Int32) => All EmbPrj (Domains t) => Int32 -> t -> Arrows (Domains t) (S Int32)
- Agda.TypeChecking.SizedTypes.Syntax: simplify1 :: (Show f, Show r, Eq r) => CTrans r f -> CTrans r f
+ Agda.TypeChecking.SizedTypes.Syntax: simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f
- Agda.TypeChecking.SizedTypes.Utils: class Eq a => Top a where isTop = (== top)
+ Agda.TypeChecking.SizedTypes.Utils: class Eq a => Top a
- Agda.TypeChecking.SizedTypes.Utils: debug :: Bool
+ Agda.TypeChecking.SizedTypes.Utils: debug :: IORef Bool
- Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraph :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraphs :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: glb :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: glb :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> SizeExpr' r f -> SizeExpr' r f -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: glb' :: forall r f. (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: glb' :: forall r f. (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: hypGraph :: (Ord rigid, Ord flex, Show rigid, Show flex) => Set rigid -> [Hyp' rigid flex] -> Either String (HypGraph rigid flex)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: hypGraph :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) => Set rigid -> [Hyp' rigid flex] -> Either String (HypGraph rigid flex)
- Agda.TypeChecking.SizedTypes.WarshallSolver: implies :: (Ord r, Ord f, Show r, Show f, Show a, Top a, Ord a, Negative a) => Graph r f a -> Graph r f a -> Bool
+ Agda.TypeChecking.SizedTypes.WarshallSolver: implies :: (Ord r, Ord f, Pretty r, Pretty f, Pretty a, Top a, Ord a, Negative a) => Graph r f a -> Graph r f a -> Bool
- Agda.TypeChecking.SizedTypes.WarshallSolver: iterateSolver :: (Ord r, Ord f, Show r, Show f) => Polarities f -> HypGraph r f -> [Constraint' r f] -> Solution r f -> Either String (Solution r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: iterateSolver :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => Polarities f -> HypGraph r f -> [Constraint' r f] -> Solution r f -> Either String (Solution r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: lub :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: lub :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> SizeExpr' r f -> SizeExpr' r f -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: lub' :: forall r f. (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: lub' :: forall r f. (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: simplifyWithHypotheses :: (Ord rigid, Ord flex, Show rigid, Show flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Either String [Constraint' rigid flex]
+ Agda.TypeChecking.SizedTypes.WarshallSolver: simplifyWithHypotheses :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Either String [Constraint' rigid flex]
- Agda.TypeChecking.SizedTypes.WarshallSolver: solveGraph :: (Ord r, Ord f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraph r f -> Either String (Solution r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: solveGraph :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraph r f -> Either String (Solution r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: solveGraphs :: (Ord r, Ord f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraphs r f -> Either String (Solution r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: solveGraphs :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraphs r f -> Either String (Solution r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: testLub :: (Show f, Ord f) => Maybe (SizeExpr' [Char] f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: testLub :: (Pretty f, Ord f, Show f) => Maybe (SizeExpr' [Char] f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: verifySolution :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> [Constraint' r f] -> Solution r f -> Either String ()
+ Agda.TypeChecking.SizedTypes.WarshallSolver: verifySolution :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> [Constraint' r f] -> Solution r f -> Either String ()
- Agda.TypeChecking.Substitute: EmptyS :: Substitution' a
+ Agda.TypeChecking.Substitute: EmptyS :: Empty -> Substitution' a
- Agda.TypeChecking.Substitute.Class: class Apply t where apply t args = applyE t $ map Apply args applyE t es = apply t $ map argFromElim es
+ Agda.TypeChecking.Substitute.Class: class Apply t
- Agda.TypeChecking.Substitute.DeBruijn: class DeBruijn a where deBruijnVar = debruijnNamedVar underscore debruijnNamedVar _ = deBruijnVar
+ Agda.TypeChecking.Substitute.DeBruijn: class DeBruijn a
- Agda.TypeChecking.SyntacticEquality: class SynEq a where synEq' a a' = ifEqual (uncurry synEq) (a, a')
+ Agda.TypeChecking.SyntacticEquality: class SynEq a
- Agda.TypeChecking.Unquote: type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptionT UnquoteError TCM)))
+ Agda.TypeChecking.Unquote: type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptT UnquoteError TCM)))
- Agda.TypeChecking.With: buildWithFunction :: [Name] -> QName -> QName -> Type -> [NamedArg DeBruijnPattern] -> Nat -> Substitution -> Permutation -> Nat -> Nat -> [SpineClause] -> TCM [SpineClause]
+ Agda.TypeChecking.With: buildWithFunction :: [Name] -> QName -> QName -> Type -> Telescope -> [NamedArg DeBruijnPattern] -> Nat -> Substitution -> Permutation -> Nat -> Nat -> [SpineClause] -> TCM [SpineClause]
- Agda.TypeChecking.With: stripWithClausePatterns :: [Name] -> QName -> QName -> Type -> [NamedArg DeBruijnPattern] -> Nat -> Permutation -> [NamedArg Pattern] -> TCM ([NamedDotPattern], [NamedArg Pattern])
+ Agda.TypeChecking.With: stripWithClausePatterns :: [Name] -> QName -> QName -> Type -> Telescope -> [NamedArg DeBruijnPattern] -> Nat -> Permutation -> [NamedArg Pattern] -> TCM ([NamedDotPattern], [StrippedDotPattern], [NamedArg Pattern])
- Agda.Utils.Benchmark: Benchmark :: !Bool -> !(CurrentAccount a) -> !(Timings a) -> Benchmark a
+ Agda.Utils.Benchmark: Benchmark :: !(BenchmarkOn a) -> !(CurrentAccount a) -> !(Timings a) -> Benchmark a
- Agda.Utils.Benchmark: [benchmarkOn] :: Benchmark a -> !Bool
+ Agda.Utils.Benchmark: [benchmarkOn] :: Benchmark a -> !(BenchmarkOn a)
- Agda.Utils.Benchmark: class (Ord a, Functor m, MonadIO m) => MonadBench a m | m -> a where getsBenchmark f = f <$> getBenchmark putBenchmark b = modifyBenchmark $ const b modifyBenchmark f = do { b <- getBenchmark; putBenchmark $! f b }
+ Agda.Utils.Benchmark: class (Ord a, Functor m, MonadIO m) => MonadBench a m | m -> a
- Agda.Utils.Benchmark: mapBenchmarkOn :: (Bool -> Bool) -> Benchmark a -> Benchmark a
+ Agda.Utils.Benchmark: mapBenchmarkOn :: (BenchmarkOn a -> BenchmarkOn a) -> Benchmark a -> Benchmark a
- Agda.Utils.Benchmark: setBenchmarking :: MonadBench a m => Bool -> m ()
+ Agda.Utils.Benchmark: setBenchmarking :: MonadBench a m => BenchmarkOn a -> m ()
- Agda.Utils.Except: class Error a where noMsg = strMsg "" strMsg _ = noMsg
+ Agda.Utils.Except: class Error a
- Agda.Utils.Except: mapExceptT :: (m (Either e a) -> n (Either e' b)) -> ExceptT e m a -> ExceptT e' n b
+ Agda.Utils.Except: mapExceptT :: () => (m Either e a -> n Either e' b) -> ExceptT e m a -> ExceptT e' n b
- Agda.Utils.Except: runExceptT :: ExceptT e m a -> m (Either e a)
+ Agda.Utils.Except: runExceptT :: () => ExceptT e m a -> m Either e a
- Agda.Utils.Functor: class Functor t => Decoration t where traverseF f = distributeF . fmap f distributeF = traverseF id
+ Agda.Utils.Functor: class Functor t => Decoration t
- Agda.Utils.Functor: distributeF :: (Decoration t, Functor m) => t (m a) -> m (t a)
+ Agda.Utils.Functor: distributeF :: (Decoration t, (Functor m)) => t (m a) -> m (t a)
- Agda.Utils.List: zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
+ Agda.Utils.List: zipWith' :: (a -> b -> c) -> [a] -> [b] -> Maybe [c]
- Agda.Utils.Monad: (<$) :: Functor f => forall a b. a -> f b -> f a
+ Agda.Utils.Monad: (<$) :: Functor f => forall a b. () => a -> f b -> f a
- Agda.Utils.Monad: (<*>) :: Applicative f => forall a b. f (a -> b) -> f a -> f b
+ Agda.Utils.Monad: (<*>) :: Applicative f => forall a b. () => f (a -> b) -> f a -> f b
- Agda.Utils.Monad: bracket_ :: Monad m => m a -> (a -> m c) -> m b -> m b
+ Agda.Utils.Monad: bracket_ :: Monad m => m a -> (a -> m ()) -> m b -> m b
- Agda.Utils.Monad: finally :: MonadError e m => m a -> m b -> m a
+ Agda.Utils.Monad: finally :: MonadError e m => m a -> m () -> m a
- Agda.Utils.Monad: infixl 4 <$>
+ Agda.Utils.Monad: infixl 4 <$
- Agda.Utils.Monad: unlessM :: Monad m => m Bool -> m a -> m ()
+ Agda.Utils.Monad: unlessM :: Monad m => m Bool -> m () -> m ()
- Agda.Utils.Monad: whenM :: Monad m => m Bool -> m a -> m ()
+ Agda.Utils.Monad: whenM :: Monad m => m Bool -> m () -> m ()
- Agda.Utils.Null: class Null a where null = (== empty)
+ Agda.Utils.Null: class Null a
- Agda.Utils.Parser.MemoisedCPS: annotate :: ParserClass p k r tok => (Doc -> Doc) -> p a -> p a
+ Agda.Utils.Parser.MemoisedCPS: annotate :: ParserClass p k r tok => (DocP -> DocP) -> p a -> p a
- Agda.Utils.Parser.MemoisedCPS: grammar :: ParserClass p k r tok => p a -> Doc
+ Agda.Utils.Parser.MemoisedCPS: grammar :: (ParserClass p k r tok, Show k) => p a -> Doc
- Agda.Utils.Permutation: class DoDrop a where dropMore n (Drop m xs) = Drop (m + n) xs unDrop n (Drop m xs) | n <= m = Drop (m - n) xs | otherwise = (throwImpossible (Impossible "src/full/Agda/Utils/Permutation.hs" 241))
+ Agda.Utils.Permutation: class DoDrop a
- Agda.Utils.Pretty: class Pretty a where pretty = prettyPrec 0 prettyPrec = const pretty
+ Agda.Utils.Pretty: class Pretty a
- Agda.Utils.Size: size :: (Sized a, Integral n) => a -> n
+ Agda.Utils.Size: size :: Sized a => a -> Int
- Agda.Utils.Update: class Traversable f => Updater1 f where updater1 = traverse updates1 f = sharing $ updater1 f update1 f = evalUpdater $ updater1 f
+ Agda.Utils.Update: class Traversable f => Updater1 f
- Agda.Utils.Update: class Updater2 f where updates2 f1 f2 = sharing $ updater2 f1 f2 update2 f1 f2 = evalUpdater $ updater2 f1 f2
+ Agda.Utils.Update: class Updater2 f

Files

Agda.cabal view
@@ -1,10 +1,10 @@ name:            Agda-version:         2.5.2+version:         2.5.3 cabal-version:   >= 1.10 build-type:      Custom license:         OtherLicense license-file:    LICENSE-author:          Ulf Norell, Andreas Abel, Nils Anders Danielsson, Makoto Takeyama, Catarina Coquand, with contributions by Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, James Chapman, Jesper Cockx, Dominique Devriese, Peter Divanski, Fredrik Nordvall Forsberg, Olle Fredriksson, Daniel Gustafsson, Philipp Hausmann, Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Andrés Sicard-Ramírez, Andrea Vezzosi and many more.+author:          Agda 2 was originally written by Ulf Norell, partially based on code from Agda 1 by Catarina Coquand and Makoto Takeyama, and from Agdalight by Ulf Norell and Andreas Abel. Agda 2 is currently actively developed mainly by Andreas Abel, Guillaume Allais, Jesper Cockx, Nils Anders Danielsson, Philipp Hausmann, Fredrik Nordvall Forsberg, Ulf Norell, Víctor López Juan, Andrés Sicard-Ramírez, and Andrea Vezzosi. Further, Agda 2 has received contributions by, amongst others, Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, Guillaume Brunerie, James Chapman, Dominique Devriese, Péter Diviánszki, Olle Fredriksson, Adam Gundry, Daniel Gustafsson, Kuen-Bang Hou (favonia), Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Pepijn Kokke, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Nobuo Yamashita, Christian Sattler, and Makoto Takeyama and many more. maintainer:      Ulf Norell <ulfn@chalmers.se> homepage:        http://wiki.portal.chalmers.se/agda/ bug-reports:     https://github.com/agda/agda/issues@@ -29,27 +29,25 @@   Emacs mode. If you want to use the Emacs mode you can set it up by   running @agda-mode setup@ (see the README).   .-  Note that the Agda library does not follow the package versioning+  Note that the Agda package does not follow the package versioning   policy, because it is not intended to be used by third-party   packages.-tested-with:        GHC == 7.6.3-                    GHC == 7.8.4+tested-with:        GHC == 7.8.4                     GHC == 7.10.3-                    GHC == 8.0.1+                    GHC == 8.0.2+                    GHC == 8.2.1  extra-source-files: CHANGELOG.md                     README.md                     src/full/undefined.h                     stack-7.8.4.yaml-                    stack-8.0.1.yaml+                    stack-7.10.3.yaml+                    stack-8.0.2.yaml  data-dir:           src/data data-files:         Agda.css                     agda.sty                     emacs-mode/*.el-                    -- EpicInclude/AgdaPrelude.e-                    -- EpicInclude/stdagda.c-                    -- EpicInclude/stdagda.h                     JS/agda-rts.js                     JS/biginteger.js                     lib/prim/Agda/Builtin/Bool.agda@@ -73,11 +71,6 @@                     lib/prim/Agda/Primitive.agda                     MAlonzo/src/MAlonzo/*.hs                     postprocess-latex.pl-                    uhc-agda-base/LICENSE-                    uhc-agda-base/src/UHC/Agda/*.hs-                    uhc-agda-base/src/UHC/Agda/double.c-                    uhc-agda-base/src/UHC/Agda/double.h-                    uhc-agda-base/uhc-agda-base.cabal  source-repository head   type:     git@@ -85,26 +78,26 @@  source-repository this   type:     git-  location: https://github.com/agda/agda/tree/v2.5.2.-  tag:      v2.5.2+  location: https://github.com/agda/agda.git+  tag:      v2.5.3  flag cpphs   default:     True   manual:      True   description: Use cpphs instead of cpp. -flag uhc-  default: False-  manual:  True-  description:-    Enable the UHC backend. For details, consult the Agda User Manual.- flag debug   default: False   manual: True   description:     Enable debugging features that may slow Agda down. +flag enable-cluster-counting+  default: False+  description:+    Enable the --count-clusters flag. (If enable-cluster-counting is+    False, then the --count-clusters flag triggers an error message.)+ library   hs-source-dirs:   src/full   include-dirs:     src/full@@ -115,37 +108,33 @@      -- If your change the lower bound of cpphs also change it in the     -- `.travis.yml` file [Issue #2315].-    build-tools: cpphs >= 1.20.2+    build-tools: cpphs >= 1.20.8     ghc-options: -pgmP cpphs -optP --cpp -  if flag(uhc)-    build-depends:  shuffle >= 0.1.3.3-                  , uhc-light >= 1.1.9.2 && < 1.2-                  , uhc-util >= 0.1.6.3 && < 0.1.6.7-                  , uulib >= 0.9.20-    -- we use the CPP processor to conditionally import the UHC Light-    -- modules. If UHC Light is not present, we instead create dummy-    -- definitions, see module Agda.Compiler.UHC.Bridge.-    cpp-options:    -DUHC_BACKEND-   if flag(debug)     cpp-options:    -DDEBUG +  if flag(enable-cluster-counting)+    cpp-options:    -DCOUNT_CLUSTERS+    build-depends:  text-icu == 0.7.*+   if os(windows)-    build-depends:  Win32 >= 2.2 && < 2.4+    build-depends:  Win32 >= 2.2 && < 2.6 -  build-depends:  array >= 0.4.0.1 && < 0.6-                , base >= 4.6.0.1 && < 4.10+  build-depends:  array >= 0.5.0.0 && < 0.6+                , async >= 2.0.2 && < 2.2+                , base >= 4.7.0.2 && < 4.11                 , binary >= 0.7.2.1 && < 0.9+                , blaze-html >= 0.8 && < 0.10                 , boxes >= 0.1.3 && < 0.2-                , bytestring >= 0.10.0.2 && < 0.11-                , containers >= 0.5.0.0 && < 0.6+                , bytestring >= 0.10.4.0 && < 0.11+                , containers >= 0.5.5.1 && < 0.6                 , data-hash >= 0.2.0.0 && < 0.3-                , deepseq >= 1.3.0.1 && < 1.5+                , deepseq >= 1.3.0.2 && < 1.5                 , directory >= 1.2.0.1 && < 1.4                 , EdisonCore >= 1.3.1.1 && < 1.3.2                 , edit-distance >= 0.2.1.2 && < 0.3-                , equivalence >= 0.2.5 && < 0.4+                , equivalence >= 0.3.2 && < 0.4                 , filepath >= 1.3.0.1 && < 1.5                 , geniplate-mirror >= 0.6.0.6 && < 0.8                 , gitrev >= 1.2 && < 2.0@@ -160,32 +149,35 @@                 -- some cases.                 , hashtables >= 1.0.1.8 && < 1.2 || >= 1.2.0.2 && < 1.3                 , haskeline >= 0.7.1.3 && < 0.8-                , ieee754 >= 0.7.8 && < 0.8+                , ieee754 >= 0.7.8 && < 0.9                 , monadplus >= 1.4 && < 1.5                 -- mtl-2.1 contains a severe bug.                 --                 -- mtl >= 2.2 && < 2.2.1 doesn't export Control.Monad.Except.-                , mtl >= 2.1.1 && <= 2.1.3.1 || >= 2.2.1 && < 2.3+                , mtl >= 2.2.1 && < 2.3                 , murmur-hash >= 0.1 && < 0.2+                , uri-encode >= 1.5.0.4 && < 1.6                 , parallel >= 3.2.0.4 && < 3.3                 -- pretty 1.1.1.2 and 1.1.1.3 do not follow the                 -- package versioning policy.-                , pretty >= 1.1.1.0 && < 1.1.1.2 || >= 1.1.2 && < 1.2-                , process >= 1.1.0.2 && < 1.5+                , pretty >= 1.1.1.1 && < 1.1.1.2 || >= 1.1.2 && < 1.2+                , process >= 1.2.0.0 && < 1.7                 , regex-tdfa >= 1.2.2 && < 1.3+                , stm >= 2.4.4 && < 2.5                 , strict >= 0.3.2 && < 0.4-                , template-haskell >= 2.8.0.0 && < 2.12+                , template-haskell >= 2.9.0.0 && < 2.13                 , text >= 0.11.3.1 && < 1.3-                , time >= 1.4.0.1 && < 1.7-                -- transformers 0.4.0.0 was deprecated.-                , transformers >= 0.3 && < 0.4 || >= 0.4.1.0 && < 0.6-                , transformers-compat >= 0.3.3.3 && < 0.6+                , time >= 1.4.2 && < 1.9+                -- In hTags the mtl library must be compiled with the+                -- version of transformers shipped GHC. The lower+                -- bound is the version of transformers shipped with+                -- GHC 7.10.3 (it is not necessary set the lower bound+                -- to a version shipped with GHC < 7.10.3 because in+                -- this case Agda and hTags use a different version of+                -- mtl).+                , transformers >= 0.4.2.0 && < 0.6                 , unordered-containers >= 0.2.5.0 && < 0.3-                , xhtml >= 3000.2.1 && < 3000.3 -  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 @@ -201,11 +193,14 @@     build-depends:  fail == 4.9.*                   , semigroups == 0.18.* -  -- Agda doesn't build with Alex 3.2.0.-  build-tools:  alex >= 3.1.0 && < 3.2.0 || >= 3.2.1 && < 3.3-              , happy >= 1.19.4 && < 2+  -- We don't write upper bounds for Alex nor Happy because the+  -- `build-tools` field can not be modified in Hackage. Agda doesn't+  -- build with Alex 3.2.0.+  build-tools:  alex >= 3.1.0 && < 3.2.0 || >= 3.2.1+              , happy >= 1.19.4    exposed-modules:  Agda.Auto.Auto+                    Agda.Auto.Options                     Agda.Auto.CaseSplit                     Agda.Auto.Convert                     Agda.Auto.NarrowingSearch@@ -213,38 +208,25 @@                     Agda.Auto.Syntax                     Agda.Auto.Typecheck                     Agda.Benchmarking+                    Agda.Compiler.Backend                     Agda.Compiler.CallCompiler                     Agda.Compiler.Common-                    Agda.Compiler.Epic.AuxAST-                    Agda.Compiler.Epic.CaseOpts-                    Agda.Compiler.Epic.Compiler-                    Agda.Compiler.Epic.CompileState-                    Agda.Compiler.Epic.Epic-                    Agda.Compiler.Epic.Erasure-                    Agda.Compiler.Epic.ForceConstrs-                    Agda.Compiler.Epic.Forcing-                    Agda.Compiler.Epic.FromAgda-                    Agda.Compiler.Epic.Injection-                    Agda.Compiler.Epic.Interface-                    Agda.Compiler.Epic.NatDetection-                    Agda.Compiler.Epic.Primitive-                    Agda.Compiler.Epic.Smashing-                    Agda.Compiler.Epic.Static-                    Agda.Compiler.HaskellTypes                     Agda.Compiler.JS.Compiler                     Agda.Compiler.JS.Syntax                     Agda.Compiler.JS.Substitution                     Agda.Compiler.JS.Pretty                     Agda.Compiler.MAlonzo.Compiler                     Agda.Compiler.MAlonzo.Encode+                    Agda.Compiler.MAlonzo.HaskellTypes                     Agda.Compiler.MAlonzo.Misc+                    Agda.Compiler.MAlonzo.Pragmas                     Agda.Compiler.MAlonzo.Pretty                     Agda.Compiler.MAlonzo.Primitives                     Agda.Compiler.ToTreeless                     Agda.Compiler.Treeless.AsPatterns                     Agda.Compiler.Treeless.Builtin                     Agda.Compiler.Treeless.Compare-                    Agda.Compiler.Treeless.DelayCoinduction+                    Agda.Compiler.Treeless.EliminateDefaults                     Agda.Compiler.Treeless.EliminateLiteralPatterns                     Agda.Compiler.Treeless.Erase                     Agda.Compiler.Treeless.GuardsToPrims@@ -255,14 +237,6 @@                     Agda.Compiler.Treeless.Subst                     Agda.Compiler.Treeless.Uncase                     Agda.Compiler.Treeless.Unused-                    Agda.Compiler.UHC.Bridge-                    Agda.Compiler.UHC.Compiler-                    Agda.Compiler.UHC.CompileState-                    Agda.Compiler.UHC.FromAgda-                    Agda.Compiler.UHC.MagicTypes-                    Agda.Compiler.UHC.Pragmas.Base-                    Agda.Compiler.UHC.Pragmas.Parse-                    Agda.Compiler.UHC.Primitives                     Agda.ImpossibleTest                     Agda.Interaction.BasicOps                     Agda.Interaction.SearchAbout@@ -291,6 +265,7 @@                     Agda.Main                     Agda.Syntax.Abstract.Copatterns                     Agda.Syntax.Abstract.Name+                    Agda.Syntax.Abstract.Pattern                     Agda.Syntax.Abstract.Pretty                     Agda.Syntax.Abstract.Views                     Agda.Syntax.Abstract@@ -368,6 +343,7 @@                     Agda.TypeChecking.Free.Lazy                     Agda.TypeChecking.Free.Old                     Agda.TypeChecking.Forcing+                    Agda.TypeChecking.Functions                     Agda.TypeChecking.Implicit                     Agda.TypeChecking.Injectivity                     Agda.TypeChecking.InstanceArguments@@ -384,8 +360,8 @@                     Agda.TypeChecking.Monad.Closure                     Agda.TypeChecking.Monad.Constraints                     Agda.TypeChecking.Monad.Context+                    Agda.TypeChecking.Monad.Debug                     Agda.TypeChecking.Monad.Env-                    Agda.TypeChecking.Monad.Exception                     Agda.TypeChecking.Monad.Imports                     Agda.TypeChecking.Monad.Local                     Agda.TypeChecking.Monad.MetaVars@@ -440,6 +416,7 @@                     Agda.TypeChecking.Serialise.Instances.Compilers                     Agda.TypeChecking.Serialise.Instances.Highlighting                     Agda.TypeChecking.Serialise.Instances.Internal+                    Agda.TypeChecking.Serialise.Instances.Errors                     Agda.TypeChecking.SizedTypes                     Agda.TypeChecking.SizedTypes.Solve                     Agda.TypeChecking.SizedTypes.Syntax@@ -451,6 +428,7 @@                     Agda.TypeChecking.SyntacticEquality                     Agda.TypeChecking.Telescope                     Agda.TypeChecking.Unquote+                    Agda.TypeChecking.Warnings                     Agda.TypeChecking.With                     Agda.Utils.AssocList                     Agda.Utils.Bag@@ -472,6 +450,8 @@                     Agda.Utils.HashMap                     Agda.Utils.Haskell.Syntax                     Agda.Utils.Impossible+                    Agda.Utils.IndexedList+                    Agda.Utils.IO                     Agda.Utils.IO.Binary                     Agda.Utils.IO.Directory                     Agda.Utils.IO.UTF8@@ -485,6 +465,7 @@                     Agda.Utils.Maybe.Strict                     Agda.Utils.Memo                     Agda.Utils.Monad+                    Agda.Utils.Monoid                     Agda.Utils.Null                     Agda.Utils.Parser.MemoisedCPS                     Agda.Utils.Parser.ReadP@@ -497,9 +478,11 @@                     Agda.Utils.Size                     Agda.Utils.String                     Agda.Utils.Suffix+                    Agda.Utils.Three                     Agda.Utils.Time                     Agda.Utils.Trie                     Agda.Utils.Tuple+                    Agda.Utils.TypeLevel                     Agda.Utils.Update                     Agda.Utils.VarSet                     Agda.Utils.Warshall@@ -516,31 +499,29 @@   if impl(ghc >= 8.0)     ghc-options: -Wunrecognised-warning-flags -  if impl(ghc >= 7.6.3)+  if impl(ghc >= 7.8)     ghc-options: -fwarn-deprecated-flags                  -fwarn-dodgy-exports                  -fwarn-dodgy-foreign-imports                  -fwarn-dodgy-imports                  -fwarn-duplicate-exports+                 -fwarn-empty-enumerations                  -fwarn-hi-shadowing                  -fwarn-identities                  -fwarn-incomplete-patterns+                 -fwarn-inline-rule-shadowing                  -fwarn-missing-fields                  -fwarn-missing-methods                  -fwarn-missing-signatures                  -fwarn-tabs+                 -fwarn-typed-holes+                 -fwarn-overflowed-literals                  -fwarn-overlapping-patterns                  -fwarn-unrecognised-pragmas                  -fwarn-unused-do-bind                  -fwarn-warnings-deprecations                  -fwarn-wrong-do-bind -  if impl(ghc >= 7.8)-    ghc-options: -fwarn-empty-enumerations-                 -fwarn-inline-rule-shadowing-                 -fwarn-typed-holes-                 -fwarn-overflowed-literals-   if impl(ghc >= 7.10)      ghc-options: -fwarn-unticked-promoted-constructors                   -- Enable after removing the support for GHC 7.8.@@ -550,13 +531,10 @@   if impl(ghc >= 7.8) && impl(ghc < 7.10)     ghc-options: -fwarn-amp -  -- This option will be removed in GHC 8.0.1.-  if impl(ghc >= 7.6) && impl(ghc < 8.0)-    ghc-options: -fwarn-pointless-pragmas--  -- This option will be deprected in GHC 8.0.1.+  -- These options will be removed in GHC 8.0.1.   if impl(ghc >= 7.8) && impl(ghc < 8.0)     ghc-options: -fwarn-duplicate-constraints+                 -fwarn-pointless-pragmas    -- This option will be deprected in GHC 8.0.1.   if impl(ghc >= 7.10) && impl(ghc < 8.0)@@ -569,12 +547,20 @@                  -Wsemigroup                  -Wunused-foralls +  if impl(ghc >= 8.2)+    ghc-options: -Wcpp-undef+                 -- ASR TODO (2017-07-23): `make haddock` fails when+                 -- this flag is on.+                 -- -Wmissing-home-modules+                 -Wsimplifiable-class-constraints+                 -Wunbanged-strict-patterns+   default-language: Haskell2010   default-extensions: ConstraintKinds                     , DataKinds                     , DefaultSignatures-                    , DeriveFunctor                     , DeriveFoldable+                    , DeriveFunctor                     , DeriveTraversable                     , ExistentialQuantification                     , FlexibleContexts@@ -582,20 +568,28 @@                     , FunctionalDependencies                     , LambdaCase                     , MultiParamTypeClasses+                    , MultiWayIf                     , NamedFieldPuns                     , RankNTypes                     , RecordWildCards+                    , ScopedTypeVariables                     , StandaloneDeriving-                    , TupleSections                     , TypeSynonymInstances+                    , TupleSections  executable agda   hs-source-dirs: src/main   main-is:        Main.hs-  build-depends:  Agda == 2.5.2+  build-depends:  Agda+                  -- A version range on Agda generates a warning with+                  -- some versions of Cabal and GHC+                  -- (e.g. cabal-install version 1.24.0.2 compiled+                  -- using version 1.24.2.0 of the Cabal library and+                  -- GHC 8.2.1 RC1).+                   -- Nothing is used from the following package,                   -- except for the prelude.-                , base >= 4.6.0.1 && < 6+                , base >= 4.7.0.2 && < 6   default-language: Haskell2010   if impl(ghc >= 7)     -- If someone installs Agda with the setuid bit set, then the@@ -609,8 +603,8 @@   hs-source-dirs:   src/agda-mode   main-is:          Main.hs   other-modules:    Paths_Agda-  build-depends:    base >= 4.6.0.1 && < 4.10-                  , directory >= 1.2.0.1 && < 1.4-                  , filepath >= 1.3.0.1 && < 1.5-                  , process >= 1.1.0.2 && < 1.5+  build-depends:    base >= 4.7.0.2 && < 4.11+                  , directory >= 1.2.1.0 && < 1.4+                  , filepath >= 1.3.0.2 && < 1.5+                  , process >= 1.2.0.0 && < 1.7   default-language: Haskell2010
CHANGELOG.md view
@@ -1,3 +1,827 @@+Release notes for Agda version 2.5.3+====================================++Installation and infrastructure+-------------------------------++* Added support for GHC 8.0.2 and 8.2.1.++* Removed support for GHC 7.6.3.++* Markdown support for literate Agda+  \[PR [#2357](https://github.com/agda/agda/pull/2357)].++  Files ending in `.lagda.md` will be parsed as literate Markdown files.++  + Code blocks start with  ```` ``` ```` or ```` ```agda ```` in its own line, and end with+    ```` ``` ````, also in its own line.+  + Code blocks which should be type-checked by Agda but should not be visible+    when the Markdown is rendered may be enclosed in HTML comment delimiters+    (`<!--`  and `-->`).+  + Code blocks which should be ignored by Agda, but rendered in the final+    document may be indented by four spaces.+  + Note that inline code fragments are not supported due to the difficulty of+    interpreting their indentation level with respect to the rest of the file.++Language+--------++### Pattern matching++* Dot patterns.++  The dot in front of an inaccessible pattern can now be skipped if the+  pattern consists entirely of constructors or literals. For example:+  ```agda+    open import Agda.Builtin.Bool++    data D : Bool → Set where+      c : D true++    f : (x : Bool) → D x → Bool+    f true c = true++  ```+  Before this change, you had to write `f .true c = true`.++* With-clause patterns can be replaced by _+  [Issue [#2363](https://github.com/agda/agda/issues/2363)].+  Example:+  ```agda+    test : Nat → Set+    test zero    with zero+    test _       | _ = Nat+    test (suc x) with zero+    test _       | _ = Nat+  ```+  We do not have to spell out the pattern of the parent clause+  (`zero` / `suc x`) in the with-clause if we do not need the+  pattern variables.  Note that `x` is not in scope in the+  with-clause!++  A more elaborate example, which cannot be reduced to+  an ellipsis `...`:+  ```agda+    record R : Set where+      coinductive -- disallow matching+      field f : Bool+            n : Nat++    data P (r : R) : Nat → Set where+      fTrue  : R.f r ≡ true → P r zero+      nSuc   : P r (suc (R.n r))++    data Q : (b : Bool) (n : Nat) →  Set where+      true! : Q true zero+      suc!  : ∀{b n} → Q b (suc n)++    test : (r : R) {n : Nat} (p : P r n) → Q (R.f r) n+    test r nSuc       = suc!+    test r (fTrue p)  with R.f r+    test _ (fTrue ()) | false+    test _ _          | true = true!  -- underscore instead of (isTrue _)+  ```++* Pattern matching lambdas (also known as extended lambdas) can now be+  nullary, mirroring the behaviour for ordinary function definitions.+  [Issue [#2671](https://github.com/agda/agda/issues/2671)]++  This is useful for case splitting on the result inside an+  expression: given+  ```agda+  record _×_ (A B : Set) : Set where+    field+      π₁ : A+      π₂ : B+  open _×_+  ```+  one may case split on the result (C-c C-c RET) in a hole+  ```agda+    λ { → {!!}}+  ```+  of type A × B to produce+  ```agda+    λ { .π₁ → {!!} ; .π₂ → {!!}}+  ```++* Records with a field of an empty type are now recognized as empty by Agda.+  In particular, they can be matched against with an absurd pattern ().+  For example:+  ```agda+    data ⊥ : Set where++    record Empty : Set where+      field absurdity : ⊥++    magic : Empty → ⊥+    magic ()+  ```++* Injective pragmas.++  Injective pragmas can be used to mark a definition as injective for the+  pattern matching unifier. This can be used as a version of+  `--injective-type-constructors` that only applies to specific datatypes.+  For example:+  ```agda+    open import Agda.Builtin.Equality+    data Fin : Nat → Set where+      zero : {n : Nat} → Fin (suc n)+      suc  : {n : Nat} → Fin n → Fin (suc n)++    {-# INJECTIVE Fin #-}++    Fin-injective : {m n : Nat} → Fin m ≡ Fin n → m ≡ n+    Fin-injective refl = refl+  ```+  Aside from datatypes, this pragma can also be used to mark other definitions+  as being injective (for example postulates).++* Metavariables can no longer be instantiated during case splitting. This means+  Agda will refuse to split instead of taking the first constructor it finds.+  For example:+  ```agda+    open import Agda.Builtin.Nat++    data Vec (A : Set) : Nat → Set where+      nil : Vec A 0+      cons : {n : Nat} → A → Vec A n → Vec A (suc n)++    foo : Vec Nat _ → Nat+    foo x = {!x!}+  ```+  In Agda 2.5.2, case splitting on `x` produced the single clause+  `foo nil = {!!}`, but now Agda refuses to split.++### Reflection++* New TC primitive: `debugPrint`.++  ```agda+    debugPrint : String → Nat → List ErrorPart → TC ⊤+  ```++  This maps to the internal function `reportSDoc`. Debug output is enabled with+  the `-v` flag at the command line, or in an `OPTIONS` pragma. For instance,+  giving `-v a.b.c:10` enables printing from `debugPrint "a.b.c.d" 10 msg`. In the+  Emacs mode, debug output ends up in the `*Agda debug*` buffer.++### Built-ins++* BUILTIN REFL is now superfluous, subsumed by BUILTIN EQUALITY+  [Issue [#2389](https://github.com/agda/agda/issues/2389)].++* BUILTIN EQUALITY is now more liberal+  [Issue [#2386](https://github.com/agda/agda/issues/2386)].+  It accepts, among others, the following new definitions of equality:+  ```agda+    -- Non-universe polymorphic:+    data _≡_ {A : Set} (x : A) : A → Set where+      refl : x ≡ x++    -- ... with explicit argument to refl;+    data _≡_ {A : Set} : (x y : A) → Set where+      refl : {x : A} → x ≡ x++    -- ... even visible+    data _≡_ {A : Set} : (x y : A) → Set where+      refl : (x : A) → x ≡ x++    -- Equality in a different universe than domain:+    -- (also with explicit argument to refl)+    data _≡_ {a} {A : Set a} (x : A) : A → Set where+      refl : x ≡ x++  ```+  The standard definition is still:+  ```agda+    -- Equality in same universe as domain:+    data _≡_ {a} {A : Set a} (x : A) : A → Set a where+      refl : x ≡ x+  ```++### Miscellaneous++* Rule change for omitted top-level module headers.+  [Issue [#1077](https://github.com/agda/agda/issues/1077)]++  If your file is named `Bla.agda`, then the following content+  is rejected.+  ```agda+    foo = Set+    module Bla where+      bar = Set+  ```+  Before the fix of this issue, Agda would add the missing module+  header `module Bla where` at the top of the file.+  However, in this particular case it is more likely the user+  put the declaration `foo = Set` before the module start in error.+  Now you get the error+  ```+    Illegal declaration(s) before top-level module+  ```+  if the following conditions are met:++    1. There is at least one non-import declaration or non-toplevel pragma+       before the start of the first module.++    2. The module has the same name as the file.++    3. The module is the only module at this level+       (may have submodules, of course).++  If you should see this error, insert a top-level module+  before the illegal declarations, or move them inside the+  existing module.++Emacs mode+----------++* New warnings:++  - Unreachable clauses give rise to a simple warning. They are+    highlighted in gray.++  - Incomplete patterns are non-fatal warnings: it is possible+    to keep interacting with the file (the reduction will simply+    be stuck on arguments not matching any pattern).+    The definition with incomplete patterns are highlighted in+    wheat.++* Clauses which do not hold definitionally are now highlighted in white smoke.++* Fewer commands have the side effect that the buffer is saved.++* Aborting commands.++  Now one can (try to) abort an Agda command by using `C-c C-x C-a` or+  a menu entry. The effect is similar to that of restarting Agda (`C-c+  C-x C-r`), but some state is preserved, which could mean that it+  takes less time to reload the module.++  Warning: If a command is aborted while it is writing data to disk+  (for instance .agdai files or Haskell files generated by the GHC+  backend), then the resulting files may be corrupted. Note also that+  external commands (like GHC) are not aborted, and their output may+  continue to be sent to the Emacs mode.++* New bindings for the Agda input method:++  - All the bold digits are now available. The naming scheme is `\Bx` for digit `x`.++  - Typing `\:` you can now get a whole slew of colons.++    (The Agda input method originally only bound the standard unicode colon,+    which looks deceptively like the normal colon.)++* Case splitting now preserves underscores.+  [Issue [#819](https://github.com/agda/agda/issues/819)]+  ```agda+    data ⊥ : Set where++    test : {A B : Set} → A → ⊥ → B+    test _ x = {! x !}+  ```+  Splitting on `x` yields+  ```agda+    test _ ()+  ```++* Interactively expanding ellipsis.+  [Issue [#2589](https://github.com/agda/agda/issues/2589)]+  An ellipsis in a with-clause can be expanded by splitting on "variable" "." (dot).+  ```agda+    test0 : Nat → Nat+    test0 x with zero+    ... | q = {! . !}  -- C-c C-c+  ```+  Splitting on dot here yields:+  ```agda+    test0 x | q = ?+  ```++* New command to check an expression against the type of the hole+  it is in and see what it elaborates to.+  [Issue [#2700](https://github.com/agda/agda/issues/2700)]+  This is useful to determine e.g. what solution typeclass resolution yields.+  The command is bound to `C-c C-;` and respects the `C-u` modifier.++  ```agda+    record Pointed (A : Set) : Set where+      field point : A++    it : ∀ {A : Set} {{x : A}} → A+    it {{x}} = x++    instance _ = record { point = 3 - 4 }++    _ : Pointed Nat+    _ = {! it !} -- C-u C-u C-c C-;+  ```+  yields+  ```agda+    Goal: Pointed Nat+    Elaborates to: record { point = 0 }+  ```++* If `agda2-give` is called with a prefix, then giving is forced,+  i.e., the safety checks are skipped,+  including positivity, termination, and double type-checking.+  [Issue [#2730](https://github.com/agda/agda/issues/2730)]++  Invoke forced giving with key sequence `C-u C-c C-SPC`.+++Library management+------------------++* The `name` field in an `.agda-lib` file is now optional.+  [Issue [#2708](https://github.com/agda/agda/issues/2708)]++  This feature is convenient if you just want to specify the dependencies+  and include pathes for your local project in an `.agda-lib` file.++  Naturally, libraries without names cannot be depended on.+++Compiler backends+-----------------++* Unified compiler pragmas++  The compiler pragmas (`COMPILED`, `COMPILED_DATA`, etc.) have been unified across+  backends into two new pragmas:++  ```+    {-# COMPILE <Backend> <Name> <Text> #-}+    {-# FOREIGN <Backend> <Text> #-}+  ```++  The old pragmas still work, but will emit a warning if used. They will be+  removed completely in Agda 2.6.++  The translation of old pragmas into new ones is as follows:++  Old | New+  --- | ---+  `{-# COMPILED f e #-}` | `{-# COMPILE GHC f = e #-}`+  `{-# COMPILED_TYPE A T #-}` | `{-# COMPILE GHC A = type T #-}`+  `{-# COMPILED_DATA A D C1 .. CN #-}` | `{-# COMPILE GHC A = data D (C1 | .. | CN) #-}`+  `{-# COMPILED_DECLARE_DATA #-}` | obsolete, removed+  `{-# COMPILED_EXPORT f g #-}` | `{-# COMPILE GHC f as g #-}`+  `{-# IMPORT M #-}` | `{-# FOREIGN GHC import qualified M #-}`+  `{-# HASKELL code #-}` | `{-# FOREIGN GHC code #-}`+  `{-# COMPILED_UHC f e #-}` | `{-# COMPILE UHC f = e #-}`+  `{-# COMPILED_DATA_UHC A D C1 .. CN #-}` | `{-# COMPILE UHC A = data D (C1 | .. | CN) #-}`+  `{-# IMPORT_UHC M #-}` | `{-# FOREIGN UHC __IMPORT__ M #-}`+  `{-# COMPILED_JS f e #-}` | `{-# COMPILE JS f = e #-}`++* GHC Haskell backend++  The COMPILED pragma (and the corresponding COMPILE GHC pragma) is now also+  allowed for functions. This makes it possible to have both an Agda+  implementation and a native Haskell runtime implementation.++  The GHC file header pragmas `LANGUAGE`, `OPTIONS_GHC`, and `INCLUDE`+  inside a `FOREIGN GHC` pragma are recognized and printed correctly+  at the top of the generated Haskell file.+  [Issue [#2712](https://github.com/agda/agda/issues/2712)]+++* UHC compiler backend++  The UHC backend has been moved to its own repository+  [https://github.com/agda/agda-uhc] and is no longer part of the Agda+  distribution.++* Haskell imports are no longer transitively inherited from imported modules.++  The (now deprecated) IMPORT and IMPORT_UHC pragmas no longer cause import+  statements in modules importing the module containing the pragma.++  The same is true for the corresponding FOREIGN pragmas.++* Support for stand-alone backends.++  There is a new API in `Agda.Compiler.Backend` for creating stand-alone+  backends using Agda as a library. This allows prospective backend writers to+  experiment with new backends without having to change the Agda code base.++HTML backend+------------++* Anchors for identifiers (excluding bound variables) are now the+  identifiers themselves rather than just the file position+  [Issue [#2604](https://github.com/agda/agda/issues/2604)].++  Symbolic anchors look like+  ```html+  <a id="test1">+  <a id="M.bla">+  ```+  while other anchors just give the character position in the file:+  ```html+  <a id="42">+  ```++  Top-level module names do not get a symbolic anchor, since the position of+  a top-level module is defined to be the beginning of the file.++  Example:++  ```agda+  module Issue2604 where   -- Character position anchor++  test1 : Set₁             -- Issue2604.html#test1+  test1 = bla+    where+    bla = Set              -- Character position anchor++  test2 : Set₁             -- Issue2604.html#test2+  test2 = bla+    where+    bla = Set              -- Character position anchor++  test3 : Set₁             -- Issue2604.html#test3+  test3 = bla+    module M where         -- Issue2604.html#M+    bla = Set              -- Issue2604.html#M.bla++  module NamedModule where -- Issue2604.html#NamedModule+    test4 : Set₁           -- Issue2604.html#NamedModule.test4+    test4 = M.bla++  module _ where           -- Character position anchor+    test5 : Set₁           -- Character position anchor+    test5 = M.bla+  ```++* Some generated HTML files now have different file names [Issue+  [#2725](https://github.com/agda/agda/issues/2725)].++  Agda now uses an encoding that amounts to first converting the+  module names to UTF-8, and then percent-encoding the resulting+  bytes. For instance, HTML for the module `Σ` is placed in+  `%CE%A3.html`.++LaTeX backend+-------------++* The LaTeX backend now handles indentation in a different way [Issue+  [#1832](https://github.com/agda/agda/issues/1832)].++  A constraint on the indentation of the first token *t* on a line is+  determined as follows:+  * Let *T* be the set containing every previous token (in any code+    block) that is either the initial token on its line or preceded by+    at least one whitespace character.+  * Let *S* be the set containing all tokens in *T* that are not+    *shadowed* by other tokens in *T*. A token *t₁* is shadowed by+    *t₂* if *t₂* is further down than *t₁* and does not start to the+    right of *t₁*.+  * Let *L* be the set containing all tokens in *S* that start to the+    left of *t*, and *E* be the set containing all tokens in *S* that+    start in the same column as *t*.+  * The constraint is that *t* must be indented further than every+    token in *L*, and aligned with every token in *E*.++  Note that if any token in *L* or *E* belongs to a previous code+  block, then the constraint may not be satisfied unless (say) the+  `AgdaAlign` environment is used in an appropriate way.++  If custom settings are used, for instance if `\AgdaIndent` is+  redefined, then the constraint discussed above may not be satisfied.+  (Note that the meaning of the `\AgdaIndent` command's argument has+  changed, and that the command is now used in a different way in the+  generated LaTeX files.)++  Examples:+  * Here `C` is indented further than `B`:++    ```agda+    postulate+      A  B+          C : Set+    ```++  * Here `C` is not (necessarily) indented further than `B`, because+    `X` shadows `B`:++    ```agda+    postulate+      A  B  : Set+      X+          C : Set+    ```++  The new rule is inspired by, but not identical to, the one used by+  lhs2TeX's poly mode (see Section 8.4 of the [manual for lhs2TeX+  version 1.17](https://www.andres-loeh.de/lhs2tex/Guide2-1.17.pdf)).++* Some spacing issues+  [[#2353](https://github.com/agda/agda/issues/2353),+  [#2441](https://github.com/agda/agda/issues/2441),+  [#2733](https://github.com/agda/agda/issues/2733),+  [#2740](https://github.com/agda/agda/issues/2740)] have been fixed.++* The user can now control the typesetting of (certain) individual tokens+  by redefining the `\AgdaFormat` command. Example:+  ```latex+  \usepackage{ifthen}++  % Insert extra space before some tokens.+  \DeclareRobustCommand{\AgdaFormat}[2]{%+    \ifthenelse{+      \equal{#1}{≡⟨} \OR+      \equal{#1}{≡⟨⟩} \OR+      \equal{#1}{∎}+    }{\ }{}#2}+  ```+  Note the use of `\DeclareRobustCommand`. The first argument to+  `\AgdaFormat` is the token, and the second argument the thing to+  be typeset.++* One can now instruct the agda package not to select any fonts.++  If the `nofontsetup` option is used, then some font packages are+  loaded, but specific fonts are not selected:+  ```latex+  \usepackage[nofontsetup]{agda}+  ```++* The height of empty lines is now configurable+  [[#2734](https://github.com/agda/agda/issues/2734)].++  The height is controlled by the length `\AgdaEmptySkip`, which by+  default is `\baselineskip`.++* The alignment feature regards the string `+̲`, containing `+` and a+  combining character, as having length two. However, it seems more+  reasonable to treat it as having length one, as it occupies a single+  column, if displayed "properly" using a monospace font. The new flag+  `--count-clusters` is an attempt at fixing this. When this flag is+  enabled the backend counts ["extended grapheme+  clusters"](http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries)+  rather than code points.++  Note that this fix is not perfect: a single extended grapheme+  cluster might be displayed in different ways by different programs,+  and might, in some cases, occupy more than one column. Here are some+  examples of extended grapheme clusters, all of which are treated as+  a single character by the alignment algorithm:+  ```+  │ │+  │+̲│+  │Ö̂│+  │நி│+  │ᄀힰᇹ│+  │ᄀᄀᄀᄀᄀᄀힰᇹᇹᇹᇹᇹᇹ│+  │ │+  ```++  Note also that the layout machinery does not count extended grapheme+  clusters, but code points. The following code is syntactically+  correct, but if `--count-clusters` is used, then the LaTeX backend+  does not align the two `field` keywords:+  ```agda+    record +̲ : Set₁ where  field A : Set+                            field B : Set+  ```++  The `--count-clusters` flag is not enabled in all builds of Agda,+  because the implementation depends on the+  [ICU](http://site.icu-project.org) library, the installation of+  which could cause extra trouble for some users. The presence of this+  flag is controlled by the Cabal flag `enable-cluster-counting`.++* A faster variant of the LaTeX backend: QuickLaTeX.++  When this variant of the backend is used the top-level module is not+  type-checked, only scope-checked. This implies that some+  highlighting information is not available. For instance, overloaded+  constructors are not resolved.++  QuickLaTeX can be invoked from the Emacs mode, or using `agda+  --latex --only-scope-checking`. If the module has already been+  type-checked successfully, then this information is reused; in this+  case QuickLaTeX behaves like the regular LaTeX backend.++  The `--only-scope-checking` flag can also be used independently, but+  it is perhaps unclear what purpose that would serve. (The flag can+  currently not be combined with `--html`, `--dependency-graph` or+  `--vim`.) The flag is not allowed in safe mode.++Pragmas and options+-------------------++* The `--safe` option is now a valid pragma.++  This makes it possible to declare a module as being part of the safe+  subset of the language by stating `{-# OPTIONS --safe #-}` at the top+  of the corresponding file. Incompatibilities between the `--safe` option+  and other options or language constructs are non-fatal errors.++* The `--no-main` option is now a valid pragma.++  One can now suppress the compiler warning about a missing main function by+  putting+  ```agda+    {-# OPTIONS --no-main #-}+  ```+  on top of the file.++* New command-line option and pragma `--warning=MODE` (or `-W MODE`) for+  setting the warning mode. Current options are+  - `warn` for displaying warnings (default)+  - `error` for turning warnings into errors+  - `ignore` for not displaying warnings++List of fixed issues+--------------------++For 2.5.3, the following issues have been fixed+(see [bug tracker](https://github.com/agda/agda/issues)):++  - [#142](https://github.com/agda/agda/issues/142): Inherited dot patterns in with functions are not checked+  - [#623](https://github.com/agda/agda/issues/623): Error message points to importing module rather than imported module+  - [#657](https://github.com/agda/agda/issues/657): Yet another display form problem+  - [#668](https://github.com/agda/agda/issues/668): Ability to stop, or restart, typechecking somehow+  - [#705](https://github.com/agda/agda/issues/705): confusing error message for ambiguous datatype module name+  - [#719](https://github.com/agda/agda/issues/719): Error message for duplicate module definition points to external module instead of internal module+  - [#776](https://github.com/agda/agda/issues/776): Unsolvable constraints should give error+  - [#819](https://github.com/agda/agda/issues/819): Case-splitting doesn't preserve underscores+  - [#883](https://github.com/agda/agda/issues/883): Rewrite loses type information+  - [#899](https://github.com/agda/agda/issues/899): Instance search fails if there are several definitionally equal values in scope+  - [#1077](https://github.com/agda/agda/issues/1077): problem with module syntax, with parametric module import+  - [#1126](https://github.com/agda/agda/issues/1126): Port optimizations from the Epic backend+  - [#1175](https://github.com/agda/agda/issues/1175): Internal Error in Auto+  - [#1544](https://github.com/agda/agda/issues/1544): Positivity polymorphism needed for compositional positivity analysis+  - [#1611](https://github.com/agda/agda/issues/1611): Interactive splitting instantiates meta+  - [#1664](https://github.com/agda/agda/issues/1664): Add Reflection primitives to expose precedence and fixity+  - [#1817](https://github.com/agda/agda/issues/1817): Solvable size constraints reported as unsolvable+  - [#1832](https://github.com/agda/agda/issues/1832): Insufficient indentation in LaTeX-rendered Agda code+  - [#1834](https://github.com/agda/agda/issues/1834): Copattern matching: order of clauses should not matter here+  - [#1886](https://github.com/agda/agda/issues/1886): Second copies of telescopes not checked?+  - [#1899](https://github.com/agda/agda/issues/1899): Positivity checker does not treat datatypes and record types in the same way+  - [#1975](https://github.com/agda/agda/issues/1975): Type-incorrect instantiated overloaded constructor accepted in pattern+  - [#1976](https://github.com/agda/agda/issues/1976): Type-incorrect instantiated projection accepted in pattern+  - [#2035](https://github.com/agda/agda/issues/2035): Matching on string causes solver to fail with internal error+  - [#2146](https://github.com/agda/agda/issues/2146): Unicode syntax for instance arguments+  - [#2217](https://github.com/agda/agda/issues/2217): Abort Agda without losing state+  - [#2229](https://github.com/agda/agda/issues/2229): Absence or presence of top-level module header affects scope+  - [#2253](https://github.com/agda/agda/issues/2253): Wrong scope error for abstract constructors+  - [#2261](https://github.com/agda/agda/issues/2261): Internal error in Auto/CaseSplit.hs:284+  - [#2270](https://github.com/agda/agda/issues/2270): Printer does not use sections.+  - [#2329](https://github.com/agda/agda/issues/2329): Size solver does not use type `Size< i` to gain the necessary information+  - [#2354](https://github.com/agda/agda/issues/2354): Interaction between instance search, size solver, and ordinary constraint solver.+  - [#2355](https://github.com/agda/agda/issues/2355): Literate Agda parser does not recognize TeX comments+  - [#2360](https://github.com/agda/agda/issues/2360): With clause stripping chokes on ambiguous projection+  - [#2362](https://github.com/agda/agda/issues/2362): Printing of parent patterns when with-clause does not match+  - [#2363](https://github.com/agda/agda/issues/2363): Allow underscore in with-clause patterns+  - [#2366](https://github.com/agda/agda/issues/2366): With-clause patterns renamed in error message+  - [#2368](https://github.com/agda/agda/issues/2368): Internal error after refining a tactic @ MetaVars.hs:267+  - [#2371](https://github.com/agda/agda/issues/2371): Shadowed module parameter crashes interaction+  - [#2372](https://github.com/agda/agda/issues/2372): problems when instances are declared with inferred types+  - [#2374](https://github.com/agda/agda/issues/2374): Ambiguous projection pattern could be disambiguated by visibility+  - [#2376](https://github.com/agda/agda/issues/2376): Termination checking interacts badly with eta-contraction+  - [#2377](https://github.com/agda/agda/issues/2377): open public is useless before module header+  - [#2381](https://github.com/agda/agda/issues/2381): Search (`C-c C-z`) panics on pattern synonyms+  - [#2386](https://github.com/agda/agda/issues/2386): Relax requirements of BUILTIN EQUALITY+  - [#2389](https://github.com/agda/agda/issues/2389): BUILTIN REFL not needed+  - [#2400](https://github.com/agda/agda/issues/2400): LaTeX backend error on LaTeX comments+  - [#2402](https://github.com/agda/agda/issues/2402): Parameters not dropped when reporting incomplete patterns+  - [#2403](https://github.com/agda/agda/issues/2403): Termination checker should reduce arguments in structural order check+  - [#2405](https://github.com/agda/agda/issues/2405): instance search failing in parameterized module+  - [#2408](https://github.com/agda/agda/issues/2408): DLub sorts are not serialized+  - [#2412](https://github.com/agda/agda/issues/2412): Problem with checking  with sized types+  - [#2413](https://github.com/agda/agda/issues/2413): Agda crashes on x@y pattern+  - [#2415](https://github.com/agda/agda/issues/2415): Size solver reports "inconsistent upper bound" even though there is a solution+  - [#2416](https://github.com/agda/agda/issues/2416): Cannot give size as computed by solver+  - [#2422](https://github.com/agda/agda/issues/2422): Overloaded inherited projections don't resolve+  - [#2423](https://github.com/agda/agda/issues/2423): Inherited projection on lhs+  - [#2426](https://github.com/agda/agda/issues/2426): On just warning about missing cases+  - [#2429](https://github.com/agda/agda/issues/2429): Irrelevant lambda should be accepted when relevant lambda is expected+  - [#2430](https://github.com/agda/agda/issues/2430): Another regression related to parameter refinement?+  - [#2433](https://github.com/agda/agda/issues/2433): rebindLocalRewriteRules re-adds global rewrite rules+  - [#2434](https://github.com/agda/agda/issues/2434): Exact split analysis is too strict when matching on eta record constructor+  - [#2441](https://github.com/agda/agda/issues/2441): Incorrect alignement in latex using the new ACM format+  - [#2444](https://github.com/agda/agda/issues/2444): Generalising compiler pragmas+  - [#2445](https://github.com/agda/agda/issues/2445): The LaTeX backend is slow+  - [#2447](https://github.com/agda/agda/issues/2447): Cache loaded interfaces even if a type error is encountered+  - [#2449](https://github.com/agda/agda/issues/2449): Agda depends on additional C library icu+  - [#2451](https://github.com/agda/agda/issues/2451): Agda panics when attempting to rewrite a typeclass Eq+  - [#2456](https://github.com/agda/agda/issues/2456): Internal error when postulating instance+  - [#2458](https://github.com/agda/agda/issues/2458): Regression: Agda-2.5.3 loops where Agda-2.5.2 passes+  - [#2462](https://github.com/agda/agda/issues/2462): Overloaded postfix projection does not resolve+  - [#2464](https://github.com/agda/agda/issues/2464): Eta contraction for irrelevant functions breaks subject reduction+  - [#2466](https://github.com/agda/agda/issues/2466): Case split to make hidden variable visible does not work+  - [#2467](https://github.com/agda/agda/issues/2467): REWRITE without BUILTIN REWRITE crashes+  - [#2469](https://github.com/agda/agda/issues/2469): "Partial" pattern match causes segfault at runtime+  - [#2472](https://github.com/agda/agda/issues/2472): Regression related to the auto command+  - [#2477](https://github.com/agda/agda/issues/2477): Sized data type analysis brittle, does not reduce size+  - [#2478](https://github.com/agda/agda/issues/2478): Multiply defined labels on the user manual (pdf)+  - [#2479](https://github.com/agda/agda/issues/2479): "Occurs check" error in generated Haskell code+  - [#2480](https://github.com/agda/agda/issues/2480): Agda accepts incorrect (?) code, subject reduction broken+  - [#2482](https://github.com/agda/agda/issues/2482): Wrong counting of data parameters with new-style mutual blocks+  - [#2483](https://github.com/agda/agda/issues/2483): Files are sometimes truncated to a size of 201 bytes+  - [#2486](https://github.com/agda/agda/issues/2486): Imports via FOREIGN are not transitively inherited anymore+  - [#2488](https://github.com/agda/agda/issues/2488): Instance search inhibits holes for instance fields+  - [#2493](https://github.com/agda/agda/issues/2493): Regression: Agda seems to loop when expression is given+  - [#2494](https://github.com/agda/agda/issues/2494): Instance fields sometimes have incorrect goal types+  - [#2495](https://github.com/agda/agda/issues/2495): Regression: termination checker of Agda-2.5.3 seemingly loops where Agda-2.5.2 passes+  - [#2500](https://github.com/agda/agda/issues/2500): Adding fields to a record can cause Agda to reject previous definitions+  - [#2510](https://github.com/agda/agda/issues/2510): Wrong error with --no-pattern-matching+  - [#2517](https://github.com/agda/agda/issues/2517): "Not a variable error"+  - [#2518](https://github.com/agda/agda/issues/2518): CopatternReductions in TreeLess+  - [#2523](https://github.com/agda/agda/issues/2523): The documentation of `--without-K` is outdated+  - [#2529](https://github.com/agda/agda/issues/2529): Unable to install Agda on Windows.+  - [#2537](https://github.com/agda/agda/issues/2537): case splitting with 'with' creates {_} instead of replicating the arguments it found.+  - [#2538](https://github.com/agda/agda/issues/2538): Internal error when parsing as-pattern+  - [#2543](https://github.com/agda/agda/issues/2543): Case splitting with ellipsis produces spurious parentheses+  - [#2545](https://github.com/agda/agda/issues/2545): Race condition in api tests+  - [#2549](https://github.com/agda/agda/issues/2549): Rewrite rule for higher path constructor does not fire+  - [#2550](https://github.com/agda/agda/issues/2550): Internal error in Agda.TypeChecking.Substitute+  - [#2552](https://github.com/agda/agda/issues/2552): Let bindings in module telescopes crash Agda.Interaction.BasicOps+  - [#2553](https://github.com/agda/agda/issues/2553): Internal error in Agda.TypeChecking.CheckInternal+  - [#2554](https://github.com/agda/agda/issues/2554): More flexible size-assignment in successor style+  - [#2555](https://github.com/agda/agda/issues/2555): Why does the positivity checker care about non-recursive occurrences?+  - [#2558](https://github.com/agda/agda/issues/2558): Internal error in Warshall Solver+  - [#2560](https://github.com/agda/agda/issues/2560): Internal Error in Reduce.Fast+  - [#2564](https://github.com/agda/agda/issues/2564): Non-exact-split highlighting makes other highlighting disappear+  - [#2568](https://github.com/agda/agda/issues/2568): agda2-infer-type-maybe-toplevel (in hole) does not respect "single-solution" requirement of instance resolution+  - [#2571](https://github.com/agda/agda/issues/2571): Record pattern translation does not eta contract+  - [#2573](https://github.com/agda/agda/issues/2573): Rewrite rules fail depending on unrelated changes+  - [#2574](https://github.com/agda/agda/issues/2574): No link attached to module without toplevel name+  - [#2575](https://github.com/agda/agda/issues/2575): Internal error, related to caching+  - [#2577](https://github.com/agda/agda/issues/2577): deBruijn fail for higher order instance problem+  - [#2578](https://github.com/agda/agda/issues/2578): Catch-all clause face used incorrectly for parent with pattern+  - [#2579](https://github.com/agda/agda/issues/2579): Import statements with module instantiation should not trigger an error message+  - [#2580](https://github.com/agda/agda/issues/2580): Implicit absurd match is NonVariant, explicit not+  - [#2583](https://github.com/agda/agda/issues/2583): Wrong de Bruijn index introduced by absurd pattern+  - [#2584](https://github.com/agda/agda/issues/2584): Duplicate warning printing+  - [#2585](https://github.com/agda/agda/issues/2585): Definition by copatterns not modulo eta+  - [#2586](https://github.com/agda/agda/issues/2586): "λ where" with single absurd clause not parsed+  - [#2588](https://github.com/agda/agda/issues/2588): `agda --latex` produces invalid LaTeX when there are block comments+  - [#2592](https://github.com/agda/agda/issues/2592): Internal Error in Agda/TypeChecking/Serialise/Instances/Common.hs+  - [#2597](https://github.com/agda/agda/issues/2597): Inline record definitions confuse the reflection API+  - [#2602](https://github.com/agda/agda/issues/2602): Debug output messes up AgdaInfo buffer+  - [#2603](https://github.com/agda/agda/issues/2603): Internal error in MetaVars.hs+  - [#2604](https://github.com/agda/agda/issues/2604): Use QNames as anchors in generated HTML+  - [#2605](https://github.com/agda/agda/issues/2605): HTML backend generates anchors for whitespace+  - [#2606](https://github.com/agda/agda/issues/2606): Check that LHS of a rewrite rule doesn't reduce is too strict+  - [#2612](https://github.com/agda/agda/issues/2612): `exact-split` documentation is outdated and incomplete+  - [#2613](https://github.com/agda/agda/issues/2613): Parametrised modules, with-abstraction and termination+  - [#2620](https://github.com/agda/agda/issues/2620): Internal error in auto.+  - [#2621](https://github.com/agda/agda/issues/2621): Case splitting instantiates meta+  - [#2626](https://github.com/agda/agda/issues/2626): triggered internal error with sized types in MetaVars module+  - [#2629](https://github.com/agda/agda/issues/2629): Exact splitting should not complain about absurd clauses+  - [#2631](https://github.com/agda/agda/issues/2631): docs for auto aren't clear on how to use flags/options+  - [#2632](https://github.com/agda/agda/issues/2632): some flags to auto dont seem to work in current agda 2.5.2+  - [#2637](https://github.com/agda/agda/issues/2637): Internal error in Agda.TypeChecking.Pretty, possibly related to sized types+  - [#2639](https://github.com/agda/agda/issues/2639): Performance regression, possibly related to the size solver+  - [#2641](https://github.com/agda/agda/issues/2641): Required instance of FromNat when compiling imported files+  - [#2642](https://github.com/agda/agda/issues/2642): Records with duplicate fields+  - [#2644](https://github.com/agda/agda/issues/2644): Wrong substitution in expandRecordVar+  - [#2645](https://github.com/agda/agda/issues/2645): Agda accepts postulated fields in a record+  - [#2646](https://github.com/agda/agda/issues/2646): Only warn if fixities for undefined symbols are given+  - [#2649](https://github.com/agda/agda/issues/2649): Empty list of "previous definition" in duplicate definition error+  - [#2652](https://github.com/agda/agda/issues/2652): Added a new variant of the colon to the Agda input method+  - [#2653](https://github.com/agda/agda/issues/2653): agda-mode: "cannot refine" inside instance argument even though term to be refined typechecks there+  - [#2654](https://github.com/agda/agda/issues/2654): Internal error on result splitting without --postfix-projections+  - [#2664](https://github.com/agda/agda/issues/2664): Segmentation fault with compiled programs using mutual record+  - [#2665](https://github.com/agda/agda/issues/2665): Documentation: Record update syntax in wrong location+  - [#2666](https://github.com/agda/agda/issues/2666): Internal error at Agda/Syntax/Abstract/Name.hs:113+  - [#2667](https://github.com/agda/agda/issues/2667): Panic error on unbound variable.+  - [#2669](https://github.com/agda/agda/issues/2669): Interaction: incorrect field variable name generation+  - [#2671](https://github.com/agda/agda/issues/2671): Feature request: nullary pattern matching lambdas+  - [#2679](https://github.com/agda/agda/issues/2679): Internal error at "Typechecking/Abstract.hs:133" and "TypeChecking/Telescope.hs:68"+  - [#2682](https://github.com/agda/agda/issues/2682): What are the rules for projections of abstract records?+  - [#2684](https://github.com/agda/agda/issues/2684): Bad error message for abstract constructor+  - [#2686](https://github.com/agda/agda/issues/2686): Abstract constructors should be ignored when resolving overloading+  - [#2690](https://github.com/agda/agda/issues/2690): [regression?] Agda engages in deep search instead of immediately failing+  - [#2700](https://github.com/agda/agda/issues/2700): Add a command to check against goal type (and normalise)+  - [#2703](https://github.com/agda/agda/issues/2703): Regression: Internal error for underapplied indexed constructor+  - [#2705](https://github.com/agda/agda/issues/2705): The GHC backend might diverge in infinite file creation+  - [#2708](https://github.com/agda/agda/issues/2708): Why is the `name` field in .agda-lib files mandatory?+  - [#2710](https://github.com/agda/agda/issues/2710): Type checker hangs+  - [#2712](https://github.com/agda/agda/issues/2712): Compiler Pragma for headers+  - [#2714](https://github.com/agda/agda/issues/2714): Option --no-main should be allowed as file-local option+  - [#2717](https://github.com/agda/agda/issues/2717): internal error at DisplayForm.hs:197+  - [#2718](https://github.com/agda/agda/issues/2718): Interactive 'give' doesn't insert enough parenthesis+  - [#2721](https://github.com/agda/agda/issues/2721): Without-K doesn't prevent heterogeneous conflict between literals+  - [#2723](https://github.com/agda/agda/issues/2723): Unreachable clauses in definition by copattern matching trip clause compiler+  - [#2725](https://github.com/agda/agda/issues/2725): File names for generated HTML files+  - [#2726](https://github.com/agda/agda/issues/2726): Old regression related to with+  - [#2727](https://github.com/agda/agda/issues/2727): Internal errors related to rewrite+  - [#2729](https://github.com/agda/agda/issues/2729): Regression: case splitting uses variable name variants instead of the unused original names+  - [#2730](https://github.com/agda/agda/issues/2730): Command to give in spite of termination errors+  - [#2731](https://github.com/agda/agda/issues/2731): Agda fails to build with happy 1.19.6+  - [#2733](https://github.com/agda/agda/issues/2733): Avoid some uses of \AgdaIndent?+  - [#2734](https://github.com/agda/agda/issues/2734): Make height of empty lines configurable+  - [#2736](https://github.com/agda/agda/issues/2736): Segfault using Alex 3.2.2 and cpphs+  - [#2740](https://github.com/agda/agda/issues/2740): Indenting every line of code should be a no-op++ Release notes for Agda version 2.5.2 ==================================== @@ -723,6 +1547,15 @@    Returns `true` if the name refers to a macro, otherwise `false`. +* The `record-type` constructor now has an extra argument containing+  information about the record type's fields:+  ```agda+    data Definition : Set where+      …+      record-type : (c : Name) (fs : List (Arg Name)) → Definition+      …+  ```+ Type checking ------------- @@ -1030,10 +1863,12 @@   available: lowercase and uppercase. Some previous bindings had to be   modified for consistency. The naming scheme is as follows: -  * \bx for lowercase blackboard bold-  * \bX for uppercase blackboard bold-  * \bGx for lowercase greek blackboard bold (similar to \Gx for greeks)-  * \bGX for uppercase greek blackboard bold (similar to \GX for uppercase greeks)+  * `\bx` for lowercase blackboard bold+  * `\bX` for uppercase blackboard bold+  * `\bGx` for lowercase greek blackboard bold (similar to `\Gx` for+    greeks)+  * `\bGX` for uppercase greek blackboard bold (similar to `\GX` for+    uppercase greeks)  * Replaced binding for go back @@ -5324,8 +6159,6 @@  * Key bindings for controlling simplification/normalisation: -  [TODO: Simplification should be explained somewhere.]-   Commands like `Goal type and context` (`C-c C-,`) could previously   be invoked in two ways. By default the output was normalised, but if   a prefix argument was used (for instance via `C-u C-c C-,`), then no@@ -5339,9 +6172,6 @@   - If `C-u` is used twice (`C-u C-u C-c C-,`), then the result is     normalised. -  [TODO: As part of the release of Agda 2.3.4 the key binding page on-  the wiki should be updated.]- ### LaTeX-backend  * Two new color scheme options were added to `agda.sty`:@@ -8018,7 +8848,7 @@        aux : ℕ → List → List       aux z zs = f (cons z zs)-     ```+    ```      Here the termination checker compares `cons z zs` to `z` and also     to `zs`. In both cases, the result will be "unrelated", no matter
LICENSE view
@@ -1,11 +1,22 @@-Copyright (c) 2005-2016 Ulf Norell, Andreas Abel, Nils Anders-Danielsson, Andrés Sicard-Ramírez, Dominique Devriese, Péter-Divianszki, Francesco Mazzoli, Stevan Andjelkovic, Daniel Gustafsson,-Alan Jeffrey, Makoto Takeyama, Andrea Vezzosi, Nicolas Pouillard,-James Chapman, Jean-Philippe Bernardy, Fredrik Lindblad, Nobuo-Yamashita, Fredrik Nordvall Forsberg, Patrik Jansson, Guilhem Moulin,-Stefan Monnier, Marcin Benke, Olle Fredriksson, Darin Morrison, Jesper-Cockx, Wolfram Kahl, Catarina Coquand+Copyright (c) 2005-2017 remains with the authors.+Agda 2 was originally written by Ulf Norell,+partially based on code from Agda 1 by Catarina Coquand and Makoto Takeyama,+and from Agdalight by Ulf Norell and Andreas Abel.++Agda 2 is currently actively developed mainly by Andreas Abel,+Guillaume Allais, Jesper Cockx, Nils Anders Danielsson, Philipp+Hausmann, Fredrik Nordvall Forsberg, Ulf Norell, Víctor López Juan,+Andrés Sicard-Ramírez, and Andrea Vezzosi.++Further, Agda 2 has received contributions by, amongst others, Stevan+Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, Guillaume Brunerie,+James Chapman, Dominique Devriese, Péter Diviánszki, Olle Fredriksson,+Adam Gundry, Daniel Gustafsson, Kuen-Bang Hou (favonia), Patrik+Jansson, Alan Jeffrey, Wolfram Kahl, Pepijn Kokke, Fredrik Lindblad,+Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin,+Nicolas Pouillard, Nobuo Yamashita, Christian Sattler, and Makoto+Takeyama.  The full list of contributors is available at+https://github.com/agda/agda/graphs/contributors  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the
README.md view
@@ -3,7 +3,9 @@  [![Hackage version](https://img.shields.io/hackage/v/Agda.svg?label=Hackage)](http://hackage.haskell.org/package/Agda) [![Stackage version](https://www.stackage.org/package/Agda/badge/lts?label=Stackage)](https://www.stackage.org/package/Agda)-[![Build Status](https://travis-ci.org/agda/agda.svg?branch=stable-2.5)](https://travis-ci.org/agda/agda)+[![Travis Status](https://travis-ci.org/agda/agda.svg?branch=stable-2.5)](https://travis-ci.org/agda/agda)+[![Appveyor Status](https://ci.appveyor.com/api/projects/status/x6liln2dol0bg4qw/branch/stable-2.5?svg=true)](https://ci.appveyor.com/project/gallais/agda)+[![Documentation Status](https://readthedocs.org/projects/agda/badge/?version=stable-2.5)](http://agda.readthedocs.io/en/stable-2.5/?badge=stable-2.5)  Table of contents: @@ -25,7 +27,7 @@ Prerequisites ------------- -You need recent versions of the following programs/libraries:+You need recent versions of the following programs:  * GHC:           http://www.haskell.org/ghc/ * cabal-install: http://www.haskell.org/cabal/@@ -38,7 +40,7 @@ on your shell's search path.  For instructions on installing a suitable version of Emacs under-Windows, see [below]((#installing-emacs-under-windows).+Windows, see [below](#installing-emacs-under-windows).  Non-Windows users need to ensure that the development files for the C libraries zlib and ncurses are installed (see http://zlib.net and@@ -50,6 +52,14 @@  as root to get the correct files installed. +Optionally one can also install the [ICU](http://site.icu-project.org)+library, which is used to implement the `--count-clusters` flag. Under+Debian or Ubuntu it may suffice to install `libicu-dev`. Once the ICU+library is installed one can hopefully enable the `--count-clusters`+flag by giving the `-fenable-cluster-counting` flag to `cabal+install`. Note that `make install` by default enables+`-fenable-cluster-counting`.+ ### Note on GHC's CPP language extension  Recent versions of Clang's preprocessor don't work well with Haskell.@@ -79,7 +89,7 @@  ### Using a released source package from Hackage -Install the prerequisites mentioned below, then run the following commands:+Install the prerequisites mentioned above, then run the following commands:      cabal update     cabal install Agda
− dist/build/Agda/Syntax/Parser/Lexer.hs
@@ -1,1079 +0,0 @@-{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 1 "src/full/Agda/Syntax/Parser/Lexer.x" #-}--{-# OPTIONS_GHC -fno-warn-deprecated-flags   #-}-{-# OPTIONS_GHC -fno-warn-missing-signatures #-}-{-# OPTIONS_GHC -fno-warn-tabs               #-}-{-# OPTIONS_GHC -fno-warn-unused-imports     #-}--{-# LANGUAGE BangPatterns #-}--{-| The lexer is generated by Alex (<http://www.haskell.org/alex>) and is an-    adaptation of GHC's lexer. The main lexing function 'lexer' is called by-    the "Agda.Syntax.Parser.Parser" to get the next token from the input.--}-module Agda.Syntax.Parser.Lexer-    ( -- * The main function-      lexer-      -- * Lex states-    , normal, code-    , layout, empty_layout, bol, imp_dir-      -- * Alex generated functions-    , AlexReturn(..), alexScanUser-    ) where---- -- import Data.List--import Agda.Syntax.Parser.Alex-import Agda.Syntax.Parser.Comments-#ifndef __HADDOCK__-import {-# SOURCE #-} Agda.Syntax.Parser.Layout-import {-# SOURCE #-} Agda.Syntax.Parser.LexActions-#endif-import Agda.Syntax.Parser.Monad-import Agda.Syntax.Parser.StringLiterals-import Agda.Syntax.Parser.Tokens-import Agda.Syntax.Literal---#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Array.Base (unsafeAt)-#else-import Array-#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\x73\x00\x00\x00\xd8\xff\xff\xff\x94\x03\x00\x00\xf2\x03\x00\x00\x50\x04\x00\x00\xb6\x02\x00\x00\xac\x04\x00\x00\x08\x05\x00\x00\x5d\x05\x00\x00\x5c\x05\x00\x00\xdc\x05\x00\x00\xbb\x06\x00\x00\xba\x06\x00\x00\x3a\x07\x00\x00\xba\x07\x00\x00\x99\x08\x00\x00\xf5\x08\x00\x00\xf4\x08\x00\x00\x00\x00\x00\x00\x65\x09\x00\x00\x00\x00\x00\x00\xd6\x09\x00\x00\x00\x00\x00\x00\x47\x0a\x00\x00\x00\x00\x00\x00\x88\x0a\x00\x00\x00\x00\x00\x00\xc9\x0a\x00\x00\x00\x00\x00\x00\x0a\x0b\x00\x00\xe9\x0b\x00\x00\x68\x0c\x00\x00\x28\x0c\x00\x00\x00\x00\x00\x00\x28\x0d\x00\x00\xe8\x0c\x00\x00\x00\x00\x00\x00\xe8\x0d\x00\x00\x5e\x0e\x00\x00\xc0\x0d\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x0f\x00\x00\x4c\x10\x00\x00\x43\x11\x00\x00\x3a\x12\x00\x00\x31\x13\x00\x00\x28\x14\x00\x00\x1f\x15\x00\x00\x16\x16\x00\x00\x0d\x17\x00\x00\x04\x18\x00\x00\xfb\x18\x00\x00\xf2\x19\x00\x00\xe9\x1a\x00\x00\xe0\x1b\x00\x00\xd7\x1c\x00\x00\xce\x1d\x00\x00\xc5\x1e\x00\x00\xbc\x1f\x00\x00\xb3\x20\x00\x00\xaa\x21\x00\x00\xa1\x22\x00\x00\x98\x23\x00\x00\x8f\x24\x00\x00\x86\x25\x00\x00\x7d\x26\x00\x00\x74\x27\x00\x00\x6b\x28\x00\x00\x62\x29\x00\x00\x59\x2a\x00\x00\x50\x2b\x00\x00\x47\x2c\x00\x00\x3e\x2d\x00\x00\x35\x2e\x00\x00\x2c\x2f\x00\x00\x23\x30\x00\x00\x1a\x31\x00\x00\x11\x32\x00\x00\x08\x33\x00\x00\xff\x33\x00\x00\xf6\x34\x00\x00\xed\x35\x00\x00\xe4\x36\x00\x00\xdb\x37\x00\x00\xd2\x38\x00\x00\xc9\x39\x00\x00\xc0\x3a\x00\x00\xb7\x3b\x00\x00\xae\x3c\x00\x00\xa5\x3d\x00\x00\x9c\x3e\x00\x00\x93\x3f\x00\x00\x8a\x40\x00\x00\x81\x41\x00\x00\x78\x42\x00\x00\x6f\x43\x00\x00\x66\x44\x00\x00\x5d\x45\x00\x00\x54\x46\x00\x00\x4b\x47\x00\x00\x42\x48\x00\x00\x39\x49\x00\x00\x30\x4a\x00\x00\x27\x4b\x00\x00\x1e\x4c\x00\x00\x15\x4d\x00\x00\x0c\x4e\x00\x00\x03\x4f\x00\x00\xfa\x4f\x00\x00\xf1\x50\x00\x00\xe8\x51\x00\x00\xdf\x52\x00\x00\xd6\x53\x00\x00\xcd\x54\x00\x00\xc4\x55\x00\x00\xbb\x56\x00\x00\xb2\x57\x00\x00\xa9\x58\x00\x00\xa0\x59\x00\x00\x97\x5a\x00\x00\x8e\x5b\x00\x00\x85\x5c\x00\x00\x7c\x5d\x00\x00\x73\x5e\x00\x00\x6a\x5f\x00\x00\x61\x60\x00\x00\x58\x61\x00\x00\x4f\x62\x00\x00\x46\x63\x00\x00\x3d\x64\x00\x00\x34\x65\x00\x00\x2b\x66\x00\x00\x22\x67\x00\x00\x19\x68\x00\x00\x10\x69\x00\x00\x07\x6a\x00\x00\xfe\x6a\x00\x00\xf5\x6b\x00\x00\xec\x6c\x00\x00\xe3\x6d\x00\x00\xda\x6e\x00\x00\xd1\x6f\x00\x00\xc8\x70\x00\x00\xbf\x71\x00\x00\xb6\x72\x00\x00\xad\x73\x00\x00\xa4\x74\x00\x00\x9b\x75\x00\x00\x92\x76\x00\x00\x89\x77\x00\x00\x80\x78\x00\x00\x77\x79\x00\x00\x6e\x7a\x00\x00\x65\x7b\x00\x00\x5c\x7c\x00\x00\x53\x7d\x00\x00\x4a\x7e\x00\x00\x41\x7f\x00\x00\x38\x80\x00\x00\x2f\x81\x00\x00\x26\x82\x00\x00\x1d\x83\x00\x00\x14\x84\x00\x00\x0b\x85\x00\x00\x02\x86\x00\x00\xf9\x86\x00\x00\xf0\x87\x00\x00\xe7\x88\x00\x00\xde\x89\x00\x00\xd5\x8a\x00\x00\xcc\x8b\x00\x00\xc3\x8c\x00\x00\xba\x8d\x00\x00\xb1\x8e\x00\x00\xa8\x8f\x00\x00\x9f\x90\x00\x00\x96\x91\x00\x00\x8d\x92\x00\x00\x84\x93\x00\x00\x7b\x94\x00\x00\x72\x95\x00\x00\x69\x96\x00\x00\x60\x97\x00\x00\x57\x98\x00\x00\x4e\x99\x00\x00\x45\x9a\x00\x00\x3c\x9b\x00\x00\x33\x9c\x00\x00\x2a\x9d\x00\x00\x21\x9e\x00\x00\x18\x9f\x00\x00\x0f\xa0\x00\x00\x06\xa1\x00\x00\xfd\xa1\x00\x00\xf4\xa2\x00\x00\xeb\xa3\x00\x00\xe2\xa4\x00\x00\xd9\xa5\x00\x00\xd0\xa6\x00\x00\xc7\xa7\x00\x00\xbe\xa8\x00\x00\xb5\xa9\x00\x00\xac\xaa\x00\x00\xa3\xab\x00\x00\x9a\xac\x00\x00\x91\xad\x00\x00\x88\xae\x00\x00\x7f\xaf\x00\x00\x76\xb0\x00\x00\x6d\xb1\x00\x00\x64\xb2\x00\x00\x5b\xb3\x00\x00\x52\xb4\x00\x00\x49\xb5\x00\x00\x40\xb6\x00\x00\x37\xb7\x00\x00\x2e\xb8\x00\x00\x25\xb9\x00\x00\x1c\xba\x00\x00\x13\xbb\x00\x00\x0a\xbc\x00\x00\x01\xbd\x00\x00\xf8\xbd\x00\x00\xef\xbe\x00\x00\xe6\xbf\x00\x00\xdd\xc0\x00\x00\xd4\xc1\x00\x00\xcb\xc2\x00\x00\xc2\xc3\x00\x00\xb9\xc4\x00\x00\xb0\xc5\x00\x00\xa7\xc6\x00\x00\x9e\xc7\x00\x00\x95\xc8\x00\x00\x8c\xc9\x00\x00\x83\xca\x00\x00\x7a\xcb\x00\x00\x71\xcc\x00\x00\x68\xcd\x00\x00\x5f\xce\x00\x00\x56\xcf\x00\x00\x4d\xd0\x00\x00\xe3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\xd1\x00\x00\x43\xd2\x00\x00\x43\xd3\x00\x00\x39\xd4\x00\x00\x39\xd5\x00\x00\x2f\xd6\x00\x00\x2f\xd7\x00\x00\x2f\xd8\x00\x00\x2f\xd9\x00\x00\x2f\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x0f\x00\x00\x43\x10\x00\x00\x3a\x11\x00\x00\x31\x12\x00\x00\x16\x15\x00\x00\x0d\x16\x00\x00\x04\x17\x00\x00\xfb\x17\x00\x00\xf2\x18\x00\x00\xe9\x19\x00\x00\xe0\x1a\x00\x00\xd7\x1b\x00\x00\xce\x1c\x00\x00\xbc\x1e\x00\x00\xb3\x1f\x00\x00\xaa\x20\x00\x00\xa1\x21\x00\x00\x98\x22\x00\x00\x8f\x23\x00\x00\x86\x24\x00\x00\x7d\x25\x00\x00\x74\x26\x00\x00\x6b\x27\x00\x00\x62\x28\x00\x00\x59\x29\x00\x00\x50\x2a\x00\x00\x51\x2b\x00\x00\x3e\x2c\x00\x00\x3f\x2d\x00\x00\x2d\x2f\x00\x00\x55\x46\x00\x00\x31\x4a\x00\x00\x16\x4d\x00\x00\x59\x61\x00\x00\x11\x69\x00\x00\xf6\x6b\x00\x00\xed\x6c\x00\x00\xdb\x6e\x00\x00\xb7\x72\x00\x00\x54\x7d\x00\x00\xfa\x86\x00\x00\x9f\x8f\x00\x00\x2d\xd1\x00\x00\x23\xd4\x00\x00\x0e\xdb\x00\x00\x6a\xdb\x00\x00\xc6\xdb\x00\x00\x22\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\xda\xff\xff\xff\x00\x00\x00\x00\x7e\xdc\x00\x00\xda\xdc\x00\x00\x73\x41\x00\x00\x36\xdd\x00\x00\x92\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\xff\xff\x00\x00\x00\x00\xee\xdd\x00\x00\x23\x13\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\x4a\xde\x00\x00\xa6\xde\x00\x00\x02\xdf\x00\x00\x5e\xdf\x00\x00\xba\xdf\x00\x00\x16\xe0\x00\x00\x72\xe0\x00\x00\xce\xe0\x00\x00\x2a\xe1\x00\x00\x86\xe1\x00\x00\xe2\xe1\x00\x00\x3e\xe2\x00\x00\x9a\xe2\x00\x00\xf6\xe2\x00\x00\x52\xe3\x00\x00\xae\xe3\x00\x00\x0a\xe4\x00\x00\x66\xe4\x00\x00\xc2\xe4\x00\x00\x1e\xe5\x00\x00\x7c\xe5\x00\x00\xda\xe5\x00\x00\x38\xe6\x00\x00\x96\xe6\x00\x00\xf4\xe6\x00\x00\x52\xe7\x00\x00\xb0\xe7\x00\x00\x0c\xe8\x00\x00\x68\xe8\x00\x00\xc4\xe8\x00\x00\x20\xe9\x00\x00\x7c\xe9\x00\x00\xd8\xe9\x00\x00\x34\xea\x00\x00\x90\xea\x00\x00\xec\xea\x00\x00\x48\xeb\x00\x00\xa4\xeb\x00\x00\x00\xec\x00\x00\x5c\xec\x00\x00\xb8\xec\x00\x00\x14\xed\x00\x00\x70\xed\x00\x00\xcc\xed\x00\x00\x28\xee\x00\x00\x84\xee\x00\x00\xe0\xee\x00\x00\x3c\xef\x00\x00\x98\xef\x00\x00\xf4\xef\x00\x00\x50\xf0\x00\x00\xac\xf0\x00\x00\x08\xf1\x00\x00\x64\xf1\x00\x00\xc0\xf1\x00\x00\x1c\xf2\x00\x00\x78\xf2\x00\x00\xd4\xf2\x00\x00\x30\xf3\x00\x00\x8c\xf3\x00\x00\xe8\xf3\x00\x00\x44\xf4\x00\x00\xa0\xf4\x00\x00\xfc\xf4\x00\x00\x58\xf5\x00\x00\xb4\xf5\x00\x00\x10\xf6\x00\x00\x6c\xf6\x00\x00\xc8\xf6\x00\x00\x24\xf7\x00\x00\x80\xf7\x00\x00\xdc\xf7\x00\x00\x38\xf8\x00\x00\x94\xf8\x00\x00\xf0\xf8\x00\x00\x4c\xf9\x00\x00\xa8\xf9\x00\x00\x04\xfa\x00\x00\x60\xfa\x00\x00\xbc\xfa\x00\x00\x18\xfb\x00\x00\x74\xfb\x00\x00\xd0\xfb\x00\x00\x2c\xfc\x00\x00\x88\xfc\x00\x00\xe4\xfc\x00\x00\x40\xfd\x00\x00\x9c\xfd\x00\x00\xf8\xfd\x00\x00\x54\xfe\x00\x00\xb0\xfe\x00\x00\x0c\xff\x00\x00\x68\xff\x00\x00\xc4\xff\x00\x00\x20\x00\x01\x00\x7c\x00\x01\x00\xd8\x00\x01\x00\x34\x01\x01\x00\x90\x01\x01\x00\xec\x01\x01\x00\x48\x02\x01\x00\xa4\x02\x01\x00\x00\x03\x01\x00\x5c\x03\x01\x00\xb8\x03\x01\x00\x14\x04\x01\x00\x70\x04\x01\x00\xcc\x04\x01\x00\x28\x05\x01\x00\x84\x05\x01\x00\xe0\x05\x01\x00\x3c\x06\x01\x00\x98\x06\x01\x00\xf4\x06\x01\x00\x50\x07\x01\x00\xac\x07\x01\x00\x08\x08\x01\x00\x64\x08\x01\x00\xc0\x08\x01\x00\x1c\x09\x01\x00\x78\x09\x01\x00\xd4\x09\x01\x00\x30\x0a\x01\x00\x8c\x0a\x01\x00\xe8\x0a\x01\x00\x44\x0b\x01\x00\xa0\x0b\x01\x00\xfc\x0b\x01\x00\x58\x0c\x01\x00\xb4\x0c\x01\x00\x10\x0d\x01\x00\x6c\x0d\x01\x00\xc8\x0d\x01\x00\x24\x0e\x01\x00\x80\x0e\x01\x00\xdc\x0e\x01\x00\x38\x0f\x01\x00\x94\x0f\x01\x00\xf0\x0f\x01\x00\x4c\x10\x01\x00\xa8\x10\x01\x00\x04\x11\x01\x00\x60\x11\x01\x00\xbc\x11\x01\x00\x18\x12\x01\x00\x74\x12\x01\x00\xd0\x12\x01\x00\x2c\x13\x01\x00\x88\x13\x01\x00\xe4\x13\x01\x00\x40\x14\x01\x00\x9c\x14\x01\x00\xf8\x14\x01\x00\x54\x15\x01\x00\xb0\x15\x01\x00\x0c\x16\x01\x00\x68\x16\x01\x00\xc4\x16\x01\x00\x20\x17\x01\x00\x7c\x17\x01\x00\xd8\x17\x01\x00\x34\x18\x01\x00\x90\x18\x01\x00\xec\x18\x01\x00\x48\x19\x01\x00\xa4\x19\x01\x00\x00\x1a\x01\x00\x5c\x1a\x01\x00\xb8\x1a\x01\x00\x14\x1b\x01\x00\x70\x1b\x01\x00\xcc\x1b\x01\x00\x28\x1c\x01\x00\x84\x1c\x01\x00\xe0\x1c\x01\x00\x3c\x1d\x01\x00\x98\x1d\x01\x00\xf4\x1d\x01\x00\x50\x1e\x01\x00\xac\x1e\x01\x00\x08\x1f\x01\x00\x64\x1f\x01\x00\xc0\x1f\x01\x00\x1c\x20\x01\x00\x78\x20\x01\x00\xd4\x20\x01\x00\x30\x21\x01\x00\x8c\x21\x01\x00\xe8\x21\x01\x00\x44\x22\x01\x00\xa0\x22\x01\x00\xfc\x22\x01\x00\x58\x23\x01\x00\xb4\x23\x01\x00\x10\x24\x01\x00\x6c\x24\x01\x00\xc8\x24\x01\x00\x24\x25\x01\x00\x80\x25\x01\x00\xdc\x25\x01\x00\x38\x26\x01\x00\x94\x26\x01\x00\xf0\x26\x01\x00\x4c\x27\x01\x00\xa8\x27\x01\x00\x04\x28\x01\x00\x60\x28\x01\x00\xbc\x28\x01\x00\x18\x29\x01\x00\x74\x29\x01\x00\xd0\x29\x01\x00\x2c\x2a\x01\x00\x88\x2a\x01\x00\xe4\x2a\x01\x00\x40\x2b\x01\x00\x9c\x2b\x01\x00\xf8\x2b\x01\x00\x54\x2c\x01\x00\xb0\x2c\x01\x00\x0c\x2d\x01\x00\x68\x2d\x01\x00\xc4\x2d\x01\x00\x20\x2e\x01\x00\x7c\x2e\x01\x00\xd8\x2e\x01\x00\x34\x2f\x01\x00\x90\x2f\x01\x00\xec\x2f\x01\x00\x48\x30\x01\x00\xa4\x30\x01\x00\x00\x31\x01\x00\x5c\x31\x01\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x0b\x01\x30\x00\x30\x00\x30\x00\xfe\x00\x33\x00\x3f\x01\x40\x01\x48\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\x30\x00\xdb\x01\x53\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x52\x01\x4a\x01\x4b\x01\xdb\x01\xdb\x01\xdb\x01\x68\x01\x41\x01\xdb\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x43\x01\x42\x01\xdb\x01\x44\x01\xdb\x01\x46\x01\x4e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x4d\x01\xdb\x01\xdb\x01\x45\x01\xdb\x01\xdf\x01\xdb\x01\xbc\x01\x9b\x01\xdd\x01\xb0\x01\xdb\x01\xc8\x01\x3a\x02\xdb\x01\xdb\x01\x85\x01\xb4\x01\xda\x01\x02\x02\xca\x01\xb5\x01\xbd\x01\xc7\x01\xc6\x01\xb8\x01\xdb\x01\x95\x01\xdb\x01\xdb\x01\xdb\x01\x50\x01\x47\x01\x51\x01\xdb\x01\x0c\x01\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x31\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x09\x00\x30\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x17\x00\x12\x00\x12\x00\x16\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x08\x00\x12\x00\x00\x00\x12\x00\x0b\x01\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\xdb\x01\x53\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x52\x01\x4a\x01\x4b\x01\xdb\x01\xdb\x01\xdb\x01\x68\x01\x41\x01\xdb\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x43\x01\x42\x01\xdb\x01\x44\x01\xdb\x01\x46\x01\x4e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x4d\x01\xdb\x01\xdb\x01\x45\x01\xdb\x01\xdf\x01\xdb\x01\xbc\x01\x9b\x01\xdd\x01\xb0\x01\xdb\x01\xc8\x01\x3a\x02\xdb\x01\xdb\x01\x85\x01\xb4\x01\xda\x01\x02\x02\xca\x01\xb5\x01\xbd\x01\xc7\x01\xc6\x01\xb8\x01\xdb\x01\x95\x01\xdb\x01\xdb\x01\xdb\x01\x50\x01\x47\x01\x51\x01\xdb\x01\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x09\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x17\x00\x12\x00\x12\x00\x16\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x08\x00\x12\x00\x00\x00\x12\x00\x0b\x01\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x67\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0c\x00\xdb\x01\xdb\x01\x0b\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x83\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x08\x00\xdb\x01\x00\x00\xdb\x01\x0d\x01\x30\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x09\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x17\x00\x12\x00\x12\x00\x16\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x08\x00\x12\x00\x00\x00\x12\x00\xff\xff\x32\x00\x32\x00\x32\x00\x32\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\xdb\x01\x69\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x98\x00\xa1\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x8f\x00\x00\x00\x00\x00\x7b\x00\x9d\x00\xb6\x00\xca\x00\xa4\x00\x00\x00\xa0\x00\xcd\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\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\x68\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x02\x01\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\xff\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x0a\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x00\x01\x12\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0e\x00\x1d\x02\x1d\x02\x0d\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x00\x00\x1d\x02\x2c\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x0a\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x00\x00\x12\x00\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x10\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x12\x00\x12\x00\x12\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x12\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\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\x2a\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\x2e\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\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x65\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0e\x00\x1d\x02\x1d\x02\x0d\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x00\x00\x1d\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x10\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x24\x00\x14\x00\x1d\x00\x1d\x00\x1d\x00\x1e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xcb\x01\xdb\x01\x88\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe6\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xff\xff\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\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\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\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\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x22\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x23\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x34\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x2e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x39\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3b\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xff\xff\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x51\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x5a\x00\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf6\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf3\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2d\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdd\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x87\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd3\x00\xdb\x01\xdb\x01\xd0\x01\xdb\x01\xdb\x01\xdb\x01\xa7\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xaa\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd2\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd0\x00\xdb\x01\xdb\x01\xdb\x01\x8f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8d\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc7\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc0\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xff\xff\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2a\x00\x11\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x15\x00\x1b\x00\x1b\x00\x1b\x00\x1c\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\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x02\x01\x04\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x01\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x02\x01\x04\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x04\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\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\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x06\x01\x00\x00\x00\x00\x07\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\x04\x01\x00\x00\x04\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x00\x00\x00\x00\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x00\x00\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x00\x00\x0a\x01\x0a\x01\x0a\x01\x0a\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\x0a\x01\x0a\x01\x0a\x01\x0a\x01\x00\x00\x0a\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\x0a\x01\x00\x00\x0a\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x04\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x08\x01\x05\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x01\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x08\x01\x05\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x04\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\xff\xff\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x04\x01\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x05\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\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\x04\x01\x00\x00\x04\x01\x00\x00\x04\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x27\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x18\x00\x19\x00\x19\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x49\x01\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\x22\x02\xdb\x01\x6d\x01\x25\x00\xdb\x01\x57\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x54\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1e\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x21\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x21\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x21\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x21\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x25\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x25\x00\xdb\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x26\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x24\x02\x1d\x02\x24\x02\x0f\x00\x1d\x02\x60\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5d\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1f\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\xdb\x01\x1d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1e\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x23\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x23\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x23\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x23\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x20\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1f\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\xdb\x01\x1d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x08\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xff\x00\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x08\x01\x0f\x00\xdb\x01\x5b\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\x4c\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xff\x00\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd3\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdc\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x62\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x10\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x13\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x14\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x15\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x18\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x19\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1f\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x20\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x26\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x27\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x29\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x31\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x32\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x33\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x36\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x39\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3b\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x3b\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x37\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x34\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x33\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x32\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x31\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x30\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2f\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2c\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x29\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x28\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x84\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1c\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1b\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x93\x01\x1a\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x19\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x18\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x17\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x16\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x15\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x14\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x13\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x12\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x11\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x10\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0f\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0e\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x89\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0c\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0b\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0a\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x09\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x08\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x07\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x06\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x05\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x04\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x03\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x94\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xed\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x9d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xfb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x01\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa5\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf7\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf1\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xab\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xfe\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc5\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xad\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xaf\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xfa\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf6\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb1\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf5\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf4\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf3\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xef\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xee\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb6\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb7\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xeb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe4\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd1\x01\xdb\x01\xdb\x01\xc3\x01\xdb\x01\xdb\x01\xe8\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xbf\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc0\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc1\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe7\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe5\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe3\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xcd\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xce\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe1\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x69\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6a\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd5\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd6\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6b\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd9\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd8\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd7\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe0\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xcf\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xcc\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xe2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xbe\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xba\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xea\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xec\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xb3\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf0\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xfc\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xae\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xac\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xfd\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa8\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa6\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xff\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xbb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa4\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa3\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa2\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa1\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xa0\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x9f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x9e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x9c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xde\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xd4\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x9a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x99\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x98\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x97\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x96\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x92\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x91\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x90\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x8b\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x87\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x86\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xc4\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x82\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x81\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x80\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x27\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7d\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2b\x02\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2e\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x7b\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x79\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x78\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x77\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x76\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x75\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x35\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x74\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x73\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x72\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x36\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x71\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x70\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x6f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x38\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x39\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x6e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\xdb\x01\x1d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x5f\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\xdb\x01\x1d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\x22\x02\xdb\x01\x6d\x01\x0f\x00\xdb\x01\x62\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x62\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\x61\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x1d\x02\xdb\x01\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x24\x02\x1d\x02\x24\x02\x0f\x00\x1d\x02\x66\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x0f\x00\x1d\x02\x66\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x64\x01\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x00\x00\x1d\x02\xdb\x01\x1d\x02\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\x55\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\x56\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x38\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x37\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2a\x02\xdb\x01\xdb\x01\x35\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x34\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x30\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\x2c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2b\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x2a\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x28\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x25\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x24\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x21\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1c\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x1b\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x17\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x16\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x12\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x11\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xf8\x01\x0f\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\x6c\x01\x0f\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x0e\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xdb\x01\x00\x00\xdb\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\x23\x00\x2e\x00\x2e\x00\x7c\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\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x52\x00\x53\x00\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\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\x7b\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x7c\x00\xff\xff\x7e\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x5f\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\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x59\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4b\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4b\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x47\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x59\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x47\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x59\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4b\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4d\x00\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x57\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4d\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x41\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x59\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4d\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4d\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x43\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x49\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4d\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\x00\xff\xff\xff\xff\xff\xff\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x56\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x44\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x42\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\x00\x53\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x50\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x52\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x48\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x54\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x44\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\x4e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x5c\x00\xff\xff\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb9\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\x1f\x00\x1f\x00\x21\x00\x21\x00\x23\x00\x23\x00\x28\x00\x28\x00\x2b\x00\x2b\x00\x2f\x00\x2f\x00\xff\xff\x04\x01\x04\x01\x04\x01\xb9\x00\xb9\x00\xb9\x00\x31\x00\x31\x00\x31\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x01\x03\x01\x03\x01\x04\x01\x0a\x01\x04\x01\x0a\x01\x09\x01\x09\x01\x0a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,571) [AlexAccNone,AlexAccPred 524 ( not' eof )(AlexAccNone),AlexAccNone,AlexAcc 523,AlexAccNone,AlexAcc 522,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAcc 521,AlexAcc 520,AlexAcc 519,AlexAcc 518,AlexAcc 517,AlexAcc 516,AlexAcc 515,AlexAcc 514,AlexAcc 513,AlexAcc 512,AlexAcc 511,AlexAcc 510,AlexAcc 509,AlexAcc 508,AlexAcc 507,AlexAcc 506,AlexAcc 505,AlexAcc 504,AlexAcc 503,AlexAcc 502,AlexAcc 501,AlexAcc 500,AlexAcc 499,AlexAcc 498,AlexAcc 497,AlexAcc 496,AlexAcc 495,AlexAcc 494,AlexAcc 493,AlexAcc 492,AlexAcc 491,AlexAcc 490,AlexAcc 489,AlexAcc 488,AlexAcc 487,AlexAcc 486,AlexAcc 485,AlexAcc 484,AlexAcc 483,AlexAcc 482,AlexAcc 481,AlexAcc 480,AlexAcc 479,AlexAcc 478,AlexAcc 477,AlexAcc 476,AlexAcc 475,AlexAcc 474,AlexAcc 473,AlexAcc 472,AlexAcc 471,AlexAcc 470,AlexAcc 469,AlexAcc 468,AlexAcc 467,AlexAcc 466,AlexAcc 465,AlexAcc 464,AlexAcc 463,AlexAcc 462,AlexAcc 461,AlexAcc 460,AlexAcc 459,AlexAcc 458,AlexAcc 457,AlexAcc 456,AlexAcc 455,AlexAcc 454,AlexAcc 453,AlexAcc 452,AlexAcc 451,AlexAcc 450,AlexAcc 449,AlexAcc 448,AlexAcc 447,AlexAcc 446,AlexAcc 445,AlexAcc 444,AlexAcc 443,AlexAcc 442,AlexAcc 441,AlexAcc 440,AlexAcc 439,AlexAcc 438,AlexAcc 437,AlexAcc 436,AlexAcc 435,AlexAcc 434,AlexAcc 433,AlexAcc 432,AlexAcc 431,AlexAcc 430,AlexAcc 429,AlexAcc 428,AlexAcc 427,AlexAcc 426,AlexAcc 425,AlexAcc 424,AlexAcc 423,AlexAcc 422,AlexAcc 421,AlexAcc 420,AlexAcc 419,AlexAcc 418,AlexAcc 417,AlexAcc 416,AlexAcc 415,AlexAcc 414,AlexAcc 413,AlexAcc 412,AlexAcc 411,AlexAcc 410,AlexAcc 409,AlexAcc 408,AlexAcc 407,AlexAcc 406,AlexAcc 405,AlexAcc 404,AlexAcc 403,AlexAcc 402,AlexAcc 401,AlexAcc 400,AlexAcc 399,AlexAcc 398,AlexAcc 397,AlexAcc 396,AlexAcc 395,AlexAcc 394,AlexAcc 393,AlexAcc 392,AlexAcc 391,AlexAcc 390,AlexAcc 389,AlexAcc 388,AlexAcc 387,AlexAcc 386,AlexAcc 385,AlexAcc 384,AlexAcc 383,AlexAcc 382,AlexAcc 381,AlexAcc 380,AlexAcc 379,AlexAcc 378,AlexAcc 377,AlexAcc 376,AlexAcc 375,AlexAcc 374,AlexAcc 373,AlexAcc 372,AlexAcc 371,AlexAcc 370,AlexAcc 369,AlexAcc 368,AlexAcc 367,AlexAcc 366,AlexAcc 365,AlexAcc 364,AlexAcc 363,AlexAcc 362,AlexAcc 361,AlexAcc 360,AlexAcc 359,AlexAcc 358,AlexAcc 357,AlexAcc 356,AlexAcc 355,AlexAcc 354,AlexAcc 353,AlexAcc 352,AlexAcc 351,AlexAcc 350,AlexAcc 349,AlexAcc 348,AlexAcc 347,AlexAcc 346,AlexAcc 345,AlexAcc 344,AlexAcc 343,AlexAcc 342,AlexAcc 341,AlexAcc 340,AlexAcc 339,AlexAcc 338,AlexAcc 337,AlexAcc 336,AlexAcc 335,AlexAcc 334,AlexAcc 333,AlexAcc 332,AlexAcc 331,AlexAcc 330,AlexAcc 329,AlexAcc 328,AlexAcc 327,AlexAcc 326,AlexAcc 325,AlexAcc 324,AlexAcc 323,AlexAcc 322,AlexAcc 321,AlexAcc 320,AlexAccPred 319 ( not' (followedBy '#') )(AlexAccNone),AlexAccPred 318 ( not' (followedBy '#') )(AlexAccNone),AlexAcc 317,AlexAcc 316,AlexAcc 315,AlexAccPred 314 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 313 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 312 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 311 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 310 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 309 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred 308 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 307)),AlexAccPred 306 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 305)),AlexAccPred 304 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 303)),AlexAcc 302,AlexAccSkip,AlexAccSkip,AlexAcc 301,AlexAcc 300,AlexAcc 299,AlexAcc 298,AlexAcc 297,AlexAcc 296,AlexAcc 295,AlexAcc 294,AlexAcc 293,AlexAcc 292,AlexAcc 291,AlexAcc 290,AlexAcc 289,AlexAcc 288,AlexAcc 287,AlexAcc 286,AlexAcc 285,AlexAcc 284,AlexAcc 283,AlexAcc 282,AlexAcc 281,AlexAcc 280,AlexAcc 279,AlexAcc 278,AlexAcc 277,AlexAcc 276,AlexAcc 275,AlexAcc 274,AlexAcc 273,AlexAcc 272,AlexAcc 271,AlexAcc 270,AlexAcc 269,AlexAcc 268,AlexAcc 267,AlexAcc 266,AlexAcc 265,AlexAcc 264,AlexAcc 263,AlexAcc 262,AlexAcc 261,AlexAcc 260,AlexAcc 259,AlexAcc 258,AlexAcc 257,AlexAcc 256,AlexAcc 255,AlexAcc 254,AlexAcc 253,AlexAcc 252,AlexAcc 251,AlexAcc 250,AlexAcc 249,AlexAcc 248,AlexAcc 247,AlexAcc 246,AlexAcc 245,AlexAcc 244,AlexAccPred 243 (alexRightContext 7)(AlexAccNone),AlexAcc 242,AlexAcc 241,AlexAcc 240,AlexAcc 239,AlexAcc 238,AlexAcc 237,AlexAccPred 236 (alexRightContext 45)(AlexAccNone),AlexAcc 235,AlexAcc 234,AlexAcc 233,AlexAcc 232,AlexAcc 231,AlexAcc 230,AlexAcc 229,AlexAcc 228,AlexAcc 227,AlexAcc 226,AlexAcc 225,AlexAcc 224,AlexAcc 223,AlexAcc 222,AlexAcc 221,AlexAcc 220,AlexAcc 219,AlexAcc 218,AlexAcc 217,AlexAcc 216,AlexAcc 215,AlexAcc 214,AlexAcc 213,AlexAcc 212,AlexAcc 211,AlexAcc 210,AlexAcc 209,AlexAcc 208,AlexAcc 207,AlexAcc 206,AlexAcc 205,AlexAcc 204,AlexAcc 203,AlexAcc 202,AlexAcc 201,AlexAcc 200,AlexAcc 199,AlexAcc 198,AlexAcc 197,AlexAcc 196,AlexAcc 195,AlexAcc 194,AlexAcc 193,AlexAcc 192,AlexAcc 191,AlexAcc 190,AlexAcc 189,AlexAcc 188,AlexAcc 187,AlexAcc 186,AlexAcc 185,AlexAcc 184,AlexAcc 183,AlexAcc 182,AlexAcc 181,AlexAcc 180,AlexAcc 179,AlexAcc 178,AlexAcc 177,AlexAcc 176,AlexAcc 175,AlexAcc 174,AlexAcc 173,AlexAcc 172,AlexAcc 171,AlexAcc 170,AlexAcc 169,AlexAcc 168,AlexAcc 167,AlexAcc 166,AlexAcc 165,AlexAcc 164,AlexAcc 163,AlexAcc 162,AlexAcc 161,AlexAcc 160,AlexAcc 159,AlexAcc 158,AlexAcc 157,AlexAcc 156,AlexAcc 155,AlexAcc 154,AlexAcc 153,AlexAcc 152,AlexAcc 151,AlexAcc 150,AlexAcc 149,AlexAcc 148,AlexAcc 147,AlexAcc 146,AlexAcc 145,AlexAcc 144,AlexAcc 143,AlexAcc 142,AlexAcc 141,AlexAcc 140,AlexAcc 139,AlexAcc 138,AlexAcc 137,AlexAcc 136,AlexAcc 135,AlexAcc 134,AlexAcc 133,AlexAcc 132,AlexAcc 131,AlexAcc 130,AlexAcc 129,AlexAcc 128,AlexAcc 127,AlexAcc 126,AlexAcc 125,AlexAcc 124,AlexAcc 123,AlexAcc 122,AlexAcc 121,AlexAcc 120,AlexAcc 119,AlexAcc 118,AlexAcc 117,AlexAcc 116,AlexAcc 115,AlexAcc 114,AlexAcc 113,AlexAcc 112,AlexAcc 111,AlexAcc 110,AlexAcc 109,AlexAcc 108,AlexAcc 107,AlexAcc 106,AlexAcc 105,AlexAcc 104,AlexAcc 103,AlexAcc 102,AlexAcc 101,AlexAcc 100,AlexAcc 99,AlexAcc 98,AlexAcc 97,AlexAcc 96,AlexAcc 95,AlexAcc 94,AlexAcc 93,AlexAcc 92,AlexAcc 91,AlexAcc 90,AlexAcc 89,AlexAcc 88,AlexAcc 87,AlexAcc 86,AlexAcc 85,AlexAcc 84,AlexAcc 83,AlexAcc 82,AlexAcc 81,AlexAcc 80,AlexAcc 79,AlexAcc 78,AlexAcc 77,AlexAcc 76,AlexAcc 75,AlexAcc 74,AlexAcc 73,AlexAcc 72,AlexAcc 71,AlexAcc 70,AlexAcc 69,AlexAcc 68,AlexAcc 67,AlexAcc 66,AlexAcc 65,AlexAcc 64,AlexAcc 63,AlexAcc 62,AlexAcc 61,AlexAcc 60,AlexAcc 59,AlexAcc 58,AlexAcc 57,AlexAcc 56,AlexAcc 55,AlexAcc 54,AlexAcc 53,AlexAcc 52,AlexAcc 51,AlexAcc 50,AlexAcc 49,AlexAcc 48,AlexAcc 47,AlexAcc 46,AlexAcc 45,AlexAcc 44,AlexAcc 43,AlexAcc 42,AlexAcc 41,AlexAcc 40,AlexAcc 39,AlexAcc 38,AlexAcc 37,AlexAcc 36,AlexAcc 35,AlexAcc 34,AlexAcc 33,AlexAcc 32,AlexAcc 31,AlexAcc 30,AlexAcc 29,AlexAcc 28,AlexAcc 27,AlexAcc 26,AlexAcc 25,AlexAcc 24,AlexAcc 23,AlexAcc 22,AlexAcc 21,AlexAcc 20,AlexAcc 19,AlexAcc 18,AlexAcc 17,AlexAcc 16,AlexAcc 15,AlexAcc 14,AlexAcc 13,AlexAcc 12,AlexAcc 11,AlexAcc 10,AlexAcc 9,AlexAcc 8,AlexAcc 7,AlexAcc 6,AlexAcc 5,AlexAcc 4,AlexAcc 3,AlexAcc 2,AlexAcc 1,AlexAcc 0]--alex_actions = array (0::Int,525) [(524,alex_action_40),(523,alex_action_43),(522,alex_action_42),(521,alex_action_2),(520,alex_action_3),(519,alex_action_4),(518,alex_action_5),(517,alex_action_6),(516,alex_action_7),(515,alex_action_8),(514,alex_action_9),(513,alex_action_10),(512,alex_action_11),(511,alex_action_12),(510,alex_action_13),(509,alex_action_14),(508,alex_action_15),(507,alex_action_16),(506,alex_action_17),(505,alex_action_18),(504,alex_action_19),(503,alex_action_20),(502,alex_action_21),(501,alex_action_22),(500,alex_action_23),(499,alex_action_24),(498,alex_action_25),(497,alex_action_26),(496,alex_action_27),(495,alex_action_28),(494,alex_action_29),(493,alex_action_30),(492,alex_action_31),(491,alex_action_32),(490,alex_action_32),(489,alex_action_32),(488,alex_action_32),(487,alex_action_32),(486,alex_action_32),(485,alex_action_32),(484,alex_action_32),(483,alex_action_32),(482,alex_action_32),(481,alex_action_32),(480,alex_action_32),(479,alex_action_32),(478,alex_action_32),(477,alex_action_32),(476,alex_action_32),(475,alex_action_32),(474,alex_action_32),(473,alex_action_32),(472,alex_action_32),(471,alex_action_32),(470,alex_action_32),(469,alex_action_32),(468,alex_action_32),(467,alex_action_32),(466,alex_action_32),(465,alex_action_32),(464,alex_action_32),(463,alex_action_32),(462,alex_action_32),(461,alex_action_32),(460,alex_action_32),(459,alex_action_32),(458,alex_action_32),(457,alex_action_32),(456,alex_action_32),(455,alex_action_32),(454,alex_action_32),(453,alex_action_32),(452,alex_action_32),(451,alex_action_32),(450,alex_action_32),(449,alex_action_32),(448,alex_action_32),(447,alex_action_32),(446,alex_action_32),(445,alex_action_32),(444,alex_action_32),(443,alex_action_32),(442,alex_action_32),(441,alex_action_32),(440,alex_action_32),(439,alex_action_32),(438,alex_action_32),(437,alex_action_32),(436,alex_action_32),(435,alex_action_32),(434,alex_action_32),(433,alex_action_32),(432,alex_action_32),(431,alex_action_32),(430,alex_action_32),(429,alex_action_32),(428,alex_action_32),(427,alex_action_32),(426,alex_action_32),(425,alex_action_32),(424,alex_action_32),(423,alex_action_32),(422,alex_action_32),(421,alex_action_32),(420,alex_action_32),(419,alex_action_32),(418,alex_action_32),(417,alex_action_32),(416,alex_action_32),(415,alex_action_32),(414,alex_action_32),(413,alex_action_32),(412,alex_action_32),(411,alex_action_32),(410,alex_action_32),(409,alex_action_32),(408,alex_action_32),(407,alex_action_32),(406,alex_action_32),(405,alex_action_32),(404,alex_action_32),(403,alex_action_32),(402,alex_action_32),(401,alex_action_32),(400,alex_action_32),(399,alex_action_32),(398,alex_action_32),(397,alex_action_32),(396,alex_action_32),(395,alex_action_32),(394,alex_action_32),(393,alex_action_32),(392,alex_action_32),(391,alex_action_32),(390,alex_action_32),(389,alex_action_32),(388,alex_action_32),(387,alex_action_32),(386,alex_action_32),(385,alex_action_32),(384,alex_action_32),(383,alex_action_32),(382,alex_action_32),(381,alex_action_32),(380,alex_action_32),(379,alex_action_32),(378,alex_action_32),(377,alex_action_32),(376,alex_action_32),(375,alex_action_32),(374,alex_action_32),(373,alex_action_32),(372,alex_action_32),(371,alex_action_32),(370,alex_action_32),(369,alex_action_32),(368,alex_action_32),(367,alex_action_32),(366,alex_action_32),(365,alex_action_32),(364,alex_action_32),(363,alex_action_32),(362,alex_action_32),(361,alex_action_32),(360,alex_action_32),(359,alex_action_32),(358,alex_action_32),(357,alex_action_32),(356,alex_action_32),(355,alex_action_32),(354,alex_action_32),(353,alex_action_32),(352,alex_action_32),(351,alex_action_32),(350,alex_action_32),(349,alex_action_32),(348,alex_action_32),(347,alex_action_32),(346,alex_action_32),(345,alex_action_32),(344,alex_action_32),(343,alex_action_32),(342,alex_action_32),(341,alex_action_32),(340,alex_action_32),(339,alex_action_32),(338,alex_action_32),(337,alex_action_32),(336,alex_action_32),(335,alex_action_32),(334,alex_action_32),(333,alex_action_32),(332,alex_action_32),(331,alex_action_32),(330,alex_action_32),(329,alex_action_32),(328,alex_action_32),(327,alex_action_32),(326,alex_action_32),(325,alex_action_32),(324,alex_action_32),(323,alex_action_32),(322,alex_action_32),(321,alex_action_32),(320,alex_action_32),(319,alex_action_33),(318,alex_action_33),(317,alex_action_34),(316,alex_action_35),(315,alex_action_35),(314,alex_action_36),(313,alex_action_36),(312,alex_action_36),(311,alex_action_36),(310,alex_action_36),(309,alex_action_36),(308,alex_action_36),(307,alex_action_114),(306,alex_action_36),(305,alex_action_114),(304,alex_action_36),(303,alex_action_114),(302,alex_action_38),(301,alex_action_44),(300,alex_action_45),(299,alex_action_46),(298,alex_action_47),(297,alex_action_48),(296,alex_action_49),(295,alex_action_50),(294,alex_action_51),(293,alex_action_52),(292,alex_action_53),(291,alex_action_54),(290,alex_action_55),(289,alex_action_56),(288,alex_action_57),(287,alex_action_58),(286,alex_action_59),(285,alex_action_60),(284,alex_action_61),(283,alex_action_62),(282,alex_action_63),(281,alex_action_64),(280,alex_action_65),(279,alex_action_66),(278,alex_action_67),(277,alex_action_68),(276,alex_action_69),(275,alex_action_70),(274,alex_action_71),(273,alex_action_72),(272,alex_action_73),(271,alex_action_74),(270,alex_action_74),(269,alex_action_74),(268,alex_action_75),(267,alex_action_76),(266,alex_action_77),(265,alex_action_78),(264,alex_action_79),(263,alex_action_80),(262,alex_action_81),(261,alex_action_82),(260,alex_action_83),(259,alex_action_84),(258,alex_action_85),(257,alex_action_86),(256,alex_action_87),(255,alex_action_88),(254,alex_action_89),(253,alex_action_90),(252,alex_action_91),(251,alex_action_92),(250,alex_action_93),(249,alex_action_94),(248,alex_action_95),(247,alex_action_96),(246,alex_action_97),(245,alex_action_98),(244,alex_action_99),(243,alex_action_100),(242,alex_action_101),(241,alex_action_102),(240,alex_action_103),(239,alex_action_104),(238,alex_action_105),(237,alex_action_106),(236,alex_action_107),(235,alex_action_108),(234,alex_action_109),(233,alex_action_110),(232,alex_action_111),(231,alex_action_112),(230,alex_action_112),(229,alex_action_112),(228,alex_action_112),(227,alex_action_112),(226,alex_action_112),(225,alex_action_112),(224,alex_action_112),(223,alex_action_113),(222,alex_action_113),(221,alex_action_113),(220,alex_action_113),(219,alex_action_113),(218,alex_action_113),(217,alex_action_113),(216,alex_action_113),(215,alex_action_113),(214,alex_action_113),(213,alex_action_113),(212,alex_action_114),(211,alex_action_114),(210,alex_action_114),(209,alex_action_114),(208,alex_action_114),(207,alex_action_114),(206,alex_action_114),(205,alex_action_114),(204,alex_action_114),(203,alex_action_114),(202,alex_action_114),(201,alex_action_114),(200,alex_action_114),(199,alex_action_114),(198,alex_action_114),(197,alex_action_114),(196,alex_action_114),(195,alex_action_114),(194,alex_action_114),(193,alex_action_114),(192,alex_action_114),(191,alex_action_114),(190,alex_action_114),(189,alex_action_114),(188,alex_action_114),(187,alex_action_114),(186,alex_action_114),(185,alex_action_114),(184,alex_action_114),(183,alex_action_114),(182,alex_action_114),(181,alex_action_114),(180,alex_action_114),(179,alex_action_114),(178,alex_action_114),(177,alex_action_114),(176,alex_action_114),(175,alex_action_114),(174,alex_action_114),(173,alex_action_114),(172,alex_action_114),(171,alex_action_114),(170,alex_action_114),(169,alex_action_114),(168,alex_action_114),(167,alex_action_114),(166,alex_action_114),(165,alex_action_114),(164,alex_action_114),(163,alex_action_114),(162,alex_action_114),(161,alex_action_114),(160,alex_action_114),(159,alex_action_114),(158,alex_action_114),(157,alex_action_114),(156,alex_action_114),(155,alex_action_114),(154,alex_action_114),(153,alex_action_114),(152,alex_action_114),(151,alex_action_114),(150,alex_action_114),(149,alex_action_114),(148,alex_action_114),(147,alex_action_114),(146,alex_action_114),(145,alex_action_114),(144,alex_action_114),(143,alex_action_114),(142,alex_action_114),(141,alex_action_114),(140,alex_action_114),(139,alex_action_114),(138,alex_action_114),(137,alex_action_114),(136,alex_action_114),(135,alex_action_114),(134,alex_action_114),(133,alex_action_114),(132,alex_action_114),(131,alex_action_114),(130,alex_action_114),(129,alex_action_114),(128,alex_action_114),(127,alex_action_114),(126,alex_action_114),(125,alex_action_114),(124,alex_action_114),(123,alex_action_114),(122,alex_action_114),(121,alex_action_114),(120,alex_action_114),(119,alex_action_114),(118,alex_action_114),(117,alex_action_114),(116,alex_action_114),(115,alex_action_114),(114,alex_action_114),(113,alex_action_114),(112,alex_action_114),(111,alex_action_114),(110,alex_action_114),(109,alex_action_114),(108,alex_action_114),(107,alex_action_114),(106,alex_action_114),(105,alex_action_114),(104,alex_action_114),(103,alex_action_114),(102,alex_action_114),(101,alex_action_114),(100,alex_action_114),(99,alex_action_114),(98,alex_action_114),(97,alex_action_114),(96,alex_action_114),(95,alex_action_114),(94,alex_action_114),(93,alex_action_114),(92,alex_action_114),(91,alex_action_114),(90,alex_action_114),(89,alex_action_114),(88,alex_action_114),(87,alex_action_114),(86,alex_action_114),(85,alex_action_114),(84,alex_action_114),(83,alex_action_114),(82,alex_action_114),(81,alex_action_114),(80,alex_action_114),(79,alex_action_114),(78,alex_action_114),(77,alex_action_114),(76,alex_action_114),(75,alex_action_114),(74,alex_action_114),(73,alex_action_114),(72,alex_action_114),(71,alex_action_114),(70,alex_action_114),(69,alex_action_114),(68,alex_action_114),(67,alex_action_114),(66,alex_action_114),(65,alex_action_114),(64,alex_action_114),(63,alex_action_114),(62,alex_action_114),(61,alex_action_114),(60,alex_action_114),(59,alex_action_114),(58,alex_action_114),(57,alex_action_114),(56,alex_action_114),(55,alex_action_114),(54,alex_action_114),(53,alex_action_114),(52,alex_action_114),(51,alex_action_114),(50,alex_action_114),(49,alex_action_114),(48,alex_action_114),(47,alex_action_114),(46,alex_action_114),(45,alex_action_114),(44,alex_action_114),(43,alex_action_114),(42,alex_action_114),(41,alex_action_114),(40,alex_action_114),(39,alex_action_114),(38,alex_action_114),(37,alex_action_114),(36,alex_action_114),(35,alex_action_114),(34,alex_action_114),(33,alex_action_114),(32,alex_action_114),(31,alex_action_114),(30,alex_action_114),(29,alex_action_114),(28,alex_action_114),(27,alex_action_114),(26,alex_action_114),(25,alex_action_114),(24,alex_action_114),(23,alex_action_114),(22,alex_action_114),(21,alex_action_114),(20,alex_action_114),(19,alex_action_114),(18,alex_action_114),(17,alex_action_114),(16,alex_action_114),(15,alex_action_114),(14,alex_action_114),(13,alex_action_114),(12,alex_action_114),(11,alex_action_114),(10,alex_action_114),(9,alex_action_114),(8,alex_action_114),(7,alex_action_114),(6,alex_action_114),(5,alex_action_114),(4,alex_action_114),(3,alex_action_114),(2,alex_action_114),(1,alex_action_114),(0,alex_action_114)]--{-# LINE 242 "src/full/Agda/Syntax/Parser/Lexer.x" #-}----- | This is the initial state for parsing a regular, non-literate file.-normal :: LexState-normal = 0---{-| The layout state. Entered when we see a layout keyword ('withLayout') and-    exited either when seeing an open brace ('openBrace') or at the next token-    ('newLayoutContext').--    Update: we don't use braces for layout anymore.--}-layout :: LexState-layout = layout_---{-| The state inside a pragma.--}-pragma :: LexState-pragma = pragma_--{-| We enter this state from 'newLayoutContext' when the token following a-    layout keyword is to the left of (or at the same column as) the current-    layout context. Example:--    > data Empty : Set where-    > foo : Empty -> Nat--    Here the second line is not part of the @where@ clause since it is has the-    same indentation as the @data@ definition. What we have to do is insert an-    empty layout block @{}@ after the @where@. The only thing that can happen-    in this state is that 'emptyLayout' is executed, generating the closing-    brace. The open brace is generated when entering by 'newLayoutContext'.--}-empty_layout :: LexState-empty_layout = empty_layout_----- | This state is entered at the beginning of each line. You can't lex---   anything in this state, and to exit you have to check the layout rule.---   Done with 'offsideRule'.-bol :: LexState-bol = bol_----- | This state can only be entered by the parser. In this state you can only---   lex the keywords @using@, @hiding@, @renaming@ and @to@. Moreover they are---   only keywords in this particular state. The lexer will never enter this---   state by itself, that has to be done in the parser.-imp_dir :: LexState-imp_dir = imp_dir_----- | Return the next token. This is the function used by Happy in the parser.------   @lexer k = 'lexToken' >>= k@-lexer :: (Token -> Parser a) -> Parser a-lexer k = lexToken >>= k---- | Do not use this function; it sets the 'ParseFlags' to--- 'undefined'.-alexScan :: AlexInput -> Int -> AlexReturn (LexAction Token)---- | This is the main lexing function generated by Alex.-alexScanUser :: ([LexState], ParseFlags) -> AlexInput -> Int -> AlexReturn (LexAction Token)----bol_,code,empty_layout_,imp_dir_,layout_,pragma_ :: Int-bol_ = 1-code = 2-empty_layout_ = 3-imp_dir_ = 4-layout_ = 5-pragma_ = 6-alex_action_2 =  begin pragma -alex_action_3 =  symbol SymOpenPragma -alex_action_4 =  endWith $ symbol SymClosePragma -alex_action_5 =  keyword KwBUILTIN -alex_action_6 =  keyword KwCATCHALL -alex_action_7 =  keyword KwCOMPILED -alex_action_8 =  keyword KwCOMPILED_DATA -alex_action_9 =  keyword KwCOMPILED_DATA_UHC -alex_action_10 =  keyword KwCOMPILED_DECLARE_DATA -alex_action_11 =  keyword KwCOMPILED_EPIC -alex_action_12 =  keyword KwCOMPILED_EXPORT -alex_action_13 =  keyword KwCOMPILED_JS -alex_action_14 =  keyword KwCOMPILED_TYPE -alex_action_15 =  keyword KwCOMPILED_UHC -alex_action_16 =  keyword KwHASKELL -alex_action_17 =  keyword KwDISPLAY -alex_action_18 =  keyword KwIMPORT -alex_action_19 =  keyword KwIMPORT_UHC -alex_action_20 =  keyword KwIMPOSSIBLE -alex_action_21 =  keyword KwINLINE -alex_action_22 =  keyword KwLINE -alex_action_23 =  keyword KwMEASURE -alex_action_24 =  keyword KwNO_POSITIVITY_CHECK -alex_action_25 =  keyword KwNO_TERMINATION_CHECK -alex_action_26 =  keyword KwNON_TERMINATING -alex_action_27 =  keyword KwOPTIONS -alex_action_28 =  keyword KwPOLARITY -alex_action_29 =  keyword KwREWRITE -alex_action_30 =  keyword KwSTATIC -alex_action_31 =  keyword KwTERMINATING -alex_action_32 =  withInterval $ TokString -alex_action_33 =  nestedComment -alex_action_34 =  symbol SymEndComment -alex_action_35 =  symbol SymEndComment -alex_action_36 =  withInterval TokComment -alex_action_38 =  begin bol_ -alex_action_40 =  offsideRule -alex_action_42 =  endWith newLayoutContext -alex_action_43 =  emptyLayout -alex_action_44 =  keyword KwLet -alex_action_45 =  keyword KwIn -alex_action_46 =  keyword KwWhere -alex_action_47 =  keyword KwField -alex_action_48 =  keyword KwWith -alex_action_49 =  keyword KwRewrite -alex_action_50 =  keyword KwPostulate -alex_action_51 =  keyword KwPrimitive -alex_action_52 =  keyword KwOpen -alex_action_53 =  keyword KwImport -alex_action_54 =  keyword KwModule -alex_action_55 =  keyword KwData -alex_action_56 =  keyword KwCoData -alex_action_57 =  keyword KwRecord -alex_action_58 =  keyword KwConstructor -alex_action_59 =  keyword KwInductive -alex_action_60 =  keyword KwCoInductive -alex_action_61 =  keyword KwEta -alex_action_62 =  keyword KwNoEta -alex_action_63 =  keyword KwInfix -alex_action_64 =  keyword KwInfixL -alex_action_65 =  keyword KwInfixR -alex_action_66 =  keyword KwMutual -alex_action_67 =  keyword KwAbstract -alex_action_68 =  keyword KwPrivate -alex_action_69 =  keyword KwInstance -alex_action_70 =  keyword KwOverlap -alex_action_71 =  keyword KwMacro -alex_action_72 =  keyword KwSet -alex_action_73 =  keyword KwForall -alex_action_74 =  withInterval' (read . drop 3) TokSetN -alex_action_75 =  keyword KwQuoteGoal -alex_action_76 =  keyword KwQuoteContext -alex_action_77 =  keyword KwQuote -alex_action_78 =  keyword KwQuoteTerm -alex_action_79 =  keyword KwUnquote -alex_action_80 =  keyword KwUnquoteDecl -alex_action_81 =  keyword KwUnquoteDef  -alex_action_82 =  keyword KwTactic -alex_action_83 =  keyword KwSyntax -alex_action_84 =  keyword KwPatternSyn -alex_action_85 =  keyword KwUsing -alex_action_86 =  keyword KwHiding -alex_action_87 =  keyword KwRenaming -alex_action_88 =  endWith $ keyword KwTo -alex_action_89 =  keyword KwPublic -alex_action_90 =  hole -alex_action_91 =  symbol SymEllipsis -alex_action_92 =  symbol SymDotDot -alex_action_93 =  symbol SymDot -alex_action_94 =  symbol SymSemi -alex_action_95 =  symbol SymColon -alex_action_96 =  symbol SymEqual -alex_action_97 =  symbol SymUnderscore -alex_action_98 =  symbol SymQuestionMark -alex_action_99 =  symbol SymBar -alex_action_100 =  symbol SymOpenIdiomBracket -alex_action_101 =  symbol SymCloseIdiomBracket -alex_action_102 =  symbol SymOpenParen -alex_action_103 =  symbol SymCloseParen -alex_action_104 =  symbol SymArrow -alex_action_105 =  symbol SymLambda -alex_action_106 =  symbol SymAs -alex_action_107 =  symbol SymDoubleOpenBrace -alex_action_108 =  symbol SymOpenBrace -alex_action_109 =  symbol SymCloseBrace -alex_action_110 =  litChar -alex_action_111 =  litString -alex_action_112 =  literal LitNat -alex_action_113 =  literal LitFloat -alex_action_114 =  identifier -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 9 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-8.0.2-rc2/lib/ghc-8.0.1.20161213/include/ghcversion.h" #-}-------------------{-# LINE 9 "<command-line>" #-}-{-# LINE 1 "/tmp/ghc18762_0/ghc_2.h" #-}-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------{-# LINE 9 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine--{-# LINE 21 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define GTE(n,m) (tagToEnum# (n >=# m))-#define EQ(n,m) (tagToEnum# (n ==# m))-#else-#define GTE(n,m) (n >=# m)-#define EQ(n,m) (n ==# m)-#endif-{-# LINE 51 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN-  narrow16Int# i-  where-        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)-        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-        low  = int2Word# (ord# (indexCharOffAddr# arr off'))-        off' = off *# 2#-#else-  indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN-  narrow32Int# i-  where-   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`-                     (b2 `uncheckedShiftL#` 16#) `or#`-                     (b1 `uncheckedShiftL#` 8#) `or#` b0)-   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))-   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))-   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))-   off' = off *# 4#-#else-  indexInt32OffAddr# arr off-#endif-------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a-  = AlexEOF-  | AlexError  !AlexInput-  | AlexSkip   !AlexInput !Int-  | AlexToken  !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))-  = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))-  = case alex_scan_tkn user input 0# input sc AlexNone of-  (AlexNone, input') ->-    case alexGetByte input of-      Nothing ->----                                   AlexEOF-      Just _ ->----                                   AlexError input'--  (AlexLastSkip input'' len, _) ->----    AlexSkip input'' len--  (AlexLastAcc k input''' len, _) ->----    AlexToken input''' len (alex_actions ! k)----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =-  input `seq` -- strict in the input-  let-  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))-  in-  new_acc `seq`-  case alexGetByte input of-     Nothing -> (new_acc, input)-     Just (c, new_input) ->----      case fromIntegral c of { (I# (ord_c)) ->-        let-                base   = alexIndexInt32OffAddr alex_base s-                offset = (base +# ord_c)-                check  = alexIndexInt16OffAddr alex_check offset--                new_s = if GTE(offset,0#) && EQ(check,ord_c)-                          then alexIndexInt16OffAddr alex_table offset-                          else alexIndexInt16OffAddr alex_deflt s-        in-        case new_s of-            -1# -> (new_acc, input)-                -- on an error, we want to keep the input *before* the-                -- character that failed, not after.-            _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)-                        new_input new_s new_acc-      }-  where-        check_accs (AlexAccNone) = last_acc-        check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))-        check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))--        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-  = AlexNone-  | AlexLastAcc !Int !AlexInput !Int-  | AlexLastSkip     !AlexInput !Int--data AlexAcc user-  = AlexAccNone-  | AlexAcc Int-  | AlexAccSkip--  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)-  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)--type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool---- -------------------------------------------------------------------------------- Predicates on a rule--alexAndPred p1 p2 user in1 len in2-  = p1 user in1 len in2 && p2 user in1 len in2----alexPrevCharIsPred :: Char -> AlexAccPred _-alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input--alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _-alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (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.
− dist/build/Agda/Syntax/Parser/Parser.hs
@@ -1,7338 +0,0 @@-{-# OPTIONS_GHC -w #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# LANGUAGE TupleSections #-}--{-| The parser is generated by Happy (<http://www.haskell.org/happy>).- -- - Ideally, ranges should be as precise as possible, to get messages that- - emphasize precisely the faulting term(s) upon error.- -- - However, interactive highlighting is only applied at the end of each- - mutual block, keywords are only highlighted once (see- - `TypeChecking.Rules.Decl'). So if the ranges of two declarations- - interleave, one must ensure that keyword ranges are not included in- - the intersection. (Otherwise they are uncolored by the interactive- - highlighting.)- -- -}-module Agda.Syntax.Parser.Parser (-      moduleParser-    , moduleNameParser-    , exprParser-    , exprWhereParser-    , tokensParser-    , splitOnDots  -- only used by the internal test-suite-    ) where--import Control.Monad--import Data.Char-import Data.Functor-import Data.List-import Data.Maybe-import Data.Monoid-import qualified Data.Traversable as T--import Debug.Trace--import Agda.Syntax.Position hiding (tests)-import Agda.Syntax.Parser.Monad-import Agda.Syntax.Parser.Lexer-import Agda.Syntax.Parser.Tokens-import Agda.Syntax.Concrete as C-import Agda.Syntax.Concrete.Pretty ()-import Agda.Syntax.Common-import Agda.Syntax.Fixity-import Agda.Syntax.Notation-import Agda.Syntax.Literal--import Agda.TypeChecking.Positivity.Occurrence hiding (tests)--import Agda.Utils.Either hiding (tests)-import Agda.Utils.Hash-import Agda.Utils.List ( spanJust, chopWhen )-import Agda.Utils.Monad-import Agda.Utils.Pretty-import Agda.Utils.Singleton-import Agda.Utils.Tuple--import Agda.Utils.Impossible-#include "undefined.h"-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts-import Control.Applicative(Applicative(..))-import Control.Monad (ap)---- parser produced by Happy Version 1.19.5--newtype HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn9 :: ([Token]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Token])-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: ([Token]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Token])-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Token) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Token)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (([Pragma], [Declaration]))-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: t13 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t13-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: t14 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t14-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: t15 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t15-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (()) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (())-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Integer) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Integer)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Name) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Name)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Name])-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (Range) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Range)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: (Arg Name) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Arg Name)-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg Name])-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg Name])-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: (QName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (QName)-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: (QName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (QName)-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (Name) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Name)-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Name])-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Name])-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: (Either [Name] [Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Either [Name] [Expr])-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: ([WithHiding Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([WithHiding Name])-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: ([String]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([String])-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: (String) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (String)-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: ([(Interval, String)]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([(Interval, String)])-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: (Name) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Name)-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: (QName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (QName)-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: ([QName]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([QName])-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: (Expr) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Expr)-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: t38 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t38-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: t41 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t41-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: (Expr) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Expr)-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: t44 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t44-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: t45 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t45-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: t46 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t46-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: (RecordAssignments) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RecordAssignments)-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: (RecordAssignments) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RecordAssignments)-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (RecordAssignment) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RecordAssignment)-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: (ModuleAssignment) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ModuleAssignment)-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: ([FieldAssignment]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([FieldAssignment])-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: ([FieldAssignment]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([FieldAssignment])-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: (FieldAssignment) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (FieldAssignment)-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: t54 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t54-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: t55 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t55-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ([TypedBindings]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([TypedBindings])-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (TypedBindings)-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (TypedBindings)-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (TypedBindings)-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([LamBinding])-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Either ([LamBinding], Hiding) [Expr])-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Either Hiding LamBinding])-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Either [Either Hiding LamBinding] [Expr])-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((LHS,RHS,WhereClause,Bool))-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((LHS,RHS,WhereClause,Bool))-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((LHS,RHS,WhereClause,Bool))-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: ([(LHS,RHS,WhereClause,Bool)]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([(LHS,RHS,WhereClause,Bool)])-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([LamBinding])-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([LamBinding])-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([LamBinding])-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([LamBinding])-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Either [LamBinding] [Expr])-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: (ImportDirective) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ImportDirective)-happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: ([ImportDirective]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([ImportDirective])-happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: (ImportDirective) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ImportDirective)-happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: ((Using, Range)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((Using, Range))-happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: (([ImportedName], Range)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (([ImportedName], Range))-happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: (([Renaming] , Range)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (([Renaming] , Range))-happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: ([Renaming]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Renaming])-happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: (Renaming) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Renaming)-happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: (ImportedName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ImportedName)-happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: (ImportedName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ImportedName)-happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: ([ImportedName]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([ImportedName])-happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: t84 -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> t84-happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: (LHS) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (LHS)-happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: ([Pattern]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Pattern])-happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: (WhereClause) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (WhereClause)-happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (ExprWhere) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (ExprWhere)-happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: ([Arg Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg Declaration])-happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (RHSOrTypeSigs) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RHSOrTypeSigs)-happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: ((Name, IsInstance)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((Name, IsInstance))-happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyIn107 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn107 #-}-happyOut107 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut107 #-}-happyIn108 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn108 #-}-happyOut108 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut108 #-}-happyIn109 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn109 #-}-happyOut109 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut109 #-}-happyIn110 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn110 #-}-happyOut110 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut110 #-}-happyIn111 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn111 #-}-happyOut111 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut111 #-}-happyIn112 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn112 #-}-happyOut112 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut112 #-}-happyIn113 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn113 #-}-happyOut113 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg Name])-happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut113 #-}-happyIn114 :: ([RString]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn114 #-}-happyOut114 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([RString])-happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut114 #-}-happyIn115 :: ([NamedArg HoleName]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn115 #-}-happyOut115 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([NamedArg HoleName])-happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut115 #-}-happyIn116 :: (NamedArg HoleName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn116 #-}-happyOut116 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (NamedArg HoleName)-happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut116 #-}-happyIn117 :: (HoleName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn117 #-}-happyOut117 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (HoleName)-happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut117 #-}-happyIn118 :: (HoleName) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn118 #-}-happyOut118 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (HoleName)-happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut118 #-}-happyIn119 :: (RString) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn119 #-}-happyOut119 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RString)-happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut119 #-}-happyIn120 :: (Maybe Range) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn120 #-}-happyOut120 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Maybe Range)-happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut120 #-}-happyIn121 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn121 #-}-happyOut121 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut121 #-}-happyIn122 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn122 #-}-happyOut122 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Expr])-happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut122 #-}-happyIn123 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn123 #-}-happyOut123 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([TypedBindings] -> Parser ModuleApplication)-happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut123 #-}-happyIn124 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn124 #-}-happyOut124 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut124 #-}-happyIn125 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn125 #-}-happyOut125 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut125 #-}-happyIn126 :: (Name) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn126 #-}-happyOut126 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Name)-happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut126 #-}-happyIn127 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn127 #-}-happyOut127 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut127 #-}-happyIn128 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn128 #-}-happyOut128 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Declaration)-happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut128 #-}-happyIn129 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn129 #-}-happyOut129 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut129 #-}-happyIn130 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn130 #-}-happyOut130 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut130 #-}-happyIn131 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn131 #-}-happyOut131 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut131 #-}-happyIn132 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn132 #-}-happyOut132 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut132 #-}-happyIn133 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn133 #-}-happyOut133 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut133 #-}-happyIn134 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn134 #-}-happyOut134 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut134 #-}-happyIn135 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn135 #-}-happyOut135 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut135 #-}-happyIn136 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn136 #-}-happyOut136 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut136 #-}-happyIn137 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn137 #-}-happyOut137 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut137 #-}-happyIn138 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn138 #-}-happyOut138 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut138 #-}-happyIn139 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn139 #-}-happyOut139 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut139 #-}-happyIn140 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn140 #-}-happyOut140 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut140 #-}-happyIn141 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn141 #-}-happyOut141 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut141 #-}-happyIn142 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn142 #-}-happyOut142 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut142 #-}-happyIn143 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn143 #-}-happyOut143 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut143 #-}-happyIn144 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn144 #-}-happyOut144 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut144 #-}-happyIn145 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn145 #-}-happyOut145 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut145 #-}-happyIn146 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn146 #-}-happyOut146 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut146 #-}-happyIn147 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn147 #-}-happyOut147 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut147 #-}-happyIn148 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn148 #-}-happyOut148 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut148 #-}-happyIn149 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn149 #-}-happyOut149 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut149 #-}-happyIn150 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn150 #-}-happyOut150 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut150 #-}-happyIn151 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn151 #-}-happyOut151 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut151 #-}-happyIn152 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn152 #-}-happyOut152 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut152 #-}-happyIn153 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn153 #-}-happyOut153 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut153 #-}-happyIn154 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn154 #-}-happyOut154 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut154 #-}-happyIn155 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn155 #-}-happyOut155 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Pragma)-happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut155 #-}-happyIn156 :: ([(Range, Occurrence)]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn156 #-}-happyOut156 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([(Range, Occurrence)])-happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut156 #-}-happyIn157 :: ((Range, Occurrence)) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn157 #-}-happyOut157 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ((Range, Occurrence))-happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut157 #-}-happyIn158 :: ([TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn158 #-}-happyOut158 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([TypeSignature])-happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut158 #-}-happyIn159 :: ([TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn159 #-}-happyOut159 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([TypeSignature])-happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut159 #-}-happyIn160 :: ([Arg TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn160 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn160 #-}-happyOut160 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg TypeSignature])-happyOut160 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut160 #-}-happyIn161 :: ([Arg TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn161 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn161 #-}-happyOut161 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Arg TypeSignature])-happyOut161 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut161 #-}-happyIn162 :: (((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration])) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn162 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn162 #-}-happyOut162 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration]))-happyOut162 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut162 #-}-happyIn163 :: ([RecordDirective]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn163 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn163 #-}-happyOut163 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([RecordDirective])-happyOut163 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut163 #-}-happyIn164 :: (RecordDirective) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn164 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn164 #-}-happyOut164 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (RecordDirective)-happyOut164 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut164 #-}-happyIn165 :: (Ranged Bool) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn165 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn165 #-}-happyOut165 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Ranged Bool)-happyOut165 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut165 #-}-happyIn166 :: (Ranged Induction) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn166 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn166 #-}-happyOut166 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Ranged Induction)-happyOut166 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut166 #-}-happyIn167 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn167 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn167 #-}-happyOut167 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut167 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut167 #-}-happyIn168 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn168 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn168 #-}-happyOut168 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut168 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut168 #-}-happyIn169 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn169 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn169 #-}-happyOut169 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut169 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut169 #-}-happyIn170 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyIn170 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn170 #-}-happyOut170 :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> ([Declaration])-happyOut170 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut170 #-}-happyInTok :: (Token) -> (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t13 t14 t15 t38 t41 t44 t45 t46 t54 t55 t84) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\xd4\x0b\xd4\x0b\xf6\x06\xde\x04\xb6\x0b\x00\x00\x9d\x04\xff\x06\x00\x00\x2c\x07\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x06\x00\x00\x00\x00\xb7\x09\xef\x04\xe8\x06\xd6\x0a\xec\x06\x00\x00\x00\x00\x00\x00\xe5\x06\x00\x00\xb2\x0d\x00\x00\x67\x0d\x00\x00\x00\x00\xf1\x06\x67\x0d\x00\x00\x00\x00\x1b\x03\x9c\x09\x68\x0b\x9a\x07\x4e\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x06\xde\x06\x34\x04\xc6\x00\xea\x06\x51\x01\x68\x0b\xed\x06\x00\x00\x05\x02\xcf\x06\x25\x03\x4e\x0d\x7c\x07\x24\x07\x4e\x09\xcf\x06\xcf\x06\xe7\x06\x00\x00\xda\x06\x1b\x02\xd5\x06\x00\x00\x00\x00\xb2\xff\xb2\xff\x00\x00\xca\x06\xe3\x06\xd9\x06\xb6\x01\xd8\x06\x12\x07\xd1\x06\xc3\x06\xd8\x04\x00\x00\x00\x00\x30\x09\x24\x07\xe2\x08\x22\x0c\x22\x0c\x22\x0c\x00\x00\x20\x01\x4a\x0b\x22\x0c\x22\x0c\x00\x00\x00\x00\xf5\x0a\x22\x0c\xf5\x0a\x00\x00\x6f\x01\xbf\x06\x04\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\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x06\xb5\x06\xb5\x06\xb9\x06\xab\x06\xab\x06\xab\x06\xac\x06\xac\x06\xc6\xff\xac\x06\xff\xff\x9d\x06\xa8\x06\xa3\x06\xa0\x06\x03\x0d\x93\x06\xe5\x00\x93\x06\xf1\x12\x9c\x06\x00\x00\x00\x00\x49\x08\xf5\x0a\x00\x00\xa2\x06\x00\x00\x66\x0a\xb8\x05\x95\x06\xbd\x05\xf9\x01\x00\x00\xc4\x08\x6c\x08\x51\x08\xd0\x06\xea\x0c\x9b\x06\xea\x0c\x91\x06\xd8\x04\xe2\x06\xe0\x06\x3d\x06\xfd\x09\xf5\x0a\x96\x06\xfd\x09\x00\x00\x22\x0c\x22\x0c\xc6\x00\xf5\x0a\xf5\x0a\x00\x00\x00\x00\xb0\x06\x22\x0c\xea\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x0a\x00\x00\x00\x00\x00\x00\x8a\x06\x00\x00\x22\x0c\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\xf5\x0a\xf5\x0a\x92\x06\xea\x0c\x85\x06\x00\x00\x8d\x06\x00\x00\x00\x00\x7b\x06\x22\x0c\x84\x06\xa7\x06\x61\x01\x7f\x06\x00\x00\x04\x01\xf5\x00\x22\x0c\x7e\x06\x77\x06\x7d\x06\x00\x00\x7c\x06\x00\x00\x22\x0c\x22\x0c\x22\x0c\x00\x00\x22\x0c\x22\x0c\xd7\x0a\x94\x09\x7a\x06\x94\x09\x03\x08\xe8\x07\x89\x0a\x00\x00\x00\x00\x75\x06\x00\x00\x5c\x00\x5e\x06\x61\x06\x61\x06\x61\x06\x61\x06\x61\x06\x61\x06\x61\x06\x61\x06\x61\x06\x5f\x06\x5d\x06\x53\x06\x52\x06\x46\x06\x4e\x06\x3a\x06\x44\x06\x42\x06\x3b\x06\x36\x06\x35\x06\x33\x06\x2f\x06\x30\x06\x2e\x06\x40\x06\x3c\x06\x6e\x0a\xee\x02\xc3\x08\x00\x00\x00\x00\x27\x06\x00\x00\x23\x04\x9f\x0c\x27\x06\x00\x00\xaf\x03\xaf\x03\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\x00\x00\x75\x01\xaf\x03\xaf\x03\x00\x00\x00\x00\x00\x00\x3d\x06\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x03\x5b\x06\x5a\x06\x00\x00\x00\x00\x00\x00\x22\x0c\x22\x0c\x26\x06\xb2\xff\x2b\x06\x24\x06\xb2\xff\x25\x06\x39\x00\x00\x00\xd8\x04\x00\x00\x00\x00\x6e\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x0a\x00\x00\x00\x00\x86\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x06\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x03\x6c\x00\xaf\x03\xe7\xff\x00\x00\x8b\x01\x29\x06\x00\x00\x69\x00\x18\x06\x8b\x01\x79\x01\x96\x00\x52\x00\x52\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x43\x06\xdd\xff\xaf\x03\x86\x0c\x24\x00\x06\x07\x00\x00\x1e\x06\x1d\x06\x00\x00\x69\x00\xd9\xff\x22\x0c\xbb\x03\x00\x00\x00\x00\x00\x00\xe7\x05\x68\x00\x68\x00\x00\x00\x00\x00\x6e\x0a\x6e\x0a\x00\x00\x00\x00\x0a\x06\x00\x00\x00\x00\x08\x06\x03\x06\x00\x00\x00\x00\x05\x06\xfa\x05\x00\x00\x00\x00\x00\x00\xfc\x05\xf6\x05\x00\x00\xef\x05\xea\x05\xe2\x05\xdf\x05\xcf\x05\xcf\x05\xcf\x05\xce\x05\xcd\x05\xcd\x05\xc9\x05\xc7\x05\xc5\x05\x00\x00\xc4\x05\xc4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x05\x01\xf9\x00\x78\x00\xf9\x00\x00\x00\xd2\x05\x20\x0a\x00\x00\x20\x0a\x05\x0a\x00\x00\x00\x00\x00\x00\xd8\x05\xc6\x05\x00\x00\xb3\x05\xd8\x04\x00\x00\x24\x00\x05\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\xcc\x05\x00\x00\xc8\x05\xab\x05\x00\x00\xb7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x05\xb4\x05\xad\x05\xb0\x05\xb0\x05\xaa\x05\xa9\x05\xa5\x05\x00\x00\xa4\x05\xa3\x05\xa0\x05\x00\x00\x9d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x05\xa7\x05\x64\x00\x9c\x05\x9a\x05\xe1\xff\x00\x00\x8d\x05\x7a\x01\x86\x05\x05\x0a\x00\x00\x76\x05\x05\x0a\x05\x0a\xb2\xff\x00\x00\x00\x00\x7e\x05\x74\x05\xd8\x04\x74\x05\x00\x00\x52\x00\x82\x05\x73\x05\x73\x05\xb2\xff\x00\x00\x73\x05\x73\x05\x00\x00\x73\x05\x73\x05\x7d\x05\x00\x00\x00\x00\x75\x01\x05\x0a\x00\x00\x6e\x05\x05\x0a\x00\x00\x6e\x05\x05\x0a\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x9f\x05\x00\x00\x9b\x05\x00\x00\x00\x00\x00\x00\x05\x0a\x6b\x05\xb2\xff\x5e\x05\xb2\xff\x8b\x01\x8b\x01\x00\x00\x00\x00\x3b\x0c\x24\x00\x00\x00\xd8\x04\x24\x00\x00\x00\x00\x00\x00\x00\x99\x05\x00\x00\x05\x05\x55\x05\x00\x00\x70\x05\x6f\x05\x68\x00\x00\x00\x6a\x05\x68\x05\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x05\x53\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xf4\xff\x2c\x00\x00\x00\x00\x00\x5d\x05\x52\x05\x00\x00\x49\x05\x49\x05\x4d\x05\x58\x05\x75\x05\x00\x00\x00\x00\x4c\x05\x00\x00\x00\x00\x4a\x05\x00\x00\x48\x05\x48\x05\x44\x05\x43\x05\x43\x05\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x37\x05\x00\x00\x00\x00\x42\x05\x00\x00\x40\x05\x00\x00\x24\x00\x00\x00\x00\x00\xb8\x06\x00\x00\x00\x00\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x00\x00\x3e\x05\x3e\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xff\x00\x00\x00\x00\xd5\x05\x00\x00\x00\x00\x00\x00\x6d\x05\x41\x05\x3c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x05\x2c\x05\x7c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x25\x05\x00\x00\x1d\x05\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x38\x05\xef\x12\x42\x03\x69\x05\x40\x03\xcb\x02\x66\x05\x64\x05\x00\x00\x00\x00\x16\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x0b\x0e\x05\x00\x00\xb6\x02\xc4\x04\x00\x00\x00\x00\x00\x00\x57\x05\x00\x00\xcd\x00\x00\x00\x7f\x03\x00\x00\x00\x00\x11\x05\xe0\x03\x00\x00\x00\x00\xb2\x06\xd2\x12\xb5\x12\xa6\x0f\x98\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x0c\x05\x00\x00\x00\x00\x7b\x12\x00\x00\x00\x00\xf9\x04\x00\x00\x00\x00\xe0\x03\x8f\x06\x29\x0e\x6f\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x05\x4b\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x04\x30\x02\x00\x00\x00\x00\xcf\x0d\x00\x0e\x4c\x0e\x53\x04\x89\x0f\x76\x0f\x00\x00\x00\x00\x5c\x06\x63\x0f\x50\x0f\x00\x00\x00\x00\x5e\x12\x44\x09\x41\x12\x00\x00\xf9\xff\xf5\x03\x4f\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\x4e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x04\x47\x05\x46\x05\xaa\x04\x3d\x05\x32\x05\x06\x05\x96\x04\x8f\x04\x21\x00\x84\x04\x30\x02\x0d\x05\x72\x04\x06\x04\xfa\x03\xb5\x00\x8d\x04\x81\x04\x7a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x24\x12\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x3e\x01\x61\x00\x00\x00\x5c\x06\x90\x05\x03\x00\x40\x04\xba\x02\x00\x00\xb3\x02\x00\x00\x1a\x01\x00\x00\x00\x00\x38\x03\xfe\x06\x07\x12\x00\x00\x3c\x03\x00\x00\x3d\x0f\x2a\x0f\x41\x04\xea\x11\xcd\x11\x00\x00\x00\x00\x3f\x04\x90\x07\xf5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x02\x73\x04\x00\x00\x00\x00\x00\x00\x00\x00\x77\x04\x93\x11\x76\x11\x00\x00\xdf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\xd8\x08\x04\x04\x21\x04\x00\x00\x00\x00\x00\x00\x3a\x04\x2d\x04\xeb\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x17\x0f\x04\x0f\x00\x00\xf1\x0e\xde\x0e\xa5\x01\x02\x06\x00\x00\xf9\x03\x5c\x06\x28\x05\xcb\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x04\x2b\x04\x20\x04\x09\x04\x03\x04\xfc\x03\xee\x03\xec\x03\xe5\x03\xe2\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x03\xdb\x03\x00\x00\x00\x00\x00\x00\xda\x03\xc4\x03\x27\x00\xb1\x03\x00\x00\x70\x04\x00\x00\x00\x00\x59\x11\xa4\x03\xbc\x06\x00\x00\x00\x00\x04\x00\x00\x00\xff\x01\x36\x01\x9c\x03\x00\x00\x79\x06\x09\x06\x00\x00\x00\x00\x00\x00\xaf\x02\x00\x00\x88\x02\xd9\x01\x00\x00\xfb\xff\xa1\x05\x39\x05\x00\x00\x00\x00\x00\x00\xae\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x0e\xa5\x0e\x00\x00\x95\x03\x00\x00\x00\x00\x81\x03\x00\x00\x00\x00\x00\x00\xfc\x01\x00\x00\x00\x00\x3c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x11\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x03\xb9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x4f\x02\x00\x00\x00\x00\x19\x04\x00\x00\x00\x00\x26\x04\xe5\x02\xf2\x03\x6d\x03\x65\x03\x29\x05\x9d\x03\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\xac\x00\xae\x08\xa6\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x16\x04\x00\x00\x92\x0e\x0f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x03\x62\x03\x00\x00\x00\x00\x02\x11\xe5\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x02\xbf\x02\x00\x00\x00\x00\x3e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x03\x00\x00\x09\x03\x00\x03\xf3\x02\xcd\x02\xe9\x02\xdd\x02\x00\x00\x00\x00\xcc\x02\x00\x00\xc1\x02\xa4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x03\x00\x00\xce\x02\x00\x00\xbb\x02\x00\x00\x00\x00\x19\x01\x00\x00\x8e\x00\xc8\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\x3f\x08\xab\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x02\x80\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\xfe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x01\x00\x00\x00\x00\xf4\x01\x00\x00\xb7\x00\x00\x00\xc6\x01\x71\x10\x00\x00\x41\x00\x54\x10\x37\x10\x25\x02\x00\x00\x00\x00\x00\x00\xe0\x02\x29\x00\xd6\x02\x00\x00\x2f\x02\x00\x00\x53\x02\x43\x02\xfb\x01\x00\x00\x61\x03\x39\x03\x00\x00\x1a\x03\x12\x03\x00\x00\x00\x00\x00\x00\x41\x02\x1a\x10\x00\x00\x63\x02\xfd\x0f\x00\x00\x1c\x02\xe0\x0f\x00\x00\x00\x00\x00\x00\x9b\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x0f\x00\x00\xe2\x01\x00\x00\xd0\x01\xc9\x03\x7d\x03\x00\x00\x00\x00\x43\x00\x66\x07\x00\x00\x26\x00\x32\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x01\x68\x01\x00\x00\x00\x00\x00\x00\x22\x02\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x02\x27\x02\x15\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\x5a\x01\x00\x00\x00\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\xef\x00\x00\x00\xbe\x00\xae\x00\x00\x00\x00\x00\xdb\x01\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x08\x00\x00\x00\x29\x04\x00\x00\x00\x00\xa6\x0f\x00\x00\x00\x00\x79\x03\xd7\x02\xbc\x02\x4d\x02\x00\x00\x14\x01\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x24\x02\x00\x00\x00\x00\x00\x00\x9a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x35\x00\x9d\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x6c\xff\x43\xff\xc9\xfe\x57\xff\x55\xff\x54\xff\x51\xff\x00\x00\x2f\xff\x2e\xff\x4e\xff\xa6\xfe\x00\x00\x00\x00\x00\x00\x3f\xff\x3d\xff\x3b\xff\x00\x00\x3c\xff\x00\x00\x3e\xff\x00\x00\x3a\xff\x39\xff\xcd\xfe\x00\x00\x40\xff\x41\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x6d\xff\x42\xff\x6c\xff\x6b\xff\x00\x00\x00\x00\x78\xfe\xc7\xfe\x58\xff\x00\x00\x00\x00\x00\x00\x20\xff\x1e\xff\x00\x00\x00\x00\x00\x00\x78\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\xff\x00\x00\x65\xff\x00\x00\x44\xff\x34\xff\x00\x00\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x64\xff\x00\x00\x00\x00\x00\x00\x00\x00\x79\xfe\x35\xff\x32\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x00\x00\x78\xfe\x00\x00\x00\x00\x21\xff\x5b\xff\x00\x00\x00\x00\x00\x00\xc3\xfe\x00\x00\x00\x00\x1a\xfe\xc1\xfe\xc0\xfe\xbf\xfe\xbe\xfe\xbd\xfe\xbc\xfe\xc2\xfe\xbb\xfe\xba\xfe\xb9\xfe\xb8\xfe\xb7\xfe\xb6\xfe\xb5\xfe\xae\xfe\xb0\xfe\xaf\xfe\xb4\xfe\xb3\xfe\xb2\xfe\x8d\xff\xb1\xfe\x6a\xfe\x50\xfe\x69\xfe\x68\xfe\x67\xfe\x66\xfe\x64\xfe\x63\xfe\x65\xfe\x62\xfe\x61\xfe\x60\xfe\x5f\xfe\x5e\xfe\x5d\xfe\x5c\xfe\x53\xfe\x56\xfe\x57\xfe\x58\xfe\x55\xfe\x54\xfe\x5b\xfe\x5a\xfe\x59\xfe\x52\xfe\x51\xfe\x18\xfe\x6b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xff\xee\xfe\x04\xff\x00\x00\x48\xff\x00\x00\x0f\xff\x0c\xff\x05\xff\x00\x00\x00\x00\x00\x00\x69\xff\x78\xfe\x00\x00\x00\x00\xc9\xfe\x00\x00\x4c\xff\x47\xff\x00\x00\x2d\xff\x00\x00\x00\x00\x78\xfe\xf3\xfe\x00\x00\x00\x00\xf4\xfe\xef\xfe\x00\x00\x00\x00\xc7\xfe\x00\x00\x00\x00\x53\xff\x46\xff\xcb\xfe\x00\x00\x00\x00\xf8\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\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x9c\xff\x9b\xff\x9a\xff\x99\xff\x98\xff\x97\xff\x96\xff\x95\xff\x94\xff\x93\xff\x92\xff\x91\xff\x90\xff\x8f\xff\x33\xff\xc8\xfe\xcf\xfe\x00\x00\xa8\xfe\xa7\xfe\xa9\xfe\x66\xff\x65\xff\x4e\xff\x00\x00\xf6\xfe\xf7\xfe\x50\xff\xf5\xfe\x00\x00\x00\x00\x00\x00\x6c\xff\x74\xfe\x00\x00\x2c\xff\x2b\xff\x28\xff\x29\xff\x26\xff\x00\x00\xcd\xfe\xcb\xfe\xfe\xfe\x00\x00\xf8\xfe\x00\x00\x00\x00\x00\x00\x02\xff\x00\x00\x01\xff\x64\xff\x03\xff\xed\xfe\x00\x00\x00\x00\x00\x00\xec\xfe\x00\x00\x00\x00\x00\x00\x0b\xff\x07\xff\x0c\xff\x78\xfe\x00\x00\x00\x00\x10\xff\x52\xff\x06\xff\x36\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\xff\x00\x00\x60\xff\x00\x00\x00\x00\x83\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xfe\x95\xfe\x91\xfe\x00\x00\x92\xfe\x8b\xfe\x74\xfe\x00\x00\x97\xfe\xf0\xfe\xf0\xfe\x6c\xfe\x93\xfe\x94\xfe\x00\x00\x86\xff\x00\x00\x00\x00\x98\xfe\x00\x00\xf0\xfe\xf0\xfe\x96\xfe\x8e\xff\x8c\xff\x78\xfe\x89\xff\x88\xff\x1c\xfe\xc6\xfe\x00\x00\x00\x00\x00\x00\x59\xff\x56\xff\x5a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\xff\x00\x00\x17\xff\x37\xff\x00\x00\x81\xff\x16\xff\x38\xff\x15\xff\x45\xff\x00\x00\x12\xff\x11\xff\x74\xfe\x13\xff\x1d\xff\x1b\xff\x1c\xff\x1a\xff\x18\xff\x19\xff\x00\x00\x00\x00\x1d\xfe\x8a\xff\x8b\xff\x1b\xfe\xf0\xfe\x00\x00\xf0\xfe\x00\x00\x7e\xff\x7a\xff\x00\x00\x2c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\xff\x9b\xfe\x9a\xfe\x99\xfe\x00\x00\x00\x00\xf0\xfe\x74\xfe\xe3\xfe\x00\x00\x8a\xfe\x00\x00\x00\x00\x2f\xfe\x00\x00\x00\x00\x26\xff\x00\x00\x87\xfe\x85\xfe\x80\xfe\x00\x00\x00\x00\x00\x00\x7a\xfe\x90\xfe\x00\x00\x00\x00\x84\xff\x3c\xfe\x00\x00\x5d\xff\x5c\xff\x00\x00\x60\xff\x34\xfe\x5e\xff\x00\x00\x63\xff\x3d\xfe\x36\xfe\x3e\xfe\x00\x00\x00\x00\x37\xfe\x00\x00\x00\x00\x63\xff\x00\x00\x63\xff\x63\xff\x63\xff\x00\x00\x63\xff\x63\xff\x00\x00\x00\x00\x63\xff\x3a\xfe\x00\x00\x00\x00\x09\xff\x08\xff\x0a\xff\x0e\xff\x0d\xff\xfe\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfe\x00\x00\x00\x00\x4a\xff\x00\x00\x00\x00\xce\xfe\xcc\xfe\x4b\xff\x00\x00\x00\x00\x25\xff\x24\xff\x00\x00\x31\xff\xe3\xfe\x00\x00\x4d\xff\x4f\xff\x1e\xfe\xea\xfe\xeb\xfe\xca\xfe\x22\xff\x27\xff\xe5\xfe\xe3\xfe\xe1\xfe\xe0\xfe\xdf\xfe\x00\x00\xe2\xfe\x00\x00\x00\x00\x2a\xff\x00\x00\x30\xff\x00\xff\xfc\xfe\xfb\xfe\xf9\xfe\xfa\xfe\x00\x00\xe8\xfe\xe9\xfe\xe6\xfe\xe7\xfe\x49\xff\x00\x00\x00\x00\x00\x00\x63\xff\x63\xff\x00\x00\x00\x00\x00\x00\x61\xff\x00\x00\x00\x00\x00\x00\x42\xfe\x00\x00\x39\xfe\x38\xfe\x40\xfe\x3b\xfe\x62\xff\x4f\xfe\x00\x00\x5f\xff\x4c\xfe\x41\xfe\x8e\xfe\x8f\xfe\x00\x00\x7d\xfe\x00\x00\x00\x00\x7d\xfe\x00\x00\x86\xfe\x00\x00\x6c\xff\x00\x00\x00\x00\x31\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x76\xfe\x73\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x68\xff\x7c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x7f\xff\x00\x00\x00\x00\x80\xff\x00\x00\x00\x00\x00\x00\xaa\xfe\x2e\xfe\x00\x00\x00\x00\x7b\xff\x00\x00\x00\x00\xf2\xfe\x00\x00\x00\x00\xf1\xfe\xc5\xfe\xc4\xfe\xe3\xfe\x77\xfe\x00\x00\xa2\xfe\xa1\xfe\xa3\xfe\xac\xfe\x2d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\xff\x76\xff\x7d\xff\x6d\xfe\x74\xfe\xe3\xfe\x6e\xfe\x00\x00\xe3\xfe\x8c\xfe\xad\xfe\x30\xfe\x9e\xfe\x9f\xfe\x28\xfe\x8d\xfe\x89\xfe\x00\x00\x00\x00\x00\x00\x83\xfe\x00\x00\x00\x00\x00\x00\x84\xfe\x33\xfe\x35\xfe\x32\xfe\x3f\xfe\x44\xfe\x48\xfe\x45\xfe\x4a\xfe\x46\xfe\x49\xfe\x00\x00\x00\x00\x4b\xfe\x4d\xfe\x4e\xfe\xff\xfe\x23\xff\xd3\xfe\x87\xff\xd3\xfe\xe4\xfe\xd5\xfe\xd1\xfe\x00\x00\xd2\xfe\x00\x00\x00\x00\x00\x00\xd9\xfe\x00\x00\x87\xff\xdb\xfe\x00\x00\x47\xfe\x43\xfe\x00\x00\x7d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xfe\x25\xfe\x00\x00\x26\xfe\x23\xfe\x24\xfe\x00\x00\x1f\xfe\x00\x00\x22\xfe\x20\xfe\x00\x00\x21\xfe\x00\x00\x75\xfe\xe3\xfe\x70\xfe\x71\xfe\x00\x00\x77\xff\x79\xff\x72\xff\x74\xff\x6e\xff\x70\xff\xab\xfe\x00\x00\x00\x00\xa4\xfe\xa5\xfe\x71\xff\x6f\xff\x75\xff\x73\xff\x00\x00\x6f\xfe\xa0\xfe\x78\xfe\x9d\xfe\x29\xfe\x2b\xfe\x78\xfe\x00\x00\x00\x00\x81\xfe\x7c\xfe\x7b\xfe\x82\xfe\xde\xfe\x00\x00\x00\x00\x87\xff\xdc\xfe\xd7\xfe\xd4\xfe\xdd\xfe\x00\x00\xd0\xfe\xda\xfe\xd8\xfe\xd6\xfe\x7e\xfe\x7f\xfe\x27\xfe\x00\x00\x00\x00\x72\xfe\x00\x00\x2a\xfe\x9c\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x09\x00\x09\x00\x09\x00\x2d\x00\x0c\x00\x14\x00\x0e\x00\x2d\x00\x0f\x00\x09\x00\x09\x00\x0a\x00\x5d\x00\x00\x00\x5f\x00\x0f\x00\x14\x00\x2d\x00\x09\x00\x13\x00\x14\x00\x52\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x50\x00\x09\x00\x65\x00\x66\x00\x09\x00\x51\x00\x09\x00\x0f\x00\x10\x00\x09\x00\x52\x00\x31\x00\x0f\x00\x10\x00\x50\x00\x0f\x00\x10\x00\x37\x00\x38\x00\x05\x00\x3a\x00\x09\x00\x18\x00\x14\x00\x1d\x00\x1b\x00\x49\x00\x0b\x00\x4b\x00\x65\x00\x23\x00\x4c\x00\x09\x00\x09\x00\x0a\x00\x09\x00\x59\x00\x52\x00\x54\x00\x2c\x00\x55\x00\x0f\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x53\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x65\x00\x66\x00\x23\x00\x24\x00\x25\x00\x00\x00\x09\x00\x6f\x00\x70\x00\x0b\x00\x75\x00\x73\x00\x74\x00\x61\x00\x11\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x8d\x00\x65\x00\x59\x00\x98\x00\x53\x00\x0f\x00\x75\x00\x09\x00\x72\x00\x2d\x00\x96\x00\x72\x00\xa0\x00\x0f\x00\x09\x00\x4d\x00\x4e\x00\x99\x00\x46\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x9e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x71\x00\x09\x00\x52\x00\x65\x00\x4f\x00\x09\x00\x09\x00\x0f\x00\x50\x00\x55\x00\x09\x00\x0f\x00\x2b\x00\x2c\x00\x11\x00\x67\x00\x0f\x00\x37\x00\x38\x00\x39\x00\x50\x00\x65\x00\x61\x00\x62\x00\x09\x00\x65\x00\x05\x00\x23\x00\x24\x00\x25\x00\x4c\x00\x23\x00\x24\x00\x25\x00\x09\x00\x5f\x00\x52\x00\x24\x00\x14\x00\x55\x00\x0f\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x30\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x3d\x00\x3e\x00\x3f\x00\x24\x00\x5c\x00\x2d\x00\x5e\x00\x6f\x00\x70\x00\x9e\x00\x9f\x00\x73\x00\x74\x00\x65\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x07\x00\x8d\x00\x6e\x00\x71\x00\x09\x00\x0f\x00\x69\x00\x71\x00\x09\x00\x09\x00\x52\x00\x6e\x00\xa0\x00\xa1\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x6e\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x51\x00\x65\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\x26\x00\x27\x00\x28\x00\x29\x00\x4f\x00\x0f\x00\x2c\x00\x09\x00\x64\x00\x50\x00\x65\x00\x67\x00\x2a\x00\x2b\x00\x2c\x00\x11\x00\x37\x00\x38\x00\x39\x00\x4f\x00\x5f\x00\x50\x00\x5d\x00\x62\x00\x5f\x00\x23\x00\x24\x00\x25\x00\x4c\x00\x6e\x00\x49\x00\x4a\x00\x4b\x00\x6e\x00\x52\x00\x09\x00\x5f\x00\x55\x00\x62\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x58\x00\x09\x00\x6b\x00\x6c\x00\x5c\x00\x6e\x00\x5e\x00\x6f\x00\x70\x00\x11\x00\x12\x00\x73\x00\x74\x00\x10\x00\x11\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x07\x00\x54\x00\x8d\x00\x71\x00\x57\x00\x0f\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x09\x00\x09\x00\xa0\x00\x50\x00\x9e\x00\x9f\x00\x0f\x00\x0f\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x5f\x00\x52\x00\x4d\x00\x4e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x51\x00\x09\x00\x27\x00\x28\x00\x29\x00\x56\x00\x5c\x00\x2c\x00\x5e\x00\x65\x00\x5c\x00\x6e\x00\x5e\x00\x4d\x00\x4e\x00\x65\x00\x0b\x00\x37\x00\x38\x00\x65\x00\x3a\x00\x05\x00\x06\x00\x09\x00\x46\x00\x47\x00\x48\x00\x4c\x00\x5c\x00\x09\x00\x5e\x00\x11\x00\x12\x00\x52\x00\x0b\x00\x0f\x00\x55\x00\x65\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x23\x00\x24\x00\x25\x00\x09\x00\x0b\x00\x51\x00\x09\x00\x6f\x00\x70\x00\x0f\x00\x10\x00\x73\x00\x74\x00\x59\x00\x11\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x07\x00\x30\x00\x0b\x00\x09\x00\x8d\x00\x0f\x00\x35\x00\x9b\x00\x9c\x00\x9d\x00\x09\x00\x09\x00\xa0\x00\x0c\x00\x0d\x00\x3e\x00\x3f\x00\x0f\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\x52\x00\x09\x00\x0c\x00\x09\x00\x0e\x00\x71\x00\x58\x00\x4d\x00\x4e\x00\x0f\x00\x5c\x00\x09\x00\x5e\x00\x09\x00\x0c\x00\x15\x00\x0e\x00\x09\x00\x58\x00\x65\x00\x99\x00\x11\x00\x5c\x00\x6e\x00\x5e\x00\x1f\x00\x20\x00\x21\x00\x68\x00\x23\x00\x24\x00\x25\x00\x6e\x00\x51\x00\x46\x00\x47\x00\x48\x00\x4c\x00\x49\x00\x4a\x00\x4b\x00\x6d\x00\x6e\x00\x52\x00\x32\x00\x5d\x00\x55\x00\x5f\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x30\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x3d\x00\x3e\x00\x3f\x00\x6d\x00\x6e\x00\x09\x00\x94\x00\x6f\x00\x70\x00\x54\x00\x16\x00\x73\x00\x74\x00\x11\x00\x12\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x09\x00\x16\x00\x9e\x00\x9f\x00\x09\x00\x0f\x00\x1a\x00\x09\x00\x11\x00\x12\x00\x0f\x00\x09\x00\xa0\x00\x09\x00\x0b\x00\x11\x00\x0c\x00\x0f\x00\x0e\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0b\x00\x0f\x00\x1a\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\x09\x00\x16\x00\x0c\x00\x17\x00\x0e\x00\x30\x00\x0f\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x3b\x00\x3c\x00\x16\x00\x3e\x00\x3f\x00\x18\x00\x1f\x00\x20\x00\x21\x00\x4c\x00\x23\x00\x24\x00\x25\x00\x09\x00\x16\x00\x52\x00\x9e\x00\x9f\x00\x55\x00\x0f\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x16\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x16\x00\x4c\x00\x23\x00\x24\x00\x25\x00\x09\x00\x0a\x00\x6f\x00\x70\x00\x16\x00\x55\x00\x73\x00\x74\x00\x09\x00\x0a\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x09\x00\x09\x00\x0a\x00\x16\x00\x09\x00\x58\x00\x0f\x00\x2d\x00\x09\x00\x5c\x00\x09\x00\x5e\x00\x11\x00\xa0\x00\x0f\x00\x10\x00\x0f\x00\x93\x00\x65\x00\x16\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x4d\x00\x4e\x00\x09\x00\x0a\x00\x30\x00\x52\x00\x09\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x58\x00\x9e\x00\x9f\x00\x09\x00\x5c\x00\x3c\x00\x5e\x00\x3e\x00\x3f\x00\x97\x00\x58\x00\x9e\x00\x9f\x00\x65\x00\x5c\x00\x09\x00\x5e\x00\x4c\x00\x0c\x00\x09\x00\x0e\x00\x09\x00\x0c\x00\x52\x00\x0e\x00\x0b\x00\x55\x00\x0f\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x51\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x0b\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\x09\x00\x6f\x00\x70\x00\x0c\x00\x0d\x00\x73\x00\x74\x00\x05\x00\x06\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x1a\x00\x00\x00\x01\x00\x02\x00\x6d\x00\x6e\x00\x05\x00\x09\x00\x07\x00\x08\x00\x0c\x00\x0a\x00\x0e\x00\xa0\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x19\x00\x12\x00\x13\x00\x14\x00\x15\x00\x1a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\x16\x00\x25\x00\x26\x00\x27\x00\x19\x00\x29\x00\x2a\x00\x2b\x00\x6d\x00\x6e\x00\x18\x00\x09\x00\x4d\x00\x4e\x00\x0c\x00\x1a\x00\x0e\x00\x52\x00\x09\x00\x23\x00\x24\x00\x25\x00\x1a\x00\x58\x00\x1a\x00\x09\x00\x11\x00\x5c\x00\x51\x00\x5e\x00\x6a\x00\x6b\x00\x6c\x00\x11\x00\x6e\x00\x58\x00\x65\x00\x49\x00\x1a\x00\x5c\x00\x4c\x00\x5e\x00\x4e\x00\x05\x00\x06\x00\x1a\x00\x52\x00\x53\x00\x65\x00\x55\x00\x09\x00\x1a\x00\x58\x00\x0c\x00\x5a\x00\x0e\x00\x5c\x00\x30\x00\x5e\x00\x05\x00\x06\x00\x61\x00\x35\x00\x63\x00\x30\x00\x65\x00\x66\x00\x06\x00\x68\x00\x01\x00\x02\x00\x3e\x00\x3f\x00\x05\x00\x1a\x00\x07\x00\x08\x00\x3d\x00\x3e\x00\x3f\x00\x06\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x1a\x00\x12\x00\x13\x00\x14\x00\x15\x00\x1a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x9e\x00\x9f\x00\x25\x00\x26\x00\x27\x00\x09\x00\x29\x00\x2a\x00\x2b\x00\x9e\x00\x9f\x00\x0f\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x15\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x4e\x00\x4d\x00\x4e\x00\x1f\x00\x20\x00\x21\x00\x52\x00\x23\x00\x24\x00\x25\x00\x09\x00\x0a\x00\x58\x00\x05\x00\x49\x00\x0b\x00\x5c\x00\x4c\x00\x5e\x00\x4e\x00\x09\x00\x0a\x00\x32\x00\x52\x00\x53\x00\x65\x00\x55\x00\x09\x00\x0a\x00\x58\x00\x4e\x00\x5a\x00\x4f\x00\x5c\x00\x50\x00\x5e\x00\x9e\x00\x9f\x00\x61\x00\x09\x00\x63\x00\x9e\x00\x65\x00\x66\x00\x95\x00\x68\x00\x69\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x08\x00\x0a\x00\x9e\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x9e\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x2f\x00\x30\x00\x25\x00\x26\x00\x27\x00\x9e\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x09\x00\x0b\x00\x9e\x00\x0c\x00\x0d\x00\x0f\x00\x00\x00\x01\x00\x08\x00\x13\x00\x14\x00\x65\x00\x66\x00\x50\x00\x51\x00\x97\x00\x09\x00\x65\x00\x66\x00\x08\x00\x9e\x00\x1f\x00\x20\x00\x21\x00\x11\x00\x23\x00\x24\x00\x25\x00\x49\x00\x09\x00\x09\x00\x4c\x00\x04\x00\x4e\x00\x9e\x00\x06\x00\x0b\x00\x52\x00\x53\x00\x31\x00\x55\x00\x0b\x00\x50\x00\x58\x00\x4d\x00\x5a\x00\x09\x00\x5c\x00\x9e\x00\x5e\x00\x56\x00\x4f\x00\x02\x00\x01\x00\x63\x00\x30\x00\x65\x00\x66\x00\x03\x00\x68\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x3d\x00\x3e\x00\x3f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x61\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x65\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x14\x00\x65\x00\x25\x00\x26\x00\x27\x00\x59\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x59\x00\x0b\x00\x65\x00\x28\x00\x60\x00\x0f\x00\x60\x00\x5d\x00\x60\x00\x13\x00\x14\x00\x59\x00\x59\x00\x4f\x00\x65\x00\x5f\x00\x09\x00\x59\x00\x4f\x00\x65\x00\x65\x00\x1f\x00\x20\x00\x21\x00\x11\x00\x23\x00\x24\x00\x25\x00\x49\x00\x64\x00\x64\x00\x4c\x00\x65\x00\x4e\x00\x54\x00\x5f\x00\x54\x00\x52\x00\x53\x00\x31\x00\x55\x00\x54\x00\x54\x00\x58\x00\x2d\x00\x5a\x00\x2d\x00\x5c\x00\x5f\x00\x5e\x00\x2d\x00\x50\x00\x60\x00\x51\x00\x63\x00\x30\x00\x65\x00\x66\x00\x60\x00\x68\x00\x01\x00\x02\x00\x65\x00\x04\x00\x05\x00\x65\x00\x07\x00\x08\x00\x3d\x00\x3e\x00\x3f\x00\x5f\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x60\x00\x12\x00\x13\x00\x14\x00\x15\x00\x51\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x65\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x51\x00\x5d\x00\x25\x00\x26\x00\x27\x00\x5f\x00\x29\x00\x2a\x00\x2b\x00\x64\x00\x4f\x00\x58\x00\x64\x00\x4d\x00\x4e\x00\x64\x00\x64\x00\x64\x00\x52\x00\x09\x00\x54\x00\x64\x00\x64\x00\x52\x00\x58\x00\x64\x00\x09\x00\x11\x00\x5c\x00\x58\x00\x5e\x00\x67\x00\x64\x00\x5c\x00\x11\x00\x5e\x00\x65\x00\x65\x00\x49\x00\x64\x00\x58\x00\x4c\x00\x65\x00\x4e\x00\x58\x00\x5f\x00\x54\x00\x52\x00\x53\x00\x51\x00\x55\x00\x67\x00\x67\x00\x58\x00\x67\x00\x5a\x00\x67\x00\x5c\x00\x30\x00\x5e\x00\x67\x00\x67\x00\x67\x00\x35\x00\x63\x00\x30\x00\x65\x00\x66\x00\x55\x00\x68\x00\x01\x00\x02\x00\x3e\x00\x3f\x00\x05\x00\x64\x00\x07\x00\x08\x00\x3d\x00\x3e\x00\x3f\x00\x67\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x64\x00\x12\x00\x13\x00\x14\x00\x15\x00\x64\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x64\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x64\x00\x67\x00\x25\x00\x26\x00\x27\x00\x09\x00\x29\x00\x2a\x00\x2b\x00\x64\x00\x67\x00\x0f\x00\x64\x00\x50\x00\x64\x00\x51\x00\x2d\x00\x15\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x60\x00\x50\x00\x60\x00\x1f\x00\x20\x00\x21\x00\x59\x00\x23\x00\x24\x00\x25\x00\x09\x00\x5f\x00\x59\x00\x5f\x00\x49\x00\x2d\x00\x2d\x00\x4c\x00\x11\x00\x4e\x00\x65\x00\x51\x00\x32\x00\x52\x00\x53\x00\x51\x00\x55\x00\x65\x00\x64\x00\x58\x00\x67\x00\x5a\x00\x09\x00\x5c\x00\x67\x00\x5e\x00\x67\x00\x67\x00\x0f\x00\x64\x00\x63\x00\x67\x00\x65\x00\x66\x00\x15\x00\x68\x00\x64\x00\x30\x00\x64\x00\x30\x00\x64\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x67\x00\x3d\x00\x3e\x00\x3f\x00\x67\x00\x67\x00\x09\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x08\x00\x32\x00\x64\x00\x11\x00\x67\x00\x09\x00\x67\x00\x09\x00\x67\x00\x54\x00\x12\x00\x6f\x00\x70\x00\x11\x00\x54\x00\x11\x00\x54\x00\x54\x00\x54\x00\x54\x00\x1c\x00\x2e\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x57\x00\x4f\x00\x25\x00\x2e\x00\x27\x00\x65\x00\x29\x00\x30\x00\x51\x00\x5f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x5f\x00\x54\x00\x0b\x00\x30\x00\x0b\x00\x30\x00\x5e\x00\x3e\x00\x3f\x00\x57\x00\x35\x00\x24\x00\x60\x00\x54\x00\x5b\x00\x65\x00\x3d\x00\x3e\x00\x3f\x00\x3e\x00\x3f\x00\x6f\x00\x70\x00\x60\x00\x49\x00\x65\x00\x60\x00\x4c\x00\x4d\x00\x4e\x00\x09\x00\x60\x00\x09\x00\x52\x00\x53\x00\x60\x00\x55\x00\x08\x00\x11\x00\x58\x00\x11\x00\x5a\x00\x68\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x12\x00\x60\x00\x65\x00\x60\x00\x0a\x00\x65\x00\x66\x00\x60\x00\x68\x00\x61\x00\x1c\x00\x60\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x5f\x00\x59\x00\x25\x00\x08\x00\x27\x00\x30\x00\x29\x00\x30\x00\x59\x00\x59\x00\x50\x00\x5f\x00\x35\x00\x12\x00\x50\x00\x69\x00\x5f\x00\x3c\x00\x51\x00\x3e\x00\x3f\x00\x3e\x00\x3f\x00\x1c\x00\x54\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x69\x00\x57\x00\x25\x00\x65\x00\x27\x00\x60\x00\x29\x00\x57\x00\x49\x00\x24\x00\x69\x00\x4c\x00\x4d\x00\x4e\x00\x56\x00\x60\x00\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x12\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x65\x00\x66\x00\xff\xff\x68\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\x4d\x00\x4e\x00\xff\xff\xff\xff\x49\x00\x52\x00\xff\xff\x54\x00\xff\xff\x4e\x00\xff\xff\x58\x00\xff\xff\x52\x00\x53\x00\x5c\x00\x55\x00\x5e\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x65\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\x63\x00\x49\x00\x65\x00\x66\x00\xff\xff\x68\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x12\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\x52\x00\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\x58\x00\x58\x00\x59\x00\x5a\x00\x5c\x00\x5c\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\x4d\x00\x4e\x00\xff\xff\xff\xff\x49\x00\x52\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\x58\x00\xff\xff\x52\x00\x53\x00\x5c\x00\x55\x00\x5e\x00\xff\xff\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\x65\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x65\x00\x66\x00\xff\xff\x68\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\x54\x00\x55\x00\x08\x00\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\x4d\x00\x4e\x00\xff\xff\xff\xff\x49\x00\x52\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\x58\x00\xff\xff\x52\x00\x53\x00\x5c\x00\x55\x00\x5e\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x65\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x65\x00\x66\x00\xff\xff\x68\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x12\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\x4d\x00\x4e\x00\xff\xff\xff\xff\x49\x00\x52\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\x58\x00\xff\xff\x52\x00\x53\x00\x5c\x00\x55\x00\x5e\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x65\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x65\x00\x66\x00\xff\xff\x68\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\x52\x00\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\x58\x00\x58\x00\xff\xff\x5a\x00\x5c\x00\x5c\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x65\x00\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\x08\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x12\x00\x68\x00\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x49\x00\x68\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\x08\x00\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\x55\x00\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x65\x00\x66\x00\x4e\x00\x68\x00\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x1c\x00\x68\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x65\x00\x66\x00\x4e\x00\x68\x00\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x1c\x00\x68\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x65\x00\x66\x00\x4e\x00\x68\x00\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x1c\x00\x68\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x65\x00\x66\x00\x4e\x00\x68\x00\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x1c\x00\x68\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x09\x00\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x4e\x00\x32\x00\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x09\x00\x58\x00\x0b\x00\x5a\x00\xff\xff\x5c\x00\x0f\x00\x5e\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\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\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\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\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\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\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\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\x09\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xe1\x01\xbc\x01\xf1\x02\xe9\x01\x08\x00\x90\x02\xea\x01\xfb\x02\xeb\x01\x9a\x02\x09\x00\x08\x00\x98\x01\x00\x02\x4b\x00\xe3\x01\x4c\x00\x09\x00\xa5\x01\xaf\x02\x49\x03\x41\x00\x4b\x01\xa9\x01\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x61\x01\x0d\x00\x0e\x00\x62\x01\x10\x00\x11\x00\x12\x00\x91\x02\x2d\x00\x2b\x00\x2c\x00\x5b\x02\x9b\x02\x2d\x00\x2e\x00\xa6\x01\x2d\x00\xd6\x02\x45\x00\x2e\x00\xc7\x02\xb0\x02\x2e\x00\xc7\x02\x63\x01\x64\x01\x4a\x03\x65\x01\x41\x03\x14\x02\xf6\x02\x5c\x02\x15\x02\xf2\x02\x55\x01\x3f\x03\x0d\x02\x5d\x02\x13\x00\x42\x03\x98\x01\x00\x02\x08\x00\xfc\x02\x69\x00\xec\x01\x5e\x02\x6a\x00\x09\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x01\x02\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2b\x00\x2c\x00\x10\x00\x11\x00\xfb\x01\xe3\x01\xb3\x00\x50\x00\x7b\x00\x48\x03\xbd\x01\x7c\x00\x7d\x00\xe4\x01\x6c\x01\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\x66\x01\x2b\x00\xd9\x01\xed\x01\xce\x02\x09\x00\xa7\x01\x08\x00\x15\x03\xb2\x02\x02\x02\xc8\x02\x53\x01\x09\x00\x45\x02\xa0\x02\xa1\x02\x2a\x03\x30\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xaa\x01\x36\x02\x0d\x00\x0e\x00\x62\x01\x10\x00\x11\x00\x12\x00\x17\x03\x08\x00\xda\x02\x2b\x00\xb8\x01\x08\x00\xb3\x00\x09\x00\xb3\x02\x89\x02\x08\x00\x09\x00\xec\x02\x48\x02\xb4\x00\x31\x02\x09\x00\x62\x02\x63\x02\x64\x02\xd5\x01\x0d\x02\xe4\x01\xb9\x01\x2c\x03\x0d\x02\x2d\x03\x10\x00\x11\x00\xfb\x01\x13\x00\x10\x00\x11\x00\xfb\x01\x08\x00\x69\x02\x69\x00\x9d\x01\x68\x00\x6a\x00\x09\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xe5\x01\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x98\x02\xe7\x01\xd0\x00\xc7\x00\xa4\x02\x69\x00\xa5\x02\x50\x00\x7b\x00\xb9\x01\x22\x03\x7c\x00\x7d\x00\x2b\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\x37\x03\x66\x01\x30\x03\x97\x02\xf1\x02\x09\x00\xd2\x02\xb6\x02\x08\x00\x56\x01\xc0\x00\xd3\x02\x9b\x00\x9c\x00\x09\x00\x2e\x00\x57\x01\x45\x02\x31\x03\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x9c\x01\x2b\x00\x36\x02\x0d\x00\x0e\x00\x62\x01\x10\x00\x11\x00\x12\x00\x08\x00\x58\x01\x59\x01\x5a\x01\x5b\x01\xb8\x01\x09\x00\x5c\x01\xb3\x00\xde\x02\xd5\x01\x2b\x00\xdf\x02\x46\x02\x47\x02\x48\x02\x70\x01\x62\x02\x63\x02\x65\x02\xb8\x01\x40\x02\xd5\x01\x4b\x00\xb9\x01\x4c\x00\x10\x00\x11\x00\xfb\x01\x13\x00\x33\x03\xf2\x02\xf3\x02\xf4\x02\x34\x03\x69\x00\x3b\x03\x6b\x02\x6a\x00\xb9\x01\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x07\x03\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x6e\x01\xb3\x00\x8c\x02\x07\x02\xc2\x01\x08\x02\xc3\x01\x50\x00\x7b\x00\xf4\x01\x9c\x02\x7c\x00\x7d\x00\xef\x01\xf0\x01\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\xf6\x02\x64\x00\x66\x01\xfc\x01\x65\x00\x09\x00\x08\x03\x09\x03\x0a\x03\x0b\x03\x08\x00\x56\x01\x0c\x03\x65\xff\xb9\x01\x23\x03\x09\x00\x2e\x00\x57\x01\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x65\xff\xa9\x01\xf1\x01\xf2\x01\x36\x02\x0d\x00\x0e\x00\x62\x01\x10\x00\x11\x00\x12\x00\x4d\x02\x3c\x03\x5e\x02\x5a\x01\x5b\x01\xdb\x00\xf3\x01\x5c\x01\xf4\x01\x2b\x00\xa7\x02\x06\x03\xa8\x02\xf1\x01\xf2\x01\x2b\x00\x1b\x03\x63\x01\x64\x01\x2b\x00\x37\x02\x2e\x03\x2f\x03\xb3\x00\x40\x03\xf8\x02\xf9\x02\x13\x00\xf3\x01\x08\x00\xf4\x01\xf4\x01\xf5\x01\x69\x00\x1d\x03\x09\x00\x6a\x00\x2b\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x07\x03\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x10\x00\x11\x00\xfb\x01\x2d\x00\xc3\x02\x55\xff\xb3\x00\x50\x00\x7b\x00\x2e\x00\xd7\x01\x7c\x00\x7d\x00\x55\xff\xb4\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\xf6\x02\x74\x01\xcb\x02\xf1\x02\x66\x01\x09\x00\xfe\x01\x45\x03\x0a\x03\x0b\x03\xe9\x01\x2d\x00\x46\x03\x9d\x02\xc5\x02\x76\x01\xd0\x00\x2e\x00\xa3\x01\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xe9\x01\xc0\x00\xa2\x02\xea\x01\x08\x00\xeb\x01\x4b\x02\x6e\x01\x3b\x00\x5e\x00\x09\x00\x6f\x01\xe9\x01\x70\x01\xb3\x00\xea\x01\x4c\x00\x24\x03\xa5\x02\x5f\x00\x2b\x00\xd0\x02\xb4\x00\x60\x00\xd4\x02\x61\x00\x6a\x01\x0d\x00\x0e\x00\xff\x01\x10\x00\x11\x00\x4d\x01\xd8\x02\x55\xff\xf7\x02\xf8\x02\xf9\x02\x13\x00\xf2\x02\xfc\x02\xf4\x02\xff\x02\x00\x03\x69\x00\xc8\x01\x55\xff\x6a\x00\x55\xff\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xe5\x01\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xb0\x02\xe7\x01\xd0\x00\x03\x03\x00\x03\xb3\x00\xdc\x02\x50\x00\x7b\x00\xbd\x02\xe6\x02\x7c\x00\x7d\x00\xf4\x01\xf6\x01\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\xb3\x00\xe7\x02\xb9\x01\xb9\x02\x08\x00\x09\x00\x6c\x02\xb3\x00\xf4\x01\xf7\x01\x09\x00\x08\x00\x53\x01\xe9\x01\x67\x02\xb4\x00\xea\x01\x09\x00\x25\x03\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x08\x00\xd7\x00\x10\x00\x11\x00\xc6\x00\x69\x02\x09\x00\x6d\x02\x5f\x01\x10\x00\x11\x00\xc6\x00\xe9\x01\x08\x00\x6e\x02\xea\x01\x73\x02\x26\x03\xcc\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xcd\x00\xce\x00\x71\x02\xcf\x00\xd0\x00\x81\x02\xd6\x00\x0d\x00\x0e\x00\x13\x00\x10\x00\x11\x00\x4d\x01\x08\x00\x72\x02\x69\x00\xb9\x01\xbb\x02\x6a\x00\x09\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x75\x02\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x76\x02\x13\x00\x10\x00\x11\x00\x44\x01\x98\x01\xbf\x02\x50\x00\x7b\x00\x77\x02\x14\x00\x7c\x00\x7d\x00\x98\x01\xc0\x02\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x08\x00\x98\x01\xc1\x02\x79\x02\xb3\x00\x0a\x02\x09\x00\xbd\x00\x2d\x00\x0b\x02\x08\x00\x0c\x02\xb4\x00\xe4\x01\x2e\x00\x2f\x00\x09\x00\x80\x02\x0d\x02\x7e\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x32\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\xbe\x00\xbf\x00\x98\x01\xc2\x02\xcc\x00\xc0\x00\xa2\x02\x35\x00\x36\x00\x37\x00\x38\x00\xc1\x00\xb9\x01\xc6\x02\xa5\x02\xc2\x00\x4f\x01\xc3\x00\xcf\x00\xd0\x00\xa9\x02\x5a\x00\xb9\x01\xc9\x02\x2b\x00\x5b\x00\xe9\x01\x5c\x00\x13\x00\xea\x01\xe9\x01\x27\x03\x08\x00\xea\x01\x69\x00\x19\x03\xda\x01\x6a\x00\x09\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x39\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\xdd\x01\xc5\x00\x10\x00\x11\x00\xc6\x00\xfa\x01\xe9\x01\x50\x00\x7b\x00\x9d\x02\x9e\x02\x7c\x00\x7d\x00\x6b\x02\x3e\x02\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x12\x02\xe3\x01\x9e\x00\x9f\x00\x86\x02\x87\x02\xa0\x00\xe9\x01\xa1\x00\x16\x00\xea\x01\x78\xfe\x1a\x03\x53\x01\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x17\x02\x17\x00\xa6\x00\xa7\x00\xa8\x00\x1f\x02\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\x09\x00\x19\x02\x1e\x00\xaf\x00\x1f\x00\x1e\x02\x20\x00\xb0\x00\xb1\x00\x89\x02\x8a\x02\x24\x02\xe9\x01\xbe\x00\xbf\x00\xea\x01\x25\x02\xa8\x02\xc0\x00\xb3\x00\x10\x00\x11\x00\x55\x00\x26\x02\x5f\x00\x27\x02\xb3\x00\xb4\x00\xd2\x00\x8e\x02\xd3\x00\x05\x02\x06\x02\x07\x02\xb4\x00\x08\x02\x0a\x02\x2b\x00\x21\x00\x28\x02\x0b\x02\x22\x00\x0c\x02\x23\x00\x91\x02\x92\x02\x29\x02\x24\x00\x25\x00\x0d\x02\x26\x00\xe9\x01\x2a\x02\x27\x00\xea\x01\x28\x00\xad\x02\x29\x00\x74\x01\x2a\x00\xaa\x02\xab\x02\xe4\x01\x34\x02\xb2\x00\xe5\x01\x2b\x00\x2c\x00\x3e\x02\x2d\x00\x9e\x00\x9f\x00\x76\x01\xd0\x00\xa0\x00\x2b\x02\xa1\x00\x16\x00\xb3\x02\xe7\x01\xd0\x00\x40\x02\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x2c\x02\x17\x00\xa6\x00\xa7\x00\xa8\x00\x2d\x02\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\x43\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\xb9\x01\xb4\x02\x1e\x00\xaf\x00\x1f\x00\x08\x00\x20\x00\xb0\x00\xb1\x00\xb9\x01\xb5\x02\x09\x00\xf0\x02\x56\x02\x57\x02\x58\x02\x59\x02\x4c\x00\x29\x03\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\x42\x02\xbe\x00\xbf\x00\x6a\x01\x0d\x00\x0e\x00\xc0\x00\x10\x00\x11\x00\x4d\x01\x98\x01\x10\x02\x78\x01\x4f\x02\x21\x00\x50\x02\x79\x01\x22\x00\x7a\x01\x23\x00\x98\x01\x99\x01\xc5\x01\x24\x00\x25\x00\x2b\x00\x26\x00\x98\x01\x9a\x01\x27\x00\x46\x01\x28\x00\x60\x01\x29\x00\x4a\x01\x2a\x00\xb9\x01\xba\x01\x19\xfe\x9c\x01\xb2\x00\x9e\x01\x2b\x00\x2c\x00\x9f\x01\x2d\x00\x19\xfe\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\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\x29\x01\x2a\x01\x2b\x01\x2c\x01\x2d\x01\x2e\x01\x2f\x01\x30\x01\x31\x01\x32\x01\x33\x01\x34\x01\x35\x01\x36\x01\x37\x01\x38\x01\x39\x01\x3a\x01\x3b\x01\x3c\x01\x3d\x01\x3e\x01\x3f\x01\x40\x01\x41\x01\x42\x01\x43\x01\x44\x01\x9e\x00\x9f\x00\x0e\x03\x0f\x03\xa0\x00\x10\x03\xa1\x00\x16\x00\xab\x01\x78\xfe\xa1\x01\x11\x03\xa2\x00\xa3\x00\xa4\x00\x12\x03\xa2\x01\x17\x00\xa6\x00\xa7\x00\xa8\x00\x13\x03\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\xa5\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\x5c\x00\x38\x00\x1e\x00\xaf\x00\x1f\x00\xa9\x01\x20\x00\xb0\x00\xb1\x00\x08\x00\xe9\x01\x32\x02\xaa\x01\x9d\x02\xa1\x02\x09\x00\x40\x00\x07\x00\xad\x01\x4e\x01\x42\x00\x2b\x00\x2c\x00\xd5\x00\xd6\x00\xaf\x01\xb3\x00\x2b\x00\x2c\x00\xae\x01\xb3\x01\x4c\x01\x0d\x00\x0e\x00\xb4\x00\x10\x00\x11\x00\x4d\x01\x21\x00\xb1\x01\xb2\x01\x22\x00\xb4\x01\x23\x00\xc9\x01\xb6\x01\xd0\x01\x24\x00\x25\x00\x49\x00\x26\x00\xd1\x01\x66\x00\x27\x00\xc3\x00\x28\x00\xc9\x00\x29\x00\xca\x00\x2a\x00\xd3\x00\xd8\x00\xdb\x00\x07\x00\xb2\x00\xe5\x01\x2b\x00\x2c\x00\x30\x00\x2d\x00\x9e\x00\x9f\x00\x0e\x03\x0f\x03\xa0\x00\x10\x03\xa1\x00\x16\x00\xe6\x01\xe7\x01\xd0\x00\x11\x03\xa2\x00\xa3\x00\xa4\x00\x12\x03\x4c\x03\x17\x00\xa6\x00\xa7\x00\xa8\x00\x13\x03\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\x2b\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\xfb\x02\x2b\x00\x1e\x00\xaf\x00\x1f\x00\x44\x03\x20\x00\xb0\x00\xb1\x00\x08\x00\x45\x03\x69\x01\x2b\x00\x39\x03\xbc\x01\x09\x00\xd2\x02\x33\x03\x2c\x03\x4e\x01\x42\x00\x37\x03\x3b\x03\x3a\x03\x0d\x02\x36\x03\xb3\x00\x3e\x03\x3f\x03\x0d\x02\x2b\x00\x4c\x01\x0d\x00\x0e\x00\xb4\x00\x10\x00\x11\x00\x4d\x01\x21\x00\xfe\x02\xff\x02\x22\x00\x0d\x02\x23\x00\x02\x03\x1d\x03\x03\x03\x24\x00\x25\x00\x49\x00\x26\x00\x05\x03\x06\x03\x27\x00\x14\x03\x28\x00\x21\x03\x29\x00\x1f\x03\x2a\x00\x22\x03\xbf\x02\xbc\x01\xcb\x02\xb2\x00\xe5\x01\x2b\x00\x2c\x00\xbc\x01\x2d\x00\x9e\x00\x9f\x00\x2b\x00\x48\x03\xa0\x00\x2b\x00\xa1\x00\x16\x00\xe8\x01\xe7\x01\xd0\x00\xc5\x02\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xd2\x02\x17\x00\xa6\x00\xa7\x00\xa8\x00\xd7\x02\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\x0d\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\xdb\x02\xd8\x02\x1e\x00\xaf\x00\x1f\x00\xdc\x02\x20\x00\xb0\x00\xb1\x00\xe0\x02\x60\x02\xee\x02\xe1\x02\xef\xfe\xef\xfe\xe2\x02\xe3\x02\xe4\x02\xef\xfe\xb3\x00\xef\xfe\xe5\x02\xe6\x02\xc0\x00\xef\xfe\xe9\x02\xb3\x00\xb4\x00\xef\xfe\x5a\x00\xef\xfe\x1b\x02\xea\x02\x72\x01\xb4\x00\x73\x01\x2b\x00\xef\xfe\x21\x00\xeb\x02\xef\x02\x22\x00\x2b\x00\x23\x00\xf0\x02\x61\x02\x67\x02\x24\x00\x25\x00\x4d\x02\x26\x00\x14\x02\x1b\x02\x27\x00\x70\x02\x28\x00\x71\x02\x29\x00\x74\x01\x2a\x00\x1b\x02\x75\x02\x1b\x02\x35\x02\xb2\x00\xe5\x01\x2b\x00\x2c\x00\x8c\x02\x2d\x00\x9e\x00\x9f\x00\x76\x01\xd0\x00\xa0\x00\x79\x02\xa1\x00\x16\x00\xf8\x01\xe7\x01\xd0\x00\x1b\x02\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x7b\x02\x17\x00\xa6\x00\xa7\x00\xa8\x00\x7c\x02\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\x18\x00\x7d\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xae\x00\x7e\x02\x1b\x02\x1e\x00\xaf\x00\x1f\x00\x08\x00\x20\x00\xb0\x00\xb1\x00\x80\x02\x17\x02\x09\x00\x83\x02\x94\x02\x84\x02\x95\x02\x9c\x02\x4c\x00\x14\x03\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\xb1\x01\xad\x02\xbc\x01\x6a\x01\x0d\x00\x0e\x00\xda\x01\x10\x00\x11\x00\x4d\x01\xb3\x00\xdc\x01\xdd\x01\xdf\x01\x21\x00\xe0\x01\xe1\x01\x22\x00\xb4\x00\x23\x00\x2b\x00\x0f\x02\x4f\x00\x24\x00\x25\x00\x10\x02\x26\x00\x2b\x00\x12\x02\x27\x00\x14\x02\x28\x00\x08\x00\x29\x00\x17\x02\x2a\x00\x19\x02\x1b\x02\x09\x00\x1c\x02\xb2\x00\x19\x02\x2b\x00\x2c\x00\x4c\x00\x2d\x00\x1d\x02\x80\x01\x1e\x02\xe5\x01\x21\x02\x4d\x00\x33\x00\x0b\x00\x4e\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x14\x02\xf9\x01\xe7\x01\xd0\x00\x22\x02\x23\x02\xb3\x00\x35\x00\x36\x00\x37\x00\x38\x00\x16\x00\x4f\x00\x2f\x02\xb4\x00\x24\x02\xb3\x00\x17\x02\xb3\x00\x14\x02\x0d\xff\x17\x00\x50\x00\x51\x00\xb4\x00\x0e\xff\xb4\x00\x0a\xff\x08\xff\x09\xff\x42\x02\x18\x00\x48\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xc5\x00\x4a\x02\x1e\x00\x48\x01\x1f\x00\x2b\x00\x20\x00\xb5\x00\x4d\x02\x4b\x02\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x52\x02\x51\x01\x55\x01\xe5\x01\x56\x01\x74\x01\x5e\x01\xba\x00\xbb\x00\x5f\x01\x75\x01\xda\x00\x74\x01\x7b\x01\x7e\x01\x2b\x00\x03\x02\xe7\x01\xd0\x00\x76\x01\xd0\x00\x50\x00\x51\x00\xcc\x00\x21\x00\x2b\x00\xa1\x01\x29\x03\x3b\x00\x3c\x00\xb3\x00\xcc\x00\xb3\x00\x24\x00\x25\x00\xcc\x00\x26\x00\x16\x00\xb4\x00\x3d\x00\xb4\x00\x28\x00\xad\x01\x3e\x00\x4b\x00\x3f\x00\x4c\x00\x17\x00\xb1\x01\x2b\x00\xcc\x00\xcc\x01\x2b\x00\x2c\x00\xbc\x01\x2d\x00\xb6\x01\x18\x00\xcc\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xd0\x01\xcb\x01\x1e\x00\x16\x00\x1f\x00\xcc\x00\x20\x00\x74\x01\xcd\x01\xce\x01\xcf\x01\xd3\x01\x7c\x01\x17\x00\xd5\x01\xff\xff\xd4\x01\x52\x01\x66\x00\xcf\x00\xd0\x00\x76\x01\xd0\x00\x18\x00\x62\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xc5\x00\x1e\x00\x2b\x00\x1f\x00\xcc\x00\x20\x00\x65\x00\x21\x00\xda\x00\xff\xff\x96\x02\x3b\x00\x3c\x00\xdb\x00\x32\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x4b\x00\x3f\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x4b\x00\x3f\x00\x4c\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x16\x03\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\x17\x00\x45\x01\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3d\x00\x55\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\xb7\x02\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x4b\x00\x3f\x00\x4c\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x16\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x4b\x00\x2a\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x27\x00\x34\x02\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x16\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x17\x00\x54\x02\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\xbe\x00\xbf\x00\x00\x00\x00\x00\x21\x00\xc0\x00\x00\x00\x0b\xff\x00\x00\x23\x00\x00\x00\x78\x01\x00\x00\x24\x00\x25\x00\x79\x01\x26\x00\x7a\x01\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x2b\x00\x2a\x00\x68\x01\x00\x00\x00\x00\x00\x00\x69\x01\x21\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x4b\x00\x2a\x00\x4c\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x96\x02\x55\x02\x56\x02\x57\x02\x58\x02\x59\x02\x17\x00\x00\x00\x44\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\xbe\x00\xbf\x00\x23\x00\x00\x00\x00\x00\xc0\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x5f\x00\x27\x00\x6c\x01\x28\x00\xd2\x00\x29\x00\x05\x02\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x47\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\xbf\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3d\x00\x55\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x47\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x16\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\xbe\x00\xbf\x00\x00\x00\x00\x00\x21\x00\xc0\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x78\x01\x00\x00\x24\x00\x25\x00\x79\x01\x26\x00\x7a\x01\x00\x00\x3d\x00\x55\x00\x28\x00\x00\x00\x3e\x00\x2b\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x47\xff\x26\x00\x16\x00\x47\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x16\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\xbe\x00\xbf\x00\x00\x00\x00\x00\x21\x00\xc0\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x5f\x00\x00\x00\x24\x00\x25\x00\xd2\x00\x26\x00\xd3\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x2b\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x17\x00\x00\x00\x00\x00\x69\x01\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x16\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\xbe\x00\xbf\x00\x00\x00\x00\x00\x21\x00\xc0\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x78\x01\x00\x00\x24\x00\x25\x00\x79\x01\x26\x00\x7a\x01\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x2b\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x32\x02\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x3c\x02\x0d\x00\x0e\x00\x3d\x02\x10\x00\x11\x00\x12\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\xbe\x00\xbf\x00\x23\x00\x00\x00\x00\x00\xc0\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x5f\x00\x27\x00\x00\x00\x28\x00\xd2\x00\x29\x00\xd3\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x2b\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x16\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x53\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\xd6\x00\x0d\x00\x0e\x00\xd7\x00\x10\x00\x11\x00\x12\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x16\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x21\x00\x2d\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x23\x00\x2d\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x19\x03\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x18\x00\x2d\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x23\x00\x2d\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\xfe\x01\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x18\x00\x2d\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x23\x00\x2d\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x18\x00\x2d\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x28\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x23\x00\x2d\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x18\x00\x2d\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x08\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x33\x00\x0b\x00\x4e\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x35\x00\x36\x00\x37\x00\x38\x00\x23\x00\xc8\x01\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x00\x47\x00\x28\x00\x00\x00\x29\x00\x09\x00\xc9\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x48\x00\x33\x00\x0b\x00\x44\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\xc7\x01\x08\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x33\x00\x0b\x00\x44\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x35\x00\x36\x00\x37\x00\x38\x00\x49\x00\x09\x00\x00\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x33\x00\x0b\x00\x44\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x35\x00\x36\x00\x37\x00\x38\x00\xc6\x01\x09\x00\x00\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x33\x00\x0b\x00\x44\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x35\x00\x36\x00\x37\x00\x38\x00\x45\x00\x09\x00\x00\x00\x00\x00\x00\x00\x41\x00\x4b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x46\x02\x47\x02\x48\x02\x00\x00\x00\x00\x08\x00\x00\x00\x45\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc6\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x4b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc7\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x38\x02\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x45\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x39\x02\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc3\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x3a\x02\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc4\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x3b\x02\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc6\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x4b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xc7\x01\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x4e\x01\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x45\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x49\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x45\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x49\x00\x4c\x01\x0d\x00\x0e\x00\x09\x00\x10\x00\x11\x00\x4d\x01\x41\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\x4c\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x4d\x01\x08\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x03\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x02\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x33\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x34\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x86\x01\x87\x01\x88\x01\x89\x01\x8a\x01\x8b\x01\x8c\x01\x8d\x01\x8e\x01\x8f\x01\x90\x01\x91\x01\x92\x01\x93\x01\x94\x01\x95\x01\x96\x01\x97\x01\x98\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\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (6, 487) [-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41),-	(42 , happyReduce_42),-	(43 , happyReduce_43),-	(44 , happyReduce_44),-	(45 , happyReduce_45),-	(46 , happyReduce_46),-	(47 , happyReduce_47),-	(48 , happyReduce_48),-	(49 , happyReduce_49),-	(50 , happyReduce_50),-	(51 , happyReduce_51),-	(52 , happyReduce_52),-	(53 , happyReduce_53),-	(54 , happyReduce_54),-	(55 , happyReduce_55),-	(56 , happyReduce_56),-	(57 , happyReduce_57),-	(58 , happyReduce_58),-	(59 , happyReduce_59),-	(60 , happyReduce_60),-	(61 , happyReduce_61),-	(62 , happyReduce_62),-	(63 , happyReduce_63),-	(64 , happyReduce_64),-	(65 , happyReduce_65),-	(66 , happyReduce_66),-	(67 , happyReduce_67),-	(68 , happyReduce_68),-	(69 , happyReduce_69),-	(70 , happyReduce_70),-	(71 , happyReduce_71),-	(72 , happyReduce_72),-	(73 , happyReduce_73),-	(74 , happyReduce_74),-	(75 , happyReduce_75),-	(76 , happyReduce_76),-	(77 , happyReduce_77),-	(78 , happyReduce_78),-	(79 , happyReduce_79),-	(80 , happyReduce_80),-	(81 , happyReduce_81),-	(82 , happyReduce_82),-	(83 , happyReduce_83),-	(84 , happyReduce_84),-	(85 , happyReduce_85),-	(86 , happyReduce_86),-	(87 , happyReduce_87),-	(88 , happyReduce_88),-	(89 , happyReduce_89),-	(90 , happyReduce_90),-	(91 , happyReduce_91),-	(92 , happyReduce_92),-	(93 , happyReduce_93),-	(94 , happyReduce_94),-	(95 , happyReduce_95),-	(96 , happyReduce_96),-	(97 , happyReduce_97),-	(98 , happyReduce_98),-	(99 , happyReduce_99),-	(100 , happyReduce_100),-	(101 , happyReduce_101),-	(102 , happyReduce_102),-	(103 , happyReduce_103),-	(104 , happyReduce_104),-	(105 , happyReduce_105),-	(106 , happyReduce_106),-	(107 , happyReduce_107),-	(108 , happyReduce_108),-	(109 , happyReduce_109),-	(110 , happyReduce_110),-	(111 , happyReduce_111),-	(112 , happyReduce_112),-	(113 , happyReduce_113),-	(114 , happyReduce_114),-	(115 , happyReduce_115),-	(116 , happyReduce_116),-	(117 , happyReduce_117),-	(118 , happyReduce_118),-	(119 , happyReduce_119),-	(120 , happyReduce_120),-	(121 , happyReduce_121),-	(122 , happyReduce_122),-	(123 , happyReduce_123),-	(124 , happyReduce_124),-	(125 , happyReduce_125),-	(126 , happyReduce_126),-	(127 , happyReduce_127),-	(128 , happyReduce_128),-	(129 , happyReduce_129),-	(130 , happyReduce_130),-	(131 , happyReduce_131),-	(132 , happyReduce_132),-	(133 , happyReduce_133),-	(134 , happyReduce_134),-	(135 , happyReduce_135),-	(136 , happyReduce_136),-	(137 , happyReduce_137),-	(138 , happyReduce_138),-	(139 , happyReduce_139),-	(140 , happyReduce_140),-	(141 , happyReduce_141),-	(142 , happyReduce_142),-	(143 , happyReduce_143),-	(144 , happyReduce_144),-	(145 , happyReduce_145),-	(146 , happyReduce_146),-	(147 , happyReduce_147),-	(148 , happyReduce_148),-	(149 , happyReduce_149),-	(150 , happyReduce_150),-	(151 , happyReduce_151),-	(152 , happyReduce_152),-	(153 , happyReduce_153),-	(154 , happyReduce_154),-	(155 , happyReduce_155),-	(156 , happyReduce_156),-	(157 , happyReduce_157),-	(158 , happyReduce_158),-	(159 , happyReduce_159),-	(160 , happyReduce_160),-	(161 , happyReduce_161),-	(162 , happyReduce_162),-	(163 , happyReduce_163),-	(164 , happyReduce_164),-	(165 , happyReduce_165),-	(166 , happyReduce_166),-	(167 , happyReduce_167),-	(168 , happyReduce_168),-	(169 , happyReduce_169),-	(170 , happyReduce_170),-	(171 , happyReduce_171),-	(172 , happyReduce_172),-	(173 , happyReduce_173),-	(174 , happyReduce_174),-	(175 , happyReduce_175),-	(176 , happyReduce_176),-	(177 , happyReduce_177),-	(178 , happyReduce_178),-	(179 , happyReduce_179),-	(180 , happyReduce_180),-	(181 , happyReduce_181),-	(182 , happyReduce_182),-	(183 , happyReduce_183),-	(184 , happyReduce_184),-	(185 , happyReduce_185),-	(186 , happyReduce_186),-	(187 , happyReduce_187),-	(188 , happyReduce_188),-	(189 , happyReduce_189),-	(190 , happyReduce_190),-	(191 , happyReduce_191),-	(192 , happyReduce_192),-	(193 , happyReduce_193),-	(194 , happyReduce_194),-	(195 , happyReduce_195),-	(196 , happyReduce_196),-	(197 , happyReduce_197),-	(198 , happyReduce_198),-	(199 , happyReduce_199),-	(200 , happyReduce_200),-	(201 , happyReduce_201),-	(202 , happyReduce_202),-	(203 , happyReduce_203),-	(204 , happyReduce_204),-	(205 , happyReduce_205),-	(206 , happyReduce_206),-	(207 , happyReduce_207),-	(208 , happyReduce_208),-	(209 , happyReduce_209),-	(210 , happyReduce_210),-	(211 , happyReduce_211),-	(212 , happyReduce_212),-	(213 , happyReduce_213),-	(214 , happyReduce_214),-	(215 , happyReduce_215),-	(216 , happyReduce_216),-	(217 , happyReduce_217),-	(218 , happyReduce_218),-	(219 , happyReduce_219),-	(220 , happyReduce_220),-	(221 , happyReduce_221),-	(222 , happyReduce_222),-	(223 , happyReduce_223),-	(224 , happyReduce_224),-	(225 , happyReduce_225),-	(226 , happyReduce_226),-	(227 , happyReduce_227),-	(228 , happyReduce_228),-	(229 , happyReduce_229),-	(230 , happyReduce_230),-	(231 , happyReduce_231),-	(232 , happyReduce_232),-	(233 , happyReduce_233),-	(234 , happyReduce_234),-	(235 , happyReduce_235),-	(236 , happyReduce_236),-	(237 , happyReduce_237),-	(238 , happyReduce_238),-	(239 , happyReduce_239),-	(240 , happyReduce_240),-	(241 , happyReduce_241),-	(242 , happyReduce_242),-	(243 , happyReduce_243),-	(244 , happyReduce_244),-	(245 , happyReduce_245),-	(246 , happyReduce_246),-	(247 , happyReduce_247),-	(248 , happyReduce_248),-	(249 , happyReduce_249),-	(250 , happyReduce_250),-	(251 , happyReduce_251),-	(252 , happyReduce_252),-	(253 , happyReduce_253),-	(254 , happyReduce_254),-	(255 , happyReduce_255),-	(256 , happyReduce_256),-	(257 , happyReduce_257),-	(258 , happyReduce_258),-	(259 , happyReduce_259),-	(260 , happyReduce_260),-	(261 , happyReduce_261),-	(262 , happyReduce_262),-	(263 , happyReduce_263),-	(264 , happyReduce_264),-	(265 , happyReduce_265),-	(266 , happyReduce_266),-	(267 , happyReduce_267),-	(268 , happyReduce_268),-	(269 , happyReduce_269),-	(270 , happyReduce_270),-	(271 , happyReduce_271),-	(272 , happyReduce_272),-	(273 , happyReduce_273),-	(274 , happyReduce_274),-	(275 , happyReduce_275),-	(276 , happyReduce_276),-	(277 , happyReduce_277),-	(278 , happyReduce_278),-	(279 , happyReduce_279),-	(280 , happyReduce_280),-	(281 , happyReduce_281),-	(282 , happyReduce_282),-	(283 , happyReduce_283),-	(284 , happyReduce_284),-	(285 , happyReduce_285),-	(286 , happyReduce_286),-	(287 , happyReduce_287),-	(288 , happyReduce_288),-	(289 , happyReduce_289),-	(290 , happyReduce_290),-	(291 , happyReduce_291),-	(292 , happyReduce_292),-	(293 , happyReduce_293),-	(294 , happyReduce_294),-	(295 , happyReduce_295),-	(296 , happyReduce_296),-	(297 , happyReduce_297),-	(298 , happyReduce_298),-	(299 , happyReduce_299),-	(300 , happyReduce_300),-	(301 , happyReduce_301),-	(302 , happyReduce_302),-	(303 , happyReduce_303),-	(304 , happyReduce_304),-	(305 , happyReduce_305),-	(306 , happyReduce_306),-	(307 , happyReduce_307),-	(308 , happyReduce_308),-	(309 , happyReduce_309),-	(310 , happyReduce_310),-	(311 , happyReduce_311),-	(312 , happyReduce_312),-	(313 , happyReduce_313),-	(314 , happyReduce_314),-	(315 , happyReduce_315),-	(316 , happyReduce_316),-	(317 , happyReduce_317),-	(318 , happyReduce_318),-	(319 , happyReduce_319),-	(320 , happyReduce_320),-	(321 , happyReduce_321),-	(322 , happyReduce_322),-	(323 , happyReduce_323),-	(324 , happyReduce_324),-	(325 , happyReduce_325),-	(326 , happyReduce_326),-	(327 , happyReduce_327),-	(328 , happyReduce_328),-	(329 , happyReduce_329),-	(330 , happyReduce_330),-	(331 , happyReduce_331),-	(332 , happyReduce_332),-	(333 , happyReduce_333),-	(334 , happyReduce_334),-	(335 , happyReduce_335),-	(336 , happyReduce_336),-	(337 , happyReduce_337),-	(338 , happyReduce_338),-	(339 , happyReduce_339),-	(340 , happyReduce_340),-	(341 , happyReduce_341),-	(342 , happyReduce_342),-	(343 , happyReduce_343),-	(344 , happyReduce_344),-	(345 , happyReduce_345),-	(346 , happyReduce_346),-	(347 , happyReduce_347),-	(348 , happyReduce_348),-	(349 , happyReduce_349),-	(350 , happyReduce_350),-	(351 , happyReduce_351),-	(352 , happyReduce_352),-	(353 , happyReduce_353),-	(354 , happyReduce_354),-	(355 , happyReduce_355),-	(356 , happyReduce_356),-	(357 , happyReduce_357),-	(358 , happyReduce_358),-	(359 , happyReduce_359),-	(360 , happyReduce_360),-	(361 , happyReduce_361),-	(362 , happyReduce_362),-	(363 , happyReduce_363),-	(364 , happyReduce_364),-	(365 , happyReduce_365),-	(366 , happyReduce_366),-	(367 , happyReduce_367),-	(368 , happyReduce_368),-	(369 , happyReduce_369),-	(370 , happyReduce_370),-	(371 , happyReduce_371),-	(372 , happyReduce_372),-	(373 , happyReduce_373),-	(374 , happyReduce_374),-	(375 , happyReduce_375),-	(376 , happyReduce_376),-	(377 , happyReduce_377),-	(378 , happyReduce_378),-	(379 , happyReduce_379),-	(380 , happyReduce_380),-	(381 , happyReduce_381),-	(382 , happyReduce_382),-	(383 , happyReduce_383),-	(384 , happyReduce_384),-	(385 , happyReduce_385),-	(386 , happyReduce_386),-	(387 , happyReduce_387),-	(388 , happyReduce_388),-	(389 , happyReduce_389),-	(390 , happyReduce_390),-	(391 , happyReduce_391),-	(392 , happyReduce_392),-	(393 , happyReduce_393),-	(394 , happyReduce_394),-	(395 , happyReduce_395),-	(396 , happyReduce_396),-	(397 , happyReduce_397),-	(398 , happyReduce_398),-	(399 , happyReduce_399),-	(400 , happyReduce_400),-	(401 , happyReduce_401),-	(402 , happyReduce_402),-	(403 , happyReduce_403),-	(404 , happyReduce_404),-	(405 , happyReduce_405),-	(406 , happyReduce_406),-	(407 , happyReduce_407),-	(408 , happyReduce_408),-	(409 , happyReduce_409),-	(410 , happyReduce_410),-	(411 , happyReduce_411),-	(412 , happyReduce_412),-	(413 , happyReduce_413),-	(414 , happyReduce_414),-	(415 , happyReduce_415),-	(416 , happyReduce_416),-	(417 , happyReduce_417),-	(418 , happyReduce_418),-	(419 , happyReduce_419),-	(420 , happyReduce_420),-	(421 , happyReduce_421),-	(422 , happyReduce_422),-	(423 , happyReduce_423),-	(424 , happyReduce_424),-	(425 , happyReduce_425),-	(426 , happyReduce_426),-	(427 , happyReduce_427),-	(428 , happyReduce_428),-	(429 , happyReduce_429),-	(430 , happyReduce_430),-	(431 , happyReduce_431),-	(432 , happyReduce_432),-	(433 , happyReduce_433),-	(434 , happyReduce_434),-	(435 , happyReduce_435),-	(436 , happyReduce_436),-	(437 , happyReduce_437),-	(438 , happyReduce_438),-	(439 , happyReduce_439),-	(440 , happyReduce_440),-	(441 , happyReduce_441),-	(442 , happyReduce_442),-	(443 , happyReduce_443),-	(444 , happyReduce_444),-	(445 , happyReduce_445),-	(446 , happyReduce_446),-	(447 , happyReduce_447),-	(448 , happyReduce_448),-	(449 , happyReduce_449),-	(450 , happyReduce_450),-	(451 , happyReduce_451),-	(452 , happyReduce_452),-	(453 , happyReduce_453),-	(454 , happyReduce_454),-	(455 , happyReduce_455),-	(456 , happyReduce_456),-	(457 , happyReduce_457),-	(458 , happyReduce_458),-	(459 , happyReduce_459),-	(460 , happyReduce_460),-	(461 , happyReduce_461),-	(462 , happyReduce_462),-	(463 , happyReduce_463),-	(464 , happyReduce_464),-	(465 , happyReduce_465),-	(466 , happyReduce_466),-	(467 , happyReduce_467),-	(468 , happyReduce_468),-	(469 , happyReduce_469),-	(470 , happyReduce_470),-	(471 , happyReduce_471),-	(472 , happyReduce_472),-	(473 , happyReduce_473),-	(474 , happyReduce_474),-	(475 , happyReduce_475),-	(476 , happyReduce_476),-	(477 , happyReduce_477),-	(478 , happyReduce_478),-	(479 , happyReduce_479),-	(480 , happyReduce_480),-	(481 , happyReduce_481),-	(482 , happyReduce_482),-	(483 , happyReduce_483),-	(484 , happyReduce_484),-	(485 , happyReduce_485),-	(486 , happyReduce_486),-	(487 , happyReduce_487)-	]--happy_n_terms = 106 :: Int-happy_n_nonterms = 162 :: Int--happyReduce_6 = happySpecReduce_1  0# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> -	happyIn9-		 (reverse happy_var_1-	)}--happyReduce_7 = happySpecReduce_2  1# happyReduction_7-happyReduction_7 happy_x_2-	happy_x_1-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> -	case happyOut11 happy_x_2 of { happy_var_2 -> -	happyIn10-		 (happy_var_2 : happy_var_1-	)}}--happyReduce_8 = happySpecReduce_0  1# happyReduction_8-happyReduction_8  =  happyIn10-		 ([]-	)--happyReduce_9 = happySpecReduce_1  2# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	happyIn11-		 (TokKeyword KwAbstract happy_var_1-	)}--happyReduce_10 = happySpecReduce_1  2# happyReduction_10-happyReduction_10 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	happyIn11-		 (TokKeyword KwCoData happy_var_1-	)}--happyReduce_11 = happySpecReduce_1  2# happyReduction_11-happyReduction_11 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> -	happyIn11-		 (TokKeyword KwCoInductive happy_var_1-	)}--happyReduce_12 = happySpecReduce_1  2# happyReduction_12-happyReduction_12 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> -	happyIn11-		 (TokKeyword KwConstructor happy_var_1-	)}--happyReduce_13 = happySpecReduce_1  2# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	happyIn11-		 (TokKeyword KwData happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  2# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> -	happyIn11-		 (TokKeyword KwEta happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  2# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> -	happyIn11-		 (TokKeyword KwField happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  2# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> -	happyIn11-		 (TokKeyword KwForall 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) -> -	happyIn11-		 (TokKeyword KwHiding happy_var_1-	)}--happyReduce_18 = happySpecReduce_1  2# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	happyIn11-		 (TokKeyword KwImport happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  2# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> -	happyIn11-		 (TokKeyword KwIn happy_var_1-	)}--happyReduce_20 = happySpecReduce_1  2# happyReduction_20-happyReduction_20 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> -	happyIn11-		 (TokKeyword KwInductive happy_var_1-	)}--happyReduce_21 = happySpecReduce_1  2# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	happyIn11-		 (TokKeyword KwInfix happy_var_1-	)}--happyReduce_22 = happySpecReduce_1  2# happyReduction_22-happyReduction_22 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	happyIn11-		 (TokKeyword KwInfixL happy_var_1-	)}--happyReduce_23 = happySpecReduce_1  2# happyReduction_23-happyReduction_23 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	happyIn11-		 (TokKeyword KwInfixR happy_var_1-	)}--happyReduce_24 = happySpecReduce_1  2# happyReduction_24-happyReduction_24 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> -	happyIn11-		 (TokKeyword KwInstance happy_var_1-	)}--happyReduce_25 = happySpecReduce_1  2# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOverlap happy_var_1) -> -	happyIn11-		 (TokKeyword KwOverlap happy_var_1-	)}--happyReduce_26 = happySpecReduce_1  2# happyReduction_26-happyReduction_26 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	happyIn11-		 (TokKeyword KwLet happy_var_1-	)}--happyReduce_27 = happySpecReduce_1  2# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> -	happyIn11-		 (TokKeyword KwMacro happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  2# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	happyIn11-		 (TokKeyword KwModule happy_var_1-	)}--happyReduce_29 = happySpecReduce_1  2# happyReduction_29-happyReduction_29 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	happyIn11-		 (TokKeyword KwMutual happy_var_1-	)}--happyReduce_30 = happySpecReduce_1  2# happyReduction_30-happyReduction_30 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> -	happyIn11-		 (TokKeyword KwNoEta happy_var_1-	)}--happyReduce_31 = happySpecReduce_1  2# happyReduction_31-happyReduction_31 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	happyIn11-		 (TokKeyword KwOpen happy_var_1-	)}--happyReduce_32 = happySpecReduce_1  2# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> -	happyIn11-		 (TokKeyword KwPatternSyn happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  2# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	happyIn11-		 (TokKeyword KwPostulate happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  2# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	happyIn11-		 (TokKeyword KwPrimitive happy_var_1-	)}--happyReduce_35 = happySpecReduce_1  2# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	happyIn11-		 (TokKeyword KwPrivate 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) -> -	happyIn11-		 (TokKeyword KwProp happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  2# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> -	happyIn11-		 (TokKeyword KwPublic happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  2# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn11-		 (TokKeyword KwQuote happy_var_1-	)}--happyReduce_39 = happySpecReduce_1  2# happyReduction_39-happyReduction_39 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> -	happyIn11-		 (TokKeyword KwQuoteContext happy_var_1-	)}--happyReduce_40 = happySpecReduce_1  2# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	happyIn11-		 (TokKeyword KwQuoteGoal happy_var_1-	)}--happyReduce_41 = happySpecReduce_1  2# happyReduction_41-happyReduction_41 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> -	happyIn11-		 (TokKeyword KwQuoteTerm happy_var_1-	)}--happyReduce_42 = happySpecReduce_1  2# happyReduction_42-happyReduction_42 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	happyIn11-		 (TokKeyword KwRecord happy_var_1-	)}--happyReduce_43 = happySpecReduce_1  2# happyReduction_43-happyReduction_43 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	happyIn11-		 (TokKeyword KwRenaming happy_var_1-	)}--happyReduce_44 = happySpecReduce_1  2# happyReduction_44-happyReduction_44 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> -	happyIn11-		 (TokKeyword KwRewrite happy_var_1-	)}--happyReduce_45 = happySpecReduce_1  2# happyReduction_45-happyReduction_45 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn11-		 (TokKeyword KwSet happy_var_1-	)}--happyReduce_46 = happySpecReduce_1  2# happyReduction_46-happyReduction_46 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> -	happyIn11-		 (TokKeyword KwSyntax happy_var_1-	)}--happyReduce_47 = happySpecReduce_1  2# happyReduction_47-happyReduction_47 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> -	happyIn11-		 (TokKeyword KwTactic happy_var_1-	)}--happyReduce_48 = happySpecReduce_1  2# happyReduction_48-happyReduction_48 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> -	happyIn11-		 (TokKeyword KwTo happy_var_1-	)}--happyReduce_49 = happySpecReduce_1  2# happyReduction_49-happyReduction_49 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> -	happyIn11-		 (TokKeyword KwUnquote happy_var_1-	)}--happyReduce_50 = happySpecReduce_1  2# happyReduction_50-happyReduction_50 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> -	happyIn11-		 (TokKeyword KwUnquoteDecl happy_var_1-	)}--happyReduce_51 = happySpecReduce_1  2# happyReduction_51-happyReduction_51 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> -	happyIn11-		 (TokKeyword KwUnquoteDef happy_var_1-	)}--happyReduce_52 = happySpecReduce_1  2# happyReduction_52-happyReduction_52 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	happyIn11-		 (TokKeyword KwUsing happy_var_1-	)}--happyReduce_53 = happySpecReduce_1  2# happyReduction_53-happyReduction_53 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> -	happyIn11-		 (TokKeyword KwWhere happy_var_1-	)}--happyReduce_54 = happySpecReduce_1  2# happyReduction_54-happyReduction_54 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> -	happyIn11-		 (TokKeyword KwWith happy_var_1-	)}--happyReduce_55 = happySpecReduce_1  2# happyReduction_55-happyReduction_55 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> -	happyIn11-		 (TokKeyword KwBUILTIN happy_var_1-	)}--happyReduce_56 = happySpecReduce_1  2# happyReduction_56-happyReduction_56 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCATCHALL happy_var_1) -> -	happyIn11-		 (TokKeyword KwCATCHALL happy_var_1-	)}--happyReduce_57 = happySpecReduce_1  2# happyReduction_57-happyReduction_57 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED happy_var_1-	)}--happyReduce_58 = happySpecReduce_1  2# happyReduction_58-happyReduction_58 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_DATA happy_var_1-	)}--happyReduce_59 = happySpecReduce_1  2# happyReduction_59-happyReduction_59 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA_UHC happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_DATA_UHC happy_var_1-	)}--happyReduce_60 = happySpecReduce_1  2# happyReduction_60-happyReduction_60 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_1-	)}--happyReduce_61 = happySpecReduce_1  2# happyReduction_61-happyReduction_61 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_EPIC happy_var_1-	)}--happyReduce_62 = happySpecReduce_1  2# happyReduction_62-happyReduction_62 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_EXPORT happy_var_1-	)}--happyReduce_63 = happySpecReduce_1  2# happyReduction_63-happyReduction_63 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_JS happy_var_1-	)}--happyReduce_64 = happySpecReduce_1  2# happyReduction_64-happyReduction_64 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_TYPE happy_var_1-	)}--happyReduce_65 = happySpecReduce_1  2# happyReduction_65-happyReduction_65 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_UHC happy_var_1) -> -	happyIn11-		 (TokKeyword KwCOMPILED_UHC happy_var_1-	)}--happyReduce_66 = happySpecReduce_1  2# happyReduction_66-happyReduction_66 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHASKELL happy_var_1) -> -	happyIn11-		 (TokKeyword KwHASKELL happy_var_1-	)}--happyReduce_67 = happySpecReduce_1  2# happyReduction_67-happyReduction_67 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwDISPLAY happy_var_1) -> -	happyIn11-		 (TokKeyword KwDISPLAY happy_var_1-	)}--happyReduce_68 = happySpecReduce_1  2# happyReduction_68-happyReduction_68 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> -	happyIn11-		 (TokKeyword KwIMPORT happy_var_1-	)}--happyReduce_69 = happySpecReduce_1  2# happyReduction_69-happyReduction_69 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT_UHC happy_var_1) -> -	happyIn11-		 (TokKeyword KwIMPORT_UHC happy_var_1-	)}--happyReduce_70 = happySpecReduce_1  2# happyReduction_70-happyReduction_70 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> -	happyIn11-		 (TokKeyword KwIMPOSSIBLE happy_var_1-	)}--happyReduce_71 = happySpecReduce_1  2# happyReduction_71-happyReduction_71 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwINLINE happy_var_1) -> -	happyIn11-		 (TokKeyword KwINLINE happy_var_1-	)}--happyReduce_72 = happySpecReduce_1  2# happyReduction_72-happyReduction_72 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> -	happyIn11-		 (TokKeyword KwMEASURE happy_var_1-	)}--happyReduce_73 = happySpecReduce_1  2# happyReduction_73-happyReduction_73 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> -	happyIn11-		 (TokKeyword KwNO_TERMINATION_CHECK happy_var_1-	)}--happyReduce_74 = happySpecReduce_1  2# happyReduction_74-happyReduction_74 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1) -> -	happyIn11-		 (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1-	)}--happyReduce_75 = happySpecReduce_1  2# happyReduction_75-happyReduction_75 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> -	happyIn11-		 (TokKeyword KwNON_TERMINATING happy_var_1-	)}--happyReduce_76 = happySpecReduce_1  2# happyReduction_76-happyReduction_76 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> -	happyIn11-		 (TokKeyword KwOPTIONS happy_var_1-	)}--happyReduce_77 = happySpecReduce_1  2# happyReduction_77-happyReduction_77 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPOLARITY happy_var_1) -> -	happyIn11-		 (TokKeyword KwPOLARITY happy_var_1-	)}--happyReduce_78 = happySpecReduce_1  2# happyReduction_78-happyReduction_78 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> -	happyIn11-		 (TokKeyword KwREWRITE happy_var_1-	)}--happyReduce_79 = happySpecReduce_1  2# happyReduction_79-happyReduction_79 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> -	happyIn11-		 (TokKeyword KwSTATIC happy_var_1-	)}--happyReduce_80 = happySpecReduce_1  2# happyReduction_80-happyReduction_80 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> -	happyIn11-		 (TokKeyword KwTERMINATING happy_var_1-	)}--happyReduce_81 = happySpecReduce_1  2# happyReduction_81-happyReduction_81 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn11-		 (TokSetN happy_var_1-	)}--happyReduce_82 = happySpecReduce_1  2# happyReduction_82-happyReduction_82 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> -	happyIn11-		 (TokTeX happy_var_1-	)}--happyReduce_83 = happySpecReduce_1  2# happyReduction_83-happyReduction_83 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> -	happyIn11-		 (TokComment happy_var_1-	)}--happyReduce_84 = happySpecReduce_1  2# happyReduction_84-happyReduction_84 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	happyIn11-		 (TokSymbol SymEllipsis happy_var_1-	)}--happyReduce_85 = happySpecReduce_1  2# happyReduction_85-happyReduction_85 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> -	happyIn11-		 (TokSymbol SymDotDot happy_var_1-	)}--happyReduce_86 = happySpecReduce_1  2# happyReduction_86-happyReduction_86 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	happyIn11-		 (TokSymbol SymDot happy_var_1-	)}--happyReduce_87 = happySpecReduce_1  2# happyReduction_87-happyReduction_87 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn11-		 (TokSymbol SymSemi happy_var_1-	)}--happyReduce_88 = happySpecReduce_1  2# happyReduction_88-happyReduction_88 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> -	happyIn11-		 (TokSymbol SymColon happy_var_1-	)}--happyReduce_89 = happySpecReduce_1  2# happyReduction_89-happyReduction_89 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> -	happyIn11-		 (TokSymbol SymEqual happy_var_1-	)}--happyReduce_90 = happySpecReduce_1  2# happyReduction_90-happyReduction_90 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn11-		 (TokSymbol SymUnderscore happy_var_1-	)}--happyReduce_91 = happySpecReduce_1  2# happyReduction_91-happyReduction_91 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn11-		 (TokSymbol SymQuestionMark happy_var_1-	)}--happyReduce_92 = happySpecReduce_1  2# happyReduction_92-happyReduction_92 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> -	happyIn11-		 (TokSymbol SymArrow happy_var_1-	)}--happyReduce_93 = happySpecReduce_1  2# happyReduction_93-happyReduction_93 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	happyIn11-		 (TokSymbol SymLambda happy_var_1-	)}--happyReduce_94 = happySpecReduce_1  2# happyReduction_94-happyReduction_94 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> -	happyIn11-		 (TokSymbol SymAs happy_var_1-	)}--happyReduce_95 = happySpecReduce_1  2# happyReduction_95-happyReduction_95 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> -	happyIn11-		 (TokSymbol SymBar happy_var_1-	)}--happyReduce_96 = happySpecReduce_1  2# happyReduction_96-happyReduction_96 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	happyIn11-		 (TokSymbol SymOpenParen happy_var_1-	)}--happyReduce_97 = happySpecReduce_1  2# happyReduction_97-happyReduction_97 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> -	happyIn11-		 (TokSymbol SymCloseParen happy_var_1-	)}--happyReduce_98 = happySpecReduce_1  2# happyReduction_98-happyReduction_98 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenIdiomBracket happy_var_1) -> -	happyIn11-		 (TokSymbol SymOpenIdiomBracket happy_var_1-	)}--happyReduce_99 = happySpecReduce_1  2# happyReduction_99-happyReduction_99 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseIdiomBracket happy_var_1) -> -	happyIn11-		 (TokSymbol SymCloseIdiomBracket happy_var_1-	)}--happyReduce_100 = happySpecReduce_1  2# happyReduction_100-happyReduction_100 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymDoubleOpenBrace happy_var_1-	)}--happyReduce_101 = happySpecReduce_1  2# happyReduction_101-happyReduction_101 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymDoubleCloseBrace happy_var_1-	)}--happyReduce_102 = happySpecReduce_1  2# happyReduction_102-happyReduction_102 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymOpenBrace happy_var_1-	)}--happyReduce_103 = happySpecReduce_1  2# happyReduction_103-happyReduction_103 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymCloseBrace happy_var_1-	)}--happyReduce_104 = happySpecReduce_1  2# happyReduction_104-happyReduction_104 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymOpenVirtualBrace happy_var_1-	)}--happyReduce_105 = happySpecReduce_1  2# happyReduction_105-happyReduction_105 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> -	happyIn11-		 (TokSymbol SymCloseVirtualBrace happy_var_1-	)}--happyReduce_106 = happySpecReduce_1  2# happyReduction_106-happyReduction_106 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn11-		 (TokSymbol SymVirtualSemi happy_var_1-	)}--happyReduce_107 = happySpecReduce_1  2# happyReduction_107-happyReduction_107 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	happyIn11-		 (TokSymbol SymOpenPragma happy_var_1-	)}--happyReduce_108 = happySpecReduce_1  2# happyReduction_108-happyReduction_108 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> -	happyIn11-		 (TokSymbol SymClosePragma happy_var_1-	)}--happyReduce_109 = happySpecReduce_1  2# happyReduction_109-happyReduction_109 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn11-		 (TokId happy_var_1-	)}--happyReduce_110 = happySpecReduce_1  2# happyReduction_110-happyReduction_110 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	happyIn11-		 (TokQId happy_var_1-	)}--happyReduce_111 = happySpecReduce_1  2# happyReduction_111-happyReduction_111 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	happyIn11-		 (TokString happy_var_1-	)}--happyReduce_112 = happySpecReduce_1  2# happyReduction_112-happyReduction_112 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn11-		 (TokLiteral happy_var_1-	)}--happyReduce_113 = happySpecReduce_3  3# happyReduction_113-happyReduction_113 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut127 happy_x_2 of { happy_var_2 -> -	happyIn12-		 (takeOptionsPragmas happy_var_2-	)}--happyReduce_114 = happySpecReduce_0  4# happyReduction_114-happyReduction_114  =  happyIn13-		 (()-	)--happyReduce_115 = happySpecReduce_1  4# happyReduction_115-happyReduction_115 happy_x_1-	 =  happyIn13-		 (()-	)--happyReduce_116 = happySpecReduce_1  5# happyReduction_116-happyReduction_116 happy_x_1-	 =  happyIn14-		 (()-	)--happyReduce_117 = happyMonadReduce 1# 5# happyReduction_117-happyReduction_117 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (( popContext)-	) (\r -> happyReturn (happyIn14 r))--happyReduce_118 = happySpecReduce_1  6# happyReduction_118-happyReduction_118 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn15-		 (happy_var_1-	)}--happyReduce_119 = happySpecReduce_1  6# happyReduction_119-happyReduction_119 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn15-		 (happy_var_1-	)}--happyReduce_120 = happyMonadReduce 0# 7# happyReduction_120-happyReduction_120 (happyRest) tk-	 = happyThen (( pushLexState imp_dir)-	) (\r -> happyReturn (happyIn16 r))--happyReduce_121 = happyMonadReduce 1# 8# happyReduction_121-happyReduction_121 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	( case happy_var_1 of {-                     LitNat _ i -> return i;-                     _          -> fail $ "Expected integer"-                   })}-	) (\r -> happyReturn (happyIn17 r))--happyReduce_122 = happyMonadReduce 1# 9# happyReduction_122-happyReduction_122 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	( mkName happy_var_1)}-	) (\r -> happyReturn (happyIn18 r))--happyReduce_123 = happySpecReduce_2  10# happyReduction_123-happyReduction_123 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn19-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_124 = happySpecReduce_1  10# happyReduction_124-happyReduction_124 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn19-		 ([happy_var_1]-	)}--happyReduce_125 = happySpecReduce_1  11# happyReduction_125-happyReduction_125 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> -	happyIn20-		 (getRange happy_var_1-	)}--happyReduce_126 = happyMonadReduce 2# 11# happyReduction_126-happyReduction_126 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> -	(-      if posPos (fromJust (rEnd' (getRange happy_var_2))) --         posPos (fromJust (rStart' (getRange happy_var_1))) > 2-      then parseErrorAt (fromJust (rStart' (getRange happy_var_2)))-         "Expecting '}}', found separated '}'s."-      else return $ getRange (happy_var_1, happy_var_2))}}-	) (\r -> happyReturn (happyIn20 r))--happyReduce_127 = happySpecReduce_2  12# happyReduction_127-happyReduction_127 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn21-		 (setRelevance NonStrict $ defaultArg happy_var_2-	)}--happyReduce_128 = happySpecReduce_2  12# happyReduction_128-happyReduction_128 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn21-		 (setRelevance Irrelevant $ defaultArg happy_var_2-	)}--happyReduce_129 = happySpecReduce_1  12# happyReduction_129-happyReduction_129 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn21-		 (defaultArg happy_var_1-	)}--happyReduce_130 = happySpecReduce_2  13# happyReduction_130-happyReduction_130 happy_x_2-	happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	happyIn22-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_131 = happySpecReduce_1  13# happyReduction_131-happyReduction_131 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn22-		 ([happy_var_1]-	)}--happyReduce_132 = happySpecReduce_2  14# happyReduction_132-happyReduction_132 happy_x_2-	happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	case happyOut23 happy_x_2 of { happy_var_2 -> -	happyIn23-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_133 = happySpecReduce_1  14# happyReduction_133-happyReduction_133 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn23-		 ([happy_var_1]-	)}--happyReduce_134 = happyReduce 4# 14# happyReduction_134-happyReduction_134 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut23 happy_x_4 of { happy_var_4 -> -	happyIn23-		 (map makeInstance happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_135 = happySpecReduce_3  14# happyReduction_135-happyReduction_135 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut22 happy_x_2 of { happy_var_2 -> -	happyIn23-		 (map makeInstance happy_var_2-	)}--happyReduce_136 = happyReduce 4# 14# happyReduction_136-happyReduction_136 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut23 happy_x_4 of { happy_var_4 -> -	happyIn23-		 (map hide happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_137 = happySpecReduce_3  14# happyReduction_137-happyReduction_137 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut22 happy_x_2 of { happy_var_2 -> -	happyIn23-		 (map hide happy_var_2-	)}--happyReduce_138 = happyReduce 5# 14# happyReduction_138-happyReduction_138 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	case happyOut23 happy_x_5 of { happy_var_5 -> -	happyIn23-		 (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_139 = happyReduce 4# 14# happyReduction_139-happyReduction_139 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	happyIn23-		 (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3-	) `HappyStk` happyRest}--happyReduce_140 = happyReduce 5# 14# happyReduction_140-happyReduction_140 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	case happyOut23 happy_x_5 of { happy_var_5 -> -	happyIn23-		 (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_141 = happyReduce 4# 14# happyReduction_141-happyReduction_141 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	happyIn23-		 (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3-	) `HappyStk` happyRest}--happyReduce_142 = happyReduce 5# 14# happyReduction_142-happyReduction_142 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	case happyOut23 happy_x_5 of { happy_var_5 -> -	happyIn23-		 (map (hide . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_143 = happyReduce 4# 14# happyReduction_143-happyReduction_143 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	happyIn23-		 (map (hide . setRelevance NonStrict . defaultArg) happy_var_3-	) `HappyStk` happyRest}--happyReduce_144 = happyReduce 5# 14# happyReduction_144-happyReduction_144 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	case happyOut23 happy_x_5 of { happy_var_5 -> -	happyIn23-		 (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_145 = happyReduce 4# 14# happyReduction_145-happyReduction_145 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_3 of { happy_var_3 -> -	happyIn23-		 (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3-	) `HappyStk` happyRest}--happyReduce_146 = happyMonadReduce 1# 15# happyReduction_146-happyReduction_146 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	( mkQName happy_var_1)}-	) (\r -> happyReturn (happyIn24 r))--happyReduce_147 = happySpecReduce_1  15# happyReduction_147-happyReduction_147 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn24-		 (QName happy_var_1-	)}--happyReduce_148 = happySpecReduce_1  16# happyReduction_148-happyReduction_148 happy_x_1-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> -	happyIn25-		 (happy_var_1-	)}--happyReduce_149 = happySpecReduce_1  17# happyReduction_149-happyReduction_149 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn26-		 (happy_var_1-	)}--happyReduce_150 = happySpecReduce_1  17# happyReduction_150-happyReduction_150 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn26-		 (Name (getRange happy_var_1) [Hole]-	)}--happyReduce_151 = happySpecReduce_2  18# happyReduction_151-happyReduction_151 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	case happyOut27 happy_x_2 of { happy_var_2 -> -	happyIn27-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_152 = happySpecReduce_1  18# happyReduction_152-happyReduction_152 happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	happyIn27-		 ([happy_var_1]-	)}--happyReduce_153 = happySpecReduce_1  19# happyReduction_153-happyReduction_153 happy_x_1-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> -	happyIn28-		 (case happy_var_1 of-      Left ns -> ns-      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"-	)}--happyReduce_154 = happyMonadReduce 1# 20# happyReduction_154-happyReduction_154 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut40 happy_x_1 of { happy_var_1 -> -	(-    let getName :: Expr -> Maybe Name-        getName (Ident (QName x)) = Just x-        getName (Underscore r _)  = Just (Name r [Hole])-        getName _                 = Nothing--        isAbsurd :: Expr -> Bool-        isAbsurd (Absurd _)                  = True-        isAbsurd (HiddenArg _ (Named _ e))   = isAbsurd e-        isAbsurd (InstanceArg _ (Named _ e)) = isAbsurd e-        isAbsurd (Paren _ expr)              = isAbsurd expr-        isAbsurd (RawApp _ exprs)            = any isAbsurd exprs-        isAbsurd _                           = False-    in-    if any isAbsurd happy_var_1 then return $ Right happy_var_1 else-    case mapM getName happy_var_1 of-        Just good -> return $ Left good-        Nothing   -> fail $ "expected sequence of bound identifiers")}-	) (\r -> happyReturn (happyIn29 r))--happyReduce_155 = happyMonadReduce 1# 21# happyReduction_155-happyReduction_155 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut40 happy_x_1 of { happy_var_1 -> -	(-    let -- interpret an expression as name-        getName :: Expr -> Maybe Name-        getName (Ident (QName x)) = Just x-        getName (Underscore r _)  = Just (Name r [Hole])-        getName _                 = Nothing--        getNames :: Expr -> Maybe [Name]-        getNames (RawApp _ es) = mapM getName es-        getNames e             = singleton `fmap` getName e--        -- interpret an expression as name or list of hidden names-        getName1 :: Expr -> Maybe [WithHiding Name]-        getName1 (Ident (QName x)) = Just [WithHiding NotHidden x]-        getName1 (Underscore r _)  = Just [WithHiding NotHidden $ Name r [Hole]]-        getName1 (HiddenArg _ (Named Nothing e))-                                   = map (WithHiding Hidden) `fmap` getNames e-        getName1 _                 = Nothing--    in-    case mapM getName1 happy_var_1 of-        Just good -> return $ concat good-        Nothing   -> fail $ "expected sequence of possibly hidden bound identifiers")}-	) (\r -> happyReturn (happyIn30 r))--happyReduce_156 = happySpecReduce_0  22# happyReduction_156-happyReduction_156  =  happyIn31-		 ([]-	)--happyReduce_157 = happySpecReduce_2  22# happyReduction_157-happyReduction_157 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	case happyOut31 happy_x_2 of { happy_var_2 -> -	happyIn31-		 (snd happy_var_1 : happy_var_2-	)}}--happyReduce_158 = happySpecReduce_1  23# happyReduction_158-happyReduction_158 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	happyIn32-		 (snd happy_var_1-	)}--happyReduce_159 = happySpecReduce_0  24# happyReduction_159-happyReduction_159  =  happyIn33-		 ([]-	)--happyReduce_160 = happySpecReduce_2  24# happyReduction_160-happyReduction_160 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	case happyOut33 happy_x_2 of { happy_var_2 -> -	happyIn33-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_161 = happyMonadReduce 1# 25# happyReduction_161-happyReduction_161 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	( mkName happy_var_1)}-	) (\r -> happyReturn (happyIn34 r))--happyReduce_162 = happyMonadReduce 1# 26# happyReduction_162-happyReduction_162 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	( pragmaQName happy_var_1)}-	) (\r -> happyReturn (happyIn35 r))--happyReduce_163 = happyMonadReduce 1# 27# happyReduction_163-happyReduction_163 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut33 happy_x_1 of { happy_var_1 -> -	( mapM pragmaQName happy_var_1)}-	) (\r -> happyReturn (happyIn36 r))--happyReduce_164 = happySpecReduce_2  28# happyReduction_164-happyReduction_164 happy_x_2-	happy_x_1-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn37-		 (Pi happy_var_1 happy_var_2-	)}}--happyReduce_165 = happySpecReduce_3  28# happyReduction_165-happyReduction_165 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn37-		 (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))-                                              (RawApp (getRange happy_var_1) happy_var_1)-                                              happy_var_3-	)}}}--happyReduce_166 = happySpecReduce_3  28# happyReduction_166-happyReduction_166 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymEqual happy_var_2) -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn37-		 (Equal (getRange (happy_var_1, happy_var_2, happy_var_3)) happy_var_1 happy_var_3-	)}}}--happyReduce_167 = happySpecReduce_1  28# happyReduction_167-happyReduction_167 happy_x_1-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> -	happyIn37-		 (happy_var_1-	)}--happyReduce_168 = happyMonadReduce 1# 29# happyReduction_168-happyReduction_168 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut39 happy_x_1 of { happy_var_1 -> -	( case happy_var_1 of-                      { [e]    -> return e-                      ; e : es -> return $ WithApp (fuseRange e es) e es-                      ; []     -> fail "impossible: empty with expressions"-                      })}-	) (\r -> happyReturn (happyIn38 r))--happyReduce_169 = happySpecReduce_3  30# happyReduction_169-happyReduction_169 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> -	case happyOut39 happy_x_3 of { happy_var_3 -> -	happyIn39-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3-	)}}--happyReduce_170 = happySpecReduce_1  30# happyReduction_170-happyReduction_170 happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	happyIn39-		 ([RawApp (getRange happy_var_1) happy_var_1]-	)}--happyReduce_171 = happySpecReduce_1  31# happyReduction_171-happyReduction_171 happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	happyIn40-		 ([happy_var_1]-	)}--happyReduce_172 = happySpecReduce_2  31# happyReduction_172-happyReduction_172 happy_x_2-	happy_x_1-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> -	case happyOut40 happy_x_2 of { happy_var_2 -> -	happyIn40-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_173 = happySpecReduce_3  32# happyReduction_173-happyReduction_173 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut60 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn41-		 (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3-	)}}}--happyReduce_174 = happySpecReduce_1  32# happyReduction_174-happyReduction_174 happy_x_1-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> -	happyIn41-		 (happy_var_1-	)}--happyReduce_175 = happySpecReduce_3  32# happyReduction_175-happyReduction_175 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut68 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn41-		 (forallPi happy_var_2 happy_var_3-	)}}--happyReduce_176 = happyReduce 4# 32# happyReduction_176-happyReduction_176 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	happyIn41-		 (Let (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_177 = happySpecReduce_1  32# happyReduction_177-happyReduction_177 happy_x_1-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> -	happyIn41-		 (happy_var_1-	)}--happyReduce_178 = happyReduce 4# 32# happyReduction_178-happyReduction_178 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	happyIn41-		 (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_179 = happySpecReduce_2  32# happyReduction_179-happyReduction_179 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	happyIn41-		 (Tactic (getRange (happy_var_1, happy_var_2)) (RawApp (getRange happy_var_2) happy_var_2) []-	)}}--happyReduce_180 = happyReduce 4# 32# happyReduction_180-happyReduction_180 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymBar happy_var_3) -> -	case happyOut39 happy_x_4 of { happy_var_4 -> -	happyIn41-		 (Tactic (getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4)) (RawApp (getRange happy_var_2) happy_var_2) happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_181 = happyReduce 4# 33# happyReduction_181-happyReduction_181 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut67 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn42-		 (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)-	) `HappyStk` happyRest}}}}--happyReduce_182 = happyReduce 5# 33# happyReduction_182-happyReduction_182 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwWhere happy_var_2) -> -	case happyOut67 happy_x_4 of { happy_var_4 -> -	happyIn42-		 (ExtendedLam (getRange (happy_var_1, happy_var_2, happy_var_4)) (reverse happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_183 = happyMonadReduce 2# 33# happyReduction_183-happyReduction_183 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut61 happy_x_2 of { happy_var_2 -> -	( case happy_var_2 of-                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else-                                                       return $ Lam r bs (AbsurdLam r h)-                                                         where r = fuseRange happy_var_1 bs-                                       Right es -> do -- it is of the form @\ { p1 ... () }@-                                                     p <- exprToLHS (RawApp (getRange es) es);-                                                     return $ ExtendedLam (fuseRange happy_var_1 es)-                                                                     [(p [] [], AbsurdRHS, NoWhere, False)])}}-	) (\r -> happyReturn (happyIn42 r))--happyReduce_184 = happySpecReduce_1  34# happyReduction_184-happyReduction_184 happy_x_1-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> -	happyIn43-		 ([happy_var_1]-	)}--happyReduce_185 = happySpecReduce_2  34# happyReduction_185-happyReduction_185 happy_x_2-	happy_x_1-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	happyIn43-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_186 = happySpecReduce_3  35# happyReduction_186-happyReduction_186 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn44-		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (maybeNamed happy_var_2)-	)}}}--happyReduce_187 = happySpecReduce_2  35# happyReduction_187-happyReduction_187 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> -	happyIn44-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r-	)}}--happyReduce_188 = happySpecReduce_1  36# happyReduction_188-happyReduction_188 happy_x_1-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> -	happyIn45-		 (Ident happy_var_1-	)}--happyReduce_189 = happySpecReduce_1  36# happyReduction_189-happyReduction_189 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn45-		 (Lit happy_var_1-	)}--happyReduce_190 = happySpecReduce_1  36# happyReduction_190-happyReduction_190 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn45-		 (QuestionMark (getRange happy_var_1) Nothing-	)}--happyReduce_191 = happySpecReduce_1  36# happyReduction_191-happyReduction_191 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn45-		 (Underscore (getRange happy_var_1) Nothing-	)}--happyReduce_192 = happySpecReduce_1  36# happyReduction_192-happyReduction_192 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn45-		 (Prop (getRange happy_var_1)-	)}--happyReduce_193 = happySpecReduce_1  36# happyReduction_193-happyReduction_193 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn45-		 (Set (getRange happy_var_1)-	)}--happyReduce_194 = happySpecReduce_1  36# happyReduction_194-happyReduction_194 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn45-		 (Quote (getRange happy_var_1)-	)}--happyReduce_195 = happySpecReduce_1  36# happyReduction_195-happyReduction_195 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> -	happyIn45-		 (QuoteTerm (getRange happy_var_1)-	)}--happyReduce_196 = happySpecReduce_1  36# happyReduction_196-happyReduction_196 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> -	happyIn45-		 (QuoteContext (getRange happy_var_1)-	)}--happyReduce_197 = happySpecReduce_1  36# happyReduction_197-happyReduction_197 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> -	happyIn45-		 (Unquote (getRange happy_var_1)-	)}--happyReduce_198 = happySpecReduce_1  36# happyReduction_198-happyReduction_198 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn45-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)-	)}--happyReduce_199 = happySpecReduce_3  36# happyReduction_199-happyReduction_199 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	case happyOut20 happy_x_3 of { happy_var_3 -> -	happyIn45-		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))-                                                          (maybeNamed happy_var_2)-	)}}}--happyReduce_200 = happySpecReduce_3  36# happyReduction_200-happyReduction_200 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn45-		 (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2-	)}}}--happyReduce_201 = happySpecReduce_3  36# happyReduction_201-happyReduction_201 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenIdiomBracket happy_var_1) -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseIdiomBracket happy_var_3) -> -	happyIn45-		 (IdiomBrackets (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2-	)}}}--happyReduce_202 = happySpecReduce_2  36# happyReduction_202-happyReduction_202 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> -	happyIn45-		 (Absurd (fuseRange happy_var_1 happy_var_2)-	)}}--happyReduce_203 = happySpecReduce_2  36# happyReduction_203-happyReduction_203 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn45-		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r-	)}}--happyReduce_204 = happySpecReduce_3  36# happyReduction_204-happyReduction_204 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	happyIn45-		 (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3-	)}}}--happyReduce_205 = happySpecReduce_2  36# happyReduction_205-happyReduction_205 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn45-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_206 = happyReduce 4# 36# happyReduction_206-happyReduction_206 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut47 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn45-		 (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}}--happyReduce_207 = happyReduce 5# 36# happyReduction_207-happyReduction_207 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> -	case happyOut51 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> -	happyIn45-		 (RecUpdate (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}}}--happyReduce_208 = happySpecReduce_1  37# happyReduction_208-happyReduction_208 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn46-		 (happy_var_1-	)}--happyReduce_209 = happySpecReduce_1  37# happyReduction_209-happyReduction_209 happy_x_1-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> -	happyIn46-		 (happy_var_1-	)}--happyReduce_210 = happySpecReduce_0  38# happyReduction_210-happyReduction_210  =  happyIn47-		 ([]-	)--happyReduce_211 = happySpecReduce_1  38# happyReduction_211-happyReduction_211 happy_x_1-	 =  case happyOut48 happy_x_1 of { happy_var_1 -> -	happyIn47-		 (happy_var_1-	)}--happyReduce_212 = happySpecReduce_1  39# happyReduction_212-happyReduction_212 happy_x_1-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> -	happyIn48-		 ([happy_var_1]-	)}--happyReduce_213 = happySpecReduce_3  39# happyReduction_213-happyReduction_213 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_3 of { happy_var_3 -> -	happyIn48-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_214 = happySpecReduce_1  40# happyReduction_214-happyReduction_214 happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (Left  happy_var_1-	)}--happyReduce_215 = happySpecReduce_1  40# happyReduction_215-happyReduction_215 happy_x_1-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (Right happy_var_1-	)}--happyReduce_216 = happySpecReduce_3  41# happyReduction_216-happyReduction_216 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> -	case happyOut122 happy_x_2 of { happy_var_2 -> -	case happyOut73 happy_x_3 of { happy_var_3 -> -	happyIn50-		 (ModuleAssignment happy_var_1 happy_var_2 happy_var_3-	)}}}--happyReduce_217 = happySpecReduce_0  42# happyReduction_217-happyReduction_217  =  happyIn51-		 ([]-	)--happyReduce_218 = happySpecReduce_1  42# happyReduction_218-happyReduction_218 happy_x_1-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> -	happyIn51-		 (happy_var_1-	)}--happyReduce_219 = happySpecReduce_1  43# happyReduction_219-happyReduction_219 happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	happyIn52-		 ([happy_var_1]-	)}--happyReduce_220 = happySpecReduce_3  43# happyReduction_220-happyReduction_220 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	case happyOut52 happy_x_3 of { happy_var_3 -> -	happyIn52-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_221 = happySpecReduce_3  44# happyReduction_221-happyReduction_221 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn53-		 (FieldAssignment happy_var_1 happy_var_3-	)}}--happyReduce_222 = happySpecReduce_2  45# happyReduction_222-happyReduction_222 happy_x_2-	happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	happyIn54-		 (happy_var_1-	)}--happyReduce_223 = happySpecReduce_1  46# happyReduction_223-happyReduction_223 happy_x_1-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> -	happyIn55-		 ({-TeleBind-} happy_var_1-	)}--happyReduce_224 = happySpecReduce_2  47# happyReduction_224-happyReduction_224 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut56 happy_x_2 of { happy_var_2 -> -	happyIn56-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_225 = happySpecReduce_1  47# happyReduction_225-happyReduction_225 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn56-		 ([happy_var_1]-	)}--happyReduce_226 = happyReduce 4# 48# happyReduction_226-happyReduction_226 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut59 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setRelevance Irrelevant happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_227 = happyReduce 4# 48# happyReduction_227-happyReduction_227 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setHiding Hidden $-                             setRelevance Irrelevant happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_228 = happyReduce 4# 48# happyReduction_228-happyReduction_228 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setHiding Instance $-                             setRelevance Irrelevant happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_229 = happyReduce 4# 48# happyReduction_229-happyReduction_229 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut59 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setRelevance NonStrict happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_230 = happyReduce 4# 48# happyReduction_230-happyReduction_230 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setHiding Hidden $-                             setRelevance NonStrict happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_231 = happyReduce 4# 48# happyReduction_231-happyReduction_231 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn57-		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $-                             setHiding Instance $-                             setRelevance NonStrict happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_232 = happySpecReduce_3  48# happyReduction_232-happyReduction_232 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut59 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn57-		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2-	)}}}--happyReduce_233 = happySpecReduce_3  48# happyReduction_233-happyReduction_233 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut58 happy_x_2 of { happy_var_2 -> -	case happyOut20 happy_x_3 of { happy_var_3 -> -	happyIn57-		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $-                             setHiding Instance happy_var_2-	)}}}--happyReduce_234 = happySpecReduce_3  48# happyReduction_234-happyReduction_234 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut58 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn57-		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $-                             setHiding Hidden happy_var_2-	)}}}--happyReduce_235 = happySpecReduce_3  48# happyReduction_235-happyReduction_235 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut121 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn57-		 (tLet (getRange (happy_var_1,happy_var_3)) happy_var_2-	)}}}--happyReduce_236 = happyReduce 4# 48# happyReduction_236-happyReduction_236 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut167 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn57-		 (tLet (getRange (happy_var_1,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_237 = happySpecReduce_3  49# happyReduction_237-happyReduction_237 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings-    in TypedBindings r $ defaultArg $ TBind r (map (pure . mkBoundName_) happy_var_1) happy_var_3-	)}}}--happyReduce_238 = happySpecReduce_3  50# happyReduction_238-happyReduction_238 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn59-		 (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings-    in TypedBindings r $ defaultArg $ TBind r (map (fmap mkBoundName_) happy_var_1) happy_var_3-	)}}}--happyReduce_239 = happyMonadReduce 2# 51# happyReduction_239-happyReduction_239 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut62 happy_x_1 of { happy_var_1 -> -	(-      case reverse happy_var_1 of-        Left _ : _ -> parseError "Absurd lambda cannot have a body."-        _ : _      -> return [ b | Right b <- happy_var_1 ]-        []         -> parsePanic "Empty LamBinds")}-	) (\r -> happyReturn (happyIn60 r))--happyReduce_240 = happyMonadReduce 1# 52# happyReduction_240-happyReduction_240 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut63 happy_x_1 of { happy_var_1 -> -	(-    case happy_var_1 of-      Left lb -> case reverse lb of-                   Right _ : _ -> parseError "Missing body for lambda"-                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)-                   _           -> parseError "Unsupported variant of lambda"-      Right es -> return $ Right es)}-	) (\r -> happyReturn (happyIn61 r))--happyReduce_241 = happySpecReduce_2  53# happyReduction_241-happyReduction_241 happy_x_2-	happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	case happyOut62 happy_x_2 of { happy_var_2 -> -	happyIn62-		 (map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_242 = happySpecReduce_2  53# happyReduction_242-happyReduction_242 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut62 happy_x_2 of { happy_var_2 -> -	happyIn62-		 (Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_243 = happySpecReduce_1  53# happyReduction_243-happyReduction_243 happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	happyIn62-		 (map Right happy_var_1-	)}--happyReduce_244 = happySpecReduce_1  53# happyReduction_244-happyReduction_244 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn62-		 ([Right $ DomainFull happy_var_1]-	)}--happyReduce_245 = happySpecReduce_2  53# happyReduction_245-happyReduction_245 happy_x_2-	happy_x_1-	 =  happyIn62-		 ([Left NotHidden]-	)--happyReduce_246 = happySpecReduce_2  53# happyReduction_246-happyReduction_246 happy_x_2-	happy_x_1-	 =  happyIn62-		 ([Left Hidden]-	)--happyReduce_247 = happySpecReduce_2  53# happyReduction_247-happyReduction_247 happy_x_2-	happy_x_1-	 =  happyIn62-		 ([Left Instance]-	)--happyReduce_248 = happySpecReduce_2  54# happyReduction_248-happyReduction_248 happy_x_2-	happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	case happyOut62 happy_x_2 of { happy_var_2 -> -	happyIn63-		 (Left $ map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_249 = happySpecReduce_2  54# happyReduction_249-happyReduction_249 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut62 happy_x_2 of { happy_var_2 -> -	happyIn63-		 (Left $ Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_250 = happySpecReduce_1  54# happyReduction_250-happyReduction_250 happy_x_1-	 =  case happyOut72 happy_x_1 of { happy_var_1 -> -	happyIn63-		 (case happy_var_1 of-                                    Left lb -> Left $ map Right lb-                                    Right es -> Right es-	)}--happyReduce_251 = happySpecReduce_1  54# happyReduction_251-happyReduction_251 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn63-		 (Left [Right $ DomainFull happy_var_1]-	)}--happyReduce_252 = happySpecReduce_2  54# happyReduction_252-happyReduction_252 happy_x_2-	happy_x_1-	 =  happyIn63-		 (Left [Left NotHidden]-	)--happyReduce_253 = happySpecReduce_2  54# happyReduction_253-happyReduction_253 happy_x_2-	happy_x_1-	 =  happyIn63-		 (Left [Left Hidden]-	)--happyReduce_254 = happySpecReduce_2  54# happyReduction_254-happyReduction_254 happy_x_2-	happy_x_1-	 =  happyIn63-		 (Left [Left Instance]-	)--happyReduce_255 = happyMonadReduce 3# 55# happyReduction_255-happyReduction_255 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut43 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;-      return (p [] [], RHS happy_var_3, NoWhere, False))}}-	) (\r -> happyReturn (happyIn64 r))--happyReduce_256 = happyMonadReduce 4# 55# happyReduction_256-happyReduction_256 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2) ;-      return (p [] [], RHS happy_var_4, NoWhere, True))}}-	) (\r -> happyReturn (happyIn64 r))--happyReduce_257 = happyMonadReduce 1# 56# happyReduction_257-happyReduction_257 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut40 happy_x_1 of { happy_var_1 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);-      return (p [] [], AbsurdRHS, NoWhere, False))}-	) (\r -> happyReturn (happyIn65 r))--happyReduce_258 = happyMonadReduce 2# 56# happyReduction_258-happyReduction_258 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut40 happy_x_2 of { happy_var_2 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2);-      return (p [] [], AbsurdRHS, NoWhere, True))}-	) (\r -> happyReturn (happyIn65 r))--happyReduce_259 = happySpecReduce_1  57# happyReduction_259-happyReduction_259 happy_x_1-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> -	happyIn66-		 (happy_var_1-	)}--happyReduce_260 = happySpecReduce_1  57# happyReduction_260-happyReduction_260 happy_x_1-	 =  case happyOut65 happy_x_1 of { happy_var_1 -> -	happyIn66-		 (happy_var_1-	)}--happyReduce_261 = happySpecReduce_3  58# happyReduction_261-happyReduction_261 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut67 happy_x_1 of { happy_var_1 -> -	case happyOut66 happy_x_3 of { happy_var_3 -> -	happyIn67-		 (happy_var_3 : happy_var_1-	)}}--happyReduce_262 = happySpecReduce_3  58# happyReduction_262-happyReduction_262 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut65 happy_x_1 of { happy_var_1 -> -	case happyOut66 happy_x_3 of { happy_var_3 -> -	happyIn67-		 ([happy_var_3, happy_var_1]-	)}}--happyReduce_263 = happySpecReduce_1  58# happyReduction_263-happyReduction_263 happy_x_1-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> -	happyIn67-		 ([happy_var_1]-	)}--happyReduce_264 = happySpecReduce_2  59# happyReduction_264-happyReduction_264 happy_x_2-	happy_x_1-	 =  case happyOut69 happy_x_1 of { happy_var_1 -> -	happyIn68-		 (happy_var_1-	)}--happyReduce_265 = happySpecReduce_2  60# happyReduction_265-happyReduction_265 happy_x_2-	happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	case happyOut69 happy_x_2 of { happy_var_2 -> -	happyIn69-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_266 = happySpecReduce_2  60# happyReduction_266-happyReduction_266 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut69 happy_x_2 of { happy_var_2 -> -	happyIn69-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_267 = happySpecReduce_1  60# happyReduction_267-happyReduction_267 happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	happyIn69-		 (happy_var_1-	)}--happyReduce_268 = happySpecReduce_1  60# happyReduction_268-happyReduction_268 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([DomainFull happy_var_1]-	)}--happyReduce_269 = happySpecReduce_2  61# happyReduction_269-happyReduction_269 happy_x_2-	happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	case happyOut70 happy_x_2 of { happy_var_2 -> -	happyIn70-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_270 = happySpecReduce_2  61# happyReduction_270-happyReduction_270 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut70 happy_x_2 of { happy_var_2 -> -	happyIn70-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_271 = happySpecReduce_0  61# happyReduction_271-happyReduction_271  =  happyIn70-		 ([]-	)--happyReduce_272 = happySpecReduce_1  62# happyReduction_272-happyReduction_272 happy_x_1-	 =  case happyOut72 happy_x_1 of { happy_var_1 -> -	happyIn71-		 (case happy_var_1 of-                             Left lbs -> lbs-                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"-	)}--happyReduce_273 = happySpecReduce_1  63# happyReduction_273-happyReduction_273 happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	happyIn72-		 (Left [DomainFree defaultArgInfo $ mkBoundName_ happy_var_1]-	)}--happyReduce_274 = happySpecReduce_2  63# happyReduction_274-happyReduction_274 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn72-		 (Left [DomainFree (setRelevance Irrelevant $ defaultArgInfo) $ mkBoundName_ happy_var_2]-	)}--happyReduce_275 = happySpecReduce_2  63# happyReduction_275-happyReduction_275 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn72-		 (Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ happy_var_2]-	)}--happyReduce_276 = happySpecReduce_3  63# happyReduction_276-happyReduction_276 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn72-		 (mapLeft (map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) happy_var_2-	)}--happyReduce_277 = happySpecReduce_3  63# happyReduction_277-happyReduction_277 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_2 of { happy_var_2 -> -	happyIn72-		 (Left $ map (DomainFree (setHiding Instance $ defaultArgInfo) . mkBoundName_) happy_var_2-	)}--happyReduce_278 = happyReduce 4# 63# happyReduction_278-happyReduction_278 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn72-		 (Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_279 = happyReduce 4# 63# happyReduction_279-happyReduction_279 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn72-		 (Left $ map (DomainFree (setHiding Instance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_280 = happyReduce 4# 63# happyReduction_280-happyReduction_280 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn72-		 (Left $ map (DomainFree (setHiding Hidden $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_281 = happyReduce 4# 63# happyReduction_281-happyReduction_281 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn72-		 (Left $ map (DomainFree  (setHiding Instance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_282 = happyMonadReduce 1# 64# happyReduction_282-happyReduction_282 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut74 happy_x_1 of { happy_var_1 -> -	( mergeImportDirectives happy_var_1)}-	) (\r -> happyReturn (happyIn73 r))--happyReduce_283 = happySpecReduce_2  65# happyReduction_283-happyReduction_283 happy_x_2-	happy_x_1-	 =  case happyOut75 happy_x_1 of { happy_var_1 -> -	case happyOut74 happy_x_2 of { happy_var_2 -> -	happyIn74-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_284 = happySpecReduce_0  65# happyReduction_284-happyReduction_284  =  happyIn74-		 ([]-	)--happyReduce_285 = happySpecReduce_1  66# happyReduction_285-happyReduction_285 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> -	happyIn75-		 (defaultImportDir { importDirRange = getRange happy_var_1, publicOpen = True }-	)}--happyReduce_286 = happySpecReduce_1  66# happyReduction_286-happyReduction_286 happy_x_1-	 =  case happyOut76 happy_x_1 of { happy_var_1 -> -	happyIn75-		 (defaultImportDir { importDirRange = snd happy_var_1, using    = fst happy_var_1 }-	)}--happyReduce_287 = happySpecReduce_1  66# happyReduction_287-happyReduction_287 happy_x_1-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> -	happyIn75-		 (defaultImportDir { importDirRange = snd happy_var_1, hiding   = fst happy_var_1 }-	)}--happyReduce_288 = happySpecReduce_1  66# happyReduction_288-happyReduction_288 happy_x_1-	 =  case happyOut78 happy_x_1 of { happy_var_1 -> -	happyIn75-		 (defaultImportDir { importDirRange = snd happy_var_1, impRenaming = fst happy_var_1 }-	)}--happyReduce_289 = happyReduce 4# 67# happyReduction_289-happyReduction_289 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut83 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn76-		 ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))-	) `HappyStk` happyRest}}}}--happyReduce_290 = happyReduce 4# 68# happyReduction_290-happyReduction_290 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut83 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn77-		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))-	) `HappyStk` happyRest}}}}--happyReduce_291 = happyReduce 4# 69# happyReduction_291-happyReduction_291 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut79 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn78-		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))-	) `HappyStk` happyRest}}}}--happyReduce_292 = happySpecReduce_3  69# happyReduction_292-happyReduction_292 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn78-		 (([] , getRange (happy_var_1,happy_var_2,happy_var_3))-	)}}}--happyReduce_293 = happySpecReduce_3  70# happyReduction_293-happyReduction_293 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> -	case happyOut79 happy_x_3 of { happy_var_3 -> -	happyIn79-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_294 = happySpecReduce_1  70# happyReduction_294-happyReduction_294 happy_x_1-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> -	happyIn79-		 ([happy_var_1]-	)}--happyReduce_295 = happySpecReduce_3  71# happyReduction_295-happyReduction_295 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut81 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> -	case happyOut18 happy_x_3 of { happy_var_3 -> -	happyIn80-		 (Renaming happy_var_1 (setImportedName happy_var_1 happy_var_3) (getRange happy_var_2)-	)}}}--happyReduce_296 = happySpecReduce_2  72# happyReduction_296-happyReduction_296 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn81-		 (ImportedName happy_var_2-	)}--happyReduce_297 = happySpecReduce_3  72# happyReduction_297-happyReduction_297 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_3 of { happy_var_3 -> -	happyIn81-		 (ImportedModule happy_var_3-	)}--happyReduce_298 = happySpecReduce_1  73# happyReduction_298-happyReduction_298 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn82-		 (ImportedName happy_var_1-	)}--happyReduce_299 = happySpecReduce_2  73# happyReduction_299-happyReduction_299 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn82-		 (ImportedModule happy_var_2-	)}--happyReduce_300 = happySpecReduce_0  74# happyReduction_300-happyReduction_300  =  happyIn83-		 ([]-	)--happyReduce_301 = happySpecReduce_1  74# happyReduction_301-happyReduction_301 happy_x_1-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> -	happyIn83-		 (happy_var_1-	)}--happyReduce_302 = happySpecReduce_1  75# happyReduction_302-happyReduction_302 happy_x_1-	 =  case happyOut82 happy_x_1 of { happy_var_1 -> -	happyIn84-		 ([happy_var_1]-	)}--happyReduce_303 = happySpecReduce_3  75# happyReduction_303-happyReduction_303 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut82 happy_x_1 of { happy_var_1 -> -	case happyOut84 happy_x_3 of { happy_var_3 -> -	happyIn84-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_304 = happyMonadReduce 3# 76# happyReduction_304-happyReduction_304 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut38 happy_x_1 of { happy_var_1 -> -	case happyOut88 happy_x_2 of { happy_var_2 -> -	case happyOut87 happy_x_3 of { happy_var_3 -> -	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}-	) (\r -> happyReturn (happyIn85 r))--happyReduce_305 = happyReduce 4# 76# happyReduction_305-happyReduction_305 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	case happyOut86 happy_x_2 of { happy_var_2 -> -	case happyOut88 happy_x_3 of { happy_var_3 -> -	case happyOut87 happy_x_4 of { happy_var_4 -> -	happyIn85-		 (Ellipsis (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_306 = happySpecReduce_0  77# happyReduction_306-happyReduction_306  =  happyIn86-		 ([]-	)--happyReduce_307 = happyMonadReduce 3# 77# happyReduction_307-happyReduction_307 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOut86 happy_x_3 of { happy_var_3 -> -	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->-                   return (p : happy_var_3))}}-	) (\r -> happyReturn (happyIn86 r))--happyReduce_308 = happySpecReduce_0  78# happyReduction_308-happyReduction_308  =  happyIn87-		 ([]-	)--happyReduce_309 = happySpecReduce_2  78# happyReduction_309-happyReduction_309 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn87-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_310 = happySpecReduce_0  79# happyReduction_310-happyReduction_310  =  happyIn88-		 ([]-	)--happyReduce_311 = happySpecReduce_2  79# happyReduction_311-happyReduction_311 happy_x_2-	happy_x_1-	 =  case happyOut38 happy_x_2 of { happy_var_2 -> -	happyIn88-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_312 = happySpecReduce_0  80# happyReduction_312-happyReduction_312  =  happyIn89-		 (NoWhere-	)--happyReduce_313 = happySpecReduce_2  80# happyReduction_313-happyReduction_313 happy_x_2-	happy_x_1-	 =  case happyOut168 happy_x_2 of { happy_var_2 -> -	happyIn89-		 (AnyWhere happy_var_2-	)}--happyReduce_314 = happyReduce 4# 80# happyReduction_314-happyReduction_314 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut168 happy_x_4 of { happy_var_4 -> -	happyIn89-		 (SomeWhere happy_var_2 PublicAccess happy_var_4-	) `HappyStk` happyRest}}--happyReduce_315 = happyReduce 4# 80# happyReduction_315-happyReduction_315 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut126 happy_x_2 of { happy_var_2 -> -	case happyOut168 happy_x_4 of { happy_var_4 -> -	happyIn89-		 (SomeWhere happy_var_2 PublicAccess happy_var_4-	) `HappyStk` happyRest}}--happyReduce_316 = happySpecReduce_2  81# happyReduction_316-happyReduction_316 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	case happyOut89 happy_x_2 of { happy_var_2 -> -	happyIn90-		 (ExprWhere happy_var_1 happy_var_2-	)}}--happyReduce_317 = happySpecReduce_1  82# happyReduction_317-happyReduction_317 happy_x_1-	 =  case happyOut102 happy_x_1 of { happy_var_1 -> -	happyIn91-		 (happy_var_1-	)}--happyReduce_318 = happySpecReduce_1  82# happyReduction_318-happyReduction_318 happy_x_1-	 =  case happyOut94 happy_x_1 of { happy_var_1 -> -	happyIn91-		 (happy_var_1-	)}--happyReduce_319 = happySpecReduce_1  82# happyReduction_319-happyReduction_319 happy_x_1-	 =  case happyOut96 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_320 = happySpecReduce_1  82# happyReduction_320-happyReduction_320 happy_x_1-	 =  case happyOut97 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_321 = happySpecReduce_1  82# happyReduction_321-happyReduction_321 happy_x_1-	 =  case happyOut98 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_322 = happySpecReduce_1  82# happyReduction_322-happyReduction_322 happy_x_1-	 =  case happyOut99 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_323 = happySpecReduce_1  82# happyReduction_323-happyReduction_323 happy_x_1-	 =  case happyOut101 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_324 = happySpecReduce_1  82# happyReduction_324-happyReduction_324 happy_x_1-	 =  case happyOut103 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_325 = happySpecReduce_1  82# happyReduction_325-happyReduction_325 happy_x_1-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_326 = happySpecReduce_1  82# happyReduction_326-happyReduction_326 happy_x_1-	 =  case happyOut105 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_327 = happySpecReduce_1  82# happyReduction_327-happyReduction_327 happy_x_1-	 =  case happyOut106 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_328 = happySpecReduce_1  82# happyReduction_328-happyReduction_328 happy_x_1-	 =  case happyOut107 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_329 = happySpecReduce_1  82# happyReduction_329-happyReduction_329 happy_x_1-	 =  case happyOut108 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_330 = happySpecReduce_1  82# happyReduction_330-happyReduction_330 happy_x_1-	 =  case happyOut109 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_331 = happySpecReduce_1  82# happyReduction_331-happyReduction_331 happy_x_1-	 =  case happyOut121 happy_x_1 of { happy_var_1 -> -	happyIn91-		 (happy_var_1-	)}--happyReduce_332 = happySpecReduce_1  82# happyReduction_332-happyReduction_332 happy_x_1-	 =  case happyOut124 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_333 = happySpecReduce_1  82# happyReduction_333-happyReduction_333 happy_x_1-	 =  case happyOut125 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_334 = happySpecReduce_1  82# happyReduction_334-happyReduction_334 happy_x_1-	 =  case happyOut128 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_335 = happySpecReduce_1  82# happyReduction_335-happyReduction_335 happy_x_1-	 =  case happyOut111 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_336 = happySpecReduce_1  82# happyReduction_336-happyReduction_336 happy_x_1-	 =  case happyOut112 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_337 = happySpecReduce_1  82# happyReduction_337-happyReduction_337 happy_x_1-	 =  case happyOut110 happy_x_1 of { happy_var_1 -> -	happyIn91-		 ([happy_var_1]-	)}--happyReduce_338 = happySpecReduce_3  83# happyReduction_338-happyReduction_338 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn92-		 (map (\ x -> TypeSig defaultArgInfo x happy_var_3) happy_var_1-	)}}--happyReduce_339 = happySpecReduce_3  84# happyReduction_339-happyReduction_339 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn93-		 (map (fmap (\ x -> TypeSig defaultArgInfo x happy_var_3)) happy_var_1-	)}}--happyReduce_340 = happyReduce 4# 84# happyReduction_340-happyReduction_340 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut23 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	happyIn93-		 (let setOverlap (Arg i x) = Arg i{ argInfoOverlappable = True } x in-      map (setOverlap . fmap (\ x -> TypeSig defaultArgInfo x happy_var_4)) happy_var_2-	) `HappyStk` happyRest}}--happyReduce_341 = happySpecReduce_2  84# happyReduction_341-happyReduction_341 happy_x_2-	happy_x_1-	 =  case happyOut160 happy_x_2 of { happy_var_2 -> -	happyIn93-		 (let-      setInstance (TypeSig info x t) = TypeSig (setHiding Instance info) x t-      setInstance _ = __IMPOSSIBLE__ in-    map (fmap setInstance) happy_var_2-	)}--happyReduce_342 = happyMonadReduce 3# 85# happyReduction_342-happyReduction_342 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut85 happy_x_1 of { happy_var_1 -> -	case happyOut95 happy_x_2 of { happy_var_2 -> -	case happyOut89 happy_x_3 of { happy_var_3 -> -	( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}}-	) (\r -> happyReturn (happyIn94 r))--happyReduce_343 = happySpecReduce_2  86# happyReduction_343-happyReduction_343 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn95-		 (JustRHS (RHS happy_var_2)-	)}--happyReduce_344 = happySpecReduce_2  86# happyReduction_344-happyReduction_344 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn95-		 (TypeSigsRHS happy_var_2-	)}--happyReduce_345 = happySpecReduce_0  86# happyReduction_345-happyReduction_345  =  happyIn95-		 (JustRHS AbsurdRHS-	)--happyReduce_346 = happyReduce 7# 87# happyReduction_346-happyReduction_346 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut168 happy_x_7 of { happy_var_7 -> -	happyIn96-		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7-	) `HappyStk` happyRest}}}}}}}--happyReduce_347 = happyReduce 7# 87# happyReduction_347-happyReduction_347 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut168 happy_x_7 of { happy_var_7 -> -	happyIn96-		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7-	) `HappyStk` happyRest}}}}}}}--happyReduce_348 = happyReduce 5# 87# happyReduction_348-happyReduction_348 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut168 happy_x_5 of { happy_var_5 -> -	happyIn96-		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_349 = happyReduce 5# 87# happyReduction_349-happyReduction_349 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut168 happy_x_5 of { happy_var_5 -> -	happyIn96-		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_350 = happyReduce 5# 88# happyReduction_350-happyReduction_350 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	happyIn97-		 (DataSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_351 = happyMonadReduce 7# 89# happyReduction_351-happyReduction_351 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut162 happy_x_7 of { happy_var_7 -> -	( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_7 in return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) n x y z happy_var_3 (Just happy_var_5) ds)}}}}}}}-	) (\r -> happyReturn (happyIn98 r))--happyReduce_352 = happyMonadReduce 5# 89# happyReduction_352-happyReduction_352 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut162 happy_x_5 of { happy_var_5 -> -	( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_5 in return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n x y z happy_var_3 Nothing ds)}}}}}-	) (\r -> happyReturn (happyIn98 r))--happyReduce_353 = happyMonadReduce 5# 90# happyReduction_353-happyReduction_353 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	( exprToName happy_var_2 >>= \ n -> return $ RecordSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n happy_var_3 happy_var_5)}}}}}-	) (\r -> happyReturn (happyIn99 r))--happyReduce_354 = happySpecReduce_2  91# happyReduction_354-happyReduction_354 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn100-		 ((happy_var_2, NotInstanceDef)-	)}--happyReduce_355 = happyReduce 5# 91# happyReduction_355-happyReduction_355 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut18 happy_x_4 of { happy_var_4 -> -	happyIn100-		 ((happy_var_4, InstanceDef)-	) `HappyStk` happyRest}--happyReduce_356 = happySpecReduce_3  92# happyReduction_356-happyReduction_356 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	case happyOut17 happy_x_2 of { happy_var_2 -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	happyIn101-		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) NonAssoc)   happy_var_3-	)}}}--happyReduce_357 = happySpecReduce_3  92# happyReduction_357-happyReduction_357 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	case happyOut17 happy_x_2 of { happy_var_2 -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	happyIn101-		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) LeftAssoc)  happy_var_3-	)}}}--happyReduce_358 = happySpecReduce_3  92# happyReduction_358-happyReduction_358 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	case happyOut17 happy_x_2 of { happy_var_2 -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	happyIn101-		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) RightAssoc) happy_var_3-	)}}}--happyReduce_359 = happySpecReduce_2  93# happyReduction_359-happyReduction_359 happy_x_2-	happy_x_1-	 =  case happyOut160 happy_x_2 of { happy_var_2 -> -	happyIn102-		 (let-                inst i | getHiding i == Instance = InstanceDef-                       | otherwise               = NotInstanceDef-                toField (Arg info (TypeSig info' x t)) = Field (inst info') x (Arg info t)-              in map toField happy_var_2-	)}--happyReduce_360 = happySpecReduce_2  94# happyReduction_360-happyReduction_360 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn103-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_361 = happySpecReduce_2  95# happyReduction_361-happyReduction_361 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn104-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_362 = happySpecReduce_2  96# happyReduction_362-happyReduction_362 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn105-		 (Private (fuseRange happy_var_1 happy_var_2) UserWritten happy_var_2-	)}}--happyReduce_363 = happySpecReduce_2  97# happyReduction_363-happyReduction_363 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn106-		 (InstanceB (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_364 = happySpecReduce_2  98# happyReduction_364-happyReduction_364 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn107-		 (Macro (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_365 = happySpecReduce_2  99# happyReduction_365-happyReduction_365 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	case happyOut167 happy_x_2 of { happy_var_2 -> -	happyIn108-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_366 = happySpecReduce_2  100# happyReduction_366-happyReduction_366 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	case happyOut158 happy_x_2 of { happy_var_2 -> -	happyIn109-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_367 = happySpecReduce_3  101# happyReduction_367-happyReduction_367 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn110-		 (UnquoteDecl (fuseRange happy_var_1 happy_var_3) [] happy_var_3-	)}}--happyReduce_368 = happyReduce 4# 101# happyReduction_368-happyReduction_368 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> -	case happyOut19 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	happyIn110-		 (UnquoteDecl (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_369 = happyReduce 4# 101# happyReduction_369-happyReduction_369 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> -	case happyOut19 happy_x_2 of { happy_var_2 -> -	case happyOut37 happy_x_4 of { happy_var_4 -> -	happyIn110-		 (UnquoteDef (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_370 = happyMonadReduce 5# 102# happyReduction_370-happyReduction_370 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut115 happy_x_3 of { happy_var_3 -> -	case happyOut114 happy_x_5 of { happy_var_5 -> -	(-  case happy_var_2 of-    Name _ [_] -> case mkNotation happy_var_3 (map rangedThing happy_var_5) of-      Left err -> parseError $ "Malformed syntax declaration: " ++ err-      Right n -> return $ Syntax happy_var_2 n-    _ -> parseError "Syntax declarations are allowed only for simple names (without holes)")}}}-	) (\r -> happyReturn (happyIn111 r))--happyReduce_371 = happyMonadReduce 5# 103# happyReduction_371-happyReduction_371 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	case happyOut113 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymEqual happy_var_4) -> -	case happyOut37 happy_x_5 of { happy_var_5 -> -	( do-  p <- exprToPattern happy_var_5-  return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_3 p))}}}}}-	) (\r -> happyReturn (happyIn112 r))--happyReduce_372 = happySpecReduce_0  104# happyReduction_372-happyReduction_372  =  happyIn113-		 ([]-	)--happyReduce_373 = happyMonadReduce 1# 104# happyReduction_373-happyReduction_373 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut62 happy_x_1 of { happy_var_1 -> -	( patternSynArgs happy_var_1)}-	) (\r -> happyReturn (happyIn113 r))--happyReduce_374 = happySpecReduce_1  105# happyReduction_374-happyReduction_374 happy_x_1-	 =  case happyOut119 happy_x_1 of { happy_var_1 -> -	happyIn114-		 ([happy_var_1]-	)}--happyReduce_375 = happySpecReduce_2  105# happyReduction_375-happyReduction_375 happy_x_2-	happy_x_1-	 =  case happyOut114 happy_x_1 of { happy_var_1 -> -	case happyOut119 happy_x_2 of { happy_var_2 -> -	happyIn114-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_376 = happySpecReduce_1  106# happyReduction_376-happyReduction_376 happy_x_1-	 =  case happyOut116 happy_x_1 of { happy_var_1 -> -	happyIn115-		 ([happy_var_1]-	)}--happyReduce_377 = happySpecReduce_2  106# happyReduction_377-happyReduction_377 happy_x_2-	happy_x_1-	 =  case happyOut115 happy_x_1 of { happy_var_1 -> -	case happyOut116 happy_x_2 of { happy_var_2 -> -	happyIn115-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_378 = happySpecReduce_1  107# happyReduction_378-happyReduction_378 happy_x_1-	 =  case happyOut117 happy_x_1 of { happy_var_1 -> -	happyIn116-		 (defaultNamedArg happy_var_1-	)}--happyReduce_379 = happySpecReduce_3  107# happyReduction_379-happyReduction_379 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn116-		 (setHiding Hidden   $ defaultNamedArg happy_var_2-	)}--happyReduce_380 = happySpecReduce_3  107# happyReduction_380-happyReduction_380 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn116-		 (setHiding Instance $ defaultNamedArg happy_var_2-	)}--happyReduce_381 = happyReduce 5# 107# happyReduction_381-happyReduction_381 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_2 of { happy_var_2 -> -	case happyOut118 happy_x_4 of { happy_var_4 -> -	happyIn116-		 (setHiding Hidden   $ defaultArg $ named happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_382 = happyReduce 5# 107# happyReduction_382-happyReduction_382 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_2 of { happy_var_2 -> -	case happyOut118 happy_x_4 of { happy_var_4 -> -	happyIn116-		 (setHiding Instance $ defaultArg $ named happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_383 = happySpecReduce_1  108# happyReduction_383-happyReduction_383 happy_x_1-	 =  case happyOut119 happy_x_1 of { happy_var_1 -> -	happyIn117-		 (ExprHole (rangedThing happy_var_1)-	)}--happyReduce_384 = happyReduce 6# 108# happyReduction_384-happyReduction_384 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_3 of { happy_var_3 -> -	case happyOut119 happy_x_5 of { happy_var_5 -> -	happyIn117-		 (LambdaHole (rangedThing happy_var_3) (rangedThing happy_var_5)-	) `HappyStk` happyRest}}--happyReduce_385 = happyReduce 6# 108# happyReduction_385-happyReduction_385 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_5 of { happy_var_5 -> -	happyIn117-		 (LambdaHole "_" (rangedThing happy_var_5)-	) `HappyStk` happyRest}--happyReduce_386 = happySpecReduce_1  109# happyReduction_386-happyReduction_386 happy_x_1-	 =  case happyOut119 happy_x_1 of { happy_var_1 -> -	happyIn118-		 (ExprHole (rangedThing happy_var_1)-	)}--happyReduce_387 = happyReduce 4# 109# happyReduction_387-happyReduction_387 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_2 of { happy_var_2 -> -	case happyOut119 happy_x_4 of { happy_var_4 -> -	happyIn118-		 (LambdaHole (rangedThing happy_var_2) (rangedThing happy_var_4)-	) `HappyStk` happyRest}}--happyReduce_388 = happyReduce 4# 109# happyReduction_388-happyReduction_388 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut119 happy_x_4 of { happy_var_4 -> -	happyIn118-		 (LambdaHole "_" (rangedThing happy_var_4)-	) `HappyStk` happyRest}--happyReduce_389 = happySpecReduce_1  110# happyReduction_389-happyReduction_389 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn119-		 (Ranged (getRange $ fst happy_var_1) (stringToRawName $ snd happy_var_1)-	)}--happyReduce_390 = happySpecReduce_1  111# happyReduction_390-happyReduction_390 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	happyIn120-		 (Just (getRange happy_var_1)-	)}--happyReduce_391 = happySpecReduce_0  111# happyReduction_391-happyReduction_391  =  happyIn120-		 (Nothing-	)--happyReduce_392 = happyMonadReduce 5# 112# happyReduction_392-happyReduction_392 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut120 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> -	case happyOut25 happy_x_3 of { happy_var_3 -> -	case happyOut122 happy_x_4 of { happy_var_4 -> -	case happyOut73 happy_x_5 of { happy_var_5 -> -	(-    let-    { doOpen = maybe DontOpen (const DoOpen) happy_var_1-    ; m   = happy_var_3-    ; es  = happy_var_4-    ; dir = happy_var_5-    ; r   = getRange (m, es, dir)-    ; mr  = getRange m-    ; unique = hashString $ show $ (Nothing :: Maybe ()) <$ r-         -- turn range into unique id, but delete file path-         -- which is absolute and messes up suite of failing tests-         -- (different hashs on different installations)-         -- TODO: Don't use (insecure) hashes in this way.-    ; fresh = Name mr [ Id $ stringToRawName $ ".#" ++ show m ++ "-" ++ show unique ]-    ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir-    ; appStm m' es =-        let r = getRange (m, es) in-        Private r Inserted-          [ ModuleMacro r m'-             (SectionApp (getRange es) []-               (RawApp (getRange es) (Ident (QName fresh) : es)))-             doOpen dir-          ]-    ; (initArgs, last2Args) = splitAt (length es - 2) es-    ; parseAsClause = case last2Args of-      { [ Ident (QName (Name asR [Id x]))-        , Ident (QName m')-        ] | rawNameToString x == "as" -> Just (asR, m')-      ; _ -> Nothing-      }-    } in-    case es of-      { [] -> return [Import mr m Nothing doOpen dir]-      ; _ | Just (asR, m') <- parseAsClause ->-              if null initArgs then return-                 [ Import (getRange (m, asR, m', dir)) m-                     (Just (AsName m' asR)) doOpen dir-                 ]-              else return [ impStm asR, appStm m' initArgs ]-          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart' $ getRange happy_var_2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."-          | otherwise -> return-              [ impStm noRange-              , appStm (noName $ beginningOf $ getRange m) es-              ]-      })}}}}}-	) (\r -> happyReturn (happyIn121 r))--happyReduce_393 = happyReduce 4# 112# happyReduction_393-happyReduction_393 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_2 of { happy_var_2 -> -	case happyOut122 happy_x_3 of { happy_var_3 -> -	case happyOut73 happy_x_4 of { happy_var_4 -> -	happyIn121-		 (let-    { m   = happy_var_2-    ; es  = happy_var_3-    ; dir = happy_var_4-    ; r   = getRange (m, es, dir)-    } in-    [ case es of-      { []  -> Open r m dir-      ; _   -> Private r Inserted-                 [ ModuleMacro r (noName $ beginningOf $ getRange m)-                             (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))-                             DoOpen dir-                 ]-      }-    ]-	) `HappyStk` happyRest}}}--happyReduce_394 = happyReduce 6# 112# happyReduction_394-happyReduction_394 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_2 of { happy_var_2 -> -	case happyOut73 happy_x_6 of { happy_var_6 -> -	happyIn121-		 (let r = getRange happy_var_2 in-    [ Private r Inserted-      [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) (RecordModuleIFS r happy_var_2) DoOpen happy_var_6-      ]-    ]-	) `HappyStk` happyRest}}--happyReduce_395 = happySpecReduce_0  113# happyReduction_395-happyReduction_395  =  happyIn122-		 ([]-	)--happyReduce_396 = happySpecReduce_2  113# happyReduction_396-happyReduction_396 happy_x_2-	happy_x_1-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> -	case happyOut122 happy_x_2 of { happy_var_2 -> -	happyIn122-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_397 = happyReduce 4# 114# happyReduction_397-happyReduction_397 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymEllipsis happy_var_3) -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn123-		 ((\ts ->-                    if null ts then return $ RecordModuleIFS (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_1-                    else parseError "No bindings allowed for record module with non-canonical implicits" )-	) `HappyStk` happyRest}}}}--happyReduce_398 = happySpecReduce_2  114# happyReduction_398-happyReduction_398 happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> -	case happyOut122 happy_x_2 of { happy_var_2 -> -	happyIn123-		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )-	)}}--happyReduce_399 = happyMonadReduce 6# 115# happyReduction_399-happyReduction_399 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut25 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOut123 happy_x_5 of { happy_var_5 -> -	case happyOut73 happy_x_6 of { happy_var_6 -> -	( do { ma <- happy_var_5 (map addType happy_var_3)-                          ; name <- ensureUnqual happy_var_2-                          ; return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) name ma DontOpen happy_var_6 })}}}}}-	) (\r -> happyReturn (happyIn124 r))--happyReduce_400 = happyMonadReduce 7# 115# happyReduction_400-happyReduction_400 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwModule happy_var_2) -> -	case happyOut18 happy_x_3 of { happy_var_3 -> -	case happyOut70 happy_x_4 of { happy_var_4 -> -	case happyOut123 happy_x_6 of { happy_var_6 -> -	case happyOut73 happy_x_7 of { happy_var_7 -> -	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, happy_var_3, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}}-	) (\r -> happyReturn (happyIn124 r))--happyReduce_401 = happyReduce 5# 116# happyReduction_401-happyReduction_401 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut25 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut168 happy_x_5 of { happy_var_5 -> -	happyIn125-		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_402 = happyReduce 5# 116# happyReduction_402-happyReduction_402 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut126 happy_x_2 of { happy_var_2 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut168 happy_x_5 of { happy_var_5 -> -	happyIn125-		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_403 = happySpecReduce_1  117# happyReduction_403-happyReduction_403 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn126-		 (noName (getRange happy_var_1)-	)}--happyReduce_404 = happySpecReduce_1  118# happyReduction_404-happyReduction_404 happy_x_1-	 =  case happyOut170 happy_x_1 of { happy_var_1 -> -	happyIn127-		 (figureOutTopLevelModule happy_var_1-	)}--happyReduce_405 = happySpecReduce_1  119# happyReduction_405-happyReduction_405 happy_x_1-	 =  case happyOut129 happy_x_1 of { happy_var_1 -> -	happyIn128-		 (Pragma happy_var_1-	)}--happyReduce_406 = happySpecReduce_1  120# happyReduction_406-happyReduction_406 happy_x_1-	 =  case happyOut131 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_407 = happySpecReduce_1  120# happyReduction_407-happyReduction_407 happy_x_1-	 =  case happyOut132 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_408 = happySpecReduce_1  120# happyReduction_408-happyReduction_408 happy_x_1-	 =  case happyOut133 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_409 = happySpecReduce_1  120# happyReduction_409-happyReduction_409 happy_x_1-	 =  case happyOut134 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_410 = happySpecReduce_1  120# happyReduction_410-happyReduction_410 happy_x_1-	 =  case happyOut137 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_411 = happySpecReduce_1  120# happyReduction_411-happyReduction_411 happy_x_1-	 =  case happyOut135 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_412 = happySpecReduce_1  120# happyReduction_412-happyReduction_412 happy_x_1-	 =  case happyOut136 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_413 = happySpecReduce_1  120# happyReduction_413-happyReduction_413 happy_x_1-	 =  case happyOut138 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_414 = happySpecReduce_1  120# happyReduction_414-happyReduction_414 happy_x_1-	 =  case happyOut139 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_415 = happySpecReduce_1  120# happyReduction_415-happyReduction_415 happy_x_1-	 =  case happyOut140 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_416 = happySpecReduce_1  120# happyReduction_416-happyReduction_416 happy_x_1-	 =  case happyOut141 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_417 = happySpecReduce_1  120# happyReduction_417-happyReduction_417 happy_x_1-	 =  case happyOut142 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_418 = happySpecReduce_1  120# happyReduction_418-happyReduction_418 happy_x_1-	 =  case happyOut143 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_419 = happySpecReduce_1  120# happyReduction_419-happyReduction_419 happy_x_1-	 =  case happyOut144 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_420 = happySpecReduce_1  120# happyReduction_420-happyReduction_420 happy_x_1-	 =  case happyOut151 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_421 = happySpecReduce_1  120# happyReduction_421-happyReduction_421 happy_x_1-	 =  case happyOut152 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_422 = happySpecReduce_1  120# happyReduction_422-happyReduction_422 happy_x_1-	 =  case happyOut153 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_423 = happySpecReduce_1  120# happyReduction_423-happyReduction_423 happy_x_1-	 =  case happyOut148 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_424 = happySpecReduce_1  120# happyReduction_424-happyReduction_424 happy_x_1-	 =  case happyOut147 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_425 = happySpecReduce_1  120# happyReduction_425-happyReduction_425 happy_x_1-	 =  case happyOut146 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_426 = happySpecReduce_1  120# happyReduction_426-happyReduction_426 happy_x_1-	 =  case happyOut149 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_427 = happySpecReduce_1  120# happyReduction_427-happyReduction_427 happy_x_1-	 =  case happyOut150 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_428 = happySpecReduce_1  120# happyReduction_428-happyReduction_428 happy_x_1-	 =  case happyOut145 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_429 = happySpecReduce_1  120# happyReduction_429-happyReduction_429 happy_x_1-	 =  case happyOut154 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_430 = happySpecReduce_1  120# happyReduction_430-happyReduction_430 happy_x_1-	 =  case happyOut155 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_431 = happySpecReduce_1  120# happyReduction_431-happyReduction_431 happy_x_1-	 =  case happyOut130 happy_x_1 of { happy_var_1 -> -	happyIn129-		 (happy_var_1-	)}--happyReduce_432 = happyReduce 4# 121# happyReduction_432-happyReduction_432 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwOPTIONS happy_var_2) -> -	case happyOut31 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn130-		 (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}}--happyReduce_433 = happyReduce 5# 122# happyReduction_433-happyReduction_433 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOut35 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn131-		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) (Ident happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_434 = happyReduce 5# 122# happyReduction_434-happyReduction_434 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokKeyword KwREWRITE happy_var_3) -> -	case happyOut35 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn131-		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) "REWRITE" (Ident happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_435 = happyReduce 4# 123# happyReduction_435-happyReduction_435 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwREWRITE happy_var_2) -> -	case happyOut36 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn132-		 (RewritePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}}--happyReduce_436 = happyReduce 5# 124# happyReduction_436-happyReduction_436 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn133-		 (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_437 = happyReduce 5# 125# happyReduction_437-happyReduction_437 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EXPORT happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut32 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn134-		 (CompiledExportPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 happy_var_4-	) `HappyStk` happyRest}}}}}--happyReduce_438 = happyReduce 5# 126# happyReduction_438-happyReduction_438 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn135-		 (CompiledDeclareDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_439 = happyReduce 5# 127# happyReduction_439-happyReduction_439 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_TYPE happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn136-		 (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_440 = happyReduce 6# 128# happyReduction_440-happyReduction_440 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> -	case happyOut31 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> -	happyIn137-		 (CompiledDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5-	) `HappyStk` happyRest}}}}}}--happyReduce_441 = happyReduce 5# 129# happyReduction_441-happyReduction_441 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EPIC happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn138-		 (CompiledEpicPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_442 = happyReduce 5# 130# happyReduction_442-happyReduction_442 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_JS happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn139-		 (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_443 = happyReduce 5# 131# happyReduction_443-happyReduction_443 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_UHC happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn140-		 (CompiledUHCPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}}--happyReduce_444 = happyReduce 6# 132# happyReduction_444-happyReduction_444 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA_UHC happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> -	case happyOut31 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> -	happyIn141-		 (CompiledDataUHCPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5-	) `HappyStk` happyRest}}}}}}--happyReduce_445 = happyReduce 4# 133# happyReduction_445-happyReduction_445 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwHASKELL happy_var_2) -> -	case happyOut33 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn142-		 (HaskellCodePragma (getRange (happy_var_1, happy_var_2, happy_var_4)) (recoverLayout happy_var_3)-	) `HappyStk` happyRest}}}}--happyReduce_446 = happyReduce 4# 134# happyReduction_446-happyReduction_446 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwSTATIC happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn143-		 (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}}--happyReduce_447 = happyReduce 4# 135# happyReduction_447-happyReduction_447 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwINLINE happy_var_2) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn144-		 (InlinePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}}--happyReduce_448 = happyMonadReduce 5# 136# happyReduction_448-happyReduction_448 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOut31 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	(-      let (r, s) = happy_var_3 in-      parseDisplayPragma (fuseRange happy_var_1 happy_var_5) (iStart r) (unwords (s : happy_var_4)))}}}}-	) (\r -> happyReturn (happyIn145 r))--happyReduce_449 = happySpecReduce_3  137# happyReduction_449-happyReduction_449 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn146-		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NoTerminationCheck-	)}}}--happyReduce_450 = happySpecReduce_3  138# happyReduction_450-happyReduction_450 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwNON_TERMINATING happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn147-		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NonTerminating-	)}}}--happyReduce_451 = happySpecReduce_3  139# happyReduction_451-happyReduction_451 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwTERMINATING happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn148-		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) Terminating-	)}}}--happyReduce_452 = happyReduce 4# 140# happyReduction_452-happyReduction_452 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwMEASURE happy_var_2) -> -	case happyOut34 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn149-		 (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in-      TerminationCheckPragma r (TerminationMeasure r happy_var_3)-	) `HappyStk` happyRest}}}}--happyReduce_453 = happySpecReduce_3  141# happyReduction_453-happyReduction_453 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwCATCHALL happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn150-		 (CatchallPragma (getRange (happy_var_1,happy_var_2,happy_var_3))-	)}}}--happyReduce_454 = happyMonadReduce 4# 142# happyReduction_454-happyReduction_454 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	( let s = snd happy_var_3 in-       if validHaskellModuleName s-       then return $ ImportPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}}-	) (\r -> happyReturn (happyIn151 r))--happyReduce_455 = happyMonadReduce 4# 143# happyReduction_455-happyReduction_455 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT_UHC happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	( let s = snd happy_var_3 in-       if validHaskellModuleName s-       then return $ ImportUHCPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}}-	) (\r -> happyReturn (happyIn152 r))--happyReduce_456 = happySpecReduce_3  144# happyReduction_456-happyReduction_456 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwIMPOSSIBLE happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn153-		 (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))-	)}}}--happyReduce_457 = happySpecReduce_3  145# happyReduction_457-happyReduction_457 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwNO_POSITIVITY_CHECK happy_var_2) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn154-		 (NoPositivityCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3))-	)}}}--happyReduce_458 = happyReduce 5# 146# happyReduction_458-happyReduction_458 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokKeyword KwPOLARITY happy_var_2) -> -	case happyOut34 happy_x_3 of { happy_var_3 -> -	case happyOut156 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn155-		 (let (rs, occs) = unzip (reverse happy_var_4) in-      PolarityPragma (getRange (happy_var_1,happy_var_2,happy_var_3,rs,happy_var_5)) happy_var_3 occs-	) `HappyStk` happyRest}}}}}--happyReduce_459 = happySpecReduce_0  147# happyReduction_459-happyReduction_459  =  happyIn156-		 ([]-	)--happyReduce_460 = happySpecReduce_2  147# happyReduction_460-happyReduction_460 happy_x_2-	happy_x_1-	 =  case happyOut156 happy_x_1 of { happy_var_1 -> -	case happyOut157 happy_x_2 of { happy_var_2 -> -	happyIn156-		 (happy_var_2 : happy_var_1-	)}}--happyReduce_461 = happyMonadReduce 1# 148# happyReduction_461-happyReduction_461 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	( polarity happy_var_1)}-	) (\r -> happyReturn (happyIn157 r))--happyReduce_462 = happySpecReduce_3  149# happyReduction_462-happyReduction_462 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut159 happy_x_2 of { happy_var_2 -> -	happyIn158-		 (reverse happy_var_2-	)}--happyReduce_463 = happySpecReduce_3  150# happyReduction_463-happyReduction_463 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut159 happy_x_1 of { happy_var_1 -> -	case happyOut92 happy_x_3 of { happy_var_3 -> -	happyIn159-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_464 = happySpecReduce_1  150# happyReduction_464-happyReduction_464 happy_x_1-	 =  case happyOut92 happy_x_1 of { happy_var_1 -> -	happyIn159-		 (reverse happy_var_1-	)}--happyReduce_465 = happySpecReduce_3  151# happyReduction_465-happyReduction_465 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut161 happy_x_2 of { happy_var_2 -> -	happyIn160-		 (reverse happy_var_2-	)}--happyReduce_466 = happySpecReduce_3  152# happyReduction_466-happyReduction_466 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut161 happy_x_1 of { happy_var_1 -> -	case happyOut93 happy_x_3 of { happy_var_3 -> -	happyIn161-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_467 = happySpecReduce_1  152# happyReduction_467-happyReduction_467 happy_x_1-	 =  case happyOut93 happy_x_1 of { happy_var_1 -> -	happyIn161-		 (reverse happy_var_1-	)}--happyReduce_468 = happyMonadReduce 3# 153# happyReduction_468-happyReduction_468 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut163 happy_x_2 of { happy_var_2 -> -	( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure []))}-	) (\r -> happyReturn (happyIn162 r))--happyReduce_469 = happyMonadReduce 5# 153# happyReduction_469-happyReduction_469 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut163 happy_x_2 of { happy_var_2 -> -	case happyOut169 happy_x_4 of { happy_var_4 -> -	( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure happy_var_4))}}-	) (\r -> happyReturn (happyIn162 r))--happyReduce_470 = happyMonadReduce 3# 153# happyReduction_470-happyReduction_470 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut169 happy_x_2 of { happy_var_2 -> -	( ((,) `fmap` verifyRecordDirectives [] <*> pure happy_var_2))}-	) (\r -> happyReturn (happyIn162 r))--happyReduce_471 = happySpecReduce_0  154# happyReduction_471-happyReduction_471  =  happyIn163-		 ([]-	)--happyReduce_472 = happySpecReduce_3  154# happyReduction_472-happyReduction_472 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut163 happy_x_1 of { happy_var_1 -> -	case happyOut164 happy_x_3 of { happy_var_3 -> -	happyIn163-		 (happy_var_3 : happy_var_1-	)}}--happyReduce_473 = happySpecReduce_1  154# happyReduction_473-happyReduction_473 happy_x_1-	 =  case happyOut164 happy_x_1 of { happy_var_1 -> -	happyIn163-		 ([happy_var_1]-	)}--happyReduce_474 = happySpecReduce_1  155# happyReduction_474-happyReduction_474 happy_x_1-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> -	happyIn164-		 (Constructor happy_var_1-	)}--happyReduce_475 = happySpecReduce_1  155# happyReduction_475-happyReduction_475 happy_x_1-	 =  case happyOut166 happy_x_1 of { happy_var_1 -> -	happyIn164-		 (Induction happy_var_1-	)}--happyReduce_476 = happySpecReduce_1  155# happyReduction_476-happyReduction_476 happy_x_1-	 =  case happyOut165 happy_x_1 of { happy_var_1 -> -	happyIn164-		 (Eta happy_var_1-	)}--happyReduce_477 = happySpecReduce_1  156# happyReduction_477-happyReduction_477 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> -	happyIn165-		 (Ranged (getRange happy_var_1) True-	)}--happyReduce_478 = happySpecReduce_1  156# happyReduction_478-happyReduction_478 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> -	happyIn165-		 (Ranged (getRange happy_var_1) False-	)}--happyReduce_479 = happySpecReduce_1  157# happyReduction_479-happyReduction_479 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> -	happyIn166-		 (Ranged (getRange happy_var_1) Inductive-	)}--happyReduce_480 = happySpecReduce_1  157# happyReduction_480-happyReduction_480 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> -	happyIn166-		 (Ranged (getRange happy_var_1) CoInductive-	)}--happyReduce_481 = happySpecReduce_3  158# happyReduction_481-happyReduction_481 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut169 happy_x_2 of { happy_var_2 -> -	happyIn167-		 (happy_var_2-	)}--happyReduce_482 = happySpecReduce_2  159# happyReduction_482-happyReduction_482 happy_x_2-	happy_x_1-	 =  happyIn168-		 ([]-	)--happyReduce_483 = happySpecReduce_1  159# happyReduction_483-happyReduction_483 happy_x_1-	 =  case happyOut167 happy_x_1 of { happy_var_1 -> -	happyIn168-		 (happy_var_1-	)}--happyReduce_484 = happySpecReduce_3  160# happyReduction_484-happyReduction_484 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> -	case happyOut169 happy_x_3 of { happy_var_3 -> -	happyIn169-		 (happy_var_1 ++ happy_var_3-	)}}--happyReduce_485 = happySpecReduce_1  160# happyReduction_485-happyReduction_485 happy_x_1-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> -	happyIn169-		 (happy_var_1-	)}--happyReduce_486 = happySpecReduce_0  161# happyReduction_486-happyReduction_486  =  happyIn170-		 ([]-	)--happyReduce_487 = happySpecReduce_1  161# happyReduction_487-happyReduction_487 happy_x_1-	 =  case happyOut169 happy_x_1 of { happy_var_1 -> -	happyIn170-		 (happy_var_1-	)}--happyNewToken action sts stk-	= lexer(\tk -> -	let cont i = happyDoAction i tk action sts stk in-	case tk of {-	TokEOF -> happyDoAction 105# tk action sts stk;-	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 KwEta happy_dollar_dollar -> cont 6#;-	TokKeyword KwField happy_dollar_dollar -> cont 7#;-	TokKeyword KwForall happy_dollar_dollar -> cont 8#;-	TokKeyword KwHiding happy_dollar_dollar -> cont 9#;-	TokKeyword KwImport happy_dollar_dollar -> cont 10#;-	TokKeyword KwIn happy_dollar_dollar -> cont 11#;-	TokKeyword KwInductive happy_dollar_dollar -> cont 12#;-	TokKeyword KwInfix happy_dollar_dollar -> cont 13#;-	TokKeyword KwInfixL happy_dollar_dollar -> cont 14#;-	TokKeyword KwInfixR happy_dollar_dollar -> cont 15#;-	TokKeyword KwInstance happy_dollar_dollar -> cont 16#;-	TokKeyword KwOverlap happy_dollar_dollar -> cont 17#;-	TokKeyword KwLet happy_dollar_dollar -> cont 18#;-	TokKeyword KwMacro happy_dollar_dollar -> cont 19#;-	TokKeyword KwModule happy_dollar_dollar -> cont 20#;-	TokKeyword KwMutual happy_dollar_dollar -> cont 21#;-	TokKeyword KwNoEta happy_dollar_dollar -> cont 22#;-	TokKeyword KwOpen happy_dollar_dollar -> cont 23#;-	TokKeyword KwPatternSyn happy_dollar_dollar -> cont 24#;-	TokKeyword KwPostulate happy_dollar_dollar -> cont 25#;-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 26#;-	TokKeyword KwPrivate happy_dollar_dollar -> cont 27#;-	TokKeyword KwProp happy_dollar_dollar -> cont 28#;-	TokKeyword KwPublic happy_dollar_dollar -> cont 29#;-	TokKeyword KwQuote happy_dollar_dollar -> cont 30#;-	TokKeyword KwQuoteContext happy_dollar_dollar -> cont 31#;-	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 32#;-	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 33#;-	TokKeyword KwRecord happy_dollar_dollar -> cont 34#;-	TokKeyword KwRenaming happy_dollar_dollar -> cont 35#;-	TokKeyword KwRewrite happy_dollar_dollar -> cont 36#;-	TokKeyword KwSet happy_dollar_dollar -> cont 37#;-	TokKeyword KwSyntax happy_dollar_dollar -> cont 38#;-	TokKeyword KwTactic happy_dollar_dollar -> cont 39#;-	TokKeyword KwTo happy_dollar_dollar -> cont 40#;-	TokKeyword KwUnquote happy_dollar_dollar -> cont 41#;-	TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 42#;-	TokKeyword KwUnquoteDef happy_dollar_dollar -> cont 43#;-	TokKeyword KwUsing happy_dollar_dollar -> cont 44#;-	TokKeyword KwWhere happy_dollar_dollar -> cont 45#;-	TokKeyword KwWith happy_dollar_dollar -> cont 46#;-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 47#;-	TokKeyword KwCATCHALL happy_dollar_dollar -> cont 48#;-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 49#;-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 50#;-	TokKeyword KwCOMPILED_DATA_UHC happy_dollar_dollar -> cont 51#;-	TokKeyword KwCOMPILED_DECLARE_DATA happy_dollar_dollar -> cont 52#;-	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 53#;-	TokKeyword KwCOMPILED_EXPORT happy_dollar_dollar -> cont 54#;-	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 55#;-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 56#;-	TokKeyword KwCOMPILED_UHC happy_dollar_dollar -> cont 57#;-	TokKeyword KwHASKELL happy_dollar_dollar -> cont 58#;-	TokKeyword KwDISPLAY happy_dollar_dollar -> cont 59#;-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 60#;-	TokKeyword KwIMPORT_UHC happy_dollar_dollar -> cont 61#;-	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 62#;-	TokKeyword KwINLINE happy_dollar_dollar -> cont 63#;-	TokKeyword KwMEASURE happy_dollar_dollar -> cont 64#;-	TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 65#;-	TokKeyword KwNO_POSITIVITY_CHECK happy_dollar_dollar -> cont 66#;-	TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 67#;-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 68#;-	TokKeyword KwPOLARITY happy_dollar_dollar -> cont 69#;-	TokKeyword KwREWRITE happy_dollar_dollar -> cont 70#;-	TokKeyword KwSTATIC happy_dollar_dollar -> cont 71#;-	TokKeyword KwTERMINATING happy_dollar_dollar -> cont 72#;-	TokSetN happy_dollar_dollar -> cont 73#;-	TokTeX happy_dollar_dollar -> cont 74#;-	TokComment happy_dollar_dollar -> cont 75#;-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 76#;-	TokSymbol SymDotDot happy_dollar_dollar -> cont 77#;-	TokSymbol SymDot happy_dollar_dollar -> cont 78#;-	TokSymbol SymSemi happy_dollar_dollar -> cont 79#;-	TokSymbol SymColon happy_dollar_dollar -> cont 80#;-	TokSymbol SymEqual happy_dollar_dollar -> cont 81#;-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 82#;-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 83#;-	TokSymbol SymArrow happy_dollar_dollar -> cont 84#;-	TokSymbol SymLambda happy_dollar_dollar -> cont 85#;-	TokSymbol SymAs happy_dollar_dollar -> cont 86#;-	TokSymbol SymBar happy_dollar_dollar -> cont 87#;-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 88#;-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 89#;-	TokSymbol SymOpenIdiomBracket happy_dollar_dollar -> cont 90#;-	TokSymbol SymCloseIdiomBracket happy_dollar_dollar -> cont 91#;-	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 92#;-	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 93#;-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 94#;-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 95#;-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 96#;-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 97#;-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 98#;-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 99#;-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 100#;-	TokId happy_dollar_dollar -> cont 101#;-	TokQId happy_dollar_dollar -> cont 102#;-	TokString happy_dollar_dollar -> cont 103#;-	TokLiteral happy_dollar_dollar -> cont 104#;-	_ -> happyError' tk-	})--happyError_ 105# tk = happyError' tk-happyError_ _ tk = happyError' tk--happyThen :: () => Parser a -> (a -> Parser b) -> Parser b-happyThen = (>>=)-happyReturn :: () => a -> Parser a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> Parser a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> Parser a-happyError' tk = (\token -> happyError) tk--tokensParser = happySomeParser where-  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut9 x))--exprParser = happySomeParser where-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut37 x))--exprWhereParser = happySomeParser where-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut90 x))--moduleParser = happySomeParser where-  happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut12 x))--moduleNameParser = happySomeParser where-  happySomeParser = happyThen (happyParse 4#) (\x -> happyReturn (happyOut25 x))--funclauseParser = happySomeParser where-  happySomeParser = happyThen (happyParse 5#) (\x -> happyReturn (happyOut94 x))--happySeq = happyDontSeq---{---------------------------------------------------------------------------    Parsers- --------------------------------------------------------------------------}---- | Parse the token stream. Used by the TeX compiler.-tokensParser :: Parser [Token]---- | Parse an expression. Could be used in interactions.-exprParser :: Parser Expr---- | Parse an expression followed by a where clause. Could be used in interactions.-exprWhereParser :: Parser ExprWhere---- | Parse a module.-moduleParser :: Parser Module---{---------------------------------------------------------------------------    Happy stuff- --------------------------------------------------------------------------}---- | Required by Happy.-happyError :: Parser a-happyError = parseError "Parse error"---{---------------------------------------------------------------------------    Utility functions- --------------------------------------------------------------------------}---- | Grab leading OPTIONS pragmas.-takeOptionsPragmas :: [Declaration] -> ([Pragma], [Declaration])-takeOptionsPragmas = spanJust $ \ d -> case d of-  Pragma p@OptionsPragma{} -> Just p-  _                        -> Nothing---- | Insert a top-level module if there is none.---   Also fix-up for the case the declarations in the top-level module---   are not indented (this is allowed as a special case).-figureOutTopLevelModule :: [Declaration] -> [Declaration]-figureOutTopLevelModule ds =-  case spanAllowedBeforeModule ds of-    -- Andreas 2016-02-01, issue #1388.-    -- We need to distinguish two additional cases.-    -- Case 1: Regular file layout: imports followed by one module. Nothing to do.-    (ds0, [ Module{} ]) -> ds-    -- Case 2: The declarations in the module are not indented.-    -- This is allowed for the top level module, and thus rectified here.-    (ds0, Module r m tel [] : ds2) -> ds0 ++ [Module r m tel ds2]-    -- Case 3: There is a module with indented declarations,-    -- followed by non-indented declarations.  This should be a-    -- parse error and be reported later (see @toAbstract TopLevel{}@),-    -- thus, we do not do anything here.-    (ds0, Module r m tel ds1 : ds2) -> ds  -- Gives parse error in scope checker.-    -- OLD code causing issue 1388:-    -- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]-    -- Case 4: a top-level module declaration is missing.-    (ds0, ds1)                      -> ds0 ++ [Module (getRange ds1) (QName noName_) [] ds1]---- | Create a name from a string.--mkName :: (Interval, String) -> Parser Name-mkName (i, s) = do-    let xs = C.stringNameParts s-    mapM_ isValidId xs-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"-    return $ Name (getRange i) xs-    where-        isValidId Hole   = return ()-        isValidId (Id y) = do-          let x = rawNameToString y-          case parse defaultParseFlags [0] (lexer return) x of-            ParseOk _ (TokId _) -> return ()-            _                   -> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"--        -- we know that there are no two Ids in a row-        alternating (Hole : Hole : _) = False-        alternating (_ : xs)          = alternating xs-        alternating []                = True---- | Create a qualified name from a list of strings-mkQName :: [(Interval, String)] -> Parser QName-mkQName ss = do-    xs <- mapM mkName ss-    return $ foldr Qual (QName $ last xs) (init xs)---- | Create a qualified name from a string (used in pragmas).---   Range of each name component is range of whole string.---   TODO: precise ranges!--pragmaQName :: (Interval, String) -> Parser QName-pragmaQName (r, s) = do-  let ss = chopWhen (== '.') s-  mkQName $ map (r,) ss---- | Polarity parser.--polarity :: (Interval, String) -> Parser (Range, Occurrence)-polarity (i, s) =-  case s of-    "_"  -> ret Unused-    "++" -> ret StrictPos-    "+"  -> ret JustPos-    "-"  -> ret JustNeg-    "*"  -> ret Mixed-    _    -> fail $ "Not a valid polarity: " ++ s-  where-  ret x = return (getRange i, x)--recoverLayout :: [(Interval, String)] -> String-recoverLayout [] = ""-recoverLayout xs@((i, _) : _) = go (iStart i) xs-  where-    c0 = posCol (iStart i)--    go cur [] = ""-    go cur ((i, s) : xs) = padding cur (iStart i) ++ s ++ go (iEnd i) xs--    padding Pn{ posLine = l1, posCol = c1 } Pn{ posLine = l2, posCol = c2 }-      | l1 < l2  = genericReplicate (l2 - l1) '\n' ++ genericReplicate (max 0 (c2 - c0)) ' '-      | l1 == l2 = genericReplicate (c2 - c1) ' '--ensureUnqual :: QName -> Parser Name-ensureUnqual (QName x) = return x-ensureUnqual q@Qual{}  = parseError' (rStart' $ getRange q) "Qualified name not allowed here"---- | Match a particular name.-isName :: String -> (Interval, String) -> Parser ()-isName s (_,s')-    | s == s'   = return ()-    | otherwise = fail $ "expected " ++ s ++ ", found " ++ s'---- | Build a forall pi (forall x y z -> ...)-forallPi :: [LamBinding] -> Expr -> Expr-forallPi bs e = Pi (map addType bs) e---- | Build a telescoping let (let Ds)-tLet :: Range -> [Declaration] -> TypedBindings-tLet r = TypedBindings r . Arg defaultArgInfo . TLet r---- | Converts lambda bindings to typed bindings.-addType :: LamBinding -> TypedBindings-addType (DomainFull b)   = b-addType (DomainFree info x) = TypedBindings r $ Arg info $ TBind r [pure x] $ Underscore r Nothing-  where r = getRange x--mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective-mergeImportDirectives is = do-  i <- foldl merge (return defaultImportDir) is-  verifyImportDirective i-  where-    merge mi i2 = do-      i1 <- mi-      let err = parseError' (rStart' $ getRange i2) "Cannot mix using and hiding module directives"-      return $ ImportDirective-        { importDirRange = fuseRange i1 i2-        , using          = mappend (using i1) (using i2)-        , hiding         = hiding i1 ++ hiding i2-        , impRenaming    = impRenaming i1 ++ impRenaming i2-        , publicOpen     = publicOpen i1 || publicOpen i2 }---- | Check that an import directive doesn't contain repeated names-verifyImportDirective :: ImportDirective -> Parser ImportDirective-verifyImportDirective i =-    case filter ((>1) . length)-         $ group-         $ sort xs-    of-        []  -> return i-        yss -> let Just pos = rStart' $ getRange $ head $ concat yss in-               parseErrorAt pos $-                "Repeated name" ++ s ++ " in import directive: " ++-                concat (intersperse ", " $ map (show . head) yss)-            where-                s = case yss of-                        [_] -> ""-                        _   -> "s"-    where-        xs = names (using i) ++ hiding i ++ map renFrom (impRenaming i)-        names (Using xs)    = xs-        names UseEverything = []--data RecordDirective-   = Induction (Ranged Induction)-   | Constructor (Name, IsInstance)-   | Eta         (Ranged Bool)-   deriving (Eq,Show)--verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance))-verifyRecordDirectives xs | null rs = return (ltm is, ltm es, ltm cs)-                          | otherwise = let Just pos = rStart' $ (head rs) in-                                          parseErrorAt pos $ "Repeated record directives at: \n" ++ intercalate "\n" (map show rs)-- where-  ltm :: [a] -> Maybe a-  ltm [] = Nothing-  ltm (x:xs) = Just x-  errorFromList [] = []-  errorFromList [x] = []-  errorFromList xs = map getRange xs-  rs = sort (concat ([errorFromList is, errorFromList es', errorFromList cs]))-  is = [ i | Induction i <- xs ]-  es' = [ i | Eta i <- xs ]-  es = map rangedThing es'-  cs = [ i | Constructor i <- xs ]----- | Breaks up a string into substrings. Returns every maximal--- subsequence of zero or more characters distinct from @'.'@.------ > splitOnDots ""         == [""]--- > splitOnDots "foo.bar"  == ["foo", "bar"]--- > splitOnDots ".foo.bar" == ["", "foo", "bar"]--- > splitOnDots "foo.bar." == ["foo", "bar", ""]--- > splitOnDots "foo..bar" == ["foo", "", "bar"]-splitOnDots :: String -> [String]-splitOnDots ""        = [""]-splitOnDots ('.' : s) = [] : splitOnDots s-splitOnDots (c   : s) = case splitOnDots s of-  p : ps -> (c : p) : ps----- | Returns 'True' iff the name is a valid Haskell (hierarchical)--- module name.-validHaskellModuleName :: String -> Bool-validHaskellModuleName = all ok . splitOnDots-  where-  -- Checks if a dot-less module name is well-formed.-  ok :: String -> Bool-  ok []      = False-  ok (c : s) =-    isUpper c &&-    all (\c -> isLower c || c == '_' ||-               isUpper c ||-               generalCategory c == DecimalNumber ||-               c == '\'')-        s--{---------------------------------------------------------------------------    Patterns- --------------------------------------------------------------------------}---- | Turn an expression into a left hand side.-exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)-exprToLHS e = case e of-  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es-  _              -> LHS <$> exprToPattern e <*> return []---- | Turn an expression into a pattern. Fails if the expression is not a---   valid pattern.-exprToPattern :: Expr -> Parser Pattern-exprToPattern e = do-    let Just pos = rStart' $ getRange e-        failure = parseErrorAt pos $ "Not a valid pattern: " ++ show e-    case e of-        Ident x                 -> return $ IdentP x-        App _ e1 e2             -> AppP <$> exprToPattern e1-                                        <*> T.mapM (T.mapM exprToPattern) e2-        Paren r e               -> ParenP r-                                        <$> exprToPattern e-        Underscore r _          -> return $ WildP r-        Absurd r                -> return $ AbsurdP r-        As r x e                -> AsP r x <$> exprToPattern e-        Dot r (HiddenArg _ e)   -> return $ HiddenP r $ fmap (DotP r UserWritten) e-        Dot r e                 -> return $ DotP r UserWritten e-        Lit l                   -> return $ LitP l-        HiddenArg r e           -> HiddenP r <$> T.mapM exprToPattern e-        InstanceArg r e         -> InstanceP r <$> T.mapM exprToPattern e-        RawApp r es             -> RawAppP r <$> mapM exprToPattern es-        Quote r                 -> return $ QuoteP r-        Rec r es | Just fs <- mapM maybeLeft es -> do-          RecP r <$> T.mapM (T.mapM exprToPattern) fs-        _                       -> failure--opAppExprToPattern :: OpApp Expr -> Parser Pattern-opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "Syntax binding lambda cannot appear in a pattern"-opAppExprToPattern (Ordinary e) = exprToPattern e---- | Turn an expression into a name. Fails if the expression is not a---   valid identifier.-exprToName :: Expr -> Parser Name-exprToName (Ident (QName x)) = return x-exprToName e =-  let Just pos = rStart' $ getRange e in-  parseErrorAt pos $ "Not a valid identifier: " ++ show e--stripSingletonRawApp :: Expr -> Expr-stripSingletonRawApp (RawApp _ [e]) = stripSingletonRawApp e-stripSingletonRawApp e = e--isEqual :: Expr -> Maybe (Expr, Expr)-isEqual e =-  case stripSingletonRawApp e of-    Equal _ a b -> Just (stripSingletonRawApp a, stripSingletonRawApp b)-    _           -> Nothing--maybeNamed :: Expr -> Named_ Expr-maybeNamed e =-  case isEqual e of-    Just (Ident (QName x), b) -> named (Ranged (getRange x) (nameToRawName x)) b-    _                         -> unnamed e--patternSynArgs :: [Either Hiding LamBinding] -> Parser [Arg Name]-patternSynArgs = mapM pSynArg-  where-    pSynArg Left{}                   = parseError "Absurd patterns are not allowed in pattern synonyms"-    pSynArg (Right DomainFull{})     = parseError "Unexpected type signature in pattern synonym argument"-    pSynArg (Right (DomainFree a x))-      | getHiding a `notElem` [Hidden, NotHidden] = parseError $ show (getHiding a) ++ " arguments not allowed to pattern synonyms"-      | getRelevance a /= Relevant                = parseError "Arguments to pattern synonyms must be relevant"-      | otherwise                                 = return $ Arg a (boundName x)--parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."--{- RHS or type signature -}--data RHSOrTypeSigs- = JustRHS RHS- | TypeSigsRHS Expr- deriving Show--patternToNames :: Pattern -> Parser [(ArgInfo, Name)]-patternToNames p =-  case p of-    IdentP (QName i)         -> return [(defaultArgInfo, i)]-    WildP r                  -> return [(defaultArgInfo, C.noName r)]-    DotP _ _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]-    RawAppP _ ps             -> concat <$> mapM patternToNames ps-    _                        -> parseError $-      "Illegal name in type signature: " ++ prettyShow p--funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]-funClauseOrTypeSigs lhs mrhs wh = do-  -- traceShowM lhs-  case mrhs of-    JustRHS rhs   -> return [FunClause lhs rhs wh False]-    TypeSigsRHS e -> case wh of-      NoWhere -> case lhs of-        Ellipsis{}      -> parseError "The ellipsis ... cannot have a type signature"-        LHS _ _ _ (_:_) -> parseError "Illegal: with in type signature"-        LHS _ _ (_:_) _ -> parseError "Illegal: rewrite in type signature"-        LHS _ (_:_) _ _ -> parseError "Illegal: with patterns in type signature"-        LHS p [] [] []  -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p-      _ -> parseError "A type signature cannot have a where clause"--parseDisplayPragma :: Range -> Position -> String -> Parser Pragma-parseDisplayPragma r pos s =-  case parsePosString pos defaultParseFlags [normal] funclauseParser s of-    ParseOk s [FunClause (LHS lhs [] [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->-      return $ DisplayPragma r lhs rhs-    _ -> parseError "Invalid DISPLAY pragma. Should have form {-# DISPLAY LHS = RHS #-}."-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-8.0.2-rc2/lib/ghc-8.0.1.20161213/include/ghcversion.h" #-}-------------------{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/tmp/ghc19165_0/ghc_2.h" #-}-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 13 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)-#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)-#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)-#else-#define LT(n,m) (n Happy_GHC_Exts.<# m)-#define GTE(n,m) (n Happy_GHC_Exts.>=# m)-#define EQ(n,m) (n Happy_GHC_Exts.==# m)-#endif-{-# LINE 46 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 67 "templates/GenericTemplate.hs" #-}--{-# LINE 77 "templates/GenericTemplate.hs" #-}--{-# LINE 86 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser).  We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =-        happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = -        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st-        = {- nothing -}---          case action of-                0#           -> {- nothing -}-                                     happyFail i tk st-                -1#          -> {- nothing -}-                                     happyAccept i tk st-                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}--                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st-                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))-                n                 -> {- nothing -}---                                     happyShift new_state i tk st-                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))-   where off    = indexShortOffAddr happyActOffsets st-         off_i  = (off Happy_GHC_Exts.+# i)-         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))-                  then EQ(indexShortOffAddr happyCheck off_i, i)-                  else False-         action-          | check     = indexShortOffAddr happyTable off_i-          | otherwise = indexShortOffAddr happyDefActions st---indexShortOffAddr (HappyA# arr) off =-        Happy_GHC_Exts.narrow16Int# i-  where-        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))-        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))-        off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---     trace "shifting the error token" $-     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =-     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk-     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')-     = let r = fn v1 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')-     = let r = fn v1 v2 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')-     = let r = fn v1 v2 v3 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk-     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of-         sts1@((HappyCons (st1@(action)) (_))) ->-                let r = fn stk in  -- it doesn't hurt to always seq here...-                happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =-      case happyDrop k (HappyCons (st) (sts)) of-        sts1@((HappyCons (st1@(action)) (_))) ->-          let drop_stk = happyDropStk k stk in-          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))--happyMonad2Reduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =-      case happyDrop k (HappyCons (st) (sts)) of-        sts1@((HappyCons (st1@(action)) (_))) ->-         let drop_stk = happyDropStk k stk--             off = indexShortOffAddr happyGotoOffsets st1-             off_i = (off Happy_GHC_Exts.+# nt)-             new_state = indexShortOffAddr happyTable off_i----          in-          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))--happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = -   {- nothing -}-   happyDoAction j tk new_state-   where off = indexShortOffAddr happyGotoOffsets st-         off_i = (off Happy_GHC_Exts.+# nt)-         new_state = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---      trace "failing" $ -        happyError_ i tk--{-  We don't need state discarding for our restricted implementation of-    "error".  In fact, it can cause some bogus parses, so I've disabled it-    for now --SDM---- discard a state-happyFail  0# tk old_st (HappyCons ((action)) (sts)) -                                                (saved_tok `HappyStk` _ `HappyStk` stk) =---      trace ("discarding state, depth " ++ show (length stk))  $-        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,---                       save the old token and carry on.-happyFail  i tk (action) sts stk =---      trace "entering error recovery" $-        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing.  If the --strict flag is given, then Happy emits ---      happySeq = happyDoSeq--- otherwise it emits---      happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq   a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template.  GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
src/data/JS/agda-rts.js view
@@ -21,6 +21,12 @@ exports.uprimIntegerMultiply = function(x,y) {   return x.multiply(y); };+exports.uprimIntegerRem = function(x, y) {+  return x.remainder(y);+};+exports.uprimIntegerQuot = function(x, y) {+  return x.quotient(y);+}; exports.uprimIntegerEqual = function(x,y) {   return x.compare(y) == 0; };@@ -169,4 +175,17 @@   return function(y) {     return exports.uprimQNameEquality(x, y);   };+};+exports.primQNameLess = function(x) {+  return function(y) {+    switch (x["id"].compare(y["id"])) {+      case -1: return true;+      case 1:  return false;+      case 0:+        return x["moduleId"].compare(y["moduleId"]) == -1;+    }+  };+};+exports.primQNameFixity = function(x) {+  return x["fixity"]; };
src/data/agda.sty view
@@ -4,7 +4,8 @@  \ProvidesPackage{agda} -\RequirePackage{ifxetex, ifluatex, xifthen, xcolor, polytable, etoolbox}+\RequirePackage{ifxetex, ifluatex, xifthen, xcolor, polytable, etoolbox,+                calc}  % https://tex.stackexchange.com/questions/47576/combining-ifxetex-and-ifluatex-with-the-logical-or-operation \newif\ifxetexorluatex@@ -18,6 +19,34 @@   \fi \fi +% ----------------------------------------------------------------------+% Options++\DeclareOption{bw}   {\newcommand{\AgdaColourScheme}{bw}}+\DeclareOption{conor}{\newcommand{\AgdaColourScheme}{conor}}++\newif\if@AgdaEnableReferences\@AgdaEnableReferencesfalse+\DeclareOption{references}{+  \@AgdaEnableReferencestrue+}++\newif\if@AgdaEnableLinks\@AgdaEnableLinksfalse+\DeclareOption{links}{+  \@AgdaEnableLinkstrue+}++% If the "nofontsetup" option is used, then some font packages are+% loaded, but specific fonts are not selected.+\newif\if@AgdaSetupFonts\@AgdaSetupFontstrue+\DeclareOption{nofontsetup}{+  \@AgdaSetupFontsfalse+}++\ProcessOptions\relax++% ----------------------------------------------------------------------+% Font setup+ % XeLaTeX or LuaLaTeX \ifxetexorluatex @@ -30,22 +59,25 @@      \tracinglostchars=2 % If the font is missing some symbol, then say                         % so in the compilation output.-    \setmainfont-      [ Ligatures      = TeX-      , BoldItalicFont = xits-bolditalic.otf-      , BoldFont       = xits-bold.otf-      , ItalicFont     = xits-italic.otf-      ]-      {xits-regular.otf} -    \setmathfont{xits-math.otf}-    \setmonofont[Mapping=tex-text]{FreeMono.otf}+    \if@AgdaSetupFonts+      \setmainfont+        [ Ligatures      = TeX+        , BoldItalicFont = xits-bolditalic.otf+        , BoldFont       = xits-bold.otf+        , ItalicFont     = xits-italic.otf+        ]+        {xits-regular.otf} -    % Make mathcal and mathscr appear as different.-    % https://tex.stackexchange.com/questions/120065/xetex-what-happened-to-mathcal-and-mathscr-    \setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}-    \setmathfont[range=\mathscr]{xits-math.otf}+      \setmathfont{xits-math.otf}+      \setmonofont[Mapping=tex-text]{FreeMono.otf} +      % Make mathcal and mathscr appear as different.+      % https://tex.stackexchange.com/questions/120065/xetex-what-happened-to-mathcal-and-mathscr+      \setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}+      \setmathfont[range=\mathscr]{xits-math.otf}+    \fi+     \providecommand{\DeclareUnicodeCharacter}[2]{\relax}  % pdfLaTeX@@ -60,24 +92,6 @@ \fi  % -----------------------------------------------------------------------% Options--\DeclareOption{bw}   {\newcommand{\AgdaColourScheme}{bw}}-\DeclareOption{conor}{\newcommand{\AgdaColourScheme}{conor}}--\newif\if@AgdaEnableReferences\@AgdaEnableReferencesfalse-\DeclareOption{references}{-  \@AgdaEnableReferencestrue-}--\newif\if@AgdaEnableLinks\@AgdaEnableLinksfalse-\DeclareOption{links}{-  \@AgdaEnableLinkstrue-}--\ProcessOptions\relax--% ---------------------------------------------------------------------- % Colour schemes.  \providecommand{\AgdaColourScheme}{standard}@@ -181,6 +195,7 @@      % Aspect colours.     \definecolor{AgdaComment}      {HTML}{000000}+    \definecolor{AgdaOption}       {HTML}{000000}     \definecolor{AgdaKeyword}      {HTML}{000000}     \definecolor{AgdaString}       {HTML}{000000}     \definecolor{AgdaNumber}       {HTML}{000000}@@ -218,6 +233,7 @@      % Aspect colours.     \definecolor{AgdaComment}      {HTML}{B22222}+    \definecolor{AgdaOption}       {HTML}{000000}     \definecolor{AgdaKeyword}      {HTML}{000000}     \definecolor{AgdaString}       {HTML}{000000}     \definecolor{AgdaNumber}       {HTML}{000000}@@ -254,6 +270,7 @@ }{     % Aspect colours.     \definecolor{AgdaComment}      {HTML}{B22222}+    \definecolor{AgdaOption}       {HTML}{000000}     \definecolor{AgdaKeyword}      {HTML}{CD6600}     \definecolor{AgdaString}       {HTML}{B22222}     \definecolor{AgdaNumber}       {HTML}{A020F0}@@ -289,46 +306,72 @@ % ---------------------------------------------------------------------- % Commands. +\newcommand{\AgdaNoSpaceMath}[1]+    {\begingroup\thickmuskip=0mu\medmuskip=0mu#1\endgroup}+ % Aspect commands. \newcommand{\AgdaComment}     [1]-    {\AgdaCommentFontStyle{\textcolor{AgdaComment}{#1}}}+    {\AgdaNoSpaceMath{\AgdaCommentFontStyle{\textcolor{AgdaComment}{#1}}}}+\newcommand{\AgdaOption}      [1]+    {\AgdaNoSpaceMath{\AgdaCommentFontStyle{\textcolor{AgdaOption}{#1}}}} \newcommand{\AgdaKeyword}     [1]-    {\AgdaKeywordFontStyle{\textcolor{AgdaKeyword}{#1}}}-\newcommand{\AgdaString}      [1]{\AgdaStringFontStyle{\textcolor{AgdaString}{#1}}}-\newcommand{\AgdaNumber}      [1]{\AgdaFontStyle{\textcolor{AgdaNumber}{#1}}}-\newcommand{\AgdaSymbol}      [1]{\AgdaFontStyle{\textcolor{AgdaSymbol}{#1}}}+    {\AgdaNoSpaceMath{\AgdaKeywordFontStyle{\textcolor{AgdaKeyword}{#1}}}}+\newcommand{\AgdaString}      [1]+    {\AgdaNoSpaceMath{\AgdaStringFontStyle{\textcolor{AgdaString}{#1}}}}+\newcommand{\AgdaNumber}      [1]+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaNumber}{#1}}}}+\newcommand{\AgdaSymbol}      [1]+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaSymbol}{#1}}}} \newcommand{\AgdaPrimitiveType}[1]-    {\AgdaFontStyle{\textcolor{AgdaPrimitiveType}{#1}}}-\newcommand{\AgdaOperator}    [1]{\AgdaFontStyle{\textcolor{AgdaOperator}{#1}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPrimitiveType}{#1}}}}+\newcommand{\AgdaOperator}    [1]+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaOperator}{#1}}}}  % NameKind commands.-\newcommand{\AgdaNoSpaceMath}[1]-    {\begingroup\thickmuskip=0mu\medmuskip=0mu#1\endgroup} +% The user can control the typesetting of (certain) individual tokens+% by redefining the following command. The first argument is the token+% and the second argument the thing to be typeset (sometimes just the+% token, sometimes \AgdaLink{<the token>}). Example:+%+%   \usepackage{ifthen}+%+%   % Insert extra space before some tokens.+%   \DeclareRobustCommand{\AgdaFormat}[2]{%+%     \ifthenelse{+%       \equal{#1}{≡⟨} \OR+%       \equal{#1}{≡⟨⟩} \OR+%       \equal{#1}{∎}+%     }{\ }{}#2}+%+% Note the use of \DeclareRobustCommand.++\newcommand{\AgdaFormat}[2]{#2}+ \newcommand{\AgdaBound}[1]-    {\AgdaNoSpaceMath{\AgdaBoundFontStyle{\textcolor{AgdaBound}{#1}}}}+    {\AgdaNoSpaceMath{\AgdaBoundFontStyle{\textcolor{AgdaBound}{\AgdaFormat{#1}{#1}}}}} \newcommand{\AgdaInductiveConstructor}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaInductiveConstructor}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaInductiveConstructor}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaCoinductiveConstructor}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaCoinductiveConstructor}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaCoinductiveConstructor}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaDatatype}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaDatatype}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaDatatype}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaField}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaField}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaField}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaFunction}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaFunction}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaFunction}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaMacro}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaMacro}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaMacro}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaModule}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaModule}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaModule}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaPostulate}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPostulate}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPostulate}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaPrimitive}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPrimitive}{#1}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPrimitive}{\AgdaFormat{#1}{#1}}}}} \newcommand{\AgdaRecord}[1]-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaRecord}{\AgdaLink{#1}}}}}+    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaRecord}{\AgdaFormat{#1}{\AgdaLink{#1}}}}}} \newcommand{\AgdaArgument}[1]-    {\AgdaNoSpaceMath{\AgdaBoundFontStyle{\textcolor{AgdaArgument}{#1}}}}+    {\AgdaNoSpaceMath{\AgdaBoundFontStyle{\textcolor{AgdaArgument}{\AgdaFormat{#1}{#1}}}}}  % Other aspect commands. \newcommand{\AgdaFixityOp}          [1]{\AgdaNoSpaceMath{$#1$}}@@ -345,8 +388,6 @@ \newcommand{\AgdaHole}[1]{\colorbox{AgdaHole}{#1}} \long\def\AgdaHide#1{\ignorespaces} % Used to hide code from LaTeX. -\newcommand{\AgdaIndent}[1]{$\;\;$}- % ---------------------------------------------------------------------- % The code environment. @@ -498,6 +539,14 @@   \Agda@AlignEnd{}%   \ignorespacesafterend} +% Vertical space used for empty lines. By default \baselineskip.+\newlength{\AgdaEmptySkip}+\setlength{\AgdaEmptySkip}{\baselineskip}++% Extra space to be inserted for empty lines (the difference between+% \AgdaEmptySkip and \baselineskip). Used internally.+\newlength{\AgdaEmptyExtraSkip}+ % The code environment. % % The implementation is based on plainhscode in lhs2TeX's@@ -510,6 +559,7 @@     \AgdaNewlineWithVerticalSpace{\abovedisplayskip}}%   \advance\leftskip\mathindent%   \AgdaCodeStyle%+  \setlength{\AgdaEmptyExtraSkip}{\AgdaEmptySkip - \baselineskip}%   \pboxed%   \ifthenelse{\value{Agda@Align} = 0}{}{%     \ifthenelse{\value{Agda@AlignCurrent} = 1}{%@@ -526,7 +576,28 @@   \stepcounter{Agda@SuppressCurrent}%   \ignorespacesafterend} +% Space inserted after tokens.+\newcommand{\AgdaSpace}{ }++% Space inserted to indent something.+\newcommand{\AgdaIndentSpace}{\AgdaSpace{}$\;\;$}+ % Default column for polytable.-\defaultcolumn{@{~}l@{~}}+\defaultcolumn{@{}l@{\AgdaSpace{}}}++% \AgdaIndent expects a non-negative integer as its only argument.+% This integer should be the distance, in code blocks, to the thing+% relative to which the text is indented.+%+% The default implementation only indents if the thing that the text+% is indented relative to exists in the same code block or is wrapped+% in the same AgdaAlign or AgdaMultiCode environment.+\newcommand{\AgdaIndent}[1]{%+  \ifthenelse{#1 = 0+                \OR+              \( \value{Agda@Align} = 1+                   \AND+                 #1 < \value{Agda@AlignCurrent}+              \)}{\AgdaIndentSpace{}}{}}  \endinput
src/data/emacs-mode/agda-input.el view
@@ -306,7 +306,7 @@   ("*"         . ("⋆"))   (".+"        . ("∔"))   (".-"        . ("∸"))-  (":"         . ("∶"))+  (":"         . ,(agda-input-to-string-list "∶⦂ː꞉˸፥፦:﹕︓"))   ("::"        . ("∷"))   ("::-"       . ("∺"))   ("-:"        . ("∹"))@@ -540,6 +540,19 @@   ("b7"   . ("𝟟"))   ("b8"   . ("𝟠"))   ("b9"   . ("𝟡"))++  ;; Mathematical bold digits.++  ("B0"   . ("𝟎"))+  ("B1"   . ("𝟏"))+  ("B2"   . ("𝟐"))+  ("B3"   . ("𝟑"))+  ("B4"   . ("𝟒"))+  ("B5"   . ("𝟓"))+  ("B6"   . ("𝟔"))+  ("B7"   . ("𝟕"))+  ("B8"   . ("𝟖"))+  ("B9"   . ("𝟗"))    ;; Parentheses. 
src/data/emacs-mode/agda2-highlight.el view
@@ -326,35 +326,40 @@   :group 'agda2-highlight-faces)  (defface agda2-highlight-unsolved-meta-face-  '((t (:background "yellow"-        :foreground "black")))+  '((t (:background "yellow")))   "The face used for unsolved meta variables."   :group 'agda2-highlight-faces)  (defface agda2-highlight-unsolved-constraint-face-  '((t (:background "yellow"-        :foreground "black")))+  '((t (:background "yellow")))   "The face used for unsolved constraints which are not connected to metas."   :group 'agda2-highlight-faces)  (defface agda2-highlight-termination-problem-face-  '((t (:background "light salmon"-        :foreground "black")))+  '((t (:background "light salmon")))   "The face used for termination problems."   :group 'agda2-highlight-faces)  (defface agda2-highlight-positivity-problem-face-  '((t (:background "peru"-        :foreground "black")))+  '((t (:background "peru")))   "The face used for positivity problems."   :group 'agda2-highlight-faces) -(defface agda2-highlight-incomplete-pattern-face-  '((t (:background "wheat"-        :foreground "black")))-  "The face used for incomplete patterns. (Currently unused.)"+(defface agda2-highlight-reachability-problem-face+  '((t (:background "dark gray")))+  "The face used for reachability problems."   :group 'agda2-highlight-faces) +(defface agda2-highlight-coverage-problem-face+  '((t (:background "wheat")))+  "The face used for coverage problems."+  :group 'agda2-highlight-faces)++(defface agda2-highlight-catchall-clause-face+  '((t (:background "white smoke")))+  "The face used for catchall clauses."+  :group 'agda2-highlight-faces)+ (defface agda2-highlight-typechecks-face   '((t (:background "light blue"         :foreground "black")))@@ -385,8 +390,11 @@     (unsolvedmeta           . agda2-highlight-unsolved-meta-face)     (unsolvedconstraint     . agda2-highlight-unsolved-constraint-face)     (terminationproblem     . agda2-highlight-termination-problem-face)+    (reachabilityproblem    . agda2-highlight-reachability-problem-face)+    (coverageproblem        . agda2-highlight-coverage-problem-face)     (positivityproblem      . agda2-highlight-positivity-problem-face)     (incompletepattern      . agda2-highlight-incomplete-pattern-face)+    (catchallclause         . agda2-highlight-catchall-clause-face)     (typechecks             . agda2-highlight-typechecks-face))   "Alist mapping code aspects to the face used when displaying them. @@ -414,6 +422,9 @@ `symbol'                 Symbols like forall, =, ->, etc. `terminationproblem'     Termination problems. `positivityproblem'      Positivity problems.+`reachabilityproblem'    Reachability problems.+`coverageproblem'        Coverage problems.+`catchallclause'         Clause not holding definitionally. `typechecks'             Code which is being type-checked. `unsolvedconstraint'     Unsolved constraints, not connected to meta                            variables.
src/data/emacs-mode/agda2-mode-pkg.el view
@@ -1,2 +1,2 @@-(define-package "agda2-mode" "2.5.1"+(define-package "agda2-mode" "2.5.3"   "interactive development for Agda, a dependently typed functional programming language")
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@  ;;; Code: -(defvar agda2-version "2.5.2"+(defvar agda2-version "2.5.3"   "The version of the Agda mode. Note that the same version of the Agda executable must be used.") @@ -93,14 +93,13 @@   :type '(repeat string)   :group 'agda2) -(defvar agda2-backends '("GHC" "GHCNoMain" "JS" "LaTeX")+(defvar agda2-backends '("GHC" "JS" "LaTeX" "QuickLaTeX")   "Compilation backends.")  (defcustom agda2-backend-  'ask-  "The backend used to compile Agda programs."-  :type `(choice (const :tag "Ask every time" ask)-                 ,@(mapcar (lambda (x) `(const ,x)) agda2-backends))+  ""+  "The backend used to compile Agda programs (leave blank to ask every time)."+  :type 'string   :group 'agda2)  (defcustom agda2-toplevel-module "Agda.Interaction.GhciTop"@@ -228,6 +227,7 @@     (agda2-compile                           "\C-c\C-x\C-c"       (global)       "Compile")     (agda2-quit                              "\C-c\C-x\C-q"       (global)       "Quit")     (agda2-restart                           "\C-c\C-x\C-r"       (global)       "Kill and restart Agda")+    (agda2-abort                             "\C-c\C-x\C-a"       (global)       "Abort a command")     (agda2-remove-annotations                "\C-c\C-x\C-d"       (global)       "Remove goals and highlighting (\"deactivate\")")     (agda2-display-implicit-arguments        "\C-c\C-x\C-h"       (global)       "Toggle display of hidden arguments")     (agda2-show-constraints                  ,(kbd "C-c C-=")     (global)       "Show constraints")@@ -246,6 +246,7 @@     (agda2-why-in-scope-maybe-toplevel       "\C-c\C-w"           (local global) "Explain why a particular name is in scope")     (agda2-goal-and-context                  ,(kbd "C-c C-,")     (local)        "Goal type and context")     (agda2-goal-and-context-and-inferred     ,(kbd "C-c C-.")     (local)        "Goal type, context and inferred type")+    (agda2-goal-and-context-and-checked      ,(kbd "C-c C-;")     (local)        "Goal type, context and checked type")     (agda2-search-about-toplevel             ,(kbd "C-c C-z")     (local global) "Search About")     (agda2-module-contents-maybe-toplevel    ,(kbd "C-c C-o")     (local global) "Module contents")     (agda2-compute-normalised-maybe-toplevel "\C-c\C-n"           (local global) "Evaluate term to normal form")@@ -352,8 +353,8 @@  ;; The following variables are used by the filter process, ;; `agda2-output-filter'. Their values are only modified by the filter-;; process, `agda2-go', `agda2-restart', and-;; `agda2-abort-highlighting'.+;; process, `agda2-go', `agda2-restart', `agda2-abort-highlighting',+;; and `agda2-abort-done'.  (defvar agda2-responses-expected nil   "Is the Agda process expected to produce at least one response?")@@ -522,11 +523,11 @@        (eq (agda2-process-status) 'run)))  (defun agda2-send-command (restart &rest args)-  "Send a command to the Agda2 asyncronous process.  Saves the buffer-and sends the list of strings ARGS to Agda2.  If RESTART is non-nil-and the Agda2 process is not running, or the *agda2* buffer does not-exist, then an attempt is made to restart the process."-  (save-buffer)+  "Send a command to the Agda process.+Sends the list of strings ARGS to the process. If RESTART is+non-nil and the process is not running, or the *agda2*+buffer does not exist, then an attempt is made to restart the+process."   (when (and restart (not (agda2-running-p)))     ;; Try restarting automatically, but only once, in case there is     ;; some major problem.@@ -546,10 +547,11 @@     (error "Another command is currently in progress \(if a command has been aborted you may want to restart Agda)"))) -(defun agda2-go (responses-expected highlight do-abort &rest args)+(defun agda2-go (save responses-expected highlight do-abort &rest args)   "Executes commands in the Agda2 interpreter.-Sends the list of strings ARGS to the Agda2 interpreter, waits for-output and executes the responses, if any. If no responses are+Sends the list of strings ARGS to the Agda2 interpreter, waits+for output and executes the responses, if any. If SAVE is+'save, then the buffer is saved first. If no responses are received, and RESPONSES-EXPECTED is non-nil, then an error is raised. If HIGHLIGHT is non-nil, then the buffer's syntax highlighting may be updated."@@ -563,6 +565,8 @@         agda2-output-chunk-incomplete (agda2-queue-empty)         agda2-file-buffer             (current-buffer)) +  (when (equal save 'save) (save-buffer))+   (apply 'agda2-send-command          'restart          "IOTCM"@@ -572,7 +576,26 @@          "("          (append args '(")")))) +(defun agda2-abort ()+  "Tries to abort the current computation, if any.+May be more efficient than restarting Agda."+  (interactive)+  (agda2-send-command nil+                      "IOTCM"+                      (agda2-string-quote (buffer-file-name))+                      "None"+                      "Indirect"+                      "Cmd_abort")) +(defun agda2-abort-done ()+  "Removes annotations, resets certain variables.+Intended to be used by the backend if an abort command was+successful."+  (agda2-remove-annotations)+  (setq agda2-highlight-in-progress nil+        agda2-responses-expected    nil+        agda2-last-responses        nil))+ (defun agda2-output-filter (proc chunk)   "Evaluate the Agda process's commands. This filter function assumes that every line contains either some@@ -725,7 +748,7 @@     (message "\"%s\" has been modified. Interrupting highlighting."              (buffer-name (current-buffer))))) -(defun agda2-goal-cmd (cmd &optional want ask &rest args)+(defun agda2-goal-cmd (cmd save &optional want ask &rest args)   "Reads input from goal or minibuffer and sends command to Agda.  An error is raised if point is not in a goal.@@ -748,6 +771,9 @@ If the user input is not taken from the goal, then an empty goal range is given. +If SAVE is 'save, then the buffer is saved just before the+command is sent to Agda (if it is sent).+ An error is raised if no responses are received."   (multiple-value-bind (o g) (agda2-goal-at (point))     (unless g (error "For this command, please place the cursor in a goal"))@@ -759,7 +785,7 @@                   (or ask (string-match "\\`\\s *\\'" txt)))              (setq txt (read-string (concat want ": ") nil nil txt t)))             (t (setq input-from-goal t)))-      (apply 'agda2-go t input-from-goal t cmd+      (apply 'agda2-go save t input-from-goal t cmd              (format "%d" g)              (if input-from-goal (agda2-goal-Range o) (agda2-mkRange nil))              (agda2-string-quote txt) args))))@@ -781,7 +807,7 @@ (defun agda2-load ()   "Load current buffer."   (interactive)-  (agda2-go t t t "Cmd_load"+  (agda2-go 'save t t t "Cmd_load"             (agda2-string-quote (buffer-file-name))             (agda2-list-quote agda2-program-args)             ))@@ -809,25 +835,55 @@   (interactive)   (let ((backend (cond ((equal agda2-backend "MAlonzo")       "GHC")                        ((equal agda2-backend "MAlonzoNoMain") "GHCNoMain")-                       ((equal agda2-backend 'ask)+                       ((equal agda2-backend "")                         (completing-read "Backend: " agda2-backends-                                         nil t nil nil nil+                                         nil nil nil nil nil                                          'inherit-input-method))                        (t agda2-backend))))-    (unless (member backend agda2-backends)-      (if (equal backend "")-          (error "No backend chosen")-        (error "Invalid backend: %s" backend)))-    (agda2-go t t t "Cmd_compile"+    (when (equal backend "") (error "No backend chosen"))+    (agda2-go 'save t t t "Cmd_compile"               backend               (agda2-string-quote (buffer-file-name))               (agda2-list-quote agda2-program-args)               ))) -(defun agda2-give()-  "Give to the goal at point the expression in it" (interactive)-  (agda2-goal-cmd "Cmd_give" "expression to give"))+(defmacro agda2-maybe-forced (name comment cmd save want)+  "This macro constructs a function NAME which runs CMD.+COMMENT is used to build the function's comment. The function+NAME takes a prefix argument which tells whether it should+apply force or not when running CMD (through+`agda2-goal-cmd';+SAVE is used as `agda2-goal-cmd's SAVE argument and+WANT is used as `agda2-goal-cmd's WANT argument)."+  (let ((eval (make-symbol "eval")))+  `(defun ,name (&optional prefix)+     ,(concat comment ". +The action depends on the prefix argument:++* If the prefix argument is `nil' (i.e., if no prefix argument is+  given), then no force is applied.++* If any other prefix argument is used (for instance, if C-u is+  typed once or twice right before the command is invoked), then+  force is applied.")+     (interactive "P")+     (let ((,eval (cond ((equal prefix nil) "WithoutForce")+                        ("WithForce"))))+       (agda2-goal-cmd (concat ,cmd " " ,eval)+                       ,save ,want)))))++(agda2-maybe-forced+  agda2-give+  "Give to the goal at point the expression in it"+  "Cmd_give"+  'save+  "expression to give")++;; (defun agda2-give()+;;   "Give to the goal at point the expression in it" (interactive)+;;   (agda2-goal-cmd "Cmd_give" 'save "expression to give"))+ (defun agda2-give-action (old-g paren)   "Update the goal OLD-G with the expression in it."   (let@@ -852,18 +908,18 @@ of new goals."   (interactive "P")   (if pmlambda-      (agda2-goal-cmd "Cmd_refine_or_intro True" 'goal)-    (agda2-goal-cmd "Cmd_refine_or_intro False" 'goal)))+      (agda2-goal-cmd "Cmd_refine_or_intro True" 'save 'goal)+    (agda2-goal-cmd "Cmd_refine_or_intro False" 'save 'goal)))  (defun agda2-auto ()  "Simple proof search" (interactive)- (agda2-goal-cmd "Cmd_auto" 'goal))+ (agda2-goal-cmd "Cmd_auto" 'save 'goal))  (defun agda2-make-case ()   "Refine the pattern variables given in the goal. Assumes that <clause> = {!<variables>!} is on one line."   (interactive)-  (agda2-goal-cmd "Cmd_make_case" "pattern variables to case (empty for split on result)"))+  (agda2-goal-cmd "Cmd_make_case" 'save "pattern variables to case (empty for split on result)"))  (defun agda2-make-case-action (newcls)   "Replace the line at point with new clauses NEWCLS and reload."@@ -913,19 +969,25 @@ major mode)."   (setq agda2-buffer-external-status status)) -(defun agda2-warning-buffer nil-  "Creates the Agda warning buffer, if it does not already exist.-The buffer is returned."-  (unless (buffer-live-p agda2-warning-buffer)-    (setq agda2-warning-buffer-          (generate-new-buffer "*Agda warnings*"))+(defmacro agda2-warning-or-info-buffer (buffer kind title)+  "Used to define the functions agda2-warning-buffer and agda2-info-buffer."+  `(defun ,buffer nil+     ,(concat "Creates the Agda " kind+              " buffer, if it does not already exist.+The buffer is returned.")+  (unless (buffer-live-p ,buffer)+    (setq ,buffer+          (generate-new-buffer ,title)) -    (with-current-buffer agda2-warning-buffer+    (with-current-buffer ,buffer       (compilation-mode "AgdaInfo")       ;; Support for jumping to positions mentioned in the text.       (set (make-local-variable 'compilation-error-regexp-alist)            '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"               1 (2 . 5) (3 . 6))))+      ;; Do not skip errors that start in the same position as the+      ;; current one.+      (set (make-local-variable 'compilation-skip-to-next-location) nil)       ;; No support for recompilation. The key binding is removed, and       ;; attempts to run `recompile' will (hopefully) result in an       ;; error.@@ -939,8 +1001,14 @@       (set (make-local-variable 'word-combining-categories) (cons '(nil . nil) word-combining-categories))       (set-input-method "Agda"))) -  agda2-warning-buffer)+  ,buffer)) +(agda2-warning-or-info-buffer+ agda2-warning-buffer "warning" "*Agda warnings*")++(agda2-warning-or-info-buffer+ agda2-info-buffer "info" "*Agda information*")+ (defun agda2-font-syntactic-face (state)   (cond ((nth 4 state)          ( save-excursion@@ -949,34 +1017,6 @@                  ((looking-at "{-[^#]") 'font-lock-comment-face)           ))))) -(defun agda2-info-buffer nil-  "Creates the Agda info buffer, if it does not already exist.-The buffer is returned."-  (unless (buffer-live-p agda2-info-buffer)-    (setq agda2-info-buffer-          (generate-new-buffer "*Agda information*"))--    (with-current-buffer agda2-info-buffer-      (compilation-mode "AgdaInfo")-      ;; Support for jumping to positions mentioned in the text.-      (set (make-local-variable 'compilation-error-regexp-alist)-           '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"-              1 (2 . 5) (3 . 6))))-      ;; No support for recompilation. The key binding is removed, and-      ;; attempts to run `recompile' will (hopefully) result in an-      ;; error.-      (let ((map (copy-keymap (current-local-map))))-        (define-key map (kbd "g") 'undefined)-        (use-local-map map))-      (set (make-local-variable 'compile-command)-           'agda2-does-not-support-compilation-via-the-compilation-mode)--      (set-syntax-table agda2-mode-syntax-table)-      (set (make-local-variable 'word-combining-categories) (cons '(nil . nil) word-combining-categories))-      (set-input-method "Agda")))--  agda2-info-buffer)- (defun agda2-info-action (name text &optional append)   "Insert TEXT into the Agda info buffer and display it. NAME is displayed in the buffer's mode line.@@ -1146,11 +1186,11 @@  (defun agda2-show-goals()   "Show all goals." (interactive)-  (agda2-go t t t "Cmd_metas"))+  (agda2-go nil t t t "Cmd_metas"))  (defun agda2-show-constraints()   "Show constraints." (interactive)-  (agda2-go t t t "Cmd_constraints"))+  (agda2-go nil t t t "Cmd_constraints"))  (defun agda2-remove-annotations ()   "Removes buffer annotations (overlays and text properties)."@@ -1196,7 +1236,7 @@ NAME takes a prefix argument which tells whether it should normalise types or not when running CMD (through `agda2-goal-cmd'; WANT is used as `agda2-goal-cmd's WANT-argument)."+argument, and nil as its SAVE argument)."   (let ((eval (make-symbol "eval")))   `(defun ,name (&optional prefix)      ,(concat comment ".@@ -1218,15 +1258,15 @@                         ((equal prefix '(4)) "Instantiated")                         ("Normalised"))))        (agda2-goal-cmd (concat ,cmd " " ,eval)-                       ,want)))))+                       nil ,want)))))  (defmacro agda2-maybe-normalised-toplevel (name comment cmd prompt)   "This macro constructs a function NAME which runs CMD. COMMENT is used to build the function's comments. The function NAME takes a prefix argument which tells whether it should normalise types or not when running CMD (through-`agda2-go' t nil t; the string PROMPT is used as the goal command-prompt)."+`agda2-go' nil t nil t; the string PROMPT is used as the goal+command prompt)."   (let ((eval (make-symbol "eval")))     `(defun ,name (prefix expr)        ,(concat comment ".@@ -1247,7 +1287,7 @@        (let ((,eval (cond ((equal prefix nil) "Simplified")                           ((equal prefix '(4)) "Instantiated")                           ("Normalised"))))-         (agda2-go t nil t+         (agda2-go nil t nil t                    (concat ,cmd " " ,eval " "                            (agda2-string-quote expr))))))) @@ -1256,7 +1296,7 @@ COMMENT is used to build the function's comments. The function NAME takes a prefix argument which tells whether it should normalise types or not when running CMD (through-`agda2-go' t nil t;)."+`agda2-go' nil t nil t;)."   (let ((eval (make-symbol "eval")))     `(defun ,name (prefix)        ,(concat comment ".@@ -1277,7 +1317,7 @@        (let ((,eval (cond ((equal prefix nil) "AsIs")                           ((equal prefix '(4)) "Simplified")                           ("Normalised"))))-         (agda2-go t nil t+         (agda2-go nil t nil t                    (concat ,cmd " " ,eval " "                            )))))) @@ -1313,12 +1353,12 @@ (defun agda2-why-in-scope ()   "Explain why something is in scope in a goal."   (interactive)-  (agda2-goal-cmd "Cmd_why_in_scope" "Name"))+  (agda2-goal-cmd "Cmd_why_in_scope" nil "Name"))  (defun agda2-why-in-scope-toplevel (name)   "Explain why something is in scope at the top level."   (interactive "MName: ")-  (agda2-go t nil t+  (agda2-go nil t nil t             "Cmd_why_in_scope_toplevel"             (agda2-string-quote name))) @@ -1342,6 +1382,12 @@  "expression to type")  (agda2-maybe-normalised+ agda2-goal-and-context-and-checked+ "Shows the context, the goal and check the given expression's against the hole's type"+ "Cmd_goal_type_context_check"+ "expression to type")++(agda2-maybe-normalised  agda2-show-context  "Show the context of the goal at point"  "Cmd_context"@@ -1436,7 +1482,7 @@                       (cond ((equal arg nil) " DefaultCompute")                             ((equal arg '(4)) " IgnoreAbstract")                             (" UseShowInstance")))))-    (agda2-goal-cmd cmd "expression to normalise")))+    (agda2-goal-cmd cmd nil "expression to normalise")))  (defun agda2-compute-normalised-toplevel (expr &optional arg)   "Compute the normal form of the given expression.@@ -1454,7 +1500,7 @@                      (cond ((equal arg nil) " DefaultCompute")                             ((equal arg '(4)) " IgnoreAbstract")                             (" UseShowInstance")) " ")))-    (agda2-go t nil t (concat cmd (agda2-string-quote expr)))))+    (agda2-go nil t nil t (concat cmd (agda2-string-quote expr)))))  (defun agda2-compute-normalised-maybe-toplevel ()   "Compute the normal form of the given expression.@@ -1475,17 +1521,18 @@ (defun agda2-display-program-version ()   "Display version of Agda"   (interactive)-  (agda2-go nil nil t "Cmd_show_version"))+  (agda2-go nil nil nil t "Cmd_show_version"))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;  (defun agda2-highlight-reload nil   "Loads precomputed syntax highlighting info for the current buffer.-If there is any to load."-  (agda2-go nil t t-            "Cmd_load_highlighting_info"-            (agda2-string-quote (buffer-file-name))))+Only if the buffer is unmodified, and only if there is anything to load."+ (unless (buffer-modified-p)+   (agda2-go nil nil t t+             "Cmd_load_highlighting_info"+             (agda2-string-quote (buffer-file-name)))))  (defun agda2-literate-p ()   "Is the current buffer a literate Agda buffer?"@@ -1623,7 +1670,7 @@         (delete-region p (+ p 2)))         ;; Update highlighting         (if (and (not (equal new-txt 'paren)) (not (equal new-txt 'no-paren)))-            (apply 'agda2-go t t nil "Cmd_highlight"+            (apply 'agda2-go 'save t t nil "Cmd_highlight"               (format "%d" old-g)               (agda2-mkRange `(,p ,(- q 2)))               (agda2-string-quote new-txt) nil))@@ -1890,10 +1937,11 @@ With prefix argument, turn on display of implicit arguments if the argument is a positive number, otherwise turn it off."   (interactive "P")-  (cond ((eq arg nil)       (agda2-go t t t "ToggleImplicitArgs"))-        ((and (numberp arg)-              (> arg 0))    (agda2-go t t t "ShowImplicitArgs" "True"))-        (t                  (agda2-go t t t "ShowImplicitArgs" "False"))))+  (cond+   ((eq arg nil)       (agda2-go nil t t t "ToggleImplicitArgs"))+   ((and (numberp arg)+         (> arg 0))    (agda2-go nil t t t "ShowImplicitArgs" "True"))+   (t                  (agda2-go nil t t t "ShowImplicitArgs" "False"))))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
src/data/emacs-mode/annotation.el view
@@ -98,6 +98,17 @@   "Move point to POSITION."   (goto-char (+ position annotations-offset))) +(defun annotation-append-text-property (start end prop values)+  "Merges VALUES to text property PROP between START and END."+  (let ((pos start)+        mid)+    (while (< pos end)+      (setq mid (next-single-property-change pos prop nil end))+      (let* ((old-values (get-text-property pos prop))+             (all-values (union old-values values)))+        (put-text-property pos mid prop all-values)+        (setq pos mid)))))+ (defun annotation-annotate (start end anns &optional info goto)   "Annotate text between START and END in the current buffer. @@ -141,7 +152,7 @@                                  anns)))             (props nil))         (when faces-          (put-text-property start end 'font-lock-face faces)+          (annotation-append-text-property start end 'font-lock-face faces)           (add-to-list 'props 'font-lock-face))         (when (consp goto)           (add-text-properties start end
src/data/lib/prim/Agda/Builtin/Bool.agda view
@@ -9,8 +9,8 @@ {-# BUILTIN FALSE false #-} {-# BUILTIN TRUE  true  #-} -{-# COMPILED_DATA_UHC Bool __BOOL__ __FALSE__ __TRUE__ #-}+{-# COMPILE UHC Bool = data __BOOL__ (__FALSE__ | __TRUE__) #-} -{-# COMPILED_JS Bool  function (x,v) { return ((x)? v["true"]() : v["false"]()); } #-}-{-# COMPILED_JS false false #-}-{-# COMPILED_JS true  true  #-}+{-# COMPILE JS Bool  = function (x,v) { return ((x)? v["true"]() : v["false"]()); } #-}+{-# COMPILE JS false = false #-}+{-# COMPILE JS true  = true  #-}
src/data/lib/prim/Agda/Builtin/Equality.agda view
@@ -7,4 +7,3 @@   instance refl : x ≡ x  {-# BUILTIN EQUALITY _≡_ #-}-{-# BUILTIN REFL refl #-}
src/data/lib/prim/Agda/Builtin/IO.agda view
@@ -5,5 +5,5 @@ postulate IO : ∀ {a} → Set a → Set a {-# BUILTIN IO IO #-} -{-# HASKELL type AgdaIO a b = IO b #-}-{-# COMPILED_TYPE IO MAlonzo.Code.Agda.Builtin.IO.AgdaIO #-}+{-# FOREIGN GHC type AgdaIO a b = IO b #-}+{-# COMPILE GHC IO = type AgdaIO #-}
src/data/lib/prim/Agda/Builtin/List.agda view
@@ -11,12 +11,12 @@ {-# BUILTIN NIL  []   #-} {-# BUILTIN CONS _∷_  #-} -{-# HASKELL type AgdaList a b = [b] #-}+{-# FOREIGN GHC type AgdaList a b = [b] #-} -{-# COMPILED_DATA List MAlonzo.Code.Agda.Builtin.List.AgdaList [] (:) #-}-{-# COMPILED_DATA_UHC List __LIST__ __NIL__ __CONS__ #-}-{-# COMPILED_JS List function(x,v) {+{-# COMPILE GHC List = data AgdaList ([] | (:)) #-}+{-# COMPILE UHC List = data __LIST__ (__NIL__ | __CONS__) #-}+{-# COMPILE JS  List = function(x,v) {   if (x.length < 1) { return v["[]"](); } else { return v["_∷_"](x[0], x.slice(1)); } } #-}-{-# COMPILED_JS [] Array() #-}-{-# COMPILED_JS _∷_ function (x) { return function(y) { return Array(x).concat(y); }; } #-}+{-# COMPILE JS [] = Array() #-}+{-# COMPILE JS _∷_ = function (x) { return function(y) { return Array(x).concat(y); }; } #-}
src/data/lib/prim/Agda/Builtin/Reflection.agda view
@@ -47,10 +47,24 @@ {-# BUILTIN FIXITY       Fixity #-} {-# BUILTIN FIXITYFIXITY fixity #-} -{-# COMPILED_DATA Associativity MAlonzo.RTE.Assoc MAlonzo.RTE.LeftAssoc MAlonzo.RTE.RightAssoc MAlonzo.RTE.NonAssoc #-}-{-# COMPILED_DATA Precedence MAlonzo.RTE.Precedence MAlonzo.RTE.Related MAlonzo.RTE.Unrelated #-}-{-# COMPILED_DATA Fixity MAlonzo.RTE.Fixity MAlonzo.RTE.Fixity #-}+{-# COMPILE GHC Associativity = data MAlonzo.RTE.Assoc (MAlonzo.RTE.LeftAssoc | MAlonzo.RTE.RightAssoc | MAlonzo.RTE.NonAssoc) #-}+{-# COMPILE GHC Precedence    = data MAlonzo.RTE.Precedence (MAlonzo.RTE.Related | MAlonzo.RTE.Unrelated) #-}+{-# COMPILE GHC Fixity        = data MAlonzo.RTE.Fixity (MAlonzo.RTE.Fixity) #-} +{-# COMPILE JS Associativity  = function (x,v) { return v[x](); } #-}+{-# COMPILE JS left-assoc     = "left-assoc"  #-}+{-# COMPILE JS right-assoc    = "right-assoc" #-}+{-# COMPILE JS non-assoc      = "non-assoc"   #-}++{-# COMPILE JS Precedence     =+  function (x,v) {+    if (x === "unrelated") { return v[x](); } else { return v["related"](x); }} #-}+{-# COMPILE JS related        = function(x) { return x; } #-}+{-# COMPILE JS unrelated      = "unrelated"               #-}++{-# COMPILE JS Fixity         = function (x,v) { return v["fixity"](x["assoc"], x["prec"]); } #-}+{-# COMPILE JS fixity         = function (x) { return function (y) { return { "assoc": x, "prec": y}; }; } #-}+ primitive   primQNameFixity : Name → Fixity @@ -193,7 +207,7 @@ data Definition : Set where   function    : (cs : List Clause) → Definition   data-type   : (pars : Nat) (cs : List Name) → Definition-  record-type : (c : Name) → Definition+  record-type : (c : Name) (fs : List (Arg Name)) → Definition   data-cons   : (d : Name) → Definition   axiom       : Definition   prim-fun    : Definition@@ -249,6 +263,10 @@   -- their results: inferType, checkType, quoteTC, getType, and getContext   withNormalisation : ∀ {a} {A : Set a} → Bool → TC A → TC A +  -- Prints the third argument if the corresponding verbosity level is turned+  -- on (with the -v flag to Agda).+  debugPrint : String → Nat → List ErrorPart → TC ⊤+ {-# BUILTIN AGDATCM              TC            #-} {-# BUILTIN AGDATCMRETURN        returnTC      #-} {-# BUILTIN AGDATCMBIND          bindTC        #-}@@ -273,3 +291,4 @@ {-# BUILTIN AGDATCMCOMMIT        commitTC      #-} {-# BUILTIN AGDATCMISMACRO       isMacro       #-} {-# BUILTIN AGDATCMWITHNORMALISATION withNormalisation #-}+{-# BUILTIN AGDATCMDEBUGPRINT    debugPrint    #-}
src/data/lib/prim/Agda/Builtin/String.agda view
@@ -17,9 +17,9 @@   primShowChar       : Char → String   primShowString     : String → String -{-# COMPILED_JS primStringToList function(x) { return x.split(""); } #-}-{-# COMPILED_JS primStringFromList function(x) { return x.join(""); } #-}-{-# COMPILED_JS primStringAppend function(x) { return function(y) { return x+y; }; } #-}-{-# COMPILED_JS primStringEquality function(x) { return function(y) { return x===y; }; } #-}-{-# COMPILED_JS primShowChar function(x) { return x; } #-}-{-# COMPILED_JS primShowString function(x) { return x; } #-}+{-# COMPILE JS primStringToList = function(x) { return x.split(""); } #-}+{-# COMPILE JS primStringFromList = function(x) { return x.join(""); } #-}+{-# COMPILE JS primStringAppend = function(x) { return function(y) { return x+y; }; } #-}+{-# COMPILE JS primStringEquality = function(x) { return function(y) { return x===y; }; } #-}+{-# COMPILE JS primShowChar = function(x) { return JSON.stringify(x); } #-}+{-# COMPILE JS primShowString = function(x) { return JSON.stringify(x); } #-}
src/data/lib/prim/Agda/Builtin/Unit.agda view
@@ -6,4 +6,4 @@   instance constructor tt  {-# BUILTIN UNIT ⊤ #-}-{-# COMPILED_DATA ⊤ () () #-}+{-# COMPILE GHC ⊤ = data () (()) #-}
src/data/lib/prim/Agda/Primitive.agda view
@@ -19,8 +19,8 @@ -- MAlonzo compiles Level to (). This should be safe, because it is -- not possible to pattern match on levels. -{-# COMPILED_TYPE Level () #-}-{-# BUILTIN LEVEL Level    #-}+{-# COMPILE GHC Level = type () #-}+{-# BUILTIN LEVEL Level #-}  postulate   lzero : Level
− src/data/uhc-agda-base/LICENSE
− src/data/uhc-agda-base/src/UHC/Agda/Builtins.hs
@@ -1,478 +0,0 @@-module UHC.Agda.Builtins-  ( -- Integer-    primShowInteger-  , primIntegerQuot-  , primIntegerRem-  , primIntegerMinus-  , primIntegerPlus-  , primIntegerTimes-  , primIntegerGreaterOrEqual-  , primIntegerEquality-  , primIntegerLess-    -- Levels-  , primLevelZero-  , primLevelSuc-  , primLevelMax-    --  Nat-  , Nat (..)-  , primIntegerToNat-  , primNatToInteger-  , primNatMinus-  , primNatPlus-  , primNatTimes-  , primNatDivSuc-  , primNatDivSucAux-  , primNatModSuc-  , primNatModSucAux-  , primNatEquality-  , primNatLess-    -- IO-  , primReturn-  , primBind-  , primGetContents-  , primReadFile-  , primWriteFile-  , primAppendFile-  , primPutStr-  , primPutStrLn-  , primReadFiniteFile-    -- String-  , primStringAppend-  , primStringEquality-  , primStringFromList-  , primStringToList-  , primShowString-    -- Char-  , primCharToNat-  , primCharEquality-  , primShowChar-  , primIsLower-  , primIsDigit-  , primIsAlpha-  , primIsSpace-  , primIsAscii-  , primIsLatin1-  , primIsPrint-  , primIsHexDigit-  , primToUpper-  , primToLower-  , primNatToChar-    -- Float-  , primShowFloat-  , primMkFloat-  , primFloatEquality-  , primFloatNumericalEquality-  , primFloatNumericalLess-  , primNatToFloat-  , primFloatPlus-  , primFloatMinus-  , primFloatTimes-  , primFloatNegate-  , primFloatDiv-  , primFloatSqrt-  , primRound-  , primFloor-  , primCeiling-  , primExp-  , primLog-  , primSin-  , primCos-  , primTan-  , primASin-  , primACos-  , primATan-  , primATan2-    -- Reflection-  , QName (..)-  , primMkQName-  , primQNameEquality-  , primQNameLess-  , primShowQName-  , primQNameFixity-  , primMetaEquality-  , primMetaLess-  , primShowMeta--    -- Debugging-  , primTrace--    -- Misc-  , primIfThenElse-  , primSeq-  , unit-  )-where--import Prelude-import qualified Data.Char as C-import Debug.Trace-import UHC.OldException (onException)-import System.IO (openFile, IOMode (ReadMode), hClose, hFileSize, hGetContents)----------------------------------------------------------------------------------- Adapted from the ieee754 package. See the LICENSE file.-foreign import ccall "double.h identical" c_identical :: Double -> Double -> Int--identicalIEEE :: Double -> Double -> Bool-identicalIEEE x y = c_identical x y /= 0----------------------------------------------------------------------------------- internal helper for this file-notImplError :: String -> a-notImplError f = error $ "Feature " ++ f ++ " is not implemented in the UHC backend!"---- ====================--- Integer--- ====================--primShowInteger :: Integer -> String-primShowInteger = show--primIntegerQuot :: Integer -> Integer -> Integer-primIntegerQuot = quot--primIntegerRem :: Integer -> Integer -> Integer-primIntegerRem = rem--primIntegerMinus :: Integer -> Integer -> Integer-primIntegerMinus = (-)--primIntegerPlus :: Integer -> Integer -> Integer-primIntegerPlus = (+)--primIntegerTimes :: Integer -> Integer -> Integer-primIntegerTimes = (*)--primIntegerGreaterOrEqual :: Integer -> Integer -> Bool-primIntegerGreaterOrEqual = (>=)--primIntegerLess :: Integer -> Integer -> Bool-primIntegerLess = (<)--primIntegerEquality :: Integer -> Integer -> Bool-primIntegerEquality = (==)---- ====================--- Levels--- ====================--primLevelZero :: ()-primLevelZero = ()--primLevelSuc :: () -> ()-primLevelSuc _ = ()--primLevelMax :: () -> () -> ()-primLevelMax _ _ = ()---- ====================--- Nat--- ====================--newtype Nat = Nat Integer--liftN2 :: (Integer -> Integer -> Integer) -> Nat -> Nat -> Nat-liftN2 f x y = Nat (f (unNat x) (unNat y))--unNat :: Nat -> Integer-unNat (Nat i) = i--primNatToInteger :: Nat -> Integer-primNatToInteger = unNat---- unsafe!-primIntegerToNat :: Integer -> Nat-primIntegerToNat = Nat--primNatPlus :: Nat -> Nat -> Nat-primNatPlus = liftN2 (+)--primNatTimes :: Nat -> Nat -> Nat-primNatTimes = liftN2 (*)--primNatMinus :: Nat -> Nat -> Nat-primNatMinus x y = Nat $ max 0 (unNat x - unNat y)--primNatDivSuc :: Nat -> Nat -> Nat-primNatDivSuc x y = Nat $ div (unNat x) (unNat y + 1)--primNatDivSucAux :: Nat -> Nat -> Nat -> Nat -> Nat-primNatDivSucAux (Nat k) (Nat m) (Nat n) (Nat j) =-  Nat $ k + div (max 0 $ n + m - j) (m + 1)--primNatModSuc :: Nat -> Nat -> Nat-primNatModSuc x y = Nat $ mod (unNat x) (unNat y + 1)--primNatModSucAux :: Nat -> Nat -> Nat -> Nat -> Nat-primNatModSucAux (Nat k) (Nat m) (Nat n) (Nat j) =-  Nat $ if n > j then mod (n - j - 1) (m + 1) else k + n--primNatEquality :: Nat -> Nat -> Bool-primNatEquality x y = unNat x == unNat y--primNatLess :: Nat -> Nat -> Bool-primNatLess x y = unNat x < unNat y---- ====================--- IO--- ====================---- Calling haskell functions with class constraints from Agda--- isn't supported yet, so just remove the class constraints on return/bind--primReturn :: a -> IO a-primReturn = return--primBind :: IO a -> (a -> IO b) -> IO b-primBind = (>>=)--primGetContents :: IO String-primGetContents = getContents--primReadFile :: FilePath -> IO String-primReadFile = readFile--primWriteFile :: FilePath -> String -> IO ()-primWriteFile = writeFile--primAppendFile :: FilePath -> String -> IO ()-primAppendFile = appendFile--primPutStr :: String -> IO ()-primPutStr = putStr--primPutStrLn :: String -> IO ()-primPutStrLn = putStrLn--primReadFiniteFile :: FilePath -> IO String-primReadFiniteFile f = do-  h <- openFile f ReadMode-  hFileSize h `onException` hClose h-  hGetContents h---- ====================--- String--- ====================--primStringFromList :: [Char] -> String-primStringFromList = id--primStringToList :: String -> [Char]-primStringToList = id--primStringAppend :: String -> String -> String-primStringAppend = (++)--primStringEquality :: String -> String -> Bool-primStringEquality = (==)--primShowString :: String -> String-primShowString = id---- ====================--- Char--- ====================--primCharToNat :: Char -> Nat-primCharToNat c = primIntegerToNat (fromIntegral (fromEnum c))--primNatToChar :: Nat -> Char-primNatToChar i = toEnum (fromInteger (primNatToInteger i))--primCharEquality :: Char -> Char -> Bool-primCharEquality = (==)--primShowChar :: Char -> String-primShowChar c = show c--primIsLower     :: Char -> Bool-primIsLower     = C.isLower--primIsDigit     :: Char -> Bool-primIsDigit     = C.isDigit--primIsAlpha     :: Char -> Bool-primIsAlpha     = C.isAlpha--primIsSpace     :: Char -> Bool-primIsSpace     = C.isSpace--primIsAscii     :: Char -> Bool-primIsAscii     = C.isAscii--primIsLatin1    :: Char -> Bool-primIsLatin1    = C.isLatin1--primIsPrint     :: Char -> Bool-primIsPrint     = C.isPrint--primIsHexDigit  :: Char -> Bool-primIsHexDigit  = C.isHexDigit--primToUpper     :: Char -> Char-primToUpper     = C.toUpper--primToLower     :: Char -> Char-primToLower     = C.toLower---- ====================--- Float--- ====================--positiveNaN :: Double-positiveNaN = 0.0 / 0.0--primShowFloat :: Double -> String-primShowFloat x-  | isNaN x          = "NaN"-  | isInfinite x     = if x < 0 then "-Infinity" else "Infinity"-  | otherwise        = reverse . dropZeroes . reverse $ show x-  where-    -- GHC drops trailing zeroes, UHC doesn't seem to do so. Quick fix for now...-    dropZeroes s@(_ : '.' : _) = s  -- don't drop the last one though-    dropZeroes ('0' : s)       = dropZeroes s-    dropZeroes s               = s--primMkFloat :: String -> Double-primMkFloat = read---- ASR (2016-09-29). We use bitwise equality for comparing Double--- because Haskell's Eq, which equates 0.0 and -0.0, allows to prove a--- contradiction (see Issue #2169).-primFloatEquality :: Double -> Double -> Bool-primFloatEquality x y = identicalIEEE x y || (isNaN x && isNaN y)--primFloatNumericalEquality :: Double -> Double -> Bool-primFloatNumericalEquality = (==)---- Adapted from the same function on Agda.Syntax.Literal.-compareFloat :: Double -> Double -> Ordering-compareFloat x y-  | identicalIEEE x y          = EQ-  | isNegInf x                 = LT-  | isNegInf y                 = GT-  | isNaN x && isNaN y         = EQ-  | isNaN x                    = LT-  | isNaN y                    = GT-  | otherwise                  = compare x y-  where-    isNegInf z = z < 0 && isInfinite z--primFloatNumericalLess :: Double -> Double -> Bool-primFloatNumericalLess x y =-  case compareFloat x y of-    LT -> True-    _  -> False--primNatToFloat :: Nat -> Double-primNatToFloat n = fromIntegral (unNat n)--primFloatPlus :: Double -> Double -> Double-primFloatPlus = (+)--primFloatMinus :: Double -> Double -> Double-primFloatMinus = (-)--primFloatTimes :: Double -> Double -> Double-primFloatTimes = (*)--primFloatNegate :: Double -> Double-primFloatNegate = negate--primFloatDiv :: Double -> Double -> Double-primFloatDiv = (/)--primFloatSqrt :: Double -> Double-primFloatSqrt = sqrt--primRound :: Double -> Integer-primRound = round--primFloor :: Double -> Integer-primFloor = floor--primCeiling :: Double -> Integer-primCeiling = ceiling--primExp :: Double -> Double-primExp = exp--primLog :: Double -> Double-primLog = log--primSin :: Double -> Double-primSin = sin--primCos :: Double -> Double-primCos = cos--primTan :: Double -> Double-primTan = tan--primASin :: Double -> Double-primASin = asin--primACos :: Double -> Double-primACos = acos--primATan :: Double -> Double-primATan = atan--primATan2 :: Double -> Double -> Double-primATan2 = atan2---- ====================--- Reflection--- ====================-data QName = QName { nameId, moduleId ::Integer, qnameString :: String }--primMkQName :: Integer -> Integer -> String -> QName-primMkQName = QName--instance Eq QName where-  (QName a b _) == (QName c d _) = (a, b) == (c, d)-instance Ord QName where-  compare (QName a b _) (QName c d _) = compare (a, b) (c, d)--primQNameEquality :: QName -> QName -> Bool-primQNameEquality = (==)--primQNameLess :: QName -> QName -> Bool-primQNameLess = (<)--primShowQName :: QName -> String-primShowQName = qnameString--primQNameFixity :: QName -> a-primQNameFixity = error "TODO: primQNameFixity"--type Meta = Integer--primMetaEquality :: Meta -> Meta -> Bool-primMetaEquality = (==)--primMetaLess :: Meta -> Meta -> Bool-primMetaLess = (<)--primShowMeta :: Meta -> String-primShowMeta x = "_" ++ show x---- ====================--- Debugging--- ====================-primTrace :: String -> b -> b-primTrace = trace---- ====================--- Misc--- ====================--primIfThenElse :: Bool -> a -> a -> a-primIfThenElse c t e = if c then t else e--primSeq :: a -> b -> b-primSeq = seq---- | Unit wrapper function (instead of dropping a dummy function inside each module).-unit :: ()-unit = ()
− src/data/uhc-agda-base/src/UHC/Agda/double.c
@@ -1,12 +0,0 @@-#include <stdint.h>--union cast {-  double   x;-  uint64_t n;-};--int identical (double x, double y) {-  union cast cx = { .x = x };-  union cast cy = { .x = y };-  return cx.n == cy.n;-}
− src/data/uhc-agda-base/src/UHC/Agda/double.h
@@ -1,2 +0,0 @@--int identical (double x, double y);
− src/data/uhc-agda-base/uhc-agda-base.cabal
@@ -1,25 +0,0 @@--- Initial uhc-agda-base.cabal generated by cabal init.  For further--- documentation, see http://haskell.org/cabal/users-guide/---- ATTENTION: normally this package gets built using UHC directly without cabal!--- The version of this package, when built directly using UHC, is the version of Agda.--- In the long term, it would be nice if we could use "cabal install --uhc" to install this package.--name:                uhc-agda-base-version:             0.1.0.0-synopsis:            Builtins implementation for Agda UHC Backend--- description:-license:             AllRightsReserved-license-file:        LICENSE-author:              Philipp Hausmann-maintainer:          ph_git@314.ch--- copyright:-category:            Development-build-type:          Simple-cabal-version:       >=1.8--library-  exposed-modules:     UHC.Agda.Builtins-  -- other-modules:-  build-depends:       base ==4.6.*-  hs-source-dirs:      src
src/full/Agda/Auto/Auto.hs view
@@ -1,27 +1,31 @@ {-# LANGUAGE CPP #-} -module Agda.Auto.Auto (auto) where+module Agda.Auto.Auto+      (auto+      , AutoResult(..)+      , AutoProgress(..)+      ) where  import Prelude hiding (null) +#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative ( (<$), pure )+#endif++import Data.Functor import Control.Monad.State-import Data.List hiding (null)+import qualified Data.List as List import qualified Data.Map as Map import Data.IORef import qualified System.Timeout import Data.Maybe-import Data.Functor import qualified Data.Traversable as Trav  import Agda.Utils.Permutation (permute, takeP) import Agda.TypeChecking.Monad hiding (withCurrentModule)--- import Agda.TypeChecking.Monad.Base--- import Agda.TypeChecking.Monad.MetaVars--- import Agda.TypeChecking.Monad.Context--- import Agda.TypeChecking.Monad.Signature-import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope +import Agda.Syntax.Common (Hiding(..)) import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Pretty (prettyA) import qualified Text.PrettyPrint as PP@@ -40,6 +44,7 @@ import Agda.TypeChecking.EtaContract (etaContract) import qualified Agda.Utils.HashMap as HMap +import Agda.Auto.Options import Agda.Auto.Convert import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax@@ -63,62 +68,69 @@ insertAbsurdPattern s@(_:_) | take (length abspatvarname) s == abspatvarname = "()" ++ drop (length abspatvarname) s insertAbsurdPattern (c:s) = c : insertAbsurdPattern s -getName :: A.Expr -> Maybe (Bool, I.QName)-getName (A.ScopedExpr _ e) = getName e-getName (A.Def qname) = Just (False, qname)-getName (A.Proj _ qname) = Just (False, head $ I.unAmbQ qname)-getName (A.Con qname) = Just (True, head $ I.unAmbQ qname)-getName _ = Nothing--dispmsg :: String ->-           TCM (Either [(InteractionId, String)]-                       (Either [String] String)-               , Maybe String)-dispmsg msg = return (Left [], Just msg)+getHeadAsHint :: A.Expr -> Maybe Hint+getHeadAsHint (A.ScopedExpr _ e) = getHeadAsHint e+getHeadAsHint (A.Def qname)      = Just $ Hint False qname+getHeadAsHint (A.Proj _ qname)   = Just $ Hint False $ head $ I.unAmbQ qname+getHeadAsHint (A.Con qname)      = Just $ Hint True  $ head $ I.unAmbQ qname+getHeadAsHint _ = Nothing --- | Entry point for Auto tactic (Agsy).------     @auto ii rng s = return (res, mmsg)@------   If @mmsg = Just msg@, the message @msg@ produced by Agsy should---   be displayed to the user.+-- | Result type: Progress & potential Message for the user -----   The result @res@ of the Auto tactic can be one of the following three:+--   The  of the Auto tactic can be one of the following three: -----   1. @Left [(ii,s)]@+--   1. @Solutions [(ii,s)]@ --      A list of solutions @s@ for interaction ids @ii@.---      In particular, @Left []@ means Agsy found no solution.+--      In particular, @Solutions []@ means Agsy found no solution. -----   2. @Right (Left cs)@---      A list of clauses (the user allowed case-split).+--   2. @FunClauses cs@+--      A list of clauses for the interaction id @ii@ in which Auto+--      was invoked with case-splitting turned on. -----   3. @Right (Right s)@+--   3. @Refinement s@ --      A refinement for the interaction id @ii@ in which Auto was invoked. +data AutoProgress =+    Solutions  [(InteractionId, String)]+  | FunClauses [String]+  | Refinement String++data AutoResult = AutoResult+  { autoProgress :: AutoProgress+  , autoMessage  :: Maybe String+  }++stopWithMsg :: String -> TCM AutoResult+stopWithMsg msg = return $ AutoResult (Solutions []) (Just msg)++-- | Entry point for Auto tactic (Agsy).+--+--   If the @autoMessage@ part of the result is set to @Just msg@, the+--   message @msg@ produced by Agsy should be displayed to the user.+ auto   :: InteractionId   -> Range   -> String-  -> TCM ( Either [(InteractionId, String)]-                  (Either [String] String)-         , Maybe String)+  -> TCM AutoResult auto ii rng argstr = do    -- Parse hints and other configuration.-  let (hints, timeout, pick, mode, hintmode) = parseargs argstr+  let autoOptions = parseArgs argstr+  let hints    = autoOptions ^. aoHints+  let timeout  = autoOptions ^. aoTimeOut+  let pick     = autoOptions ^. aoPick+  let mode     = autoOptions ^. aoMode+  let hintmode = autoOptions ^. aoHintMode   ahints <- case mode of     MRefine{} -> return []     _         -> mapM (parseExprIn ii rng) hints-  let failHints = dispmsg "Hints must be a list of constant names"-  caseMaybe (mapM getName ahints) failHints $ \ ehints -> do+  let failHints = stopWithMsg "Hints must be a list of constant names" -    -- Get names for equality reasoning.-    -- @eqstuff == []@ if any of these names is not defined.-    eqstuffExprs <- mapM (parseExprIn ii rng) ["_≡_", "begin_", "_≡⟨_⟩_", "_∎", "sym", "cong"]-      `catchError`-        (\_ -> return [])-    let eqstuff = fromMaybe [] $ mapM getName eqstuffExprs+  eqstuff <- getEqCombinators ii rng +  caseMaybe (mapM getHeadAsHint ahints) failHints $ \ ehints -> do+     -- Get the meta variable for the interaction point we are trying to fill.     -- Add the @autohints@ for that meta to the hints collection.     mi <- lookupInteractionId ii@@ -156,7 +168,9 @@              nsol' <- readIORef nsol              let cond = nsol' <= numsols              when cond $ do-               trms <- runExceptT $ mapM (\ (m, _, _, _) -> frommy (Meta m)) $ Map.elems tccons+               trms <- runExceptT+                       $ mapM (\ (m , _, _, _) -> convert (Meta m) :: MOT I.Term)+                       $ Map.elems tccons                case trms of                  Left{}     -> writeIORef nsol $! nsol' + 1                  Right trms -> modifyIORef sols (trms :)@@ -165,7 +179,8 @@         ticks <- liftIO $ newIORef 0          let exsearch initprop recinfo defdfv =-             liftIO $ System.Timeout.timeout (timeout * 1000000) $ loop 0+             liftIO $ System.Timeout.timeout (getTimeOut timeout * 1000000)+                    $ loop 0              where                loop d = do                  let rechint x = case recinfo of@@ -207,7 +222,7 @@                            Nothing -> return 0                 ee <- liftIO $ newIORef $ ConstDef {cdname = "T", cdorigin = __IMPOSSIBLE__, cdtype = NotM $ Sort (Set 0), cdcont = Postulate, cddeffreevars = 0}                 let (restargs, modargs) = splitAt (length mylocalVars - defdfv) mylocalVars-                    mytype' = foldl (\x y -> NotM $ Pi Nothing Agda.Auto.Syntax.NotHidden (freeIn 0 y) y (Abs NoId x)) mytype restargs+                    mytype' = foldl (\x y -> NotM $ Pi Nothing NotHidden (freeIn 0 y) y (Abs NoId x)) mytype restargs                     htyp = negtype ee mytype'                     sctx = (Id "h", closify htyp) : map (\x -> (NoId, closify x)) modargs                     ntt = closify (NotM $ App Nothing (NotM OKVal) (Const ee) (NotM ALNil))@@ -215,7 +230,7 @@                 rsols <- liftM reverse $ liftIO $ readIORef sols                 if null rsols then do                   nsol' <- liftIO $ readIORef nsol-                  dispmsg $ insuffsols (pick + numsols - nsol')+                  stopWithMsg $ insuffsols (pick + numsols - nsol')                  else do                   aexprss <- mapM getsols rsols                   cexprss <- forM aexprss $ mapM $ \(mi, e) -> do@@ -226,11 +241,11 @@                       disp [(_, cexpr)] = ss cexpr                       disp cexprs = concat $ map (\ (mi, cexpr) -> ss cexpr ++ " ") cexprs                   ticks <- liftIO $ readIORef ticks-                  dispmsg $ unlines $+                  stopWithMsg $ unlines $                     ("Listing disproof(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1)) :                     for (zip cexprss [pick..]) (\ (x, y) -> show y ++ "  " ++ disp x)-            _ -> dispmsg "Metavariable dependencies not allowed in disprove mode"-           _ -> dispmsg "Metavariable dependencies not allowed in disprove mode"+            _ -> stopWithMsg "Metavariable dependencies not allowed in disprove mode"+           _ -> stopWithMsg "Metavariable dependencies not allowed in disprove mode"          else do           (recinfo, defdfv) <-            case thisdefinfo of@@ -269,7 +284,7 @@             rsols <- liftM reverse $ liftIO $ readIORef sols             if null rsols then do               nsol' <- liftIO $ readIORef nsol-              dispmsg $ insuffsols (pick + numsols - nsol') ++ timeoutString+              stopWithMsg $ insuffsols (pick + numsols - nsol') ++ timeoutString              else do               aexprss <- mapM getsols rsols               -- cexprss <- mapM (mapM (\(mi, e) -> lookupMeta mi >>= \mv -> withMetaInfo (getMetaInfo mv) $ abstractToConcrete_ e >>= \e' -> return (mi, e'))) aexprss@@ -284,20 +299,20 @@                     maybe (show mi) show (lookup mi riis)                       ++ " := " ++ show cexpr ++ " "               ticks <- liftIO $ readIORef ticks-              dispmsg $ "Listing solution(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) ++ timeoutString +++              stopWithMsg $ "Listing solution(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) ++ timeoutString ++                         "\n" ++ unlines (map (\(x, y) -> show y ++ "  " ++ disp x) $ zip cexprss [pick..])            else {- not listmode -}             case res of              Nothing -> do               nsol' <- liftIO $ readIORef nsol-              dispmsg $ insuffsols (pick + numsols - nsol') ++ timeoutString+              stopWithMsg $ insuffsols (pick + numsols - nsol') ++ timeoutString              Just depthreached -> do               ticks <- liftIO $ readIORef ticks               rsols <- liftIO $ readIORef sols               case rsols of                 [] -> do                   nsol' <- liftIO $ readIORef nsol-                  dispmsg $ insuffsols (pick + numsols - nsol')+                  stopWithMsg $ insuffsols (pick + numsols - nsol')                 terms -> loop terms where                   -- Andreas, 2015-05-17  Issue 1504                   -- If giving a solution failed (e.g. ill-typed)@@ -305,7 +320,8 @@                   -- However, currently @terms@ is always a singleton list.                   -- Thus, the following @loop@ is not doing something very                   -- meaningful.-                  loop [] = return (Left [], Just "")+                  loop :: [[I.Term]] -> TCM AutoResult+                  loop [] = return $ AutoResult (Solutions []) (Just "")                   loop (term : terms') = do                     -- On exception, try next solution                     flip catchError (const $ loop terms') $ do@@ -316,10 +332,10 @@                         case lookup mi riis of                          Nothing ->                           -- catchError-                           (giveExpr Nothing mi expr >> return (Nothing, Nothing))+                           (giveExpr WithoutForce Nothing mi expr >> return (Nothing, Nothing))                            -- (const retry)                            -- (\_ -> return (Nothing, Just ("Failed to give expr for side solution of " ++ show mi)))-                         Just ii' -> do ae <- give ii' Nothing expr+                         Just ii' -> do ae <- give WithoutForce ii' Nothing expr                                         mv <- lookupMeta mi                                         let scope = getMetaScope mv                                         ce <- abstractToConcreteEnv (makeEnv scope) ae@@ -337,10 +353,8 @@                                           if mi' == mi then "" else (" " ++ case lookup mi' riis of {Nothing -> show mi'; Just ii -> show ii})                                          ) exprs                       let msgs = catMaybes $ msg : map snd giveress-                          msg' = case msgs of-                                  [] -> Nothing-                                  _ -> Just $ unlines msgs-                      return (Left $ catMaybes $ map fst giveress, msg')+                          msg' = unlines msgs <$ guard (not $ null msgs)+                      return $ AutoResult (Solutions $ catMaybes $ map fst giveress) msg'       MCaseSplit -> do       case thisdefinfo of@@ -353,7 +367,7 @@           let [rectyp'] = mymrectyp           defdfv <- getdfv mi def           myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = defdfv}-          sols <- liftIO $ System.Timeout.timeout (timeout * 1000000) (+          sols <- liftIO $ System.Timeout.timeout (getTimeOut timeout * 1000000) (              let r d = do                   sols <- liftIO $ caseSplitSearch ticks __IMPOSSIBLE__ myhints meqr __IMPOSSIBLE__ d myrecdef ctx mytype pats                   case sols of@@ -364,25 +378,25 @@            Just (cls : _) -> withInteractionId ii $ do             cls' <- liftIO $ runExceptT (mapM frommyClause cls)             case cls' of-             Left{} -> dispmsg "No solution found"+             Left{} -> stopWithMsg "No solution found"              Right cls' -> do-              cls'' <- forM cls' $ \ (I.Clause _ tel ps body t catchall) -> do+              cls'' <- forM cls' $ \ (I.Clause _ _ tel ps body t catchall reachable) -> do                 withCurrentModule (AN.qnameModule def) $ do                  -- Normalise the dot patterns                  ps <- addContext tel $ normalise ps                  body <- etaContract body-                 liftM modifyAbstractClause $ inTopContext $ reify $ AN.QNamed def $ I.Clause noRange tel ps body t catchall+                 liftM modifyAbstractClause $ inTopContext $ reify $ AN.QNamed def $ I.Clause noRange noRange tel ps body t catchall reachable               moduleTel <- lookupSection (AN.qnameModule def)               pcs <- withInteractionId ii $ inTopContext $ addContext moduleTel $ mapM prettyA cls''               ticks <- liftIO $ readIORef ticks  -              return (Right $ Left (map (insertAbsurdPattern . PP.renderStyle (PP.style { PP.mode = PP.OneLineMode })) pcs), Nothing)+              return $ AutoResult (FunClauses $ map (insertAbsurdPattern . PP.renderStyle (PP.style { PP.mode = PP.OneLineMode })) pcs) Nothing -           Just [] -> dispmsg "No solution found" -- case not possible at the moment because case split doesnt care about search exhaustiveness-           Nothing -> dispmsg $ "No solution found at time out (" ++ show timeout ++ "s)"-         _ -> dispmsg "Metavariable dependencies not allowed in case split mode"-       _ -> dispmsg "Metavariable is not at top level of clause RHS"+           Just [] -> stopWithMsg "No solution found" -- case not possible at the moment because case split doesnt care about search exhaustiveness+           Nothing -> stopWithMsg $ "No solution found at time out (" ++ show timeout ++ "s)"+         _ -> stopWithMsg "Metavariable dependencies not allowed in case split mode"+       _ -> stopWithMsg "Metavariable is not at top level of clause RHS"       MRefine listmode -> do       mv <- lookupMeta mi@@ -431,32 +445,31 @@            Just score -> Just (show cn, score)          ) modnames -      let sorthits = sortBy (\(_, (pa1, pb1)) (_, (pa2, pb2)) -> case compare pa2 pa1 of {EQ -> compare pb1 pb2; o -> o}) hits+      let sorthits = List.sortBy (\(_, (pa1, pb1)) (_, (pa2, pb2)) -> case compare pa2 pa1 of {EQ -> compare pb1 pb2; o -> o}) hits       if listmode || pick == (-1) then         let pick' = max 0 pick         in if pick' >= length sorthits then-             dispmsg $ insuffcands $ length sorthits+             stopWithMsg $ insuffcands $ length sorthits             else              let showhits = take 10 $ drop pick' sorthits-             in dispmsg $ "Listing candidate(s) " ++ show pick' ++ "-" ++ show (pick' + length showhits - 1) ++ " (found " ++ show (length sorthits) ++ " in total)\n" +++             in stopWithMsg $ "Listing candidate(s) " ++ show pick' ++ "-" ++ show (pick' + length showhits - 1) ++ " (found " ++ show (length sorthits) ++ " in total)\n" ++                            unlines (map (\(i, (cn, _)) -> show i ++ "  " ++ cn) (zip [pick'..pick' + length showhits - 1] showhits))        else         if pick >= length sorthits then-         dispmsg $ insuffcands $ length sorthits+         stopWithMsg $ insuffcands $ length sorthits         else-         return (Right $ Right (fst $ sorthits !! pick), Nothing)+         return $ AutoResult (Refinement $ fst $ sorthits !! pick) Nothing   where     agsyinfo ticks = ""  -- Get the functions and axioms defined in the same module as @def@.-autohints :: AutoHintMode -> I.MetaId -> Maybe AN.QName ->-             TCM [(Bool, AN.QName)]+autohints :: AutoHintMode -> I.MetaId -> Maybe AN.QName -> TCM [Hint] autohints AHMModule mi (Just def) = do   scope <- clScope . getMetaInfo <$> lookupMeta mi   let names     = Scope.nsNames $ Scope.everythingInScope scope       qnames    = map (Scope.anameName . head) $ Map.elems names       modnames  = filter (\n -> AN.qnameModule n == AN.qnameModule def && n /= def) qnames-  map (False,) <$> do+  map (Hint False) <$> do     (`filterM` modnames) $ \ n -> do       c <- getConstInfo n       case theDef c of@@ -467,48 +480,27 @@  autohints _ _ _ = return [] -insuffsols :: Int -> String-insuffsols 0 = "No solution found"-insuffsols n = "Only " ++ show n ++ " solution(s) found" -insuffcands :: Int -> String-insuffcands 0 = "No candidate found"-insuffcands n = "Only " ++ show n ++ " candidate(s) found" -data Mode = MNormal Bool Bool -- true if list mode, true if disprove--          | MCaseSplit--          | MRefine Bool -- true if list mode---data AutoHintMode = AHMNone-                  | AHMModule+-- | Names for the equality reasoning combinators+--   Empty if any of these names is not defined. -parseargs :: String -> ([String], Int, Int, Mode, AutoHintMode)-parseargs s =- let r ("-t" : timeout : ws) (_, pick, mode, hintmode) =-      r ws (read timeout, pick, mode, hintmode)-     r ("-s" : pick : ws) (timeout, _, mode, hintmode) =-      r ws (timeout, read pick, mode, hintmode)+getEqCombinators :: InteractionId -> Range -> TCM [Hint]+getEqCombinators ii rng = do+  let eqCombinators = ["_≡_", "begin_", "_≡⟨_⟩_", "_∎", "sym", "cong"]+  raw <- mapM (parseExprIn ii rng) eqCombinators `catchError` const (pure [])+  return $ fromMaybe [] $ mapM getHeadAsHint raw +-- | Templates for error messages -     r ("-l" : ws) (timeout, pick, MNormal _ disprove, hintmode) =-      r ws (timeout, pick, MNormal True disprove, hintmode)-     r ("-l" : ws) (timeout, pick, MRefine _, hintmode) =-      r ws (timeout, pick, MRefine True, hintmode)-     r ("-d" : ws) (timeout, pick, MNormal listmode _, hintmode) =-      r ws (timeout, pick, MNormal listmode True, hintmode)-     r ("-m" : ws) (timeout, pick, mode, _) =-      r ws (timeout, pick, mode, AHMModule)+genericNotEnough :: String -> Int -> String+genericNotEnough str n = List.intercalate " " $ case n of+  0 -> [ "No"    , str, "found"]+  1 -> [ "Only 1", str, "found" ]+  _ -> [ "Only", show n, str ++ "s", "found" ] -     r ("-c" : ws) (timeout, pick, _, hintmode) =-      r ws (timeout, pick, MCaseSplit, hintmode)+insuffsols :: Int -> String+insuffsols  = genericNotEnough "solution" -     r ("-r" : ws) (timeout, pick, _, hintmode) =-      r ws (timeout, (-1), MRefine False, hintmode)-     r (h : ws) x =-      let (hints, timeout, pick, mode, hintmode) = r ws x-      in (h : hints, timeout, pick, mode, hintmode)-     r [] (x,y,z,w) = ([],x,y,z,w)- in r (words s) (5, 0, MNormal False False, AHMNone)+insuffcands :: Int -> String+insuffcands = genericNotEnough "candidate"
src/full/Agda/Auto/CaseSplit.hs view
@@ -1,12 +1,25 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE UndecidableInstances #-}  module Agda.Auto.CaseSplit where +#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative ( (<$>), (<*>), pure )+#endif+ import Data.IORef+import Data.Tuple (swap) import Data.List (findIndex, union)+import Data.Monoid ((<>), Sum(..))+import Data.Foldable (foldMap)+import qualified Data.Set    as Set import qualified Data.IntMap as IntMap+import Control.Monad.State as St hiding (lift)+import Control.Monad.Reader as Rd hiding (lift)+import qualified Control.Monad.State as St+import Data.Function +import Agda.Syntax.Common (Hiding(..)) import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax @@ -15,18 +28,19 @@  #include "undefined.h" import Agda.Utils.Impossible+import Agda.Utils.Monad (or2M)  abspatvarname :: String abspatvarname = "\0absurdPattern"  costCaseSplitVeryHigh, costCaseSplitHigh, costCaseSplitLow, costAddVarDepth-  :: Nat+  :: Cost costCaseSplitVeryHigh = 10000 costCaseSplitHigh     = 5000 costCaseSplitLow      = 2000 costAddVarDepth       = 1000 -data HI a = HI FMode a+data HI a = HI Hiding a  drophid :: [HI a] -> [a] drophid = map (\(HI _ x) -> x)@@ -43,39 +57,33 @@               | CSOmittedArg type Sol o = [(CSCtx o, [CSPat o], Maybe (MExp o))] -caseSplitSearch :: forall o . IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+caseSplitSearch ::+  forall o . IORef Int -> Int -> [ConstRef o] ->+  Maybe (EqReasoningConsts o) -> Int -> Cost -> ConstRef o ->+  CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o] caseSplitSearch ticks nsolwanted chints meqr depthinterval depth recdef ctx tt pats = do- let branchsearch depth ctx tt termcheckenv = do-+ let branchsearch :: Cost -> CSCtx o -> MExp o ->+                     ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))+     branchsearch depth ctx tt termcheckenv = do        nsol <- newIORef 1       m <- initMeta       sol <- newIORef Nothing       let trm = Meta m-          hsol = do trm' <- expandExp trm--+          hsol = do trm' <- expandMetas trm                     writeIORef sol (Just trm')---          hpartsol = __IMPOSSIBLE__--          initcon = mpret $ Sidecondition (localTerminationSidecond termcheckenv recdef trm)-                                          (--                                           (case meqr of-                                            Nothing -> id-                                            Just eqr -> mpret . Sidecondition (calcEqRState eqr trm)-                                           )--                                           (tcSearch False (map (\(id, t) -> (id, closify t)) (drophid ctx)) (closify tt) trm)-                                          )+          initcon = mpret+                  $ Sidecondition+                    (localTerminationSidecond termcheckenv recdef trm)+                  $ (case meqr of+                        Nothing  -> id+                        Just eqr -> mpret . Sidecondition (calcEqRState eqr trm)+                     ) $ tcSearch False (map (fmap closify) (drophid ctx))+                         (closify tt) trm       recdefd <- readIORef recdef-      let env = RIEnv {rieHints = (recdef, HMRecCall) : map (\x -> (x, HMNormal)) chints,-                       rieDefFreeVars = cddeffreevars recdefd--                       , rieEqReasoningConsts = meqr-+      let env = RIEnv { rieHints = (recdef, HMRecCall) : map (, HMNormal) chints+                      , rieDefFreeVars = cddeffreevars recdefd+                      , rieEqReasoningConsts = meqr                       }       depreached <- topSearch ticks nsol hsol env initcon depth (depth + 1)       rsol <- readIORef sol@@ -85,13 +93,15 @@      ff n (HI hid (id, t) : ctx) = HI hid (id, lift n t) : ff (n + 1) ctx  caseSplitSearch' branchsearch depthinterval depth recdef ctx' tt pats -caseSplitSearch' :: forall o . (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+caseSplitSearch' :: forall o .+  (Cost -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) ->+  Int -> Cost -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o] caseSplitSearch' branchsearch depthinterval depth recdef ctx tt pats = do   recdefd <- readIORef recdef   sols <- rc depth (cddeffreevars recdefd) ctx tt pats   return sols  where-  rc :: Int -> Int -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+  rc :: Cost -> Int -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]   rc depth _ _ _ _ | depth < 0 = return []   rc depth nscrutavoid ctx tt pats = do @@ -107,7 +117,8 @@     case sols1 of      (_:_) -> return sols1      [] -> do-      let r [] = return []+      let r :: [Nat] -> IO [Sol o]+          r [] = return []           r (v:vs) = do            sols2 <- splitvar mblkvar v            case sols2 of@@ -128,7 +139,7 @@    splitvar :: [Nat] -> Nat -> IO [Sol o]    splitvar mblkvar scrut = do     let scruttype = infertypevar ctx scrut-    case rm scruttype of+    case rm __IMPOSSIBLE__ scruttype of      App _ _ (Const c) _ -> do       cd <- readIORef c       case cdcont cd of@@ -139,7 +150,7 @@            case findperm (map snd (drophid ctx)) of             Just perm ->              let HI scrhid(_, scrt) = ctx !! scrut-                 ctx1 = take scrut ctx ++ (HI scrhid (stringToMyId abspatvarname, scrt)) : drop (scrut + 1) ctx+                 ctx1 = take scrut ctx ++ (HI scrhid (Id abspatvarname, scrt)) : drop (scrut + 1) ctx                  (ctx', _, pats') = applyperm perm ctx1 tt ({-map (replacep scrut 1 CSAbsurd __IMPOSSIBLE__) -}pats)              in [(ctx', pats', Nothing)]             Nothing -> __IMPOSSIBLE__ -- no permutation found@@ -150,18 +161,18 @@          dobranches [] = return [[]]          dobranches (con : cons) = do           cond <- readIORef con-          let ff t = case rm t of+          let ff t = case rm __IMPOSSIBLE__ t of                         Pi _ h _ it (Abs id ot) ->                          let (xs, inft) = ff ot-                         in ((Pair h (scrut + length xs), id, lift (scrut + length xs + 1) it) : xs, inft)+                         in (((h, scrut + length xs), id, lift (scrut + length xs + 1) it) : xs, inft)                         _ -> ([], lift scrut t)               (newvars, inftype) = ff (cdtype cond)-              constrapp = mm $ App Nothing (mm OKVal) (Const con) (foldl (\xs (Pair h v, _, _) -> mm $ ALCons h (mm $ App Nothing (mm OKVal) (Var v) (mm ALNil)) xs) (mm ALNil) (reverse newvars))-              pconstrapp = CSPatConApp con (map (\(Pair hid v, _, _) -> HI hid (CSPatVar v)) newvars)+              constrapp = NotM $ App Nothing (NotM OKVal) (Const con) (foldl (\xs ((h, v), _, _) -> NotM $ ALCons h (NotM $ App Nothing (NotM OKVal) (Var v) (NotM ALNil)) xs) (NotM ALNil) (reverse newvars))+              pconstrapp = CSPatConApp con (map (\((hid, v), _, _) -> HI hid (CSPatVar v)) newvars)               thesub = replace scrut (length newvars) constrapp               Id newvarprefix = fst $ (drophid ctx) !! scrut               ctx1 = map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (take scrut ctx) ++-                     reverse (map (\((Pair hid _, id, t), i) ->+                     reverse (map (\(((hid, _), id, t), i) ->                        HI hid (Id (case id of {NoId -> newvarprefix{- ++ show i-}; Id id -> id}), t)                       ) (zip newvars [0..])) ++                      map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (drop (scrut + 1) ctx)@@ -180,12 +191,15 @@              let (ctx2, tt2, pats2) = removevar ctx1 tt' pats' unif                  --cost = if elem scrut mblkvar then costCaseSplit - (costCaseSplit - costCaseSplitFollow) `div` (length mblkvar) else costCaseSplit                  cost = if null mblkvar then-                         if scrut < length ctx - nscrutavoid && nothid then costCaseSplitLow + costAddVarDepth * depthofvar scrut pats else costCaseSplitVeryHigh+                         if scrut < length ctx - nscrutavoid && nothid+                         then costCaseSplitLow + costAddVarDepth+                              * Cost (depthofvar scrut pats)+                         else costCaseSplitVeryHigh                         else                          if elem scrut mblkvar then costCaseSplitLow else (if scrut < length ctx - nscrutavoid && nothid then costCaseSplitHigh else costCaseSplitVeryHigh)                   nothid = let HI hid _ = ctx !! scrut-                          in case hid of {Hidden -> False; Instance -> False; NotHidden -> True}+                          in hid == NotHidden                sols <- rc (depth - cost) (length ctx - 1 - scrut) ctx2 tt2 pats2@@ -199,72 +213,73 @@  infertypevar :: CSCtx o -> Nat -> MExp o infertypevar ctx v = snd $ (drophid ctx) !! v-replace :: Nat -> Nat -> MExp o -> MExp o -> MExp o-replace sv nnew re = r 0- where-  r n e =-   case rm e of-         App uid ok elr@(Var v) args ->-          if v >= n then-           if v - n == sv then-            betareduce (lift n re) (rs n args)-           else-            if v - n > sv then-             mm $ App uid ok (Var (v + nnew - 1)) (rs n args)-            else-             mm $ App uid ok elr (rs n args)-          else-           mm $ App uid ok elr (rs n args)-         App uid ok elr@(Const _) args ->-          mm $ App uid ok elr (rs n args)-         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (n + 1) e))-         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r n it) (Abs mid (r (n + 1) ot))-         Sort{} -> e -         AbsurdLambda{} -> e+class Replace o t u | t u -> o where+  replace' :: Nat -> MExp o -> t -> Reader (Nat, Nat) u +replace :: Replace o t u => Nat -> Nat -> MExp o -> t -> u+replace sv nnew e t = replace' 0 e t `runReader` (sv, nnew) -  rs n es =-   case rm es of-    ALNil -> mm $ ALNil-    ALCons hid a as -> mm $ ALCons hid (r n a) (rs n as)+instance Replace o t u => Replace o (Abs t) (Abs u) where+  replace' n re (Abs mid b) = Abs mid <$> replace' (n + 1) re b -    ALProj{} -> __IMPOSSIBLE__+instance Replace o (Exp o) (MExp o) where+  replace' n re e = case e of+    App uid ok elr@(Var v) args -> do+      ih         <- NotM <$> replace' n re args+      (sv, nnew) <- ask+      return $+        if v >= n+        then if v - n == sv+             then betareduce (lift n re) ih+             else if v - n > sv+                  then NotM $ App uid ok (Var (v + nnew - 1)) ih+                  else NotM $ App uid ok elr ih+        else NotM $ App uid ok elr ih+    App uid ok elr@Const{} args ->+      NotM . App uid ok elr . NotM <$> replace' n re args+    Lam hid b -> NotM . Lam hid <$> replace' (n + 1) re b+    Pi uid hid possdep it b ->+      fmap NotM $ Pi uid hid possdep <$> replace' n re it <*> replace' n re b+    Sort{} -> return $ NotM e+    AbsurdLambda{} -> return $ NotM e +instance Replace o t u => Replace o (MM t (RefInfo o)) u where+  replace' n re = replace' n re . rm __IMPOSSIBLE__ -    ALConPar as -> mm $ ALConPar (rs n as)+instance Replace o (ArgList o) (ArgList o) where+  replace' n re args = case args of+    ALNil           -> return ALNil+    ALCons hid a as ->+      ALCons hid <$> replace' n re a <*> (NotM <$> replace' n re as)+    ALProj{}        -> __IMPOSSIBLE__+    ALConPar as     -> ALConPar . NotM <$> replace' n re as   betareduce :: MExp o -> MArgList o -> MExp o-betareduce e args = case rm args of+betareduce e args = case rm __IMPOSSIBLE__ args of  ALNil -> e- ALCons _ a rargs -> case rm e of-  App uid ok elr eargs -> mm $ App uid ok elr (concatargs eargs args)+ ALCons _ a rargs -> case rm __IMPOSSIBLE__ e of+  App uid ok elr eargs -> NotM $ App uid ok elr (concatargs eargs args)   Lam _ (Abs _ b) -> betareduce (replace 0 0 a b) rargs   _ -> __IMPOSSIBLE__ -- not type correct if this happens-  ALProj{} -> __IMPOSSIBLE__-  ALConPar as -> __IMPOSSIBLE__ -concatargs :: MM (ArgList o) (RefInfo o) -> MArgList o -> MArgList o-concatargs xs ys = case rm xs of+concatargs :: MArgList o -> MArgList o -> MArgList o+concatargs xs ys = case rm __IMPOSSIBLE__ xs of   ALNil -> ys -  ALCons hid x xs -> mm $ ALCons hid x (concatargs xs ys)+  ALCons hid x xs -> NotM $ ALCons hid x (concatargs xs ys)    ALProj{} -> __IMPOSSIBLE__ -  ALConPar as -> mm $ ALConPar (concatargs xs ys)--eqelr :: Elr o -> Elr o -> Bool-eqelr (Var v1) (Var v2) = v1 == v2-eqelr (Const c1) (Const c2) = c1 == c2-eqelr _ _ = False+  ALConPar as -> NotM $ ALConPar (concatargs xs ys) -replacep :: Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o+replacep :: forall o. Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o replacep sv nnew rp re = r  where+  r :: CSPat o -> CSPat o   r (HI hid (CSPatConApp c ps)) = HI hid (CSPatConApp c (map r ps))   r (HI hid (CSPatVar v)) = if v == sv then                     HI hid rp@@ -279,76 +294,140 @@    r _ = __IMPOSSIBLE__ -- other constructors dont appear in indata Pats -rm :: MM a b -> a-rm (NotM x) = x-rm (Meta{}) = __IMPOSSIBLE__ -mm :: a -> MM a b-mm = NotM -unifyexp :: MExp o -> MExp o -> Maybe [(Nat, MExp o)]-unifyexp e1 e2 = r e1 e2 (\unif -> Just unif) []- where-  r e1 e2 cont unif = case (rm e1, rm e2) of-   (App _ _ elr1 args1, App _ _ elr2 args2) | eqelr elr1 elr2 -> rs args1 args2 cont unif-   (Lam hid1 (Abs _ b1), Lam hid2 (Abs _ b2)) | hid1 == hid2 -> r b1 b2 cont unif-   (Pi _ hid1 _ it1 (Abs _ ot1), Pi _ hid2 _ it2 (Abs _ ot2)) | hid1 == hid2 -> r it1 it2 (r ot1 ot2 cont) unif-   (Sort _, Sort _) -> cont unif -- a bit sloppy-   (App _ _ (Var v) (NotM ALNil), App _ _ (Var u) (NotM ALNil))-     | v == u -> cont unif+-- Unification takes two values of the same type and generates a list+-- of assignments making the two terms equal.++type Assignments o = [(Nat, Exp o)]++class Unify o t | t -> o where+  unify'    :: t -> t -> StateT (Assignments o) Maybe ()+  notequal' :: t -> t -> ReaderT (Nat, Nat) (StateT (Assignments o) IO) Bool++unify :: Unify o t => t -> t -> Maybe (Assignments o)+unify t u = unify' t u `execStateT` []++notequal :: Unify o t => Nat -> Nat -> t -> t -> IO Bool+notequal fstnew nbnew t1 t2 = notequal' t1 t2 `runReaderT` (fstnew, nbnew)+                                              `evalStateT` []++instance Unify o t => Unify o (MM t (RefInfo o)) where+  unify' = unify' `on` rm __IMPOSSIBLE__++  notequal' = notequal' `on` rm __IMPOSSIBLE__++unifyVar :: Nat -> Exp o -> StateT (Assignments o) Maybe ()+unifyVar v e = do+  unif <- get+  case lookup v unif of+    Nothing -> modify ((v, e) :)+    Just e' -> unify' e e'++instance Unify o t => Unify o (Abs t) where+  unify' (Abs _ b1) (Abs _ b2) = unify' b1 b2++  notequal' (Abs _ b1) (Abs _ b2) = notequal' b1 b2++instance Unify o (Exp o) where+  unify' e1 e2 = case (e1, e2) of+   (App _ _ elr1 args1, App _ _ elr2 args2) | elr1 == elr2 -> unify' args1 args2+   (Lam hid1 b1, Lam hid2 b2)               | hid1 == hid2 -> unify' b1 b2+   (Pi _ hid1 _ a1 b1, Pi _ hid2 _ a2 b2)   | hid1 == hid2 -> unify' a1 a2+                                                           >> unify' b1 b2+   (Sort _, Sort _) -> return () -- a bit sloppy    (App _ _ (Var v) (NotM ALNil), _)-     | elem v (freevars e2) -> Nothing -- Occurs check+     | elem v (freevars e2) -> St.lift Nothing -- Occurs check    (_, App _ _ (Var v) (NotM ALNil))-     | elem v (freevars e1) -> Nothing -- Occurs check-   (App _ _ (Var v) (NotM ALNil), _) ->-    case lookup v unif of-     Nothing -> cont ((v, e2) : unif)-     Just e1' -> r e1' e2 cont unif-   (_, App _ _ (Var v) (NotM ALNil)) ->-    case lookup v unif of-     Nothing -> cont ((v, e1) : unif)-     Just e2' -> r e1 e2' cont unif-   _ -> Nothing-  rs args1 args2 cont unif = case (rm args1, rm args2) of-   (ALNil, ALNil) -> cont unif-   (ALCons hid1 a1 as1, ALCons hid2 a2 as2) | hid1 == hid2 -> r a1 a2 (rs as1 as2 cont) unif-   (ALConPar as1, ALCons _ _ as2) -> rs as1 as2 cont unif-   (ALCons _ _ as1, ALConPar as2) -> rs as1 as2 cont unif-   (ALConPar as1, ALConPar as2) -> rs as1 as2 cont unif-   _ -> Nothing+     | elem v (freevars e1) -> St.lift Nothing -- Occurs check+   (App _ _ (Var v) (NotM ALNil), _) -> unifyVar v e2+   (_, App _ _ (Var v) (NotM ALNil)) -> unifyVar v e1+   _ -> St.lift Nothing -lift :: Nat -> MExp o -> MExp o-lift 0 = id-lift n = r 0- where-  r j e =-   case rm e of-         App uid ok elr args -> case elr of-          Var v | v >= j -> mm $ App uid ok (Var (v + n)) (rs j args)-          _ -> mm $ App uid ok elr (rs j args)-         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (j + 1) e))-         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r j it) (Abs mid (r (j + 1) ot))-         Sort{} -> e+  notequal' e1 e2 = do+    (fstnew, nbnew) <- ask+    unifier         <- get+    case (e1, e2) of+      (App _ _ elr1 es1, App _ _ elr2 es2) | elr1 == elr2 -> notequal' es1 es2+      (_, App _ _ (Var v2) (NotM ALNil)) -- why is this not symmetric?!+        | fstnew <= v2 && v2 < fstnew + nbnew ->+        case lookup v2 unifier of+          Nothing  -> modify ((v2, e1):) >> return False+          Just e2' -> notequal' e1 e2'+{-+  GA: Skipped these: Not sure why we'd claim they're impossible+      (_, App _ _ (Var v2) (NotM ALProj{})) -> __IMPOSSIBLE__+      (_, App _ _ (Var v2) (NotM ALConPar{})) -> __IMPOSSIBLE__+-}+      (App _ _ (Const c1) es1, App _ _ (Const c2) es2) -> do+        cd1 <- liftIO $ readIORef c1+        cd2 <- liftIO $ readIORef c2+        case (cdcont cd1, cdcont cd2) of+          (Constructor{}, Constructor{}) -> if c1 == c2 then notequal' es1 es2+                                            else return True+          _ -> return False+{- GA: Why don't we have a case for distinct heads after all these+       unification cases for vars with no spines & metas that can+       be looked up?+      (App _ _ elr1 _, App _ _ elr2 _) | elr1 <> elr2 -> return True+-}+      _ -> return False -         AbsurdLambda{} -> e+instance Unify o (ArgList o) where+  unify' args1 args2 = case (args1, args2) of+   (ALNil, ALNil) -> pure ()+   (ALCons hid1 a1 as1, ALCons hid2 a2 as2) | hid1 == hid2 -> unify' a1 a2+                                                           >> unify' as1 as2+   (ALConPar as1, ALCons _ _ as2) -> unify' as1 as2+   (ALCons _ _ as1, ALConPar as2) -> unify' as1 as2+   (ALConPar as1, ALConPar as2)   -> unify' as1 as2+   _ -> St.lift Nothing +  notequal' args1 args2 = case (args1, args2) of+    (ALCons _ e es, ALCons _ f fs) -> notequal' e f `or2M` notequal' es fs+    (ALConPar es1, ALConPar es2)   -> notequal' es1 es2+    _                              -> return False -  rs j es =-   case rm es of-    ALNil -> mm $ ALNil-    ALCons hid a as -> mm $ ALCons hid (r j a) (rs j as)+-- This definition is only here to respect the previous interface.+unifyexp :: MExp o -> MExp o -> Maybe ([(Nat, MExp o)])+unifyexp e1 e2 = fmap (NotM <$>) <$> unify e1 e2 -    ALProj{} -> __IMPOSSIBLE__+class Lift t where+  lift' :: Nat -> Nat -> t -> t +lift :: Lift t => Nat -> t -> t+lift 0 = id+lift n = lift' n 0 -    ALConPar as -> mm $ ALConPar (rs j as)+instance Lift t => Lift (Abs t) where+  lift' n j (Abs mid b) = Abs mid (lift' n (j + 1) b) +instance Lift t => Lift (MM t r) where+  lift' n j = NotM . lift' n j . rm __IMPOSSIBLE__ +instance Lift (Exp o) where+  lift' n j e = case e of+    App uid ok elr args -> case elr of+      Var v | v >= j -> App uid ok (Var (v + n)) (lift' n j args)+      _ -> App uid ok elr (lift' n j args)+    Lam hid b -> Lam hid (lift' n j b)+    Pi uid hid possdep it b -> Pi uid hid possdep (lift' n j it) (lift' n j b)+    Sort{} -> e+    AbsurdLambda{} -> e++instance Lift (ArgList o) where+  lift' n j args = case args of+    ALNil           -> ALNil+    ALCons hid a as -> ALCons hid (lift' n j a) (lift' n j as)+    ALProj{}        -> __IMPOSSIBLE__+    ALConPar as     -> ALConPar (lift' n j as)++ removevar :: CSCtx o -> MExp o -> [CSPat o] -> [(Nat, MExp o)] -> (CSCtx o, MExp o, [CSPat o]) removevar ctx tt pats [] = (ctx, tt, pats) removevar ctx tt pats ((v, e) : unif) =  let-  e2 = replace v 0 (__IMPOSSIBLE__ {- occurs check failed -}) e+  e2 = replace v 0 __IMPOSSIBLE__ {- occurs check failed -} e   thesub = replace v 0 e2   ctx1 = map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (take v ctx) ++          map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (drop (v + 1) ctx)@@ -358,84 +437,26 @@  in   removevar ctx1 tt' pats' unif' -notequal :: Nat -> Nat -> MExp o -> MExp o -> IO Bool-notequal firstnew nnew e1 e2 =-  case (rm e1, rm e2) of-   (App _ _ _ es1, App _ _ _ es2) -> rs es1 es2 (\_ -> return False) []-   _ -> __IMPOSSIBLE__- where-  rs :: MArgList o -> MArgList o -> ([(Nat, MExp o)] -> IO Bool) -> [(Nat, MExp o)] -> IO Bool-  rs es1 es2 cont unifier2 =-   case (rm es1, rm es2) of-    (ALCons _ e1 es1, ALCons _ e2 es2) -> r e1 e2 (rs es1 es2 cont) unifier2--    (ALConPar es1, ALConPar es2) -> rs es1 es2 cont unifier2--    _ -> cont unifier2--  r :: MExp o -> MExp o -> ([(Nat, MExp o)] -> IO Bool) -> [(Nat, MExp o)] -> IO Bool-  r e1 e2 cont unifier2 = case rm e2 of-   App _ _ (Var v2) es2 | firstnew <= v2 && v2 < firstnew + nnew ->-    case rm es2 of-     ALNil ->-      case lookup v2 unifier2 of-       Nothing -> cont ((v2, e1) : unifier2)-       Just e2' -> cc e1 e2'-     ALCons{} -> cont unifier2--     ALProj{} -> __IMPOSSIBLE__---     ALConPar{} -> __IMPOSSIBLE__--   _ -> cc e1 e2-   where-   cc e1 e2 = case (rm e1, rm e2) of-    (App _ _ (Const c1) es1, App _ _ (Const c2) es2) -> do-     cd1 <- readIORef c1-     cd2 <- readIORef c2-     case (cdcont cd1, cdcont cd2) of-      (Constructor{}, Constructor{}) ->-       if c1 == c2 then-        rs es1 es2 cont unifier2-       else-        return True-      _ -> cont unifier2-    _ -> cont unifier2- findperm :: [MExp o] -> Maybe [Nat] findperm ts =  let   frees = map freevars ts-  m = IntMap.fromList (map (\i -> (i, length (filter (elem i) frees))) [0..length ts - 1])+  m = IntMap.fromList $+      map (\i -> (i, length (filter (elem i) frees)))+          [0..length ts - 1]   r _ perm 0 = Just $ reverse perm   r m perm n =-   case lookup 0 (map (\(x,y) -> (y,x)) (IntMap.toList m)) of+   case lookup 0 (map swap (IntMap.toList m)) of     Nothing -> Nothing-    Just i -> r (foldl (\m i -> IntMap.adjust (\x -> x - 1) i m) (IntMap.insert i (-1) m) (frees !! i)) (i : perm) (n - 1)+    Just i -> r (foldl (flip $ IntMap.adjust (subtract 1))+                       (IntMap.insert i (-1) m)+                       (frees !! i))+                 (i : perm) (n - 1)  in r m [] (length ts) -freevars :: MExp o -> [Nat]-freevars = f 0- where-  f n e = case rm e of-   App _ _ (Var v) args -> union [v - n] (fs n args)-   App _ _ (Const _) args -> fs n args-   Lam _ (Abs _ b) -> f (n + 1) b-   Pi _ _ _ it (Abs _ ot) -> union (f n it) (f (n + 1) ot)-   Sort{} -> [] -   AbsurdLambda{} -> []---  fs n es = case rm es of-   ALNil -> []-   ALCons _ e es -> union (f n e) (fs n es)--   ALProj{} -> __IMPOSSIBLE__---   ALConPar es -> fs n es+freevars :: FreeVars t => t -> [Nat]+freevars = Set.toList . freeVars  applyperm :: [Nat] -> CSCtx o -> MExp o -> [CSPat o] ->              (CSCtx o, MExp o, [CSPat o])@@ -444,48 +465,22 @@      ctx2 = map (\i -> ctx1 !! i) perm      ctx3 = seqctx ctx2      tt' = rename (ren perm) tt-     pats' = map (renamep (ren perm)) pats+     pats' = map (rename (ren perm)) pats  in (ctx3, tt', pats')  ren :: [Nat] -> Nat -> Int ren n i = let Just j = findIndex (== i) n in j -rename :: (Nat -> Nat) -> MExp o -> MExp o-rename ren = r 0- where-  r j e =-   case rm e of-         App uid ok elr args -> case elr of-          Var v | v >= j -> mm $ App uid ok (Var (ren (v - j) + j)) (rs j args)-          _ -> mm $ App uid ok elr (rs j args)-         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (j + 1) e))-         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r j it) (Abs mid (r (j + 1) ot))-         Sort{} -> e--         AbsurdLambda{} -> e---  rs j es =-   case rm es of-    ALNil -> mm $ ALNil-    ALCons hid a as -> mm $ ALCons hid (r j a) (rs j as)--    ALProj{} -> __IMPOSSIBLE__---    ALConPar as -> mm $ ALConPar (rs j as)---renamep :: (Nat -> Nat) -> CSPat o -> CSPat o-renamep ren = r- where-  r (HI hid (CSPatConApp c pats)) = HI hid (CSPatConApp c (map r pats))-  r (HI hid (CSPatVar i)) = HI hid (CSPatVar $ ren i)-  r (HI hid (CSPatExp e)) = HI hid (CSPatExp $ rename ren e)--  r p@(HI _ CSOmittedArg) = p+instance Renaming t => Renaming (HI t) where+  renameOffset j ren (HI hid t) = HI hid $ renameOffset j ren t -  r _ = __IMPOSSIBLE__+instance Renaming (CSPatI o) where+  renameOffset j ren e = case e of+    CSPatConApp c pats -> CSPatConApp c $ map (renameOffset j ren) pats+    CSPatVar i         -> CSPatVar $ j + ren i+    CSPatExp e         -> CSPatExp $ renameOffset j ren e+    CSOmittedArg       -> e+    _                  -> __IMPOSSIBLE__  seqctx :: CSCtx o -> CSCtx o seqctx = r (-1)@@ -503,49 +498,61 @@  in depth  -- --------------------+-- | Speculation: Type class computing the size (?) of a pattern+--   and collecting the vars it introduces+class LocalTerminationEnv a where+  sizeAndBoundVars :: a -> (Sum Nat, [Nat]) -localTerminationEnv :: [CSPat o] -> ([Nat], Nat, [Nat])-localTerminationEnv pats =- let g _ [] = ([], 0, [])-     g i (hp@(HI _ p) : ps) = case p of-      CSPatConApp{} ->-       let (size, vars) = h hp-           (is, size', vars') = g (i + 1) ps-       in (i : is, size + size', vars ++ vars')-      _ -> g (i + 1) ps-     h (HI _ p) = case p of-      CSPatConApp c ps ->-       let (size, vars) = hs ps-       in (size + 1, vars)-      CSPatVar n -> (0, [n])-      CSPatExp e -> he e-      _ -> (0, [])-     hs [] = (0, [])-     hs (p : ps) =-      let (size, vars) = h p-          (size', vars') = hs ps-      in (size + size', vars ++ vars')-     he e = case rm e of-      App _ _ (Var v) _ -> (0, [v])-      App _ _ (Const _) args ->-       let (size, vars) = hes args-       in (size + 1, vars)-      _ -> (0, [])-     hes as = case rm as of-      ALNil -> (0, [])-      ALCons _ a as ->-       let (size, vars) = he a-           (size', vars') = hes as-       in (size + size', vars ++ vars')+instance LocalTerminationEnv a => LocalTerminationEnv (HI a) where+  sizeAndBoundVars (HI _ p) = sizeAndBoundVars p -      ALProj{} -> __IMPOSSIBLE__+instance LocalTerminationEnv (CSPatI o) where+  sizeAndBoundVars p = case p of+    CSPatConApp _ ps -> (1, []) <> sizeAndBoundVars ps+    CSPatVar n       -> (0, [n])+    CSPatExp e       -> sizeAndBoundVars e+    _                -> (0, []) +instance LocalTerminationEnv a => LocalTerminationEnv [a] where+  sizeAndBoundVars = foldMap sizeAndBoundVars -      ALConPar as -> hes as+instance LocalTerminationEnv (MExp o) where+--  sizeAndBoundVars e = case rm __IMPOSSIBLE__ e of+-- GA: 2017 06 27: Not actually impossible! (cf. #2620)+  sizeAndBoundVars Meta{} = (0, [])+-- Does this default behaviour even make sense? The catchall in the+-- following match seems to suggest it does+  sizeAndBoundVars (NotM e) = case e of+    App _ _ (Var v) _      -> (0, [v])+    App _ _ (Const _) args -> (1, []) <> sizeAndBoundVars args+    _                      -> (0, []) - in g 0 pats+instance (LocalTerminationEnv a, LocalTerminationEnv b) => LocalTerminationEnv (a, b) where+  sizeAndBoundVars (a, b) = sizeAndBoundVars a <> sizeAndBoundVars b +instance LocalTerminationEnv (MArgList o) where+  sizeAndBoundVars as = case rm __IMPOSSIBLE__ as of+    ALNil         -> (0, [])+    ALCons _ a as -> sizeAndBoundVars (a, as)+    ALProj{}      -> __IMPOSSIBLE__+    ALConPar as   -> sizeAndBoundVars as ++-- | Take a list of patterns and returns (is, size, vars) where (speculation):+---  * the is are the pattern indices the vars are contained in+--   * size is total number of constructors removed (?) to access vars+localTerminationEnv :: [CSPat o] -> ([Nat], Nat, [Nat])+localTerminationEnv pats = (is, getSum s, vs) where++  (is , s , vs) = g 0 pats++  g :: Nat -> [CSPat o] -> ([Nat], Sum Nat, [Nat])+  g _ [] = ([], 0, [])+  g i (hp@(HI _ p) : ps) = case p of+    CSPatConApp{} -> let (size, vars) = sizeAndBoundVars hp+                     in ([i], size, vars) <> g (i + 1) ps+    _ -> g (i + 1) ps+ localTerminationSidecond :: ([Nat], Nat, [Nat]) -> ConstRef o -> MExp o -> EE (MyPB o) localTerminationSidecond (is, size, vars) reccallc b =   ok b@@ -629,8 +636,8 @@  NotB (hntt, blks) <- hnn_blks (Clos [] tt)  case f blks of   Just v -> return [v]-  Nothing -> case hntt of-   HNApp _ (Const c) args -> do+  Nothing -> case rawValue hntt of+   HNApp (Const c) args -> do     cd <- readIORef c     case cdcont cd of      Datatype{} -> g [] args@@ -638,8 +645,8 @@    _ -> return []  where   f blks = case blks of-             (_:_) -> case last blks of-              HNApp _ (Var v) _ -> Just v+             (_:_) -> case rawValue (last blks) of+              HNApp (Var v) _ -> Just v               _ -> Nothing              _ -> Nothing   g vs args = do
src/full/Agda/Auto/Convert.hs view
@@ -4,16 +4,17 @@  import Control.Applicative hiding (getConst, Const(..)) import Data.IORef+import Data.Maybe (catMaybes) import Data.Map (Map) import qualified Data.Map as Map-import Data.Maybe import Data.Traversable (traverse) import Control.Monad.State +import Agda.Syntax.Common (Hiding(..), getHiding) import Agda.Syntax.Concrete (exprFieldA) import qualified Agda.Syntax.Internal as I import qualified Agda.Syntax.Internal.Pattern as IP-import qualified Agda.Syntax.Common as Common+import qualified Agda.Syntax.Common as Cm import qualified Agda.Syntax.Abstract.Name as AN import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Position as SP@@ -25,39 +26,39 @@ import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo, lookupInteractionPoint) import Agda.TypeChecking.Monad.Context (getContextArgs) import Agda.TypeChecking.Monad.Constraints (getAllConstraints)-import Agda.TypeChecking.Substitute (piApply, applySubst, renamingR)+import Agda.TypeChecking.Substitute (applySubst, renamingR) import Agda.TypeChecking.Telescope (piApplyM) import qualified Agda.TypeChecking.Substitute as I (absBody)-import Agda.TypeChecking.Reduce (Normalise, normalise, instantiate)+import Agda.TypeChecking.Reduce (normalise, instantiate) import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Monad.Builtin (constructorForm)-import Agda.TypeChecking.Free (freeIn)-import qualified Agda.Utils.HashMap as HMap+import Agda.TypeChecking.Free as Free (freeIn)+import Agda.TypeChecking.Errors ( stringTCErr )  import Agda.Interaction.MakeCase (getClauseForIP)  import Agda.Auto.NarrowingSearch-import Agda.Auto.Syntax+import Agda.Auto.Syntax hiding (getConst)  import Agda.Auto.CaseSplit hiding (lift)  import Agda.Utils.Either-import Agda.Utils.Except-  ( Error(strMsg)-  , ExceptT-  , MonadError(throwError)-  )+import Agda.Utils.Except ( ExceptT , MonadError(throwError) ) import Agda.Utils.Lens+import Agda.Utils.Pretty ( prettyShow )  import Agda.Utils.Impossible #include "undefined.h"  -norm :: Normalise t => t -> MB.TCM t-norm x = normalise x---norm x = return x+data Hint = Hint+  { hintIsConstructor :: Bool+  , hintQName         :: I.QName+  } -type O = (Maybe Int, AN.QName) -- Nothing - Def, Just npar - Con with npar parameters which don't appear in Agda+type O = (Maybe Int, AN.QName)+  -- Nothing - Def+  -- Just npar - Con with npar parameters which don't appear in Agda  data TMode = TMAll -- can be extended to distinguish between different modes (all, only def)  deriving Eq@@ -83,8 +84,14 @@            }  type TOM = StateT S MB.TCM+type MOT = ExceptT String IO -tomy :: I.MetaId -> [(Bool, AN.QName)] -> [I.Type] -> MB.TCM ([ConstRef O], [MExp O], Map I.MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [I.MetaId]), [(Bool, MExp O, MExp O)], Map AN.QName (TMode, ConstRef O))+tomy :: I.MetaId -> [Hint] -> [I.Type] ->+        MB.TCM ([ConstRef O]+               , [MExp O]+               , Map I.MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [I.MetaId])+               , [(Bool, MExp O, MExp O)]+               , Map AN.QName (TMode, ConstRef O)) tomy imi icns typs = do  eqs <- getEqs  let@@ -98,17 +105,17 @@      def <- lift $ getConstInfo cn      let typ = MB.defType def          defn = MB.theDef def-     typ <- lift $ norm typ-     typ' <- tomyType typ+     typ <- lift $ normalise typ+     typ' <- convert typ      let clausesToDef clauses = do-           clauses' <- tomyClauses clauses+           clauses' <- convert clauses            let narg = case clauses of                         [] -> 0                         I.Clause {I.namedClausePats = xs} : _ -> length xs            return (Def narg clauses' Nothing Nothing, [])      (cont, projfcns2) <- case defn of       MB.Axiom {} -> return (Postulate, [])-      MB.AbstractDefn -> return (Postulate, [])+      MB.AbstractDefn{} -> return (Postulate, [])       MB.Function {MB.funClauses = clauses} -> clausesToDef clauses       -- MB.Primitive {MB.primClauses = []} -> throwError $ strMsg "Auto: Primitive functions are not supported" -- Andreas, 2013-06-17 breaks interaction/AutoMisc       MB.Primitive {MB.primClauses = clauses} -> clausesToDef clauses@@ -116,7 +123,7 @@        cons2 <- mapM (\con -> getConst True con TMAll) cons        return (Datatype cons2 [], [])       MB.Record {MB.recFields = fields, MB.recTel = tel} -> do -- the value of recPars seems unreliable or don't know what it signifies-       let pars n (I.El _ (I.Pi it typ)) = Common.Arg (Common.domInfo it) (I.var n) :+       let pars n (I.El _ (I.Pi it typ)) = Cm.Arg (Cm.domInfo it) (I.var n) :                                            pars (n - 1) (I.unAbs typ)            pars n (I.El s (I.Shared p))  = pars n (I.El s (I.derefPtr p))            pars _ (I.El _ _) = []@@ -124,12 +131,12 @@                                       I.Def cn $ map I.Apply $ pars (npar - 1) typ            contyp npar (I.ExtendTel it (I.Abs v tel)) = I.El (I.mkType 0 {- arbitrary -}) (I.Pi it (I.Abs v (contyp (npar + 1) tel)))            contyp npar (I.ExtendTel it I.NoAbs{})     = __IMPOSSIBLE__-       contyp' <- tomyType $ contyp 0 tel+       contyp' <- convert $ contyp 0 tel        cc <- lift $ liftIO $ readIORef c        let Datatype [con] [] = cdcont cc        lift $ liftIO $ modifyIORef con (\cdef -> cdef {cdtype = contyp'}) -       projfcns <- mapM (\name -> getConst False name TMAll) (map Common.unArg fields)+       projfcns <- mapM (\name -> getConst False name TMAll) (map Cm.unArg fields)         return (Datatype [con] projfcns, []{-map snd fields-})       MB.Constructor {MB.conData = dt} -> do@@ -162,20 +169,20 @@         Nothing -> return ()         Just sol -> do          m <- getMeta mi-         sol' <- tomyExp sol+         sol' <- convert sol          modify $ \s -> s {sEqs = (Map.insert (Map.size (fst $ sEqs s)) (Just (False, Meta m, sol')) (fst $ sEqs s), snd $ sEqs s)}        let tt = MB.jMetaType $ mvJudgement mv            minfo = getMetaInfo mv-           localVars = map (snd . Common.unDom . ctxEntry) . envContext . clEnv $ minfo+           localVars = map (snd . Cm.unDom . ctxEntry) . envContext . clEnv $ minfo        (targettype, localVars) <- lift $ withMetaInfo minfo $ do         vs <- getContextArgs         targettype <- tt `piApplyM` permute (takeP (length vs) $ mvPermutation mv) vs-        targettype <- norm targettype-        localVars <- mapM norm localVars+        targettype <- normalise targettype+        localVars <- mapM normalise localVars         return (targettype, localVars)        modify (\s -> s {sCurMeta = Just mi})-       typ' <- tomyType targettype-       ctx' <- mapM tomyType localVars+       typ' <- convert targettype+       ctx' <- mapM convert localVars        modify (\s -> s {sCurMeta = Nothing})        modify (\s -> s {sMetas = (Map.adjust (\(m, _, deps) -> (m, Just (typ', ctx'), deps)) mi (fst $ sMetas s), snd $ sMetas s)})        r projfcns@@ -184,16 +191,16 @@        case nxt of         Just eqi -> do          let (ineq, e, i) = eqs !! eqi-         e' <- tomyExp e-         i' <- tomyExp i+         e' <- convert e+         i' <- convert i          modify (\s -> s {sEqs = (Map.adjust (\_ -> Just (ineq, e', i')) eqi (fst $ sEqs s), snd $ sEqs s)})          r projfcns         Nothing ->          return projfcns  ((icns', typs'), s) <- runStateT   (do _ <- getMeta imi-      icns' <- mapM (\(iscon, name) -> getConst iscon name TMAll) icns-      typs' <- mapM tomyType typs+      icns' <- mapM (\ (Hint iscon name) -> getConst iscon name TMAll) icns+      typs' <- mapM convert typs       projfcns <- r []       projfcns' <- mapM (\name -> getConst False name TMAll) projfcns       [] <- r []@@ -227,8 +234,8 @@      mainm <- gets sMainMeta      dfv <- lift $ getdfv mainm name      let nomi = I.arity (MB.defType def)-     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - dfv), cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?+     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = prettyShow name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - dfv), cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = prettyShow name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return $ if iscon then ccon else c   _ -> do@@ -239,16 +246,16 @@     Nothing -> do      (miscon, sname) <- if iscon then do        let MB.Constructor {MB.conPars = npar, MB.conData = dname} = MB.theDef def-       return (Just npar, show dname ++ "." ++ show (I.qnameName name))+       return (Just npar, prettyShow dname ++ "." ++ prettyShow (I.qnameName name))       else-       return (Nothing, show name)+       return (Nothing, prettyShow name)      mainm <- gets sMainMeta      dfv <- lift $ getdfv mainm name      c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = dfv})      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return c -getdfv :: I.MetaId -> A.QName -> MB.TCM Common.Nat+getdfv :: I.MetaId -> A.QName -> MB.TCM Cm.Nat getdfv mainm name = do  mv <- lookupMeta mainm  withMetaInfo (getMetaInfo mv) $ getDefFreeVars name@@ -268,7 +275,7 @@ getEqs = do  eqs <- getAllConstraints  let r = mapM (\eqc -> do-          neqc <- norm eqc+          neqc <- normalise eqc           case MB.clValue $ MB.theConstraint neqc of            MB.ValueCmp ineq _ i e -> do             ei <- etaContract i@@ -288,150 +295,115 @@ copatternsNotImplemented = MB.typeError $ MB.NotImplemented $   "The Agda synthesizer (Agsy) does not support copatterns yet" -tomyClauses :: [I.Clause] -> TOM [([Pat O], MExp O)]-tomyClauses [] = return []-tomyClauses (cl:cls) = do- cl' <- tomyClause cl- cls' <- tomyClauses cls- return $ case cl' of-  Just cl' -> cl' : cls'-  Nothing -> cls'+literalsNotImplemented :: MB.TCM a+literalsNotImplemented = MB.typeError $ MB.NotImplemented $+  "The Agda synthesizer (Agsy) does not support literals yet" -tomyClause :: I.Clause -> TOM (Maybe ([Pat O], MExp O))-tomyClause cl = do- let -- Jesper, 2016-07-28: I can't figure out if this should be the old or new+class Conversion m a b where+  convert :: a -> m b++instance Conversion TOM [I.Clause] [([Pat O], MExp O)] where+  convert = fmap catMaybes . mapM convert++instance Conversion TOM I.Clause (Maybe ([Pat O], MExp O)) where+  convert cl = do+    let -- Jesper, 2016-07-28:+     -- I can't figure out if this should be the old or new      -- clause body (i.e. relative to the positions of pattern variables or      -- relative to the clauseTel). Both options pass the test suite, so I      -- have the impression it doesn't actually matter.      -- ALTERNATIVE CODE:      -- perm = fromMaybe __IMPOSSIBLE__ $ IP.clausePerm cl      -- body = applySubst (renamingR perm) $ I.clauseBody cl-     body = I.clauseBody cl-     pats = I.clausePats cl- pats' <- mapM tomyPat $ IP.unnumberPatVars pats- body' <- traverse tomyExp =<< lift (norm body)- return $ case body' of-           Just body' -> Just (pats', body')-           Nothing    -> Nothing--tomyPat :: Common.Arg I.Pattern -> TOM (Pat O)-tomyPat p = case Common.unArg p of- I.ProjP{} -> lift $ copatternsNotImplemented- I.VarP n -> return $ PatVar (show n)- I.DotP _ -> return $ PatVar "_" -- because Agda includes these when referring to variables in the body- I.ConP con _ pats -> do-  let n = I.conName con-  c <- getConst True n TMAll-  pats' <- mapM (tomyPat . fmap Common.namedThing) pats-  def <- lift $ getConstInfo n-  cc <- lift $ liftIO $ readIORef c-  let Just npar = fst $ cdorigin cc-  return $ PatConApp c (replicate npar PatExp ++ pats')- I.LitP _ -> throwError $ strMsg "Auto: Literals in patterns are not supported"--weaken :: Int -> MExp O -> MExp O-weaken _ e@(Meta m) = e-weaken i (NotM e) =- case e of-  App uid okh elr as ->-   let elr' = case elr of-               Var v -> if v >= i then Var (v + 1) else elr-               Const{} -> elr-       as' = weakens i as-   in NotM $ App uid okh elr' as'-  Lam hid (Abs mid t) ->-   let t' = weaken (i + 1) t-   in NotM $ Lam hid (Abs mid t')-  Pi uid hid possdep x (Abs mid y) ->-   let x' = weaken i x-       y' = weaken (i + 1) y-   in NotM $ Pi uid hid possdep x' (Abs mid y')-  Sort{} -> NotM e--  AbsurdLambda{} -> NotM e---weakens :: Int -> MArgList O -> MArgList O-weakens _ as@(Meta m) = as-weakens i (NotM as) =- case as of-  ALNil -> NotM as-  ALCons hid x xs ->-   let x' = weaken i x-       xs' = weakens i xs-   in NotM $ ALCons hid x' xs'--  ALProj{} -> __IMPOSSIBLE__+        body = I.clauseBody cl+        pats = I.clausePats cl+    pats' <- mapM convert (IP.unnumberPatVars pats :: [Cm.Arg I.Pattern])+    body' <- traverse convert =<< lift (normalise body)+    return $ (pats',) <$> body' -  ALConPar xs ->-   let xs' = weakens i xs-   in NotM $ ALConPar xs'+instance Conversion TOM (Cm.Arg I.Pattern) (Pat O) where+  convert p = case Cm.unArg p of+    I.VarP n    -> return $ PatVar (show n)+    I.DotP _    -> return $ PatVar "_"+      -- because Agda includes these when referring to variables in the body+    I.AbsurdP{} -> return $ PatVar I.absurdPatternName+    I.ConP con _ pats -> do+      let n = I.conName con+      c     <- getConst True n TMAll+      pats' <- mapM (convert . fmap Cm.namedThing) pats+      def   <- lift $ getConstInfo n+      cc    <- lift $ liftIO $ readIORef c+      let Just npar = fst $ cdorigin cc+      return $ PatConApp c (replicate npar PatExp ++ pats') +    -- UNSUPPORTED CASES+    I.ProjP{}   -> lift copatternsNotImplemented+    I.LitP _    -> lift literalsNotImplemented -tomyType :: I.Type -> TOM (MExp O)-tomyType (I.El _ t) = tomyExp t -- sort info is thrown away+instance Conversion TOM I.Type (MExp O) where+  convert (I.El _ t) = convert t -- sort info is thrown away -tomyExp :: I.Term -> TOM (MExp O)-tomyExp v0 =-  case I.unSpine v0 of-    I.Var v es -> do-      let Just as = I.allApplyElims es-      as' <- tomyExps as-      return $ NotM $ App Nothing (NotM OKVal) (Var v) as'-    I.Lam info b -> do-      b' <- tomyExp (I.absBody b)-      return $ NotM $ Lam (cnvh info) (Abs (Id $ I.absName b) b')-    t@I.Lit{} -> do-      t <- lift $ constructorForm t-      case t of-        I.Lit{} -> throwError $ strMsg "Auto: Literals in terms are not supported"-        _       -> tomyExp t-    I.Level l -> tomyExp =<< lift (reallyUnLevelView l)-    I.Def name es -> do-      let Just as = I.allApplyElims es-      c   <- getConst False name TMAll-      as' <- tomyExps as-      return $ NotM $ App Nothing (NotM OKVal) (Const c) as'-    I.Con con ci as -> do-      let name = I.conName con-      c   <- getConst True name TMAll-      as' <- tomyExps as-      def <- lift $ getConstInfo name-      cc  <- lift $ liftIO $ readIORef c-      let Just npar = fst $ cdorigin cc-      return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])-    I.Pi (Common.Dom info x) b -> do-      let y    = I.absBody b-          name = I.absName b-      x' <- tomyType x-      y' <- tomyType y-      return $ NotM $ Pi Nothing (cnvh info) (Agda.TypeChecking.Free.freeIn 0 y) x' (Abs (Id name) y')-    I.Sort (I.Type (I.Max [I.ClosedLevel l])) -> return $ NotM $ Sort $ Set $ fromIntegral l-    I.Sort _ -> return $ NotM $ Sort UnknownSort-    t@I.MetaV{} -> do-      t <- lift $ instantiate t-      case t of-        I.MetaV mid _ -> do-          mcurmeta <- gets sCurMeta-          case mcurmeta of-            Nothing -> return ()-            Just curmeta ->-              modify $ \ s -> s { sMetas = ( Map.adjust (\(m, x, deps) -> (m, x, mid : deps)) curmeta (fst $ sMetas s)+instance Conversion TOM I.Term (MExp O) where+  convert v0 =+    case I.unSpine v0 of+      I.Var v es -> do+        let Just as = I.allApplyElims es+        as' <- convert as+        return $ NotM $ App Nothing (NotM OKVal) (Var v) as'+      I.Lam info b -> do+        b' <- convert (I.absBody b)+        return $ NotM $ Lam (getHiding info) (Abs (Id $ I.absName b) b')+      t@I.Lit{} -> do+        t <- lift $ constructorForm t+        case t of+          I.Lit{} -> lift literalsNotImplemented+          _       -> convert t+      I.Level l -> convert =<< lift (reallyUnLevelView l)+      I.Def name es -> do+        let Just as = I.allApplyElims es+        c   <- getConst False name TMAll+        as' <- convert as+        return $ NotM $ App Nothing (NotM OKVal) (Const c) as'+      I.Con con ci as -> do+        let name = I.conName con+        c   <- getConst True name TMAll+        as' <- convert as+        def <- lift $ getConstInfo name+        cc  <- lift $ liftIO $ readIORef c+        let Just npar = fst $ cdorigin cc+        return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])+      I.Pi (Cm.Dom{domInfo = info, unDom = x}) b -> do+        let y    = I.absBody b+            name = I.absName b+        x' <- convert x+        y' <- convert y+        return $ NotM $ Pi Nothing (getHiding info) (Free.freeIn 0 y) x' (Abs (Id name) y')+      I.Sort (I.Type (I.Max [I.ClosedLevel l])) -> return $ NotM $ Sort $ Set $ fromIntegral l+      I.Sort _ -> return $ NotM $ Sort UnknownSort+      t@I.MetaV{} -> do+        t <- lift $ instantiate t+        case t of+          I.MetaV mid _ -> do+            mcurmeta <- gets sCurMeta+            case mcurmeta of+              Nothing -> return ()+              Just curmeta ->+                modify $ \ s -> s { sMetas = ( Map.adjust (\(m, x, deps) -> (m, x, mid : deps)) curmeta (fst $ sMetas s)                                            , snd $ sMetas s                                            ) }-          m <- getMeta mid-          return $ Meta m-        _ -> tomyExp t-    I.DontCare _ -> return $ NotM $ dontCare-    I.Shared p -> tomyExp $ I.derefPtr p+            m <- getMeta mid+            return $ Meta m+          _ -> convert t+      I.DontCare _ -> return $ NotM dontCare+      I.Shared p -> convert $ I.derefPtr p -tomyExps :: I.Args -> TOM (MM (ArgList O) (RefInfo O))-tomyExps [] = return $ NotM ALNil-tomyExps (Common.Arg info a : as) = do- a' <- tomyExp a- as' <- tomyExps as- return $ NotM $ ALCons (cnvh info) a' as'+instance Conversion TOM a b => Conversion TOM (Cm.Arg a) (Hiding, b) where+  convert (Cm.Arg info a) = (getHiding info,) <$> convert a +instance Conversion TOM I.Args (MM (ArgList O) (RefInfo O)) where+  convert as = NotM . foldr (\ (hid,t) -> ALCons hid t . NotM) ALNil+               <$> mapM convert as+ tomyIneq :: MB.Comparison -> Bool tomyIneq MB.CmpEq = False tomyIneq MB.CmpLeq = True@@ -448,7 +420,7 @@ fmExp m (I.Level (I.Max as)) = any (fmLevel m) as fmExp m (I.Def _ as) = fmExps m $ I.argsFromElims as fmExp m (I.Con _ ci as) = fmExps m as-fmExp m (I.Pi x y)  = fmType m (Common.unDom x) || fmType m (I.unAbs y)+fmExp m (I.Pi x y)  = fmType m (Cm.unDom x) || fmType m (I.unAbs y) fmExp m (I.Sort _) = False fmExp m (I.MetaV mid _) = mid == m fmExp m (I.DontCare _) = False@@ -456,7 +428,7 @@  fmExps :: I.MetaId -> I.Args -> Bool fmExps m [] = False-fmExps m (a : as) = fmExp m (Common.unArg a) || fmExps m as+fmExps m (a : as) = fmExp m (Cm.unArg a) || fmExps m as  fmLevel :: I.MetaId -> I.PlusLevel -> Bool fmLevel m I.ClosedLevel{} = False@@ -468,71 +440,65 @@  -- --------------------------------------------- -cnvh :: Common.LensHiding a => a -> FMode-cnvh info = case Common.getHiding info of-    Common.NotHidden -> NotHidden-    Common.Instance  -> Instance-    Common.Hidden    -> Hidden--icnvh :: FMode -> Common.ArgInfo-icnvh h = Common.setHiding h' $-          Common.setOrigin Common.Inserted $-          Common.defaultArgInfo+icnvh :: Hiding -> Cm.ArgInfo+icnvh h = Cm.setHiding h $+          Cm.setOrigin o $+          Cm.defaultArgInfo     where-    h' = case h of-        NotHidden -> Common.NotHidden-        Instance  -> Common.Instance-        Hidden    -> Common.Hidden+    -- Andreas, 2017-01-18, issue #819.+    -- Visible arguments are made UserWritten,+    -- otherwise they might not be printed in patterns.+    o = case h of+          NotHidden  -> Cm.UserWritten+          Instance{} -> Cm.Inserted+          Hidden     -> Cm.Inserted  -- --------------------------------------------- -frommy :: MExp O -> ExceptT String IO I.Term-frommy = frommyExp+instance Conversion MOT a b => Conversion MOT (MM a (RefInfo O)) b where+  convert meta = case meta of+    NotM a -> convert a+    Meta m -> do+      ma <- lift $ readIORef $ mbind m+      case ma of+        Nothing -> throwError "meta not bound"+        Just a  -> convert a -frommyType :: MExp O -> ExceptT String IO I.Type-frommyType e = do- e' <- frommyExp e- return $ I.El (I.mkType 0) e'  -- 0 is arbitrary, sort not read by Agda when reifying+instance Conversion MOT a b => Conversion MOT (Abs a) (I.Abs b) where+  convert (Abs mid t) = I.Abs id <$> convert t where+    id = case mid of+           NoId  -> "x"+           Id id -> id -frommyExp :: MExp O -> ExceptT String IO I.Term-frommyExp (Meta m) = do- bind <- lift $ readIORef $ mbind m- case bind of-  Nothing -> throwError "meta not bound"-  Just e -> frommyExp (NotM e)-frommyExp (NotM e) =- case e of-  App _ _ (Var v) as ->-   frommyExps 0 as (I.Var v [])-  App _ _ (Const c) as -> do-   cdef <- lift $ readIORef c-   let (iscon, name) = cdorigin cdef+instance Conversion MOT (Exp O) I.Type where+  convert e = I.El (I.mkType 0) <$> convert e+              -- 0 is arbitrary, sort not read by Agda when reifying++instance Conversion MOT (Exp O) I.Term where+  convert e = case e of+    App _ _ (Var v) as -> frommyExps 0 as (I.Var v [])+    App _ _ (Const c) as -> do+      cdef <- lift $ readIORef c+      let (iscon, name) = cdorigin cdef {-    case iscon of       Just n -> do         v <- getConTerm name -- We are not in TCM         frommyExps n as v -}-       (ndrop, h) = case iscon of-                      Just n -> (n, \ q -> I.Con (I.ConHead q Common.Inductive []) Common.ConOSystem) -- TODO: restore fields-                      Nothing -> (0, \ f vs -> I.Def f $ map I.Apply vs)-   frommyExps ndrop as (h name [])-  Lam hid (Abs mid t) -> do-   t' <- frommyExp t-   return $ I.Lam (icnvh hid) (I.Abs (case mid of {NoId -> "x"; Id id -> id}) t')-  Pi _ hid _ x (Abs mid y) -> do-   x' <- frommyType x-   y' <- frommyType y-   return $ I.Pi (Common.Dom (icnvh hid) x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')-   -- maybe have case for Pi where possdep is False which produces Fun (and has to unweaken y), return $ I.Fun (Common.Arg (icnvh hid) x') y'-  Sort (Set l) ->-   return $ I.Sort (I.mkType (fromIntegral l))-  Sort Type -> __IMPOSSIBLE__-  Sort UnknownSort -> return $ I.Sort (I.mkType 0) -- hoping that it's thrown away--  AbsurdLambda hid ->-   return $ I.Lam (icnvh hid) (I.Abs abslamvarname (I.Var 0 []))+          (ndrop, h) = case iscon of+                         Just n -> (n, \ q -> I.Con (I.ConHead q Cm.Inductive []) Cm.ConOSystem) -- TODO: restore fields+                         Nothing -> (0, \ f vs -> I.Def f $ map I.Apply vs)+      frommyExps ndrop as (h name [])+    Lam hid t -> I.Lam (icnvh hid) <$> convert t+    Pi _ hid _ x y -> I.Pi . Cm.Dom (icnvh hid) <$> convert x <*> convert y+   -- maybe have case for Pi where possdep is False which produces Fun (and has to unweaken y), return $ I.Fun (Cm.Arg (icnvh hid) x') y'+    Sort (Set l) -> return $ I.Sort (I.mkType (fromIntegral l))+    Sort Type -> __IMPOSSIBLE__+    Sort UnknownSort -> return $ I.Sort (I.mkType 0) -- hoping it's thrown away +    AbsurdLambda hid -> return $ I.Lam (icnvh hid)+                               $ I.Abs abslamvarname (I.Var 0 [])  frommyExps :: Nat -> MArgList O -> I.Term -> ExceptT String IO I.Term frommyExps ndrop (Meta m) trm = do@@ -545,8 +511,8 @@   ALNil -> return trm   ALCons _ _ xs | ndrop > 0 -> frommyExps (ndrop - 1) xs trm   ALCons hid x xs -> do-   x' <- frommyExp x-   frommyExps ndrop xs (addend (Common.Arg (icnvh hid) x') trm)+   x' <- convert x+   frommyExps ndrop xs (addend (Cm.Arg (icnvh hid) x') trm)    -- Andreas, 2013-10-19 TODO: restore postfix projections   ALProj eas idx hid xs -> do@@ -557,7 +523,7 @@    cdef <- lift $ readIORef c    let name = snd $ cdorigin cdef    trm2 <- frommyExps 0 eas (I.Def name [])-   frommyExps 0 xs (addend (Common.Arg (icnvh hid) trm) trm2)+   frommyExps 0 xs (addend (Cm.Arg (icnvh hid) trm) trm2)    ALConPar xs | ndrop > 0 -> frommyExps (ndrop - 1) xs trm   ALConPar _ -> __IMPOSSIBLE__@@ -576,10 +542,11 @@ modifyAbstractExpr :: A.Expr -> A.Expr modifyAbstractExpr = f  where-  f (A.App i e1 (Common.Arg info (Common.Named n e2))) =-        A.App i (f e1) (Common.Arg info (Common.Named n (f e2)))-  f (A.Lam i (A.DomainFree info n) _) | show (A.nameConcrete n) == abslamvarname =-        A.AbsurdLam i $ Common.argInfoHiding info+  f (A.App i e1 (Cm.Arg info (Cm.Named n e2))) =+        A.App i (f e1) (Cm.Arg info (Cm.Named n (f e2)))+  f (A.Lam i (A.DomainFree info n) _)+     | prettyShow (A.nameConcrete n) == abslamvarname =+        A.AbsurdLam i $ Cm.argInfoHiding info   f (A.Lam i b e) = A.Lam i b (f e)   f (A.Rec i xs) = A.Rec i (map (mapLeft (over exprFieldA f)) xs)   f (A.RecUpdate i e xs) = A.RecUpdate i (f e) (map (over exprFieldA f) xs)@@ -587,14 +554,14 @@   f e = e  modifyAbstractClause :: A.Clause -> A.Clause-modifyAbstractClause (A.Clause lhs dots (A.RHS e mc) decls catchall) =-  A.Clause lhs dots (A.RHS (modifyAbstractExpr e) mc) decls catchall+modifyAbstractClause (A.Clause lhs dots sdots (A.RHS e mc) decls catchall) =+  A.Clause lhs dots sdots (A.RHS (modifyAbstractExpr e) mc) decls catchall modifyAbstractClause cl = cl  -- ---------------------------------  -constructPats :: Map AN.QName (TMode, ConstRef O) -> I.MetaId -> I.Clause -> MB.TCM ([(FMode, MId)], [CSPat O])+constructPats :: Map AN.QName (TMode, ConstRef O) -> I.MetaId -> I.Clause -> MB.TCM ([(Hiding, MId)], [CSPat O]) constructPats cmap mainm clause = do  let cnvps ns [] = return (ns, [])      cnvps ns (p : ps) = do@@ -602,8 +569,8 @@       (ns'', p') <- cnvp ns' p       return (ns'', p' : ps')      cnvp ns p =-      let hid = cnvh $ Common.argInfo p-      in case Common.namedArg p of+      let hid = getHiding $ Cm.argInfo p+      in case Cm.namedArg p of        I.VarP n -> return ((hid, Id n) : ns, HI hid (CSPatVar $ length ns))        I.ConP con _ ps -> do         let c = I.conName con@@ -613,10 +580,11 @@         let Just npar = fst $ cdorigin cc         return (ns', HI hid (CSPatConApp c2 (replicate npar (HI Hidden CSOmittedArg) ++ ps')))        I.DotP t -> do-        (t2, _) <- runStateT (tomyExp t) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})+        (t2, _) <- runStateT (convert t) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})         return (ns, HI hid (CSPatExp t2))+       I.AbsurdP{} -> return ((hid, Id I.absurdPatternName) : ns, HI hid (CSPatVar $ length ns))        I.ProjP{} -> copatternsNotImplemented-       _ -> __IMPOSSIBLE__+       I.LitP{} -> literalsNotImplemented  (names, pats) <- cnvps [] (IP.unnumberPatVars $ I.namedClausePats clause)  return (reverse names, pats) @@ -627,8 +595,8 @@      ctel (HI hid (mid, t) : ctx) = do       let Id id = mid       tel <- ctel ctx-      t' <- frommyType t-      return $ I.ExtendTel (Common.Dom (icnvh hid) t') (I.Abs id tel)+      t' <- convert t+      return $ I.ExtendTel (Cm.Dom (icnvh hid) t') (I.Abs id tel)  tel <- ctel $ reverse ids  let getperms 0 [] perm nv = return (perm, nv)      getperms n [] _ _ = __IMPOSSIBLE__@@ -669,26 +637,28 @@         cdef <- lift $ readIORef c         let (Just ndrop, name) = cdorigin cdef         ps' <- cnvps ndrop ps-        let con = I.ConHead name Common.Inductive [] -- TODO: restore record fields!+        let con = I.ConHead name Cm.Inductive [] -- TODO: restore record fields!         return (I.ConP con I.noConPatternInfo ps')        CSPatExp e -> do-        e' <- frommyExp e {- renm e -} -- renaming before adding to clause below+        e' <- convert e {- renm e -} -- renaming before adding to clause below         return (I.DotP e')        CSAbsurd -> __IMPOSSIBLE__ -- CSAbsurd not used        _ -> __IMPOSSIBLE__-      return $ Common.Arg (icnvh hid) $ Common.unnamed p'   -- TODO: recover names+      return $ Cm.Arg (icnvh hid) $ Cm.unnamed p'   -- TODO: recover names  ps <- cnvps 0 pats  body <- case mrhs of           Nothing -> return $ Nothing-          Just e -> Just <$> frommyExp e+          Just e -> Just <$> convert e  let cperm =  Perm nv perm  return $ I.Clause-   { I.clauseRange = SP.noRange-   , I.clauseTel   = tel+   { I.clauseLHSRange  = SP.noRange+   , I.clauseFullRange = SP.noRange+   , I.clauseTel       = tel    , I.namedClausePats = IP.numberPatVars __IMPOSSIBLE__ cperm $ applySubst (renamingR $ compactP cperm) ps    , I.clauseBody  = body    , I.clauseType  = Nothing -- TODO: compute clause type    , I.clauseCatchall = False+   , I.clauseUnreachable = Nothing -- TODO: Don't know here whether reachable or not !?    }  contains_constructor :: [CSPat O] -> Bool@@ -735,15 +705,14 @@  -- --------------------------------------- -findClauseDeep :: Common.InteractionId -> MB.TCM (Maybe (AN.QName, I.Clause, Bool))+findClauseDeep :: Cm.InteractionId -> MB.TCM (Maybe (AN.QName, I.Clause, Bool)) findClauseDeep ii = ignoreAbstractMode $ do  -- Andreas, 2016-09-04, issue #2162   MB.InteractionPoint { MB.ipClause = ipCl} <- lookupInteractionPoint ii-  (f, clauseNo) <- case ipCl of-    MB.IPClause f clauseNo _ -> return (f, clauseNo)-    MB.IPNoClause -> MB.typeError $ MB.GenericError $-      "Cannot apply the auto tactic here, we are not in a function clause"-  (_, c, _) <- getClauseForIP f clauseNo-  return $ Just (f, c, maybe __IMPOSSIBLE__ toplevel $ I.clauseBody c)+  case ipCl of+    MB.IPNoClause -> return Nothing+    MB.IPClause f clauseNo _ -> do+      (_, c, _) <- getClauseForIP f clauseNo+      return $ Just (f, c, maybe __IMPOSSIBLE__ toplevel $ I.clauseBody c)   where     toplevel e =      case I.ignoreSharing e of@@ -783,15 +752,15 @@       (I.Lit lit1, I.Lit lit2) | lit1 == lit2 -> c (n + 1)       (I.Def n1 as1, I.Def n2 as2) | n1 == n2 -> fes nl (n + 1) c as1 as2       (I.Con n1 _ as1, I.Con n2 _ as2) | n1 == n2 -> fs nl (n + 1) c as1 as2-      (I.Pi (Common.Dom info1 it1) ot1, I.Pi (Common.Dom info2 it2) ot2) | Common.argInfoHiding info1 == Common.argInfoHiding info2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2+      (I.Pi (Cm.Dom{domInfo = info1, unDom = it1})  ot1, I.Pi (Cm.Dom{domInfo = info2, unDom = it2})  ot2) | Cm.argInfoHiding info1 == Cm.argInfoHiding info2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2       (I.Sort{}, I.Sort{}) -> c n -- sloppy       _ -> Nothing     fs nl n c es1 es2 = case (es1, es2) of      ([], []) -> c n-     (Common.Arg info1 e1 : es1, Common.Arg info2 e2 : es2) | Common.argInfoHiding info1 == Common.argInfoHiding info2 -> f nl n (\n -> fs nl n c es1 es2) e1 e2+     (Cm.Arg info1 e1 : es1, Cm.Arg info2 e2 : es2) | Cm.argInfoHiding info1 == Cm.argInfoHiding info2 -> f nl n (\n -> fs nl n c es1 es2) e1 e2      _ -> Nothing     fes nl n c es1 es2 = case (es1, es2) of      ([], []) -> c n      (I.Proj _ f : es1, I.Proj _ f' : es2) | f == f' -> fes nl n c es1 es2-     (I.Apply (Common.Arg info1 e1) : es1, I.Apply (Common.Arg info2 e2) : es2) | Common.argInfoHiding info1 == Common.argInfoHiding info2 -> f nl n (\n -> fes nl n c es1 es2) e1 e2+     (I.Apply (Cm.Arg info1 e1) : es1, I.Apply (Cm.Arg info2 e2) : es2) | Cm.argInfoHiding info1 == Cm.argInfoHiding info2 -> f nl n (\n -> fes nl n c es1 es2) e1 e2      _ -> Nothing
src/full/Agda/Auto/NarrowingSearch.hs view
@@ -1,16 +1,20 @@-{-# LANGUAGE CPP                       #-}-{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE CPP                        #-}+{-# LANGUAGE ScopedTypeVariables        #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}  module Agda.Auto.NarrowingSearch where  import Data.IORef hiding (writeIORef, modifyIORef) import qualified Data.IORef as NoUndo (writeIORef, modifyIORef) import Control.Monad.State+import Control.Applicative hiding (Const(..), getConst)  #include "undefined.h" import Agda.Utils.Impossible+import Agda.Utils.Empty -type Prio = Int+newtype Prio = Prio { getPrio :: Int }+ deriving (Eq, Ord, Num)  class Trav a blk | a -> blk where   trav :: Monad m => (forall b . Trav b blk => MM b blk -> m ()) -> a -> m ()@@ -26,7 +30,7 @@     -- ^ Success.   | Error String     -- ^ Definite failure.-  | forall a . AddExtraRef String (Metavar a blk) (Int, RefCreateEnv blk a)+  | forall a . AddExtraRef String (Metavar a blk) (Move' blk a)     -- ^ Experimental.   | And (Maybe [Term blk]) (MetaEnv (PB blk)) (MetaEnv (PB blk))     -- ^ Parallel conjunction of constraints.@@ -59,7 +63,7 @@     -- ^ List of observers, i.e., constraints blocked by this meta.   , mcompoint :: IORef [SubConstraints blk]     -- ^ Used for experiments with independence of subproofs.-  , mextrarefs :: IORef [(Int, RefCreateEnv blk a)]+  , mextrarefs :: IORef [Move' blk a]     -- ^ Experimental.   } @@ -158,38 +162,60 @@  -- ----------------------- +newtype RefCreateEnv blk a = RefCreateEnv+  { runRefCreateEnv :: StateT ((IORef [SubConstraints blk]), Int) IO a } -type RefCreateEnv blk = StateT ( ( (IORef [SubConstraints blk])), Int) IO+instance Functor (RefCreateEnv blk) where+  fmap f = RefCreateEnv . fmap f . runRefCreateEnv -data Pair a b = Pair a b+instance Applicative (RefCreateEnv blk) where+  pure    = RefCreateEnv . pure+  f <*> t = RefCreateEnv $ runRefCreateEnv f <*> runRefCreateEnv t +instance Monad (RefCreateEnv blk) where+  return = pure+  t >>= f = RefCreateEnv $ runRefCreateEnv t >>= runRefCreateEnv . f+++newtype Cost = Cost { getCost :: Int }+  deriving (Num, Eq, Ord)++data Move' blk a = Move+  { moveCost :: Cost+  , moveNext :: RefCreateEnv blk a+  }+ class Refinable a blk where- refinements :: blk -> [blk] -> Metavar a blk -> IO [(Int, RefCreateEnv blk a)]+ refinements :: blk -> [blk] -> Metavar a blk -> IO [Move' blk a]   newPlaceholder :: RefCreateEnv blk (MM a blk)-newPlaceholder = do- (e@( ( mcompoint)), c) <- get+newPlaceholder = RefCreateEnv $ do+ (mcompoint, c) <- get  m <- lift $ newMeta mcompoint- put (e, (c + 1))+ put (mcompoint, (c + 1))  return $ Meta m  newOKHandle :: RefCreateEnv blk (OKHandle blk)-newOKHandle = do- (e@( ( _)), c) <- get+newOKHandle = RefCreateEnv $ do+ (e, c) <- get  cp <- lift $ newIORef []- m <- lift $ newMeta cp+ m  <- lift $ newMeta cp  put (e, (c + 1))  return $ Meta m  dryInstantiate :: RefCreateEnv blk a -> IO a-dryInstantiate bind = evalStateT bind ( ( __IMPOSSIBLE__), 0)+dryInstantiate bind = evalStateT (runRefCreateEnv bind) (__IMPOSSIBLE__, 0)  type BlkInfo blk = (Bool, Prio, Maybe blk) -- Bool - is principal  data MM a blk = NotM a               | Meta (Metavar a blk) +rm :: Empty -> MM a b -> a+rm e (NotM x) = x+rm e Meta{}   = absurd e+ type MetaEnv = IO  @@ -290,7 +316,7 @@  type SRes = Either Bool Int -topSearch :: forall blk . IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool+topSearch :: forall blk . IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Cost -> Cost -> IO Bool topSearch ticks nsol hsol envinfo p searchdepth depthinterval = do  depthreached <- newIORef False @@ -298,7 +324,7 @@  mainroot <- newCTree Nothing   let-  searchSubProb :: [(CTree blk, Maybe (IORef Bool))] -> Int -> IO SRes+  searchSubProb :: [(CTree blk, Maybe (IORef Bool))] -> Cost -> IO SRes   searchSubProb [] depth = do    when (depth < depthinterval) $ do @@ -311,7 +337,7 @@    return $ Left True   searchSubProb ((root, firstdone) : restprobs) depth =    let-    search :: Int -> IO SRes+    search :: Cost -> IO SRes     search depth = do      pm <- readIORef $ ctpriometa root      case pm of@@ -340,12 +366,13 @@               0 -> split               _ -> carryon -    fork :: Refinable a blk => Metavar a blk -> Int -> IO SRes+    fork :: forall a. Refinable a blk => Metavar a blk -> Cost -> IO SRes     fork m depth = do       blkinfos <- extractblkinfos m       refs <- refinements envinfo blkinfos m       f refs      where+      f :: [Move' blk a] -> IO SRes       f [] = do        erefs <- readIORef $ mextrarefs m        case erefs of@@ -353,7 +380,7 @@         _ -> do          NoUndo.writeIORef (mextrarefs m) []          f erefs-      f ((cost, bind) : binds) = hsres (refine m bind (depth - cost) ) (f binds)+      f (Move cost bind : binds) = hsres (refine m bind (depth - cost)) (f binds)     hsres :: IO SRes -> IO SRes -> IO SRes     hsres x1 x2 = do      res <- x1@@ -369,7 +396,7 @@           Right _ -> if found then __IMPOSSIBLE__ else return res2           Left found2 -> return $ Left (found || found2) -    refine :: Metavar a blk -> RefCreateEnv blk a -> Int -> IO SRes+    refine :: Metavar a blk -> RefCreateEnv blk a -> Cost -> IO SRes      refine _ _ depthleft | depthleft < 0 = do      NoUndo.writeIORef depthreached True@@ -381,7 +408,7 @@         lift $ NoUndo.writeIORef ticks $! t + 1  -        (bind, (_, nnewmeta)) <- lift $ runStateT bind ( ( (mcompoint m)), 0)+        (bind, (_, nnewmeta)) <- lift $ runStateT (runRefCreateEnv bind) (mcompoint m, 0)         uwriteIORef (mbind m) (Just bind)         mcomptr <- ureadIORef $ mcompoint m         mapM_ (\comptr ->@@ -623,7 +650,7 @@   RightDisjunct -> p2  instance Refinable Choice blk where- refinements _ x _ = return [(0, return LeftDisjunct), (0, return RightDisjunct)]+ refinements _ x _ = return $ Move 0 . return <$> [LeftDisjunct, RightDisjunct]   instance Refinable OKVal blk where
+ src/full/Agda/Auto/Options.hs view
@@ -0,0 +1,106 @@+module Agda.Auto.Options where++import Control.Monad.State+import Agda.Utils.Lens++data Mode = MNormal Bool Bool -- true if list mode, true if disprove++          | MCaseSplit++          | MRefine Bool -- true if list mode+++data AutoHintMode = AHMNone+                  | AHMModule++type Hints = [String]++newtype TimeOut = TimeOut { getTimeOut :: Int }++instance Show TimeOut where+  show = show . getTimeOut++-- | Options for Auto, default value and lenses++data AutoOptions = AutoOptions+  { autoHints    :: Hints+  , autoTimeOut  :: TimeOut+  , autoPick     :: Int+  , autoMode     :: Mode+  , autoHintMode :: AutoHintMode+  }++initAutoOptions :: AutoOptions+initAutoOptions = AutoOptions+  { autoHints    = []+  , autoTimeOut  = TimeOut 1+  , autoPick     = 0+  , autoMode     = MNormal False False+  , autoHintMode = AHMNone+  }++aoHints :: Lens' Hints AutoOptions+aoHints f s =+  f (autoHints s) <&>+  \x -> s {autoHints = x}++aoTimeOut :: Lens' TimeOut AutoOptions+aoTimeOut f s =+  f (autoTimeOut s) <&>+  \x -> s {autoTimeOut = x}++aoPick :: Lens' Int AutoOptions+aoPick f s =+  f (autoPick s) <&>+  \x -> s {autoPick = x}++aoMode :: Lens' Mode AutoOptions+aoMode f s =+  f (autoMode s) <&>+  \x -> s {autoMode = x}++aoHintMode :: Lens' AutoHintMode AutoOptions+aoHintMode f s =+  f (autoHintMode s) <&>+  \x -> s {autoHintMode = x}++-- | Tokenising the input (makes `parseArgs` cleaner)++data AutoToken =+    M | C | R | D | L+  | T Int | S Int | H String++autoTokens :: [String] -> [AutoToken]+autoTokens []              = []+autoTokens ("-t" : t : ws) = T (read t) : autoTokens ws+autoTokens ("-s" : s : ws) = S (read s) : autoTokens ws+autoTokens ("-l"     : ws) = L          : autoTokens ws+autoTokens ("-d"     : ws) = D          : autoTokens ws+autoTokens ("-m"     : ws) = M          : autoTokens ws+autoTokens ("-c"     : ws) = C          : autoTokens ws+autoTokens ("-r"     : ws) = R          : autoTokens ws+autoTokens (h        : ws) = H h        : autoTokens ws++parseArgs :: String -> AutoOptions+parseArgs s = mapM_ step (autoTokens $ words s)+              `execState` initAutoOptions where++  step :: AutoToken -> State AutoOptions ()+  step M     = aoHintMode .= AHMModule+  step C     = aoMode     .= MCaseSplit+  step R     = aoPick     .= (-1)+            >> aoMode     .= MRefine False+  step (T t) = aoTimeOut  .= TimeOut t+  step (S p) = aoPick     .= p+  step (H h) = aoHints    %= (h :)+  step D     = do+    mode <- use aoMode+    case mode of+      MNormal lm _ -> aoMode .= MNormal lm True+      _            -> return ()+  step L     = do+    mode <- use aoMode+    case mode of+      MNormal _ dp -> aoMode .= MNormal True dp+      MRefine _    -> aoMode .= MRefine True+      _            -> return ()
src/full/Agda/Auto/SearchControl.hs view
@@ -1,15 +1,17 @@-{-# LANGUAGE CPP                   #-}-{-# LANGUAGE UndecidableInstances  #-}-+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE ScopedTypeVariables  #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-}  module Agda.Auto.SearchControl where +import Control.Applicative hiding (getConst, Const(..)) import Control.Monad import Data.IORef import Control.Monad.State-import Data.Maybe (mapMaybe)+import Data.Maybe (mapMaybe, fromMaybe) +import Agda.Syntax.Common (Hiding(..)) import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax @@ -17,86 +19,187 @@ import Agda.Utils.Impossible  instance Refinable (ArgList o) (RefInfo o) where- refinements _ infos _ =-  return $ [-            (0, return ALNil),+ refinements _ infos _ = return $ fmap (Move 0) $+   [ return ALNil, cons NotHidden, cons Hidden ]+   ++ if getIsDep infos then []+      else [ proj NotHidden, proj Hidden ] -            (0, cons NotHidden),-            (0, cons Hidden)+   where +    getIsDep :: [RefInfo o] -> Bool+    getIsDep (x : xs) = case x of+      RICheckElim isDep -> isDep+      _                 -> getIsDep xs+    getIsDep _ = __IMPOSSIBLE__ -           ]+    proj :: Hiding -> RefCreateEnv (RefInfo o) (ArgList o)+    proj hid = ALProj <$> newPlaceholder <*> newPlaceholder+                      <*> return hid     <*> newPlaceholder -           ++-           (let isdep = rr infos-                rr (RICheckElim isdep : _) = isdep-                rr (_ : xs) = rr xs-                rr _ = __IMPOSSIBLE__-                proj hid = newPlaceholder >>= \p1 -> newPlaceholder >>= \p2 -> newPlaceholder >>= \p3 -> return $ ALProj p1 p2 hid p3-            in if isdep then-                 []-                else+    cons :: Hiding -> RefCreateEnv (RefInfo o) (ArgList o)+    cons hid = ALCons hid <$> newPlaceholder <*> newPlaceholder -                 [(0, proj NotHidden), (0, proj Hidden)] +data ExpRefInfo o = ExpRefInfo+  { eriMain           :: Maybe (RefInfo o)+  , eriUnifs          :: [RefInfo o]+  , eriInfTypeUnknown :: Bool+  , eriIsEliminand    :: Bool+  , eriUsedVars       :: Maybe ([UId o], [Elr o])+  , eriIotaStep       :: Maybe Bool+  , eriPickSubsVar    :: Bool+  , eriEqRState       :: Maybe EqReasoningState+  } -           )+initExpRefInfo :: ExpRefInfo o+initExpRefInfo = ExpRefInfo+  { eriMain           = Nothing+  , eriUnifs          = []+  , eriInfTypeUnknown = False+  , eriIsEliminand    = False+  , eriUsedVars       = Nothing+  , eriIotaStep       = Nothing+  , eriPickSubsVar    = False+  , eriEqRState       = Nothing+  } -  where cons hid = newPlaceholder >>= \p1 -> newPlaceholder >>= \p2 -> return $ ALCons hid p1 p2+getinfo :: [RefInfo o] -> ExpRefInfo o+getinfo = foldl step initExpRefInfo where +  step :: ExpRefInfo o -> RefInfo o -> ExpRefInfo o+  step eri x@RIMainInfo{}           = eri { eriMain  = Just x }+  step eri x@RIUnifInfo{}           = eri { eriUnifs = x : eriUnifs eri }+  step eri RIInferredTypeUnknown    = eri { eriInfTypeUnknown = True }+  step eri RINotConstructor         = eri { eriIsEliminand = True }+  step eri (RIUsedVars nuids nused) = eri { eriUsedVars = Just (nuids, nused) }+  step eri (RIIotaStep semif)       = eri { eriIotaStep = Just iota' } where+    iota' = semif || fromMaybe False (eriIotaStep eri)+  step eri RIPickSubsvar            = eri { eriPickSubsVar = True }+  step eri (RIEqRState s)           = eri { eriEqRState = Just s }+  step eri _ = __IMPOSSIBLE__ -data ExpRefInfo o = ExpRefInfo {eriMain :: Maybe (RefInfo o), eriUnifs :: [RefInfo o], eriInfTypeUnknown, eriIsEliminand :: Bool, eriUsedVars :: Maybe ([UId o], [Elr o]),-                                eriIotaStep :: Maybe Bool, eriPickSubsVar :: Bool -                                , eriEqRState :: Maybe EqReasoningState+-- | @univar sub v@ figures out what the name of @v@ "outside" of+--   the substitution @sub@ ought to be, if anything. -                               }+univar :: [CAction o] -> Nat -> Maybe Nat+univar cl v = getOutsideName cl v 0 where -getinfo :: [RefInfo o] -> ExpRefInfo o-getinfo = f (ExpRefInfo {eriMain = Nothing-                        , eriUnifs = []-                        , eriInfTypeUnknown = False-                        , eriIsEliminand = False-                        , eriUsedVars = Nothing-                        , eriIotaStep = Nothing-                        , eriPickSubsVar = False-                        , eriEqRState = Nothing-                        }-            )- where-  f i [] = i-  f i (x@RIMainInfo{} : xs) = f (i {eriMain = Just x}) xs-  f i (x@RIUnifInfo{} : xs) = f (i {eriUnifs = x : eriUnifs i}) xs-  f i (RIInferredTypeUnknown : xs) = f (i {eriInfTypeUnknown = True}) xs-  f i (RINotConstructor : xs) = f (i {eriIsEliminand = True}) xs-  f i (RIUsedVars nuids nused : xs) = f (i {eriUsedVars = Just (nuids, nused)}) xs-  f i (RIIotaStep semif : xs) = f (i {eriIotaStep = Just (semif || maybe False id (eriIotaStep i))}) xs-  f i (RIPickSubsvar : xs) = f (i {eriPickSubsVar = True}) xs+  getOutsideName :: [CAction o] -> Nat -> Nat -> Maybe Nat+  -- @v@ is offset by @v'@ binders+  getOutsideName []            v v' = Just (v' + v)+  -- @v@ was introduced by the weakening: disappears+  getOutsideName (Weak n : _)  v v' | v < n = Nothing+  -- @v@ was introduced before the weakening: strengthened+  getOutsideName (Weak n : xs) v v' = getOutsideName xs (v - n) v'+  -- Name of @v@ before the substitution was pushed in+  -- had to be offset by 1+  getOutsideName (Sub _  : xs) v v' = getOutsideName xs v (v' + 1)+  -- If this is the place where @v@ was bound, it used to+  -- be called 0 + offset of all the vars substituted for+  getOutsideName (Skip   : _)  0 v' = Just v'+  -- Going over a binder: de Bruijn name of @v@ decreased+  -- but offset increased+  getOutsideName (Skip   : xs) v v' = getOutsideName xs (v - 1) (v' + 1) -  f i (RIEqRState s : xs) = f (i {eriEqRState = Just s}) xs+-- | List of the variables instantiated by the substitution+subsvars :: [CAction o] -> [Nat]+subsvars = f 0 where -  f i _ = __IMPOSSIBLE__+  f :: Nat -> [CAction o] -> [Nat]+  f n []            = []+  f n (Weak _ : xs) = f n xs -- why?+  f n (Sub _  : xs) = n : f (n + 1) xs+  f n (Skip   : xs) = f (n + 1) xs +-- | Moves+--   A move is composed of a @Cost@ together with an action+--   computing the refined problem. -univar :: [CAction o] -> Nat -> Maybe Nat-univar cl v = f cl v 0- where- f [] v v' = Just (v' + v)- f (Weak n : _) v v' | v < n = Nothing- f (Weak n : xs) v v' = f xs (v - n) v'- f (Sub _ : xs) v v' = f xs v (v' + 1)- f (Skip : _) 0 v' = Just v'- f (Skip : xs) v v' = f xs (v - 1) (v' + 1)+type Move o = Move' (RefInfo o) (Exp o) -subsvars :: [CAction o] -> [Nat]-subsvars = f 0- where-  f n [] = []-  f n (Weak _ : xs) = f n xs-  f n (Sub _ : xs) = n : f (n + 1) xs-  f n (Skip : xs) = f (n + 1) xs+-- | New constructors+--   Taking a step towards a solution consists in picking a+--   constructor and filling in the missing parts with+--   placeholders to be discharged later on. +newAbs :: MId -> RefCreateEnv blk (Abs (MM a blk))+newAbs mid = Abs mid <$> newPlaceholder +newLam :: Hiding -> MId -> RefCreateEnv (RefInfo o) (Exp o)+newLam hid mid = Lam hid <$> newAbs mid++newPi :: UId o -> Bool -> Hiding -> RefCreateEnv (RefInfo o) (Exp o)+newPi uid dep hid = Pi (Just uid) hid dep <$> newPlaceholder <*> newAbs NoId++foldArgs :: [(Hiding, MExp o)] -> MArgList o+foldArgs = foldr (\ (h, a) sp -> NotM $ ALCons h a sp) (NotM ALNil)++-- | New spine of arguments potentially using placeholders++newArgs' :: [Hiding] -> [MExp o] -> RefCreateEnv (RefInfo o) (MArgList o)+newArgs' h tms = foldArgs . zip h . (++ tms) <$> replicateM size newPlaceholder+  where size = length h - length tms++newArgs :: [Hiding] -> RefCreateEnv (RefInfo o) (MArgList o)+newArgs h = newArgs' h []++-- | New @App@lication node using a new spine of arguments+--   respecting the @Hiding@ annotation++newApp' :: UId o -> ConstRef o -> [Hiding] -> [MExp o] ->+           RefCreateEnv (RefInfo o) (Exp o)+newApp' meta cst hds tms =+  App (Just meta) <$> newOKHandle <*> return (Const cst) <*> newArgs' hds tms++newApp :: UId o -> ConstRef o -> [Hiding] -> RefCreateEnv (RefInfo o) (Exp o)+newApp meta cst hds = newApp' meta cst hds []++-- | Equality reasoning steps+--   The begin token is accompanied by two steps because+--   it does not make sense to have a derivation any shorter+--   than that.++eqStep :: UId o -> EqReasoningConsts o -> Move o+eqStep meta eqrc = Move costEqStep $ newApp meta (eqrcStep eqrc)+  [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden]++eqEnd :: UId o -> EqReasoningConsts o -> Move o+eqEnd meta eqrc = Move costEqEnd $ newApp meta (eqrcEnd eqrc)+  [Hidden, Hidden, NotHidden]++eqCong :: UId o -> EqReasoningConsts o -> Move o+eqCong meta eqrc = Move costEqCong $ newApp meta (eqrcCong eqrc)+  [Hidden, Hidden, Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden]++eqSym :: UId o -> EqReasoningConsts o -> Move o+eqSym meta eqrc = Move costEqSym $ newApp meta (eqrcSym eqrc)+  [Hidden, Hidden, Hidden, Hidden, NotHidden]++eqBeginStep2 :: UId o -> EqReasoningConsts o -> Move o+eqBeginStep2 meta eqrc = Move costEqStep $ do+  e1 <- newApp meta (eqrcStep eqrc)+          [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden]+  e2 <- newApp' meta (eqrcStep eqrc)+          [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden]+          [NotM e1]+  newApp' meta (eqrcBegin eqrc) [Hidden, Hidden, Hidden, Hidden, NotHidden]+    [NotM e2]+++-- | Pick the first unused UId amongst the ones you have seen (GA: ??)+--   Defaults to the head of the seen ones.++pickUid :: forall o. [UId o] -> [Maybe (UId o)] -> (Maybe (UId o), Bool)+pickUid used seen = maybe (head seen, False) (, True) $ firstUnused seen where+  {- ?? which uid to pick -}++  firstUnused :: [Maybe (UId o)] -> Maybe (Maybe (UId o))+  firstUnused []                 = Nothing+  firstUnused (Nothing     : _)  = Just Nothing+  firstUnused (mu@(Just u) : us) =+    if u `elem` used then firstUnused us else Just mu+ instance Refinable (Exp o) (RefInfo o) where  refinements envinfo infos meta =   let@@ -105,122 +208,79 @@     meqr = rieEqReasoningConsts envinfo -   ExpRefInfo {eriMain = Just (RIMainInfo n tt iotastepdone), eriUnifs = unis, eriInfTypeUnknown = inftypeunknown, eriIsEliminand = iseliminand, eriUsedVars = Just (uids, usedvars),-                         eriIotaStep = iotastep, eriPickSubsVar = picksubsvar--                         , eriEqRState = meqrstate--                        } = getinfo infos--   eqrstate = maybe EqRSNone id meqrstate+   ExpRefInfo { eriMain  = Just (RIMainInfo n tt iotastepdone)+              , eriUnifs = unis+              , eriInfTypeUnknown = inftypeunknown+              , eriIsEliminand = iseliminand+              , eriUsedVars = Just (uids, usedvars)+              , eriIotaStep = iotastep+              , eriPickSubsVar = picksubsvar+              , eriEqRState = meqrstate+              } = getinfo infos -   app muid elr = do p <- newPlaceholder-                     p <- case elr of-                      Var{} -> return p-                      Const c -> do-                       cd <- lift $ readIORef c-                       let dfvapp 0 _ = p-                           dfvapp i n = NotM $ ALCons NotHidden (NotM $ App Nothing (NotM $ OKVal) (Var n) (NotM ALNil)) (dfvapp (i - 1) (n - 1))-                            -- NotHidden is ok because agda reification throws these arguments away and agsy skips typechecking them-                       return $ dfvapp (cddeffreevars cd) (n - 1)+   eqrstate = fromMaybe EqRSNone meqrstate -                     okh <- newOKHandle-                     let uid = case muid of-                                Just _ -> muid-                                Nothing -> Just meta-                     return $ App uid okh elr p-   lam hid id = do-    p <- newPlaceholder-    return $ Lam hid (Abs id p)-   pi muid dep hid =-    do p1 <- newPlaceholder-       p2 <- newPlaceholder-       let uid = case muid of-                  Just _ -> muid-                  Nothing -> Just meta-       return $ Pi uid hid dep p1 (Abs NoId p2)    set l = return $ Sort (Set l)   in case unis of    [] ->     let -     eqr = maybe __IMPOSSIBLE__ id meqr-     foldargs [] = NotM ALNil-     foldargs ((h, a) : xs) = NotM $ ALCons h a (foldargs xs)-     eq_begin_step_step = (costEqStep,-                       do psb <- replicateM 4 newPlaceholder-                          okhb <- newOKHandle-                          pss1 <- replicateM 6 newPlaceholder-                          okhs1 <- newOKHandle-                          pss2 <- replicateM 7 newPlaceholder-                          okhs2 <- newOKHandle-                          return $ App (Just meta) okhb (Const $ eqrcBegin eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden] (psb ++ [-                            NotM $ App (Just meta) okhs1 (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] (pss1 ++ [-                             NotM $ App (Just meta) okhs2 (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] pss2))-                            ])))-                           ])))-                      )-     eq_step = (costEqStep,-                 do ps <- replicateM 7 newPlaceholder-                    okh <- newOKHandle-                    return $ App (Just meta) okh (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] ps))-                )-     eq_end = (costEqEnd,-               do ps <- replicateM 3 newPlaceholder-                  okh <- newOKHandle-                  return $ App (Just meta) okh (Const $ eqrcEnd eqr) (foldargs (zip [Hidden, Hidden, NotHidden] ps))-              )-     eq_sym = (costEqSym,-               do ps <- replicateM 5 newPlaceholder-                  okh <- newOKHandle-                  return $ App (Just meta) okh (Const $ eqrcSym eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden] ps))-              )-     eq_cong = (costEqCong,-                do ps <- replicateM 8 newPlaceholder-                   okh <- newOKHandle-                   return $ App (Just meta) okh (Const $ eqrcCong eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden] ps))-               )+     eqr = fromMaybe __IMPOSSIBLE__ meqr+     eq_end         = eqEnd  meta eqr+     eq_step        = eqStep meta eqr+     eq_cong        = eqCong meta eqr+     eq_sym         = eqSym  meta eqr+     eq_begin_step2 = eqBeginStep2 meta eqr -     pcav i = if inftypeunknown then costInferredTypeUnkown else i-     pc i = pcav i-     varcost v | v < n - deffreevars = pcav (case Just usedvars of {Just usedvars -> if elem v (mapMaybe (\x -> case x of {Var v -> Just v; Const{} -> Nothing}) usedvars) then costAppVarUsed else costAppVar; Nothing -> if picksubsvar then costAppVar else costAppVarUsed})-     varcost v | otherwise = pcav costAppHint-     varapps = map (\v ->-                (varcost v,-                 app Nothing (Var v)-                )) [0..n - 1]-     hintapps = map (\(c, hm) ->-                 (cost c hm,-                  app Nothing (Const c)-                 )) hints-                 where cost c hm = pc (case iotastep of-                                        Just _ -> costIotaStep-                                        Nothing -> if elem c (mapMaybe (\x -> case x of {Var{} -> Nothing; Const c -> Just c}) usedvars) then-                                          case hm of {HMNormal -> costAppHintUsed; HMRecCall -> costAppRecCallUsed}-                                         else-                                          case hm of {HMNormal -> costAppHint; HMRecCall -> costAppRecCall})+     adjustCost i = if inftypeunknown then costInferredTypeUnkown else i+     varcost v | v < n - deffreevars = adjustCost $+       if elem v (mapMaybe getVar usedvars)+       then costAppVarUsed else costAppVar+     varcost v | otherwise = adjustCost costAppHint+     varapps  = map (\ v -> Move (varcost v) $ app n meta Nothing (Var v)) [0..n - 1]+     hintapps = map (\(c, hm) -> Move (cost c hm) (app n meta Nothing (Const c))) hints+       where+         cost :: ConstRef o -> HintMode -> Cost+         cost c hm = adjustCost $ case (iotastep , hm) of+           (Just _  , _       ) -> costIotaStep+           (Nothing , HMNormal) ->+             if elem c (mapMaybe getConst usedvars)+             then costAppHintUsed else costAppHint+           (Nothing , HMRecCall) ->+             if elem c (mapMaybe getConst usedvars)+             then costAppRecCallUsed else costAppRecCall      generics = varapps ++ hintapps-    in case tt of+    in case rawValue tt of       _ | eqrstate == EqRSChain ->-      return $ [eq_end, eq_step]+      return [eq_end, eq_step] -     HNPi _ hid possdep _ (Abs id _) -> return $ (pc (if iotastepdone then costLamUnfold else costLam), lam hid id) : (costAbsurdLam, return $ AbsurdLambda hid) : generics+     HNPi hid _ _ (Abs id _) -> return $+         (Move (adjustCost (if iotastepdone then costLamUnfold else costLam)) $ newLam hid id)+       : (Move costAbsurdLam $ return $ AbsurdLambda hid)+       : generics -     HNSort (Set l) -> return $ map (\l -> (pc costSort, set l)) [0..l - 1] ++ [(pc costPi, pi Nothing True NotHidden), (pc costPi, pi Nothing True Hidden)] ++ generics+     HNSort (Set l) -> return $+          map (Move (adjustCost costSort) . set) [0..l - 1]+       ++ map (Move (adjustCost costPi) . newPi meta True) [NotHidden, Hidden]+       ++ generics  -     HNApp _ (Const c) _ -> do+     HNApp (Const c) _ -> do       cd <- readIORef c       return $ case cdcont cd of-       Datatype cons _ -        | eqrstate == EqRSNone--         -> map (\c -> (pc (case iotastep of {Just True -> costUnification; _ -> if length cons <= 1 then costAppConstructorSingle else costAppConstructor}), app Nothing (Const c))) cons ++-            generics+       Datatype cons _ | eqrstate == EqRSNone ->+         map (\c -> Move (adjustCost $ case iotastep of+                                         Just True -> costUnification+                                         _ -> if length cons <= 1+                                              then costAppConstructorSingle+                                              else costAppConstructor)+                         $ app n meta Nothing (Const c)) cons+         ++ generics+         ++ (guard (maybe False ((c ==) . eqrcId) meqr)+            *> [eq_sym, eq_cong, eq_begin_step2]) -            ++ if maybe False (\eqr -> c == eqrcId eqr) meqr then [eq_sym, eq_cong, eq_begin_step_step] else []        _ | eqrstate == EqRSPrf1 -> generics ++ [eq_sym, eq_cong]        _ | eqrstate == EqRSPrf2 -> generics ++ [eq_cong] @@ -228,61 +288,67 @@      _ -> return generics    (RIUnifInfo cl hne : _) ->     let-     subsvarapps = map (\v ->-                    (costUnification,-                     app Nothing (Var v)-                    )) (subsvars cl)-     mlam = case tt of-      HNPi _ hid _ _ (Abs id _) -> [(costUnification, lam hid id)]+     subsvarapps = map (Move costUnification . app n meta Nothing . Var) (subsvars cl)+     mlam = case rawValue tt of+      HNPi hid _ _ (Abs id _) -> [Move costUnification (newLam hid id)]       _ -> []      generics = mlam ++ subsvarapps -     pickuid seenuids =-      case f seenuids of-       Just uid -> (uid, True)-       Nothing -> (head seenuids, False) -- ?? which uid to pick-      where f [] = Nothing-            f (Nothing:_) = Just Nothing-            f (Just u:us) = if elem u uids then f us else Just (Just u)     in-     return $ case hne of-      HNApp seenuids (Var v) _ ->-       let (uid, isunique) = pickuid seenuids+     return $ case rawValue hne of+      HNApp (Var v) _ ->+       let (uid, isunique) = pickUid uids $ seenUIds hne            uni = case univar cl v of-                  Just v | v < n -> [(if isunique then costUnification else costUnificationOccurs, app uid (Var v))]+                  Just v | v < n -> [Move (costUnificationIf isunique) $ app n meta uid (Var v)]                   _ -> []        in uni ++ generics-      HNApp seenuids (Const c) _ ->-       let (uid, isunique) = pickuid seenuids-       in (if isunique then costUnification else costUnificationOccurs, app uid (Const c)) : generics+      HNApp (Const c) _ ->+       let (uid, isunique) = pickUid uids $ seenUIds hne+       in (Move (costUnificationIf isunique) $ app n meta uid (Const c)) : generics       HNLam{} -> generics-      HNPi seenuids hid possdep _ _ ->-       let (uid, isunique) = pickuid seenuids-       in (if isunique then costUnification else costUnificationOccurs, pi uid possdep hid) : generics-      HNSort (Set l) -> map (\l -> (costUnification, set l)) [0..l] ++ generics+      HNPi hid possdep _ _ ->+       let (uid, isunique) = pickUid uids $ seenUIds hne+       in (Move (costUnificationIf isunique)+          $ newPi (fromMaybe meta uid) possdep hid) : generics+      HNSort (Set l) -> map (Move costUnification . set) [0..l] ++ generics       HNSort _ -> generics    _ -> __IMPOSSIBLE__ -extraref :: UId o -> [Maybe (UId o)] -> ConstRef o ->-            (Int, StateT (IORef [SubConstraints (RefInfo o)], Int) IO (Exp o))-extraref meta seenuids c = (costAppExtraRef, app (head seenuids) (Const c))- where-   app muid elr = do p <- newPlaceholder-                     okh <- newOKHandle-                     let uid = case muid of-                                Just _ -> muid-                                Nothing -> Just meta-                     return $ App uid okh elr p+  where +    app :: Nat -> UId o -> Maybe (UId o) -> Elr o ->+           RefCreateEnv (RefInfo o) (Exp o)+    app n meta muid elr = do+      p <- newPlaceholder+      p <- case elr of+        Var{}   -> return p+        Const c -> do+          cd <- RefCreateEnv $ lift $ readIORef c+          let dfvapp 0 _ = p+              dfvapp i n = NotM $ ALCons NotHidden+                          (NotM $ App Nothing (NotM $ OKVal) (Var n) (NotM ALNil))+                          (dfvapp (i - 1) (n - 1))+         -- NotHidden is ok because agda reification throws these arguments+         -- away and agsy skips typechecking them+          return $ dfvapp (cddeffreevars cd) (n - 1)+      okh <- newOKHandle+      return $ App (Just $ fromMaybe meta muid) okh elr p ++extraref :: UId o -> [Maybe (UId o)] -> ConstRef o -> Move o+extraref meta seenuids c = Move costAppExtraRef $ app (head seenuids) (Const c)+ where+   app muid elr = App (Just $ fromMaybe meta muid)+              <$> newOKHandle <*> return elr <*> newPlaceholder+ instance Refinable (ICExp o) (RefInfo o) where  refinements _ infos _ =   let (RICopyInfo e : _) = infos-  in return [(0, return e)]+  in return [Move 0 (return e)]   instance Refinable (ConstRef o) (RefInfo o) where- refinements _ [RICheckProjIndex projs] _ = return $ map (\x -> (0, return x)) projs+ refinements _ [RICheckProjIndex projs] _ = return $ map (Move 0 . return) projs  refinements _ _ _ = __IMPOSSIBLE__  @@ -293,8 +359,11 @@   costAppRecCallUsed, costAppConstructor, costAppConstructorSingle,   costAppExtraRef, costLam, costLamUnfold, costPi, costSort, costIotaStep,   costInferredTypeUnkown, costAbsurdLam-  :: Int+  :: Cost +costUnificationIf :: Bool -> Cost+costUnificationIf b = if b then costUnification else costUnificationOccurs+ costIncrease = 1000 costUnificationOccurs = 100 -- 1000001 -- 1 -- 100 costUnification = 0000@@ -315,7 +384,7 @@ costInferredTypeUnkown = 1000006 -- 100 costAbsurdLam = 0 -costEqStep, costEqEnd, costEqSym, costEqCong :: Int+costEqStep, costEqEnd, costEqSym, costEqCong :: Cost costEqStep = 2000 costEqEnd = 0 costEqSym = 0@@ -325,7 +394,7 @@   prioCompBeta, prioCompBetaStructured, prioCompareArgList, prioCompIota,   prioCompChoice, prioCompUnif, prioCompCopy, prioNoIota, prioAbsurdLambda,   prioProjIndex-  :: Int+  :: Prio prioNo = (-1) prioTypeUnknown = 0 prioTypecheckArgList = 3000@@ -342,7 +411,7 @@  prioProjIndex = 3000 -prioTypecheck :: Bool -> Int+prioTypecheck :: Bool -> Prio prioTypecheck False = 1000 prioTypecheck True = 0 
src/full/Agda/Auto/Syntax.hs view
@@ -3,7 +3,13 @@ module Agda.Auto.Syntax where  import Data.IORef+import qualified Data.Set as Set +#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative ( (<$>), (<*>) )+#endif++import Agda.Syntax.Common (Hiding) import Agda.Auto.NarrowingSearch  #include "undefined.h"@@ -15,8 +21,15 @@ data HintMode = HMNormal               | HMRecCall --data EqReasoningConsts o = EqReasoningConsts {eqrcId, eqrcBegin, eqrcStep, eqrcEnd, eqrcSym, eqrcCong :: ConstRef o} -- "_≡_", "begin_", "_≡⟨_⟩_", "_∎", "sym", "cong"+data EqReasoningConsts o = EqReasoningConsts+  { eqrcId    -- "_≡_"+  , eqrcBegin -- "begin_"+  , eqrcStep  -- "_≡⟨_⟩_"+  , eqrcEnd   -- "_∎"+  , eqrcSym   -- "sym"+  , eqrcCong  -- "cong"+  :: ConstRef o+  }  data EqReasoningState = EqRSNone | EqRSChain | EqRSPrf1 | EqRSPrf2 | EqRSPrf3  deriving (Eq, Show)@@ -42,7 +55,8 @@        --   (used to put cost when traversing a definition        --    by construction instantiation).     }-  | RIUnifInfo [CAction o] (HNExp o) -- meta environment, opp hne+  | RIUnifInfo [CAction o] (HNExp o)+    -- meta environment, opp hne   | RICopyInfo (ICExp o)   | RIIotaStep Bool -- True - semiflex   | RIInferredTypeUnknown@@ -62,19 +76,9 @@  type Nat = Int --- | 'Hiding' in Agda.-data FMode = Hidden-           | Instance-           | NotHidden- deriving Eq-- data MId = Id String          | NoId -stringToMyId :: String -> MId-stringToMyId = Id- -- | Abstraction with maybe a name. -- --   Different from Agda, where there is also info@@ -99,7 +103,8 @@ -- | Constant definitions.  data DeclCont o-  = Def Nat [Clause o] (Maybe Nat) (Maybe Nat) -- maybe an index to elimand argument, maybe index to elim arg if semiflex+  = Def Nat [Clause o] (Maybe Nat) -- maybe an index to elimand argument+                       (Maybe Nat) -- maybe index to elim arg if semiflex   | Datatype [ConstRef o] -- constructors              [ConstRef o] -- projection functions (in case it is a record) @@ -124,7 +129,16 @@ data Elr o   = Var Nat   | Const (ConstRef o)+  deriving (Eq) +getVar :: Elr o -> Maybe Nat+getVar (Var n) = Just n+getVar Const{} = Nothing++getConst :: Elr o -> Maybe (ConstRef o)+getConst (Const c) = Just c+getConst Var{}     = Nothing+ data Sort   = Set Nat   | UnknownSort@@ -142,13 +156,13 @@     , appElims :: MArgList o       -- ^ Arguments.     }-  | Lam FMode (Abs (MExp o))+  | Lam Hiding (Abs (MExp o))     -- ^ Lambda with hiding information.-  | Pi (Maybe (UId o)) FMode Bool (MExp o) (Abs (MExp o))+  | Pi (Maybe (UId o)) Hiding Bool (MExp o) (Abs (MExp o))     -- ^ @True@ if possibly dependent (var not known to not occur).     --   @False@ if non-dependent.   | Sort Sort-  | AbsurdLambda FMode+  | AbsurdLambda Hiding     -- ^ Absurd lambda with hiding information.  dontCare :: Exp o@@ -160,10 +174,10 @@ data ArgList o   = ALNil     -- ^ No more eliminations.-  | ALCons FMode (MExp o) (MArgList o)+  | ALCons Hiding (MExp o) (MArgList o)     -- ^ Application and tail. -  | ALProj (MArgList o) (MM (ConstRef o) (RefInfo o)) FMode (MArgList o)+  | ALProj (MArgList o) (MM (ConstRef o) (RefInfo o)) Hiding (MArgList o)     -- ^ proj pre args, projfcn idx, tail    | ALConPar (MArgList o)@@ -172,19 +186,26 @@     --   Inserted to cover glitch of polymorphic constructor     --   applications coming from Agda - type MArgList o = MM (ArgList o) (RefInfo o) -data HNExp o = HNApp [Maybe (UId o)] (Elr o) (ICArgList o)-             | HNLam [Maybe (UId o)] FMode (Abs (ICExp o))-             | HNPi [Maybe (UId o)] FMode Bool (ICExp o) (Abs (ICExp o))-             | HNSort Sort+data WithSeenUIds a o = WithSeenUIds+  { seenUIds :: [Maybe (UId o)]+  , rawValue :: a+  } +type HNExp o = WithSeenUIds (HNExp' o) o++data HNExp' o =+    HNApp  (Elr o) (ICArgList o)+  | HNLam  Hiding (Abs (ICExp o))+  | HNPi   Hiding Bool (ICExp o) (Abs (ICExp o))+  | HNSort Sort+ -- | Head-normal form of 'ICArgList'.  First entry is exposed. -- --   Q: Why are there no projection eliminations? data HNArgList o = HNALNil-                 | HNALCons FMode (ICExp o) (ICArgList o)+                 | HNALCons Hiding (ICExp o) (ICArgList o)                  | HNALConPar (ICArgList o)  -- | Lazy concatenation of argument lists under explicit substitutions.@@ -233,6 +254,7 @@  detectsemiflex :: ConstRef o -> [Clause o] -> IO Bool detectsemiflex _ _ = return False -- disabled+ categorizedecl :: ConstRef o -> IO () categorizedecl c = do  cd <- readIORef c@@ -248,103 +270,72 @@  -- ------------------------------------------- -metaliseokh :: MExp o -> IO (MExp o)-metaliseokh = fm- where-  fm (Meta m) = return $ Meta m-  fm (NotM e) = do-   e <- f e-   return $ NotM e-  f (App uid _ elr args) = do-   m <- initMeta-   args <- fms args-   return $ App uid (Meta m) elr args-  f (Lam hid (Abs id b)) = do-   b <- fm b-   return $ Lam hid (Abs id b)-  f (Pi uid hid posdep it (Abs id ot)) = do-   it <- fm it-   ot <- fm ot-   return $ Pi uid hid posdep it (Abs id ot)-  f e@(Sort{}) = return e--  f e@(AbsurdLambda{}) = return e-+class MetaliseOKH t where+  metaliseOKH :: t -> IO t -  fms (Meta m) = return $ Meta m-  fms (NotM es) = do-   es <- fs es-   return $ NotM es-  fs ALNil = return ALNil-  fs (ALCons hid a as) = do-   a <- fm a-   as <- fms as-   return $ ALCons hid a as+instance MetaliseOKH t => MetaliseOKH (MM t a) where+  metaliseOKH e = case e of+    Meta m -> return $ Meta m+    NotM e -> NotM <$> metaliseOKH e -  fs (ALProj eas idx hid as) = do-   eas <- fms eas-   as <- fms as-   return $ ALProj eas idx hid as+instance MetaliseOKH t => MetaliseOKH (Abs t) where+  metaliseOKH (Abs id b) = Abs id <$> metaliseOKH b +instance MetaliseOKH (Exp o) where+  metaliseOKH e = case e of+    App uid okh elr args ->+      (\ m -> App uid m elr) <$> (Meta <$> initMeta) <*> metaliseOKH args+    Lam hid b -> Lam hid <$> metaliseOKH b+    Pi uid hid dep it ot ->+      Pi uid hid dep <$> metaliseOKH it <*> metaliseOKH ot+    Sort{} -> return e+    AbsurdLambda{} -> return e -  fs (ALConPar as) = do-   as <- fms as-   return $ ALConPar as+instance MetaliseOKH (ArgList o) where+  metaliseOKH e = case e of+    ALNil -> return ALNil+    ALCons hid a as -> ALCons hid <$> metaliseOKH a <*> metaliseOKH as+    ALProj eas idx hid as ->+      (\ eas -> ALProj eas idx hid) <$> metaliseOKH eas <*> metaliseOKH as+    ALConPar as -> ALConPar <$> metaliseOKH as +metaliseokh :: MExp o -> IO (MExp o)+metaliseokh = metaliseOKH  -- ------------------------------------------- -expandExp :: MExp o -> IO (MExp o)-expandExp = fm- where-  fm (Meta m) = do-   mb <- readIORef $ mbind m-   case mb of-    Nothing -> return $ Meta m-    Just e -> fm (NotM e)-  fm (NotM e) = do-   e <- f e-   return $ NotM e-  f (App uid okh elr args) = do-   args <- fms args-   return $ App uid okh elr args-  f (Lam hid (Abs id b)) = do-   b <- fm b-   return $ Lam hid (Abs id b)-  f (Pi uid hid posdep it (Abs id ot)) = do-   it <- fm it-   ot <- fm ot-   return $ Pi uid hid posdep it (Abs id ot)-  f e@(Sort{}) = return e--  f e@(AbsurdLambda{}) = return e---  fms (Meta m) = do-   mb <- readIORef $ mbind m-   case mb of-    Nothing -> return $ Meta m-    Just es -> fms (NotM es)-  fms (NotM es) = do-   es <- fs es-   return $ NotM es-  fs ALNil = return ALNil-  fs (ALCons hid a as) = do-   a <- fm a-   as <- fms as-   return $ ALCons hid a as+class ExpandMetas t where+  expandMetas :: t -> IO t -  fs (ALProj eas idx hid as) = do-   idx <- expandbind idx-   eas <- fms eas-   as <- fms as-   return $ ALProj eas idx hid as+instance ExpandMetas t => ExpandMetas (MM t a) where+  expandMetas t = case t of+    NotM e -> NotM <$> expandMetas e+    Meta m -> do+      mb <- readIORef (mbind m)+      case mb of+        Nothing -> return $ Meta m+        Just e  -> NotM <$> expandMetas e +instance ExpandMetas t => ExpandMetas (Abs t) where+  expandMetas (Abs id b) = Abs id <$> expandMetas b -  fs (ALConPar as) = do-   as <- fms as-   return $ ALConPar as+instance ExpandMetas (Exp o) where+  expandMetas t = case t of+    App uid okh elr args -> App uid okh elr <$> expandMetas args+    Lam hid b -> Lam hid <$> expandMetas b+    Pi uid hid dep it ot ->+      Pi uid hid dep <$> expandMetas it <*> expandMetas ot+    Sort{} -> return t+    AbsurdLambda{} -> return t +instance ExpandMetas (ArgList o) where+  expandMetas e = case e of+    ALNil -> return ALNil+    ALCons hid a as -> ALCons hid <$> expandMetas a <*> expandMetas as+    ALProj eas idx hid as ->+      (\ a b -> ALProj a b hid) <$> expandMetas eas+      <*> expandbind idx <*> expandMetas as+    ALConPar as -> ALConPar <$> expandMetas as  -- --------------------------------- @@ -370,23 +361,27 @@ subi e (Clos (Skip : as) x) = Clos (Sub (Clos [] e) : as) x subi _ _ = __IMPOSSIBLE__ -weak :: Nat -> CExp o -> CExp o-weak n (TrBr trs e) = TrBr trs (weaki n e)+weak :: Weakening t => Nat -> t -> t+weak 0 = id+weak n = weak' n -weaki :: Nat -> Clos a o -> Clos a o-weaki 0 x = x-weaki n (Clos as x) = Clos (Weak n : as) x+class Weakening t where+  weak' :: Nat -> t -> t -weakarglist :: Nat -> ICArgList o -> ICArgList o-weakarglist 0 = id-weakarglist n = f- where f CALNil = CALNil-       f (CALConcat (Clos cl as) as2) = CALConcat (Clos (Weak n : cl) as) (f as2)-weakelr :: Nat -> Elr o -> Elr o-weakelr 0 elr = elr-weakelr n (Var v) = Var (v + n)-weakelr _ elr@(Const _) = elr+instance Weakening a => Weakening (TrBr a o) where+  weak' n (TrBr trs e) = TrBr trs (weak' n e) +instance Weakening (Clos a o) where+  weak' n (Clos as x) = Clos (Weak n : as) x++instance Weakening (ICArgList o) where+  weak' n e = case e of+    CALNil         -> CALNil+    CALConcat a as -> CALConcat (weak' n a) (weak' n as)++instance Weakening (Elr o) where+  weak' n = rename (n+)+ -- | Substituting for a variable. doclos :: [CAction o] -> Nat -> Either Nat (ICExp o) doclos = f 0@@ -394,7 +389,82 @@   -- ns is the number of weakenings   f ns []            i = Left (ns + i)   f ns (Weak n : xs) i = f (ns + n) xs i-  f ns (Sub s  : _ ) 0 = Right (weaki ns s)+  f ns (Sub s  : _ ) 0 = Right (weak ns s)   f ns (Skip   : _ ) 0 = Left ns   f ns (Skip   : xs) i = f (ns + 1) xs (i - 1)   f ns (Sub _  : xs) i = f ns xs (i - 1)+++-- | FreeVars class and instances++freeVars :: FreeVars t => t -> Set.Set Nat+freeVars = freeVarsOffset 0++class FreeVars t where+  freeVarsOffset :: Nat -> t -> Set.Set Nat++instance (FreeVars a, FreeVars b) => FreeVars (a, b) where+  freeVarsOffset n (a, b) = Set.union (freeVarsOffset n a) (freeVarsOffset n b)++instance FreeVars t => FreeVars (MM t a) where+  freeVarsOffset n e = freeVarsOffset n (rm __IMPOSSIBLE__ e)++instance FreeVars t => FreeVars (Abs t) where+  freeVarsOffset n (Abs id e) = freeVarsOffset (n + 1) e++instance FreeVars (Elr o) where+  freeVarsOffset n e = case e of+    Var v   -> Set.singleton (v - n)+    Const{} -> Set.empty++instance FreeVars (Exp o) where+  freeVarsOffset n e = case e of+   App _ _ elr args -> freeVarsOffset n (elr, args)+   Lam _ b          -> freeVarsOffset n b+   Pi _ _ _ it ot   -> freeVarsOffset n (it, ot)+   Sort{}           -> Set.empty+   AbsurdLambda{}   -> Set.empty++instance FreeVars (ArgList o) where+  freeVarsOffset n es = case es of+    ALNil         -> Set.empty+    ALCons _ e es -> freeVarsOffset n (e, es)+    ALConPar es   -> freeVarsOffset n es+    ALProj{}      -> __IMPOSSIBLE__+++-- | Renaming Typeclass and instances+rename :: Renaming t => (Nat -> Nat) -> t -> t+rename = renameOffset 0++class Renaming t where+  renameOffset :: Nat -> (Nat -> Nat) -> t -> t++instance (Renaming a, Renaming b) => Renaming (a, b) where+  renameOffset j ren (a, b) = (renameOffset j ren a, renameOffset j ren b)++instance Renaming t => Renaming (MM t a) where+  renameOffset j ren e = NotM $ renameOffset j ren (rm __IMPOSSIBLE__ e)++instance Renaming t => Renaming (Abs t) where+  renameOffset j ren (Abs id e) = Abs id $ renameOffset (j + 1) ren e++instance Renaming (Elr o) where+  renameOffset j ren e = case e of+    Var v | v >= j -> Var (ren (v - j) + j)+    _              -> e++instance Renaming (Exp o) where+  renameOffset j ren e = case e of+    App uid ok elr args -> uncurry (App uid ok) $ renameOffset j ren (elr, args)+    Lam hid e -> Lam hid (renameOffset j ren e)+    Pi a b c it ot -> uncurry (Pi a b c) $ renameOffset j ren (it, ot)+    Sort{}         -> e+    AbsurdLambda{} -> e++instance Renaming (ArgList o) where+  renameOffset j ren e = case e of+    ALNil           -> ALNil+    ALCons hid a as -> uncurry (ALCons hid) $ renameOffset j ren (a, as)+    ALConPar as     -> ALConPar (renameOffset j ren as)+    ALProj{}        -> __IMPOSSIBLE__
src/full/Agda/Auto/Typecheck.hs view
@@ -1,11 +1,11 @@-{-# LANGUAGE CPP                       #-}-{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE CPP #-}  module Agda.Auto.Typecheck where  import Data.IORef import Control.Monad (liftM) +import Agda.Syntax.Common (Hiding (..)) import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax import Agda.Auto.SearchControl@@ -16,12 +16,11 @@ -- ---------------------------------  -- | Typechecker drives the solution of metas.- tcExp :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o) tcExp isdep ctx typ@(TrBr typtrs ityp@(Clos _ itypexp)) trm =   mbpcase prioTypeUnknown Nothing (hnn_checkstep ityp) $ \(hntyp, iotastepdone) ->   mmpcase (True, prioTypecheck isdep, Just (RIMainInfo (length ctx) hntyp iotastepdone)) trm $ \trm -> case trm of-   App _ okh elr args -> case hntyp of+   App _ okh elr args -> case rawValue hntyp of     HNPi{} | isdep -> mpret $ Error "tcExp, dep terms should be eta-long"     _ -> do      (ityp, sc) <- case elr of@@ -43,17 +42,17 @@        return $ case cdcont cdef of {Constructor{} -> True; _ -> False}       sc $ tcargs ndfv isdep ctx ityp args (NotM $ App Nothing (NotM OKVal) elr (NotM ALNil)) isconstructor $ \ityp _ -> mpret $ ConnectHandle okh (comp' True typ ityp)-   Lam hid (Abs id1 b) -> case hntyp of-    HNPi _ hid2 _ it (Abs id2 ot) | hid == hid2 ->+   Lam hid (Abs id1 b) -> case rawValue hntyp of+    HNPi hid2 _ it (Abs id2 ot) | hid == hid2 ->      tcExp isdep ((pickid id1 id2, t it) : ctx) (t ot) b     _ -> mpret $ Error "tcExp, type of lam should be fun or pi (and same hid)"-   Pi _ _ _ it (Abs id ot) -> case hntyp of+   Pi _ _ _ it (Abs id ot) -> case rawValue hntyp of     HNSort s ->      mpret $ And (Just [Term ctx, Term it])       (tcExp True ctx (closify (NotM $ Sort s)) it)       (tcExp isdep ((id, closify it) : ctx) (closify (NotM $ Sort s)) ot)     _ -> mpret $ Error "tcExp, type of pi should be set"-   Sort (Set i) -> case hntyp of+   Sort (Set i) -> case rawValue hntyp of     HNSort s2 -> case s2 of      Set j -> mpret $ if i < j then OK else Error "tcExp, type of set should be larger set" @@ -66,8 +65,8 @@     Sort Type -> __IMPOSSIBLE__ -   AbsurdLambda hid -> case hntyp of-    HNPi _ hid2 _ it _ | hid == hid2 ->+   AbsurdLambda hid -> case rawValue hntyp of+    HNPi hid2 _ it _ | hid == hid2 ->      mbpcase prioAbsurdLambda Nothing (getDatatype it) $ \res -> case res of       Just (indeces, cons) ->        foldl (\p con -> mpret $ And Nothing p (@@ -83,8 +82,8 @@  getDatatype :: ICExp o -> EE (MyMB (Maybe (ICArgList o, [ConstRef o])) o) getDatatype t =- mbcase (hnn t) $ \hnt -> case hnt of-  HNApp _ (Const c) args -> do+ mbcase (hnn t) $ \hnt -> case rawValue hnt of+  HNApp (Const c) args -> do    cd <- readIORef c    case cdcont cd of     Datatype cons _ -> mbret $ Just (args, cons) -- ?? check that lenth args corresponds to type of datatype@@ -95,8 +94,8 @@ constructorImpossible args c = do  cd <- readIORef c  mbpcase prioAbsurdLambda Nothing (traversePi (-1) (Clos [] $ cdtype cd)) $ \hnot ->-  case hnot of-   HNApp _ _ args2 -> unequals args args2 (\_ -> mpret $ Error "not unequal") []+  case rawValue hnot of+   HNApp _ args2 -> unequals args args2 (\_ -> mpret $ Error "not unequal") []    _ -> mpret $ Error "constructorImpossible 1"  unequals :: ICArgList o -> ICArgList o -> ([(Nat, HNExp o)] -> EE (MyPB o)) -> [(Nat, HNExp o)] -> EE (MyPB o)@@ -114,8 +113,8 @@ unequal e1 e2 cont unifier2 =  mbpcase prioAbsurdLambda Nothing (hnn e1) $ \hne1 ->  mbpcase prioAbsurdLambda Nothing (hnn e2) $ \hne2 ->-  case hne2 of-   HNApp _ (Var v2) es2 | v2 < 0 ->+  case rawValue hne2 of+   HNApp (Var v2) es2 | v2 < 0 ->     mbpcase prioAbsurdLambda Nothing (hnarglist es2) $ \hnes2 -> case hnes2 of      HNALNil ->       case lookup v2 unifier2 of@@ -127,8 +126,8 @@     _ -> cc hne1 hne2  where-  cc hne1 hne2 = case (hne1, hne2) of-   (HNApp _ (Const c1) es1, HNApp _ (Const c2) es2) -> do+  cc hne1 hne2 = case (rawValue hne1, rawValue hne2) of+   (HNApp (Const c1) es1, HNApp (Const c2) es2) -> do     cd1 <- readIORef c1     cd2 <- readIORef c2     case (cdcont cd1, cdcont cd2) of@@ -143,8 +142,8 @@ traversePi :: Int -> ICExp o -> EE (MyMB (HNExp o) o) traversePi v t =  mbcase (hnn t) $ \hnt ->- case hnt of-  HNPi _ _ _ _ (Abs _ ot) -> traversePi (v - 1) (subi (NotM $ App Nothing (NotM OKVal) (Var v) (NotM ALNil)) ot)+ case rawValue hnt of+  HNPi _ _ _ (Abs _ ot) -> traversePi (v - 1) $ subi (NotM $ App Nothing (NotM OKVal) (Var v) (NotM ALNil)) ot   _ -> mbret hnt  tcargs :: Nat -> Bool -> Ctx o -> CExp o -> MArgList o -> MExp o -> Bool ->@@ -152,8 +151,9 @@ tcargs ndfv isdep ctx ityp@(TrBr ityptrs iityp) args elimtrm isconstructor cont = mmpcase (True, prioTypecheckArgList, (Just $ RICheckElim $ isdep || isconstructor)) args $ \args' -> case args' of  ALNil -> cont ityp elimtrm  ALCons hid a as ->-  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case hnityp of-   HNPi _ hid2 possdep it (Abs _ ot) | ndfv > 0 || copyarg a || hid == hid2 -> mpret $+  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case rawValue hnityp of+   HNPi hid2 possdep it (Abs _ ot)+     | ndfv > 0 || copyarg a || hid == hid2 -> mpret $     And (Just ((if possdep then [Term a] else []) ++ [Term ctx, Term ityptrs]))         (if ndfv > 0 then mpret OK else (tcExp (isdep || possdep) ctx (t it) a))         (tcargs (ndfv - 1) isdep ctx (sub a (t ot)) as (addend hid a elimtrm) isconstructor cont)@@ -163,8 +163,8 @@  ALProj{} | ndfv > 0 -> __IMPOSSIBLE__   ALProj preas projidx hid as ->-  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case hnityp of-   HNApp _ (Const dd) _ -> do+  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case rawValue hnityp of+   HNApp (Const dd) _ -> do     dddef <- readIORef dd     case cdcont dddef of      Datatype _ projs ->@@ -175,8 +175,8 @@         \ityp2@(TrBr ityp2trs iityp2) elimtrm2 ->          case iityp2 of           Clos _ (NotM (Pi _ _ _ (NotM (App _ _ (Const dd2) _)) _)) | dd2 == dd ->-           mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp2) $ \hnityp2 -> case hnityp2 of-            HNPi _ hid2 possdep it (Abs _ ot) | hid == hid2 -> mpret $+           mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp2) $ \hnityp2 -> case rawValue hnityp2 of+            HNPi hid2 possdep it (Abs _ ot) | hid == hid2 -> mpret $              And Nothing                  (comp' True (TrBr ityp2trs it) ityp)                  (tcargs 0 isdep ctx (sub elimtrm (t ot)) as (addend hid elimtrm elimtrm2) isconstructor cont)@@ -191,7 +191,7 @@  where   t = TrBr ityptrs -addend :: FMode -> MExp o -> MM (Exp o) blk -> MM (Exp o) blk+addend :: Hiding -> MExp o -> MM (Exp o) blk -> MM (Exp o) blk addend hid a (NotM (App uid okh elr as)) = NotM $ App uid okh elr (f as)  where    f (NotM ALNil)             = NotM $ ALCons hid a (NotM $ ALNil)@@ -252,18 +252,28 @@      let ncargs = CALConcat (Clos cl args) cargs      in case elr of       Var v -> case doclos cl v of-       Left v' -> mbret $ HNDone expmeta (HNApp (uid : seenuids) (Var v') ncargs)+       Left v' -> mbret $ HNDone expmeta+                        $ WithSeenUIds (uid : seenuids)+                        $ HNApp (Var v') ncargs        Right f -> loop f ncargs (uid : seenuids)-      Const _ -> mbret $ HNDone expmeta (HNApp (uid : seenuids) elr ncargs)+      Const _ -> mbret $ HNDone expmeta+                       $ WithSeenUIds (uid : seenuids)+                       $ HNApp elr ncargs     Lam hid (Abs id b) ->      mbcase (hnarglist cargs) $ \hncargs -> case hncargs of-      HNALNil -> mbret $ HNDone expmeta (HNLam seenuids hid (Abs id (Clos (Skip : cl) b)))+      HNALNil -> mbret $ HNDone expmeta+                       $ WithSeenUIds seenuids+                       $ HNLam hid (Abs id (Clos (Skip : cl) b))       HNALCons _ arg cargs' -> loop (Clos (Sub arg : cl) b) cargs' seenuids        HNALConPar{} -> __IMPOSSIBLE__ -    Pi uid hid possdep it (Abs id ot) -> checkNoArgs cargs $ mbret $ HNDone expmeta (HNPi (uid : seenuids) hid possdep (Clos cl it) (Abs id (Clos (Skip : cl) ot)))-    Sort s -> checkNoArgs cargs $ mbret $ HNDone expmeta (HNSort s)+    Pi uid hid possdep it (Abs id ot) ->+       checkNoArgs cargs $ mbret $ HNDone expmeta+         $ WithSeenUIds (uid : seenuids)+         $ HNPi hid possdep (Clos cl it) (Abs id (Clos (Skip : cl) ot))+    Sort s -> checkNoArgs cargs $ mbret+            $ HNDone expmeta $ WithSeenUIds [] $ HNSort s      AbsurdLambda{} -> mbfailed "hnc: encountered absurdlambda" @@ -321,8 +331,8 @@              | PEConApp (ICExp o) (ConstRef o) [PEval o]  iotastep :: Bool -> HNExp o -> EE (MyMB (Either (ICExp o, ICArgList o) (HNNBlks o)) o)-iotastep smartcheck e = case e of- HNApp _ (Const c) args -> do+iotastep smartcheck e = case rawValue e of+ HNApp (Const c) args -> do   cd <- readIORef c   case cdcont cd of    Def narg cls _ _ ->@@ -372,8 +382,8 @@      qq     where      qq =-      mbcase (hnn_blks a) $ \(hna, blks) -> case hna of-       HNApp _ (Const c') as ->+      mbcase (hnn_blks a) $ \(hna, blks) -> case rawValue hna of+       HNApp (Const c') as ->         if c == c' then          mbcase (getAllArgs as) $ \as' ->           if length as' == length pas then@@ -414,19 +424,13 @@   Right _ -> mpret OK  noiotastep_term :: ConstRef o -> MArgList o -> EE (MyPB o)-noiotastep_term c args = f (HNApp [] (Const c) (CALConcat (Clos [] args) CALNil))- where-  f hne@(HNApp _ (Const c) _) = do-   cd <- readIORef c-   let isshorthand =-        case cdcont cd of-         Def _ [(pats, _)] _ _ -> True -- all (\pat -> case pat of {PatConApp{} -> False; _ -> True}) pats-         _ -> False-   if isshorthand then-     mpret OK-    else-     noiotastep hne-  f _ = __IMPOSSIBLE__+noiotastep_term c args = do+  cd <- readIORef c+  case cdcont cd of+    Def _ [(pats, _)] _ _ -> mpret OK+      -- all (\pat -> case pat of {PatConApp{} -> False; _ -> True}) pats+    _ -> noiotastep $ WithSeenUIds []+                    $ HNApp (Const c) $ CALConcat (Clos [] args) CALNil  data CMode o = CMRigid (Maybe (Metavar (Exp o) (RefInfo o))) (HNExp o)              | forall b . Refinable b (RefInfo o) => CMFlex (MM b (RefInfo o)) (CMFlex o)@@ -528,30 +532,35 @@       CMFBlocked{} -> __IMPOSSIBLE__     comphn :: Bool -> Maybe (Metavar (Exp o) (RefInfo o)) -> HNExp o -> Maybe (Metavar (Exp o) (RefInfo o)) -> HNExp o -> EE (MyPB o)     comphn ineq mexpmeta1 hne1 mexpmeta2 hne2 =-     case (hne1, hne2) of-      (HNApp _ elr1 args1, HNApp _ elr2 args2) ->+     case (rawValue hne1, rawValue hne2) of+      (HNApp elr1 args1, HNApp elr2 args2) ->        let ce = case (elr1, elr2) of-                 (Var v1, Var v2) -> if v1 == v2 then Nothing else Just "comphn, elr, vars not equal"-                 (Const c1, Const c2) -> if c1 == c2 then Nothing else Just "comphn, elr, consts not equal"+                 (Var v1, Var v2) ->+                     if v1 == v2 then Nothing+                     else Just "comphn, elr, vars not equal"+                 (Const c1, Const c2) ->+                    if c1 == c2 then Nothing+                    else Just "comphn, elr, consts not equal"                  (_, _) -> Just "comphn, elrs not equal"        in case ce of             Nothing -> compargs args1 args2             Just msg -> mpret $ Error msg-      (HNLam _ hid1 (Abs id1 b1), HNLam _ hid2 (Abs id2 b2)) -> comp False b1 b2-      (HNLam seenuids _ (Abs _ b1), HNApp uid2 elr2 args2) ->-       f True b1 CALNil seenuids $ \res1 -> fhn True mexpmeta2 (HNApp uid2 (weakelr 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args2))) $ \res2 -> g res1 res2-      (HNApp uid1 elr1 args1, HNLam seenuids _ (Abs _ b2)) ->-       fhn True mexpmeta1 (HNApp uid1 (weakelr 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args1))) $ \res1 -> f True b2 CALNil seenuids $ \res2 -> g res1 res2+      (HNLam hid1 (Abs id1 b1), HNLam hid2 (Abs id2 b2)) -> comp False b1 b2+      (HNLam _ (Abs _ b1), HNApp elr2 args2) ->+       f True b1 CALNil (seenUIds hne1) $ \res1 ->+       fhn True mexpmeta2 (WithSeenUIds (seenUIds hne2) $ HNApp (weak 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weak 1 args2))) $ \res2 -> g res1 res2+      (HNApp elr1 args1, HNLam _ (Abs _ b2)) ->+       fhn True mexpmeta1 (WithSeenUIds (seenUIds hne1) $ HNApp (weak 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weak 1 args1))) $ \res1 -> f True b2 CALNil (seenUIds hne2) $ \res2 -> g res1 res2 {-       (HNLam _ (Abs _ b1), HNApp uid2 elr2 args2) ->        f True b1 CALNil $ \res1 -> g res1-        (CMRigid mexpmeta2 (HNApp uid2 (weakelr 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args2))))+        (CMRigid mexpmeta2 (HNApp uid2 (weak 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weak 1 args2))))       (HNApp uid1 elr1 args1, HNLam _ (Abs _ b2)) ->        f True b2 CALNil $ \res2 -> g-        (CMRigid mexpmeta1 (HNApp uid1 (weakelr 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args1))))+        (CMRigid mexpmeta1 (HNApp uid1 (weak 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weak 1 args1))))         res2 -}-      (HNPi _ hid1 _ it1 (Abs id1 ot1), HNPi _ hid2 _ it2 (Abs id2 ot2)) -> mpret $+      (HNPi hid1 _ it1 (Abs id1 ot1), HNPi hid2 _ it2 (Abs id2 ot2)) -> mpret $        And (Just [Term trs1, Term trs2]) (comp False it1 it2) (comp ineq ot1 ot2)       (HNSort s1, HNSort s2) -> mpret $        case (s1, s2) of@@ -562,12 +571,14 @@         (Type, Set _) | ineq -> OK         (Type, UnknownSort) | ineq -> OK         _ -> __IMPOSSIBLE__-      (HNApp uid1 (Const c1) _, _) -> case mexpmeta2 of+      (HNApp (Const c1) _, _) -> case mexpmeta2 of        Nothing -> mpret $ Error "comphn, not equal (2)"-       Just m2 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref" m2 (extraref m2 uid1 c1)-      (_, HNApp uid2 (Const c2) _) -> case mexpmeta1 of+       Just m2 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref"+                          m2 (extraref m2 (seenUIds hne1) c1)+      (_, HNApp (Const c2) _) -> case mexpmeta1 of        Nothing -> mpret $ Error "comphn, not equal (3)"-       Just m1 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref" m1 (extraref m1 uid2 c2)+       Just m1 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref"+                          m1 (extraref m1 (seenUIds hne2) c2)       (_, _) -> mpret $ Error "comphn, not equal"      compargs :: ICArgList o -> ICArgList o -> EE (MyPB o)@@ -685,7 +696,7 @@  -- --------------------------------- -maybeor :: Bool -> Int -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o)) ->+maybeor :: Bool -> Prio -> IO (PB (RefInfo o)) -> IO (PB (RefInfo o)) ->            IO (PB (RefInfo o)) maybeor _ _ mainalt _ = mainalt @@ -738,8 +749,8 @@      HNDone{} -> do       res <- hnn ce       case res of-       NotB hne -> case hne of-        HNApp _ (Const c) _ -> do+       NotB hne -> case rawValue hne of+        HNApp (Const c) _ -> do          cd <- readIORef c          case cdcont cd of           Constructor{} -> return False@@ -793,7 +804,6 @@      (_ : ss, ALConPar args) -> fs ss args     ([], ALConPar args) -> fs [] args-  -- --------------------------------- 
src/full/Agda/Benchmarking.hs view
@@ -18,6 +18,9 @@  import System.IO.Unsafe +import Agda.Syntax.Concrete.Name (TopLevelModuleName)+import Agda.Syntax.Concrete.Pretty+import Agda.Syntax.Abstract.Name import Agda.Utils.Benchmark (MonadBench(..)) import qualified Agda.Utils.Benchmark as B import Agda.Utils.Null@@ -73,8 +76,10 @@     -- ^ Subphase for 'Serialization'.   | Compress     -- ^ Subphase for 'Serialization'.-  | Operators+  | OperatorsExpr     -- ^ Subphase for 'Parsing'.+  | OperatorsPattern+    -- ^ Subphase for 'Parsing'.   | Free     -- ^ Subphase for 'Typing': free variable computation.   | OccursCheck@@ -89,13 +94,32 @@     -- ^ Subphase for 'CheckLHS': unification of the indices   | InverseScopeLookup     -- ^ Pretty printing names.-  deriving (Eq, Ord, Show, Enum, Bounded)+  | TopModule TopLevelModuleName+  | Definition QName+  deriving (Eq, Ord, Show)  instance Pretty Phase where-  pretty = text . show+  pretty (TopModule m)  = pretty m+  pretty (Definition q) = pretty q+  pretty a = text (show a)  type Benchmark = B.Benchmark Phase type Account   = B.Account Phase++isModuleAccount :: Account -> Bool+isModuleAccount []                = True+isModuleAccount (TopModule{} : _) = True+isModuleAccount _                 = False++isDefAccount :: Account -> Bool+isDefAccount []                 = True+isDefAccount (Definition{} : _) = True+isDefAccount _                  = False++isInternalAccount :: Account -> Bool+isInternalAccount (TopModule{}  : _) = False+isInternalAccount (Definition{} : _) = False+isInternalAccount _                  = True  -- * Benchmarking in the IO monad. 
+ src/full/Agda/Compiler/Backend.hs view
@@ -0,0 +1,195 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TypeOperators #-}++-- | Interface for compiler backend writers.+module Agda.Compiler.Backend+  ( Backend(..), Backend'(..), Recompile(..), IsMain(..)+  , Flag+  , toTreeless+  , module Agda.Syntax.Treeless+  , module Agda.TypeChecking.Monad+    -- For Agda.Main+  , backendInteraction+  , parseBackendOptions+    -- For InteractionTop+  , callBackend+  ) where++import Control.Monad.State++import qualified Data.List as List+import Data.Functor+import Data.Map (Map)+import qualified Data.Map as Map++import System.Environment+import System.Exit+import System.Console.GetOpt++import Agda.Syntax.Treeless+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Pretty as P++import Agda.Interaction.Options+import Agda.Interaction.FindFile+import Agda.Interaction.Highlighting.HTML+import Agda.Interaction.Imports (getAllWarnings')+import Agda.TypeChecking.Warnings++import Agda.Utils.FileName+import Agda.Utils.Functor+import Agda.Utils.IndexedList+import Agda.Utils.Lens+import Agda.Utils.Monad+import Agda.Utils.Pretty++import Agda.Compiler.ToTreeless+import Agda.Compiler.Common++#include "undefined.h"+import Agda.Utils.Impossible++-- Public interface -------------------------------------------------------++data Backend where+  Backend :: Backend' opts env menv mod def -> Backend++data Backend' opts env menv mod def = Backend'+  { backendName      :: String+  , backendVersion   :: Maybe String+      -- ^ Optional version information to be printed with @--version@.+  , options          :: opts+      -- ^ Default options+  , commandLineFlags :: [OptDescr (Flag opts)]+      -- ^ Backend-specific command-line flags. Should at minimum contain a+      --   flag to enable the backend.+  , isEnabled        :: opts -> Bool+      -- ^ Unless the backend has been enabled, @runAgda@ will fall back to+      --   vanilla Agda behaviour.+  , preCompile       :: opts -> TCM env+      -- ^ Called after type checking completes, but before compilation starts.+  , postCompile      :: env -> IsMain -> Map ModuleName mod -> TCM ()+      -- ^ Called after module compilation has completed. The @IsMain@ argument+      --   is @NotMain@ if the @--no-main@ flag is present.+  , preModule        :: env -> ModuleName -> FilePath -> TCM (Recompile menv mod)+      -- ^ Called before compilation of each module. Gets the path to the+      --   @.agdai@ file to allow up-to-date checking of previously written+      --   compilation results. Should return @Skip m@ if compilation is not+      --   required.+  , postModule       :: env -> menv -> IsMain -> ModuleName -> [def] -> TCM mod+      -- ^ Called after all definitions of a module has been compiled.+  , compileDef       :: env -> menv -> Definition -> TCM def+      -- ^ Compile a single definition.+  , scopeCheckingSuffices :: Bool+    -- ^ True if the backend works if @--only-scope-checking@ is used.+  }++data Recompile menv mod = Recompile menv | Skip mod++callBackend :: String -> IsMain -> Interface -> TCM ()+callBackend name iMain i = do+  backends <- use stBackends+  case [ b | b@(Backend b') <- backends, backendName b' == name ] of+    Backend b : _ -> compilerMain b iMain i+    []            -> genericError $ "No backend called '" ++ name ++ "' " +++                                    "(installed backends: " +++                                    List.intercalate ", " [ backendName b | Backend b <- backends ] ++ ")"++-- Internals --------------------------------------------------------------++data BackendWithOpts opts where+  BackendWithOpts :: Backend' opts env menv mod def -> BackendWithOpts opts++backendWithOpts :: Backend -> Some BackendWithOpts+backendWithOpts (Backend backend) = Some (BackendWithOpts backend)++forgetOpts :: BackendWithOpts opts -> Backend+forgetOpts (BackendWithOpts backend) = Backend backend++bOptions :: Lens' opts (BackendWithOpts opts)+bOptions f (BackendWithOpts b) = f (options b) <&> \ opts -> BackendWithOpts b{ options = opts }++embedFlag :: Lens' a b -> Flag a -> Flag b+embedFlag l flag = l flag++embedOpt :: Lens' a b -> OptDescr (Flag a) -> OptDescr (Flag b)+embedOpt l = fmap (embedFlag l)++parseBackendOptions :: [Backend] -> [String] -> OptM ([Backend], CommandLineOptions)+parseBackendOptions backends argv =+  case makeAll backendWithOpts backends of+    Some bs -> do+      let agdaFlags    = map (embedOpt lSnd) standardOptions+          backendFlags = do+            Some i            <- forgetAll Some $ allIndices bs+            BackendWithOpts b <- [lookupIndex bs i]+            opt               <- commandLineFlags b+            return $ embedOpt (lFst . lIndex i . bOptions) opt+      (backends, opts) <- getOptSimple argv (agdaFlags ++ backendFlags) (embedFlag lSnd . inputFlag)+                                            (bs, defaultOptions)+      opts <- checkOpts opts+      return (forgetAll forgetOpts backends, opts)++backendInteraction :: [Backend] -> (TCM (Maybe Interface) -> TCM ()) -> TCM (Maybe Interface) -> TCM ()+backendInteraction [] fallback check = fallback check+backendInteraction backends _ check = do+  opts   <- commandLineOptions+  let backendNames = [ backendName b | Backend b <- backends ]+      err flag = genericError $ "Cannot mix --" ++ flag ++ " and backends (" ++ List.intercalate ", " backendNames ++ ")"+  when (optInteractive     opts) $ err "interactive"+  when (optGHCiInteraction opts) $ err "interaction"+  mi     <- check++  -- reset warnings+  stTCWarnings .= []++  noMain <- optCompileNoMain <$> pragmaOptions+  let isMain | noMain    = NotMain+             | otherwise = IsMain+  case mi of+    Nothing -> genericError $ "You can only compile modules without unsolved metavariables."+    Just i  -> sequence_ [ compilerMain backend isMain i | Backend backend <- backends ]++  -- print warnings that might have accumulated during compilation+  ws <- filter (not . isUnsolvedWarning . tcWarning) <$> getAllWarnings' AllWarnings RespectFlags+  unless (null ws) $ reportSDoc "warning" 1 $ P.vcat $ P.prettyTCM <$> ws+++compilerMain :: Backend' opts env menv mod def -> IsMain -> Interface -> TCM ()+compilerMain backend isMain0 i =+  inCompilerEnv i $ do+    onlyScoping <- optOnlyScopeChecking <$> commandLineOptions+    when (not (scopeCheckingSuffices backend) && onlyScoping) $+      genericError $+        "The --only-scope-checking flag cannot be combined with " +++        backendName backend ++ "."++    -- Andreas, 2017-08-23, issue #2714+    -- If the backend is invoked from Emacs, we can only get the --no-main+    -- pragma option now, coming from the interface file.+    isMain <- ifM (optCompileNoMain <$> pragmaOptions)+      {-then-} (return NotMain)+      {-else-} (return isMain0)++    env  <- preCompile backend (options backend)+    mods <- doCompile isMain i $ \ isMain i -> Map.singleton (iModuleName i) <$> compileModule backend env isMain i+    setInterface i+    postCompile backend env isMain mods++compileModule :: Backend' opts env menv mod def -> env -> IsMain -> Interface -> TCM mod+compileModule backend env isMain i = do+  ifile <- maybe __IMPOSSIBLE__ filePath <$>+            (findInterfaceFile . toTopLevelModuleName =<< curMName)+  r <- preModule backend env (iModuleName i) ifile+  case r of+    Skip m         -> return m+    Recompile menv -> do+      defs <- map snd . sortDefs <$> curDefs+      res  <- mapM (compileDef' backend env menv <=< instantiateFull) defs+      postModule backend env menv isMain (iModuleName i) res++compileDef' :: Backend' opts env menv mod def -> env -> menv -> Definition -> TCM def+compileDef' backend env menv def = setCurrentRange (defName def) $ compileDef backend env menv def
+ src/full/Agda/Compiler/Backend.hs-boot view
@@ -0,0 +1,4 @@++module Agda.Compiler.Backend where++data Backend
src/full/Agda/Compiler/CallCompiler.hs view
@@ -8,7 +8,9 @@  import qualified Control.Exception as E import Control.Monad.Trans-import Data.List as L++import Data.List ( intercalate )+import qualified Data.List as List import System.Exit import System.IO import System.Process
src/full/Agda/Compiler/Common.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE ScopedTypeVariables #-}  module Agda.Compiler.Common where @@ -14,6 +15,8 @@ import qualified Data.Set as Set import Data.Char import Data.Function+import Data.Semigroup+import Data.Monoid hiding ((<>))  import Control.Monad import Control.Monad.State  hiding (mapM_, forM_, mapM, forM, sequence)@@ -28,7 +31,7 @@ import Agda.Interaction.Options  import Agda.TypeChecking.Monad-import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Pretty hiding ((<>)) import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope@@ -38,7 +41,7 @@ import Agda.Utils.Lens import Agda.Utils.Maybe import Agda.Utils.Monad-import Agda.Utils.Pretty+import Agda.Utils.Pretty hiding ((<>))  #include "undefined.h" import Agda.Utils.Impossible@@ -46,7 +49,16 @@ data IsMain = IsMain | NotMain   deriving (Eq, Show) -doCompile :: IsMain -> Interface -> (IsMain -> Interface -> TCM ()) -> TCM ()+instance Semigroup IsMain where+  NotMain <> _ = NotMain+  _       <> NotMain = NotMain+  IsMain  <> IsMain = IsMain++instance Monoid IsMain where+  mempty = IsMain+  mappend = (<>)++doCompile :: forall r. Monoid r => IsMain -> Interface -> (IsMain -> Interface -> TCM r) -> TCM r doCompile isMain i f = do   -- The Agda.Primitive module is implicitly assumed to be always imported,   -- even though it not necesseraly occurs in iImportedModules.@@ -54,26 +66,27 @@   [agdaPrimInter] <- filter (("Agda.Primitive"==) . prettyShow . iModuleName)     . map miInterface . Map.elems       <$> getVisitedModules-  flip evalStateT Set.empty $ comp NotMain agdaPrimInter >> comp isMain i+  flip evalStateT Set.empty $ mappend <$> comp NotMain agdaPrimInter <*> comp isMain i   where-    comp :: IsMain -> Interface -> StateT (Set ModuleName) TCM ()+    comp :: IsMain -> Interface -> StateT (Set ModuleName) TCM r     comp isMain i = do       alreadyDone <- Set.member (iModuleName i) <$> get-      when (not alreadyDone) $ do+      if alreadyDone then return mempty else do         imps <- lift $           map miInterface . catMaybes <$>             mapM (getVisitedModule . toTopLevelModuleName . fst) (iImportedModules i)-        mapM_ (comp NotMain) imps+        ri <- mconcat <$> mapM (comp NotMain) imps         lift $ setInterface i-        lift $ f isMain i+        r <- lift $ f isMain i         modify (Set.insert $ iModuleName i)+        return $ mappend ri r  setInterface :: Interface -> TCM () setInterface i = do   opts <- gets (stPersistentOptions . stPersistentState)   setCommandLineOptions opts   mapM_ setOptionsFromPragma (iPragmaOptions i)-  stImportedModules .= Set.empty+  stImportedModules .= Set.fromList (map fst $ iImportedModules i)   stCurrentModule   .= Just (iModuleName i)  curIF :: TCM Interface@@ -132,18 +145,19 @@ conArityAndPars :: QName -> TCM (Nat, Nat) conArityAndPars q = do   def <- getConstInfo q-  TelV tel _ <- telView $ defType def+  n   <- typeArity (defType def)   let Constructor{ conPars = np } = theDef def-      n = length (telToList tel)   return (n - np, np)  -- | Sets up the compilation environment. inCompilerEnv :: Interface -> TCM a -> TCM a-inCompilerEnv mainI cont =+inCompilerEnv mainI cont = do   -- Preserve the state (the compiler modifies the state).   -- Andreas, 2014-03-23 But we might want to collect Benchmark info,   -- so use localTCState.-  localTCState $ do+  -- FNF, 2017-02-22 we also want to keep the warnings we have encountered,+  -- so use localTCStateSaving and pick them out.+  (a , s) <- localTCStateSaving $ do      -- Compute the output directory. Note: using commandLineOptions would make     -- the current pragma options persistent when we setCommandLineOptions@@ -159,8 +173,20 @@     setCommandLineOptions $       opts { optCompileDir = Just compileDir } +    -- Andreas, 2017-08-23, issue #2714 recover pragma option --no-main+    -- Unfortunately, a pragma option is stored in the interface file as+    -- just a list of strings, thus, the solution is a bit of hack:+    -- We match on whether @["--no-main"]@ is one of the stored options.+    when (["--no-main"] `elem` iPragmaOptions mainI) $+      stPragmaOptions %= \ o -> o { optCompileNoMain = True }++    setScope (iInsideScope mainI) -- so that compiler errors don't use overly qualified names     ignoreAbstractMode $ do       cont+  -- keep generated warnings+  let newWarnings = stPostTCWarnings $  stPostScopeState $ s+  stTCWarnings .= newWarnings+  return a  topLevelModuleName :: ModuleName -> TCM ModuleName topLevelModuleName m = do
− src/full/Agda/Compiler/Epic/AuxAST.hs
@@ -1,168 +0,0 @@-{-# LANGUAGE CPP #-}---- | Intermediate abstract syntax tree used in the compiler. Pretty close to---   Epic syntax.-module Agda.Compiler.Epic.AuxAST where--import Data.Set (Set)-import qualified Data.Set as Set--import Agda.Syntax.Abstract.Name--import Agda.Compiler.Epic.Interface--#include "undefined.h"-import Agda.Utils.Impossible--type Comment  = String-type Inline   = Bool--data Fun-  = Fun-      { funInline  :: Inline-      , funName    :: Var-      , funQName   :: Maybe QName-      , funComment :: Comment-      , funArgs    :: [Var]-      , funExpr    :: Expr-      }-  | EpicFun-      { funName     :: Var-      , funQName    :: Maybe QName-      , funComment  :: Comment-      , funEpicCode :: String --EpicCode-      }-  deriving (Eq, Ord, Show)--data Lit-  = LInt    Integer-  | LChar   Char-  | LString String-  | LFloat  Double-  deriving (Show, Ord, Eq)---data Expr-  = Var Var-  | Lit Lit-  | Lam Var Expr-  | Con Tag QName [Expr]-  | App Var [Expr]-  | Case Expr [Branch]-  | If Expr Expr Expr-  | Let Var Expr Expr-  | Lazy Expr-  | UNIT-  | IMPOSSIBLE-  deriving (Show, Ord, Eq)--data Branch-  = Branch  {brTag  :: Tag, brName :: QName, brVars :: [Var], brExpr :: Expr}-  | BrInt   {brInt  :: Int, brExpr :: Expr}-  | Default {brExpr :: Expr}-  deriving (Show, Ord, Eq)--getBrVars :: Branch -> [Var]-getBrVars (Branch {brVars = vs}) = vs-getBrVars _                      = []------------------------------------------------------------------------------------- * Some smart constructors---- | Smart constructor for let expressions to avoid unneceessary lets-lett :: Var -> Expr -> Expr -> Expr-lett v (Var v') e' = subst v v' e'-lett v e        e' = if v `elem` fv e' then Let v e e' else e'---- | Some things are pointless to make lazy-lazy :: Expr -> Expr-lazy (Lazy e) = Lazy e-lazy (Lit l)  = Lit l-lazy UNIT     = UNIT-lazy x        = Lazy x---- | If casing on the same expression in a sub-expression, we know what branch to---   pick-casee :: Expr -> [Branch] -> Expr-casee x brs = Case x [br{brExpr = casingE br (brExpr br)} | br <- brs]-  where-    casingE br expr = let rec = casingE br in case expr of-      Var v -> Var v-      Lit l -> Lit l-      Lam v e -> Lam v (rec e)-      Con t n es -> Con t n (map rec es)-      App v es   -> App v (map rec es)-      Case e brs | expr == e -> case filter (sameCon br) brs of-        []  -> Case (rec e) [b {brExpr = rec (brExpr b)} | b <- brs]-        [b] -> substs (getBrVars br `zip` getBrVars b) (brExpr b)-        _   -> __IMPOSSIBLE__-                 | otherwise -> Case (rec e) [b {brExpr = rec (brExpr b)} | b <- brs]-      If e1 e2 e3 -> If (rec e1) (rec e2) (rec e3)-      Let v e1 e2 -> Let v (rec e1) (rec e2)-      Lazy e      -> Lazy (rec e)-      UNIT        -> UNIT-      IMPOSSIBLE  -> IMPOSSIBLE-    sameCon (Branch {brTag = t1}) (Branch {brTag = t2}) = t1 == t2-    sameCon (BrInt  {brInt = i1}) (BrInt  {brInt = i2}) = i1 == i2-    sameCon _                     _                     = False---- | Smart constructor for applications to avoid empty applications-apps :: Var -> [Expr] -> Expr-apps v [] = Var v-apps v as = App v as------------------------------------------------------------------------------------- * Substitution---- | Substitution-subst :: Var  -- ^ Substitute this ...-      -> Var  -- ^ with this ...-      -> Expr -- ^ in this.-      -> Expr-subst var var' expr = case expr of-    Var v      | var == v  -> Var var'-               | otherwise -> Var v-    Lit l -> Lit l-    Lam v e    | var == v  -> Lam v e-               | otherwise -> Lam v (subst var var' e)-    Con t q es -> Con t q (map (subst var var') es)-    App v es   | var == v  -> App var' (map (subst var var') es)-               | otherwise -> App v    (map (subst var var') es)-    Case e brs -> Case (subst var var' e) (map (substBranch var var') brs)-    If a b c -> let s = subst var var'-                 in If (s a) (s b) (s c)-    Let v e e' | var == v  -> Let v (subst var var' e) e'-               | otherwise -> Let v (subst var var' e) (subst var var' e')-    Lazy e     -> Lazy (subst var var' e)-    UNIT       -> UNIT-    IMPOSSIBLE -> IMPOSSIBLE--substs :: [(Var, Var)] -> Expr -> Expr-substs ss e = foldr (uncurry subst) e ss--substBranch :: Var -> Var -> Branch -> Branch-substBranch x e br = br { brExpr = subst x e (brExpr br) }---- | Get the free variables in an expression-fv :: Expr -> [Var]-fv = Set.toList . fv'-  where-    fv' :: Expr -> Set Var-    fv' expr = case expr of-      Var v      -> Set.singleton v-      Lit _      -> Set.empty-      Lam v e1   -> Set.delete v (fv' e1)-      Con _ _ es -> Set.unions (map fv' es)-      App v es   -> Set.insert v $ Set.unions (map fv' es)-      Case e brs -> fv' e `Set.union` Set.unions (map fvBr brs)-      If a b c   -> Set.unions (map fv' [a,b,c])-      Let v e e' -> fv' e `Set.union` (Set.delete v $ fv' e')-      Lazy e     -> fv' e-      UNIT       -> Set.empty-      IMPOSSIBLE -> Set.empty--    fvBr :: Branch -> Set Var-    fvBr b = case b of-      Branch _ _ vs e -> fv' e Set.\\ Set.fromList vs-      BrInt _ e       -> fv' e-      Default e       -> fv' e
− src/full/Agda/Compiler/Epic/CaseOpts.hs
@@ -1,40 +0,0 @@--- | Perform simple optimisations based on case-laws-module Agda.Compiler.Epic.CaseOpts where--import Control.Applicative--import Agda.TypeChecking.Monad--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState--caseOpts :: [Fun] -> Compile TCM [Fun]-caseOpts = mapM  $ \ def -> case def of-  Fun{} -> do-    e' <- caseOptsExpr (funExpr def)-    return def { funExpr = e' }-  _     -> return def---- | Run the case-opts on an expression-caseOptsExpr :: Expr -> Compile TCM Expr-caseOptsExpr expr = case expr of-  Var v       -> return $ Var v-  Lit l       -> return $ Lit l-  Lam v e     -> Lam v <$> caseOptsExpr e-  Con c n es  -> Con c n <$> mapM caseOptsExpr es-  App v es    -> apps v <$> mapM caseOptsExpr es-  -- If there is only one constructor branch, perform a projection to get the result-  Case e [Branch {brVars = vs, brExpr = eorg}] -> do-      e' <- caseOptsExpr eorg-      bindExpr e $ \var ->-        return $ foldr (\(v, n) -> lett v $ App "proj" [Lit (LInt n), Var var]) e'-               $ zip vs [0..]-  -- If there is only a default branch, the case is not necessary-  Case e [Default{brExpr = e'}] -> caseOptsExpr e'-  Case e brs  -> Case <$> caseOptsExpr e <*> (mapM (\br -> do e' <- caseOptsExpr (brExpr br)-                                                              return br {brExpr = e'}) brs)-  If a b c    -> If <$> caseOptsExpr a <*> caseOptsExpr b <*> caseOptsExpr c-  Let v e1 e2 -> Let v <$> caseOptsExpr e1 <*> caseOptsExpr e2-  Lazy e      -> Lazy <$> caseOptsExpr e-  UNIT        -> return UNIT-  IMPOSSIBLE  -> return IMPOSSIBLE
− src/full/Agda/Compiler/Epic/CompileState.hs
@@ -1,215 +0,0 @@-{-# LANGUAGE CPP #-}---- | Contains the state monad that the compiler works in and some functions---   for tampering with the state.-module Agda.Compiler.Epic.CompileState where--import Control.Applicative-import Control.Monad.State-import Data.List-import Data.Map (Map)-import qualified Data.Map as Map-import Data.Maybe-import Data.Monoid-import Data.Set (Set)-import qualified Data.Set as Set--import Agda.Compiler.Epic.AuxAST as AuxAST-import Agda.Compiler.Epic.Interface-import Agda.Interaction.Options-import Agda.Syntax.Internal-import Agda.Syntax.Concrete(TopLevelModuleName)-import Agda.Syntax.Common-import Agda.TypeChecking.Monad (TCM, internalError, defType, theDef, getConstInfo, sigDefinitions, stImports, stPersistentOptions, stPersistentState)-import qualified Agda.TypeChecking.Monad as TM-import Agda.TypeChecking.Reduce--import qualified Agda.Utils.HashMap as HM-import Agda.Utils.Lens--#include "undefined.h"-import Agda.Utils.Impossible---- | Stuff we need in our compiler-data CompileState = CompileState-    { nameSupply      :: [Var]-    , compiledModules :: Map TopLevelModuleName (EInterface, Set FilePath)-    , curModule       :: EInterface-    , importedModules :: EInterface-    , curFun          :: String-    } deriving Show---- | The initial (empty) state-initCompileState :: CompileState-initCompileState = CompileState-    { nameSupply        = map (('h':) . show) [0 :: Integer ..]-    , compiledModules   = Map.empty-    , curModule         = mempty-    , importedModules   = mempty-    , curFun            = undefined-    }---- | Compiler monad-type Compile = StateT CompileState---- | When normal errors are not enough-epicError :: String -> Compile TCM a-epicError = lift . internalError---- | Modify the state of the current module's Epic Interface-modifyEI :: (EInterface -> EInterface) -> Compile TCM ()-modifyEI f = modify $ \s -> s {curModule = f (curModule s)}---- | Get the state of the current module's Epic Interface-getsEI :: (EInterface -> a) -> Compile TCM a-getsEI f = gets (f . curModule)---- | Returns the type of a definition given its name-getType :: QName -> Compile TCM Type-getType q = do-    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.-unqname :: QName -> Var-unqname qn = case nameId $ qnameName qn of-    NameId name modul -> 'd' : show modul-                     ++ "_" ++ show name---- * State modifiers--resetNameSupply :: Compile TCM ()-resetNameSupply = modify $ \s -> s {nameSupply = nameSupply initCompileState}--getDelayed :: QName -> Compile TCM Bool-getDelayed q = lookInterface (Map.lookup q . defDelayed) (return False)--putDelayed :: QName -> Bool -> Compile TCM ()-putDelayed q d = modifyEI $ \s -> s {defDelayed = Map.insert q d (defDelayed s)}--newName :: Compile TCM Var-newName = do-    n:ns <- gets nameSupply-    modify $ \s -> s { nameSupply = ns}-    return n--putConstrTag :: QName -> Tag -> Compile TCM ()-putConstrTag q t = modifyEI $ \s -> s { constrTags = Map.insert q t $ constrTags s }--assignConstrTag :: QName -> Compile TCM Tag-assignConstrTag constr = assignConstrTag' constr []--assignConstrTag' :: QName -> [QName] -> Compile TCM Tag-assignConstrTag' constr constrs = do-    constrs <- concat <$> mapM ((getDataCon =<<) . getConData) (constr : constrs)-    tags    <- catMaybes <$> mapM getConstrTag' constrs-    let tag =  head $ map Tag [0..] \\ tags-    putConstrTag constr tag-    return tag--getConData :: QName -> Compile TCM QName-getConData con = do-    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-            _                 -> __IMPOSSIBLE__-        Nothing -> __IMPOSSIBLE__--getDataCon :: QName -> Compile TCM [QName]-getDataCon con = do-    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-            r@(TM.Record{})   -> return [ TM.recCon r]-            _                 -> __IMPOSSIBLE__-        Nothing -> __IMPOSSIBLE__--getConstrTag :: QName -> Compile TCM Tag-getConstrTag con = lookInterface (Map.lookup con . constrTags)-                                 (assignConstrTag con)--getConstrTag' :: QName -> Compile TCM (Maybe Tag)-getConstrTag' con = do-    cur <- gets curModule-    case Map.lookup con (constrTags cur) of-        Just x -> return (Just x)-        Nothing -> do-            imps <- gets importedModules-            return $ Map.lookup con (constrTags imps)--addDefName :: QName -> Compile TCM ()-addDefName q = do-    modifyEI $ \s -> s {definitions = Set.insert (unqname q) $ definitions s }--topBindings :: Compile TCM (Set Var)-topBindings = Set.union <$> gets (definitions . importedModules) <*> gets (definitions . curModule)--getConArity :: QName -> Compile TCM Int-getConArity n = lookInterface (Map.lookup n . conArity) __IMPOSSIBLE__--putConArity :: QName -> Int -> Compile TCM ()-putConArity n p = modifyEI $ \s -> s { conArity = Map.insert n p (conArity s) }--putMain :: QName -> Compile TCM ()-putMain m = modifyEI $ \s -> s { mainName = Just m }--getMain :: Compile TCM Var-getMain = maybe (epicError "Where is main? :(") (return . unqname) =<< getsEI mainName--lookInterface :: (EInterface -> Maybe a) -> Compile TCM a -> Compile TCM a-lookInterface f def = do-    cur <- gets curModule-    case f cur of-        Just x -> return x-        Nothing -> do-            imps <- gets importedModules-            case f imps of-                Nothing -> def-                Just x  -> return x--constrInScope :: QName -> Compile TCM Bool-constrInScope name = do-    cur <- gets curModule-    case Map.lookup name (constrTags cur) of-        Just x -> return True-        Nothing -> do-            imps <- gets importedModules-            case Map.lookup name (constrTags imps) of-                Nothing -> return False-                Just x  -> return True--getForcedArgs :: QName -> Compile TCM ForcedArgs-getForcedArgs q = lookInterface (Map.lookup q . forcedArgs) __IMPOSSIBLE__--putForcedArgs :: QName -> ForcedArgs -> Compile TCM ()-putForcedArgs n f = do-  b <- lift $ gets (optForcing . stPersistentOptions . stPersistentState)-  let f' | b = f-         | otherwise = replicate (length f) NotForced-  modifyEI $ \s -> s {forcedArgs = Map.insert n f' $ forcedArgs s}--replaceAt :: Int -- ^ replace at-          -> [a] -- ^ to replace-          -> [a] -- ^ replace with-          -> [a] -- ^ result?-replaceAt n xs inserts = let (as, _:bs) = splitAt n xs in as ++ inserts ++ bs---- | Copy pasted from MAlonzo, HAHA!!!---   Move somewhere else!-constructorArity :: Num a => QName -> TCM a-constructorArity q = do-  def <- getConstInfo q-  a <- normalise $ defType def-  case theDef def of-    TM.Constructor{ TM.conPars = np } -> return . fromIntegral $ arity a - np-    _ -> internalError $ "constructorArity: non constructor: " ++ show q---- | Bind an expression to a fresh variable name-bindExpr :: Expr -> (Var -> Compile TCM Expr) -> Compile TCM Expr-bindExpr expr f = case expr of-  AuxAST.Var v -> f v-  _     -> do-      v <- newName-      lett v expr <$> f v
− src/full/Agda/Compiler/Epic/Compiler.hs
@@ -1,278 +0,0 @@-{-# LANGUAGE CPP #-}---- | Epic compiler backend.-module Agda.Compiler.Epic.Compiler(compilerMain) where--import Control.Applicative-import Control.Monad-import Control.Monad.Reader-import Control.Monad.State--import qualified Data.ByteString.Lazy as BS-import qualified Data.Map as Map-import Data.Maybe-import Data.Monoid-import Data.Set (Set)-import qualified Data.Set as Set--import System.Directory ( canonicalizePath, createDirectoryIfMissing-                        , getCurrentDirectory, setCurrentDirectory-                        )-import System.Exit-import System.FilePath hiding (normalise)-import System.Process hiding (env)--import Paths_Agda--import Agda.Interaction.FindFile-import Agda.Interaction.Options-import Agda.Interaction.Imports--import Agda.Syntax.Common (Delayed(..))-import qualified Agda.Syntax.Concrete.Name as CN-import Agda.Syntax.Internal hiding (Term(..))--import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Serialise--import Agda.Compiler.CallCompiler--import Agda.Compiler.Epic.CompileState-import qualified Agda.Compiler.Epic.CaseOpts     as COpts-import qualified Agda.Compiler.Epic.ForceConstrs as ForceC-import Agda.Compiler.Epic.Epic-import Agda.Compiler.Epic.Interface-import qualified Agda.Compiler.Epic.Erasure      as Eras-import qualified Agda.Compiler.Epic.FromAgda     as FAgda-import qualified Agda.Compiler.Epic.Forcing      as Forcing-import qualified Agda.Compiler.Epic.Injection    as ID-import qualified Agda.Compiler.Epic.NatDetection as ND-import qualified Agda.Compiler.Epic.Primitive    as Prim-import qualified Agda.Compiler.Epic.Smashing     as Smash--import Agda.Utils.FileName-import qualified Agda.Utils.HashMap as HMap-import Agda.Utils.Lens-import Agda.Utils.List-import Agda.Utils.Pretty ( prettyShow )--#include "undefined.h"-import Agda.Utils.Impossible--compilePrelude :: Compile TCM ()-compilePrelude = do-    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir-    pwd <- liftIO $ getCurrentDirectory-    liftIO $ setCurrentDirectory dataDir-    let prelude = "AgdaPrelude"-    uptodate <- liftIO $ (prelude <.> "ei") `isNewerThan` (prelude <.> "e")-    when (not uptodate) $ callEpic False [ "-c" , prelude <.> "e" ]-    liftIO $ setCurrentDirectory pwd---- | Compile an interface into an executable using Epic-compilerMain :: Interface -> TCM ()-compilerMain inter = do-    (epic_exist, _, _) <--       liftIO $ readProcessWithExitCode-                  "ghc-pkg"-                  ["-v0", "field", "epic", "id"]-                  ""-    case epic_exist of-        ExitSuccess -> flip evalStateT initCompileState $ do-            compilePrelude-            setEpicDir inter-            (_, imports) <- compileModule inter-            main <- getMain-            runEpicMain main (Set.toList imports) (iModuleName inter)--        ExitFailure _ -> internalError $ unlines-           [ "Agda cannot find the Epic compiler."-           , "This can perhaps be fixed by running `cabal install epic'."-           , "See the README for more information."-           ]--outFile :: CN.TopLevelModuleName -> Compile TCM FilePath-outFile mod = do-  let (dir, fn) = splitFileName . foldl1 (</>) $ CN.moduleNameParts mod-      fp  | dir == "./"  = "src" </> fn-          | otherwise = "src" </> dir </> fn-  liftIO $ createDirectoryIfMissing True ("src" </> dir)-  return $ fp-  where-  repldot c = map (\c' -> if c' == '.' then c else c')--readEInterface :: FilePath -> Compile TCM EInterface-readEInterface file = fromMaybe __IMPOSSIBLE__-                   <$> lift (decode =<< liftTCM (liftIO (BS.readFile file)))--compileModule :: Interface -> Compile TCM (EInterface, Set FilePath)-compileModule i = do-    cm <- gets compiledModules-    let moduleName = toTopLevelModuleName $ iModuleName i-    file  <- outFile moduleName-    case Map.lookup moduleName cm of-        Just eifs -> return eifs-        Nothing  -> do-            imports <- map miInterface . catMaybes-                                      <$> mapM (lift . getVisitedModule . toTopLevelModuleName . fst)-                                               (iImportedModules i)-            (ifaces, limps) <- mapAndUnzipM compileModule imports-            let imps = Set.unions limps-            modify $ \s -> s { importedModules = importedModules s `mappend` mconcat ifaces }-            ifile <- maybe __IMPOSSIBLE__ filePath <$> lift (findInterfaceFile moduleName)-            let eifFile = file <.> "aei"-            uptodate <- liftIO $ isNewerThan eifFile ifile-            (eif, imps') <- case uptodate of-                True  -> do-                    lift $ reportSLn "compile.epic" 2 $-                      (prettyShow . iModuleName) i ++ " : no compilation is needed."-                    eif <- readEInterface eifFile-                    modify $ \s -> s { curModule = eif }-                    return (eif, Set.insert file imps)-                False -> do-                    lift $ reportSLn "compile.epic" 1 $-                        "Compiling: " ++ (prettyShow . iModuleName) i-                    resetNameSupply-                    initialAnalysis i-                    let defns = HMap.toList $ iSignature i ^. sigDefinitions-                    -- Epic cannot parse files with no definitions-                    if (not $ null defns) then do-                        code <- compileDefns defns-                        runEpic file (Set.toList imps) code-                        eif <- gets curModule-                        lift $ do-                            bif <- encode eif-                            liftIO $ BS.writeFile eifFile bif-                        return (eif, Set.insert file imps)-                     else-                        flip (,) imps <$> gets curModule-            modify $ \s -> s { compiledModules = (Map.insert moduleName (eif, imps') (compiledModules s))}-            return (eif, imps')---- | Before running the compiler, we need to store some things in the state,---   namely constructor tags, constructor irrelevancies and the delayed field---   in functions (for coinduction).-initialAnalysis :: Interface -> Compile TCM ()-initialAnalysis inter = do-  Prim.initialPrims-  modify $ \s -> s {curModule = mempty}-  let defs = HMap.toList $ iSignature inter ^. sigDefinitions-  forM_ defs $ \(q, def) -> do-    addDefName q-    case theDef def of-      d@(Datatype {}) -> do-        saker <- ND.isNatish q d-        case saker of-            Just (_, [zer, suc]) -> do-                putConstrTag zer (PrimTag "primZero")-                putConstrTag suc (PrimTag "primSuc")-            _ -> return ()-      Constructor {conPars = np} -> do-        putForcedArgs q . drop np . ForceC.makeForcedArgs $ defType def-        putConArity q =<< lift (constructorArity q)-      f@(Function{}) -> do-        when ("main" == (prettyShow . qnameName) q) $ do-            -- lift $ liftTCM $ checkTypeOfMain q (defType def)-            putMain q-        putDelayed q $ case funDelayed f of-          Delayed -> True-          NotDelayed -> False-      a@(Axiom {}) -> do-        case defEpicDef def of-          Nothing -> putDelayed q True-          _       -> return ()-      AbstractDefn -> __IMPOSSIBLE__-      _ -> return ()--idPrint :: String -> (a -> Compile TCM b) -> a -> Compile TCM b-idPrint s m x = do-  lift $ reportSLn "epic.phases" 10 s-  m x---- | Perform the chain of compilation stages, from definitions to epic code-compileDefns :: [(QName, Definition)] -> Compile TCM EpicCode-compileDefns defs = do-    -- We need to handle sharp (coinduction) differently, so we get it here.-    msharp <- lift $ getBuiltin' builtinSharp-    emits   <- return defs-               >>= idPrint "findInjection" ID.findInjection-               >>= idPrint "fromAgda"   (FAgda.fromAgda msharp)-               >>= idPrint "forcing"     Forcing.remForced-               >>= idPrint "irr"         ForceC.forceConstrs-               >>= idPrint "primitivise" Prim.primitivise-               >>= idPrint "smash"       Smash.smash'em-               >>= idPrint "erasure"     Eras.erasure-               >>= idPrint "caseOpts"    COpts.caseOpts-               >>= idPrint "done" return-    unlines <$> mapM prettyEpicFun emits---- | Change the current directory to Epic folder, create it if it doesn't already---   exist.-setEpicDir :: Interface -> Compile (TCMT IO) ()-setEpicDir mainI = do-    let tm = toTopLevelModuleName $ iModuleName mainI-    f <- lift $ findFile tm-    compileDir' <- lift $ gets (fromMaybe (filePath $ CN.projectRoot f tm) .-                                  optCompileDir . stPersistentOptions . stPersistentState)-    compileDir <- liftIO $ canonicalizePath compileDir'-    liftIO $ setCurrentDirectory compileDir-    liftIO $ createDirectoryIfMissing False "Epic"-    liftIO $ setCurrentDirectory $ compileDir </> "Epic"---- | Make a program from the given Epic code.------ The program is written to the file @../m@, where m is the last--- component of the given module name.-runEpic :: FilePath -> [FilePath] -> EpicCode -> Compile TCM ()-runEpic fp imports code = do-    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir-    let imports' = unlines ["include \"" ++ imp ++ "\""-                           | imp <- (dataDir </> "AgdaPrelude.ei")-                                    : map (<.> "ei") imports]-        code'    = imports' ++ code-    liftIO $ writeFile (fp <.> "e") code'-    callEpic True $-        [ "-c", fp <.> "e" ]---- | Create the Epic main file, which calls the Agda main function-runEpicMain :: Var -> [FilePath] -> ModuleName -> Compile TCM ()-runEpicMain mainName imports m = do-    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir-    let imports' = (dataDir </> "AgdaPrelude") : imports-    let code = unlines ["include \"" ++ imp <.> "ei" ++ "\""-                       | imp <- imports'-                       ] ++ "main() -> Unit = init() ; " ++ mainName ++ "(unit)"-    liftIO $ writeFile ("main" <.> "e") code--    let outputName :: CN.Name-        outputName = maybe __IMPOSSIBLE__ nameConcrete $ lastMaybe $ mnameToList m--    callEpic'  $ \epic ->-        [ "main" <.> "e"-        , "-o", ".." </> prettyShow outputName-        ]-        ++ epic ++ map (<.> "o") imports'---- | Call epic, with a given set of flags, if the |Bool| is True then include--- the command line flags at the end-callEpic :: Bool -> [String] -> Compile TCM ()-callEpic incEFlags flags = callEpic' $ \epicFlags ->-  flags ++ if incEFlags then epicFlags else []---- | Call epic with a given set of flags, the argument function receives the flags given--- at the command line-callEpic' :: ([String] -> [String]) -> Compile TCM ()-callEpic' flags = do-    epicFlags <- optEpicFlags <$> lift commandLineOptions-    dataDir   <- (</> "EpicInclude") <$> liftIO getDataDir-    let epic        = "epic"-        epicCommand =-          [ "-keepc"-          -- , "-g"-          -- , "-checking", "0"-          -- , "-trace"-          , "-i", dataDir </> "stdagda" <.> "c"-          ] ++ flags epicFlags--    lift $ callCompiler True epic epicCommand
− src/full/Agda/Compiler/Epic/Epic.hs
@@ -1,102 +0,0 @@-{-# LANGUAGE CPP #-}---- | Pretty-print the AuxAST to valid Epic code.-module Agda.Compiler.Epic.Epic-  ( prettyEpicFun-  , prettyEpic-  ) where--import Data.Char-import Data.List--import Agda.TypeChecking.Monad--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface--#include "undefined.h"-import Agda.Utils.Impossible---- * Some auxilliary pretty-printer functions-(<+>) :: String -> String -> String-x <+> y = x ++ " " ++ y-infixr 6 <+>--($$) :: String -> String -> String-x $$ y  = x ++ "\n" ++ y-infixr 5 $$--many :: [String] -> String-many vs = paren $ intercalate ", " vs--many' :: [String] -> String-many' [] = ""-many' vs = paren $ intercalate ", " vs--paren :: String -> String-paren s = "(" <+> s <+> ")"--curly :: String -> String-curly s = "{-" <+> s <+> "-}"---- * Pretty-printer--- | Print a function to an Epic string-prettyEpicFun :: MonadTCM m => Fun -> Compile m String-prettyEpicFun (Fun inline name mqname comment vars e) = do-    {--    defs <- lift (gets (sigDefinitions . stImports))-    typ <- case mqname >>= flip M.lookup defs of-      Nothing -> return "-"-      Just def -> do-        doc <- lift $ prettyTCM =<< normalise (defType def)-        return $ show doc-    -}-    return $-      "--" <+> comment $$-      -- unlines (map ("-- " <+>) (lines typ)) $$-      (if inline then "%inline " else "") ++ name-        <+> many (map typVar vars) <+> "-> Any" <+> "=" <+> prettyEpic e--prettyEpicFun (EpicFun name _mqname comment def) = return $-    "--" <+> comment $$-    {-"%inline" <+> -} name <+> def---- | Print expression to Epic expression-prettyEpic :: Expr -> String-prettyEpic expr = case expr of-    Var v -> v-    Lit l -> prettyEpicLit l-    Lam x e -> paren $ "\\" <+> typVar x <+> "." <+> paren (prettyEpic e)-- __IMPOSSIBLE__ -- We have lambda lifted away all λs-    Con (Tag t) q args -> curly (show q) <+> paren ("Con" <+> show t <+> many (map prettyEpic args))-    If a b c -> "if" <+> prettyEpic a <+> "then" <+> prettyEpic b <+> "else" <+> prettyEpic c-    Let v e e' -> "let" <+> typVar v <+> "=" <+> prettyEpic (id e) <+> "in" <+> prettyEpic e'-    App "proj" (Lit (LInt n) : e : es) -> paren (prettyEpic e <+> "!" <+> show n) <+> many' (map prettyEpic es)-    App v es -> v <+> many' (map (prettyEpic . id) es)-    Case e brs -> "case" <+> prettyEpic e <+> "of {"-               <+> intercalate "\n | " (map prettyEpicBr brs) <+> "}"-    Lazy e -> "lazy" <+> paren (prettyEpic e)-    UNIT -> "unit"-    IMPOSSIBLE -> "impossible"-    _ -> __IMPOSSIBLE__--prettyEpicBr :: Branch -> String-prettyEpicBr br = case br of-    Branch (Tag c) q vs e ->-       curly (show q)  <+>-       "Con" <+> show c-       <+> many (map typVar vs)-       <+> "->" <+> prettyEpic e-    BrInt n e       ->  show n <+> "->" <+> prettyEpic e-    Default e       -> "Default ->" <+> prettyEpic e-    _ -> __IMPOSSIBLE__--prettyEpicLit :: Lit -> String-prettyEpicLit l = case l of-    LInt n    -> show n ++ "L"-    LChar c   -> show (ord c)-    LString s -> show s-    LFloat f  -> show f--typVar :: Var -> String-typVar v = v <+> ":" <+> "Any"
− src/full/Agda/Compiler/Epic/Erasure.hs
@@ -1,227 +0,0 @@-{-# LANGUAGE CPP #-}---- | Some arguments to functions (types in particular) will not be used in the---   body. Wouldn't it be useful if these wasn't passed around at all?---   Fear not, we here perform some analysis and try to remove as many of these---   occurences as possible.------   We employ the worker/wrapper transform, so if f x1 .. xn = e---   and we notice that some is not needed we create: f' xj .. xk = e [xi := unit]---   and f x1 .. xn = f' xj .. xk.---   i.e we erase them in f' and replace by unit, and the original f function---   calls the new f'. The idea is that f should be inlined and then peace on earth.-module Agda.Compiler.Epic.Erasure where--import Control.Applicative-import Control.Monad.State-import Data.Map (Map)-import qualified Data.Map as Map-import Data.Maybe--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface--import Agda.TypeChecking.Monad.Base (TCM)-import qualified Agda.Syntax.Internal as SI-import qualified Agda.Syntax.Common   as Common-import Agda.TypeChecking.Monad (reportSDoc)-import Agda.TypeChecking.Pretty as P--#include "undefined.h"-import Agda.Utils.Impossible--isIrr :: Relevance -> Bool-isIrr Irr      = True-isIrr Rel      = False--isRel :: Relevance -> Bool-isRel = not . isIrr---- | Relevance "or"-(||-) :: Relevance -> Relevance -> Relevance-Irr      ||- b      = b-_        ||- _      = Rel-infixr 2 ||----- | Relevance "and"-(&&-) :: Relevance -> Relevance -> Relevance-Rel      &&- b      = b-_        &&- _      = Irr-infixr 3 &&---data ErasureState = ErasureState-  { relevancies :: Map Var [Relevance]-  , funs        :: Map Var Fun-  }--type Erasure = StateT ErasureState---- | Try to find as many unused variables as possible-erasure :: [Fun] -> Compile TCM [Fun]-erasure fs = do-    orgRel <- gets (relevantArgs . importedModules)-    (rels, erasureState) <- flip runStateT (ErasureState orgRel Map.empty) $ do-        mapM_ initiate fs-        fu <- gets funs-        Map.mapKeys (fromMaybe __IMPOSSIBLE__ . flip Map.lookup fu) <$> step 1-    modifyEI $ \s -> s { relevantArgs = Map.mapKeys funName rels }-    concat <$> mapM (\f -> map (rem (relevancies erasureState)) <$> check f (Map.lookup f rels)) fs-  where--    rem rels f@Fun{} = f { funExpr = removeUnused rels (funExpr f) }-    rem _    f       = f-    -- | Perform the worker//wrapper transform-    check :: Fun -> Maybe [Relevance] -> Compile TCM [Fun]-    -- If the function is already marked as to inline we don't need to create a-    -- new function. Also If all arguments are relevant there is nothing to do.-    check f@Fun{} (Just rs) | any isIrr rs && not (funInline f) = do-        f' <- (funName f ++) <$> newName-        let args' = pairwiseFilter (map isRel rs) (funArgs f)-            subs  = pairwiseFilter (map isIrr rs) (funArgs f)-            e'    = foldr (\v e -> subst v "primUnit" e) (funExpr f) subs-        return [ Fun { funInline  = True-                     , funName    = funName f-                     , funQName   = funQName f-                     , funComment = funComment f-                     , funArgs    = funArgs f-                     , funExpr    = App f' $ map Var args'-                     }-               , Fun { funInline  = False-                     , funName    = f'-                     , funQName   = Nothing-                     , funComment = funComment f ++ " [ERASED]"-                     , funArgs    = args'-                     , funExpr    = e'-                     }-               ]-    check f _ = return [f]--removeUnused :: Map Var [Relevance] -> Expr -> Expr-removeUnused rels t = let rem = removeUnused rels-                       in case t of-    Var _         -> t-    Lit _         -> t-    Lam v e       -> Lam v (rem e)-    Con tag qn es -> Con tag qn (map rem es)-    App v es      -> case Map.lookup v rels of-       Just re -> App v $ zipWith (\r x -> if isIrr r then UNIT else rem x)-                                  (re ++ repeat Rel) es-       Nothing    -> App v $ map rem es-    Case e brs    -> Case (rem e) (map (\br -> br {brExpr = rem $ brExpr br}) brs)-    If a b c      -> If (rem a) (rem b) (rem c)-    Let v e1 e2   -> lett v (rem e1) (rem e2)-    Lazy e        -> lazy (rem e)-    UNIT          -> t-    IMPOSSIBLE    -> t---- | Initiate a function's relevancies-initiate :: Fun -> Erasure (Compile TCM) ()-initiate f@(Fun _ name mqname _ args _) = do-    let rels = replicate (length args) Irr-    modify $ \s -> s { relevancies = Map.insert name rels (relevancies s)-                     , funs        = Map.insert name f (funs s)-                     }-initiate f@(EpicFun {funName = name, funQName = mqname}) = case mqname of-    Just qn -> do-        ty <- lift $ getType qn-        let rels = initialRels ty Rel-        return ()-        modify $ \s -> s { relevancies = Map.insert name rels (relevancies s)-                         , funs        = Map.insert name f (funs s)-                         }-    Nothing -> return ()--initialRels :: SI.Type -> Relevance -> [Relevance]-initialRels ty rel = case SI.ignoreSharing $ SI.unEl ty of-  SI.Pi  a b -> mkRel a : initialRels (SI.unAbs b) rel-  _          -> []-  where-    mkRel :: Common.Dom SI.Type -> Relevance-    mkRel a | ignoreForced (Common.getRelevance a) = Irr-    mkRel a = case SI.ignoreSharing $ SI.unEl (Common.unDom a) of-       SI.Sort _ -> Irr-       _         -> rel--ignoreForced :: Common.Relevance -> Bool-ignoreForced Common.Relevant = False-ignoreForced _           = True---- | Calculate if a variable is relevant in an expression-relevant-#if __GLASGOW_HASKELL__ <= 708-  :: (Functor m, Monad m)-#else-  :: Monad m-#endif-  => Var -> Expr -> Erasure m Relevance-relevant var expr = case expr of-    Var v  | v == var  -> return Rel-           | otherwise -> return Irr-    Lit _l      -> return Irr-    Lam _ e     -> relevant var e-    Con _ _ es  -> relevants var es-    App v es | v == var  -> return Rel-             | otherwise -> do-                -- The variable is relevant if it is used in a relevant position-                mvrs <- gets (Map.lookup v . relevancies)-                case mvrs of-                  Nothing  -> relevants var es-                  Just vrs ->-                      relevants var-                        $ map snd-                        $ filter ((==) Rel . fst)-                        $ zip (vrs ++ repeat Rel) es-                      -- foldr (||-) Irr <$> zipWith (&&-) (vrs ++ repeat Rel) <$> mapM (relevant var) es-    -- {--    Case e [br@Branch{}] -> do-        cvars <- foldr (||-) Irr <$> mapM (flip relevant $ brExpr br) (brVars br)-        vare  <- relevant var e-        varbr <- relevant var (brExpr br)-        return ((vare &&- cvars) ||- varbr)-    -- -}-    Case e brs  -> (||-) <$> relevant var e  <*> relevants var (map brExpr brs)-    If a b c    -> relevants var [a,b,c]-    Let x e1 e2 -> (||-) <$> ((&&-) <$> relevant var e1 <*> relevant x e2) <*> relevant var e2-    Lazy e      -> relevant var e-    UNIT        -> return Irr-    IMPOSSIBLE  -> return Irr-  where-    relevants-#if __GLASGOW_HASKELL__ <= 708-      :: (Functor m, Monad m)-#else-      :: Monad m-#endif-      => Var -> [Expr] -> Erasure m Relevance-    relevants v [] = return Irr-    relevants v (e : es) = do-      r <- relevant v e-      case r of-        Rel -> return r-        _   -> relevants v es-    -- relevants v es = return . foldr (\x y -> x ||- y) Irr =<< mapM (relevant v) es---- | Try to find a fixpoint for all the functions relevance.-step :: Integer -> Erasure (Compile TCM) (Map Var [Relevance])-step nrOfLoops = do-    s  <- get-    newRels <- (Map.fromList <$>) $ forM (Map.toList (funs s)) $ \(v, f) -> ((,) v <$>) $ do-               let funRels = fromMaybe __IMPOSSIBLE__ $ Map.lookup v (relevancies s)-               case f of-                  EpicFun{} -> return funRels-                  Fun{} -> do-                     forM (zip (funArgs f) (funRels ++ repeat Rel)) $ \ (x, rel) -> case rel of-                        Rel -> return Rel-                        Irr -> do-                          lift $ lift $ reportSDoc "epic.erasure" 10 $ P.text "running erasure:" P.<+> (P.text . show) (funQName f)-                          relevant x (funExpr f)-    let relsm = newRels `Map.union` relevancies s-    if relevancies s == relsm-       then return newRels-       else do-         put s {relevancies = relsm}-         step (nrOfLoops + 1)--diff :: Eq a => Map k a -> Map k a -> [(k,(a,a))]-diff m1 m2 = catMaybes $ zipWith (\(k, x) (_, y) -> if x == y then Nothing else Just (k, (x, y))) (Map.toList m1) (Map.toList m2)
− src/full/Agda/Compiler/Epic/ForceConstrs.hs
@@ -1,75 +0,0 @@-{-# LANGUAGE CPP #-}---- | Remove forced arguments from constructors.-module Agda.Compiler.Epic.ForceConstrs where--import Control.Applicative--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface--import qualified Agda.Syntax.Common   as Common-import qualified Agda.Syntax.Internal as T-import Agda.TypeChecking.Monad (TCM)--#include "undefined.h"-import Agda.Utils.Impossible---- | Check which arguments are forced-makeForcedArgs :: T.Type -> ForcedArgs-makeForcedArgs (T.El _ term) = case T.ignoreSharing term of-    T.Pi  arg ab  -> isRel arg : makeForcedArgs (T.unAbs ab)-    _             -> []-  where-    isRel :: Common.Dom T.Type -> Forced-    isRel arg = case Common.getRelevance arg of-      Common.Relevant   -> NotForced-      Common.Irrelevant -> Forced-      Common.UnusedArg  -> Forced-      Common.NonStrict  -> Forced  -- can never be executed-      Common.Forced{}   -> Forced  -- It can be inferred---- | Remove forced arguments from constructors and branches-forceConstrs :: [Fun] -> Compile TCM [Fun]-forceConstrs fs = mapM forceFun fs--forceFun :: Fun -> Compile TCM Fun-forceFun e@(EpicFun{}) = return e-forceFun (Fun inline name qname comment args expr) =-    Fun inline name qname comment args <$> forceExpr expr-  where-    -- | Remove all arguments to constructors that we don't need to store in an-    --   expression.-    forceExpr :: Expr -> Compile TCM Expr-    forceExpr expr = case expr of-        Var v        -> return $ Var v-        Lit l        -> return $ Lit l-        Lam v e      -> Lam v <$> forceExpr e-        Con tag q es -> do-            -- We only need to apply the non-forced arguments-            forcArgs <- getForcedArgs q-            return $ Con tag q $ notForced forcArgs es-        App v es     -> App v <$> mapM forceExpr es-        Case e bs    -> Case <$> forceExpr e <*> mapM forceBranch bs-        Let v e e'   -> lett v <$> forceExpr e <*> forceExpr e'-        If a b c     -> If <$> forceExpr a <*> forceExpr b <*> forceExpr c-        Lazy e       -> Lazy <$> forceExpr e-        UNIT         -> return expr-        IMPOSSIBLE   -> return expr--    -- | Remove all the arguments that don't need to be stored in the constructor-    --   For the branch-    forceBranch :: Branch -> Compile TCM Branch-    forceBranch br = case br of-        Branch  tag name vars e -> do-            ir <- getForcedArgs name-            let vs = notForced ir vars-                subs = forced ir vars--            e'' <- if all (`notElem` fv e) subs-                  then return e-                  else __IMPOSSIBLE__ -- If so, the removal of forced args has gone wrong-            Branch tag name vs <$> forceExpr e''-        BrInt i e -> BrInt i <$> forceExpr e-        Default e -> Default <$> forceExpr e
− src/full/Agda/Compiler/Epic/Forcing.hs
@@ -1,313 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ScopedTypeVariables #-}--module Agda.Compiler.Epic.Forcing where--import Control.Applicative-import Control.Monad-import Control.Monad.State--import Data.Char-import Data.List hiding (sort)-import Data.Maybe--import Agda.Syntax.Common-import qualified Agda.Syntax.Internal as I-import Agda.Syntax.Literal-import Agda.Syntax.Position(noRange)-import Agda.Syntax.Internal(Tele(..), Telescope, Term, Abs(..), unAbs, absName, Type, Args, QName, unEl)-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Rules.LHS.Problem (FlexibleVars, defaultFlexibleVar)-import Agda.TypeChecking.Rules.LHS.Unify-import Agda.TypeChecking.Substitute-  (applySubst, apply, piApply, wkS, raiseS, dropS, (++#), TelV(..))-import qualified Agda.TypeChecking.Substitute as S-import Agda.TypeChecking.Pretty as P-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Telescope-import Agda.Utils.List-import Agda.Utils.Monad-import Agda.Utils.Size-import qualified Agda.Utils.HashMap as HM--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Epic-import Agda.Compiler.Epic.Interface-import qualified Agda.Compiler.Epic.FromAgda as FA--#include "undefined.h"-import Agda.Utils.Impossible-import Agda.Utils.Lens---- | Returns how many parameters a datatype has-dataParameters :: QName -> Compile TCM Nat-dataParameters = lift . dataParametersTCM---- | Returns how many parameters a datatype has-dataParametersTCM :: QName -> TCM Nat-dataParametersTCM name = do-    m <- use $ stImports . sigDefinitions-    return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (HM.lookup name m)-  where-    defnPars :: Defn -> Nat-    defnPars (Datatype {dataPars = p}) = p-    defnPars (Record   {recPars  = p}) = p-    defnPars d                         = 0 -- error (show d) -- __IMPOSSIBLE__ -- Not so sure about this.--report :: Int -> TCM P.Doc -> Compile TCM ()-report n s = lift $ reportSDoc "epic.forcing" n s--piApplyM' :: Type -> Args -> TCM Type-piApplyM' t as = do- {- reportSDoc "" 10 $ vcat-    [ text "piApplyM'"-    , text "type: " <+> prettyTCM t-    , text "args: " <+> prettyTCM as-    ]-}-  piApplyM t as--{- |-insertTele i xs t tele-                  tpos-  tele := Gamma ; (i : T as) ; Delta-  n    := parameters T-  xs'  := xs `apply` (take n as)-becomes-                  tpos-  ( Gamma ; xs' ; Delta[i := t] --note that Delta still reference Gamma correctly-  , T as ^ (size xs')-  )--we raise the type since we have added xs' new bindings before Gamma, and as can-only bind to Gamma.--}-insertTele ::(QName, Args) -> Int        -- ^ ABS `pos` in tele-            -> Maybe Type -- ^ If Just, it is the type to insert patterns from-                          --   is nothing if we only want to delete a binding.-            -> Term       -- ^ Term to replace at pos-            -> Telescope  -- ^ The telescope `tele` where everything is at-            -> Compile TCM ( Telescope -- Resulting telescope-                           , ( Telescope-                             , Type -- The type at pos in tele-                             , Type -- The return Type of the inserted type-                             )-                           )-insertTele x 0 ins term (ExtendTel t to) = do-    t' <- lift $ normalise t-    report 12 $ vcat-      [ text "t' :" <+> prettyTCM t'-      , text "term:" <+> prettyTCM term-      , text "to:"   <+> prettyTCM (unAbs to)-      ]-    (st, arg) <- case I.ignoreSharing . I.unEl . unDom $ t' of-            I.Def st es -> return (st, fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es)-            s          -> do-              report 10 $ vcat-                [ text "ERROR!!!"-                , text "found: " <+> (text . show) s-                , text "ins"     <+> (prettyTCM . fromMaybe __IMPOSSIBLE__) ins-                ]-              return x-    -- Apply the parameters of the type of t-    -- Because: parameters occurs in the type of constructors but are not bound by it.-    pars <- dataParameters st-    report 10 $ text "apply in insertTele"-    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unDom t')-                            (`piApplyM'` genericTake pars arg) ins---                            (`piApplyM'` take (fromIntegral pars) arg) ins-{- OLD CODE:-    () <- if length (take (fromIntegral pars) arg) == fromIntegral pars-        then return ()-        else __IMPOSSIBLE__--}-    when (genericLength arg < pars) __IMPOSSIBLE__-    -- we deal with absBody to directly since we remove t-    return ( ctele +:+  (S.subst 0 term $ S.raiseFrom 1 (size ctele) (unAbs to))-           , (ctele, S.raise (size ctele) $ unDom t , ctyp)-           )-  where-    -- Append the telescope, we raise since we add a new binding and all the previous-    -- bindings need to be preserved-    (+:+) :: Telescope -> Telescope -> Telescope-    EmptyTel       +:+ t2 = t2-    ExtendTel t t1 +:+ t2 = ExtendTel t (Abs (absName t1) $ unAbs t1 +:+ {-raise 1-} t2 )--- This case is impossible since we are trying to split a variable outside the tele-insertTele x n ins term EmptyTel = __IMPOSSIBLE__-insertTele er n ins term (ExtendTel x xs) = do-    (xs', typ) <- insertTele er (n - 1) ins term (unAbs xs)-    return (ExtendTel x $ Abs (absName xs) xs' , typ)---- TODO: restore fields in ConHead-mkCon :: QName -> Int -> Term-mkCon c n = I.Con (I.ConHead c Inductive []) ConOSystem $ map (defaultArg . I.var) $ downFrom n--unifyI :: Telescope -> FlexibleVars -> Type -> Args -> Args -> Compile TCM [Maybe Term]-unifyI tele flex typ a1 a2 = lift $ typeError $ NotImplemented "using the new unification algorithm for forcing"--takeTele :: Int -> Telescope -> Telescope-takeTele 0 _ = EmptyTel-takeTele n (ExtendTel t ts) = ExtendTel t $ Abs (absName ts) $ takeTele (n-1) (unAbs ts)-takeTele _ _ = __IMPOSSIBLE__---- | Main function for removing pattern matching on forced variables-remForced :: [Fun] -> Compile TCM [Fun]-remForced fs = do-    defs <- lift $ use $ stImports . sigDefinitions-    forM fs $ \f -> case f of-        Fun{} -> case funQName f >>= flip HM.lookup defs of-            Nothing -> __IMPOSSIBLE__-            Just def -> do-                TelV tele _ <- lift $ telView (defType def)-                report 10 $ vcat-                  [ text "compiling fun" <+> (text . show) (funQName f)-                  ]-                e <- forcedExpr (funArgs f) tele (funExpr f)-                report 10 $ vcat-                  [ text "compilied fun" <+> (text . show) (funQName f)-                  , text "before:" <+> (text . prettyEpic) (funExpr f)-                  , text "after:" <+> (text . prettyEpic) e-                  ]-                return $ f { funExpr = e}-        EpicFun{} -> return f---- | For a given expression, in a certain telescope (the list of Var) is a mapping--- of variable name to the telescope.-forcedExpr :: [Var] -> Telescope -> Expr -> Compile TCM Expr-forcedExpr vars tele expr = case expr of-    Var _ -> return expr-    Lit _ -> return expr-    Lam x e -> Lam x <$> rec e -- necessary?-    Con t q es -> Con t q <$> mapM rec es-    App v es -> App v <$> mapM rec es-    If a b c -> If <$> rec a <*> rec b <*> rec c-    Let v e1 e2 -> Let v <$> rec e1 <*> rec e2-    Lazy e -> Lazy <$> rec e-    UNIT   -> return expr-    IMPOSSIBLE -> return expr-    Case v@(Var x) brs -> do-        let n = fromMaybe __IMPOSSIBLE__ $ elemIndex x vars-        (Case v <$>) . forM brs $ \ br -> case br of-            BrInt i e -> do-              (tele'', _) <-  insertTele __IMPOSSIBLE__ n Nothing (I.Lit (LitChar noRange (chr i))) tele-              BrInt i <$> forcedExpr (replaceAt n vars []) tele'' e--            Default e -> Default <$> rec e-            Branch t constr as e -> do-                typ <- getType constr-                forc <- getForcedArgs constr-                (tele'', (_, ntyp, ctyp)) <- insertTele __IMPOSSIBLE__ n (Just typ)-                                                        (mkCon constr (length as)) tele-                ntyp <- lift $ reduce ntyp-                ctyp <- lift $ reduce ctyp--                if null (forced forc as)-                  then Branch t constr as <$> forcedExpr (replaceAt n vars as) tele'' e-                  else do-                    -- unify the telescope type with the return type of the constructor-                    unif <- case (I.ignoreSharing $ unEl ntyp, I.ignoreSharing $ unEl ctyp) of-                        (I.Def st es1, I.Def st' es2) | st == st' -> do-                            let a1 = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es1-                            let a2 = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es2-                            typPars <- dataParameters st-                            setType <- getType st-                            report 10 $ vcat-                              [ text "ntyp:" <+> prettyTCM ntyp-                              , text "ctyp:" <+> prettyTCM ctyp-                              ]-                            unifyI (takeTele (n + length as) tele'')-                                   (map defaultFlexibleVar [0 .. n + length as])-                                   (setType `piApply` take typPars a1)-                                   (drop typPars a1)-                                   (drop typPars a2)-                        _ -> __IMPOSSIBLE__-                    let-                        lower = wkS (-1) . dropS 1-                        subT 0 tel = let ss = [fromMaybe (I.Var n []) t-                                                | (n , t) <- zip [0..] unif] ++#-                                              raiseS (length unif)-                                      in (applySubst ss tel, lower ss)-                        subT n (ExtendTel a t) = let-                               (tb' , ss) = subT (n - 1) (unAbs t)-                            in (ExtendTel a $ Abs (absName t) tb', lower ss)-                        subT _ _ = __IMPOSSIBLE__-                        (tele'''', _) = subT (n + length as) tele''-                    report 10 $ nest 2 $ vcat-                      [ text "remforced"-                      , text "tele=" <+> prettyTCM tele''-                      , text "tele'=" <+> prettyTCM tele''''-                      , text "unif=" <+> (text . show) unif-                      , text "forced=" <+> (text . show) (forced forc as)-                      , text "constr" <+> prettyTCM constr-                      ]-                    -- replace all forced variables found using the unification-                    Branch t constr as <$>-                        replaceForced (replaceAt n vars as, reverse $ take n vars ++ as)-                                      (tele'''') (forced forc as) unif e-    _ -> __IMPOSSIBLE__-  where-    rec = forcedExpr vars tele---- | replace the forcedVar with pattern matching from the outside.-replaceForced :: ([Var],[Var]) -> Telescope -> [Var] -> [Maybe I.Term] -> Expr -> Compile TCM Expr-replaceForced (vars,_) tele [] _ e = forcedExpr vars tele e-replaceForced (vars,uvars) tele (fvar : fvars) unif e = do-    let n = fromMaybe __IMPOSSIBLE__ $ elemIndex fvar uvars-    mpos <- findPosition n unif-    case mpos of-        Nothing -> case fromMaybe __IMPOSSIBLE__ $ unif !!! n of-            Nothing | fvar `notElem` fv e ->-              replaceForced (vars, uvars) tele fvars unif e-            Nothing -> do-              report 10 $ vcat-                [ text "failure comming!"-                , text "unif" <+> (text . show) unif-                , text "n" <+> (text . show) n-                , text "fvar" <+> (text fvar)-                , text "fv" <+> (text . show) (fv e)-                ]-              __IMPOSSIBLE__-            Just t  -> do-                v <- newName-                te <- FA.substTerm uvars t-                subst fvar v <$> replaceForced (vars, uvars)-                                               tele fvars unif (Let v te e)-        Just (pos , term) -> do-            (build, v) <- buildTerm (fromMaybe __IMPOSSIBLE__ $ uvars !!! pos) n term-            build . subst fvar v <$> replaceForced (vars, uvars) tele fvars unif-                                     e-  where-    sub fvar v = map $ \x -> if x == fvar then v else x---- | Given a term containg the forced var, dig out the variable by inserting--- the proper case-expressions.-buildTerm :: Var -> Nat -> Term -> Compile TCM (Expr -> Expr, Var)-buildTerm var idx (I.Shared p) = buildTerm var idx $ I.derefPtr p-buildTerm var idx (I.Var i _) | idx == i = return (id, var)-buildTerm var idx (I.Con con _ args) = do-    let c = I.conName con-    vs <- replicateM (length args) newName-    (pos , arg) <- fromMaybe __IMPOSSIBLE__ <$> findPosition idx (map (Just . unArg) args)-    (fun2 , v) <- buildTerm (fromMaybe __IMPOSSIBLE__ $ vs !!! pos) idx arg-    tag <- getConstrTag c-    let fun1 e = casee (Var var) [Branch tag c vs e]-    return (fun1 . fun2 , v)-buildTerm _ _ _ = __IMPOSSIBLE__----- | Find the location where a certain Variable index is by searching the constructors---   aswell. i.e find a term that can be transformed into a pattern that contains the---   same value the index. This fails if no such term is present.-findPosition :: Nat -> [Maybe I.Term] -> Compile TCM (Maybe (Nat, I.Term))-findPosition var ts = (listToMaybe . catMaybes <$>) . forM (zip [0..] ts) $ \ (n, mt) -> do-    ifM (maybe (return False) pred mt)-        (return (Just (n, fromMaybe __IMPOSSIBLE__ mt)))-        (return Nothing)-  where-    pred :: Term -> Compile TCM Bool-    pred t = case I.ignoreSharing t of-      I.Var i _ | var == i -> return True-      I.Con c _ args -> do-          forc <- getForcedArgs $ I.conName c-          or <$> mapM (pred . unArg) (notForced forc args)-      _ -> return False
− src/full/Agda/Compiler/Epic/FromAgda.hs
@@ -1,265 +0,0 @@-{-# LANGUAGE CPP #-}---- | Convert from Agda's internal representation to our auxiliary AST.-module Agda.Compiler.Epic.FromAgda where--import Control.Applicative-import Control.Monad-import Control.Monad.State-import Data.Char-import qualified Data.Map as Map-import Data.Maybe--import Agda.Syntax.Common-import Agda.Syntax.Internal hiding (Term(..))-import qualified Agda.Syntax.Internal as T-import qualified Agda.Syntax.Literal  as TL-import qualified Agda.TypeChecking.CompiledClause as CC-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Level (reallyUnLevelView)-import qualified Agda.TypeChecking.Substitute as S-import Agda.TypeChecking.Pretty-import Agda.Utils.List--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface-import Agda.Compiler.Epic.Static--import Agda.Compiler.Epic.Epic--#include "undefined.h"-import Agda.Utils.Impossible---- | Convert from Agda's internal representation to our auxiliary AST.-fromAgda :: Maybe T.Term -> [(QName, Definition)] -> Compile TCM [Fun]-fromAgda msharp defs = catMaybes <$> mapM (translateDefn msharp) defs---- | Translate an Agda definition to an Epic function where applicable-translateDefn :: Maybe T.Term -> (QName, Definition) -> Compile TCM (Maybe Fun)-translateDefn msharp (n, defini) =-  let n' = unqname n-      epDef = compiledEpic $ defCompiledRep defini-  in case theDef defini of-    d@(Datatype {}) -> do -- become functions returning unit-        vars <- replicateM (dataPars d + dataIxs d) newName-        return . return $ Fun True n' (Just n) ("datatype: " ++ show n) vars UNIT-    f@(Function{}) -> do-        let projArgs = projectionArgs f-            cc       = fromMaybe __IMPOSSIBLE__ $ funCompiled f-        ccs  <- reverseCCBody projArgs <$> normaliseStatic cc-        let len   = (+ projArgs) . length . namedClausePats . head .  funClauses $ f-            toEta = arity (defType defini) - len-        -- forcing <- lift $ gets (optForcing . stPersistentOptions)-        lift $ reportSDoc "epic.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n-        lift $ reportSDoc "epic.fromagda" 5 $ text "len:" <+> (text . show) len-        lift $ reportSDoc "epic.fromagda" 5 $ text "pats:" <+> (text . show) (clausePats-                    $ head $ funClauses f)-        modify $ \s -> s {curFun = show n}-        lift $ reportSDoc "epic.fromagda" 5 $ text "ccs: " <+> (text . show) ccs-        res <- return <$> (etaExpand toEta =<< compileClauses n len ccs)-        pres <- case res of-          Nothing -> return Nothing-          Just  c -> return <$> prettyEpicFun c-        lift $ reportSDoc "" 5 $ text $ show pres -- (fmap prettyEpicFun res)-        return res-    Constructor{} -> do -- become functions returning a constructor with their tag-        arit <- lift $ constructorArity n-        tag   <- getConstrTag n-        -- Sharp has to use the primSharp function from AgdaPrelude.e-        case msharp of-          Just (T.Def sharp []) | sharp == n -> return <$> mkFun n n' "primSharp" 3-          _    -> return <$> mkCon n tag arit-    r@(Record{}) -> do-        vars <- replicateM (recPars r) newName-        return . return $ Fun True n' (Just n) ("record: " ++ show n) vars UNIT-    a@(Axiom{}) -> do -- Axioms get their code from COMPILED_EPIC pragmas-        case epDef of-            Nothing -> return . return $ EpicFun n' (Just n) ("AXIOM_UNDEFINED: " ++ show n)-                $ "() -> Any = lazy(error \"Axiom " ++ show n ++ " used but has no computation\")"-            Just x  -> return . return $ EpicFun n' (Just n) ("COMPILED_EPIC: " ++ show n) x-    p@(Primitive{}) -> do -- Primitives use primitive functions from AgdaPrelude.e of the same name.-                          -- Hopefully they are defined!-      let ar = arity $ defType defini-      return <$> mkFun n n' (primName p) ar-    AbstractDefn -> __IMPOSSIBLE__-  where-    mkFun q = mkFunGen q apps ("primitive: " ++)-    mkCon q tag ari = do-        let name = unqname q-        mkFunGen q (flip Con q) (const $ "constructor: " ++ show q) name tag ari-    mkFunGen :: QName                    -- ^ Original name-            -> (name -> [Expr] -> Expr) -- ^ combinator-            -> (name -> String)         -- ^ make comment-            -> Var                      -- ^ Name of the function-            -> name                     -- ^ Primitive function name-            -> Int                      -- ^ Arity ofthe function-            -> Compile TCM Fun            -- ^ Result?-    mkFunGen qn comb sh name primname arit = do-        vars <- replicateM arit newName-        return $ Fun True name (Just qn) (sh primname) vars (comb primname (map Var vars))--    etaExpand :: Int -> Fun -> Compile TCM Fun-    etaExpand num fun = return fun -- do-{-        names <- replicateM num newName-        return $ fun-            { funExpr = funExpr fun @@ names-            , funArgs = funArgs fun ++ names-            }--}-    (@@) :: Expr -> [Var] -> Expr-    e @@ [] = e-    e @@ vs = let ts = map Var vs in case e of-      Var var -> apps var ts-      Lam var expr -> case vs of-          v:vs' -> subst var v expr @@ vs'-          []    -> __IMPOSSIBLE__-      Con tag qName es -> Con tag qName (es ++ ts)-      App var es       -> App var (es ++ ts)-      Case expr bs     -> Case expr (map (flip appBranch vs) bs)-      If ea eb ec      -> If ea (eb @@ vs) (ec @@ vs)-      Let var el e'    -> lett var el (e' @@ vs)-      Lazy e'          -> Lazy (e' @@ vs)-      Lit _lit         -> IMPOSSIBLE -- Right?-      UNIT             -> IMPOSSIBLE-      IMPOSSIBLE       -> IMPOSSIBLE--    appBranch :: Branch -> [Var] -> Branch-    appBranch b vs = b {brExpr = brExpr b @@ vs}--reverseCCBody :: Int -> CC.CompiledClauses -> CC.CompiledClauses-reverseCCBody c cc = case cc of-    CC.Case n (CC.Branches cop cbr lbr cabr) -> CC.Case (fmap (c+) n)-        $ CC.Branches cop (Map.map (fmap $ reverseCCBody c) cbr)-          (Map.map (reverseCCBody c) lbr)-          (fmap  (reverseCCBody c) cabr)-    CC.Done i t -> CC.Done i (S.applySubst-                                (S.parallelS $ map (flip T.Var []) $-                                   reverse $ take (length i) [c..])-                                t)-    CC.Fail     -> CC.Fail---- | Translate from Agda's desugared pattern matching (CompiledClauses) to our AuxAST.---   This is all done by magic. It uses 'substTerm' to translate the actual---   terms when the cases have been gone through.---   The case expressions that we get use de Bruijn indices that change after---   each case in the following way.---   Say we have this pattern:------ > f (X x y) (Y z) = term------   Initially, the variables have these indexes:------ > f 0@(X x y) 1@(Y z) = term------   The first case will be on @0@, and the variables bound inside the @X@---   pattern will replace the outer index, so we get something like this:------ > f 0 2@(Y z) = case 0 of X 0 1 -> term------   Notice how @(Y z)@ now has index @2@.---   Then the second pattern is desugared in the same way:------ > f 0 2 = case 0 of X 0 1 -> case 2 of Y 2 -> term------   This replacement is what is done using the replaceAt function.------   CompiledClauses also have default branches for when all branches fail (even---   inner branches), the catchAllBranch. Epic does not support this, so---   we have to add the catchAllBranch to each inner case (here we are calling---   it omniDefault). To avoid code duplication it is first bound by a let---   expression.-compileClauses :: QName-               -> Int -- ^ Number of arguments in the definition-               -> CC.CompiledClauses -> Compile TCM Fun-compileClauses name nargs c = do-    let n' = unqname name-    vars <- replicateM nargs newName-    e    <- compileClauses' vars Nothing c-    return $ Fun False n' (Just name) ("function: " ++ show name) vars e-  where-    compileClauses' :: [Var] -> Maybe Var -> CC.CompiledClauses -> Compile TCM Expr-    compileClauses' env omniDefault cc = case cc of-        CC.Case (Arg _ n) nc -> case length env <= n of-           True -> __IMPOSSIBLE__-           False -> case CC.catchAllBranch nc of-            Nothing -> Case (Var (fromMaybe __IMPOSSIBLE__ $ env !!! n)) <$>-                         compileCase env omniDefault n nc-            Just de -> do-                def <- compileClauses' env omniDefault de-                bindExpr (lazy def) $ \ var ->-                  Case (Var (fromMaybe __IMPOSSIBLE__ $ env !!! n)) <$>-                    compileCase env (Just var) n nc-        CC.Done _ t -> substTerm ({- reverse -} env) t-        CC.Fail     -> return IMPOSSIBLE--    compileCase :: [Var] -> Maybe Var -> Int -> CC.Case CC.CompiledClauses-                -> Compile TCM [Branch]-    compileCase env omniDefault casedvar nc = do-        cb <- if Map.null (CC.conBranches nc)-           -- Lit branch-           then forM (Map.toList (CC.litBranches nc)) $ \(l, cc) -> do-               cc' <- compileClauses' (replaceAt casedvar env []) omniDefault cc-               case l of-                   TL.LitChar _ cha -> return $ BrInt (ord cha) cc'-                   -- TODO: Handle other literals-                   _ -> epicError $ "case on literal not supported: " ++ show l-           -- Con branch-           else forM (Map.toList (CC.conBranches nc)) $ \(b, CC.WithArity ar cc) -> do-               arit  <- getConArity b -- Andreas, 2012-10-12: is the constructor arity @ar@ from Agda the same as the one from the Epic backen?-               tag  <- getConstrTag b-               vars <- replicateM arit newName-               cc'  <- compileClauses' (replaceAt casedvar env vars) omniDefault cc-               return $ Branch tag b vars cc'--        case omniDefault of-            Nothing -> return cb-            Just cc -> do-              return $ cb ++ [Default (Var cc)]---- | Translate the actual Agda terms, with an environment of all the bound variables---   from patternmatching. Agda terms are in de Bruijn so we just check the new---   names in the position.-substTerm :: [Var] -> T.Term -> Compile TCM Expr-substTerm env term = case T.ignoreSharing $ T.unSpine term of-    T.Var ind es -> do-      let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-      case length env <= ind of-        True  -> __IMPOSSIBLE__-        False -> apps (fromMaybe __IMPOSSIBLE__ $ env !!! ind) <$>-                   mapM (substTerm env . unArg) args-    T.Lam _ (Abs _ te) -> do-       name <- newName-       Lam name <$> substTerm (name : env) te-    T.Lam _ (NoAbs _ te) -> do-       name <- newName-       Lam name <$> substTerm env te-    T.Lit l -> Lit <$> substLit l-    T.Level l -> substTerm env =<< lift (reallyUnLevelView l)-    T.Def q es -> do-      let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-      let name = unqname q-      del <- getDelayed q-      def <- theDef <$> lift (getConstInfo q)-      let nr = projectionArgs def-      f <- apps name . (replicate nr UNIT ++) <$> mapM (substTerm env . unArg) args-      return $ case del of-        True  -> Lazy f-        False -> f-    T.Con c ci args -> do-        let con = unqname $ conName c-        apps con <$> mapM (substTerm env . unArg) args-    T.Shared p -> substTerm env $ derefPtr p-    T.Pi _ _ -> return UNIT-    T.Sort _  -> return UNIT-    T.MetaV _ _ -> return UNIT-    T.DontCare _ -> return UNIT---- | Translate Agda literals to our AUX definition-substLit :: TL.Literal -> Compile TCM Lit-substLit lit = case lit of-  TL.LitNat    _ i -> return $ LInt i-  TL.LitString _ s -> return $ LString s-  TL.LitChar   _ c -> return $ LChar c-  TL.LitFloat  _ f -> return $ LFloat f-  _ -> epicError $ "literal not supported: " ++ show lit
− src/full/Agda/Compiler/Epic/Injection.hs
@@ -1,383 +0,0 @@-{-# LANGUAGE CPP               #-}--module Agda.Compiler.Epic.Injection where--import Control.Monad.State-import Control.Monad.Reader--import Data.IntMap (IntMap)-import qualified Data.IntMap as IntMap-import Data.List-import Data.Map (Map)-import qualified Data.Map as Map-import Data.Maybe-import Data.Set (Set)-import qualified Data.Set as Set--import Agda.Syntax.Common-import Agda.Syntax.Internal as I-import Agda.Syntax.Internal.Pattern (FunArity(..), unnumberPatVars)-import Agda.Syntax.Literal-import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute-import Agda.Utils.List-import Agda.Utils.Monad-import Agda.Utils.Null--import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface as Interface--#include "undefined.h"-import Agda.Utils.Impossible-import Agda.Utils.Lens---- | Find potentially injective functions, solve constraints to fix some constructor---   tags and make functions whose constraints are fulfilled injections-findInjection :: [(QName, Definition)] -> Compile TCM [(QName, Definition)]-findInjection defs = do-    funs <- forM defs $ \(name, def) -> case theDef def of-        f@(Function{}) -> isInjective name (funClauses f)-        _              -> return Nothing-    newNames <- Map.keys <$> gets (Interface.conArity . curModule)-    injFuns <- solve newNames (catMaybes funs)-    defs' <- forM defs $ \(q, def) -> case q `isIn` injFuns of-        Nothing -> return (q, def)-        Just inj@(InjectiveFun nvar arity) -> case theDef def of-            f@(Function{})   -> do-                modifyEI $ \s -> s { injectiveFuns = Map.insert q inj (injectiveFuns s) }-                let ns = replicate arity (defaultArg empty)-                return $ (,) q $ def { theDef = f { funCompiled = Just $ Done ns $-                                                      var $ arity - nvar - 1 } }-            _                -> __IMPOSSIBLE__--    lift $ reportSLn "epic.injection" 10 $ "injfuns: " ++ show injFuns-    return defs'-  where-    q `isIn` funs = case filter (\(nam, _) -> q == nam) funs of-        []   -> Nothing-        (_,x):_  -> Just x--replaceFunCC :: QName -> CompiledClauses -> Compile TCM ()-replaceFunCC name cc = lift $ do-    stSignature %= updateDefinition name replaceDef-    stImports   %= updateDefinition name replaceDef-  where-    replaceDef :: Definition -> Definition-    replaceDef def = case theDef def of-        f@(Function{}) -> def {theDef = f { funCompiled = Just $ cc } }-        x                -> __IMPOSSIBLE__---- | If the pairs of constructor names have the same tags, the function is---   injective. If Nothing, the function is not injective.-type InjConstraints = Maybe [(QName,QName)]---isInjective :: QName    -- ^ Name of the function being tested-            -> [Clause] -- ^ The function's clauses-            -> Compile TCM (Maybe ((QName, InjectiveFun)-                                  , [(QName, QName)] -- These construtors should have the same name-                                  ))-isInjective nam []  = return Nothing-isInjective nam cls@(cl : _) = do-    lift $ reportSLn "epic.injection" 20 $ "checking isInjective " ++ show nam-    let total = funArity cls-    (listToMaybe . catMaybes <$>) . forM [0 .. total - 1] $ \i -> do-        cli <- forM cls $ \ cl -> isInjectiveHere nam i  cl-        let cli' = catMaybes cli-        return $ if length cli == length cli'-             then Just ((nam, InjectiveFun i total), concat cli')-             else Nothing--patternToTerm :: Nat -> Pattern -> Term-patternToTerm n p = case p of-    VarP v          -> var n-    DotP t          -> t-    ConP c typ args -> Con c ci $ zipWith (\ arg t -> arg {unArg = t}) args-                             $ snd-                             $ foldr (\ arg (n, ts) -> (n + nrBinds arg, patternToTerm n arg : ts))-                                     (n , [])-                             $ map namedArg args-      where ci = fromConPatternInfo typ-    LitP l          -> Lit l-    ProjP _ d       -> Def d [] -- Andreas, 2012-10-31 that might not be enought to get a term from list of patterns (TODO)--nrBinds :: Num i => Pattern -> i-nrBinds p = case p of-    VarP v          -> 1-    DotP t          -> 0-    ConP c typ args -> sum $ map (nrBinds . namedArg) args-    LitP l          -> 0-    ProjP{}         -> 0--substForDot :: [NamedArg (Pattern' a)] -> Substitution-substForDot = makeSubst 0 0 . reverse . calcDots-  where-    makeSubst i accum [] = raiseS (i + accum)-    makeSubst i accum (True  : ps) = makeSubst i (accum +1) ps-    makeSubst i accum (False : ps) = consS (var $ i + accum) $ makeSubst (i+1) accum ps--    calcDots = concatMap calcDots' . map namedArg-    calcDots' p = case p of-        VarP v          -> [False]-        DotP t          -> [True]-        ConP c typ args -> calcDots args-        LitP l          -> [False]-        ProjP{}         -> [False]--isInjectiveHere :: QName  -- ^ Name of the function being tested-                -> Int    -- ^ The current argument-                -> Clause-                -> Compile TCM InjConstraints-isInjectiveHere nam idx clause = do- lift $ reportSDoc "epic.injection" 40 $ sep-   [ text "isInjectiveHere"-   , prettyTCM nam-   , text ("argumentNo=" ++ show idx)-   -- , prettyTCM (clausePats clause)-   ]- case compiledClauseBody clause of-  Nothing -> return emptyC-  Just body -> do-    let vars = unnumberPatVars $ namedClausePats clause-    let t    = patternToTerm idxR $ namedArg $ fromMaybe __IMPOSSIBLE__ $-                 vars !!! idx-        t'   = applySubst (substForDot $ namedClausePats clause) t-        idxR = sum . map (nrBinds . namedArg) . drop (idx + 1) $ vars-    body' <- lift $ reduce body-    lift $ reportSLn "epic.injection" 40 "reduced body"-    injFs <- gets (injectiveFuns . importedModules)-    lift $ reportSLn "epic.injection" 40 "calculated injFs"-    res <- (t' <: body') `runReaderT` (Map.insert nam (InjectiveFun idx-                                                      (length (namedClausePats clause))) injFs)-    lift $ reportSDoc "epic.injection" 20 $ vcat-      [ text "isInjective:" <+> text (show nam)-      , text "at Index   :" <+> text (show idx)-      , nest 2 $ vcat-          [ text "clause     :" <+> text (show clause)-          , text "t          :" <+> prettyTCM t-          , text "idxR       :" <+> (text . show) idxR-          , text "body'      :" <+> (text . show) body'-          ]-      , text "res      :" <+> text (show res)-      ]-    return res---- | Turn NATURAL literal n into suc^n zero.-litToCon :: Literal -> TCM Term-litToCon l = case l of-    LitNat   r n | n > 0     -> apply1 <$> primSuc <*> litToCon (LitNat r (n - 1))-                 | otherwise -> primZero---    LitLevel _ n -> -- Does not really matter-    lit          -> return $ Lit lit--litInt :: Literal -> Bool-litInt LitNat{} = True-litInt _        = False--insertAt :: (Nat,Term) -> Term -> Term-insertAt (index, ins) = applySubst $-  [var i | i <- [0 .. index - 1]] ++# consS ins (raiseS $ index + 1)--solve :: [QName] -> [((QName, InjectiveFun), [(QName,QName)])] -> Compile TCM [(QName, InjectiveFun)]-solve newNames xs = do-    lift $ reportSDoc "epic.injection" 30 $-      sep $ text "Epic.Injection.solve" : map prettyTCM newNames-    -- Only primitive lists should be in the current module at this point,-    -- but we still want them-    conGraph <- Map.union <$> gets (constrTags . curModule) <*> gets (constrTags . importedModules)-    (funs, mconstr) <- ($ xs) $ flip foldM ([] , Just $ initialTags conGraph newNames) $ \ (xs , prev) (fun , con) -> do-         m <- foldM solvable prev con-         return $ case m of-            Nothing -> (xs, prev)-            Just next -> (fun : xs, m)-    case mconstr of-        Nothing -> __IMPOSSIBLE__-        Just constr -> updateTags constr-    return funs-  where-    solvable :: Maybe Tags -> (QName, QName)-             -> Compile TCM (Maybe Tags)-    solvable Nothing _          = return Nothing-    solvable (Just st) (c1, c2) = unify c1 c2 st--    updateTags :: Tags -> Compile TCM ()-    updateTags tags = do-        let (hasTags, eqs) = Map.partition isTag (constrGroup tags)-            isTag (IsTag _) = True-            isTag _         = False-        forM_ (Map.toList hasTags) $ \ (c, tagged) -> case tagged of-            IsTag tag -> putCon c tag-            _         -> __IMPOSSIBLE__-        case Map.toList eqs of-            (c, Same n) : _ -> do-                let grp = fromMaybe __IMPOSSIBLE__ $ IntMap.lookup n $ eqGroups tags-                tag <- assignConstrTag' c (Set.toList grp)-                updateTags . fromMaybe __IMPOSSIBLE__ =<< setTag n tag tags { constrGroup = eqs }-            _              -> return ()-    putCon :: QName -> Tag -> Compile TCM ()-    putCon con tag = do-        m <- gets (constrTags . importedModules)-        case Map.lookup con m of-            Nothing -> putConstrTag con tag-            Just _  -> return () -- old--emptyC :: InjConstraints-emptyC = Just []--addConstraint :: QName -> QName -> InjConstraints -> InjConstraints-addConstraint q1 q2 Nothing   = Nothing-addConstraint q1 q2 (Just xs) = Just (if q1 == q2 then xs else (q1,q2) : xs)--unionConstraints :: [InjConstraints] -> InjConstraints-unionConstraints [] = Just []-unionConstraints (Nothing : _) = Nothing-unionConstraints (Just c : cs) = do-    cs' <- unionConstraints cs-    return (c ++ cs')---- | Are two terms injectible?---   Tries to find a mapping between constructors that equates the terms.------   Precondition: t1 is normalised, t2 is in WHNF--- When reducing t2, it may become a literal, which makes this not work in some cases...-class Injectible a where-  (<:) :: a -> a -> ReaderT (Map QName InjectiveFun) (Compile TCM) InjConstraints--instance Injectible a => Injectible (Arg a) where-  a1 <: a2 = unArg a1 <: unArg a2--instance Injectible a => Injectible [a] where-  l1 <: l2-    | length l1 == length l2 = unionConstraints <$> zipWithM (<:) l1 l2-    | otherwise              = return Nothing--instance Injectible a => Injectible (Elim' a) where-  e1 <: e2 =-    case (e1, e2) of-      (Proj _ f1, Proj _ f2) | f1==f2 -> return $ Just []-      (Apply a1, Apply a2)            -> a1 <: a2-      _                               -> return Nothing--instance Injectible Term where-  t1 <: t2 = do-    injs <- ask-    -- Andreas, 2013-10-18: ignoring the precondition (NF, WHNF) since I am not maintaining it-    -- in recursive calls.-    -- The original code did not follow this invariant in the Var-Var and Def-Def case,-    -- thus, I am not trusting it.  Also the call site does not seem to ensure it.-    -- It could be restored by only reducing the right argument in the Arg-instance.--    -- (t1, t2) <- lift . lift . reduce $ (t1, t2)  -- NOTE: reduce *introduces* Lit! Loops!-    case (ignoreSharing t1, ignoreSharing t2) of-      (Lit l, Lit l') | l == l' -> return $ Just []-      (Lit l, _) | litInt l -> do-        l' <- lift . lift $ litToCon l-        l' <: t2-      (_,  Lit l) | litInt l -> do-        l' <- lift . lift $ litToCon l-        t1 <: l'-      (_, Def n2 es2) | Just (InjectiveFun argn arit) <- Map.lookup n2 injs -> do-        if genericLength es2 /= arit-          then return Nothing-          else do-            case es2 !!! argn of-              Nothing        -> __IMPOSSIBLE__-              Just (Proj{})  -> __IMPOSSIBLE__-              Just (Apply a) -> t1 <: unArg a-      (Var i1 es1, Var i2 es2) | i1 == i2 -> es1 <: es2-      (Def q1 es1, Def q2 es2) | q1 == q2 -> es1 <: es2-      (Con con1 _ args1, Con con2 _ args2) -> do-        let c1 = conName con1-            c2 = conName con2-        args1' <- flip notForced args1 <$> do lift . getForcedArgs $ c1-        args2' <- flip notForced args2 <$> do lift . getForcedArgs $ c2-        addConstraint c1 c2 <$> do-          args1' <: args2'-      _ -> return Nothing-{--      (_, Def n2 args2) | Just (InjectiveFun argn arit) <- Map.lookup n2 injs -> do-        if genericLength args2 /= arit-          then return Nothing-          else do-              arg <- lift . lift . reduce $ unArg $ args2 !! argn-              t1 <: arg-      (Var n1 args1, Var n2 args2) | n1 == n2 && length args1 == length args2 -> do-        args1' <- map unArg <$> mapM (lift . lift . reduce) args1-        args2' <- map unArg <$> mapM (lift . lift . reduce) args2-        unionConstraints <$> zipWithM (\a b -> (a <: b)) args1' args2'-      (Def q1 args1, Def q2 args2) | q1 == q2 && length args1 == length args2 -> do-        args1' <- map unArg <$> mapM (lift . lift . reduce) args1-        args2' <- map unArg <$> mapM (lift . lift . reduce) args2-        unionConstraints <$> zipWithM (\a b -> (a <: b)) args1' args2'-      (Con con1 _ args1, Con con2 _ args2) -> do-        let c1 = conName con1-            c2 = conName con2-        args1' <- map unArg <$> flip notForced args1 <$> getForcedArgs c1-        args2' <- map unArg <$> (mapM (lift . lift . reduce) =<< flip notForced args2 <$> getForcedArgs c2)-        if length args1' == length args2'-            then addConstraint c1 c2 <$> unionConstraints <$> zipWithM (\a b -> (a <: b)) args1' args2'-            else return Nothing-      _ -> return Nothing--}-data TagEq-    = Same Int-    | IsTag Tag-  deriving Eq--data Tags = Tags-    { eqGroups    :: IntMap (Set QName)-    , constrGroup :: Map QName TagEq-    }--initialTags :: Map QName Tag -> [QName] -> Tags-initialTags setTags newNames = Tags-    { eqGroups    = IntMap.fromList $ zip [0..] (map Set.singleton newNames)-    , constrGroup = Map.map IsTag setTags `Map.union` Map.fromList (zip newNames (map Same [0..]))-    }--unify :: QName -> QName -> Tags -> Compile TCM (Maybe Tags)-unify c1 c2 ts = do-    let g1 = constrGroup ts !!!! c1-        g2 = constrGroup ts !!!! c2-    case (g1, g2) of-        (Same n1, Same n2)   | n1 == n2 -> return $ Just ts-        (IsTag t1, IsTag t2) | t1 == t2 -> return $ Just ts-        (Same n1, Same n2)   -> mergeGroups n1 n2 ts-        (Same n1, IsTag t2)  -> setTag n1 t2 ts-        (IsTag t1 , Same n2) -> setTag n2 t1 ts-        _                    -> return $ Nothing--setTag :: Int -> Tag -> Tags -> Compile TCM (Maybe Tags)-setTag gid tag ts = return $ Just $ ts-    { constrGroup = foldr (\ c -> Map.insert c (IsTag tag))-                          (constrGroup ts)-                          (Set.toList $ fromMaybe __IMPOSSIBLE__ $ IntMap.lookup gid $ eqGroups ts) }--mergeGroups :: Int -> Int -> Tags -> Compile TCM (Maybe Tags)-mergeGroups n1 n2 ts = do-    let g1s = fromMaybe __IMPOSSIBLE__ $ IntMap.lookup n1 $ eqGroups ts-        g2s = fromMaybe __IMPOSSIBLE__ $ IntMap.lookup n2 $ eqGroups ts-        gs  = Set.union g1s g2s-        g1l = Set.toList g1s-        g2l = Set.toList g2s-    ifNotM (andM $ zipWith unifiable g1l g2l)-        (return Nothing) $-        return $ Just $ ts-            { eqGroups    = IntMap.delete n2 $ IntMap.insert n1 gs (eqGroups ts)-            , constrGroup = Map.fromList [ (e2, Same n1) | e2 <- g2l ] `Map.union` constrGroup ts-            }--unifiable :: QName -> QName -> Compile TCM Bool-unifiable c1 c2 = do-    d1 <- getConData c1-    d2 <- getConData c2-    return $ d1 /= d2--(!!!!) :: Ord k => Map k v -> k -> v-m !!!!  k = case Map.lookup k m of-    Nothing -> __IMPOSSIBLE__-    Just x  -> x
− src/full/Agda/Compiler/Epic/Interface.hs
@@ -1,89 +0,0 @@-{-# LANGUAGE DeriveDataTypeable #-}---- | Epic interface data structure, which is serialisable and stored for each---   compiled file-module Agda.Compiler.Epic.Interface where--import Control.Monad--import Data.Function-import Data.Map(Map)-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend)-import Data.Set (Set)-import Data.Typeable ( Typeable )--import Agda.Syntax.Common (Nat)-import Agda.Syntax.Internal--type Var       = String-data Tag       = Tag Int-               | PrimTag Var-  deriving (Show, Eq, Ord, Typeable)--data Forced = NotForced | Forced-  deriving (Show, Typeable, Eq)---- | Filter a list using a list of Bools specifying what to keep.-pairwiseFilter :: [Bool] -> [a] -> [a]-pairwiseFilter (True :bs) (a:as) = a : pairwiseFilter bs as-pairwiseFilter (False:bs) (_:as) = pairwiseFilter bs as-pairwiseFilter _           _     = []--notForced :: ForcedArgs -> [a] -> [a]-notForced = pairwiseFilter . map (== NotForced)--forced :: ForcedArgs -> [a] -> [a]-forced = pairwiseFilter . map (== Forced)--data Relevance-  = Irr-  | Rel-  deriving (Eq, Ord, Show, Typeable)--type ForcedArgs   = [Forced]-type RelevantArgs = [Relevance]--data InjectiveFun = InjectiveFun-  { injArg     :: Nat-  , injArity   :: Nat-  }-  deriving (Show, Typeable, Eq)--data EInterface = EInterface-    { constrTags    :: Map QName Tag-    , definitions   :: Set Var-    , defDelayed    :: Map QName Bool-    , conArity      :: Map QName Int-    , mainName      :: Maybe QName-    , relevantArgs  :: Map Var   RelevantArgs-    , forcedArgs    :: Map QName ForcedArgs-    , injectiveFuns :: Map QName InjectiveFun-    } deriving (Typeable, Show)--instance Semigroup EInterface where-  x <> y = EInterface-      { constrTags    = comb constrTags-      , definitions   = comb definitions-      , defDelayed    = comb defDelayed-      , conArity      = comb conArity-      , mainName      = mainName x `mplus` mainName y-      , relevantArgs  = comb relevantArgs-      , forcedArgs    = comb forcedArgs-      , injectiveFuns = comb injectiveFuns-      }-    where-      comb :: Semigroup a => (EInterface -> a) -> a-      comb f = ((<>) `on` f) x y--instance Monoid EInterface where-  mempty = EInterface-      { constrTags    = mempty-      , definitions   = mempty-      , defDelayed    = mempty-      , conArity      = mempty-      , mainName      = Nothing-      , relevantArgs  = mempty-      , forcedArgs    = mempty-      , injectiveFuns = mempty-      }-  mappend = (<>)
− src/full/Agda/Compiler/Epic/NatDetection.hs
@@ -1,80 +0,0 @@-{-# LANGUAGE CPP #-}---- | Detect if a datatype could be represented as a primitive integer.---   If it has one constructor with no arguments and one with a recursive---   argument this is true. This is done using IrrFilters which filter out---   forced arguments, so for example Fin becomes primitive.-module Agda.Compiler.Epic.NatDetection where--import Control.Applicative-import Control.Monad-import Control.Monad.State-import Data.Function-import Data.List-import Data.Maybe--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.TypeChecking.Monad-import Agda.Utils.Monad (andM)--import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface--import qualified Agda.Utils.HashMap as HM--#include "undefined.h"-import Agda.Utils.Impossible-import Agda.Utils.Lens---- | Get a list of all the datatypes that look like nats. The [QName] is on the---   form [zeroConstr, sucConstr]-getNatish :: Compile TCM [(ForcedArgs, [QName])]-getNatish = do-  sig <- lift $ use $ stImports . sigDefinitions-  let defs = HM.toList sig-  fmap catMaybes $ forM defs $ \(q, def) ->-    case theDef def of-      d@(Datatype {}) -> isNatish q d--      _ -> return Nothing--isNatish :: QName -> Defn -> Compile TCM (Maybe (ForcedArgs, [QName]))-isNatish q d = do -- A datatype ...-    case dataCons d of-        constrs | length constrs == 2 -> do -- with two constructors ...-            b <- andM $ map constrInScope constrs-            if b-              then do-                z <- zip constrs <$> mapM getForcedArgs constrs-                case sortBy (compare `on` nrRel . snd) z of-                  [(cz,fz), (cs,fs)] -> do-                    sig <- lift $ use $ stImports . sigDefinitions-                    let ts = defType $ sig HM.! cs-                        nr = dataPars d-                    return $ do-                     guard (nrRel fz == 0) -- where one constructor has zero arguments ...-                     guard (nrRel fs == 1) -- and the other one one argument ...-                     guard (isRec ((fromMaybe __IMPOSSIBLE__ $ elemIndex NotForced fs) + nr) ts q) -- which is recursive.-                     return (fs, [cz, cs]) -- It's natish!-                  _ -> return Nothing-              else return Nothing-        _       -> return Nothing---- | Count the number of relevant arguments-nrRel :: ForcedArgs -> Integer-nrRel = sum . map (const 1) . filter (== NotForced)---- | Check if argument n is recursive-isRec :: Int -> Type -> QName -> Bool-isRec 0 (El _ t) dat = case ignoreSharing t of-    Pi  arg _ -> argIsDef (unDom arg) dat-    _         -> False-isRec n (El _ t) dat = case t of-    Pi  _ ab  -> isRec (n - 1) (unAbs ab) dat-    _         -> False--argIsDef :: Type -> QName -> Bool-argIsDef (El _ t) dat = case ignoreSharing t of-    Def q _ -> q == dat-    _       -> False
− src/full/Agda/Compiler/Epic/Primitive.hs
@@ -1,213 +0,0 @@-{-# LANGUAGE CPP #-}---- | Change constructors and cases on builtins and natish datatypes to use---   primitive data-module Agda.Compiler.Epic.Primitive where--import Control.Applicative-import Control.Monad-import Control.Monad.Trans-import Data.Map (Map)-import qualified Data.Map as Map-import Data.Maybe--import Agda.Syntax.Internal(QName)-import qualified Agda.Syntax.Internal as T-import Agda.TypeChecking.Monad hiding (defName)-import Agda.TypeChecking.Monad.Builtin-import Agda.Utils.Monad (andM)--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface-import Agda.Compiler.Epic.NatDetection--import Agda.Utils.List-import Agda.Utils.Impossible--#include "undefined.h"--{- Stacken, Heapen -- Optimizern -}--data PrimTransform = PrimTF-  { mapCon        :: Map QName Var-  , translateCase :: Expr -> [Branch] -> Expr-  }--prZero, prSuc, prTrue, prFalse, prPred, prNatEquality :: Var-prZero  = "primZero"-prSuc   = "primSuc"-prTrue  = "primTrue"-prFalse = "primFalse"-prPred  = "primPred"-prNatEquality = "primNatEquality"---- | Change constructors and cases on builtins and natish datatypes to use---   primitive data-primitivise :: [Fun] -> Compile TCM [Fun]-primitivise funs = do-    ptfs   <- getBuiltins-    natish <- getNatish-    mapM (primFun $ ptfs ++ map (uncurry natPrimTF) natish) funs---- | Map primitive constructors to primitive tags-initialPrims :: Compile TCM () -- [Fun]-initialPrims = do-  -- TODO: Natishness is calculated here and could be stored so it does not have-  --       to be recalculated in primitivise-  natish <- getNatish-  -- This has to be done because injection detection may otherwise flag injections-  -- between non-primitive and primitive datatypes in the wrong way-  sequence_ [zipWithM_ putConstrTag [zc, sc] (prim [prZero, prSuc])-            | (_, [zc, sc]) <- natish]-  sequence_-    [ [builtinNil, builtinCons]           ~> tags [0, 1]-    , [builtinZero, builtinSuc  ]         ~> prim [prZero, prSuc]-    , [builtinLevelZero, builtinLevelSuc] ~> prim [prZero, prSuc]-    , [builtinTrue, builtinFalse]         ~> prim [prTrue, prFalse]-    , [builtinRefl]                       ~> tags [0]-    ]-  where-    prim = map PrimTag-    tags = map Tag-    constrs ~> tags = do-        builtins  <- lift $ mapM getBuiltin' constrs-        if all isJust builtins-           then do-                let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins-                -- b <- and <$>  mapM constrInScope names-                -- if b then return $ Just (transf names) else return Nothing-                zipWithM_ putConstrTag names tags-           else return ()---- | Build transforms using the names of builtins-getBuiltins :: Compile TCM [PrimTransform]-getBuiltins =-    catMaybes <$> sequence-      [ [builtinZero, builtinSuc  ]         ~> natPrimTF [NotForced]-       -- ? is this ok to have [NotForced]-      , [builtinLevelZero, builtinLevelSuc] ~> natPrimTF [NotForced]-      , [builtinTrue, builtinFalse]         ~> boolPrimTF-      ]-  where-    constrs ~> transf = do-        builtins  <- lift $ mapM getBuiltin' constrs-        if all isJust builtins-           then do-                let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins-                b <- andM $ map constrInScope names-                if b then return $ Just (transf names) else return Nothing-           else return Nothing--defName :: T.Term -> QName-defName v = case T.ignoreSharing v of-  T.Def q [] -> q-  T.Con q ci [] -> T.conName q-  _          -> __IMPOSSIBLE__---- | Translation to primitive integer functions-natPrimTF :: ForcedArgs -> [QName] -> PrimTransform-natPrimTF filt [zero, suc] = PrimTF-  { mapCon = Map.fromList [(zero, prZero), (suc, prSuc)]-  , translateCase = \ce brs -> case brs of-        -- Assuming only the first two branches are relevant when casing on Nats-        (Branch _ n vs e:Branch _ _n' vs'' e'':_) ->-            if n == zero-               then primNatCaseZS ce e  (headWithDefault __IMPOSSIBLE__ vs'') e''-               else primNatCaseZS ce e'' (headWithDefault __IMPOSSIBLE__ vs) e-        (Branch _ n vs e:Default e'':_) ->-            if n == zero-               then primNatCaseZD ce e e'' -- zero-               else primNatCaseZS ce e'' (headWithDefault __IMPOSSIBLE__ vs) e -- suc-        [ Branch _ n vs e ] ->-            if n == zero-              then e-              else lett (headWithDefault __IMPOSSIBLE__ vs) (App prPred [ce]) e-        _ -> __IMPOSSIBLE__-  }-natPrimTF _ _ = __IMPOSSIBLE__---- | Corresponds to a case for natural numbers-primNatCaseZS :: Expr -- ^ Expression that is cased on-              -> Expr -- ^ Expression for the zero branch-              -> Var  -- ^ Variable that is bound in suc branch-              -> Expr -- ^ Expression used for suc branch-              -> Expr -- ^ Result?-primNatCaseZS n zeroBr v sucBr =-    If (App prNatEquality [n, Var prZero]) zeroBr (lett v (App prPred [n]) sucBr)---- | Corresponds to a case with a zero and default branch-primNatCaseZD :: Expr -- ^ Expression that is cased on-              -> Expr -- ^ Zero branch-              -> Expr -- ^ Default branch-              -> Expr -- ^ Result?-primNatCaseZD n zeroBr defBr = If (App prNatEquality [n, Var prZero]) zeroBr defBr---- | Translation to primitive bool functions-boolPrimTF :: [QName] -> PrimTransform-boolPrimTF [true, false] = PrimTF-  { mapCon = Map.fromList [(true, prTrue), (false, prFalse)]-  , translateCase = \ce brs ->-    case brs of-        (Branch _ n _vs e:b':_) ->-                    (if n == true-                             then If ce e (brExpr b')-                             else If ce (brExpr b') e)-        _ -> __IMPOSSIBLE__-  }-boolPrimTF _ = __IMPOSSIBLE__---- | Change all the primitives in the function using the PrimTransform-primFun :: [PrimTransform] -> Fun -> Compile TCM Fun-primFun ptfs (Fun i n qn c args e) =-    Fun i n qn c args <$> primExpr ptfs e-primFun _ e@(EpicFun {}) = return e----- | Change all the primitives in an expression using PrimTransform-primExpr :: [PrimTransform] -> Expr -> Compile TCM Expr-primExpr prim ex = case ex of-    Var{}    -> return ex-    Lit{}    -> return ex-    Lam v e1 -> Lam v <$> primExpr prim e1-    Con c n es -> case testCon prim n of-        Just pn -> do-            filt <- getForcedArgs n-            apps pn <$> mapM (primExpr prim) es-        Nothing -> Con c n <$> mapM (primExpr prim) es-    App v es   -> App v <$> mapM (primExpr prim) es-    Case e brs -> case testBranch prim brs of-       Just p  -> primExpr prim $ translateCase p e brs-       Nothing -> Case <$> primExpr prim e <*> mapM primBranch brs-    If a b c   -> If <$> primExpr prim a <*> primExpr prim b <*> primExpr prim c-    Let v e e' -> Let v <$> primExpr prim e <*> primExpr prim e'-    Lazy e     -> Lazy <$> primExpr prim e-    UNIT       -> return ex-    IMPOSSIBLE -> return ex-  where-    -- | Test if any PrimTransform have any primitive function for-    --   a constructor, gives the name of that primitive function in that-    --   case, otherwise Nothing.-    testCon :: [PrimTransform] -> QName -> Maybe Var-    testCon [] _ = Nothing-    testCon (p : ps) k = Map.lookup k (mapCon p) `mplus` testCon ps k--    -- | Test if we should transform the case, based on the branches. Returns-    --   the (first) PrimTransform that is applicable.-    testBranch :: [PrimTransform] -> [Branch] -> Maybe PrimTransform-    testBranch [] _       = Nothing-    testBranch (p:ps) brs = msum (map (check p) brs) `mplus` testBranch ps brs--    -- | Check if a particular PrimTransform can be used on a particular Branch-    --   Returns the PrimTransform in that case.-    check :: PrimTransform -> Branch -> Maybe PrimTransform-    check p br = case br of-        Branch  _ n _ _ -> fmap (const p) $ Map.lookup n (mapCon p)-        BrInt _ _       -> Nothing-        Default _       -> Nothing--    -- | Change all primitives in a branch-    primBranch :: Branch -> Compile TCM Branch-    primBranch br = do-        e' <- primExpr prim (brExpr br)-        return br {brExpr = e'}
− src/full/Agda/Compiler/Epic/Smashing.hs
@@ -1,137 +0,0 @@-{-# LANGUAGE CPP #-}---- | Smash functions which return something that can be inferred---   (something of a type with only one element)--module Agda.Compiler.Epic.Smashing where--import Control.Monad.State--import Data.List-import Data.Maybe--import Data.Set (Set)-import qualified Data.Set as Set--import Agda.Syntax.Common-import Agda.Syntax.Internal as SI-import Agda.TypeChecking.Monad hiding (funInline)-import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Telescope-import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Reduce--import Agda.Compiler.Epic.AuxAST as AA-import Agda.Compiler.Epic.CompileState-import Agda.Compiler.Epic.Interface--import Agda.Utils.Lens-import Agda.Utils.Monad-import Agda.Utils.Size-import qualified Agda.Utils.HashMap as HM--#include "undefined.h"-import Agda.Utils.Impossible--defnPars :: Integral n => Defn -> n-defnPars (Record      {recPars = p}) = fromIntegral p-defnPars (Constructor {conPars = p}) = fromIntegral p-defnPars d                           = 0---- | Main function, smash as much as possible-smash'em :: [Fun] -> Compile TCM [Fun]-smash'em funs = do-    defs <- lift $ use $ stImports . sigDefinitions-    funs' <- forM funs $ \f -> case f of-      AA.Fun{} -> case funQName f >>= flip HM.lookup defs of-          Nothing -> do-              lift $ reportSDoc "epic.smashing" 10 $ vcat-                [ (text . show) f <+> text " was not found"]-              return f--          Just def -> do-              lift $ reportSLn "epic.smashing" 10 $ "running on:" ++ (show (funQName f))-              minfered <- smashable (length (funArgs f) + defnPars (theDef def)) (defType def)-              case minfered of-                  Just infered -> do-                      lift $ reportSDoc "smashing" 5 $ vcat-                        [ prettyTCM (defName def) <+> text "is smashable"]-                      return f { funExpr = infered-                               , funInline = True-                               , funComment = funComment f ++ " [SMASHED]"-                               }-                  Nothing -> return f-      _ -> do-        lift $ reportSLn "epic.smashing" 10 $ "smashing!"-        return f-    return funs'--(+++) :: Telescope -> Telescope -> Telescope-xs +++ ys = unflattenTel names $ map (raise (size ys)) (flattenTel xs) ++ flattenTel ys-  where names = teleNames xs ++ teleNames ys---- | Can a datatype be inferred? If so, return the only possible value.-inferable :: Set QName -> QName -> [Arg Term] ->  Compile TCM (Maybe Expr)-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 $ use $ stImports . sigDefinitions-  let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup dat defs-  case theDef def of-      d@Datatype{} -> do-          case dataCons d of-            [c] -> inferableArgs c (dataPars d)-            _   -> return Nothing-      r@Record{}   -> inferableArgs (recCon r) (recPars r)-      f@Function{} -> do-        term <- lift $ normalise $ Def dat $ map SI.Apply args-        inferableTerm visited' term-      d -> do-        lift $ reportSLn "epic.smashing" 10 $ "  failed (inferable): " ++ (show d)-        return Nothing-  where-    inferableArgs c pars = do-        defs <- lift $ use $ stImports . sigDefinitions-        let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs-        forc <- getForcedArgs c-        TelV tel _ <- lift $ telView (defType def `piApply` genericTake pars args)-        tag <- getConstrTag c-        lift $ reportSDoc "epic.smashing" 10 $ nest 2 $ vcat-          [ text "inferableArgs!"-          , text "tele" <+> prettyTCM tel-          , text "constr:" <+> prettyTCM c-          ]-        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unDom)-    visited' = Set.insert dat visited--inferableTerm :: Set QName -> Term -> Compile TCM (Maybe Expr)-inferableTerm visited t = do-  case ignoreSharing t of-    Def q es    ->-      case allApplyElims es of-        Just vs -> inferable visited q vs-        Nothing -> return Nothing-    Pi _   b    -> (AA.Lam "_" <$>) <$> inferableTerm visited (unEl $ unAbs b)-    Sort {}     -> return . return $ AA.UNIT-    t           -> do-      lift $ reportSLn "epic.smashing" 10 $ "  failed to infer: " ++ show t-      return Nothing---- | 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 $ use $ stImports . sigDefinitions-    TelV tele retType <- lift $ telView typ-    retType' <- return retType -- lift $ reduce retType--    inf <- inferableTerm Set.empty (unEl retType')-    lift $ reportSDoc "epic.smashing" 10 $ nest 2 $ vcat-      [ text "Result is"-      , text "inf: " <+> (text . show) inf-      , text "type: " <+> prettyTCM retType'-      ]-    return $ buildLambda (size tele - origArity) <$> inf--buildLambda :: (Ord n, Num n) => n -> Expr -> Expr-buildLambda n e | n <= 0    = e-buildLambda n e | otherwise = AA.Lam "_" (buildLambda (n - 1) e)
− src/full/Agda/Compiler/Epic/Static.hs
@@ -1,119 +0,0 @@-{-# LANGUAGE CPP #-}---- | Find the places where the builtin static is used and do some normalisation---   there.-module Agda.Compiler.Epic.Static where--import Control.Applicative-import Control.Monad-import Control.Monad.State--import qualified Data.Map as Map-import Data.Traversable (traverse)--import Agda.Syntax.Common-import Agda.Syntax.Internal as I--import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Monad.Base-import Agda.TypeChecking.Monad.Options-import Agda.TypeChecking.Monad.Sharing-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Pretty--import Agda.Utils.List (downFrom)-import Agda.Utils.Monad-import qualified Agda.Utils.HashMap as HM--import Agda.Compiler.Epic.CompileState--#include "undefined.h"-import Agda.Utils.Impossible-import Agda.Utils.Lens--normaliseStatic :: CompiledClauses -> Compile TCM CompiledClauses-normaliseStatic = evaluateCC--evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses-evaluateCC ccs = case ccs of-    Case n brs -> do-        cbrs <- forM (Map.toList $ conBranches brs) $ \(c, WithArity n cc) -> (,) c <$> (WithArity n <$> evaluateCC cc)-        lbrs <- forM (Map.toList $ litBranches brs) $ \(l, cc) -> (,) l <$> evaluateCC cc-        cab <- case catchAllBranch brs of-            Nothing -> return Nothing-            Just cc -> Just <$> evaluateCC cc-        return $ Case n Branches-            { projPatterns   = projPatterns brs-            , conBranches    = Map.fromList cbrs-            , litBranches    = Map.fromList lbrs-            , catchAllBranch = cab-            }-    Done n t   -> Done n <$> evaluate t-    Fail       -> return Fail--etaExpand :: Term -> Compile TCM Term-etaExpand def@(Def n ts) = do-    defs <- lift $ use $ stImports . sigDefinitions-    let f   = maybe __IMPOSSIBLE__ theDef (HM.lookup n defs)-        len = length . namedClausePats . head .  funClauses $ f-        toEta :: Num a => a-        toEta = fromIntegral $ len - length ts-        term  = raise toEta def `applys` map var (downFrom toEta)-        info  = setOrigin Inserted defaultArgInfo-    return $ foldr (\ v t -> Lam info (Abs v t)) term $ replicate toEta "staticVar"-etaExpand x = return x--class Evaluate a where-  evaluate :: a -> Compile TCM a--instance Evaluate a => Evaluate [a] where-  evaluate = traverse evaluate--instance Evaluate a => Evaluate (Arg a) where-  evaluate = traverse evaluate--instance Evaluate a => Evaluate (Abs a) where-  evaluate = traverse evaluate  -- TODO: maintain context--instance Evaluate a => Evaluate (Elim' a) where-  evaluate = traverse evaluate--instance Evaluate Term where-  evaluate term = case term of-    Var x es     -> Var x <$> evaluate es-    Lam h b      -> Lam h <$> evaluate b-{--      ab' <- evaluateTerm (unAbs ab)-      return $ Lam h $ Abs (absName ab) ab'--}-    Lit l        -> return $ Lit l-    Def n es     -> ifNotM (isStatic n) {- then -} (Def n <$> evaluate es) $ {- else -} do-        feta <- return term -- etaExpand term-        f <- lift $ normalise feta-        lift $ reportSDoc "epic.static" 10 $ vcat-          [ text "STATIC pragma fired"-          , nest 2 $ vcat-            [ text "before :" <+> prettyTCM term-            , text "after  :" <+> prettyTCM f-            ]-          ]-        return f-    Con c ci args   -> Con c ci <$> evaluate args-    Pi  arg abs  -> return term-    Sort s       -> return term-    MetaV i args -> return term-    Level l      -> return term-    DontCare i   -> return term-    Shared{}     -> updateSharedTermT evaluate term-    where-{--    evaluateTerms :: Args -> Compile TCM Args-    evaluateTerms as = forM as $ \x -> do-      y <- evaluateTerm (unArg x)-      return x { unArg = y }--}-    isStatic :: QName -> Compile TCM Bool-    isStatic q = do-      defs <- lift $ use $ stImports . sigDefinitions-      return $ maybe False (^. theDefLens . funStatic) $ HM.lookup q defs
− src/full/Agda/Compiler/HaskellTypes.hs
@@ -1,115 +0,0 @@-{-# LANGUAGE CPP #-}---- | Translating Agda types to Haskell types. Used to ensure that imported---   Haskell functions have the right type.--module Agda.Compiler.HaskellTypes where--import Control.Applicative-import Data.Maybe (fromMaybe)--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Free--import Agda.Utils.Except ( MonadError(catchError) )-import Agda.Utils.Impossible--#include "undefined.h"--type HaskellKind = String--hsStar :: HaskellKind-hsStar = "*"--hsKFun :: HaskellKind -> HaskellKind -> HaskellKind-hsKFun k l = "(" ++ k ++ " -> " ++ l ++ ")"--hsFun :: HaskellKind -> HaskellKind -> HaskellKind-hsFun a b = "(" ++ a ++ " -> " ++ b ++ ")"--hsUnit :: HaskellType-hsUnit = "()"--hsVar :: Name -> HaskellType-hsVar x = "x" ++ concatMap encode (show x)-  where-    okChars = ['a'..'z'] ++ ['A'..'Y'] ++ "_'"-    encode 'Z' = "ZZ"-    encode c-      | c `elem` okChars = [c]-      | otherwise        = "Z" ++ show (fromEnum c)---hsApp :: String -> [HaskellType] -> HaskellType-hsApp d [] = d-hsApp d as = "(" ++ unwords (d : as) ++ ")"--hsForall :: String -> HaskellType -> HaskellType-hsForall x a = "(forall " ++ x ++ ". " ++ a ++ ")"--notAHaskellType :: Type -> TCM a-notAHaskellType a = do-  err <- fsep $ pwords "The type" ++ [prettyTCM a] ++-                pwords "cannot be translated to a Haskell type."-  typeError $ GenericError $ show err--getHsType :: QName -> TCM HaskellType-getHsType x = do-  d <- compiledHaskell . defCompiledRep <$> getConstInfo x-  case d of-    Just (HsType t)   -> return t-    Just (HsDefn t c) -> return hsUnit-    _                 -> notAHaskellType (El Prop $ Def x [])--getHsVar :: Nat -> TCM HaskellCode-getHsVar i = hsVar <$> nameOfBV i---- | Note that @Inf a b@, where @Inf@ is the INFINITY builtin, is--- translated to @<translation of b>@ (assuming that all coinductive--- builtins are defined).------ Note that if @haskellType@ supported universe polymorphism then the--- special treatment of INFINITY might not be needed.--haskellType :: Type -> TCM HaskellType-haskellType t = fromType t-  where-    err      = notAHaskellType t-    fromArgs = mapM (fromTerm . unArg)-    fromType = fromTerm . unEl-    fromTerm v = do-      v   <- unSpine <$> reduce v-      reportSLn "compile.haskell.type" 50 $ "toHaskellType " ++ show v-      kit <- liftTCM coinductionKit-      case v of-        Var x es -> do-          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-          hsApp <$> getHsVar x <*> fromArgs args-        Def d es | Just d == (nameOfInf <$> kit) ->-          case es of-            [Apply a, Apply b] -> fromTerm (unArg b)-            _                  -> err-        Def d es -> do-          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-          hsApp <$> getHsType d <*> fromArgs args-        Pi a b ->-          if isBinderUsed b  -- Andreas, 2012-04-03.  Q: could we rely on Abs/NoAbs instead of again checking freeness of variable?-          then do-            hsA <- fromType (unDom a)-            underAbstraction a b $ \b ->-              hsForall <$> getHsVar 0 <*> (hsFun hsA <$> fromType b)-          else hsFun <$> fromType (unDom a) <*> fromType (noabsApp __IMPOSSIBLE__ b)-        Con c ci args -> hsApp <$> getHsType (conName c) <*> fromArgs args-        Lam{}      -> err-        Level{}    -> return hsUnit-        Lit{}      -> return hsUnit-        Sort{}     -> return hsUnit-        Shared p   -> fromTerm $ derefPtr p-        MetaV{}    -> err-        DontCare{} -> err
src/full/Agda/Compiler/JS/Compiler.hs view
@@ -6,6 +6,7 @@ import Control.Applicative import Control.Monad.Reader ( liftIO ) import Control.Monad.Trans+import Data.Char ( isSpace ) import Data.List ( intercalate, genericLength, partition ) import Data.Maybe ( isJust ) import Data.Set ( Set, null, insert, difference, delete )@@ -20,7 +21,7 @@ import Agda.Interaction.Imports ( isNewerThan ) import Agda.Interaction.Options ( optCompileDir ) import Agda.Syntax.Common ( Nat, unArg, namedArg, NameId(..) )-import Agda.Syntax.Concrete.Name ( projectRoot )+import Agda.Syntax.Concrete.Name ( projectRoot , isNoName ) import Agda.Syntax.Abstract.Name   ( ModuleName(MName), QName,     mnameToConcrete,@@ -29,6 +30,7 @@   ( Name, Args, Type,     conName,     toTopLevelModuleName, arity, unEl, unAbs, nameFixity )+import Agda.Syntax.Position import Agda.Syntax.Literal ( Literal(LitNat,LitFloat,LitString,LitChar,LitQName,LitMeta) ) import Agda.Syntax.Fixity import qualified Agda.Syntax.Treeless as T@@ -36,7 +38,8 @@ import Agda.TypeChecking.Level ( reallyUnLevelView ) import Agda.TypeChecking.Monad hiding (Global, Local) import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Monad.Options ( setCommandLineOptions, commandLineOptions, reportSLn )+import Agda.TypeChecking.Monad.Debug ( reportSLn )+import Agda.TypeChecking.Monad.Options ( setCommandLineOptions ) import Agda.TypeChecking.Reduce ( instantiateFull, normalise ) import Agda.TypeChecking.Substitute (TelV(..)) import Agda.TypeChecking.Telescope@@ -53,9 +56,10 @@  import Agda.Compiler.Common import Agda.Compiler.ToTreeless-import Agda.Compiler.Treeless.DelayCoinduction+import Agda.Compiler.Treeless.EliminateDefaults import Agda.Compiler.Treeless.EliminateLiteralPatterns import Agda.Compiler.Treeless.GuardsToPrims+import Agda.Compiler.Backend (Backend(..), Backend'(..), Recompile(..))  import Agda.Compiler.JS.Syntax   ( Exp(Self,Local,Global,Undefined,String,Char,Integer,Double,Lambda,Object,Apply,Lookup,If,BinOp,PlainJS),@@ -65,6 +69,8 @@   ( curriedLambda, curriedApply, emp, subst, apply ) import qualified Agda.Compiler.JS.Pretty as JSPretty +import Agda.Interaction.Options+ import Paths_Agda  #include "undefined.h"@@ -74,25 +80,81 @@ -- Entry point into the compiler -------------------------------------------------- -compilerMain :: Interface -> TCM ()-compilerMain mainI = inCompilerEnv mainI $ do-  doCompile IsMain mainI $ do-    compile-  copyRTEModules+jsBackend :: Backend+jsBackend = Backend jsBackend' -compile :: IsMain -> Interface -> TCM ()-compile isMain i = do-  ifM uptodate noComp $ do-    yesComp-    writeModule =<< curModule isMain+jsBackend' :: Backend' JSOptions JSOptions JSModuleEnv () (Maybe Export)+jsBackend' = Backend'+  { backendName           = jsBackendName+  , backendVersion        = Nothing+  , options               = defaultJSOptions+  , commandLineFlags      = jsCommandLineFlags+  , isEnabled             = optJSCompile+  , preCompile            = jsPreCompile+  , postCompile           = jsPostCompile+  , preModule             = jsPreModule+  , postModule            = jsPostModule+  , compileDef            = jsCompileDef+  , scopeCheckingSuffices = False+  }++--- Options ---++data JSOptions = JSOptions+  { optJSCompile :: Bool }++defaultJSOptions :: JSOptions+defaultJSOptions = JSOptions+  { optJSCompile = False }++jsCommandLineFlags :: [OptDescr (Flag JSOptions)]+jsCommandLineFlags =+    [ Option [] ["js"] (NoArg enable) "compile program using the JS backend"+    ]   where-  uptodate = liftIO =<< (isNewerThan <$> outFile_ <*> ifile)-  ifile    = maybe __IMPOSSIBLE__ filePath <$>-               (findInterfaceFile . toTopLevelModuleName =<< curMName)-  noComp   = reportSLn "compile.js" 2 . (++ " : no compilation is needed.") . prettyShow =<< curMName-  yesComp  = reportSLn "compile.js" 1 . (`repl` "Compiling <<0>> in <<1>> to <<2>>") =<<-             sequence [prettyShow <$> curMName, ifile, outFile_] :: TCM ()+    enable o = pure o{ optJSCompile = True } +--- Top-level compilation ---++jsPreCompile :: JSOptions -> TCM JSOptions+jsPreCompile opts = return opts++jsPostCompile :: JSOptions -> IsMain -> a -> TCM ()+jsPostCompile _ _ _ = copyRTEModules++--- Module compilation ---++type JSModuleEnv = Maybe CoinductionKit++jsPreModule :: JSOptions -> ModuleName -> FilePath -> TCM (Recompile JSModuleEnv ())+jsPreModule _ m ifile = ifM uptodate noComp yesComp+  where+    uptodate = liftIO =<< isNewerThan <$> outFile_ <*> pure ifile++    noComp = do+      reportSLn "compile.js" 2 . (++ " : no compilation is needed.") . prettyShow =<< curMName+      return $ Skip ()++    yesComp = do+      m   <- prettyShow <$> curMName+      out <- outFile_+      reportSLn "compile.js" 1 $ repl [m, ifile, out] "Compiling <<0>> in <<1>> to <<2>>"+      Recompile <$> coinductionKit++jsPostModule :: JSOptions -> JSModuleEnv -> IsMain -> ModuleName -> [Maybe Export] -> TCM ()+jsPostModule _ _ isMain _ defs = do+  m             <- jsMod <$> curMName+  is            <- map (jsMod . fst) . iImportedModules <$> curIF+  let es = catMaybes defs+  writeModule $ Module m (reorder es) main+  where+    main = case isMain of+      IsMain  -> Just $ Apply (Lookup Self $ MemberId "main") [Lambda 1 emp]+      NotMain -> Nothing++jsCompileDef :: JSOptions -> JSModuleEnv -> Definition -> TCM (Maybe Export)+jsCompileDef _ kit def = definition kit (defName def, def)+ -------------------------------------------------- -- Naming --------------------------------------------------@@ -101,19 +163,18 @@ prefix = "jAgda"  jsMod :: ModuleName -> GlobalId-jsMod m = GlobalId (prefix : map show (mnameToList m))+jsMod m = GlobalId (prefix : map prettyShow (mnameToList m))  jsFileName :: GlobalId -> String jsFileName (GlobalId ms) = intercalate "." ms ++ ".js"  jsMember :: Name -> MemberId-jsMember n =+jsMember n   -- Anonymous fields are used for where clauses,   -- and they're all given the concrete name "_",   -- so we disambiguate them using their name id.-  case show n of-    "_" -> MemberId ("_" ++ show (nameId n))-    l   -> MemberId l+  | isNoName n = MemberId ("_" ++ show (nameId n))+  | otherwise  = MemberId $ prettyShow n  -- Rather annoyingly, the anonymous construtor of a record R in module M -- is given the name M.recCon, but a named constructor C@@ -169,13 +230,13 @@     False -> reorder' defs (insertAfter us e es)  isTopLevelValue :: Export -> Bool-isTopLevelValue (Export _ isCoind e) = case e of-  _ | isCoind -> False+isTopLevelValue (Export _ e) = case e of+  Object m | flatName `Map.member` m -> False   Lambda{} -> False   _        -> True  isEmptyObject :: Export -> Bool-isEmptyObject (Export _ _ e) = case e of+isEmptyObject (Export _ e) = case e of   Object m -> Map.null m   Lambda{} -> True   _        -> False@@ -209,30 +270,49 @@    definition' kit q d (defType d) ls +-- | Ensure that there is at most one pragma for a name.+checkCompilerPragmas :: QName -> TCM ()+checkCompilerPragmas q =+  caseMaybeM (getUniqueCompilerPragma jsBackendName q) (return ()) $ \ (CompilerPragma r s) ->+  setCurrentRange r $ case words s of+    "=" : _ -> return ()+    _       -> genericDocError $ P.sep [ P.text "Badly formed COMPILE JS pragma. Expected",+                                         P.text "{-# COMPILE JS <name> = <js> #-}" ]++defJSDef :: Definition -> Maybe String+defJSDef def =+  case defCompilerPragmas jsBackendName def of+    [CompilerPragma _ s] -> Just (dropEquals s)+    []                   -> Nothing+    _:_:_                -> __IMPOSSIBLE__+  where+    dropEquals = dropWhile $ \ c -> isSpace c || c == '='+ definition' :: Maybe CoinductionKit -> QName -> Definition -> Type -> [MemberId] -> TCM (Maybe Export)-definition' kit q d t ls =+definition' kit q d t ls = do+  checkCompilerPragmas q   case theDef d of     -- coinduction     Constructor{} | Just q == (nameOfSharp <$> kit) -> do-      ret $  Lambda 1 $ local 0+      return Nothing     Function{} | Just q == (nameOfFlat <$> kit) -> do-      ret $ Lambda 1 $ Apply (local 0) [Integer 0]+      ret $ Lambda 1 $ Apply (Lookup (local 0) flatName) []      Axiom | Just e <- defJSDef d -> plainJS e     Axiom | otherwise -> ret Undefined      Function{} | Just e <- defJSDef d -> plainJS e     Function{} | otherwise -> do-      isInfVal <- outputIsInf kit t        reportSDoc "compile.js" 5 $ text "compiling fun:" <+> prettyTCM q       caseMaybeM (toTreeless q) (pure Nothing) $ \ treeless -> do-        funBody <- eliminateLiteralPatterns $ convertGuards $ treeless-        funBody' <- delayCoinduction funBody t-        reportSDoc "compile.js" 30 $ text " compiled treeless fun:" <+> pretty funBody'-        funBody'' <- compileTerm funBody'-        reportSDoc "compile.js" 30 $ text " compiled JS fun:" <+> (text . show) funBody''-        return $ Just $ Export ls isInfVal funBody''+        funBody <- eliminateCaseDefaults =<<+          eliminateLiteralPatterns+          (convertGuards treeless)+        reportSDoc "compile.js" 30 $ text " compiled treeless fun:" <+> pretty funBody+        funBody' <- compileTerm funBody+        reportSDoc "compile.js" 30 $ text " compiled JS fun:" <+> (text . show) funBody'+        return $ Just $ Export ls funBody'      Primitive{primName = p} | p `Set.member` primitives ->       plainJS $ "agdaRTS." ++ p@@ -259,53 +339,72 @@             (Apply (Lookup (Local (LocalId 0)) (last ls))               [ Local (LocalId (np - i)) | i <- [0 .. np-1] ])) -    AbstractDefn -> __IMPOSSIBLE__+    AbstractDefn{} -> __IMPOSSIBLE__   where-    ret = return . Just . Export ls False-    plainJS = return . Just . Export ls False . PlainJS-+    ret = return . Just . Export ls+    plainJS = return . Just . Export ls . PlainJS  compileTerm :: T.TTerm -> TCM Exp-compileTerm term = do-  case term of-    T.TVar x -> return $ Local $ LocalId x-    T.TDef q -> do-      d <- getConstInfo q-      case theDef d of-        -- Datatypes and records are erased-        Datatype {} -> return (String "*")-        Record {} -> return (String "*")-        _ -> qname q-    T.TApp t xs -> curriedApply <$> compileTerm t <*> mapM compileTerm xs-    T.TLam t -> Lambda 1 <$> compileTerm t-    -- TODO This is not a lazy let, but it should be...-    T.TLet t e -> apply <$> (Lambda 1 <$> compileTerm e) <*> traverse compileTerm [t]-    T.TLit l -> return $ literal l-    T.TCon q -> do-      d <- getConstInfo q-      qname q-    T.TCase sc (T.CTData dt) def alts -> do-      dt <- getConstInfo dt-      alts' <- traverse compileAlt alts-      let obj = Object $ Map.fromList alts'-      case (theDef dt, defJSDef dt) of-        (_, Just e) -> do-          return $ apply (PlainJS e) [Local (LocalId sc), obj]-        (Record{}, _) -> do-          memId <- visitorName $ recCon $ theDef dt-          return $ apply (Lookup (Local $ LocalId sc) memId) [obj]-        (Datatype{}, _) -> do-          return $ curriedApply (Local (LocalId sc)) [obj]-        _ -> __IMPOSSIBLE__-    T.TCase _ _ _ _ -> __IMPOSSIBLE__--    T.TPrim p -> return $ compilePrim p-    T.TUnit -> unit-    T.TSort -> unit-    T.TErased -> unit-    T.TError T.TUnreachable -> return Undefined+compileTerm t = do+  kit <- coinductionKit+  compileTerm' kit t +compileTerm' :: Maybe CoinductionKit -> T.TTerm -> TCM Exp+compileTerm' kit t = go t   where+    go :: T.TTerm -> TCM Exp+    go t = case t of+      T.TVar x -> return $ Local $ LocalId x+      T.TDef q -> do+        d <- getConstInfo q+        case theDef d of+          -- Datatypes and records are erased+          Datatype {} -> return (String "*")+          Record {} -> return (String "*")+          _ -> qname q+      T.TApp (T.TCon q) [x] | Just q == (nameOfSharp <$> kit) -> do+        x <- go x+        let evalThunk = unlines+              [ "function() {"+              , "  delete this.flat;"+              , "  var result = this.__flat_helper();"+              , "  delete this.__flat_helper;"+              , "  this.flat = function() { return result; };"+              , "  return result;"+              , "}"+              ]+        return $ Object $ Map.fromList+          [(flatName, PlainJS evalThunk)+          ,(MemberId "__flat_helper", Lambda 0 x)]+      T.TApp t xs -> curriedApply <$> go t <*> mapM go xs+      T.TLam t -> Lambda 1 <$> go t+      -- TODO This is not a lazy let, but it should be...+      T.TLet t e -> apply <$> (Lambda 1 <$> go e) <*> traverse go [t]+      T.TLit l -> return $ literal l+      T.TCon q -> do+        d <- getConstInfo q+        qname q+      T.TCase sc (T.CTData dt) def alts -> do+        dt <- getConstInfo dt+        alts' <- traverse compileAlt alts+        let obj = Object $ Map.fromList alts'+        case (theDef dt, defJSDef dt) of+          (_, Just e) -> do+            return $ apply (PlainJS e) [Local (LocalId sc), obj]+          (Record{}, _) -> do+            memId <- visitorName $ recCon $ theDef dt+            return $ apply (Lookup (Local $ LocalId sc) memId) [obj]+          (Datatype{}, _) -> do+            return $ curriedApply (Local (LocalId sc)) [obj]+          _ -> __IMPOSSIBLE__+      T.TCase _ _ _ _ -> __IMPOSSIBLE__++      T.TPrim p -> return $ compilePrim p+      T.TUnit -> unit+      T.TSort -> unit+      T.TErased -> unit+      T.TError T.TUnreachable -> return Undefined+     unit = return $ Integer 0  compilePrim :: T.TPrim -> Exp@@ -321,6 +420,8 @@     T.PAdd -> binOp "agdaRTS.uprimIntegerPlus"     T.PSub -> binOp "agdaRTS.uprimIntegerMinus"     T.PMul -> binOp "agdaRTS.uprimIntegerMultiply"+    T.PRem -> binOp "agdaRTS.uprimIntegerRem"+    T.PQuot -> binOp "agdaRTS.uprimIntegerQuot"     T.PSeq -> binOp "agdaRTS.primSeq"     _ -> __IMPOSSIBLE__   where binOp js = curriedLambda 2 $ apply (PlainJS js) [local 1, local 0]@@ -337,6 +438,9 @@ visitorName :: QName -> TCM MemberId visitorName q = do (m,ls) <- global q; return (last ls) +flatName :: MemberId+flatName = MemberId "flat"+ local :: Nat -> Exp local = Local . LocalId @@ -359,7 +463,7 @@   Object $ Map.fromList     [ (mem "id", Integer $ fromIntegral n)     , (mem "moduleId", Integer $ fromIntegral m)-    , (mem "name", String $ show q)+    , (mem "name", String $ prettyShow q)     , (mem "fixity", litfixity fx)]   where     mem = MemberId@@ -372,11 +476,11 @@       , (mem "prec", litPrec $ fixityLevel fx)]      -- TODO this will probably not work well together with the necessary FFI bindings-    litAssoc NonAssoc   = String "NonAssoc"-    litAssoc LeftAssoc  = String "LeftAssoc"-    litAssoc RightAssoc = String "RightAssoc"+    litAssoc NonAssoc   = String "non-assoc"+    litAssoc LeftAssoc  = String "left-assoc"+    litAssoc RightAssoc = String "right-assoc" -    litPrec Unrelated   = String "Unrelated"+    litPrec Unrelated   = String "unrelated"     litPrec (Related l) = Integer l  --------------------------------------------------@@ -434,4 +538,6 @@   , "primATan2"   , "primShowQName"   , "primQNameEquality"+  , "primQNameLess"+  , "primQNameFixity"   ]
src/full/Agda/Compiler/JS/Pretty.hs view
@@ -4,8 +4,10 @@ import Data.List ( intercalate ) import Data.Set ( Set, toList, singleton, insert, member ) import Data.Map ( Map, toAscList, empty, null )+import Text.Regex.TDFA (makeRegex, matchTest, Regex)  import Agda.Syntax.Common ( Nat )+import Agda.Utils.Hash  import Agda.Compiler.JS.Syntax hiding (exports) @@ -56,7 +58,7 @@   pretty n i (LocalId x) = "x" ++ show (n - x - 1)  instance Pretty GlobalId where-  pretty n i (GlobalId m) = intercalate "_" m+  pretty n i (GlobalId m) = variableName $ intercalate "_" m  instance Pretty MemberId where   pretty n i (MemberId s) = "\"" ++ unescapes s ++ "\""@@ -99,13 +101,14 @@ modname :: GlobalId -> String modname (GlobalId ms) = "\"" ++ intercalate "." ms ++ "\"" + exports :: Nat -> Int -> Set [MemberId] -> [Export] -> String exports n i lss [] = ""-exports n i lss (Export ls _ e : es) | member (init ls) lss =+exports n i lss (Export ls e : es) | member (init ls) lss =   "exports[" ++ intercalate "][" (pretties n i ls) ++ "] = " ++ pretty n (i+1) e ++ ";" ++ br i ++   exports n i (insert ls lss) es-exports n i lss (Export ls isCoind e : es) | otherwise =-  exports n i lss (Export (init ls) False (Object empty) : Export ls isCoind e : es)+exports n i lss (Export ls e : es) | otherwise =+  exports n i lss (Export (init ls) (Object empty) : Export ls e : es)  instance Pretty Module where   pretty n i (Module m es ex) =@@ -118,3 +121,15 @@             ["var agdaRTS = require(\"agda-rts\");"] ++             ["var " ++ pretty n (i+1) e ++ " = require(" ++ modname e ++ ");"             | e <- js]++variableName :: String -> String+variableName s = if isValidJSIdent s then "z_" ++ s else "h_" ++ show (hashString s)++-- | Check if a string is a valid JS identifier. The check ignores keywords+-- as we prepend z_ to our identifiers. The check+-- is conservative and may not admit all valid JS identifiers.+isValidJSIdent :: String -> Bool+isValidJSIdent s = matchTest regex s+  where+    regex :: Regex+    regex = makeRegex "^[a-zA-Z_$][0-9a-zA-Z_$]*$"
src/full/Agda/Compiler/JS/Substitution.hs view
@@ -2,9 +2,9 @@  import Prelude hiding ( map, lookup ) import Data.Map ( empty, unionWith, singleton, findWithDefault )-import qualified Data.Map as M ( map )+import qualified Data.Map as Map import Data.List ( genericIndex )-import qualified Data.List as L ( map )+import qualified Data.List as List  import Agda.Syntax.Common ( Nat ) import Agda.Compiler.JS.Syntax@@ -17,8 +17,8 @@ map :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp map m f (Local i)       = f m i map m f (Lambda i e)    = Lambda i (map (m + i) f e)-map m f (Object o)      = Object (M.map (map m f) o)-map m f (Apply e es)    = Apply (map m f e) (L.map (map m f) es)+map m f (Object o)      = Object (Map.map (map m f) o)+map m f (Apply e es)    = Apply (map m f e) (List.map (map m f) es) map m f (Lookup e l)    = Lookup (map m f e) l map m f (If e e' e'')   = If (map m f e) (map m f e') (map m f e'') map m f (PreOp op e)    = PreOp op (map m f e)@@ -54,8 +54,8 @@ map' :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp map' m f (Local i)       = f m i map' m f (Lambda i e)    = Lambda i (map' (m + i) f e)-map' m f (Object o)      = Object (M.map (map' m f) o)-map' m f (Apply e es)    = apply (map' m f e) (L.map (map' m f) es)+map' m f (Object o)      = Object (Map.map (map' m f) o)+map' m f (Apply e es)    = apply (map' m f e) (List.map (map' m f) es) map' m f (Lookup e l)    = lookup (map' m f e) l map' m f (If e e' e'')   = If (map' m f e) (map' m f e') (map' m f e'') map' m f (PreOp op e)    = PreOp op (map' m f e)@@ -84,10 +84,10 @@  self :: Exp -> Exp -> Exp self e (Self)         = e-self e (Object o)     = Object (M.map (self e) o)+self e (Object o)     = Object (Map.map (self e) o) self e (Apply f es)   = case (self e f) of   (Lambda n g) -> self e (subst' n es g)-  g            -> Apply g (L.map (self e) es)+  g            -> Apply g (List.map (self e) es) self e (Lookup f l)   = lookup (self e f) l self e (If f g h)     = If (self e f) (self e g) (self e h) self e (BinOp f op g) = BinOp (self e f) op (self e g)
src/full/Agda/Compiler/JS/Syntax.hs view
@@ -2,8 +2,10 @@  module Agda.Compiler.JS.Syntax where +import Data.Map ( Map )+import qualified Data.Map as Map+ import Data.Typeable ( Typeable )-import Data.Map ( Map, fold ) import Data.Set ( Set, empty, singleton, union )  import Agda.Syntax.Common ( Nat )@@ -47,7 +49,7 @@ -- The top-level compilation unit is a module, which names -- the GId of its exports, and a list of definitions -data Export = Export { expName :: [MemberId], isCoind :: Bool, defn :: Exp }+data Export = Export { expName :: [MemberId], defn :: Exp }   deriving (Typeable, Show)  data Module = Module { modName :: GlobalId, exports :: [Export], postscript :: Maybe Exp }@@ -65,10 +67,10 @@   uses = foldr (union . uses) empty  instance Uses a => Uses (Map k a) where-  uses = fold (union . uses) empty+  uses = Map.foldr (union . uses) empty  instance Uses Exp where-  uses (Object o)     = fold (union . uses) empty o+  uses (Object o)     = Map.foldr (union . uses) empty o   uses (Apply e es)   = foldr (union . uses) (uses e) es   uses (Lookup e l)   = uses' e [l] where       uses' Self         ls = singleton ls@@ -80,7 +82,7 @@   uses e              = empty  instance Uses Export where-  uses (Export _ _ e) = uses e+  uses (Export _ e) = uses e  -- All global ids @@ -91,7 +93,7 @@   globals = foldr (union . globals) empty  instance Globals a => Globals (Map k a) where-  globals = fold (union . globals) empty+  globals = Map.foldr (union . globals) empty  instance Globals Exp where   globals (Global i) = singleton i@@ -105,7 +107,7 @@   globals _ = empty  instance Globals Export where-  globals (Export _ _ e) = globals e+  globals (Export _ e) = globals e  instance Globals Module where   globals (Module m es _) = globals es
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  module Agda.Compiler.MAlonzo.Compiler where @@ -21,6 +20,7 @@ import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable hiding (for)+import Data.Monoid hiding ((<>))  import Numeric.IEEE @@ -34,9 +34,12 @@ import Agda.Compiler.MAlonzo.Misc import Agda.Compiler.MAlonzo.Pretty import Agda.Compiler.MAlonzo.Primitives+import Agda.Compiler.MAlonzo.HaskellTypes+import Agda.Compiler.MAlonzo.Pragmas import Agda.Compiler.ToTreeless import Agda.Compiler.Treeless.Unused import Agda.Compiler.Treeless.Erase+import Agda.Compiler.Backend  import Agda.Interaction.FindFile import Agda.Interaction.Imports@@ -60,6 +63,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Level (reallyUnLevelView)+import Agda.TypeChecking.Warnings  import Agda.TypeChecking.CompiledClause @@ -74,6 +78,7 @@ import qualified Agda.Utils.IO.UTF8 as UTF8 import qualified Agda.Utils.HashMap as HMap import Agda.Utils.Singleton+import Agda.Utils.Size import Agda.Utils.Tuple  import Paths_Agda@@ -81,28 +86,103 @@ #include "undefined.h" import Agda.Utils.Impossible -compilerMain :: IsMain -> Interface -> TCM ()-compilerMain isMain i =-  inCompilerEnv i $ do-    doCompile isMain i $-      \_ -> compile-    copyRTEModules-    callGHC isMain i+-- The backend callbacks -------------------------------------------------- -compile :: Interface -> TCM ()-compile i = do-  ifM uptodate noComp $ {- else -} do-    yesComp-    writeModule =<< decl <$> curHsMod <*> (definitions =<< curDefs) <*> imports+ghcBackend :: Backend+ghcBackend = Backend ghcBackend'++ghcBackend' :: Backend' GHCOptions GHCOptions GHCModuleEnv IsMain [HS.Decl]+ghcBackend' = Backend'+  { backendName           = "GHC"+  , backendVersion        = Nothing+  , options               = defaultGHCOptions+  , commandLineFlags      = ghcCommandLineFlags+  , isEnabled             = optGhcCompile+  , preCompile            = ghcPreCompile+  , postCompile           = ghcPostCompile+  , preModule             = ghcPreModule+  , postModule            = ghcPostModule+  , compileDef            = ghcCompileDef+  , scopeCheckingSuffices = False+  }++--- Options ---++data GHCOptions = GHCOptions+  { optGhcCompile :: Bool+  , optGhcCallGhc :: Bool+  , optGhcFlags   :: [String]+  }++defaultGHCOptions :: GHCOptions+defaultGHCOptions = GHCOptions+  { optGhcCompile = False+  , optGhcCallGhc = True+  , optGhcFlags   = []+  }++ghcCommandLineFlags :: [OptDescr (Flag GHCOptions)]+ghcCommandLineFlags =+    [ Option ['c']  ["compile", "ghc"] (NoArg enable)+                    "compile program using the GHC backend"+    , Option []     ["ghc-dont-call-ghc"] (NoArg dontCallGHC)+                    "don't call GHC, just write the GHC Haskell files."+    , Option []     ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")+                    "give the flag GHC-FLAG to GHC"+    ]   where-  decl mn ds imp = HS.Module mn [] imp (map fakeDecl (reverse $ iHaskellCode i) ++ ds)-  uptodate = liftIO =<< (isNewerThan <$> outFile_ <*> ifile)-  ifile    = maybe __IMPOSSIBLE__ filePath <$>-               (findInterfaceFile . toTopLevelModuleName =<< curMName)-  noComp   = reportSLn "compile.ghc" 2 . (++ " : no compilation is needed.") . show . A.mnameToConcrete =<< curMName-  yesComp  = reportSLn "compile.ghc" 1 . (`repl` "Compiling <<0>> in <<1>> to <<2>>") =<<-             sequence [show . A.mnameToConcrete <$> curMName, ifile, outFile_] :: TCM ()+    enable      o = pure o{ optGhcCompile = True }+    dontCallGHC o = pure o{ optGhcCallGhc = False }+    ghcFlag f   o = pure o{ optGhcFlags   = optGhcFlags o ++ [f] } +--- Top-level compilation ---++ghcPreCompile :: GHCOptions -> TCM GHCOptions+ghcPreCompile ghcOpts = do+  allowUnsolved <- optAllowUnsolved <$> pragmaOptions+  when allowUnsolved $ genericError $ "Unsolved meta variables are not allowed when compiling."+  return ghcOpts++ghcPostCompile :: GHCOptions -> IsMain -> Map ModuleName IsMain -> TCM ()+ghcPostCompile opts isMain mods = copyRTEModules >> callGHC opts isMain mods++--- Module compilation ---++type GHCModuleEnv = Maybe CoinductionKit++ghcPreModule :: GHCOptions -> ModuleName -> FilePath -> TCM (Recompile GHCModuleEnv IsMain)+ghcPreModule _ m ifile = ifM uptodate noComp yesComp+  where+    uptodate = liftIO =<< isNewerThan <$> outFile_ <*> pure ifile++    noComp = do+      reportSLn "compile.ghc" 2 . (++ " : no compilation is needed.") . show . A.mnameToConcrete =<< curMName+      Skip . hasMainFunction <$> curIF++    yesComp = do+      m   <- show . A.mnameToConcrete <$> curMName+      out <- outFile_+      reportSLn "compile.ghc" 1 $ repl [m, ifile, out] "Compiling <<0>> in <<1>> to <<2>>"+      stImportedModules .= Set.empty  -- we use stImportedModules to accumulate the required Haskell imports+      Recompile <$> coinductionKit++ghcPostModule :: GHCOptions -> GHCModuleEnv -> IsMain -> ModuleName -> [[HS.Decl]] -> TCM IsMain+ghcPostModule _ _ _ _ defs = do+  m      <- curHsMod+  imps   <- imports+  -- Get content of FOREIGN pragmas.+  (headerPragmas, hsImps, code) <- foreignHaskell+  writeModule $ HS.Module m+    (map HS.OtherPragma headerPragmas)+    imps+    (map fakeDecl (hsImps ++ code) ++ concat defs)+  hasMainFunction <$> curIF++ghcCompileDef :: GHCOptions -> GHCModuleEnv -> Definition -> TCM [HS.Decl]+ghcCompileDef _ = definition++-- Compilation ------------------------------------------------------------+ -------------------------------------------------- -- imported modules --   I use stImportedModules in a non-standard way,@@ -110,11 +190,9 @@ --------------------------------------------------  imports :: TCM [HS.ImportDecl]-imports = (++) <$> hsImps <*> imps where-  hsImps :: TCM [HS.ImportDecl]-  hsImps = ((unqualRTE :) . List.map decl . Set.toList .-            Set.insert mazRTE . Set.map HS.ModuleName) <$>-             getHaskellImports+imports = (hsImps ++) <$> imps where+  hsImps :: [HS.ImportDecl]+  hsImps = [unqualRTE, decl mazRTE]    unqualRTE :: HS.ImportDecl   unqualRTE = HS.ImportDecl mazRTE False $ Just $@@ -139,15 +217,6 @@ -- Main compiling clauses -------------------------------------------------- -definitions :: Definitions -> TCM [HS.Decl]-definitions defs = do-  kit <- coinductionKit-  concat <$>-    (mapM (\(_, d) -> definition kit =<< instantiateFull d) $-    -- sort defs to ensure consistent order (see Issue 1900)-     sortDefs defs-    )- -- | Note that the INFINITY, SHARP and FLAT builtins are translated as -- follows (if a 'CoinductionKit' is given): --@@ -172,18 +241,26 @@   reportSDoc "compile.ghc.definition" 10 $     text "Not compiling" <+> prettyTCM q <> text "."   return []-definition kit Defn{defName = q, defType = ty, defCompiledRep = compiled, theDef = d} = do+definition kit Defn{defName = q, defType = ty, theDef = d} = do   reportSDoc "compile.ghc.definition" 10 $ vcat     [ text "Compiling" <+> prettyTCM q <> text ":"     , nest 2 $ text (show d)     ]+  pragma <- getHaskellPragma q   checkTypeOfMain q ty $ do     infodecl q <$> case d of -      _ | Just (HsDefn hsty hs) <- compiledHaskell compiled -> do+      _ | Just (HsDefn r hs) <- pragma -> setCurrentRange r $ do         -- Make sure we have imports for all names mentioned in the type.-        ty <- normalise ty+        hsty <- haskellType q+        ty   <- normalise ty         sequence_ [ xqual x (HS.Ident "_") | x <- Set.toList (namesIn ty) ]++        -- Check that the function isn't INLINE (since that will make this+        -- definition pointless).+        inline <- (^. funInline) . theDef <$> getConstInfo q+        when inline $ warning $ UselessInline q+         return $ fbWithType hsty (fakeExp hs)        -- Special treatment of coinductive builtins.@@ -224,47 +301,56 @@                                  emptyBinds]           ] -      Axiom{} -> return $ fb axiomErr+      Axiom{} -> do+        ar <- typeArity ty+        return $ [ compiledTypeSynonym q ty ar | Just (HsType r ty) <- [pragma] ] +++                 fb axiomErr       Primitive{ primName = s } -> fb <$> primBody s -      Function{} -> function (exportHaskell compiled) $ functionViaTreeless q+      Function{} -> function pragma $ functionViaTreeless q        Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs }-        | Just (HsType ty) <- compiledHaskell compiled -> do-        ccscov <- ifM (noCheckCover q) (return []) $ do-            ccs <- List.concat <$> mapM checkConstructorType cs-            cov <- checkCover q ty (np + ni) cs-            return $ ccs ++ cov-        return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccscov+        | Just (HsData r ty hsCons) <- pragma -> setCurrentRange r $ do+        computeErasedConstructorArgs q+        ccscov <- constructorCoverageCode q (np + ni) cs ty hsCons+        cds <- mapM compiledcondecl cs+        return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) +++                 [compiledTypeSynonym q ty np] ++ cds ++ ccscov       Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs } -> do         computeErasedConstructorArgs q         (ars, cds) <- unzip <$> mapM condecl cs         return $ tvaldecl q (dataInduction d) (List.maximum (np:ars) - np) (np + ni) cds cl       Constructor{} -> return []+      Record{ recPars = np, recClause = cl, recConHead = con }+        | Just (HsData r ty hsCons) <- pragma -> setCurrentRange r $ do+        let cs = [conName con]+        computeErasedConstructorArgs q+        ccscov <- constructorCoverageCode q np cs ty hsCons+        cds <- mapM compiledcondecl cs+        return $ tvaldecl q Inductive 0 np [] (Just __IMPOSSIBLE__) +++                 [compiledTypeSynonym q ty np] ++ cds ++ ccscov       Record{ recClause = cl, recConHead = con, recFields = flds } -> do         computeErasedConstructorArgs q         let c = conName con         let noFields = length flds         let ar = I.arity ty         cd <- snd <$> condecl c-  --       cd <- case c of-  --         Nothing -> return $ cdecl q noFields-  --         Just c  -> snd <$> condecl c         return $ tvaldecl q Inductive noFields ar [cd] cl-      AbstractDefn -> __IMPOSSIBLE__+      AbstractDefn{} -> __IMPOSSIBLE__   where-  function :: Maybe HaskellExport -> TCM [HS.Decl] -> TCM [HS.Decl]+  function :: Maybe HaskellPragma -> TCM [HS.Decl] -> TCM [HS.Decl]   function mhe fun = do     ccls <- mkwhere <$> fun     case mhe of-      Nothing -> return ccls-      Just (HsExport t name) -> do+      Just (HsExport r name) -> do+        t <- setCurrentRange r $ haskellType q         let tsig :: HS.Decl             tsig = HS.TypeSig [HS.Ident name] (fakeType t)              def :: HS.Decl             def = HS.FunBind [HS.Match (HS.Ident name) [] (HS.UnGuardedRhs (hsVarUQ $ dname q)) emptyBinds]         return ([tsig,def] ++ ccls)+      _ -> return ccls    functionViaTreeless :: QName -> TCM [HS.Decl]   functionViaTreeless q = caseMaybeM (toTreeless q) (pure []) $ \ treeless -> do@@ -314,8 +400,16 @@                                 (HS.UnGuardedRhs $ e) emptyBinds]]    axiomErr :: HS.Exp-  axiomErr = rtmError $ "postulate evaluated: " ++ show (A.qnameToConcrete q)+  axiomErr = rtmError $ "postulate evaluated: " ++ prettyShow q +constructorCoverageCode :: QName -> Int -> [QName] -> HaskellType -> [HaskellCode] -> TCM [HS.Decl]+constructorCoverageCode q np cs hsTy hsCons = do+  checkConstructorCount q cs hsCons+  ifM (noCheckCover q) (return []) $ do+    ccs <- List.concat <$> zipWithM checkConstructorType cs hsCons+    cov <- checkCover q hsTy np cs hsCons+    return $ ccs ++ cov+ -- | Environment for naming of local variables. --   Invariant: @reverse ccCxt ++ ccNameSupply@ data CCEnv = CCEnv@@ -356,24 +450,23 @@ intros n cont = freshNames n $ \xs ->   local (mapContext (reverse xs ++)) $ cont xs -checkConstructorType :: QName -> TCM [HS.Decl]-checkConstructorType q = do-  Just (HsDefn ty hs) <- compiledHaskell . defCompiledRep <$> getConstInfo q+checkConstructorType :: QName -> HaskellCode -> TCM [HS.Decl]+checkConstructorType q hs = do+  ty <- haskellType q   return [ HS.TypeSig [unqhname "check" q] $ fakeType ty          , HS.FunBind [HS.Match (unqhname "check" q) []                                 (HS.UnGuardedRhs $ fakeExp hs) emptyBinds]          ] -checkCover :: QName -> HaskellType -> Nat -> [QName] -> TCM [HS.Decl]-checkCover q ty n cs = do+checkCover :: QName -> HaskellType -> Nat -> [QName] -> [HaskellCode] -> TCM [HS.Decl]+checkCover q ty n cs hsCons = do   let tvs = [ "a" ++ show i | i <- [1..n] ]-      makeClause c = do+      makeClause c hsc = do         a <- erasedArity c-        Just (HsDefn _ hsc) <- compiledHaskell . defCompiledRep <$> getConstInfo c         let pat = HS.PApp (HS.UnQual $ HS.Ident hsc) $ replicate a HS.PWildCard         return $ HS.Alt pat (HS.UnGuardedRhs $ HS.unit_con) emptyBinds -  cs <- mapM makeClause cs+  cs <- zipWithM makeClause cs hsCons   let rhs = case cs of               [] -> fakeExp "()" -- There is no empty case statement in Haskell               _  -> HS.Case (HS.Var $ HS.UnQual $ HS.Ident "x") cs@@ -396,10 +489,11 @@     return $ hsVarUQ x   T.TApp (T.TDef f) ts -> do     used <- lift $ getCompiledArgUse f+    isCompiled <- lift $ isJust <$> getHaskellPragma f  -- #2248: no unused argument pruning for COMPILE'd functions     let given   = length ts         needed  = length used         missing = drop given used-    if any not used+    if not isCompiled && any not used       then if any not missing then term (etaExpand (needed - given) tm0) else do         f <- lift $ HS.Var <$> xhqn "du" f  -- used stripped function         f `apps` [ t | (t, True) <- zip ts $ used ++ repeat True ]@@ -542,7 +636,7 @@   rteCon "QName" `apps`   [ hsTypedInt n   , hsTypedInt m-  , HS.Lit $ HS.String $ show x+  , HS.Lit $ HS.String $ prettyShow x   , rteCon "Fixity" `apps`     [ litAssoc (fixityAssoc fx)     , litPrec  (fixityLevel fx) ] ]@@ -585,6 +679,20 @@ cdecl q n = HS.ConDecl (unqhname "C" q)             [ HS.TyVar $ ihname "a" i | i <- [0 .. n - 1] ] +compiledcondecl :: QName -> TCM HS.Decl+compiledcondecl q = do+  (ar, np) <- conArityAndPars q+  hsCon <- fromMaybe __IMPOSSIBLE__ <$> getHaskellConstructor q+  let patVars = map (HS.PVar . ihname "a") [0 .. ar - 1]+  return $ HS.PatSyn (HS.PApp (HS.UnQual $ unqhname "C" q) patVars) (HS.PApp (hsName hsCon) patVars)++compiledTypeSynonym :: QName -> String -> Nat -> HS.Decl+compiledTypeSynonym q hsT arity =+  HS.TypeDecl (unqhname "T" q) (map HS.UnkindedVar vs)+              (foldl HS.TyApp (HS.FakeType hsT) $ map HS.TyVar vs)+  where+    vs = [ ihname "a" i | i <- [0 .. arity - 1]]+ tvaldecl :: QName          -> Induction             -- ^ Is the type inductive or coinductive?@@ -640,6 +748,7 @@ -- functions. hsCastApp :: HS.Exp -> HS.Exp hsCastApp (HS.Lambda ps b) = HS.Lambda ps (hsCastApp b)+hsCastApp (HS.Let bs e) = HS.Let bs $ hsCastApp e hsCastApp (HS.Case sc bs) = HS.Case (hsCastApp sc) (map (hsMapAlt hsCastApp) bs) hsCastApp (HS.InfixApp e1 op e2) = HS.InfixApp (hsCastApp e1) op (hsCastApp e2) hsCastApp e =@@ -680,6 +789,7 @@         , "ScopedTypeVariables"         , "NoMonomorphismRestriction"         , "Rank2Types"+        , "PatternSynonyms"         ]  @@ -701,35 +811,42 @@ outFile_ :: TCM FilePath outFile_ = outFile =<< curHsMod -callGHC :: IsMain -> Interface -> TCM ()-callGHC modIsMain i = do-  setInterface i-  mdir          <- compileDir-  hsmod         <- prettyPrint <$> curHsMod-  MName agdaMod <- curMName-  let outputName = case agdaMod of+callGHC :: GHCOptions -> IsMain -> Map ModuleName IsMain -> TCM ()+callGHC opts modIsMain mods = do+  mdir    <- compileDir+  hsmod   <- prettyPrint <$> curHsMod+  agdaMod <- curMName+  let outputName = case mnameToList agdaMod of         [] -> __IMPOSSIBLE__         ms -> last ms   (mdir, fp) <- outFile' =<< curHsMod-  opts       <- optGhcFlags <$> commandLineOptions+  let ghcopts = optGhcFlags opts +  let modIsReallyMain = fromMaybe __IMPOSSIBLE__ $ Map.lookup agdaMod mods+      isMain = mappend modIsMain modIsReallyMain  -- both need to be IsMain++  -- Warn if no main function and not --no-main+  when (modIsMain /= isMain) $+    genericWarning =<< fsep (pwords "No main function defined in" ++ [prettyTCM agdaMod <> text "."] +++                             pwords "Use --no-main to suppress this warning.")+   let overridableArgs =         [ "-O"] ++-        (if modIsMain == IsMain then ["-o", mdir </> show (nameConcrete outputName)] else []) +++        (if isMain == IsMain then ["-o", mdir </> show (nameConcrete outputName)] else []) ++         [ "-Werror"]       otherArgs       =         [ "-i" ++ mdir] ++-        (if modIsMain == IsMain then ["-main-is", hsmod] else []) +++        (if isMain == IsMain then ["-main-is", hsmod] else []) ++         [ fp         , "--make"         , "-fwarn-incomplete-patterns"         , "-fno-warn-overlapping-patterns"         ]-      args     = overridableArgs ++ opts ++ otherArgs+      args     = overridableArgs ++ ghcopts ++ otherArgs       compiler = "ghc"    -- Note: Some versions of GHC use stderr for progress reports. For   -- those versions of GHC we don't print any progress information   -- unless an error is encountered.-  doCall <- optGhcCallGhc <$> commandLineOptions+  let doCall = optGhcCallGhc opts   callCompiler doCall compiler args
src/full/Agda/Compiler/MAlonzo/Encode.hs view
@@ -8,7 +8,7 @@  import Data.Char import Data.Function-import Data.List+import qualified Data.List as List import qualified Agda.Utils.Haskell.Syntax as HS  import Agda.Compiler.MAlonzo.Misc@@ -26,7 +26,7 @@ -- @.@s may be adjacent.  encodeModuleName :: HS.ModuleName -> HS.ModuleName-encodeModuleName (HS.ModuleName s) = HS.ModuleName $ case stripPrefix mazstr s of+encodeModuleName (HS.ModuleName s) = HS.ModuleName $ case List.stripPrefix mazstr s of   Just s' -> mazstr ++ foldr encNamePart "" (splitUp' s')   Nothing -> s   where@@ -66,4 +66,3 @@    enc c r | isOK c    = c : r           | otherwise = escapeChar : shows (fromEnum c) (escapeChar : r)-
+ src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs view
@@ -0,0 +1,167 @@+{-# LANGUAGE CPP #-}++-- | Translating Agda types to Haskell types. Used to ensure that imported+--   Haskell functions have the right type.++module Agda.Compiler.MAlonzo.HaskellTypes where++import Control.Applicative+import Data.Maybe (fromMaybe)++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Primitive (getBuiltinName)+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Free++import Agda.Compiler.MAlonzo.Pragmas+import Agda.Compiler.MAlonzo.Misc+import Agda.Compiler.MAlonzo.Pretty++import Agda.Utils.Except ( MonadError(catchError) )+import Agda.Utils.Pretty (prettyShow)++#include "undefined.h"+import Agda.Utils.Impossible++type HaskellKind = String++hsStar :: HaskellKind+hsStar = "*"++hsKFun :: HaskellKind -> HaskellKind -> HaskellKind+hsKFun k l = "(" ++ k ++ " -> " ++ l ++ ")"++hsFun :: HaskellKind -> HaskellKind -> HaskellKind+hsFun a b = "(" ++ a ++ " -> " ++ b ++ ")"++hsUnit :: HaskellType+hsUnit = "()"++hsVar :: Name -> HaskellType+hsVar x = "x" ++ concatMap encode (prettyShow x)+  where+    okChars = ['a'..'z'] ++ ['A'..'Y'] ++ "_'"+    encode 'Z' = "ZZ"+    encode c+      | c `elem` okChars = [c]+      | otherwise        = "Z" ++ show (fromEnum c)+++hsApp :: String -> [HaskellType] -> HaskellType+hsApp d [] = d+hsApp d as = "(" ++ unwords (d : as) ++ ")"++hsForall :: String -> HaskellType -> HaskellType+hsForall x a = "(forall " ++ x ++ ". " ++ a ++ ")"++notAHaskellType :: Type -> TCM a+notAHaskellType a = typeError . GenericDocError =<< do+  fsep $ pwords "The type" ++ [prettyTCM a] +++         pwords "cannot be translated to a Haskell type."+++getHsType :: QName -> TCM HaskellType+getHsType x = do+  d <- getHaskellPragma x+  let namedType = do+        -- For these builtin types, the type name (xhqn ...) refers to the+        -- generated, but unused, datatype and not the primitive type.+        nat  <- getBuiltinName builtinNat+        int  <- getBuiltinName builtinInteger+        bool <- getBuiltinName builtinBool+        case () of+          _ | Just x `elem` [nat, int] -> return "Integer"+            | Just x == bool           -> return "Bool"+            | otherwise                -> prettyShow <$> xhqn "T" x+  setCurrentRange d $ case d of+    Just HsDefn{} -> return hsUnit+    Just HsType{} -> namedType+    Just HsData{} -> namedType+    _             -> notAHaskellType (El Prop $ Def x [])++getHsVar :: Nat -> TCM HaskellCode+getHsVar i = hsVar <$> nameOfBV i++-- | Note that @Inf a b@, where @Inf@ is the INFINITY builtin, is+-- translated to @<translation of b>@ (assuming that all coinductive+-- builtins are defined).+--+-- Note that if @haskellType@ supported universe polymorphism then the+-- special treatment of INFINITY might not be needed.++haskellType' :: Type -> TCM HaskellType+haskellType' t = fromType t+  where+    err      = notAHaskellType t+    fromArgs = mapM (fromTerm . unArg)+    fromType = fromTerm . unEl+    fromTerm v = do+      v   <- unSpine <$> reduce v+      reportSLn "compile.haskell.type" 50 $ "toHaskellType " ++ show v+      kit <- liftTCM coinductionKit+      case v of+        Var x es -> do+          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+          hsApp <$> getHsVar x <*> fromArgs args+        Def d es | Just d == (nameOfInf <$> kit) ->+          case es of+            [Apply a, Apply b] -> fromTerm (unArg b)+            _                  -> err+        Def d es -> do+          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+          hsApp <$> getHsType d <*> fromArgs args+        Pi a b ->+          if isBinderUsed b  -- Andreas, 2012-04-03.  Q: could we rely on Abs/NoAbs instead of again checking freeness of variable?+          then do+            hsA <- fromType (unDom a)+            underAbstraction a b $ \b ->+              hsForall <$> getHsVar 0 <*> (hsFun hsA <$> fromType b)+          else hsFun <$> fromType (unDom a) <*> fromType (noabsApp __IMPOSSIBLE__ b)+        Con c ci args -> hsApp <$> getHsType (conName c) <*> fromArgs args+        Lam{}      -> err+        Level{}    -> return hsUnit+        Lit{}      -> return hsUnit+        Sort{}     -> return hsUnit+        Shared p   -> fromTerm $ derefPtr p+        MetaV{}    -> err+        DontCare{} -> err++haskellType :: QName -> TCM HaskellType+haskellType q = do+  def <- getConstInfo q+  let np = case theDef def of+             Constructor{ conPars = np } -> np+             _                           -> 0+      underPars 0 a = haskellType' a+      underPars n a = do+        a <- reduce a+        case unEl a of+          Pi a (NoAbs _ b) -> underPars (n - 1) b+          Pi a b  -> underAbstraction a b $ \b -> hsForall <$> getHsVar 0 <*> underPars (n - 1) b+          _       -> __IMPOSSIBLE__+  ty <- underPars np $ defType def+  reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ prettyShow q ++ ": " ++ ty+  return ty++checkConstructorCount :: QName -> [QName] -> [HaskellCode] -> TCM ()+checkConstructorCount d cs hsCons+  | n == hn   = return ()+  | otherwise = do+    let n_forms_are = case hn of+          1 -> "1 Haskell constructor is"+          n -> show n ++ " Haskell constructors are"+        only | hn == 0   = ""+             | hn < n    = "only "+             | otherwise = ""++    genericDocError =<<+      fsep ([prettyTCM d] ++ pwords ("has " ++ show n +++            " constructors, but " ++ only ++ n_forms_are ++ " given [" ++ unwords hsCons ++ "]"))+  where+    n  = length cs+    hn = length hsCons
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -4,7 +4,7 @@  import Control.Monad.State (gets) import Data.Char-import Data.List as List+import qualified Data.List as List import Data.Map as Map import Data.Set as Set import Data.Function@@ -12,6 +12,7 @@ import qualified Agda.Utils.Haskell.Syntax as HS  import Agda.Compiler.Common+import Agda.Compiler.MAlonzo.Pragmas  import Agda.Syntax.Common import Agda.Syntax.Internal@@ -22,6 +23,7 @@ import Agda.Utils.Lens import Agda.Utils.Monad import Agda.Utils.Pretty+import Agda.Utils.Maybe  #include "undefined.h" import Agda.Utils.Impossible@@ -82,11 +84,7 @@ conhqn q = do     cq  <- canonicalName q     def <- getConstInfo cq-    cname <- xhqn "C" cq  -- Do this even if it has custom compiledHaskell code-                          -- to make sure we get the import.-    case (compiledHaskell (defCompiledRep def), theDef def) of-      (Just (HsDefn _ hs), Constructor{}) -> return $ hsName hs-      _                                   -> return cname+    xhqn "C" cq  -- qualify name s by the module of builtin b bltQual :: String -> String -> TCM HS.QName
+ src/full/Agda/Compiler/MAlonzo/Pragmas.hs view
@@ -0,0 +1,200 @@+{-# LANGUAGE CPP #-}+module Agda.Compiler.MAlonzo.Pragmas where++import Control.Applicative+import Control.Monad+import Data.Maybe+import Data.Char+import qualified Data.List as List+import Data.Traversable (traverse)+import Data.Map (Map)+import qualified Data.Map as Map++import Agda.Syntax.Position+import Agda.Syntax.Abstract.Name+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Primitive++import Agda.Utils.Lens+import Agda.Utils.Parser.ReadP+import Agda.Utils.Pretty hiding (char)+import Agda.Utils.String ( ltrim )+import Agda.Utils.Three++import Agda.Compiler.Common++import Agda.Utils.Impossible+#include "undefined.h"++data HaskellPragma+      = HsDefn Range HaskellCode+      | HsType Range HaskellType+      | HsData Range HaskellType [HaskellCode]+      | HsExport Range HaskellCode+  deriving (Show, Eq)++instance HasRange HaskellPragma where+  getRange (HsDefn   r _)   = r+  getRange (HsType   r _)   = r+  getRange (HsData   r _ _) = r+  getRange (HsExport r _)   = r++-- Syntax for Haskell pragmas:+--  HsDefn CODE       "= CODE"+--  HsType TYPE       "= type TYPE"+--  HsData NAME CONS  "= data NAME (CON₁ | .. | CONₙ)"+--  HsExport NAME     "as NAME"+parsePragma :: CompilerPragma -> Either String HaskellPragma+parsePragma (CompilerPragma r s) =+  case parse pragmaP s of+    []  -> Left $ "Failed to parse GHC pragma '" ++ s ++ "'"+    [p] -> Right p+    ps  -> Left $ "Ambiguous parse of pragma '" ++ s ++ "':\n" ++ unlines (map show ps)  -- shouldn't happen+  where+    pragmaP :: ReadP Char HaskellPragma+    pragmaP = choice [ exportP, typeP, dataP, defnP ]++    whitespace = many1 (satisfy isSpace)++    wordsP []     = return ()+    wordsP (w:ws) = skipSpaces *> string w *> wordsP ws++    barP = skipSpaces *> char '|'++    -- quite liberal+    isIdent c = isAlphaNum c || elem c "_.':[]"+    isOp c    = not $ isSpace c || elem c "()"+    hsIdent = fst <$> gather (choice+                [ string "()"+                , many1 (satisfy isIdent)+                , between (char '(') (char ')') (many1 (satisfy isOp))+                ])+    hsCode  = many1 get -- very liberal++    paren = between (skipSpaces *> char '(') (skipSpaces *> char ')')++    notTypeOrData = do+      s <- look+      guard $ not $ any (`List.isPrefixOf` s) ["type", "data"]++    exportP = HsExport r <$ wordsP ["as"]        <* whitespace <*> hsIdent <* skipSpaces+    typeP   = HsType   r <$ wordsP ["=", "type"] <* whitespace <*> hsCode+    dataP   = HsData   r <$ wordsP ["=", "data"] <* whitespace <*> hsIdent <*>+                                                    paren (sepBy (skipSpaces *> hsIdent) barP) <* skipSpaces+    defnP   = HsDefn   r <$ wordsP ["="]         <* whitespace <*  notTypeOrData <*> hsCode++parseHaskellPragma :: CompilerPragma -> TCM HaskellPragma+parseHaskellPragma p = setCurrentRange p $+  case parsePragma p of+    Left err -> genericError err+    Right p  -> return p++getHaskellPragma :: QName -> TCM (Maybe HaskellPragma)+getHaskellPragma q = do+  pragma <- traverse parseHaskellPragma =<< getUniqueCompilerPragma ghcBackendName q+  def <- getConstInfo q+  setCurrentRange pragma $ pragma <$ sanityCheckPragma def pragma++sanityCheckPragma :: Definition -> Maybe HaskellPragma -> TCM ()+sanityCheckPragma _ Nothing = return ()+sanityCheckPragma def (Just HsDefn{}) =+  case theDef def of+    Axiom{}        -> return ()+    Function{}     -> return ()+    AbstractDefn{} -> __IMPOSSIBLE__+    Datatype{}     -> recOrDataErr "data"+    Record{}       -> recOrDataErr "record"+    _              -> typeError $ GenericError "Haskell definitions can only be given for postulates and functions."+    where+      recOrDataErr which =+        typeError $ GenericDocError $+          sep [ text $ "Bad COMPILE GHC pragma for " ++ which ++ " type. Use"+              , text "{-# COMPILE GHC <Name> = data <HsData> (<HsCon1> | .. | <HsConN>) #-}" ]+sanityCheckPragma def (Just HsData{}) =+  case theDef def of+    Datatype{} -> return ()+    Record{}   -> return ()+    _          -> typeError $ GenericError "Haskell data types can only be given for data or record types."+sanityCheckPragma def (Just HsType{}) =+  case theDef def of+    Axiom{} -> return ()+    Datatype{} -> do+      -- We use HsType pragmas for Nat, Int and Bool+      nat  <- getBuiltinName builtinNat+      int  <- getBuiltinName builtinInteger+      bool <- getBuiltinName builtinBool+      unless (Just (defName def) `elem` [nat, int, bool]) err+    _ -> err+  where+    err = typeError $ GenericError "Haskell types can only be given for postulates."+sanityCheckPragma def (Just HsExport{}) =+  case theDef def of+    Function{} -> return ()+    _ -> typeError $ GenericError "Only functions can be exported to Haskell using {-# COMPILE GHC <Name> as <HsName> #-}"++++-- TODO: cache this to avoid parsing the pragma for every constructor+--       occurrence!+getHaskellConstructor :: QName -> TCM (Maybe HaskellCode)+getHaskellConstructor c = do+  c     <- canonicalName c+  cDef  <- theDef <$> getConstInfo c+  true  <- getBuiltinName builtinTrue+  false <- getBuiltinName builtinFalse+  case cDef of+    _ | Just c == true  -> return $ Just "True"+      | Just c == false -> return $ Just "False"+    Constructor{conData = d} -> do+      mp <- getHaskellPragma d+      case mp of+        Just (HsData _ _ hsCons) -> do+          cons <- defConstructors . theDef <$> getConstInfo d+          return $ Just $ fromMaybe __IMPOSSIBLE__ $ lookup c $ zip cons hsCons+        _ -> return Nothing+    _ -> return Nothing++-- | Get content of @FOREIGN GHC@ pragmas, sorted by 'KindOfForeignCode':+--   file header pragmas, import statements, rest.+foreignHaskell :: TCM ([String], [String], [String])+foreignHaskell = partitionByKindOfForeignCode classifyForeign+    . map getCode . fromMaybe [] . Map.lookup ghcBackendName . iForeignCode <$> curIF+  where getCode (ForeignCode _ code) = code++-- | Classify @FOREIGN@ Haskell code.+data KindOfForeignCode+  = ForeignFileHeaderPragma+      -- ^ A pragma that must appear before the module header.+  | ForeignImport+      -- ^ An import statement.  Must appear right after the module header.+  | ForeignOther+      -- ^ The rest.  To appear after the import statements.++-- | Classify a @FOREIGN GHC@ declaration.+classifyForeign :: String -> KindOfForeignCode+classifyForeign s0 = case ltrim s0 of+  s | List.isPrefixOf "import " s -> ForeignImport+  s | List.isPrefixOf "{-#" s -> classifyPragma $ drop 3 s+  _ -> ForeignOther++-- | Classify a Haskell pragma into whether it is a file header pragma or not.+classifyPragma :: String -> KindOfForeignCode+classifyPragma s0 = case ltrim s0 of+  s | any (`List.isPrefixOf` s) fileHeaderPragmas -> ForeignFileHeaderPragma+  _ -> ForeignOther+  where+  fileHeaderPragmas =+    [ "LANGUAGE"+    , "OPTIONS_GHC"+    , "INCLUDE"+    ]++-- | Partition a list by 'KindOfForeignCode' attribute.+partitionByKindOfForeignCode :: (a -> KindOfForeignCode) -> [a] -> ([a], [a], [a])+partitionByKindOfForeignCode f = partition3 $ toThree . f+  where+  toThree = \case+    ForeignFileHeaderPragma -> One+    ForeignImport           -> Two+    ForeignOther            -> Three
src/full/Agda/Compiler/MAlonzo/Pretty.hs view
@@ -31,6 +31,8 @@ instance Pretty HS.ModulePragma where   pretty (HS.LanguagePragma ps) =     text "{-#" <+> text "LANGUAGE" <+> fsep (punctuate comma $ map pretty ps) <+> text "#-}"+  pretty (HS.OtherPragma p) =+    text p  instance Pretty HS.ImportDecl where   pretty HS.ImportDecl{ HS.importModule    = m@@ -65,6 +67,7 @@       sep [ hsep (punctuate comma (map pretty fs)) <+> text "::"           , nest 2 $ pretty t ]     HS.FunBind ms -> vcat $ map pretty ms+    HS.PatSyn p1 p2 -> sep [ text "pattern" <+> pretty p1 <+> text "=" <+> pretty p2 ]     HS.FakeDecl s -> text s  instance Pretty HS.ConDecl where@@ -211,4 +214,3 @@ prettyQName :: HS.QName -> Doc prettyQName (HS.Qual m x)           = pretty m <> text "." <> pretty x prettyQName (HS.UnQual x)           = pretty x-
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -4,9 +4,9 @@  import Control.Monad.State import Data.Char-import Data.List as L+import qualified Data.List as List import Data.Map as M-import qualified Agda.Utils.Haskell.Syntax as HS+import Data.Maybe  import Agda.Compiler.Common import Agda.Compiler.ToTreeless@@ -21,34 +21,31 @@ import Agda.TypeChecking.Primitive import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty-import Agda.Utils.Monad++import Agda.Utils.Either import Agda.Utils.Except+import Agda.Utils.Lens+import Agda.Utils.Monad import qualified Agda.Utils.HashMap as HMap+import qualified Agda.Utils.Haskell.Syntax as HS  #include "undefined.h" import Agda.Utils.Impossible -{- OLD--- | Check that the main function has type IO a, for some a.-checkTypeOfMain :: QName -> Type -> TCM ()-checkTypeOfMain q ty-  | show (qnameName q) /= "main" = return ()-  | otherwise = do-    Def io _ <- ignoreSharing <$> primIO-    ty <- normalise ty-    case ignoreSharing $ unEl ty of-      Def d _ | d == io -> return ()-      _                 -> do-        err <- fsep $-          pwords "The type of main should be" ++-          [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty]-        typeError $ GenericError $ show err--}+isMainFunction :: QName -> Bool+isMainFunction q = "main" == show (nameConcrete $ qnameName q) +hasMainFunction :: Interface -> IsMain+hasMainFunction i+  | List.any isMainFunction names = IsMain+  | otherwise                     = NotMain+  where+    names = HMap.keys $ iSignature i ^. sigDefinitions+ -- | Check that the main function has type IO a, for some a. checkTypeOfMain :: QName -> Type -> TCM [HS.Decl] -> TCM [HS.Decl] checkTypeOfMain q ty ret-  | show (nameConcrete $ qnameName q) /= "main" = ret+  | not (isMainFunction q) = ret   | otherwise = do     Def io _ <- ignoreSharing <$> primIO     ty <- normalise ty@@ -84,12 +81,12 @@     -- primitives only used by GuardsToPrims transformation, which MAlonzo doesn't use     PIf   -> __IMPOSSIBLE__ --- Haskell modules to be imported for BUILT-INs+-- | Haskell modules to be imported for BUILT-INs importsForPrim :: TCM [HS.ModuleName] importsForPrim =   fmap (++ [HS.ModuleName "Data.Text"]) $   xForPrim $-  L.map (\(s, ms) -> (s, return (L.map HS.ModuleName ms))) $+  List.map (\(s, ms) -> (s, return (List.map HS.ModuleName ms))) $   [ "CHAR"              |-> ["Data.Char"]   , "primIsAlpha"       |-> ["Data.Char"]   , "primIsAscii"       |-> ["Data.Char"]@@ -116,14 +113,14 @@       getName (Builtin (Lam _ b))    = getName (Builtin $ unAbs b)       getName (Builtin _)            = __IMPOSSIBLE__       getName (Prim (PrimFun q _ _)) = q-  concat <$> sequence [ maybe (return []) id $ L.lookup s table+  concat <$> sequence [ fromMaybe (return []) $ List.lookup s table                         | (s, def) <- bs, getName def `elem` qs ]  --- Definition bodies for primitive functions+-- | Definition bodies for primitive functions primBody :: String -> TCM HS.Exp-primBody s = maybe unimplemented (either (hsVarUQ . HS.Ident) id <$>) $-             L.lookup s $+primBody s = maybe unimplemented (fromRight (hsVarUQ . HS.Ident) <$>) $+             List.lookup s $   [   -- Integer functions     "primIntegerPlus"    |-> binAsis "(+)" "Integer"@@ -200,7 +197,7 @@   , "primStringFromList" |-> return "Data.Text.pack"   , "primStringAppend"   |-> binAsis "Data.Text.append" "Data.Text.Text"   , "primStringEquality" |-> rel "(==)" "Data.Text.Text"-  , "primShowString"     |-> return "id"+  , "primShowString"     |-> return "(Data.Text.pack . show :: Data.Text.Text -> Data.Text.Text)"    -- Reflection   , "primQNameEquality"   |-> rel "(==)" "MAlonzo.RTE.QName"
src/full/Agda/Compiler/ToTreeless.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  module Agda.Compiler.ToTreeless   ( toTreeless@@ -44,6 +43,7 @@ import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Lens+import Agda.Utils.Pretty (prettyShow) import qualified Agda.Utils.Pretty as P  #include "undefined.h"@@ -63,7 +63,7 @@  toTreeless' :: QName -> TCM C.TTerm toTreeless' q =-  flip fromMaybeM (getTreeless q) $ verboseBracket "treeless.convert" 20 ("compiling " ++ show q) $ do+  flip fromMaybeM (getTreeless q) $ verboseBracket "treeless.convert" 20 ("compiling " ++ prettyShow q) $ do     Just cc <- defCompiled <$> getConstInfo q     unlessM (alwaysInline q) $ setTreeless q (C.TDef q)       -- so recursive inlining doesn't loop, but not for always inlined@@ -81,7 +81,7 @@ ccToTreeless :: QName -> CC.CompiledClauses -> TCM C.TTerm ccToTreeless q cc = do   let pbody b = pbody' "" b-      pbody' suf b = sep [ text (show q ++ suf) <+> text "=", nest 2 $ prettyPure b ]+      pbody' suf b = sep [ text (prettyShow q ++ suf) <+> text "=", nest 2 $ prettyPure b ]   v <- ifM (alwaysInline q) (return 20) (return 0)   reportSDoc "treeless.convert" (30 + v) $ text "-- compiled clauses of" <+> prettyTCM q $$ nest 2 (prettyPure cc)   body <- casetreeTop cc@@ -168,9 +168,11 @@ casetree cc = do   case cc of     CC.Fail -> return C.tUnreachable-    CC.Done xs v -> lambdasUpTo (length xs) $ do-        v <- lift $ putAllowedReductions [ProjectionReductions, CopatternReductions] $ normalise v-        substTerm v+    CC.Done xs v -> withContextSize (length xs) $ do+      -- Issue 2469: Body context size (`length xs`) may be smaller than current context size+      -- if some arguments are not used in the body.+      v <- lift (putAllowedReductions [ProjectionReductions, CopatternReductions] $ normalise v)+      substTerm v     CC.Case _ (CC.Branches True _ _ Just{}) -> __IMPOSSIBLE__       -- Andreas, 2016-06-03, issue #1986: Ulf: "no catch-all for copatterns!"       -- lift $ do@@ -231,32 +233,49 @@   local (\e -> e { ccCatchAll = Just 0, ccCxt = shift 1 (ccCxt e) }) $ do     C.mkLet def <$> cont -lambdasUpTo :: Int -> CC C.TTerm -> CC C.TTerm-lambdasUpTo n cont = do+-- | Shrinks or grows the context to the given size.+-- Does not update the catchAll expression, the catchAll expression+-- MUST NOT be used inside `cont`.+withContextSize :: Int -> CC C.TTerm -> CC C.TTerm+withContextSize n cont = do   diff <- (n -) . length <$> asks ccCxt -  if diff <= 0 then cont -- no new lambdas needed+  if diff <= 0+  then do+    local (\e -> e { ccCxt = shift diff $ drop (-diff) (ccCxt e)}) $+      C.mkTApp <$> cont <*> pure [C.TVar i | i <- reverse [0..(-diff - 1)]]   else do-    catchAll <- asks ccCatchAll-     local (\e -> e { ccCxt = [0..(diff - 1)] ++ shift diff (ccCxt e)}) $ do       createLambdas diff <$> do-        case catchAll of-          Just catchAll' -> do-            -- the catch all doesn't know about the additional lambdas, so just directly-            -- apply it again to the newly introduced lambda arguments.-            -- we also bind the catch all to a let, to avoid code duplication-            local (\e -> e { ccCatchAll = Just 0-                           , ccCxt = shift 1 (ccCxt e)}) $ do-              let catchAllArgs = map C.TVar $ reverse [0..(diff - 1)]-              C.mkLet (C.mkTApp (C.TVar $ catchAll' + diff) catchAllArgs)-                <$> cont-          Nothing -> cont+        cont   where createLambdas :: Int -> C.TTerm -> C.TTerm         createLambdas 0 cont' = cont'         createLambdas i cont' | i > 0 = C.TLam (createLambdas (i - 1) cont')         createLambdas _ _ = __IMPOSSIBLE__ +-- | Adds lambdas until the context has at least the given size.+-- Updates the catchAll expression to take the additional lambdas into account.+lambdasUpTo :: Int -> CC C.TTerm -> CC C.TTerm+lambdasUpTo n cont = do+  diff <- (n -) . length <$> asks ccCxt++  if diff <= 0 then cont -- no new lambdas needed+  else do+    catchAll <- asks ccCatchAll++    withContextSize n $ do+      case catchAll of+        Just catchAll' -> do+          -- the catch all doesn't know about the additional lambdas, so just directly+          -- apply it again to the newly introduced lambda arguments.+          -- we also bind the catch all to a let, to avoid code duplication+          local (\e -> e { ccCatchAll = Just 0+                         , ccCxt = shift 1 (ccCxt e)}) $ do+            let catchAllArgs = map C.TVar $ reverse [0..(diff - 1)]+            C.mkLet (C.mkTApp (C.TVar $ catchAll' + diff) catchAllArgs)+              <$> cont+        Nothing -> cont+ conAlts :: Int -> Map QName (CC.WithArity CC.CompiledClauses) -> CC [C.TAlt] conAlts x br = forM (Map.toList br) $ \ (c, CC.WithArity n cc) -> do   c' <- lift $ canonicalName c@@ -372,6 +391,5 @@       case getRelevance x of         Irrelevant -> True         NonStrict  -> True-        UnusedArg  -> True         Forced{}   -> False -- TODO: would like this to be True         Relevant   -> False
− src/full/Agda/Compiler/Treeless/DelayCoinduction.hs
@@ -1,69 +0,0 @@-{-# LANGUAGE CPP #-}--- | Inserts an additional lambda into all coinductive auxiliary definitions (== target type Inf XX). E.g.:------   f : A -> B -> C -> Inf A---   f = \a b c -> body--- is converted to---   f = \a b c _ -> body------ Assumes that flat/sharp are implemented as follows:------ flat = \x -> x--- sharp = \x -> x ()--module Agda.Compiler.Treeless.DelayCoinduction where--import Control.Applicative--import Agda.Syntax.Internal (Type)-import Agda.Syntax.Abstract.Name (QName)-import Agda.Syntax.Treeless--import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Primitive-import Agda.TypeChecking.Reduce ( instantiateFull, normalise )-import Agda.TypeChecking.Substitute hiding (underLambdas)-import Agda.TypeChecking.Telescope--import Agda.Compiler.Treeless.Subst--import Agda.Utils.Impossible--#include "undefined.h"--delayCoinduction :: TTerm -> Type -> TCM TTerm-delayCoinduction t ty = do-  kit <- coinductionKit-  case kit of-    Just kit -> transform kit t ty-    Nothing -> return t---transform :: CoinductionKit -> TTerm -> Type -> TCM TTerm-transform kit t ty = do-  isInf <- outputIsInf (Just kit) ty-  if isInf then do-      ty <- normalise ty-      TelV tel _ <- telView ty-      -- insert additional lambda-      return $ underLambdas (length $ telToList tel) (TLam . raise 1) t-    else-      return t---outputIsInf :: Maybe CoinductionKit -> Type -> TCM Bool-outputIsInf kit ty = do-  ty <- normalise ty-  tn <- getOutputTypeName ty-  case tn of-    OutputTypeName tn -> return $ Just tn == (nameOfInf <$> kit)-    _ -> return False---underLambdas :: Int -> (TTerm -> TTerm) -> TTerm -> TTerm-underLambdas n cont v = loop n v where-  loop 0 v = cont v-  loop n v = case v of-    TLam b -> TLam $ loop (n-1) b-    _       -> __IMPOSSIBLE__
+ src/full/Agda/Compiler/Treeless/EliminateDefaults.hs view
@@ -0,0 +1,65 @@+{-# LANGUAGE CPP #-}+-- | Eliminates case defaults by adding an alternative for all possible+-- constructors. Literal cases are preserved as-is.+module Agda.Compiler.Treeless.EliminateDefaults where++import Control.Applicative+import Control.Monad+import qualified Data.List as List+import Data.Maybe++import Agda.Syntax.Abstract.Name (QName)+import Agda.Syntax.Treeless+import Agda.Syntax.Literal+import qualified Agda.Syntax.Internal as I++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Primitive+import Agda.TypeChecking.Substitute++import Agda.Compiler.Treeless.Subst++import Agda.Utils.Impossible++#include "undefined.h"++eliminateCaseDefaults :: TTerm -> TCM TTerm+eliminateCaseDefaults = tr+  where+    tr :: TTerm -> TCM TTerm+    tr t = case t of+      TCase sc ct@(CTData qn) def alts | not (isUnreachable def) -> do+        dtCons <- defConstructors . theDef <$> getConstInfo qn+        let missingCons = dtCons List.\\ map aCon alts+        def <- tr def+        newAlts <- forM missingCons $ \con -> do+          Constructor {conArity = ar} <- theDef <$> getConstInfo con+          return $ TACon con ar (TVar ar)++        alts' <- (++ newAlts) <$> mapM (trAlt . raise 1) alts++        return $ TLet def $ TCase (sc + 1) ct tUnreachable alts'+      TCase sc ct def alts -> TCase sc ct <$> tr def <*> mapM trAlt alts++      TVar{}    -> tt+      TDef{}    -> tt+      TCon{}    -> tt+      TPrim{}   -> tt+      TLit{}    -> tt+      TUnit{}   -> tt+      TSort{}   -> tt+      TErased{} -> tt+      TError{}  -> tt++      TLam b                  -> TLam <$> tr b+      TApp a bs               -> TApp <$> tr a <*> mapM tr bs+      TLet e b                -> TLet <$> tr e <*> tr b++      where tt = return t++    trAlt :: TAlt -> TCM TAlt+    trAlt a = case a of+      TAGuard g b -> TAGuard <$> tr g <*> tr b+      TACon q a b -> TACon q a <$> tr b+      TALit l b   -> TALit l <$> tr b
src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs view
@@ -3,7 +3,6 @@ module Agda.Compiler.Treeless.EliminateLiteralPatterns where  import Control.Applicative-import Data.List import Data.Maybe  import Agda.Syntax.Abstract.Name (QName)@@ -49,7 +48,10 @@           litAlt _ _ = __IMPOSSIBLE__       TCase sc t@(CTData dt) def alts -> TCase sc t (tr def) (map trAlt alts)         where-          trAlt a = a { aBody = tr (aBody a) }+          trAlt a = case a of+            TAGuard g b -> TAGuard (tr g) (tr b)+            TACon q a b -> TACon q a (tr b)+            TALit l b   -> TALit l (tr b)       TCase _ _ _ _ -> __IMPOSSIBLE__        TVar{}    -> t
src/full/Agda/Compiler/Treeless/Erase.hs view
@@ -27,15 +27,16 @@ import Agda.Compiler.Treeless.Subst import Agda.Compiler.Treeless.Pretty -import Agda.Utils.Maybe-import Agda.Utils.Impossible-import Agda.Utils.Monad import Agda.Utils.Functor import Agda.Utils.Lens+import Agda.Utils.Maybe import Agda.Utils.Memo+import Agda.Utils.Monad+import Agda.Utils.Pretty (prettyShow) import qualified Agda.Utils.Pretty as P  #include "undefined.h"+import Agda.Utils.Impossible  data ESt = ESt { _funMap  :: Map QName FunInfo                , _typeMap :: Map QName TypeInfo }@@ -173,7 +174,6 @@ erasableR Forced{}   = False    -- TODO: should be True but need to transform clauses erasableR NonStrict  = True erasableR Irrelevant = True-erasableR UnusedArg  = True  erasable :: TypeInfo -> Bool erasable Erasable    = True@@ -191,7 +191,7 @@         is <- mapM (getTypeInfo . snd . dget) tel         return (zipWith (mkR . getRelevance) tel is, t)       h <- if isAbsurdLambdaName q then pure Erasable else getTypeInfo t-      lift $ reportSLn "treeless.opt.erase.info" 50 $ "type info for " ++ show q ++ ": " ++ show rs ++ " -> " ++ show h+      lift $ reportSLn "treeless.opt.erase.info" 50 $ "type info for " ++ prettyShow q ++ ": " ++ show rs ++ " -> " ++ show h       lift $ setErasedConArgs q $ map erasableR rs       return (rs, h) @@ -252,4 +252,3 @@             I.Function{ funClauses = cs } ->               sumTypeInfo <$> mapM (maybe (return Empty) (getTypeInfo . El Prop) . clauseBody) cs             _ -> return NotErasable-
src/full/Agda/Compiler/Treeless/GuardsToPrims.hs view
@@ -4,7 +4,7 @@ {-# LANGUAGE CPP #-} module Agda.Compiler.Treeless.GuardsToPrims ( convertGuards ) where -import Data.List+import qualified Data.List as List   import Agda.Syntax.Abstract.Name (QName)@@ -59,6 +59,6 @@  -- | Split alts into TAGuard alts and other alts. splitAlts :: [TAlt] -> ([TAlt], [TAlt])-splitAlts = partition isGuardAlt+splitAlts = List.partition isGuardAlt   where isGuardAlt (TAGuard _ _) = True         isGuardAlt _ = False
src/full/Agda/Compiler/Treeless/Identity.hs view
@@ -6,7 +6,7 @@ import Data.Foldable (foldMap) import Data.Semigroup import Data.List.NonEmpty (NonEmpty(..))-import Data.List+import qualified Data.List as List  import Agda.Syntax.Treeless import Agda.TypeChecking.Substitute@@ -62,7 +62,7 @@ notId = IdIn []  instance Semigroup IdentityIn where-  IdIn xs <> IdIn ys = IdIn $ intersect xs ys+  IdIn xs <> IdIn ys = IdIn $ List.intersect xs ys  -- Does the function always return one of its arguments unchanged (possibly -- through recursive calls).@@ -99,4 +99,3 @@     goAlt k (TALit _ b)   = go k b     goAlt k (TAGuard _ b) = go k b     goAlt k (TACon _ n b) = go (k + n) b-
src/full/Agda/Compiler/Treeless/Pretty.hs view
@@ -98,8 +98,8 @@               <$> pTerm' 0 a               <*> pTerm' 0 b               <*> pTerm c-  TDef f -> pure $ text (show f)-  TCon c -> pure $ text (show c)+  TDef f -> pure $ pretty f+  TCon c -> pure $ pretty c   TLit l -> pure $ pretty l   TPrim op | isJust (isInfix op) -> pure $ text ("_" ++ opName op ++ "_")            | otherwise -> pure $ text (opName op)@@ -151,4 +151,3 @@   TSort -> pure $ text "Set"   TErased -> pure $ text "_"   TError err -> paren 9 $ pure $ text "error" <+> text (show (show err))-
src/full/Agda/Compiler/Treeless/Simplify.hs view
@@ -6,7 +6,7 @@ import Control.Monad.Reader import Control.Monad.Writer import Data.Traversable (traverse)-import Data.List+import qualified Data.List as List  import Agda.Syntax.Treeless import Agda.Syntax.Internal (Substitution'(..))@@ -55,6 +55,9 @@ underLet :: TTerm -> S a -> S a underLet u = onRewrite (raiseS 1) . onSubst (\rho -> wkS 1 $ u :# rho) +bindVar :: Int -> TTerm -> S a -> S a+bindVar x u = onSubst (inplaceS x u `composeS`)+ rewrite :: TTerm -> S TTerm rewrite t = do   rules <- asks envRewrite@@ -251,10 +254,11 @@     simplAlt x (TALit l b)   = TALit l   <$> maybeAddRewrite x (TLit l) (simpl b)     simplAlt x (TAGuard g b) = TAGuard   <$> simpl g <*> simpl b +    -- If x is already bound we add a rewrite, otherwise we bind x to rhs.     maybeAddRewrite x rhs cont = do       v <- lookupVar x       case v of-        TVar y | x == y -> cont+        TVar y | x == y -> bindVar x rhs $ cont         _ -> addRewrite v rhs cont      isTrue (TCon c) = Just c == true@@ -268,7 +272,7 @@       b_a  <- rewrite' (tOp PLt b a)       b_sa <- rewrite' (tOp PLt b (tOp PAdd (tInt 1) a))       a_b  <- rewrite' (tOp PLt a b)-      if isTrue b_a || isTrue b_sa || isFalse b_a && isFalse a_b+      if isTrue b_a || isTrue b_sa || isFalse a_b         then pure $ tOp PSub a b         else tApp f es @@ -312,7 +316,7 @@         Nothing  -> return $ TCase x CTNat d bs       where         complete bs small (Just upper)-          | null $ [0..upper - 1] \\ small = Just []+          | null $ [0..upper - 1] List.\\ small = Just []         complete (b@(TALit (LitNat _ n) _) : bs) small upper =           (b :) <$> complete bs (n : small) upper         complete (b@(TAGuard (TApp (TPrim PGeq) [TVar y, TLit (LitNat _ j)]) _) : bs) small upper | x == y =@@ -367,12 +371,12 @@  aCancel :: [Atom] -> [Atom] aCancel (a : as)-  | elem (aNeg a) as = aCancel (delete (aNeg a) as)+  | elem (aNeg a) as = aCancel (List.delete (aNeg a) as)   | otherwise        = a : aCancel as aCancel [] = []  sortR :: Ord a => [a] -> [a]-sortR = sortBy (flip compare)+sortR = List.sortBy (flip compare)  aAdd :: Arith -> Arith -> Arith aAdd (a, xs) (b, ys) = (a + b, aCancel $ sortR $ xs ++ ys)@@ -405,4 +409,3 @@  simplArith :: TTerm -> TTerm simplArith = fromArith . toArith-
src/full/Agda/Compiler/Treeless/Subst.hs view
@@ -69,7 +69,7 @@   Occurs a k s <> Occurs b l t = Occurs (a + b) (k <> l) (s <> t)  instance Monoid Occurs where-  mempty = Occurs 0 mempty mempty+  mempty  = Occurs 0 mempty mempty   mappend = (<>)  class HasFree a where
src/full/Agda/Compiler/Treeless/Unused.hs view
@@ -16,13 +16,15 @@ import Agda.Compiler.Treeless.Subst import Agda.Compiler.Treeless.Pretty +import Agda.Utils.Pretty (prettyShow)+ usedArguments :: QName -> TTerm -> TCM [Bool] usedArguments q t = computeUnused q b (replicate n False)   where (n, b) = tLamView t  computeUnused :: QName -> TTerm -> [Bool] -> TCM [Bool] computeUnused q t used = do-  reportSLn "treeless.opt.unused" 50 $ "Unused approximation for " ++ show q ++ ": " +++  reportSLn "treeless.opt.unused" 50 $ "Unused approximation for " ++ prettyShow q ++ ": " ++                                        unwords [ if u then [x] else "_" | (x, u) <- zip ['a'..] used ]   setCompiledArgUse q used   fv <- go t@@ -68,4 +70,3 @@     computeSubst (False : bs) = TErased :# computeSubst bs     computeSubst (True  : bs) = liftS 1 $ computeSubst bs     computeSubst []           = idS-
− src/full/Agda/Compiler/UHC/Bridge.hs
@@ -1,292 +0,0 @@-{-# LANGUAGE CPP                #-}-{-# LANGUAGE DeriveDataTypeable #-}---- | Exports the UHC API, and provides dummy--- definitions if the backend is disabled.-module Agda.Compiler.UHC.Bridge-  ( uhcBackendEnabled--  -- UHC.Util.Pretty-  , PP_Doc-  , putPPFile-  , disp-  , pp--  -- UHC.Util.Serialize-  , Serialize-  , putSerializeFile-  , serialize-  , unserialize--  -- UHC.Light.Compiler.Base.API-  , EHCOpts-  , defaultEHCOpts-  , HsName-  , CTag-  , mkHsName-  , mkHsName1-  , mkUniqueHsName--  -- UHC.Light.Compiler.Core.API-  , CModule-  , CImport-  , CExport-  , CDeclMeta-  , CDataCon-  , CExpr-  , CBind-  , CAlt-  , CPat-  , CPatFld---  , CPatRest--  , mkUnit-  , mkInt-  , mkInteger-  , mkChar-  , mkString-  , mkError-  , mkUndefined-  , mkVar-  , mkLet1Plain-  , mkLet1Strict-  , mkLetRec-  , mkLam-  , mkApp-  , mkBind1-  , mkBind1Nm1-  , mkCTag-  , destructCTag-  , ctagUnit-  , ctagTrue-  , ctagFalse-  , ctagCons-  , ctagNil-  , mkCase-  , mkAlt-  , mkPatCon-  , mkPatRestEmpty-  , mkPatFldBind-  , mkTagTup-  , mkModule-  , mkImport-  , mkExport-  , mkMetaData-  , mkMetaDataCon-  , mkMetaDataConFromCTag-  , mkMain-  , parseExpr-  , printModule-  ) where--#include "undefined.h"-import Agda.Utils.Impossible--import Data.Binary.Put-import Data.Binary.Get-import Data.Typeable--#if defined(UHC_BACKEND)-import UHC.Util.Pretty-import UHC.Util.Serialize-import UHC.Util.ParseUtils-import UHC.Util.ScanUtils-import UU.Scanner.Position--import UHC.Light.Compiler.Core.API-import UHC.Light.Compiler.Base.API-#else---- UHC.Util.Pretty-type PP_Doc = String--class Show a => PP a where-  pp :: a -> PP_Doc--instance PP CExpr where-  pp CExpr_DUMMY = "DUMMY - UHC backend is disabled"--putPPFile :: String -> PP_Doc -> Int -> IO ()-putPPFile = __IMPOSSIBLE__--disp :: PP_Doc -> Int -> ShowS-disp s _ = (s ++)---- UHC.Util.Serialize-class Serialize a where--putSerializeFile :: FilePath -> a -> IO ()-putSerializeFile = __IMPOSSIBLE__--serialize :: x -> Put-serialize = __IMPOSSIBLE__--unserialize :: Get x-unserialize = __IMPOSSIBLE__---- UHC.Light.Compiler.Base.API--data EHCOpts-defaultEHCOpts :: EHCOpts-defaultEHCOpts = __IMPOSSIBLE__--data HsName deriving (Typeable)-deriving instance Eq HsName-deriving instance Ord HsName-deriving instance Show HsName-instance Serialize HsName where--data CTag deriving (Typeable)-deriving instance Eq CTag-deriving instance Ord CTag-deriving instance Show CTag-instance Serialize CTag where--mkHsName :: [String] -> String -> HsName-mkHsName = __IMPOSSIBLE__--mkHsName1 :: String -> HsName-mkHsName1 = __IMPOSSIBLE__--mkUniqueHsName :: String -> [String] -> String -> HsName-mkUniqueHsName = __IMPOSSIBLE__---- UHC.Light.Compiler.Core.API-data CModule-instance Serialize CModule-data CImport-data CExport-data CDeclMeta-data CDataCon--- dummy to use as parse result for core pragmas-data CExpr = CExpr_DUMMY deriving (Eq, Ord, Show, Typeable)-instance Serialize CExpr where-data CBind-data CAlt-data CPat-data CPatFld-data CPatRest--mkUnit :: EHCOpts -> CExpr-mkUnit = __IMPOSSIBLE__--mkInt :: EHCOpts -> Int -> CExpr-mkInt = __IMPOSSIBLE__--mkInteger :: EHCOpts -> Integer -> CExpr-mkInteger = __IMPOSSIBLE__--mkChar :: Char -> CExpr-mkChar = __IMPOSSIBLE__--mkString :: EHCOpts -> String -> CExpr-mkString = __IMPOSSIBLE__--mkError :: EHCOpts -> String -> CExpr-mkError = __IMPOSSIBLE__--mkUndefined :: EHCOpts -> CExpr-mkUndefined = __IMPOSSIBLE__--mkVar :: HsName -> CExpr-mkVar = __IMPOSSIBLE__--mkLet1Plain :: HsName -> CExpr -> CExpr -> CExpr-mkLet1Plain = __IMPOSSIBLE__--mkLet1Strict :: HsName -> CExpr -> CExpr -> CExpr-mkLet1Strict = __IMPOSSIBLE__--mkLetRec :: [CBind] -> CExpr -> CExpr-mkLetRec = __IMPOSSIBLE__--mkLam :: [HsName] -> CExpr -> CExpr-mkLam = __IMPOSSIBLE__--mkApp :: CExpr -> [CExpr] -> CExpr-mkApp = __IMPOSSIBLE__--mkBind1 :: HsName -> CExpr -> CBind-mkBind1 = __IMPOSSIBLE__--mkBind1Nm1 :: HsName -> CBind-mkBind1Nm1 = __IMPOSSIBLE__--mkCTag :: HsName -> HsName -> Int -> Int -> CTag-mkCTag = __IMPOSSIBLE__--destructCTag :: a -> (HsName -> HsName -> Int -> Int -> a) -> CTag -> a-destructCTag = __IMPOSSIBLE__--ctagUnit :: CTag-ctagUnit = __IMPOSSIBLE__--ctagTrue :: EHCOpts -> CTag-ctagTrue = __IMPOSSIBLE__--ctagFalse :: EHCOpts -> CTag-ctagFalse = __IMPOSSIBLE__--ctagCons :: EHCOpts -> CTag-ctagCons = __IMPOSSIBLE__--ctagNil :: EHCOpts -> CTag-ctagNil = __IMPOSSIBLE__--mkCase :: CExpr -> [CAlt] -> CExpr-mkCase = __IMPOSSIBLE__--mkAlt :: CPat -> CExpr -> CAlt-mkAlt = __IMPOSSIBLE__--mkPatCon :: CTag -> CPatRest -> [CPatFld] -> CPat-mkPatCon = __IMPOSSIBLE__--mkPatRestEmpty :: CPatRest-mkPatRestEmpty = __IMPOSSIBLE__--mkPatFldBind :: (HsName, CExpr) -> CBind -> CPatFld-mkPatFldBind = __IMPOSSIBLE__--mkTagTup :: CTag -> [CExpr] -> CExpr-mkTagTup = __IMPOSSIBLE__--mkModule :: HsName -> [CExport] -> [CImport] -> [CDeclMeta] -> CExpr -> CModule-mkModule = __IMPOSSIBLE__--mkImport :: HsName -> CImport-mkImport = __IMPOSSIBLE__--mkExport :: HsName -> CExport-mkExport = __IMPOSSIBLE__--mkMetaData :: HsName -> [CDataCon] -> CDeclMeta-mkMetaData = __IMPOSSIBLE__--mkMetaDataCon :: HsName -> Int -> Int -> CDataCon-mkMetaDataCon = __IMPOSSIBLE__--mkMetaDataConFromCTag :: CTag -> Maybe CDataCon-mkMetaDataConFromCTag = __IMPOSSIBLE__--mkMain :: HsName -> CExpr-mkMain = __IMPOSSIBLE__--parseExpr :: EHCOpts -> String -> Either [String] CExpr--- just always succeed, as we don't want to fail on UHC pragmas--- if the backend is disabled-parseExpr _ _ = Right CExpr_DUMMY--printModule :: EHCOpts -> CModule -> PP_Doc-printModule = __IMPOSSIBLE__--#endif----uhcBackendEnabled :: Bool-#if defined(UHC_BACKEND)-uhcBackendEnabled = True-#else-uhcBackendEnabled = False-#endif
− src/full/Agda/Compiler/UHC/CompileState.hs
@@ -1,248 +0,0 @@-{-# LANGUAGE CPP                        #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE UndecidableInstances       #-}---- | Contains the state monad that the compiler works in and some functions---   for tampering with the state.-module Agda.Compiler.UHC.CompileState-  ( CompileT-  , Compile-  , runCompileT-  , CoreMeta--  , addExports-  , addMetaCon-  , addMetaData-  , getExports-  , getDeclMetas--  , getCoreName-  , getCoreName1-  , getConstrCTag-  , getConstrFun-  , moduleNameToCoreName-  , moduleNameToCoreNameParts-  , freshLocalName--  , conArityAndPars-  , dataRecCons-  )-where--import Control.Monad.State-import Control.Monad.Reader.Class-import Data.List-import qualified Data.Map as Map-import Data.Maybe-import Data.Char--#if __GLASGOW_HASKELL__ <= 708-import Control.Applicative-#endif-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend)--import Agda.Compiler.UHC.MagicTypes-import Agda.Syntax.Internal-import Agda.Syntax.Common-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Telescope-import Agda.TypeChecking.Monad.Builtin hiding (coinductionKit')-import qualified Agda.TypeChecking.Monad as TM-import Agda.Compiler.UHC.Bridge-import Agda.Compiler.UHC.Pragmas.Base-import Agda.Compiler.Common--import Agda.Utils.Lens--#include "undefined.h"-import Agda.Utils.Impossible--import Data.Time.Clock.POSIX--getTime :: IO Integer-getTime = round <$> getPOSIXTime--data CoreMeta = CoreMeta-  { coreMetaData :: Map.Map QName ( [CDataCon] -> CDeclMeta )-  , coreMetaCon :: Map.Map QName [CDataCon] -- map data name to constructors-  , coreExports :: [CExport] -- ^ UHC core exports-  }--instance Semigroup CoreMeta where-  CoreMeta a b c <> CoreMeta r s t =-    CoreMeta (Map.union a r) (Map.unionWith (++) b s) (c ++ t)--instance Monoid CoreMeta where-  mempty = CoreMeta mempty mempty []-  mappend = (<>)---- | Stuff we need in our compiler-data CompileState = CompileState-  { coreMeta :: CoreMeta-  , nameSupply :: Integer-  }---- | Compiler monad-newtype CompileT m a = CompileT { unCompileT :: StateT CompileState m a }-  deriving (Monad, MonadIO, MonadTrans, Applicative, Functor)--type Compile = CompileT TCM---- | Used to run the Agda-to-UHC Core transformation.--- During this transformation,-runCompileT :: MonadIO m =>-       ModuleName   -- ^ The module to compile.-    -> CompileT m a-    -> m a-runCompileT amod comp = do-  (result, state') <- runStateT (unCompileT comp) initial--  return result-  where initial = CompileState-            { coreMeta = mempty-            , nameSupply = 0-            }--appendCoreMeta :: Monad m => CoreMeta -> CompileT m ()-appendCoreMeta cm =-  CompileT $ modify (\s -> s { coreMeta = cm `mappend` coreMeta s })--addExports :: Monad m => [HsName] -> CompileT m ()-addExports = addExports' . map mkExport--addExports' :: Monad m => [CExport] -> CompileT m ()-addExports' nms = appendCoreMeta (mempty { coreExports = nms })--addMetaCon :: QName -> CDataCon -> Compile ()-addMetaCon q c = do-  dtNm <- conData . theDef <$> lift (getConstInfo q)-  appendCoreMeta (mempty { coreMetaCon = Map.singleton dtNm [c] })--addMetaData :: QName -> ([CDataCon] -> CDeclMeta) -> Compile ()-addMetaData q d =-  appendCoreMeta (mempty { coreMetaData = Map.singleton q d })--getExports :: Compile [CExport]-getExports = CompileT $ gets (coreExports . coreMeta)--getDeclMetas :: Compile [CDeclMeta]-getDeclMetas = CompileT $ do-  cons <- gets (coreMetaCon . coreMeta)-  dts <- gets (coreMetaData . coreMeta)-  return $ map (\(dtNm, f) -> f (Map.findWithDefault [] dtNm cons)) (Map.toList dts)--freshLocalName :: Monad m => CompileT m HsName-freshLocalName = CompileT $ do-    i <- gets nameSupply-    modify (\s -> s { nameSupply = i + 1 } )-    return $ mkUniqueHsName "nl.uu.agda.fresh-local-name" [] ("x" ++ show i)---------------------- Constructors----------------------- | Returns the CTag for a constructor. Not defined--- for Sharp and magic __UNIT__ constructor.-getConstrCTag :: QName -> Compile CTag-getConstrCTag q = do-  def <- lift $ getConstInfo q-  (arity, _) <- lift $ conArityAndPars q-  case compiledCore $ defCompiledRep def of-    Nothing -> do-      let dtQ = conData $ theDef def-      -- get tag, which is the index of current con in datatype con list-      tag <- fromJust . elemIndex q . dataRecCons . theDef <$> lift (getConstInfo dtQ)-      mkCTag <$> getCoreName dtQ <*> (getCoreName q) <*> pure tag <*> pure arity-    Just (CrConstr crCon) -> do-      return $ coreConstrToCTag crCon arity-    _ -> __IMPOSSIBLE__----- | Returns the expression to use to build a value of the given datatype/constructor.-getConstrFun :: QName -> Compile HsName-getConstrFun q = do-  def <- lift $ getConstInfo q-  case compiledCore $ defCompiledRep def of-    Nothing -> getCoreName q-    Just (CrConstr crCon) ->-      return $-        destructCTag builtinUnitCtor (\_ con _ _ -> con)-          (coreConstrToCTag crCon 0) -- Arity doesn't matter here, as we immediately destruct the ctag again!-    _ -> __IMPOSSIBLE__--dataRecCons :: Defn -> [QName]-dataRecCons r@(Record{}) = [recCon r]-dataRecCons d@(Datatype{}) = dataCons d-dataRecCons _ = __IMPOSSIBLE__----------------------- Names---------------------- All agda modules live in their own namespace in Agda.XXX, to avoid--- clashes with existing haskell modules. (e.g. Data.List) with confusing error messages.--- If we don't wan't this, we would have to avoid loading the HS base libraries--- or would need package-specific imports. As we don't have this in UHC right now,--- this is the best we can do.-moduleNameToCoreNameParts :: ModuleName -> [String]-moduleNameToCoreNameParts modNm = "Agda" : (map show $ mnameToList modNm)--moduleNameToCoreName :: ModuleName -> HsName-moduleNameToCoreName modNm = mkHsName (init nmParts) (last nmParts)-  where nmParts = moduleNameToCoreNameParts modNm--getCoreName :: QName -> Compile HsName-getCoreName qnm = CompileT $ do-  lift $ getCoreName1 qnm--getCoreName1 :: QName -> TCM HsName-getCoreName1 qnm = do--  modNm <- topLevelModuleName (qnameModule qnm)--  def <- theDef <$> getConstInfo qnm--  let locName = intercalate "_" $ map show $ either id id $ unqualifyQ modNm qnm-      modParts = moduleNameToCoreNameParts modNm-      identName = locName ++ "_" ++ show idnum-      identName' = case def of-        Datatype{} -> capitalize identName-        Record{} -> capitalize identName-        Constructor{} -> capitalize identName-        _ -> identName--  return $ mkUniqueHsName "nl.uu.agda.top-level-def" modParts identName-  where-    idnum = let (NameId x _) = nameId $ qnameName qnm in x-    -- we don't really care about the original name, we just keep it for easier debugging-    capitalize (x:xs) = (toUpper x):xs-    capitalize _      = __IMPOSSIBLE__---- | Returns the names inside a QName, with the module prefix stripped away.--- If the name is not module-qualified, returns the full name as left. (TODO investigate when this happens)-unqualifyQ :: ModuleName -> QName -> Either [Name] [Name]-unqualifyQ modNm qnm =-  case stripPrefix modNs qnms of-    -- not sure when the name doesn't have a module prefix... just force generation of a name for the time being-    Nothing -> Left qnms-    Just nm -> Right nm-  where-    modNs = mnameToList modNm-    qnms = qnameToList qnm-----instance MonadReader r m => MonadReader r (CompileT m) where-  ask = lift ask-  local f (CompileT x) = CompileT $ local f x--instance MonadState s m => MonadState s (CompileT m) where-  get = lift get-  put = lift . put--instance MonadTCM m => MonadTCM (CompileT m) where-  liftTCM = lift . TM.liftTCM
− src/full/Agda/Compiler/UHC/Compiler.hs
@@ -1,216 +0,0 @@-{-# LANGUAGE CPP             #-}---- | UHC compiler backend, main entry point.---- In the long term, it would be nice if we could use e.g. shake to--- build individual Agda modules. The problem with that is that some--- parts need to be in the TCM Monad, which doesn't easily work in--- shake. We would need a way to extract the information out of the--- TCM monad, so that we can pass it to the compilation function--- without pulling in the TCM Monad. Another minor problem might be--- error reporting?--module Agda.Compiler.UHC.Compiler(compilerMain) where--#if __GLASGOW_HASKELL__ <= 708-import Control.Applicative-import Data.Monoid-#endif--import Control.Monad-import Control.Monad.Reader-import Control.Monad.State-import qualified Data.ByteString.Lazy as BS-import qualified Data.Map as M-import Data.Maybe--import System.Directory ( canonicalizePath, createDirectoryIfMissing-                        , setCurrentDirectory-                        , doesDirectoryExist-                        , getDirectoryContents, copyFile-                        )-import Data.List as L-import System.Exit-import System.FilePath hiding (normalise)--import Paths_Agda-import Agda.Compiler.CallCompiler-import Agda.Interaction.FindFile-import Agda.Interaction.Options-import Agda.Interaction.Imports-import qualified Agda.Syntax.Concrete.Name as CN-import Agda.Syntax.Internal hiding (Term(..))-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Serialise-import Agda.Utils.FileName-import Agda.Utils.Pretty-import qualified Agda.Utils.HashMap as HMap-import Agda.Utils.IO.Directory-import Agda.Utils.Lens--import Agda.Compiler.UHC.CompileState-import Agda.Compiler.UHC.Bridge as UB-import qualified Agda.Compiler.UHC.FromAgda     as FAgda-import Agda.Compiler.Common--#include "undefined.h"-import Agda.Utils.Impossible---- for the time being, we just copy the base library into the generated code.--- We don't install it into the user db anymore, as that gets complicated when--- multiple Agda instances run concurrently.--- Just copying it is safe for the time being, as we only have full-program--- compilation at the moment.-copyUHCAgdaBase :: FilePath -> TCM ()-copyUHCAgdaBase outDir = do-    dataDir <- liftIO getDataDir-    let srcDir = dataDir </> "uhc-agda-base" </> "src" </> "UHC"--    liftIO $ copyDirContent srcDir (outDir </> "UHC")----- | Compile an interface into an executable using UHC-compilerMain :: IsMain -> Interface -> TCM ()-compilerMain isMain i = inCompilerEnv i $ do-    when (not uhcBackendEnabled) $ typeError $ GenericError "Agda has been built without UHC support. To use the UHC compiler you need to reinstall Agda with 'cabal install Agda -f uhc'."-    -- TODO we should do a version check here at some point.-    let uhc_exist = ExitSuccess-    case uhc_exist of-        ExitSuccess -> do--            copyUHCAgdaBase =<< compileDir--            doCompile isMain i $ \_ -> compileModule--            case isMain of-              IsMain -> do-                main <- getMain i-                -- get core name from modInfo-                crMain <- getCoreName1 main-                runUHCMain $ Just (iModuleName i, crMain)-              NotMain -> runUHCMain Nothing--        ExitFailure _ -> internalError $ unlines-           [ "Agda cannot find the UHC compiler."-           ]----- | Compiles a module and it's imports. Returns the module info--- of this module, and the accumulating module interface.-compileModule :: Interface -> TCM ()-compileModule i = do-    -- look for the Agda.Primitive interface in visited modules.-    -- (It will not be in ImportedModules, if it has not been-    -- explicitly imported)-    -- TODO this should be done in a more clean way-    [agdaPrimInter] <- filter (("Agda.Primitive"==) . prettyShow . iModuleName)-      . map miInterface . M.elems-        <$> getVisitedModules-    -- we can't use the Core module name to get the name of the aui file,-    -- as we don't know the Core module name before we loaded/compiled the file.-    -- (well, we could just compute the module name and use that, that's-    -- probably better? )-    let modNm = iModuleName i-    let topModuleName = toTopLevelModuleName modNm-    -- check if this module has already been compiled-    imports <- map miInterface . catMaybes-      <$> (mapM (getVisitedModule . toTopLevelModuleName . fst)-            (iImportedModules i))--    let imports' = if prettyShow (iModuleName i) == "Agda.Primitive"-                     then imports-                     else agdaPrimInter : imports--    reportSLn "compile.uhc" 1 $-      "Compiling: " ++ show (iModuleName i)-    code <- compileDefns modNm (map iModuleName imports') i-    crFile <- corePath modNm-    _ <- writeCoreFile crFile code-    return ()---corePath :: ModuleName -> TCM FilePath-corePath mName = do-  mdir <- compileDir-  let fp = mdir </> replaceExtension fp' "bcr"-  liftIO $ createDirectoryIfMissing True (takeDirectory fp)-  return fp-   where-    fp' = foldl1 (</>) $ moduleNameToCoreNameParts mName----getMain :: MonadTCM m => Interface -> m QName-getMain iface = case concatMap f defs of-    [] -> typeError $ GenericError $ "Could not find main."-    [x] -> return x-    _   -> __IMPOSSIBLE__-  where defs = HMap.toList $ iSignature iface ^. sigDefinitions-        f (qn, def) = case theDef def of-            (Function{}) | "main" == show (qnameName qn) -> [qn]-            _   -> []---- | Perform the chain of compilation stages, from definitions to UHC Core code-compileDefns :: ModuleName-    -> [ModuleName] -- ^ top level imports-    -> Interface -> TCM UB.CModule-compileDefns modNm curModImps iface = do--    crMod <- FAgda.fromAgdaModule modNm curModImps iface--    reportSLn "compile.uhc" 10 $ "Done generating Core for \"" ++ show modNm ++ "\"."-    return crMod--writeCoreFile :: String -> UB.CModule -> TCM ()-writeCoreFile f cmod = do-  useTextual <- optUHCTextualCore <$> commandLineOptions--  -- dump textual core, useful for debugging.-  when useTextual (do-    let f' = replaceExtension f ".dbg.tcr"-    reportSLn "compile.uhc" 10 $ "Writing textual core to \"" ++ show f' ++ "\"."-    liftIO $ putPPFile f' (UB.printModule defaultEHCOpts cmod) 200-    )--  reportSLn "compile.uhc" 10 $ "Writing binary core to \"" ++ show f ++ "\"."-  liftIO $ putSerializeFile f cmod---- | Create the UHC Core main file, which calls the Agda main function-runUHCMain-    :: Maybe (ModuleName, HsName)  -- main module-    -> TCM ()-runUHCMain mainInfo = do-    otherFps <- mapM (corePath . iModuleName . miInterface) =<< (M.elems <$> getVisitedModules)-    allFps <--      case mainInfo of-            Nothing -> return otherFps-            Just (mainMod, mainName) -> do-                fp <- (</> "Main.bcr") <$> compileDir-                let mmod = FAgda.createMainModule mainMod mainName-                writeCoreFile fp mmod-                return ["Main.bcr"]--    let extraOpts = maybe-            ["--compile-only"]-            ((\x -> [x]) . ("--output="++) . prettyShow . last . mnameToList . fst)-            mainInfo--    liftIO . setCurrentDirectory =<< compileDir--    -- TODO drop the RTS args as soon as we don't need the additional-    -- memory anymore-    callUHC1 $  [ "--pkg-hide-all"-                , "--pkg-expose=uhcbase"-                , "--pkg-expose=base"-                , "UHC/Agda/double.c"-                ] ++ extraOpts ++ allFps ++ ["+RTS", "-K50m", "-RTS"]--callUHC1 :: [String] -> TCM ()-callUHC1 args = do-    uhcBin <- getUhcBin-    doCall <- optUHCCallUHC <$> commandLineOptions-    extraArgs <- optUHCFlags <$> commandLineOptions-    callCompiler doCall uhcBin (args ++ extraArgs)--getUhcBin :: TCM FilePath-getUhcBin = fromMaybe ("uhc") . optUHCBin <$> commandLineOptions
− src/full/Agda/Compiler/UHC/FromAgda.hs
@@ -1,376 +0,0 @@-{-# LANGUAGE CPP             #-}---- | Convert from Agda's internal representation to UHC Core via Treeless.--------- The coinduction kit is translated the same way as in MAlonzo:--- flat = id--- sharp = id--- -> There is no runtime representation of Coinductive values.-module Agda.Compiler.UHC.FromAgda where--#if __GLASGOW_HASKELL__ <= 708-import Control.Applicative-import Data.Traversable (traverse)-#endif--import Control.Monad-import Control.Monad.State-import Control.Monad.Reader-import qualified Data.Map as M-import Data.Maybe-import Data.Either-import Data.List-import qualified Data.Set as Set--import Agda.Syntax.Internal hiding (Term(..))-import qualified Agda.Syntax.Internal as I-import Agda.Syntax.Literal  as TL-import Agda.Syntax.Treeless (TTerm (..), TAlt (..))-import qualified Agda.Syntax.Treeless as C-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Pretty-import Agda.Utils.List-import qualified Agda.Utils.Pretty as P-import qualified Agda.Utils.HashMap as HMap-import Agda.Syntax.Abstract.Name-import Agda.Syntax.Common--import Agda.Compiler.Common-import Agda.Compiler.ToTreeless-import Agda.Compiler.Treeless.GuardsToPrims-import Agda.Compiler.Treeless.NormalizeNames-import Agda.Compiler.Treeless.Pretty-import Agda.Compiler.UHC.Pragmas.Base-import Agda.Compiler.UHC.Pragmas.Parse (coreExprToCExpr)-import Agda.Compiler.UHC.CompileState-import Agda.Compiler.UHC.Primitives-import Agda.Compiler.UHC.MagicTypes--import Agda.Compiler.UHC.Bridge as CA--import Agda.Utils.Maybe-import Agda.Utils.Except ( MonadError (catchError) )-import Agda.Utils.Lens--#include "undefined.h"-import Agda.Utils.Impossible--opts :: EHCOpts-opts = defaultEHCOpts---- | Convert from Agda's internal representation to our auxiliary AST.-fromAgdaModule :: ModuleName-    -> [ModuleName]      -- imported modules.-    -> Interface         -- interface to compile-    -> TCM CModule-fromAgdaModule modNm curModImps iface = do--  -- Set correct pragma options-  setCommandLineOptions =<< gets (stPersistentOptions . stPersistentState)-  mapM_ setOptionsFromPragma (iPragmaOptions iface)--  -- sort defs to ensure consistent order (see Issue 1900)-  let defs = sortDefs $ iSignature iface ^. sigDefinitions--  runCompileT modNm (do-    lift $ reportSLn "compile.uhc" 10 "Translate datatypes..."--    funs' <- concat <$> mapM translateDefn defs-    let funs = mkLetRec funs' (mkInt opts 0)----    additionalImports <- lift getHaskellImportsUHC-    let imps = map mkImport $ nub $-          [ mkHsName1 "UHC.Base"-          , mkHsName1 "UHC.Agda.Builtins" ]-          ++ map moduleNameToCoreName curModImps-          ++ map mkHsName1 (Set.toList additionalImports)--        crModNm = moduleNameToCoreName modNm--    mkModule crModNm-      <$> getExports <*> pure imps <*> getDeclMetas <*> pure funs-    )----- | Translate an Agda definition to an UHC Core function where applicable-translateDefn :: (QName, Definition) -> Compile [CBind]-translateDefn (n, defini) = do--  crName <- getCoreName n-  let crRep = compiledCore $ defCompiledRep defini-  kit <- lift coinductionKit-  case theDef defini of-    d@(Datatype {}) -> do--        unless (isJust crRep || Just n == (nameOfInf <$> kit)) $ do-          addMetaData n (mkMetaData crName)--        vars <- replicateM (dataPars d + dataIxs d) freshLocalName-        addExports [crName]-        return [mkBind1 crName (mkLam vars $ mkUnit opts)]-    (Function{}) | Just n == (nameOfFlat <$> kit) -> do-        addExports [crName]-        (\x -> [x]) <$> mkIdentityFun n "coind-flat" 0-    f@(Function{}) | otherwise -> do-        let ty    = (defType defini)-        lift $ reportSDoc "compile.uhc.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n-        lift $ reportSDoc "compile.uhc.fromagda" 15 $ text "type:" <+> (text . show) ty--        caseMaybeM (lift $ toTreeless n) (pure []) $ \ treeless -> do-          funBody <- convertGuards <$> lift (normalizeNames treeless)-          lift $ reportSDoc "compile.uhc.fromagda" 30 $ text " compiled treeless fun:" <+> (text . show) funBody-          funBody' <- runTT $ compileTerm funBody-          lift $ reportSDoc "compile.uhc.fromagda" 30 $ text " compiled UHC Core fun:" <+> (text . show) funBody'--          addExports [crName]-          return [mkBind1 crName funBody']--    Constructor{} | Just n == (nameOfSharp <$> kit) -> do-        addExports [crName]-        (\x -> [x]) <$> mkIdentityFun n "coind-sharp" 0--    (Constructor{}) | Nothing <- crRep -> do -- become functions returning a constructor with their tag-      -- we have to ignore instantiated constructors here!-      n' <- lift $ canonicalName n-      if (n /= n')-        then return []-        else do-          addExports [crName]-          ctag <- getConstrCTag n--          addMetaCon n (fromJust $ mkMetaDataConFromCTag ctag)--          vars <- replicateM (getCTagArity ctag) freshLocalName-          let conWrapper = mkLam vars (mkTagTup ctag $ map mkVar vars)-          return [mkBind1 crName conWrapper]-    Constructor{} -> return []-    -- either foreign or builtin type. We can just assume existence of the wrapper functions then.--    r@(Record{}) -> do-        unless (isJust crRep) $ do-          addMetaData n (mkMetaData crName)--        vars <- replicateM (recPars r) freshLocalName-        addExports [crName]-        return [mkBind1 crName (mkLam vars $ mkUnit opts)]-    (Axiom{}) -> do -- Axioms get their code from COMPILED_UHC pragmas-        addExports [crName]-        case crRep of-            Nothing -> return [mkBind1 crName-                (coreError $ "Axiom " ++ show n ++ " used but has no computation.")]-            Just (CrDefn x) -> do-                        x' <- case coreExprToCExpr x of-                                -- This can only happen if an *.agdai file was generated by an Agda version-                                -- without UHC support enabled.-                                Left err -> internalError $ "Invalid COMPILED_UHC pragma value: " ++ err-                                Right y -> return y-                        return [mkBind1 crName x']-            _ -> __IMPOSSIBLE__--    p@(Primitive{}) -> do -- Primitives use primitive functions from UHC.Agda.Builtins of the same name.-      addExports [crName]--      case primName p `M.lookup` primFunctions of-        Nothing     -> internalError $ "Primitive " ++ show (primName p) ++ " declared, but no such primitive exists."-        (Just expr) -> do-                expr' <- expr-                return [mkBind1 crName expr']-    AbstractDefn -> __IMPOSSIBLE__-  where-    -- | Produces an identity function, optionally ignoring the first n arguments.-    mkIdentityFun :: QName-        -> String -- ^ comment-        -> Int      -- ^ How many arguments to ignore.-        -> Compile CBind-    mkIdentityFun nm comment ignArgs = do-        crName <- getCoreName nm-        xs <- replicateM (ignArgs + 1) freshLocalName-        return $ mkBind1 crName (mkLam xs (mkVar $ last xs))---runTT :: TT a -> Compile a-runTT r = do-  r `runReaderT` (TTEnv [])--data TTEnv = TTEnv-  { nmEnv :: [HsName] -- maps de-bruijn indices to names-  }--type TT = ReaderT TTEnv Compile---addToEnv :: [HsName] -> TT a -> TT a-addToEnv nms cont =-  local (\e -> e { nmEnv = nms ++ (nmEnv e) }) cont--data BuiltinKit = BuiltinKit-  { isNat :: QName -> Bool-  , isInt :: QName -> Bool-  }--builtinKit :: TCM BuiltinKit-builtinKit =-  BuiltinKit <$> is dat builtinNat-             <*> is dat builtinInteger-  where-    dat (I.Def d _) = pure d-    dat _           = Nothing--    is a b = maybe (const False) (==) . (a =<<) <$> getBuiltin' b---- | Translate the actual Agda terms, with an environment of all the bound variables---   from patternmatching. Agda terms are in de Bruijn so we just check the new---   names in the position.-compileTerm :: C.TTerm -> TT CExpr-compileTerm term = do-  builtinKit' <- lift $ lift builtinKit-  case term of-    C.TPrim t -> return $ compilePrim t-    C.TVar x -> do-      nm <- fromMaybe __IMPOSSIBLE__ . (!!! x) <$> asks nmEnv-      return $ mkVar nm-    C.TDef nm -> do-      nm' <- lift $ getCoreName nm-      return $ mkVar nm'-    C.TApp t xs -> do-      mkApp <$> compileTerm t <*> mapM compileTerm xs-    C.TLam t -> do-       name <- lift freshLocalName-       addToEnv [name] $ do-         mkLam [name] <$> compileTerm t-    C.TLit l -> return $ litToCore l-    C.TCon c -> do-        con <- lift $ getConstrFun c-        return $ mkVar con-    C.TLet x body -> do-        nm <- lift freshLocalName-        mkLet1Plain nm-          <$> compileTerm x-          <*> addToEnv [nm] (compileTerm body)-    C.TCase sc (C.CTData dt) def alts | not (isNat builtinKit' dt || isInt builtinKit' dt) -> do-      -- normal constructor case-      caseScr <- lift freshLocalName-      defVar <- lift freshLocalName-      def' <- compileTerm def--      branches <- traverse compileConAlt alts-      defBranches <- defaultBranches dt alts (mkVar defVar)-      let cas = mkCase (mkVar caseScr) (branches ++ defBranches)-      caseScr' <- compileTerm (C.TVar sc)--      return $ mkLet1Plain defVar def' (mkLet1Strict caseScr caseScr' cas)--    C.TCase sc ct def alts | otherwise -> do-      -- cases on literals-      sc <- compileTerm (C.TVar sc)-      var <- lift freshLocalName-      def <- compileTerm def--      css <- buildPrimCases eq (mkVar var) alts def-      return $ mkLet1Strict var sc css-      where-        eq :: CExpr-        eq = case ct of-          C.CTChar -> mkVar $ primFunNm "primCharEquality"-          C.CTString -> mkVar $ primFunNm "primStringEquality"-          C.CTQName -> mkVar $ primFunNm "primQNameEquality"-          C.CTFloat -> mkVar $ primFunNm "primFloatEquality"-          C.CTNat -> mkVar $ primFunNm "primIntegerEquality"-          C.CTInt -> mkVar $ primFunNm "primIntegerEquality"-          _ -> __IMPOSSIBLE__--    C.TUnit -> unit-    C.TSort -> unit-    C.TErased -> unit-    C.TError e -> return $ case e of-      C.TUnreachable -> coreError $ "Unreachable code reached. This should never happen! Crashing..."-  where unit = return $ mkUnit opts---buildPrimCases :: CExpr -- ^ equality function-    -> CExpr    -- ^ case scrutinee (in WHNF)-    -> [C.TAlt]-    -> CExpr    -- ^ default value-    -> TT CExpr-buildPrimCases _ _ [] def = return def-buildPrimCases eq scr (b:brs) def = do-    var <- lift     freshLocalName-    e' <- compileTerm (C.aBody b)-    rec' <- buildPrimCases eq scr brs def--    let lit = litToCore $ C.aLit b-        eqTest = mkApp eq [scr, lit]--    return $ mkLet1Strict var eqTest (mkIfThenElse (mkVar var) e' rec')---- move to UHC Core API-mkIfThenElse :: CExpr -> CExpr -> CExpr -> CExpr-mkIfThenElse c t e = mkCase c [b1, b2]-  where b1 = mkAlt (mkPatCon (ctagTrue opts) mkPatRestEmpty []) t-        b2 = mkAlt (mkPatCon (ctagFalse opts) mkPatRestEmpty []) e--compileConAlt :: C.TAlt -> TT CAlt-compileConAlt a =-  makeConAlt (C.aCon a)-    (\vars -> addToEnv (reverse vars) $ compileTerm (C.aBody a))--makeConAlt :: QName -> ([HsName] -> TT CExpr) -> TT CAlt-makeConAlt con mkBody = do-  ctag <- lift $ getConstrCTag con-  vars <- lift $ replicateM (getCTagArity ctag) freshLocalName-  body <- mkBody vars--  let patFlds = [mkPatFldBind (mkHsName [] "", mkInt opts i) (mkBind1Nm1 v) | (i, v) <- zip [0..] vars]-  return $ mkAlt (mkPatCon ctag mkPatRestEmpty patFlds) body---- | Constructs an alternative for all constructors not explicitly matched by a branch.-defaultBranches :: QName -> [C.TAlt] -> CExpr -> TT [CAlt]-defaultBranches dt alts def = do-  dtCons <- dataRecCons . theDef <$> (lift . lift) (getConstInfo dt)-  let altCons = map C.aCon alts-      missingCons = dtCons \\ altCons--  mapM (\a -> makeConAlt a (\_ -> return def)) missingCons--litToCore :: Literal -> CExpr-litToCore (LitNat _ i)   = mkApp (mkVar $ primFunNm "primIntegerToNat") [mkInteger opts i]-litToCore (LitString _ s) = mkString opts s-litToCore (LitChar _ c)  = mkChar c--- UHC and GHC handle trailing zeros slightly different. Work around to make sure--- we have the same semantics as MAlonzo.-litToCore (LitFloat _ f) = mkApp (mkVar $ primFunNm "primMkFloat") [mkString opts (show f)]-litToCore (LitQName _ q) = mkApp (mkVar $ primFunNm "primMkQName")-                             [mkInteger opts $ fromIntegral n, mkInteger opts $ fromIntegral m,-                              mkString opts $ P.prettyShow q]-  where NameId n m = nameId $ qnameName q-litToCore LitMeta{} = __IMPOSSIBLE__--getCTagArity :: CTag -> Int--- for records/datatypes, we can always extract the arity. If there is no arity,--- it is the unit constructor, so just return zero.-getCTagArity = destructCTag 0 (\_ _ _ ar -> ar)--coreError :: String -> CExpr-coreError msg = mkError opts $ "Fatal error: " ++ msg--compilePrim :: C.TPrim -> CExpr-compilePrim C.PQuot = mkVar $ primFunNm "primIntegerQuot"-compilePrim C.PRem = mkVar $ primFunNm "primIntegerRem"-compilePrim C.PSub = mkVar $ primFunNm "primIntegerMinus"-compilePrim C.PAdd = mkVar $ primFunNm "primIntegerPlus"-compilePrim C.PMul = mkVar $ primFunNm "primIntegerTimes"-compilePrim C.PIf  = mkVar $ primFunNm "primIfThenElse"-compilePrim C.PGeq = mkVar $ primFunNm "primIntegerGreaterOrEqual"-compilePrim C.PLt  = mkVar $ primFunNm "primIntegerLess"-compilePrim p | C.isPrimEq p = mkVar $ primFunNm "primIntegerEquality"-compilePrim C.PSeq = mkVar $ primFunNm "primSeq"-compilePrim _ = __IMPOSSIBLE__---createMainModule :: ModuleName -> HsName -> CModule-createMainModule mainMod main = mkModule (mkHsName [] "Main") [] [mkImport $ mkHsName1 "UHC.Run", mkImport mainModAux] [] (mkMain main)-  where mainModAux = moduleNameToCoreName mainMod
− src/full/Agda/Compiler/UHC/MagicTypes.hs
@@ -1,59 +0,0 @@-{-# LANGUAGE CPP #-}--- | Defines some magic builtin datatypes.-module Agda.Compiler.UHC.MagicTypes-(   builtinUnitCtor-  , MagicName-  , getMagicTypes-  , MagicConstrInfo-  , MagicTypeInfo-  , HsDataType (..)-  )-where--import Data.List-import qualified Data.Map as M--import Agda.Compiler.UHC.Bridge----- | name of a magic, differently translated datatype/constructor-type MagicName = String--data HsDataType-  = HsDataType HsName-  | HsUnit--type MagicConstrInfo = M.Map MagicName CTag -- maps primitive names to constructor ctags-type MagicTypeInfo = M.Map MagicName (HsDataType, MagicConstrInfo) -- maps types to the UHC Core name--- (or nothing for unit) and to their constructors.--getMagicTypes :: MagicTypeInfo-getMagicTypes = M.fromList $ map f primCrTys1-  where f :: (MagicName, [(MagicName, CTag)]) -> (MagicName, (HsDataType, MagicConstrInfo))-        f (dtMgcNm, constrs) = let dtCrNm = ctagDataTyNm $ snd $ head constrs-                                in (dtMgcNm, (dtCrNm, M.fromList constrs))---- | Returns the name of the datatype or 'Nothing' for the unit datatype.-ctagDataTyNm :: CTag -> HsDataType-ctagDataTyNm = destructCTag HsUnit (\dt _ _ _ -> HsDataType dt)---primCrTys1 :: [(-      MagicName    -- the magic name of the dt in COMPILED_DATA_UHC pragmas-    , [(MagicName, CTag)] -- constructors. Maps magic name to constructor tags.-    )]-primCrTys1 =-          [( "BOOL",-                [ ("TRUE",   ctagTrue defaultEHCOpts)-                , ("FALSE",  ctagFalse defaultEHCOpts)-                ])-          , ("LIST",-                [ ("NIL",  ctagNil defaultEHCOpts)-                , ("CONS", ctagCons defaultEHCOpts)-                ])-          , ("UNIT",-                [("UNIT", ctagUnit)])-          ]--builtinUnitCtor :: HsName-builtinUnitCtor = mkHsName1 "UHC.Agda.Builtins.unit"
− src/full/Agda/Compiler/UHC/Pragmas/Base.hs
@@ -1,58 +0,0 @@-{-# LANGUAGE CPP                #-}-{-# LANGUAGE DeriveDataTypeable #-}---- | Defines UHC Core functions used in other parts of Agda.--- E.g. parsing Core pragmas uses the `parseCoreCode` function.-module Agda.Compiler.UHC.Pragmas.Base-  ( CoreExpr,-    CoreType (..),-    CoreConstr (..),-    coreConstrToCTag,-    setTag,-    HsName-  )-where---import Data.Typeable-import qualified Data.Map as M--import Agda.Compiler.UHC.Bridge as CA-import Agda.Compiler.UHC.MagicTypes--#include "undefined.h"-import Agda.Utils.Impossible----data CoreType-  = CTMagic MagicName -- ^ Magic name-  | CTNormal String -- Core Datatype name-  deriving (Eq, Show, Typeable)---- We store the COMPILED_UHC pragmas as string,--- as storing the UHC AST makes the serialization--- format dependent on uhc-light. This also makes it--- possible to just store COMPILED_UHC pragmas unchecked--- in the interface file, if the UHC backend is disabled.-type CoreExpr = String---- We need an explicit representation for constructors, as we need to serialise the CoreConstr--- to store it inside agdai files. Else we could just use a partially applied--- CTag constructor instead (we don't know the arity yet...).-data CoreConstr-  = CCMagic MagicName MagicName -- Magic type constructor with fixed arity; (datatype, ctor)-  | CCNormal HsName HsName Int -- Normall UHC Core Constructor; (datatype, constr, tag)-  deriving (Eq, Show, Typeable)---setTag :: CoreConstr -> Int -> CoreConstr-setTag (CCNormal a b _) t = CCNormal a b t-setTag _ _ = __IMPOSSIBLE__--coreConstrToCTag :: CoreConstr-    -> Int -- ^ Arity-    -> CTag-coreConstrToCTag (CCMagic dtMgcNm conMgcNm) _ = conMp M.! conMgcNm-  where (_, conMp) = getMagicTypes M.! dtMgcNm-coreConstrToCTag (CCNormal dt con tg) ar = mkCTag dt con tg ar
− src/full/Agda/Compiler/UHC/Pragmas/Parse.hs
@@ -1,103 +0,0 @@-{-# LANGUAGE CPP                #-}-{-# LANGUAGE DeriveDataTypeable #-}---- | Defines UHC Core functions used in other parts of Agda.--- E.g. parsing Core pragmas uses the `parseCoreCode` function.-module Agda.Compiler.UHC.Pragmas.Parse-  ( module Agda.Compiler.UHC.Pragmas.Base-  , parseCoreExpr-  , coreExprToCExpr-  , parseCoreData-  , parseCoreConstrs-  )--where---import Data.List-import qualified Data.Map as M--import Agda.TypeChecking.Monad-import Agda.Compiler.UHC.Pragmas.Base-import Agda.Compiler.UHC.MagicTypes--import Agda.Compiler.UHC.Bridge as CA--#include "undefined.h"-import Agda.Utils.Impossible---- | Parse a COMPILED_DATA_UHC specification.-parseCoreData :: MonadTCM m => String -> m CoreType-parseCoreData dt = do-  isDtMgc <- isMagicEntity getMagicTypes dt "datatype"-  return $ case isDtMgc of-    Nothing         -> CTNormal dt-    Just (dtMgc, _) -> CTMagic dtMgc--parseCoreConstrs :: MonadTCM m => CoreType -> [String] -> m [CoreConstr]-parseCoreConstrs (CTNormal dtCrNm) cs = do-  constrs <- mapM parseNormalConstr cs-  -- UHC assigns tags in lexographical order.-  -- Requires that the mapping is complete, else it will break.-  return $ zipWith setTag (sortBy ccOrd constrs) [0..]-    where-        parseNormalConstr :: MonadTCM m => String -> m CoreConstr-        parseNormalConstr c-            | isMagic c =  typeError $-                GenericError $ "Magic constructor " ++ (drop 2 $ init $ init c) ++ " can only be used for magic datatypes."-            | otherwise = let dtMod = dropWhileEnd (/='.') dtCrNm-                              conNm = dtMod ++ c-                           -- tag gets assigned after we have parsed all ctors-                           in return $ CCNormal (mkHsName1 dtCrNm) (mkHsName1 conNm) __IMPOSSIBLE__-        ccOrd :: CoreConstr -> CoreConstr -> Ordering-        ccOrd (CCNormal dtNm1 ctNm1 _) (CCNormal dtNm2 ctNm2 _) | dtNm1 == dtNm2 = compare ctNm1 ctNm2-        ccOrd _ _ = __IMPOSSIBLE__--parseCoreConstrs (CTMagic dtMgcNm) cs = do-  mapM parseMagicConstr cs-    where-        (_, conMp) = getMagicTypes M.! dtMgcNm-        parseMagicConstr :: MonadTCM m => String ->  m CoreConstr-        parseMagicConstr c-            | not (isMagic c) = typeError $-                GenericError $ "A magic datatype can only have magic constructors."-            | otherwise = do-                (Just (conMgcNm, _)) <- isMagicEntity conMp c "constructor"-                return $ CCMagic dtMgcNm conMgcNm----- | Parse a COMPILED_UHC expression.-parseCoreExpr :: String -> Either String CoreExpr-#if defined(UHC_BACKEND)-parseCoreExpr str = either Left (const $ Right str) (coreExprToCExpr str)-#else--- we don't have the uhc-light parser, so just succeed here.-parseCoreExpr str = Right str-#endif--coreExprToCExpr :: CoreExpr -> Either String CExpr-#if defined(UHC_BACKEND)-coreExprToCExpr str = case CA.parseExpr defaultEHCOpts str of-    (Left errs) -> Left $ intercalate "\n" errs-    (Right res) -> Right res-#else-coreExprToCExpr = __IMPOSSIBLE__-#endif---- | Check if the given name is a valid Magic entity.-isMagicEntity :: MonadTCM m-    => M.Map MagicName a    -- ^ lookup table-    -> String   -- ^ name to lookup.-    -> String   -- ^ type of the entity. Used for errors messages.-    -> m (Maybe (String, a))-isMagicEntity tbl xs ty | isMagic xs =-  case nm `M.lookup` tbl of-    Just x -> return $ Just (nm, x)-    Nothing -> typeError $ GenericError $ "No magic " ++ ty ++ " with the name " ++ nm ++ " exists."-  where nm = init $ init $ drop 2 xs-isMagicEntity _ _ _ | otherwise = return Nothing---- | Checks if the given name is syntactically a Magic name.--- A syntactally correct magic name is NOT necessarily a valid magic name.-isMagic :: String -> Bool-isMagic xs = "__" `isPrefixOf` xs && "__" `isSuffixOf` xs
− src/full/Agda/Compiler/UHC/Primitives.hs
@@ -1,118 +0,0 @@-{-# LANGUAGE CPP #-}--- | Defines some primitive functions.-module Agda.Compiler.UHC.Primitives-  ( primFunNm-  , primFunctions-  )-where--import Agda.Compiler.UHC.CompileState-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import qualified Agda.Syntax.Internal as T-import Control.Monad.Trans--#include "undefined.h"-import Agda.Utils.Impossible--#if __GLASGOW_HASKELL__ <= 708-import Control.Applicative-#endif--import qualified Data.Map as M-import Data.Maybe--import Agda.Compiler.UHC.Bridge--primFunNm :: String -> HsName-primFunNm = mkHsName ["UHC", "Agda", "Builtins"]---- | Primitives defined for the UHC backend. Maps primitive names to the core expression to be used as function body.-primFunctions :: M.Map String ((CompileT TCM) CExpr)-primFunctions = M.fromList $-    [(n, return $ mkVar (primFunNm n)) | n <--        [-        -- Level-          "primLevelMax"-        , "primLevelZero"-        , "primLevelSuc"-        -- Integer-        , "primShowInteger"-        -- Nat-        , "primNatPlus"-        , "primNatTimes"-        , "primNatMinus"-        , "primNatDivSuc"-        , "primNatDivSucAux"-        , "primNatModSuc"-        , "primNatModSucAux"-        , "primNatToInteger"-        , "primNatEquality"-        , "primNatLess"-        , "primIntegerToNat"-        -- String-        , "primStringAppend"-        , "primStringEquality"-        , "primStringFromList"-        , "primStringToList"-        , "primShowString"-        -- Char-        , "primCharToNat"-        , "primCharEquality"-        , "primShowChar"-        , "primIsLower"-        , "primIsDigit"-        , "primIsAlpha"-        , "primIsSpace"-        , "primIsAscii"-        , "primIsLatin1"-        , "primIsPrint"-        , "primIsHexDigit"-        , "primToUpper"-        , "primToLower"-        , "primNatToChar"-        -- Float-        , "primShowFloat"-        , "primFloatEquality"-        , "primFloatNumericalEquality"-        , "primFloatNumericalLess"-        , "primNatToFloat"-        , "primFloatPlus"-        , "primFloatMinus"-        , "primFloatTimes"-        , "primFloatNegate"-        , "primFloatDiv"-        , "primFloatSqrt"-        , "primRound"-        , "primFloor"-        , "primCeiling"-        , "primExp"-        , "primLog"-        , "primSin"-        , "primCos"-        , "primTan"-        , "primASin"-        , "primACos"-        , "primATan"-        , "primATan"-        , "primATan2"-        -- Reflection-        , "primQNameEquality"-        , "primQNameLess"-        , "primShowQName"-        , "primQNameFixity"-        , "primMetaEquality"-        , "primMetaLess"-        , "primShowMeta"-        ]-    ] ++ [-        ("primTrustMe", mkTrustMe)-    ]-  where mkTrustMe = do-            -- lookup refl constructor-            bt <- fromMaybe __IMPOSSIBLE__ <$> (lift $ getBuiltin' builtinRefl)-            let reflNm = case T.ignoreSharing bt of-                    (T.Con conHd _ []) -> T.conName conHd-                    _                -> __IMPOSSIBLE__--            mkVar <$> getConstrFun reflNm
src/full/Agda/Interaction/BasicOps.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP                   #-}-{-# LANGUAGE ScopedTypeVariables   #-} {-# LANGUAGE UndecidableInstances  #-}  {-# OPTIONS_GHC -fno-warn-orphans #-}@@ -15,7 +14,8 @@ import Control.Monad.Identity  import qualified Data.Map as Map-import Data.List hiding (null)+import qualified Data.Set as Set+import qualified Data.List as List import Data.Maybe import Data.Traversable hiding (mapM, forM, for) import Data.Monoid@@ -41,6 +41,7 @@ import Agda.TheTypeChecker import Agda.TypeChecking.Constraints import Agda.TypeChecking.Conversion+import Agda.TypeChecking.Errors ( stringTCErr ) import Agda.TypeChecking.Monad as M hiding (MetaInfo) import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Reduce@@ -55,10 +56,11 @@ import Agda.TypeChecking.CheckInternal import Agda.TypeChecking.SizedTypes.Solve import qualified Agda.TypeChecking.Pretty as TP+import Agda.TypeChecking.Warnings (runPM)  import Agda.Termination.TermCheck (termMutual) -import Agda.Utils.Except ( Error(strMsg), MonadError(catchError, throwError) )+import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List@@ -90,10 +92,10 @@     e   <- parseExpr rng s     concreteToAbstract (clScope mi) e -giveExpr :: Maybe InteractionId -> MetaId -> Expr -> TCM ()+giveExpr :: UseForce -> Maybe InteractionId -> MetaId -> Expr -> TCM () -- When translator from internal to abstract is given, this function might return -- the expression returned by the type checker.-giveExpr mii mi e = do+giveExpr force mii mi e = do     mv <- lookupMeta mi     -- In the context (incl. signature) of the meta variable,     -- type check expression and assign meta@@ -127,7 +129,7 @@             -- if there are more free variables than the context has             -- we need to abstract over the additional ones (xs2)             let (_xs1, xs2) = splitAt (size ctx) xs-            v' <- return $ foldr (\ (Arg ai x) -> I.Lam ai . I.Abs x) v' xs2+            v' <- return $ foldr mkLam v' xs2             reportSDoc "interaction.give" 20 $ TP.sep               [ TP.text "in meta context, v' = " TP.<+> prettyTCM v'               ]@@ -139,12 +141,14 @@             nowSolvingConstraints $ assign DirEq mi args v          reportSDoc "interaction.give" 20 $ TP.text "give: meta variable updated!"-        redoChecks mii+        unless (force == WithForce) $ redoChecks mii         wakeupConstraints mi         solveSizeConstraints DontDefaultToInfty-        -- Double check.-        vfull <- instantiateFull v-        checkInternal vfull t'+        unless (force == WithForce) $ do+          -- Double check.+          reportSDoc "interaction.give" 20 $ TP.text "give: double checking"+          vfull <- instantiateFull v+          checkInternal vfull t'  -- | After a give, redo termination etc. checks for function which was complemented. redoChecks :: Maybe InteractionId -> TCM ()@@ -166,22 +170,25 @@ --   Returns the given expression unchanged --   (for convenient generalization to @'refine'@). give-  :: InteractionId  -- ^ Hole.+  :: UseForce       -- ^ Skip safety checks?+  -> InteractionId  -- ^ Hole.   -> Maybe Range   -> Expr           -- ^ The expression to give.   -> TCM Expr       -- ^ If successful, the very expression is returned unchanged.-give ii mr e = liftTCM $ do+give force ii mr e = liftTCM $ do   -- if Range is given, update the range of the interaction meta   mi  <- lookupInteractionId ii   whenJust mr $ updateMetaVarRange mi   reportSDoc "interaction.give" 10 $ TP.text "giving expression" TP.<+> prettyTCM e   reportSDoc "interaction.give" 50 $ TP.text $ show $ deepUnscope e   -- Try to give mi := e-  catchError (giveExpr (Just ii) mi e) $ \ err -> case err of-    -- Turn PatternErr into proper error:-    PatternErr{} -> typeError . GenericDocError =<< do-      withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e-    _ -> throwError err+  do setMetaOccursCheck mi DontRunMetaOccursCheck -- #589, #2710: Allow giving recursive solutions.+     giveExpr force (Just ii) mi e+    `catchError` \ case+      -- Turn PatternErr into proper error:+      PatternErr{} -> typeError . GenericDocError =<< do+        withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e+      err -> throwError err   removeInteractionPoint ii   return e @@ -191,11 +198,12 @@ --   This amounts to successively try to give @e@, @e ?@, @e ? ?@, ... --   Returns the successfully given expression. refine-  :: InteractionId  -- ^ Hole.+  :: UseForce       -- ^ Skip safety checks when giving?+  -> InteractionId  -- ^ Hole.   -> Maybe Range   -> Expr           -- ^ The expression to refine the hole with.   -> TCM Expr       -- ^ The successfully given expression.-refine ii mr e = do+refine force ii mr e = do   mi <- lookupInteractionId ii   mv <- lookupMeta mi   let range = fromMaybe (getRange mv) mr@@ -211,8 +219,8 @@     tryRefine nrOfMetas r scope e = try nrOfMetas e       where         try :: Int -> Expr -> TCM Expr-        try 0 e = throwError $ strMsg "Cannot refine"-        try n e = give ii (Just r) e `catchError` (\_ -> try (n - 1) =<< appMeta e)+        try 0 e = throwError $ stringTCErr "Cannot refine"+        try n e = give force ii (Just r) e `catchError` (\_ -> try (n - 1) =<< appMeta e)          -- Apply A.Expr to a new meta         appMeta :: Expr -> TCM Expr@@ -222,7 +230,10 @@           ii <- registerInteractionPoint False rng Nothing           let info = Info.MetaInfo                 { Info.metaRange = rng-                , Info.metaScope = scope { scopePrecedence = ArgumentCtx }+                , Info.metaScope = scope { scopePrecedence = [ArgumentCtx] }+                    -- Ulf, 2017-09-07: The `ArgumentCtx` above is causing #737.+                    -- If we're building an operator application the precedence+                    -- should be something else.                 , metaNumber = Nothing -- in order to print just as ?, not ?n                 , metaNameSuggestion = ""                 }@@ -264,9 +275,11 @@         withMetaInfo mi $             evalInCurrent e -+-- | Modifier for interactive commands,+--   specifying the amount of normalization in the output.+-- data Rewrite =  AsIs | Instantiated | HeadNormal | Simplified | Normalised-    deriving (Read)+    deriving (Show, Read)  normalForm :: (Reduce t, Simplify t, Normalise t) => Rewrite -> t -> TCM t normalForm AsIs         t = return t@@ -275,8 +288,11 @@ normalForm Simplified   t = {- etaContract =<< -} simplify t normalForm Normalised   t = {- etaContract =<< -} normalise t +-- | Modifier for the interactive computation command,+--   specifying the mode of computation and result display.+-- data ComputeMode = DefaultCompute | IgnoreAbstract | UseShowInstance-  deriving (Read, Eq)+  deriving (Show, Read, Eq)  computeIgnoreAbstract :: ComputeMode -> Bool computeIgnoreAbstract DefaultCompute  = False@@ -296,6 +312,13 @@     _                     -> (text "Not a string:" $$) <$> prettyATop e showComputed _ e = prettyATop e +-- | Modifier for interactive commands,+--   specifying whether safety checks should be ignored.+data UseForce+  = WithForce     -- ^ Ignore additional checks, like termination/positivity...+  | WithoutForce  -- ^ Don't ignore any checks.+  deriving (Eq, Read, Show)+ data OutputForm a b = OutputForm Range [ProblemId] (OutputConstraint a b)   deriving (Functor) @@ -342,7 +365,7 @@       FindInScopeOF _ _ _        -> __IMPOSSIBLE__  instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where-  reify (PConstr pids cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm (getRange c) pids <$> reify c)+  reify (PConstr pids cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm (getRange c) (Set.toList pids) <$> reify c)  reifyElimToExpr :: I.Elim -> TCM Expr reifyElimToExpr e = case e of@@ -380,7 +403,7 @@               target  <- reify target               let bs = TypedBindings noRange $ Arg ai $                        TBind noRange xs domType-                  e  = A.Lam Info.exprNoRange (DomainFull bs) body+                  e  = A.Lam Info.defaultLamInfo_ (DomainFull bs) body               return $ TypedAssign m' e target             CheckArgs _ _ args t0 t1 _ -> do               t0 <- reify t0@@ -436,10 +459,10 @@     show (IsEmptyType a)        = "Is empty: " ++ show a     show (SizeLtSat a)          = "Not empty type of sizes: " ++ show a     show (FindInScopeOF s t cs) = "Resolve instance argument " ++ showCand (s,t) ++ ".\n  Candidates:\n    [ " ++-                                    intercalate "\n    , " (map showCand cs) ++ " ]"-      where showCand (tm,ty) = indent 6 $ show tm ++ " : " ++ show ty-            indent n s = intercalate ("\n" ++ replicate n ' ') (l:ls)-              where l:ls = lines s+                                    List.intercalate "\n    , " (map showCand cs) ++ " ]"+      where+      showCand (tm,ty) = indent 6 $ show tm ++ " : " ++ show ty+      indent n s = List.intercalate ("\n" ++ replicate n ' ') $ lines s  instance (ToConcrete a c, ToConcrete b d) =>          ToConcrete (OutputForm a b) (OutputForm c d) where@@ -831,7 +854,7 @@       hfs <- getRecordFieldNames d       fs <- ifM showImplicitArguments             (return $ map unArg hfs)-            (return [ unArg a | a <- hfs, getHiding a == NotHidden ])+            (return [ unArg a | a <- hfs, visible a ])       let e = C.Rec noRange $ for fs $ \ f ->             Left $ C.FieldAssignment f $ C.QuestionMark noRange Nothing       return [ prettyShow e ]@@ -849,12 +872,36 @@       tel <- lookupSection current       -- Get the names of the local variables from @scope@       -- and put them into the context.+      --+      -- Andreas, 2017-04-24, issue #2552:+      --+      -- Delete the let-bound ones, since they are not represented+      -- in the module telescope.+      --+      -- This is a temporary fix until a better solution is available,+      -- e.g., when the module telescope represents let-bound variables.+      --+      -- Unfortunately, referring to let-bound variables+      -- from the top level module telescope will for now result in a not-in-scope error.       let names :: [A.Name]-          names = reverse $ map snd $ notShadowedLocals $ scopeLocals scope-          types :: [Dom I.Type]+          names = map localVar $ filter ((False ==) . localLetBound) $ map snd $ reverse $ scopeLocals scope+      -- Andreas, 2016-12-31, issue #2371+      -- The following is an unnecessary complication, as shadowed locals+      -- are not in scope anyway (they are ambiguous).+      -- -- Replace the shadowed names by fresh names (such that they do not shadow imports)+      -- let mnames :: [Maybe A.Name]+      --     mnames = map (notShadowedLocal . snd) $ reverse $ scopeLocals scope+      -- names <- mapM (maybe freshNoName_ return) mnames+      let types :: [Dom I.Type]           types = map (snd <$>) $ telToList tel           gamma :: ListTel' A.Name-          gamma = zipWith' (\ x dom -> (x,) <$> dom) names types+          gamma = fromMaybe __IMPOSSIBLE__ $+                    zipWith' (\ x dom -> (x,) <$> dom) names types+      reportSDoc "interaction.top" 20 $ TP.vcat+        [ TP.text "BasicOps.atTopLevel"+        , TP.text "  names = " TP.<+> TP.sep (map prettyA   names)+        , TP.text "  types = " TP.<+> TP.sep (map prettyTCM types)+        ]       M.withCurrentModule current $         withScope_ scope $           addContext gamma $
src/full/Agda/Interaction/CommandLine.hs view
@@ -5,7 +5,7 @@ import Control.Monad.Reader import Control.Applicative -import Data.List as List+import qualified Data.List as List import Data.Maybe  import Agda.Interaction.BasicOps as BasicOps hiding (parseExpr)@@ -13,6 +13,7 @@  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Common+import Agda.Syntax.Internal (telToList) import qualified Agda.Syntax.Internal as I import Agda.Syntax.Parser import Agda.Syntax.Position@@ -29,6 +30,7 @@ import Agda.TypeChecking.Errors import Agda.TypeChecking.Pretty ( PrettyTCM(prettyTCM) ) import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Warnings (runPM)  import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Monad@@ -42,7 +44,7 @@  matchCommand :: String -> [Command a] -> Either [String] ([String] -> TCM (ExitCode a)) matchCommand x cmds =-    case List.filter (isPrefixOf x . fst) cmds of+    case List.filter (List.isPrefixOf x . fst) cmds of         [(_,m)] -> Right m         xs      -> Left $ List.map fst xs @@ -65,7 +67,7 @@                                     do  liftIO $ putStrLn $ "Unknown command '" ++ cmd ++ "'"                                         loop                                 Left xs ->-                                    do  liftIO $ putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)+                                    do  liftIO $ putStrLn $ "More than one command match: " ++ concat (List.intersperse ", " xs)                                         loop                     Just _ ->                         do  go =<< liftTCM (eval $ fromJust ms)@@ -202,7 +204,7 @@  giveMeta :: [String] -> TCM () giveMeta s | length s >= 2 = do-  _ <- actOnMeta s (\ii -> \e -> give ii Nothing e)+  _ <- actOnMeta s $ \ ii e -> give WithoutForce ii Nothing e   return () giveMeta _ = liftIO $ putStrLn $ ": give" ++ " metaid expr" @@ -210,7 +212,7 @@  refineMeta :: [String] -> TCM () refineMeta s | length s >= 2 = do-  _ <- actOnMeta s (\ii -> \e -> refine ii Nothing e)+  _ <- actOnMeta s $ \ ii e -> refine WithoutForce ii Nothing e   return () refineMeta _ = liftIO $ putStrLn $ ": refine" ++ " metaid expr" @@ -289,7 +291,8 @@     , "        __/ /"     , "        \\__/"     , ""-    , "The interactive mode is no longer supported. Don't complain if it doesn't work."+    -- , "The interactive mode is no longer supported. Don't complain if it doesn't work."+    , "The interactive mode is no longer under active development. Use at your own risk."     ]  -- | The help message
src/full/Agda/Interaction/EmacsTop.hs view
@@ -7,12 +7,13 @@ import Control.Monad.State  import Data.Char-import Data.List+import qualified Data.List as List import Data.Maybe  import System.IO  import Agda.Utils.Monad+import Agda.Utils.Maybe import Agda.Utils.Pretty import Agda.Utils.String @@ -23,7 +24,7 @@  import Agda.Interaction.Response as R import Agda.Interaction.InteractionTop-import Agda.Interaction.EmacsCommand+import Agda.Interaction.EmacsCommand hiding (putResponse) import Agda.Interaction.Highlighting.Emacs import Agda.Interaction.Options @@ -46,70 +47,89 @@       hSetEncoding  stdin  utf8      setInteractionOutputCallback $-        liftIO . mapM_ print <=< lispifyResponse+        mapM_ print <=< lispifyResponse -    handleCommand_ (lift setup) `evalStateT` initCommandState+    commands <- liftIO $ initialiseCommandQueue readCommand +    handleCommand_ (lift setup) `evalStateT` initCommandState commands+     opts <- commandLineOptions-    _ <- interact' `runStateT` initCommandState { optionsOnReload = opts{ optAbsoluteIncludePaths = [] } }+    _ <- interact' `runStateT`+           (initCommandState commands)+             { optionsOnReload = opts{ optAbsoluteIncludePaths = [] } }     return ()   where+  interact' :: CommandM ()+  interact' = do+    Bench.reset+    done <- Bench.billTo [] $ do -    interact' :: CommandM ()-    interact' = do-      Bench.reset-      done <- Bench.billTo [] $ do+      liftIO $ do+        putStr "Agda2> "+        hFlush stdout+      c <- nextCommand+      case c of+        Done      -> return True -- Done.+        Error s   -> liftIO (putStrLn s) >> return False+        Command c -> do+          maybeAbort (runInteraction c)+          return False -        liftIO $ do-          putStr "Agda2> "-          hFlush stdout-        done <- liftIO isEOF-        unless done $ do-            r <- liftIO getLine-            _ <- return $! length r     -- force to read the full input line-            case dropWhile isSpace r of-                ""  -> return ()-                ('-':'-':_) -> return ()-                _ -> case listToMaybe $ reads r of-                    Just (x, "")  -> runInteraction x-                    Just (_, rem) -> liftIO $ putStrLn $ "not consumed: " ++ rem-                    _ ->             liftIO $ putStrLn $ "cannot read: " ++ r-        return done+    lift Bench.print+    unless done interact' -      lift Bench.print-      unless done interact'+  -- Reads the next command from stdin. +  readCommand :: IO Command+  readCommand = do+    done <- isEOF+    if done then+      return Done+    else do+      r <- getLine+      _ <- return $! length r     -- force to read the full input line+      case dropWhile isSpace r of+        ""          -> readCommand+        ('-':'-':_) -> readCommand+        _           -> case listToMaybe $ reads r of+          Just (x, "")  -> return $ Command x+          Just (_, rem) -> return $ Error $ "not consumed: " ++ rem+          _             -> return $ Error $ "cannot read: " ++ r++-- | Given strings of goals, warnings and errors, return a pair of the+--   body and the title for the info buffer+formatWarningsAndErrors :: String -> String -> String -> (String, String)+formatWarningsAndErrors g w e = (body, title)+  where+    isG = not $ null g+    isW = not $ null w+    isE = not $ null e+    title = List.intercalate "," $ catMaybes+              [ " Goals"    <$ guard isG+              , " Warnings" <$ guard isW+              , " Errors"   <$ guard isE+              , " Done"     <$ guard (not (isG || isW || isE))+              ]++    body = List.intercalate "\n" $ catMaybes+             [ g                    <$ guard isG+             , delimiter "Warnings" <$ guard (isW && (isG || isE))+             , w                    <$ guard isW+             , delimiter "Errors"   <$ guard (isE && (isG || isW))+             , e                    <$ guard isE+             ]+ -- | Convert Response to an elisp value for the interactive emacs frontend. -lispifyResponse :: Response -> TCM [Lisp String]-lispifyResponse (Resp_HighlightingInfo info modFile) =-  (:[]) <$> lispifyHighlightingInfo info modFile+lispifyResponse :: Response -> IO [Lisp String]+lispifyResponse (Resp_HighlightingInfo info method modFile) =+  (:[]) <$> lispifyHighlightingInfo info method modFile lispifyResponse (Resp_DisplayInfo info) = return $ case info of-    Info_CompilationOk -> f "The module was successfully compiled." "*Compilation result*"+    Info_CompilationOk w e -> f body "*Compilation result*"+      where (body, _) = formatWarningsAndErrors "The module was successfully compiled.\n" w e -- abusing the goals field since we ignore the title     Info_Constraints s -> f s "*Constraints*"-    Info_AllGoalsWarnings g  w e -> f body ("*All" ++ title ++ "*")-      where-        isG = not $ null g-        isW = not $ null w-        isE = not $ null e-        title = intercalate "," $ catMaybes-                  [ " Goals"    <$ guard isG-                  , " Warnings" <$ guard isW-                  , " Errors"   <$ guard isE-                  , " Done"     <$ guard (not (isG || isW || isE))-                  ]-        delimiter s = concat [ replicate 4 '\x2014'-                             , " ", s, " "-                             , replicate (54 - length s) '\x2014'-                             ]--        body = intercalate "\n" $ catMaybes-                 [ g                    <$ guard isG-                 , delimiter "Warnings" <$ guard (isW && (isG || isE))-                 , w                    <$ guard isW-                 , delimiter "Errors"   <$ guard (isE && (isG || isW))-                 , e                    <$ guard isE-                 ]+    Info_AllGoalsWarnings g w e -> f body ("*All" ++ title ++ "*")+      where (body, title) = formatWarningsAndErrors g w e     Info_Auto s -> f s "*Auto*"     Info_Error s -> f s "*Error*"     -- FNF: if Info_Warning comes back into use, the above should be@@ -134,6 +154,7 @@     Info_Version -> f ("Agda version " ++ versionWithCommitInfo) "*Agda Version*"   where f content bufname = [ display_info' False bufname content ] lispifyResponse Resp_ClearHighlighting = return [ L [ A "agda2-highlight-clear" ] ]+lispifyResponse Resp_DoneAborting = return [ L [ A "agda2-abort-done" ] ] lispifyResponse Resp_ClearRunningInfo = return [ clearRunningInfo ] -- FNF: if Info_Warning comes back into use, the above should be -- return [ clearRunningInfo, clearWarning ]@@ -142,12 +163,10 @@   | otherwise = return [ L [A "agda2-verbose", A (quote s)] ] lispifyResponse (Resp_Status s)     = return [ L [ A "agda2-status-action"-                 , A (quote $ intercalate "," $ catMaybes [checked, showImpl])+                 , A (quote $ List.intercalate "," $ catMaybes [checked, showImpl])                  ]              ]   where-    boolToMaybe b x = if b then Just x else Nothing-     checked  = boolToMaybe (sChecked               s) "Checked"     showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit" 
src/full/Agda/Interaction/FindFile.hs view
@@ -23,7 +23,7 @@ import Control.Applicative hiding (empty) import Control.Monad import Control.Monad.Trans-import Data.List hiding (null)+import qualified Data.List as List import Data.Maybe (catMaybes) import qualified Data.Map as Map import System.FilePath@@ -39,6 +39,7 @@ import Agda.TypeChecking.Monad.Benchmark (billTo) import qualified Agda.TypeChecking.Monad.Benchmark as Bench import {-# SOURCE #-} Agda.TypeChecking.Monad.Options (getIncludeDirs)+import Agda.TypeChecking.Warnings (runPM)  import Agda.Utils.Except import Agda.Utils.FileName@@ -121,7 +122,7 @@       filesShortList <- fileList sourceFileExtsShortList       existingFiles <-         liftIO $ filterM (doesFileExistCaseSensitive . filePath) files-      return $ case nub existingFiles of+      return $ case List.nub existingFiles of         []     -> (Left (NotFound filesShortList), modFile)         [file] -> (Right file, Map.insert m file modFile)         files  -> (Left (Ambiguous existingFiles), modFile)@@ -182,19 +183,18 @@ -- --   No side effects!  Only in 'TCM' to raise errors. -moduleName' :: AbsolutePath -> TCM (Ranged TopLevelModuleName)+moduleName' :: AbsolutePath -> TCM TopLevelModuleName moduleName' file = billTo [Bench.ModuleName] $ do   q <- runPM (parseFile' moduleParser file)   let name = topLevelModuleName q-  case name of-    TopLevelModuleName ["_"] -> do+  if moduleNameParts name == ["_"] then do       q <- runPM (parse moduleNameParser defaultName)              `catchError` \_ ->            typeError $              GenericError $ "File name " ++ show file ++                " is invalid as it does not correspond to a valid module name."-      return $ Ranged (getRange q) $ TopLevelModuleName [defaultName]-    _ -> return $ Ranged (getRange q) name+      return $ TopLevelModuleName (getRange q) [defaultName]+    else return name   where     defaultName = rootNameModule file @@ -211,7 +211,7 @@     _      -> __IMPOSSIBLE__   where     stripExtension :: String -> String -> Maybe String-    stripExtension e = fmap reverse . stripPrefix (reverse e) . reverse+    stripExtension e = fmap reverse . List.stripPrefix (reverse e) . reverse  rootNameModule :: AbsolutePath -> String rootNameModule = dropAgdaExtension . snd . splitFileName . filePath@@ -224,7 +224,8 @@  moduleName :: AbsolutePath -> TCM TopLevelModuleName moduleName file = do-  Ranged r m <- moduleName' file+  m <- moduleName' file+  let r = getRange m   -- Andreas, 2016-07-11, issue 2092   -- The error range should be set to the file with the wrong module name   -- not the importing one (which would be the default).
src/full/Agda/Interaction/FindFile.hs-boot view
@@ -1,10 +1,9 @@ module Agda.Interaction.FindFile where -import Agda.Syntax.Common (Ranged) import Agda.Syntax.Concrete.Name (TopLevelModuleName) import Agda.TypeChecking.Monad.Base (TCM) import Agda.Utils.FileName (AbsolutePath)  moduleName :: AbsolutePath -> TCM TopLevelModuleName-moduleName' :: AbsolutePath -> TCM (Ranged TopLevelModuleName)+moduleName' :: AbsolutePath -> TCM TopLevelModuleName checkModuleName :: TopLevelModuleName -> AbsolutePath -> Maybe TopLevelModuleName -> TCM ()
src/full/Agda/Interaction/Highlighting/Emacs.hs view
@@ -38,7 +38,8 @@ toAtoms :: Aspects -> [String] toAtoms m = map toAtom (otherAspects m) ++ toAtoms' (aspect m)   where-  toAtom x = map toLower (show x)+  toAtom :: Show a => a -> String+  toAtom = map toLower . show    kindToAtom (Constructor Inductive)   = "inductiveconstructor"   kindToAtom (Constructor CoInductive) = "coinductiveconstructor"@@ -58,20 +59,18 @@   :: ModuleToSource      -- ^ Must contain a mapping for the definition site's module, if any.   -> (Range, Aspects) -> Lisp String-showAspects modFile (r, m) =-    L $ ((map (A . show) [from r, to r])-           ++-         [L $ map A $ toAtoms m]-           ++-         (A $ maybe "nil" quote $ note m)-         :-          defSite)+showAspects modFile (r, m) = L $+    (map (A . show) [from r, to r])+      +++    [L $ map A $ toAtoms m]+      +++    [A $ maybe "nil" quote $ note m]+      +++    (maybeToList $ fmap defSite $ definitionSite m)   where-  defSite = case definitionSite m of-    Nothing     -> []-    Just (m, p) -> case Map.lookup m modFile of-      Nothing -> __IMPOSSIBLE__-      Just f  -> [Cons (A $ quote $ filePath f) (A $ show p)]+  defSite (DefinitionSite m p _ _) =+    Cons (A $ quote $ filePath f) (A $ show p)+    where f = Map.findWithDefault __IMPOSSIBLE__ m modFile  -- | Turns syntax highlighting information into a list of -- S-expressions.@@ -83,12 +82,12 @@  lispifyHighlightingInfo   :: HighlightingInfo+  -> HighlightingMethod   -> ModuleToSource      -- ^ Must contain a mapping for every definition site's module.-  -> TCM (Lisp String)-lispifyHighlightingInfo h modFile = do-  method <- envHighlightingMethod <$> ask-  liftIO $ case ranges h of+  -> IO (Lisp String)+lispifyHighlightingInfo h method modFile = do+  case ranges h of     _             | method == Direct                   -> direct     ((_, mi) : _) | otherAspects mi == [TypeChecks] ||                     mi == mempty                       -> direct
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -43,10 +43,12 @@   hiding (MetaInfo, Primitive, Constructor, Record, Function, Datatype) import qualified Agda.TypeChecking.Monad as M import Agda.TypeChecking.Positivity.Occurrence+import Agda.TypeChecking.Warnings (runPM)  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Concrete (FieldAssignment'(..)) import qualified Agda.Syntax.Common as Common+import qualified Agda.Syntax.Concrete.Name as C import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Fixity import qualified Agda.Syntax.Info as SI@@ -64,6 +66,7 @@ import Agda.Utils.Maybe import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Null+import Agda.Utils.Pretty import Agda.Utils.HashMap (HashMap) import qualified Agda.Utils.HashMap as HMap @@ -109,14 +112,17 @@ -- | Lispify and print the given highlighting information.  printHighlightingInfo :: MonadTCM tcm => HighlightingInfo -> tcm ()-printHighlightingInfo x = do+printHighlightingInfo info = do   modToSrc <- use stModuleToSource-  liftTCM $ reportSLn "highlighting" 50 $-    "Printing highlighting info:\n" ++ show x ++ "\n" ++-    "  modToSrc = " ++ show modToSrc-  unless (null $ ranges x) $ do+  method   <- view eHighlightingMethod+  liftTCM $ reportSLn "highlighting" 50 $ unlines+    [ "Printing highlighting info:"+    , show info+    , "  modToSrc = " ++ show modToSrc+    ]+  unless (null $ ranges info) $ do     liftTCM $ appInteractionOutputCallback $-        Resp_HighlightingInfo x modToSrc+        Resp_HighlightingInfo info method modToSrc  -- | Highlighting levels. @@ -129,20 +135,24 @@     --   constructors.  -- | Generate syntax highlighting information for the given--- declaration, and (if appropriate) print it. If the--- 'HighlightingLevel' is @'Full'@, then the state is--- additionally updated with the new highlighting info (in case of a--- conflict new info takes precedence over old info).+-- declaration, and (if appropriate) print it. If the boolean is+-- 'True', then the state is additionally updated with the new+-- highlighting info (in case of a conflict new info takes precedence+-- over old info). -- -- The procedure makes use of some of the token highlighting info in -- 'stTokens' (that corresponding to the interval covered by the--- declaration). If the 'HighlightingLevel' is @'Full'@,--- then this token highlighting info is additionally removed from--- 'stTokens'.+-- declaration). If the boolean is 'True', then this token+-- highlighting info is additionally removed from 'stTokens'. -generateAndPrintSyntaxInfo :: A.Declaration -> Level -> TCM ()-generateAndPrintSyntaxInfo decl _ | null $ P.getRange decl = return ()-generateAndPrintSyntaxInfo decl hlLevel = do+generateAndPrintSyntaxInfo+  :: A.Declaration+  -> Level+  -> Bool+     -- ^ Update the state?+  -> TCM ()+generateAndPrintSyntaxInfo decl _ _ | null $ P.getRange decl = return ()+generateAndPrintSyntaxInfo decl hlLevel updateState = do   file <- fromMaybe __IMPOSSIBLE__ <$> asks envCurrentPath    reportSLn "import.iface.create" 15 $@@ -152,7 +162,7 @@             Partial {} -> "(first approximation)"         ++ "." -  reportSLn "highlighting.names" 60 $ "highlighting names = " ++ show names+  reportSLn "highlighting.names" 60 $ "highlighting names = " ++ prettyShow names    M.ignoreAbstractMode $ do     modMap <- sourceToModule@@ -166,8 +176,12 @@       Full{} -> generateConstructorInfo modMap file kinds decl       _      -> return mempty -    warnInfo <- Fold.fold . map (warningHighlighting . tcWarning) <$> use stTCWarnings+    cm <- P.rangeFile <$> view eRange+    reportSLn "highlighting.warning" 60 $ "current path = " ++ show cm +    warnInfo <- Fold.foldMap warningHighlighting+                 . filter ((cm ==) . tcWarningOrigin) <$> use stTCWarnings+     let (from, to) = case P.rangeToInterval (P.getRange decl) of           Nothing -> __IMPOSSIBLE__           Just i  -> ( fromIntegral $ P.posPos $ P.iStart i@@ -189,10 +203,9 @@                        `mappend`                      curTokens -    case hlLevel of-      Full{} -> do stSyntaxInfo %= mappend syntaxInfo-                   stTokens     .= prevTokens `mappend` postTokens-      _      -> return ()+    when updateState $ do+      stSyntaxInfo %= mappend syntaxInfo+      stTokens     .= prevTokens `mappend` postTokens      ifTopLevelAndHighlightingLevelIs NonInteractive $       printHighlightingInfo syntaxInfo@@ -243,12 +256,14 @@                           (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })                           Nothing +    -- For top level modules, we set the binding site to the beginning of the file+    -- so that clicking on an imported module will jump to the beginning of the file+    -- which defines this module.     mod isTopLevelModule n =       nameToFile modMap file []                  (A.nameConcrete n) P.noRange                  (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })-                 (Just $ (if isTopLevelModule then P.beginningOfFile else id)-                           (A.nameBindingSite n))+                 (Just $ applyWhen isTopLevelModule P.beginningOfFile $ A.nameBindingSite n)      getVarAndField :: A.Expr -> File     getVarAndField (A.Var x)            = bound x@@ -375,7 +390,9 @@   tokenToCFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)   tokenToCFile (T.TokId {})                     = mempty   tokenToCFile (T.TokQId {})                    = mempty-  tokenToCFile (T.TokString {})                 = mempty+  tokenToCFile (T.TokString (i,s))+    | "--" `isPrefixOf` s                       = aToF Option (P.getRange i)+    | otherwise                                 = mempty   tokenToCFile (T.TokDummy {})                  = mempty   tokenToCFile (T.TokEOF {})                    = mempty @@ -424,7 +441,7 @@   defnToKind   M.Record{}                          = Record   defnToKind   M.Constructor{ M.conInd = i }       = Constructor i   defnToKind   M.Primitive{}                       = Primitive-  defnToKind   M.AbstractDefn                      = __IMPOSSIBLE__+  defnToKind   M.AbstractDefn{}                    = __IMPOSSIBLE__    declToKind :: A.Declaration ->                 HashMap A.QName NameKind -> HashMap A.QName NameKind@@ -530,12 +547,33 @@  -- | Generate syntax highlighting for warnings. -warningHighlighting :: Warning -> File-warningHighlighting w = case w of-  TerminationIssue terrs    -> terminationErrorHighlighting terrs-  NotStrictlyPositive d ocs -> positivityErrorHighlighting d ocs-  _ -> mempty-+warningHighlighting :: TCWarning -> File+warningHighlighting w = case tcWarning w of+  TerminationIssue terrs     -> terminationErrorHighlighting terrs+  NotStrictlyPositive d ocs  -> positivityErrorHighlighting d ocs+  UnreachableClauses{}       -> unreachableErrorHighlighting $ P.getRange w+  CoverageIssue{}            -> coverageErrorHighlighting $ P.getRange w+  CoverageNoExactSplit{}     -> catchallHighlighting $ P.getRange w+  -- expanded catch-all case to get a warning for new constructors+  UnsolvedMetaVariables{}    -> mempty+  UnsolvedInteractionMetas{} -> mempty+  UnsolvedConstraints{}      -> mempty+  OldBuiltin{}               -> mempty+  EmptyRewritePragma{}       -> mempty+  UselessPublic{}            -> mempty+  UselessInline{}            -> mempty+  ParseWarning{}             -> mempty+  GenericWarning{}           -> mempty+  GenericNonFatalError{}     -> mempty+  SafeFlagPostulate{}        -> mempty+  SafeFlagPragma{}           -> mempty+  SafeFlagNonTerminating     -> mempty+  SafeFlagTerminating        -> mempty+  SafeFlagPrimTrustMe        -> mempty+  SafeFlagNoPositivityCheck  -> mempty+  SafeFlagPolarity           -> mempty+  DeprecationWarning{}       -> mempty+  NicifierIssue{}            -> mempty  -- | Generate syntax highlighting for termination errors. @@ -558,7 +596,20 @@     rs = case o of Unknown -> []; Known r _ -> [r]     m  = mempty { otherAspects = [PositivityProblem] } +unreachableErrorHighlighting :: P.Range -> File+unreachableErrorHighlighting r = singleton (rToR $ P.continuousPerLine r) m+  where m = mempty { otherAspects = [ReachabilityProblem] } +coverageErrorHighlighting :: P.Range -> File+coverageErrorHighlighting r = singleton (rToR $ P.continuousPerLine r) m+  where m = mempty { otherAspects = [CoverageProblem] }+++catchallHighlighting :: P.Range -> File+catchallHighlighting r = singleton (rToR $ P.continuousPerLine r) m+  where m = mempty { otherAspects = [CatchallClause] }++ -- | Generates and prints syntax highlighting information for unsolved -- meta-variables and certain unsolved constraints. @@ -650,18 +701,65 @@ nameToFile modMap file xs x fr m mR =   -- We don't care if we get any funny ranges.   if all (== Strict.Just file) fileNames then+    frFile `mappend`     several (map rToR rs)-            ((m $ C.isOperator x) { definitionSite = mFilePos })+            (aspects { definitionSite = mFilePos })    else     mempty   where+  aspects    = m $ C.isOperator x   fileNames  = catMaybes $ map (fmap P.srcFile . P.rStart . P.getRange) (x : xs)-  rs         = applyWhen (not $ null fr) (fr :) $ map P.getRange (x : xs)+  frFile     = singleton (rToR fr) (aspects { definitionSite = notHere <$> mFilePos })+  rs         = map P.getRange (x : xs)++  -- The fixity declaration should not get a symbolic anchor.+  notHere d = d { defSiteHere = False }++  mFilePos  :: Maybe DefinitionSite   mFilePos   = do     r <- mR     P.Pn { P.srcFile = Strict.Just f, P.posPos = p } <- P.rStart r     mod <- Map.lookup f modMap-    return (mod, fromIntegral p)+    -- Andreas, 2017-06-16, Issue #2604: Symbolic anchors.+    -- We drop the file name part from the qualifiers, since+    -- this is contained in the html file name already.+    -- We want to get anchors of the form:+    -- @<a name="TopLevelModule.html#LocalModule.NestedModule.identifier">@+    let qualifiers = drop (length $ C.moduleNameParts mod) xs+    -- For bound variables, we do not create symbolic anchors.+        local = maybe True isLocalAspect $ aspect aspects+    return $ DefinitionSite+      { defSiteModule = mod+      , defSitePos    = fromIntegral p+        -- Is our current position the definition site?+      , defSiteHere   = r == P.getRange x+        -- For bound variables etc. we do not create a symbolic anchor name.+        -- Also not for names that include anonymous modules,+        -- otherwise, we do not get unique anchors.+      , defSiteAnchor = if local || C.isNoName x || any Common.isUnderscore qualifiers+          then Nothing+          else Just $ prettyShow $ foldr C.Qual (C.QName x) qualifiers+      }++  -- Is the name a bound variable or similar? If in doubt, yes.+  isLocalAspect :: Aspect -> Bool+  isLocalAspect = \case+    Name mkind _ -> maybe True isLocal mkind+    _ -> True+  isLocal :: NameKind -> Bool+  isLocal = \case+    Bound         -> True+    Argument      -> True+    Constructor{} -> False+    Datatype      -> False+    Field         -> False+    Function      -> False+    Module        -> False+    Postulate     -> False+    Primitive     -> False+    Record        -> False+    Macro         -> False+  -- | A variant of 'nameToFile' for qualified abstract names. 
src/full/Agda/Interaction/Highlighting/HTML.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP               #-}+{-# LANGUAGE OverloadedStrings #-}  -- | Function for generating highlighted, hyperlinked HTML from Agda -- sources.@@ -14,21 +15,31 @@   , code   ) where +import Prelude hiding ((!!), concatMap) import Control.Applicative import Control.Monad import Control.Monad.Trans  import Data.Function import Data.Monoid+import Data.Foldable (toList, concatMap) import Data.Maybe import qualified Data.IntMap as IntMap import qualified Data.Map    as Map import qualified Data.List   as List+import Data.Text.Lazy (Text) +import qualified Network.URI.Encode+ import System.FilePath import System.Directory -import Text.XHtml.Strict+import Text.Blaze.Html5 hiding (code, map, title)+import qualified Text.Blaze.Html5 as Html5+import Text.Blaze.Html5.Attributes as Attr+import Text.Blaze.Html.Renderer.Text+  -- The imported operator (!) attaches an Attribute to an Html value+  -- The defined operator (!!) attaches a list of such Attributes  import Paths_Agda @@ -42,9 +53,10 @@ import qualified Agda.TypeChecking.Monad as TCM  import Agda.Utils.FileName (filePath)+import Agda.Utils.Function import Agda.Utils.Lens import qualified Agda.Utils.IO.UTF8 as UTF8-import Agda.Utils.Pretty+import Agda.Utils.Pretty hiding ((<>)) import Agda.Utils.Tuple  #include "undefined.h"@@ -64,8 +76,10 @@ generateHTML :: TCM () generateHTML = generateHTMLWithPageGen pageGen   where+  pageGen :: FilePath -> C.TopLevelModuleName -> CompressedFile -> TCM ()   pageGen dir mod hinfo = generatePage renderer dir mod     where+    renderer :: FilePath -> FilePath -> String -> Text     renderer css _ contents = page css mod $ code $ tokenStream contents hinfo  -- | Prepare information for HTML page generation.@@ -105,54 +119,55 @@ -- | Converts module names to the corresponding HTML file names.  modToFile :: C.TopLevelModuleName -> FilePath-modToFile m = render (pretty m) <.> "html"+modToFile m =+  Network.URI.Encode.encode $+    render (pretty m) <.> "html"  -- | Generates a highlighted, hyperlinked version of the given module.  generatePage-  :: (FilePath -> FilePath -> String -> String)  -- ^ Page renderer+  :: (FilePath -> FilePath -> String -> Text)  -- ^ Page renderer   -> FilePath              -- ^ Directory in which to create files.   -> C.TopLevelModuleName  -- ^ Module to be highlighted.   -> TCM () generatePage renderpage dir mod = do-  mf <- Map.lookup mod <$> use TCM.stModuleToSource-  case mf of-    Nothing -> __IMPOSSIBLE__-    Just f  -> do-      contents <- liftIO $ UTF8.readTextFile $ filePath f-      css      <- maybe defaultCSSFile id . optCSSFile <$>-                    TCM.commandLineOptions-      let html = renderpage css (filePath f) contents-      TCM.reportSLn "html" 1 $ "Generating HTML for " ++-                               render (pretty mod) ++-                               " (" ++ target ++ ")."-      liftIO $ UTF8.writeFile target html+  f <- fromMaybe __IMPOSSIBLE__ . Map.lookup mod <$> use TCM.stModuleToSource+  contents <- liftIO $ UTF8.readTextFile $ filePath f+  css      <- fromMaybe defaultCSSFile . optCSSFile <$>+                TCM.commandLineOptions+  let html = renderpage css (filePath f) contents+  TCM.reportSLn "html" 1 $ "Generating HTML for " +++                           render (pretty mod) +++                           " (" ++ target ++ ")."+  liftIO $ UTF8.writeTextToFile target html   where target = dir </> modToFile mod ++-- | Attach multiple Attributes++(!!) :: Html -> [Attribute] -> Html+h !! as = h ! mconcat as+ -- | Constructs the web page, including headers.  page :: FilePath              -- ^ URL to the CSS file.      -> C.TopLevelModuleName  -- ^ Module to be highlighted.      -> Html-     -> String-page css modName pagecontent = renderHtml $-  header (thetitle << render (pretty modName)-            +++-          meta ! [ httpequiv "Content-Type"-                 , content "text/html; charset=UTF-8"-                 ]-            +++-          meta ! [ httpequiv "Content-Style-Type"-                 , content "text/css"-                 ]-            +++-          thelink noHtml ! [ href css-                           , rel "stylesheet"-                           , thetype "text/css"-                           ])-  +++-  body << pre << pagecontent+     -> Text+page css modName pagecontent = renderHtml $ docTypeHtml $ hdr <> rest +  where++    hdr = Html5.head $ mconcat+      [ meta !! [ charset "utf-8" ]+      , Html5.title (toHtml $ render $ pretty modName)+      , link !! [ rel "stylesheet"+                , href (stringValue css)+                ]+      ]++    rest = body (pre pagecontent)+ -- | Constructs token stream ready to print.  tokenStream@@ -162,7 +177,7 @@ tokenStream contents info =   map (\cs -> case cs of           (mi, (pos, _)) : _ ->-            (pos, map (snd . snd) cs, maybe mempty id mi)+            (pos, map (snd . snd) cs, fromMaybe mempty mi)           [] -> __IMPOSSIBLE__) $   List.groupBy ((==) `on` fst) $   map (\(pos, c) -> (IntMap.lookup pos infoMap, (pos, c))) $@@ -174,26 +189,32 @@  code :: [(Int, String, Aspects)]      -> Html-code = mconcat . map (\(pos, s, mi) -> annotate pos mi (stringToHtml s))+code = mconcat . map mkHtml   where+  mkHtml :: (Int, String, Aspects) -> Html+  mkHtml (pos, s, mi) =+    -- Andreas, 2017-06-16, issue #2605:+    -- Do not create anchors for whitespace.+    applyUnless (mi == mempty) (annotate pos mi) $ toHtml s+   annotate :: Int -> Aspects -> Html -> Html-  annotate pos mi = anchor ! attributes+  annotate pos mi content = a content !! attributes     where-    attributes =-      [name (show pos)] ++-      maybe [] link (definitionSite mi) ++-      (case classes of-        [] -> []-        cs -> [theclass $ unwords cs])+    attributes = concat+      [ [Attr.id $ stringValue $ applyWhen here anchorName $ show pos ]+      , toList $ fmap link mDefinitionSite+      , class_ (stringValue $ unwords classes) <$ guard (not $ null classes)+      ] -    classes =-      maybe [] noteClasses (note mi)-      ++ otherAspectClasses (otherAspects mi)-      ++ maybe [] aspectClasses (aspect mi)+    classes = concat+      [ concatMap noteClasses (note mi)+      , otherAspectClasses (otherAspects mi)+      , concatMap aspectClasses (aspect mi)+      ]      aspectClasses (Name mKind op) = kindClass ++ opClass       where-      kindClass = maybe [] ((: []) . showKind) mKind+      kindClass = toList $ fmap showKind mKind        showKind (Constructor Inductive)   = "InductiveConstructor"       showKind (Constructor CoInductive) = "CoinductiveConstructor"@@ -207,4 +228,13 @@     -- Notes are not included.     noteClasses s = [] -    link (m, pos) = [href $ modToFile m ++ "#" ++ show pos]+    mDefinitionSite = definitionSite mi+    here       = maybe False defSiteHere mDefinitionSite+    anchorName = (`fromMaybe` maybe __IMPOSSIBLE__ defSiteAnchor mDefinitionSite)+    link (DefinitionSite m pos _here aName) = href $ stringValue $+      -- If the definition site points to the top of a file,+      -- we drop the anchor part and just link to the file.+      applyUnless (pos <= 1)+        (++ "#" +++         Network.URI.Encode.encode (fromMaybe (show pos) aName))+        (Network.URI.Encode.encode $ modToFile m)
src/full/Agda/Interaction/Highlighting/LaTeX.hs view
@@ -14,16 +14,26 @@ import Data.Maybe import Data.Function import Control.Monad.RWS.Strict+import Control.Applicative+import Control.Arrow (second) import System.Directory+import System.Exit import System.FilePath+import System.Process import Data.Text (Text)-import qualified Data.Text          as T-import qualified Data.Text.IO       as T-import qualified Data.Text.Encoding as E-import qualified Data.ByteString    as BS+import qualified Data.Text               as T+#ifdef COUNT_CLUSTERS+import qualified Data.Text.ICU           as ICU+#endif+import qualified Data.Text.IO            as T+import qualified Data.Text.Lazy          as L+import qualified Data.Text.Lazy.Encoding as E+import qualified Data.ByteString.Lazy    as BS -import qualified Data.IntMap as IntMap-import qualified Data.List   as List+import Data.HashSet (HashSet)+import qualified Data.HashSet as Set+import qualified Data.IntMap  as IntMap+import qualified Data.List    as List  import Paths_Agda @@ -31,16 +41,18 @@ import Agda.Syntax.Common import Agda.Syntax.Concrete   (TopLevelModuleName, moduleNameParts, projectRoot)+import Agda.Syntax.Parser.Literate (literateTeX, LayerRole, atomizeLayers)+import qualified Agda.Syntax.Parser.Literate as L+import Agda.Syntax.Position (startPos) import qualified Agda.Interaction.FindFile as Find import Agda.Interaction.Highlighting.Precise import Agda.TypeChecking.Monad (TCM, Interface(..)) import qualified Agda.TypeChecking.Monad as TCM import Agda.Interaction.Options+  (optGHCiInteraction, optLaTeXDir, optCountClusters) import Agda.Compiler.CallCompiler import qualified Agda.Utils.IO.UTF8 as UTF8-import Agda.Utils.FileName (filePath)--import Agda.Utils.Except ( ExceptT, MonadError(throwError), runExceptT )+import Agda.Utils.FileName (filePath, AbsolutePath, mkAbsolute)  #include "undefined.h" import Agda.Utils.Impossible@@ -53,15 +65,66 @@ -- or not, the reader part isn't used, the writer is where the output -- goes and the state is for keeping track of the tokens and some other -- useful info, and the I/O part is used for printing debugging info.-type LaTeX = ExceptT String (RWST () Text State IO) +type LaTeX = RWST () [Output] State IO++-- | Output items.++data Output+  = Text !Text+    -- ^ A piece of text.+  | MaybeColumn !AlignmentColumn+    -- ^ A column. If it turns out to be an indentation column that is+    --   not used to indent or align something, then no column will be+    --   generated, only whitespace ('agdaSpace').+  deriving Show++-- | Column kinds.++data Kind+  = Indentation+    -- ^ Used only for indentation (the placement of the first token+    -- on a line, relative to tokens on previous lines).+  | Alignment+    -- ^ Used both for indentation and for alignment.+  deriving (Eq, Show)++-- | Unique identifiers for indentation columns.++type IndentationColumnId = Int++-- | Alignment and indentation columns.++data AlignmentColumn = AlignmentColumn+  { columnCodeBlock :: !Int+    -- ^ The column's code block.+  , columnColumn :: !Int+    -- ^ The column number.+  , columnKind :: Maybe IndentationColumnId+    -- ^ The column kind. 'Nothing' for alignment columns and @'Just'+    -- i@ for indentation columns, where @i@ is the column's unique+    -- identifier.+  } deriving Show+ data State = State-  { tokens     :: Tokens-  , column     :: !Int    -- ^ Column number, used for polytable alignment.-  , indent     :: !Int    -- ^ Indentation level, also for alignment.-  , indentPrev :: !Int-  , inCode     :: !Bool   -- ^ Keeps track of whether we are in a code-                          -- block or not.+  { codeBlock     :: !Int   -- ^ The number of the current code block.+  , column        :: !Int   -- ^ The current column number.+  , columns       :: [AlignmentColumn]+                            -- ^ All alignment columns found on the+                            --   current line (so far), in reverse+                            --   order.+  , columnsPrev   :: [AlignmentColumn]+                            -- ^ All alignment columns found in+                            --   previous lines (in any code block),+                            --   with larger columns coming first.+  , nextId        :: !IndentationColumnId+                            -- ^ The next indentation column+                            -- identifier.+  , usedColumns   :: HashSet IndentationColumnId+                            -- ^ Indentation columns that have+                            -- actually+                            --   been used.+  , countClusters :: !Bool  -- ^ Count extended grapheme clusters?   }  type Tokens = [Token]@@ -69,12 +132,12 @@ data Token = Token   { text     :: !Text   , info     :: Aspects-  , position :: !Int     -- ^ Is not used currently, but could-                         -- potentially be used for hyperlinks as in-                         -- the HTML output?   }   deriving Show +withTokenText :: (Text -> Text) -> Token -> Token+withTokenText f tok@Token{text = t} = tok{text = f t}+ data Debug = MoveColumn | NonCode | Code | Spaces | Output   deriving (Eq, Show) @@ -84,21 +147,42 @@ debugs = []  -- | Run function for the @LaTeX@ monad.-runLaTeX :: LaTeX a -> () -> State -> IO (Either String a, State, Text)-runLaTeX = runRWST . runExceptT+runLaTeX ::+  LaTeX a -> () -> State -> IO (a, State, [Output])+runLaTeX = runRWST -emptyState :: State-emptyState = State-  { tokens     = []-  , column     = 0-  , indent     = 0-  , indentPrev = 0-  , inCode     = False+emptyState+  :: Bool  -- ^ Count extended grapheme clusters?+  -> State+emptyState cc = State+  { codeBlock     = 0+  , column        = 0+  , columns       = []+  , columnsPrev   = []+  , nextId        = 0+  , usedColumns   = Set.empty+  , countClusters = cc   }  ------------------------------------------------------------------------ -- * Some helpers. +-- | Gives the size of the string. If cluster counting is enabled,+-- then the number of extended grapheme clusters is computed (the root+-- locale is used), and otherwise the number of code points.++size :: Text -> LaTeX Int+size t = do+  cc <- countClusters <$> get+  if cc then+#ifdef COUNT_CLUSTERS+    return $ length $ ICU.breaks (ICU.breakCharacter ICU.Root) t+#else+    __IMPOSSIBLE__+#endif+   else+    return $ T.length t+ (<+>) :: Text -> Text -> Text (<+>) = T.append @@ -117,112 +201,121 @@       Nothing         -> Nothing       Just (pre, suf) -> Just (T.reverse suf, T.reverse pre) +-- | Does the string consist solely of whitespace?+ isSpaces :: Text -> Bool isSpaces = T.all isSpace -isActualSpaces :: Text -> Bool-isActualSpaces = T.all (== ' ')+-- | Is the character a whitespace character distinct from '\n'? --- | Yields the next token, taking special care to begin/end code--- blocks. Junk occuring before and after the code blocks is separated--- into separate tokens, this makes it easier to keep track of whether--- we are in a code block or not.-nextToken' :: LaTeX Token-nextToken' = do-  toks <- gets tokens-  case toks of-    []     -> throwError "Done"+isSpaceNotNewline :: Char -> Bool+isSpaceNotNewline c = isSpace c && c /= '\n' -    -- Clean begin/end code block or a LaTeX comment.-    t : ts | text t == beginCode || text t == endCode ||-             T.singleton '%' == T.take 1 (T.stripStart (text t)) -> do+-- | Replaces all forms of whitespace, except for new-line characters,+-- with spaces. -      modify $ \s -> s { tokens = ts }-      return t+replaceSpaces :: Text -> Text+replaceSpaces = T.map (\c -> if isSpaceNotNewline c then ' ' else c) -    t : ts -> do-      modify $ \s -> s { tokens = ts } -      inCode <- gets inCode-      let code = if inCode then endCode else beginCode--      case code `isInfixOf'` text t of-        Nothing -> do--          -- Spaces take care of their own column tracking.-          unless (isSpaces (text t)) $ do-            log MoveColumn $ text t-            moveColumn $ T.length $ text t--          return t--        Just (pre, suf) -> do--          let (textToReturn, textsToPutBack) =+-- | Yields the next token, taking special care to begin/end code+-- blocks. Junk occuring before and after the code blocks is separated+-- into separate tokens, this makes it easier to keep track of whether+-- we are in a code block or not.+moveColumnForToken :: Token -> LaTeX ()+moveColumnForToken t = do+  unless (isSpaces (text t)) $ do+    log MoveColumn $ text t+    moveColumn =<< size (text t) -               -- This bit fixes issue 954.+-- | Merges 'columns' into 'columnsPrev', resets 'column' and+-- 'columns' -               -- Drop spaces up until and including the first trailing-               -- newline after begin code blocks.-               if code == beginCode && isSpaces suf-               then case T.singleton '\n' `isInfixOf'` suf of-                     Nothing        -> (pre, [ beginCode ])-                     Just (_, suf') -> (pre, [ beginCode, suf' ])+resetColumn :: LaTeX ()+resetColumn = modify $ \s ->+  s { column      = 0+    , columnsPrev = merge (columns s) (columnsPrev s)+    , columns     = []+    }+  where+  -- Remove shadowed columns from old.+  merge []  old = old+  merge new old = new ++ filter ((< leastNew) . columnColumn) old+    where+    leastNew = columnColumn (last new) -               -- Do the converse thing for end code blocks.-               else if code == endCode && isSpaces pre-                    then case T.singleton '\n' `isInfixOfRev` pre of-                           Nothing           -> (code, [ suf ])-                           Just (pre', suf') ->-                             (pre' <+> T.dropWhile (`elem` [' ', '\t']) suf',-                              [ code, suf ])+moveColumn :: Int -> LaTeX ()+moveColumn i = modify $ \s -> s { column = i + column s } -              -- This case happens for example when you have two code-              -- blocks after each other, i.e. the begin code of the-              -- second ends up in the suffix of the first's end code.-                    else (pre, [ code, suf ])+-- | Registers a column of the given kind. The column is returned. -          let tokToReturn   = t { text = textToReturn }-          let toksToPutBack = map (\txt -> t { text = txt }) textsToPutBack+registerColumn :: Kind -> LaTeX AlignmentColumn+registerColumn kind = do+  column    <- gets column+  codeBlock <- gets codeBlock+  kind      <- case kind of+                 Alignment   -> return Nothing+                 Indentation -> do+                   nextId <- gets nextId+                   modify $ \s -> s { nextId = succ nextId }+                   return (Just nextId)+  let c = AlignmentColumn { columnColumn    = column+                          , columnCodeBlock = codeBlock+                          , columnKind      = kind+                          }+  modify $ \s -> s { columns = c : columns s }+  return c -          unless (isSpaces pre) $ do-            log MoveColumn pre-            moveColumn $ T.length pre+-- | Registers the given column as used (if it is an indentation+-- column). -          modify $ \s -> s { tokens = toksToPutBack ++ tokens s }-          return tokToReturn+useColumn :: AlignmentColumn -> LaTeX ()+useColumn c = case columnKind c of+  Nothing -> return ()+  Just i  -> modify $ \s ->+               s { usedColumns = Set.insert i (usedColumns s) } -nextToken :: LaTeX Text-nextToken = text `fmap` nextToken'+-- | Alignment column zero in the current code block. -resetColumn :: LaTeX ()-resetColumn = modify $ \s -> s { column = 0 }+columnZero :: LaTeX AlignmentColumn+columnZero = do+  codeBlock <- gets codeBlock+  return $ AlignmentColumn { columnColumn    = 0+                           , columnCodeBlock = codeBlock+                           , columnKind      = Nothing+                           } -moveColumn :: Int -> LaTeX ()-moveColumn i = modify $ \s -> s { column = i + column s }+-- | Registers column zero as an alignment column. -setIndent :: Int -> LaTeX ()-setIndent i = modify $ \s -> s { indent = i }+registerColumnZero :: LaTeX ()+registerColumnZero = do+  c <- columnZero+  modify $ \s -> s { columns = [c] } -resetIndent :: LaTeX ()-resetIndent = modify $ \s -> s { indent = 0 }+-- | Changes to the state that are performed at the start of a code+-- block. -setIndentPrev :: Int -> LaTeX ()-setIndentPrev i = modify $ \s -> s { indentPrev = i }+-- This code is based on the assumption that there are no+-- non-whitespace characters following \begin{code}. For occurrences+-- of \begin{code} which start a code block this is true. However, the+-- LaTeX backend does not identify code blocks correctly, see Issue+-- #2400. -resetIndentPrev :: LaTeX ()-resetIndentPrev = modify $ \s -> s { indentPrev = 0 }+enterCode :: LaTeX ()+enterCode = do+  resetColumn+  modify $ \s -> s { codeBlock = codeBlock s + 1 } -setInCode :: LaTeX ()-setInCode = modify $ \s -> s { inCode = True }+-- | Changes to the state that are performed at the end of a code+-- block. -unsetInCode :: LaTeX ()-unsetInCode = modify $ \s -> s { inCode = False }+leaveCode :: LaTeX ()+leaveCode = return ()  logHelper :: Debug -> Text -> [String] -> LaTeX () logHelper debug text extra =   when (debug `elem` debugs) $ do-    lift $ lift $ T.putStrLn $ T.pack (show debug ++ ": ") <+>+    lift $ T.putStrLn $ T.pack (show debug ++ ": ") <+>       T.pack "'" <+> text <+> T.pack "' " <+>       if null extra          then T.empty@@ -230,21 +323,21 @@  log :: Debug -> Text -> LaTeX () log MoveColumn text = do-  ind <- gets indent-  logHelper MoveColumn text ["ind=", show ind]+  cols <- gets columns+  logHelper MoveColumn text ["columns=", show cols] log Code text = do-  ind <- gets indent+  cols <- gets columns   col <- gets column-  logHelper Code text ["ind=", show ind, "col=", show col]+  logHelper Code text ["columns=", show cols, "col=", show col] log debug text = logHelper debug text []  log' :: Debug -> String -> LaTeX () log' d = log d . T.pack -output :: Text -> LaTeX ()-output text = do-  log Output text-  tell text+output :: Output -> LaTeX ()+output item = do+  log' Output (show item)+  tell [item]  ------------------------------------------------------------------------ -- * LaTeX and polytable strings.@@ -257,118 +350,154 @@ beginCode = T.pack "\\begin{code}" endCode   = T.pack "\\end{code}" -ptOpen :: Text-ptOpen = T.pack "\\>"+-- | A command that is used when two tokens are put next to each other+-- in the same column. -ptOpen' :: Show a => a -> Text-ptOpen' i = ptOpen <+> T.pack ("[" ++ show i ++ "]")+agdaSpace :: Text+agdaSpace = cmdPrefix <+> T.pack "Space" <+> cmdArg T.empty <+> nl +-- | The column's name.+--+-- Indentation columns have unique names, distinct from all alignment+-- column names.++columnName :: AlignmentColumn -> Text+columnName c = T.pack $ case columnKind c of+  Nothing -> show (columnColumn c)+  Just i  -> show i ++ "I"++-- | Opens a column with the given name.++ptOpen' :: Text -> Text+ptOpen' name = T.pack "\\>[" <+> name <+> T.singleton ']'++-- | Opens the given column.++ptOpen :: AlignmentColumn -> Text+ptOpen c = ptOpen' (columnName c)++-- | Opens a special column that is only used at the beginning of+-- lines.++ptOpenBeginningOfLine :: Text+ptOpenBeginningOfLine = ptOpen' (T.pack ".")++-- | Opens the given column, and inserts an indentation instruction+-- with the given argument at the end of it.++ptOpenIndent+  :: AlignmentColumn+  -> Int              -- ^ Indentation instruction argument.+  -> Text+ptOpenIndent c delta =+  ptOpen c <+> T.pack "[@{}l@{"+           <+> cmdPrefix+           <+> T.pack "Indent"+           <+> cmdArg (T.pack $ show delta)+           <+> T.pack "}]"+ ptClose :: Text ptClose = T.pack "\\<" -ptClose' :: Show a => a -> Text-ptClose' i = ptClose <+> T.pack ("[" ++ show i ++ "]")+ptClose' :: AlignmentColumn -> Text+ptClose' c =+  ptClose <+> T.singleton '[' <+> columnName c <+> T.singleton ']'  ptNL :: Text ptNL = nl <+> T.pack "\\\\\n" +ptEmptyLine :: Text+ptEmptyLine =+  nl <+> T.pack "\\\\["+     <+> cmdPrefix+     <+> T.pack "EmptyExtraSkip"+     <+> T.pack "]%\n"+ cmdPrefix :: Text cmdPrefix = T.pack "\\Agda"  cmdArg :: Text -> Text cmdArg x = T.singleton '{' <+> x <+> T.singleton '}' -cmdIndent :: Show a => a -> Text-cmdIndent i = cmdPrefix <+> T.pack "Indent" <+>-                  cmdArg (T.pack (show i)) <+> cmdArg T.empty----- Andreas, 2016-09-08, issue #2140:--- The following special treatment of infix declarations seems--- superfluous (and does the wrong thing with the fix for #2140):---- infixl', infix', infixr' :: Text--- infixl' = T.pack "infixl"--- infix'  = T.pack "infix"--- infixr' = T.pack "infixr"- ------------------------------------------------------------------------ -- * Automaton.  -- | The start state, @nonCode@, prints non-code (the LaTeX part of--- literate Agda) until it sees a @beginBlock@.-nonCode :: LaTeX ()-nonCode = do-  tok <- nextToken-  log NonCode tok--  if tok == beginCode+--   literate Agda) until it sees a @beginBlock@.+processLayers :: [(LayerRole, Tokens)] -> LaTeX ()+processLayers = mapM_ $ \(layerRole,toks) -> do+  case layerRole of+    L.Markup  -> processMarkup  toks+    L.Comment -> processComment toks+    L.Code    -> processCode    toks -     then do-       output $ beginCode <+> nl-       resetColumn-       setInCode-       code+processMarkup, processComment, processCode :: Tokens -> LaTeX ()+-- | Deals with markup+processMarkup  = mapM_ moveColumnForToken -     else do-       output tok-       nonCode+-- | Deals with literate text, which is output verbatim+processComment = mapM_ $ \t -> do+  unless (T.singleton '%' == T.take 1 (T.stripStart (text t))) $ do+    moveColumnForToken t+  output (Text (text t))  -- | Deals with code blocks. Every token, except spaces, is pretty -- printed as a LaTeX command.-code :: LaTeX ()-code = do--  -- Get the column information before grabbing the token, since-  -- grabbing (possibly) moves the column.-  col  <- gets column--  tok' <- nextToken'-  let tok = text tok'-  log Code tok--  when (tok == T.empty) code--  when (col == 0 && not (isActualSpaces tok)) $ do-    output ptOpen--  when (tok == endCode) $ do-    output $ ptClose <+> nl <+> endCode-    unsetInCode-    nonCode--  -- Andreas, 2016-09-08, issue #2140:-  -- The following special treatment of infix declarations seems-  -- superfluous (and does the wrong thing with the fix for #2140):+processCode toks' = do+  output $ Text $ beginCode <+> nl+  enterCode+  mapM_ go toks'+  ptOpenWhenColumnZero =<< gets column+  output $ Text $ ptClose <+> nl <+> endCode+  leaveCode -  -- when (tok `elem` [ infixl', infix', infixr' ]) $ do-  --   output $ cmdPrefix <+> T.pack "Keyword" <+> cmdArg tok-  --   fixity-  --   code+  where+    go tok' = do+      -- Get the column information before grabbing the token, since+      -- grabbing (possibly) moves the column.+      col  <- gets column -  when (isSpaces tok) $ do-    spaces $ T.group tok-    code+      moveColumnForToken tok'+      let tok = text tok'+      log Code tok -  case aspect (info tok') of-    Nothing -> output $ escape tok-    Just a  -> output $ cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok)+      if (tok == T.empty) then return ()+      else do+        if (isSpaces tok) then do+            spaces $ T.group $ replaceSpaces tok+        else do+          ptOpenWhenColumnZero col+          case aspect (info tok') of+            Nothing -> output $ Text $ escape tok+            Just a  -> output $ Text $+                         cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok) -  code+    -- Non-whitespace tokens at the start of a line trigger an+    -- alignment column.+    ptOpenWhenColumnZero col =+        when (col == 0) $ do+          registerColumnZero+          output . Text . ptOpen =<< columnZero -  where-  cmd :: Aspect -> String-  cmd a = let s = show a in case a of-    Comment        -> s-    Keyword        -> s-    String         -> s-    Number         -> s-    Symbol         -> s-    PrimitiveType  -> s-    Name mKind _   -> maybe __IMPOSSIBLE__ showKind mKind-      where-      showKind :: NameKind -> String-      showKind n = let s = show n in case n of+    cmd :: Aspect -> String+    cmd a = let s = show a in case a of+      Comment           -> s+      Option            -> s+      Keyword           -> s+      String            -> s+      Number            -> s+      Symbol            -> s+      PrimitiveType     -> s+      Name Nothing isOp -> cmd (Name (Just Postulate) isOp)+        -- At the time of writing the case above can be encountered in+        -- --only-scope-checking mode, for instance for the token "Size"+        -- in the following code:+        --+        --   {-# BUILTIN SIZE Size #-}+        --+        -- The choice of "Postulate" works for this example, but might+        -- be less appropriate for others.+      Name (Just kind) _ -> case kind of         Bound                     -> s         Constructor Inductive     -> "InductiveConstructor"         Constructor CoInductive   -> "CoinductiveConstructor"@@ -381,6 +510,8 @@         Record                    -> s         Argument                  -> s         Macro                     -> s+        where+        s = show kind  -- Escapes special characters. escape :: Text -> Text@@ -399,142 +530,81 @@     '~'  -> "\\textasciitilde{}"     '^'  -> "\\textasciicircum{}"     '\\' -> "\\textbackslash{}"-    -- Escaping newlines seems to fix the problem caused by pattern-    -- synonyms.-    '\n' -> "\\<\\\\\n\\>"+    '-'  -> "{-}"     _    -> [ c ] escape _                         = __IMPOSSIBLE__ ---- Andreas, 2016-09-08, issue #2140:--- The following special treatment of infix declarations seems--- superfluous (and does the wrong thing with the fix for #2140):---- -- | Fixity declarations need a special treatment. The operations in--- -- declarations like:--- ----- --     infix num op1 op2 op3--- ----- -- are treated as comments and thus grouped together with the newlines--- -- that follow, which results incorrect LaTeX output -- the following--- -- state remedies the problem by breaking on newlines.--- fixity :: LaTeX ()--- fixity = do---   tok <- nextToken----   case T.breakOn (T.pack "\n") tok of----     -- Spaces.---     (sps, nls) | nls == T.empty && isSpaces sps -> do---         spaces $ T.group sps---         fixity----     -- Fixity level.---     (num, nls) | nls == T.empty -> do---         output $ cmdPrefix <+> T.pack "Number" <+> cmdArg num---         fixity----     -- Operations followed by newlines.---     (ops, nls) | otherwise      -> do---         output $ (T.pack " " <+>) $ T.unwords $ map ((cmdPrefix <+> T.pack "FixityOp" <+>) . cmdArg . escape) $ T.words ops---         spaces (T.group nls)----- | Spaces are grouped before processed, because multiple consecutive--- spaces determine the alignment of the code and consecutive newline--- characters need special treatment as well.+-- | Every element in the list should consist of either one or more+-- newline characters, or one or more space characters. Two adjacent+-- list elements must not contain the same character.+--+-- If the final element of the list consists of spaces, then these+-- spaces are assumed to not be trailing whitespace. spaces :: [Text] -> LaTeX ()-spaces []                                 = return ()-spaces ((T.uncons -> Nothing)       : ss) = __IMPOSSIBLE__+spaces [] = return () --- Single spaces are ignored.-spaces ((T.uncons -> Just (' ', s)) : []) | T.null s = do+-- Newlines.+spaces (s@(T.uncons -> Just ('\n', _)) : ss) = do   col <- gets column-  when (col == 0) $ do-    output ptOpen--  moveColumn 1-  output $ T.singleton ' '+  when (col == 0) $+    output . Text . ptOpen =<< columnZero+  output $ Text $ ptClose <+> ptNL <+>+                  T.replicate (T.length s - 1) ptEmptyLine+  resetColumn+  spaces ss --- Multiple spaces.-spaces (s@(T.uncons -> Just (' ', _)) : ss) = do-  let len = T.length s+-- Spaces followed by a newline character.+spaces (_ : ss@(_ : _)) = spaces ss +-- Spaces that are not followed by a newline character.+spaces [ s ] = do   col <- gets column-  moveColumn len -  if col /= 0--     then do-       log' Spaces "col /= 0"-       output $ T.singleton ' '-       col <- gets column-       output $ ptClose' col <+> nl <+> ptOpen' col--     else do-       log' Spaces "col == 0"-       indent <- gets indent-       indentPrev <- gets indentPrev--       case compare len indent of--         GT -> do-           log' Spaces "GT"-           setIndent len-           setIndentPrev indent-           output $ ptOpen' indent-           output $ cmdIndent len-           output $ ptClose' len <+> nl <+> ptOpen' len--         EQ -> do-           log' Spaces "EQ"-           output $ ptOpen' indentPrev-           output $ cmdIndent len-           output $ ptClose' len <+> nl <+> ptOpen' len+  let len  = T.length s+      kind = if col /= 0 && len == 1+             then Indentation+             else Alignment -         LT -> do-           log' Spaces "LT"-           setIndent len-           resetIndentPrev-           output $ ptOpen' 0-           output $ cmdIndent len-           output $ ptClose' len <+> nl <+> ptOpen' len+  moveColumn len+  column <- registerColumn kind -  spaces ss+  if col /= 0+  then log' Spaces "col /= 0"+  else do+    columns    <- gets columnsPrev+    codeBlock  <- gets codeBlock --- Newlines.-spaces (s@(T.uncons -> Just ('\n', _)) : ss) = do-  resetColumn-  output $ ptClose <+> T.replicate (T.length s) ptNL-  spaces ss+    log' Spaces $+      "col == 0: " ++ show (len, columns) --- Treat tabs and non-standard spaces as if they were spaces--- [Issue_#2019].-spaces (s@(T.uncons -> Just (c, _)) : ss)-  | isSpace c && (c /= '\n') =-      spaces $ T.replicate (T.length s) (T.singleton ' ') : ss-  | otherwise = __IMPOSSIBLE__+    case filter ((<= len) . columnColumn) columns of+      c : _ | columnColumn c == len, isJust (columnKind c) -> do+        -- Align. (This happens automatically if the column is an+        -- alignment column, but c is an indentation column.)+        useColumn c+        output $ Text $ ptOpenBeginningOfLine+        output $ Text $ ptClose' c+      c : _ | columnColumn c <  len -> do+        -- Indent.+        useColumn c+        output $ Text $ ptOpenIndent c (codeBlock - columnCodeBlock c)+      _ -> return () -spaces (_ : ss) = __IMPOSSIBLE__+  output $ MaybeColumn column  -- Split multi-lines string literals into multiple string literals -- Isolating leading spaces for the alignment machinery to work -- properly stringLiteral :: Token -> Tokens stringLiteral t | aspect (info t) == Just String =-  reverse $ snd $ foldl insertShifted (0, [])-                $ concatMap leadingSpaces-                $ List.intersperse (T.pack "\n")-                $ T.lines (text t) where--    leadingSpaces :: Text -> [Text]-    leadingSpaces t = [pre, suf]-      where (pre , suf) = T.span (== ' ') t--    insertShifted :: (Int, Tokens) -> Text -> (Int, Tokens)-    insertShifted (i, xs) x =-      let tx = t { text = x, position = position t + i }-      in (i + T.length x, tx : xs)+  reverse $ foldl (\xs x -> t { text = x } : xs) []+          $ concatMap leadingSpaces+          $ List.intersperse (T.pack "\n")+          $ T.lines (text t)+  where+  leadingSpaces :: Text -> [Text]+  leadingSpaces t = [pre, suf]+    where (pre , suf) = T.span isSpaceNotNewline t  stringLiteral t = [t] @@ -544,7 +614,11 @@ defaultStyFile :: String defaultStyFile = "agda.sty" --- | The only exported function.+-- | Generates a LaTeX file for the given interface.+--+-- The underlying source file is assumed to match the interface, but+-- this is not checked. TODO: Fix this problem, perhaps by storing the+-- source code in the interface. generateLaTeX :: Interface -> TCM () generateLaTeX i = do   let mod = toTopLevelModuleName $ iModuleName i@@ -560,19 +634,14 @@                  </> optLaTeXDir options   liftIO $ createDirectoryIfMissing True dir -  TCM.reportSLn "latex" 1 $ unlines-    [ ""-    , "Checking if " ++ defaultStyFile ++ " is found by the LaTeX environment."-    ]--  merrors <- callCompiler' "kpsewhich" [ "--path=" ++ dir,  defaultStyFile ]+  (code, _, _) <- liftIO $ readProcessWithExitCode+                    "kpsewhich" [ "--path=" ++ dir,  defaultStyFile ] "" -  when (isJust merrors) $ do-    TCM.reportSLn "latex" 1 $ unlines-      [ ""-      , defaultStyFile ++ " was not found. Copying a default version of " +++  when (code /= ExitSuccess) $ do+    TCM.reportSLn "compile.latex" 1 $ unlines+      [ defaultStyFile ++ " was not found. Copying a default version of " ++           defaultStyFile-      , "into the directory " ++ dir ++ "."+      , "into " ++ dir ++ "."       ]      liftIO $ do@@ -584,7 +653,9 @@    liftIO $ do     source <- UTF8.readTextFile inAbsPath-    latex <- E.encodeUtf8 `fmap` toLaTeX source hi+    latex <- E.encodeUtf8 `fmap`+               toLaTeX (optCountClusters options)+                       (mkAbsolute inAbsPath) source hi     createDirectoryIfMissing True $ dir </> takeDirectory outPath     BS.writeFile (dir </> outPath) latex @@ -592,41 +663,111 @@     modToFile :: TopLevelModuleName -> FilePath     modToFile m = List.intercalate [pathSeparator] (moduleNameParts m) <.> "tex" +groupByFst :: forall a b. Eq a => [(a,b)] -> [(a,[b])]+groupByFst =+    map (\xs -> case xs of                     -- Float the grouping to the top level+          []           -> __IMPOSSIBLE__+          (tag, _): _ -> (tag, map snd xs))++  . List.groupBy ((==) `on` fst)  -- Group together characters in the same+                                  -- role.+ -- | Transforms the source code into LaTeX.-toLaTeX :: String -> HighlightingInfo -> IO Text-toLaTeX source hi+toLaTeX+  :: Bool+     -- ^ Count extended grapheme clusters?+  -> AbsolutePath+  -> String+  -> HighlightingInfo+  -> IO L.Text+toLaTeX cc path source hi -  = processTokens+  = processTokens cc -  . concatMap stringLiteral+  . map (\(role, tokens) -> (role,) $+      -- This bit fixes issue 954+      (if L.isCode role then+        -- Remove trailing whitespace from the+        -- final line; the function spaces+        -- expects trailing whitespace to be+        -- followed by a newline character.+        whenMoreThanOne+          (withLast $+            withTokenText $ \suf ->+              fromMaybe suf $+                fmap (T.dropWhileEnd isSpaceNotNewline) $+                  T.stripSuffix (T.singleton '\n') suf)+        .+        (withLast $ withTokenText $ T.dropWhileEnd isSpaceNotNewline)+        .+        (withFirst $+          withTokenText $ \pre ->+              fromMaybe pre $+                  T.stripPrefix (T.singleton '\n') $+                    T.dropWhile isSpaceNotNewline pre)+      else+        -- do nothing+        id) tokens) -  -- Head the list (the grouped chars contain the same meta info) and-  -- collect the characters into a string.-  . map (\xs -> case xs of-                    (mi, (pos, _)) : _ ->-                        Token { text     = T.pack $ map (\(_, (_, c)) -> c) xs-                              , info     = fromMaybe mempty mi-                              , position = pos-                              }-                    []                 -> __IMPOSSIBLE__)+  . map (second (+      -- Split tokens at newlines+      concatMap stringLiteral -  . List.groupBy ((==) `on` fst)  -- Characters which share the same-                                  -- meta info are the same token, so-                                  -- group them together.+      -- Head the list (the grouped chars contain the same meta info) and+      -- collect the characters into a string.+    . map (\(mi, cs) ->+                          Token { text = T.pack cs+                                , info = fromMaybe mempty mi+                                })+      -- Characters which share the same meta info are the same token, so+      -- group them together.+    . groupByFst+    )) +  -- Characters in different layers belong to different tokens+  . groupByFst+   -- Look up the meta info at each position in the highlighting info.-  . map (\(pos, char) ->-        (IntMap.lookup pos infoMap, (pos, char)))+  . map (\(pos, (role, char)) -> (role, (IntMap.lookup pos infoMap, char)))    -- Add position in file to each character.   . zip [1..]++  -- Map each character to its role+  . atomizeLayers . literateTeX (startPos (Just path))+   $ source   where   infoMap = toMap (decompress hi) -processTokens :: Tokens -> IO Text-processTokens ts = do-  (x, _, s) <- runLaTeX nonCode () (emptyState { tokens = ts })-  case x of-    Left "Done" -> return s-    _           -> __IMPOSSIBLE__+  -- | This function preserves laziness of the list+  withLast :: (a -> a) -> [a] -> [a]+  withLast f [] = []+  withLast f [a] = [f a]+  withLast f (a:as) = a:withLast f as++  -- | This function preserves laziness of the list+  withFirst :: (a -> a) -> [a] -> [a]+  withFirst _ [] = []+  withFirst f (a:as) = f a:as++  whenMoreThanOne :: ([a] -> [a]) -> [a] -> [a]+  whenMoreThanOne f xs@(_:_:_) = f xs+  whenMoreThanOne _ xs         = xs++++processTokens+  :: Bool+     -- ^ Count extended grapheme clusters?+  -> [(LayerRole, Tokens)]+  -> IO L.Text+processTokens cc ts = do+  ((), s, os) <- runLaTeX (processLayers ts) () (emptyState cc)+  return $ L.fromChunks $ map (render s) os+  where+    render _ (Text s)        = s+    render s (MaybeColumn c)+      | Just i <- columnKind c,+        not (Set.member i (usedColumns s)) = agdaSpace+      | otherwise                          = nl <+> ptOpen c
src/full/Agda/Interaction/Highlighting/Precise.hs view
@@ -8,6 +8,7 @@   , NameKind(..)   , OtherAspect(..)   , Aspects(..)+  , DefinitionSite(..)   , File(..)   , HighlightingInfo     -- ** Creation@@ -38,7 +39,7 @@ import Agda.Utils.String import Agda.Utils.List import Data.Maybe-import Data.List+import qualified Data.List as List import Data.Function import Data.Semigroup import Control.Applicative ((<$>), (<*>))@@ -63,6 +64,7 @@  data Aspect   = Comment+  | Option   | Keyword   | String   | Number@@ -71,7 +73,7 @@   | Name (Maybe NameKind) Bool -- ^ Is the name an operator part?     deriving (Eq, Show, Typeable) --- | @NameKind@s are figured our during scope checking.+-- | @NameKind@s are figured out during scope checking.  data NameKind   = Bound                         -- ^ Bound variable.@@ -99,9 +101,12 @@     -- could for instance be an emptyness constraint.   | TerminationProblem   | PositivityProblem+  | ReachabilityProblem+  | CoverageProblem   | IncompletePattern     -- ^ When this constructor is used it is probably a good idea to     -- include a 'note' explaining why the pattern is incomplete.+  | CatchallClause   | TypeChecks     -- ^ Code which is being type-checked.     deriving (Eq, Show, Enum, Bounded, Typeable)@@ -117,14 +122,29 @@     -- something like that. It should contain useful information about     -- the range (like the module containing a certain identifier, or     -- the fixity of an operator).-  , definitionSite :: Maybe (SC.TopLevelModuleName, Int)+  , definitionSite :: Maybe DefinitionSite     -- ^ The definition site of the annotated thing, if applicable and     --   known. File positions are counted from 1.   }   deriving (Show, Typeable) +data DefinitionSite = DefinitionSite+  { defSiteModule :: SC.TopLevelModuleName+      -- ^ The defining module.+  , defSitePos    :: Int+      -- ^ The file position in that module.+  , defSiteHere   :: Bool+      -- ^ Has this @DefinitionSite@ been created at the defining site of the name?+  , defSiteAnchor :: Maybe String+      -- ^ A pretty name for the HTML linking.+  }+  deriving (Show, Typeable)++instance Eq DefinitionSite where+  DefinitionSite m p _ _ == DefinitionSite m' p' _ _ = m == m' && p == p'+ instance Eq Aspects where-  Aspects a o _ d == Aspects a' o' _ d' = (a, nub o, d) == (a', nub o', d')+  Aspects a o _ d == Aspects a' o' _ d' = (a, List.nub o, d) == (a', List.nub o', d')  -- | A 'File' is a mapping from file positions to meta information. --@@ -160,7 +180,7 @@ mergeAspects :: Aspects -> Aspects -> Aspects mergeAspects m1 m2 = Aspects   { aspect       = (mplus `on` aspect) m1 m2-  , otherAspects = nub $ ((++) `on` otherAspects) m1 m2+  , otherAspects = List.nub $ ((++) `on` otherAspects) m1 m2   , note         = case (note m1, note m2) of       (Just n1, Just n2) -> Just $          if n1 == n2@@ -310,7 +330,7 @@     )     where     [(a, ma), (b, _), (c, _), (d, md)] =-      sortBy (compare `on` fst)+      List.sortBy (compare `on` fst)              [(from i1, m1), (to i1, m1), (from i2, m2), (to i2, m2)]     fix = filter (not . empty . fst) 
src/full/Agda/Interaction/Highlighting/Range.hs view
@@ -17,7 +17,6 @@   ) where  import Control.Applicative ((<$>))-import Data.List import Data.Typeable (Typeable)  import qualified Agda.Syntax.Position as P
src/full/Agda/Interaction/Imports.hs view
@@ -24,7 +24,7 @@ import qualified Data.List as List import qualified Data.Set as Set import qualified Data.Foldable as Fold (toList)-import Data.List hiding (null)+import qualified Data.List as List import Data.Maybe import Data.Monoid (mempty, mappend) import Data.Map (Map)@@ -47,6 +47,7 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Errors+import Agda.TypeChecking.Warnings import Agda.TypeChecking.Reduce import Agda.TypeChecking.MetaVars ( openMetasToPostulates ) import Agda.TypeChecking.Monad@@ -54,7 +55,6 @@ import Agda.TypeChecking.Telescope import Agda.TypeChecking.Primitive import Agda.TypeChecking.Pretty as P-import Agda.TypeChecking.Rewriting (killCtxId) import Agda.TypeChecking.DeadCode import qualified Agda.TypeChecking.Monad.Benchmark as Bench @@ -72,10 +72,11 @@ import Agda.Utils.FileName import Agda.Utils.Lens import Agda.Utils.Maybe+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.IO.Binary-import Agda.Utils.Pretty+import Agda.Utils.Pretty hiding (Mode) import Agda.Utils.Time import Agda.Utils.Hash import qualified Agda.Utils.HashMap as HMap@@ -84,13 +85,33 @@ #include "undefined.h" import Agda.Utils.Impossible +-- | Is the aim to type-check the top-level module, or only to+-- scope-check it?++data Mode+  = ScopeCheck+  | TypeCheck+  deriving (Eq, Show)+ -- | Are we loading the interface for the user-loaded file --   or for an import? data MainInterface-  = MainInterface     -- ^ Interface for main file.-  | NotMainInterface  -- ^ Interface for imported file.+  = MainInterface Mode -- ^ For the main file.+                       --+                       --   In this case state changes inflicted by+                       --   'createInterface' are preserved.+  | NotMainInterface   -- ^ For an imported file.+                       --+                       --   In this case state changes inflicted by+                       --   'createInterface' are not preserved.   deriving (Eq, Show) +-- | Should state changes inflicted by 'createInterface' be preserved?++includeStateChanges :: MainInterface -> Bool+includeStateChanges (MainInterface _) = True+includeStateChanges NotMainInterface  = False+ -- | Merge an interface into the current proof state. mergeInterface :: Interface -> TCM () mergeInterface i = do@@ -98,6 +119,7 @@         builtin = Map.toList $ iBuiltin i         prim    = [ x | (_,Prim x) <- builtin ]         bi      = Map.fromList [ (x,Builtin t) | (x,Builtin t) <- builtin ]+        warns   = iWarnings i     bs <- gets stBuiltinThings     reportSLn "import.iface.merge" 10 $ "Merging interface"     reportSLn "import.iface.merge" 20 $@@ -112,7 +134,7 @@             Just b1 = Map.lookup b bs             Just b2 = Map.lookup b bi     mapM_ check (map fst $ Map.toList $ Map.intersection bs bi)-    addImportedThings sig bi (iHaskellImports i) (iHaskellImportsUHC i) (iPatternSyns i) (iDisplayForms i)+    addImportedThings sig bi (iPatternSyns i) (iDisplayForms i) warns     reportSLn "import.iface.merge" 20 $       "  Rebinding primitives " ++ show prim     mapM_ rebind prim@@ -123,16 +145,13 @@  addImportedThings ::   Signature -> BuiltinThings PrimFun ->-  Set String -> -- MAlonzo imoprts-  Set String -> -- UHC backend imports-  A.PatternSynDefns -> DisplayForms -> TCM ()-addImportedThings isig ibuiltin hsImports hsImportsUHC patsyns display = do-  stImports              %= \ imp -> unionSignatures [imp, over sigRewriteRules killCtxId isig]+  A.PatternSynDefns -> DisplayForms -> [TCWarning] -> TCM ()+addImportedThings isig ibuiltin patsyns display warnings = do+  stImports              %= \ imp -> unionSignatures [imp, isig]   stImportedBuiltins     %= \ imp -> Map.union imp ibuiltin-  stHaskellImports       %= \ imp -> Set.union imp hsImports-  stHaskellImportsUHC    %= \ imp -> Set.union imp hsImportsUHC   stPatternSynImports    %= \ imp -> Map.union imp patsyns   stImportedDisplayForms %= \ imp -> HMap.unionWith (++) imp display+  stTCWarnings           %= \ imp -> List.union imp warnings   addImportedInstances isig  -- | Scope checks the given module. A proper version of the module@@ -144,7 +163,7 @@     verboseS "import.scope" 10 $ do       visited <- Map.keys <$> getVisitedModules       reportSLn "import.scope" 10 $-        "  visited: " ++ intercalate ", " (map prettyShow visited)+        "  visited: " ++ List.intercalate ", " (map prettyShow visited)     -- Since scopeCheckImport is called from the scope checker,     -- we need to reimburse her account.     i <- Bench.billTo [] $ getInterface x@@ -174,12 +193,14 @@ -- | If the module has already been visited (without warnings), then -- its interface is returned directly. Otherwise the computation is -- used to find the interface and the computed interface is stored for--- potential later use.+-- potential later use (unless the 'MainInterface' is @'MainInterface'+-- 'ScopeCheck'@).  alreadyVisited :: C.TopLevelModuleName ->+                  MainInterface ->                   TCM (Interface, MaybeWarnings) ->                   TCM (Interface, MaybeWarnings)-alreadyVisited x getIface = do+alreadyVisited x isMain getIface = do     mm <- getVisitedModule x     case mm of         -- A module with warnings should never be allowed to be@@ -191,10 +212,11 @@           reportSLn "import.visit" 5 $ "  Getting interface for " ++ prettyShow x           r@(i, wt) <- getIface           reportSLn "import.visit" 5 $ "  Now we've looked at " ++ prettyShow x-          visitModule $ ModuleInfo-            { miInterface  = i-            , miWarnings   = hasWarnings wt-            }+          unless (isMain == MainInterface ScopeCheck) $+            visitModule $ ModuleInfo+              { miInterface  = i+              , miWarnings   = hasWarnings wt+              }           return r  -- | Type checks the main file of the interaction.@@ -203,9 +225,16 @@ -- --   First, the primitive modules are imported. --   Then, @getInterface'@ is called to do the main work.+--+--   If the 'Mode' is 'ScopeCheck', then type-checking is not+--   performed, only scope-checking. (This may include type-checking+--   of imported modules.) In this case the generated, partial+--   interface is not stored in the state ('stDecodedModules'). Note,+--   however, that if the file has already been type-checked, then a+--   complete interface is returned. -typeCheckMain :: AbsolutePath -> TCM (Interface, MaybeWarnings)-typeCheckMain f = do+typeCheckMain :: AbsolutePath -> Mode -> TCM (Interface, MaybeWarnings)+typeCheckMain f mode = do   -- liftIO $ putStrLn $ "This is typeCheckMain " ++ prettyShow f   -- liftIO . putStrLn . show =<< getVerbosity   reportSLn "import.main" 10 $ "Importing the primitive modules."@@ -229,7 +258,7 @@    -- Now do the type checking via getInterface.   m <- moduleName f-  getInterface' m MainInterface+  getInterface' m (MainInterface mode)  -- | Tries to return the interface associated to the given (imported) module. --   The time stamp of the relevant interface file is also returned.@@ -263,19 +292,17 @@ getInterface'   :: C.TopLevelModuleName   -> MainInterface-     -- ^ If type checking is necessary,-     --   should all state changes inflicted by 'createInterface' be preserved?-     --   Yes, if we are the 'MainInterface'.  No, if we are 'NotMainInterface'.   -> TCM (Interface, MaybeWarnings) getInterface' x isMain = do   withIncreasedModuleNestingLevel $ do-    -- Preserve the pragma options unless includeStateChanges is True.+    -- Preserve the pragma options unless we are checking the main+    -- interface.     bracket_ (use stPragmaOptions)-             (unless includeStateChanges . setPragmaOptions) $ do+             (unless (includeStateChanges isMain) . setPragmaOptions) $ do      -- Forget the pragma options (locally).      setCommandLineOptions . stPersistentOptions . stPersistentState =<< get -     alreadyVisited x $ addImportCycleCheck x $ do+     alreadyVisited x isMain $ addImportCycleCheck x $ do       file <- findFile x  -- requires source to exist        reportSLn "import.iface" 10 $ "  Check for cycle"@@ -305,9 +332,10 @@         -- let maySkip = isMain == NotMainInterface         -- Andreas, 2015-07-13: Serialize iInsideScope again.         let maySkip = True+         if uptodate && maySkip-          then getStoredInterface x file includeStateChanges-          else typeCheck          x file includeStateChanges+          then getStoredInterface x file isMain+          else typeCheck          x file isMain        -- Ensure that the given module name matches the one in the file.       let topLevelName = toTopLevelModuleName $ iModuleName i@@ -327,16 +355,15 @@        stCurrentModule .= Just (iModuleName i) -      -- Interfaces are only stored if no warnings were encountered.-      case wt of-        SomeWarnings w -> return ()-        NoWarnings     -> storeDecodedModule i+      -- Interfaces are not stored if we are only scope-checking, or+      -- if any warnings were encountered.+      case (isMain, wt) of+        (MainInterface ScopeCheck, _) -> return ()+        (_, SomeWarnings w)           -> return ()+        _                             -> storeDecodedModule i        return (i, wt) -    where-      includeStateChanges = isMain == MainInterface- -- | Check whether interface file exists and is in cache --   in the correct version (as testified by the interface file hash). @@ -364,7 +391,6 @@    return mi - -- | Try to get the interface from interface file or cache.  getStoredInterface@@ -372,16 +398,13 @@      -- ^ Module name of file we process.   -> AbsolutePath      -- ^ File we process.-  -> Bool-     -- ^ If type checking is necessary,-     --   should all state changes inflicted by 'createInterface' be preserved?-     --   @True@, if we are the 'MainInterface'.  @False@, if we are 'NotMainInterface'.+  -> MainInterface   -> TCM (Bool, (Interface, MaybeWarnings))      -- ^ @Bool@ is: do we have to merge the interface?-getStoredInterface x file includeStateChanges = do+getStoredInterface x file isMain = do   -- If something goes wrong (interface outdated etc.)   -- we revert to fresh type checking.-  let fallback = typeCheck x file includeStateChanges+  let fallback = typeCheck x file isMain    -- Examine the hash of the interface file. If it is different from the   -- stored version (in stDecodedModules), or if there is no stored version,@@ -421,7 +444,12 @@           -- liftIO close -- Close the interface file. See above.           fallback         else do-          unless cached $ chaseMsg "Skipping" x $ Just ifile+          unless cached $ do+            chaseMsg "Loading " x $ Just ifile+            -- print imported warnings+            let ws = filter ((Strict.Just file ==) . tcWarningOrigin) (iWarnings i)+            unless (null ws) $ reportSDoc "warning" 1 $ P.vcat $ P.prettyTCM <$> ws+           -- We set the pragma options of the skipped file here,           -- because if the top-level file is skipped we want the           -- pragmas to apply to interactive commands in the UI.@@ -440,105 +468,107 @@      -- ^ Module name of file we process.   -> AbsolutePath      -- ^ File we process.-  -> Bool-     -- ^ If type checking is necessary,-     --   should all state changes inflicted by 'createInterface' be preserved?-     --   @True@, if we are the 'MainInterface'.  @False@, if we are 'NotMainInterface'.+  -> MainInterface   -> TCM (Bool, (Interface, MaybeWarnings))      -- ^ @Bool@ is: do we have to merge the interface?-typeCheck x file includeStateChanges = do-  unless includeStateChanges cleanCachedLog-  let withMsgs = bracket_-       (chaseMsg "Checking" x $ Just $ filePath file)+typeCheck x file isMain = do+  unless (includeStateChanges isMain) cleanCachedLog+  let checkMsg = case isMain of+                   MainInterface ScopeCheck -> "Reading "+                   _                        -> "Checking"+      withMsgs = bracket_+       (chaseMsg checkMsg x $ Just $ filePath file)        (const $ do ws <- getAllWarnings' AllWarnings RespectFlags                    let (we, wa) = classifyWarnings ws-                   unless (null wa) $ reportSDoc "warning" 1-                                    $ P.vcat $ P.prettyTCM <$> wa-                   unless (not $ null we) $ chaseMsg "Finished" x Nothing)+                   let wa' = filter ((Strict.Just file ==) . tcWarningOrigin) wa+                   unless (null wa') $+                     reportSDoc "warning" 1 $ P.vcat $ P.prettyTCM <$> wa'+                   when (null we) $ chaseMsg "Finished" x Nothing)    -- Do the type checking. -  if includeStateChanges then do-     r <- withMsgs $ createInterface file x includeStateChanges--     -- Merge the signature with the signature for imported-     -- things.-     reportSLn "import.iface" 40 $ "Merging with state changes included."-     sig     <- getSignature-     patsyns <- getPatternSyns-     display <- use stImportsDisplayForms-     addImportedThings sig Map.empty Set.empty Set.empty patsyns display-     setSignature emptySignature-     setPatternSyns Map.empty+  case isMain of+    MainInterface _ -> do+      r <- withMsgs $ createInterface file x isMain -     return (True, r)-   else do-    ms       <- getImportPath-    nesting  <- asks envModuleNestingLevel-    range    <- asks envRange-    call     <- asks envCall-    mf       <- use stModuleToSource-    vs       <- getVisitedModules-    ds       <- getDecodedModules-    opts     <- stPersistentOptions . stPersistentState <$> get-    isig     <- use stImports-    ibuiltin <- use stImportedBuiltins-    display  <- use stImportsDisplayForms-    ipatsyns <- getPatternSynImports-    ho       <- getInteractionOutputCallback-    -- Every interface is treated in isolation. Note: Changes-    -- to stDecodedModules are not preserved if an error is-    -- encountered in an imported module.-    -- Andreas, 2014-03-23: freshTCM spawns a new TCM computation-    -- with initial state and environment-    -- but on the same Benchmark accounts.-    r <- freshTCM $-           withImportPath ms $-           local (\e -> e { envModuleNestingLevel = nesting-                            -- Andreas, 2014-08-18:-                            -- Preserve the range of import statement-                            -- for reporting termination errors in-                            -- imported modules:-                          , envRange              = range-                          , envCall               = call-                          }) $ do-             setDecodedModules ds-             setCommandLineOptions opts-             setInteractionOutputCallback ho-             stModuleToSource .= mf-             setVisitedModules vs-             addImportedThings isig ibuiltin Set.empty Set.empty ipatsyns display+      -- Merge the signature with the signature for imported+      -- things.+      reportSLn "import.iface" 40 $ "Merging with state changes included."+      sig     <- getSignature+      patsyns <- getPatternSyns+      display <- use stImportsDisplayForms+      addImportedThings sig Map.empty patsyns display []+      setSignature emptySignature+      setPatternSyns Map.empty -             r  <- withMsgs $ createInterface file x includeStateChanges-             mf <- use stModuleToSource-             ds <- getDecodedModules-             return (r, do-                stModuleToSource .= mf-                setDecodedModules ds-                case r of-                  (i, NoWarnings) -> storeDecodedModule i-                  _               -> return ()-                )+      return (True, r)+    NotMainInterface -> do+      ms       <- getImportPath+      nesting  <- asks envModuleNestingLevel+      range    <- asks envRange+      call     <- asks envCall+      mf       <- use stModuleToSource+      vs       <- getVisitedModules+      ds       <- getDecodedModules+      opts     <- stPersistentOptions . stPersistentState <$> get+      isig     <- use stImports+      ibuiltin <- use stImportedBuiltins+      display  <- use stImportsDisplayForms+      ipatsyns <- getPatternSynImports+      ho       <- getInteractionOutputCallback+      -- Every interface is treated in isolation. Note: Some changes to+      -- the persistent state may not be preserved if an error other+      -- than a type error or an IO exception is encountered in an+      -- imported module.+      r <- noCacheForImportedModule $+           freshTCM $+             withImportPath ms $+             local (\e -> e { envModuleNestingLevel = nesting+                              -- Andreas, 2014-08-18:+                              -- Preserve the range of import statement+                              -- for reporting termination errors in+                              -- imported modules:+                            , envRange              = range+                            , envCall               = call+                            }) $ do+               setDecodedModules ds+               setCommandLineOptions opts+               setInteractionOutputCallback ho+               stModuleToSource .= mf+               setVisitedModules vs+               addImportedThings isig ibuiltin ipatsyns display [] -    case r of-        Left err          -> throwError err-        Right (r, update) -> do-          update-          case r of-            (_, NoWarnings) ->-              -- We skip the file which has just been type-checked to-              -- be able to forget some of the local state from-              -- checking the module.-              -- Note that this doesn't actually read the interface-              -- file, only the cached interface.-              getStoredInterface x file includeStateChanges-            _ -> return (False, r)+               r  <- withMsgs $ createInterface file x isMain+               mf <- use stModuleToSource+               ds <- getDecodedModules+               return (r, do+                  stModuleToSource .= mf+                  setDecodedModules ds+                  case r of+                    (i, NoWarnings) -> storeDecodedModule i+                    _               -> return ()+                  ) +      case r of+          Left err          -> throwError err+          Right (r, update) -> do+            update+            case r of+              (_, NoWarnings) ->+                -- We skip the file which has just been type-checked to+                -- be able to forget some of the local state from+                -- checking the module.+                -- Note that this doesn't actually read the interface+                -- file, only the cached interface. (This comment is not+                -- correct, see+                -- test/Fail/customised/NestedProjectRoots.err.)+                getStoredInterface x file isMain+              _ -> return (False, r) --- | Formats and outputs the "Checking", "Finished" and "Skipping" messages.+-- | Formats and outputs the "Checking", "Finished" and "Loading " messages.  chaseMsg-  :: String               -- ^ The prefix, like @Checking@, @Finished@, @Skipping@.+  :: String               -- ^ The prefix, like @Checking@, @Finished@, @Loading @.   -> C.TopLevelModuleName -- ^ The module name.   -> Maybe String         -- ^ Optionally: the file name.   -> TCM ()@@ -583,12 +613,12 @@   `catchError` handler   where     handler e = case e of-      IOException _ e -> do+      IOException _ _ e -> do         reportSLn "" 0 $ "IO exception: " ++ show e         return Nothing   -- Work-around for file locking bug.                          -- TODO: What does this refer to? Please                          -- document.-      _               -> throwError e+      _ -> throwError e  -- | Writes the given interface to the given file. @@ -629,9 +659,9 @@ createInterface   :: AbsolutePath          -- ^ The file to type check.   -> C.TopLevelModuleName  -- ^ The expected module name.-  -> Bool+  -> MainInterface   -> TCM (Interface, MaybeWarnings)-createInterface file mname isMain =+createInterface file mname isMain = Bench.billTo [Bench.TopModule mname] $   local (\e -> e { envCurrentPath = Just file }) $ do     modFile       <- use stModuleToSource     fileTokenInfo <- Bench.billTo [Bench.Highlighting] $@@ -643,10 +673,7 @@     verboseS "import.iface.create" 10 $ do       visited <- Map.keys <$> getVisitedModules       reportSLn "import.iface.create" 10 $-        "  visited: " ++ intercalate ", " (map prettyShow visited)--    previousHsImports <- getHaskellImports-    previousHsImportsUHC <- getHaskellImportsUHC+        "  visited: " ++ List.intercalate ", " (map prettyShow visited)      -- Parsing.     (pragmas, top) <- Bench.billTo [Bench.Parsing] $@@ -672,10 +699,12 @@     -- Highlighting from scope checker.     reportSLn "import.iface.create" 7 $ "Starting highlighting from scope."     Bench.billTo [Bench.Highlighting] $ do-      ifTopLevelAndHighlightingLevelIs NonInteractive $ do-        -- Generate and print approximate syntax highlighting info.+      -- Generate and print approximate syntax highlighting info.+      ifTopLevelAndHighlightingLevelIs NonInteractive $         printHighlightingInfo fileTokenInfo-        mapM_ (\ d -> generateAndPrintSyntaxInfo d Partial) ds+      let onlyScope = isMain == MainInterface ScopeCheck+      ifTopLevelAndHighlightingLevelIsOr NonInteractive onlyScope $+        mapM_ (\ d -> generateAndPrintSyntaxInfo d Partial onlyScope) ds     reportSLn "import.iface.create" 7 $ "Finished highlighting from scope."  @@ -693,9 +722,14 @@         cleanCachedLog     writeToCurrentLog $ Pragmas opts -    reportSLn "import.iface.create" 7 $ "Starting type checking."-    Bench.billTo [Bench.Typing] $ mapM_ checkDeclCached ds `finally_` cacheCurrentLog-    reportSLn "import.iface.create" 7 $ "Finished type checking."+    case isMain of+      MainInterface ScopeCheck -> do+        reportSLn "import.iface.create" 7 $ "Skipping type checking."+        cacheCurrentLog+      _ -> do+        reportSLn "import.iface.create" 7 $ "Starting type checking."+        Bench.billTo [Bench.Typing] $ mapM_ checkDeclCached ds `finally_` cacheCurrentLog+        reportSLn "import.iface.create" 7 $ "Finished type checking."      -- Ulf, 2013-11-09: Since we're rethrowing the error, leave it up to the     -- code that handles that error to reset the state.@@ -746,7 +780,7 @@     -- permanently freeze them now by turning them into postulates.     -- This will enable serialization.     -- savedMetaStore <- use stMetaStore-    unless isMain $+    unless (includeStateChanges isMain) $       whenM (optAllowUnsolved <$> pragmaOptions) $ do         withCurrentModule (scopeCurrent scope) $           openMetasToPostulates@@ -759,24 +793,30 @@     reportSLn "import.iface.create" 7 $ "Starting serialization."     syntaxInfo <- use stSyntaxInfo     i <- Bench.billTo [Bench.Serialization, Bench.BuildInterface] $ do-      buildInterface file topLevel syntaxInfo previousHsImports previousHsImportsUHC options+      buildInterface file topLevel syntaxInfo options -    reportSLn "tc.top" 101 $ concat $-      "Signature:\n" :-      [ show x ++ "\n  type: " ++ show (defType def)-               ++ "\n  def:  " ++ show cc ++ "\n"+    reportSLn "tc.top" 101 $ unlines $+      "Signature:" :+      [ unlines+          [ prettyShow x+          , "  type: " ++ show (defType def)+          , "  def:  " ++ show cc+          ]       | (x, def) <- HMap.toList $ iSignature i ^. sigDefinitions,         Function{ funCompiled = cc } <- [theDef def]       ]     reportSLn "import.iface.create" 7 $ "Finished serialization."      mallWarnings <- getAllWarnings ErrorWarnings-                      $ if isMain then IgnoreFlags else RespectFlags+                      $ case isMain of+                          MainInterface _  -> IgnoreFlags+                          NotMainInterface -> RespectFlags      reportSLn "import.iface.create" 7 $ "Considering writing to interface file."-    case mallWarnings of-      SomeWarnings allWarnings -> return ()-      NoWarnings               -> Bench.billTo [Bench.Serialization] $ do+    case (mallWarnings, isMain) of+      (SomeWarnings allWarnings, _) -> return ()+      (_, MainInterface ScopeCheck) -> return ()+      _ -> Bench.billTo [Bench.Serialization] $ do         -- The file was successfully type-checked (and no warnings were         -- encountered), so the interface should be written out.         let ifile = filePath $ toIFile file@@ -804,24 +844,6 @@ -- in by the user, or not (for instance when deciding if we are -- writing an interface file or not) -data WhichWarnings = ErrorWarnings | AllWarnings-  -- ^ order of constructors important for derived Ord instance-  deriving (Eq, Ord)--classifyWarning :: Warning -> WhichWarnings-classifyWarning w = case w of-  OldBuiltin{}               -> AllWarnings-  EmptyRewritePragma         -> AllWarnings-  TerminationIssue{}         -> ErrorWarnings-  NotStrictlyPositive{}      -> ErrorWarnings-  UnsolvedMetaVariables{}    -> ErrorWarnings-  UnsolvedInteractionMetas{} -> ErrorWarnings-  UnsolvedConstraints{}      -> ErrorWarnings-  ParseWarning{}             -> ErrorWarnings--classifyWarnings :: [TCWarning] -> ([TCWarning], [TCWarning])-classifyWarnings = partition $ (< AllWarnings) . classifyWarning . tcWarning- getAllWarnings' :: WhichWarnings -> IgnoreFlags -> TCM [TCWarning] getAllWarnings' ww ifs = do   openMetas            <- getOpenMetas@@ -850,9 +872,24 @@            then NoWarnings            else SomeWarnings allWarnings --- constructIScope :: ScopeInfo -> Map ModuleName Scope+errorWarningsOfTCErr :: TCErr -> TCM [TCWarning]+errorWarningsOfTCErr err = case err of+  TypeError tcst cls -> case clValue cls of+    NonFatalErrors{} -> return []+    _ -> localState $ do+      put tcst+      ws <- getAllWarnings' ErrorWarnings RespectFlags+      -- We filter out the unsolved(Metas/Constraints) to stay+      -- true to the previous error messages.+      return $ filter (not . isUnsolvedWarning . tcWarning) ws+  _ -> return []++-- | Reconstruct the 'iScope' (not serialized)+--   from the 'iInsideScope' (serialized).+ constructIScope :: Interface -> Interface-constructIScope i = i{ iScope = billToPure [ Deserialization ] $ publicModules $ iInsideScope i }+constructIScope i = billToPure [ Deserialization ] $+  i{ iScope = publicModules $ iInsideScope i }  -- | Builds an interface for the current module, which should already -- have been successfully type checked.@@ -863,14 +900,10 @@      -- ^ 'TopLevelInfo' for the current module.   -> HighlightingInfo      -- ^ Syntax highlighting info for the module.-  -> Set String-     -- ^ MAlonzo: Haskell modules imported in imported modules (transitively).-  -> Set String-     -- ^ UHC backend: Haskell modules imported in imported modules (transitively).   -> [OptionsPragma]      -- ^ Options set in @OPTIONS@ pragmas.   -> TCM Interface-buildInterface file topLevel syntaxInfo previousHsImports previousHsImportsUHC pragmas = do+buildInterface file topLevel syntaxInfo pragmas = do     reportSLn "import.iface" 5 "Building interface..."     let m = topLevelModuleName topLevel     scope'  <- getScope@@ -888,9 +921,7 @@     builtin <- use stLocalBuiltins     ms      <- getImports     mhs     <- mapM (\ m -> (m,) <$> moduleHash m) $ Set.toList ms-    hsImps  <- getHaskellImports-    uhcHsImps <- getHaskellImportsUHC-    hsCode  <- use stHaskellCode+    foreignCode <- use stForeignCode     -- Ulf, 2016-04-12:     -- Non-closed display forms are not applicable outside the module anyway,     -- and should be dead-code eliminated (#1928).@@ -903,6 +934,7 @@     patsyns <- killRange <$> getPatternSyns     h       <- liftIO $ hashFile file     let builtin' = Map.mapWithKey (\ x b -> (x,) . primFunName <$> b) builtin+    warnings <- getAllWarnings' AllWarnings RespectFlags     reportSLn "import.iface" 7 "  instantiating all meta variables"     i <- instantiateFull $ Interface       { iSourceHash      = h@@ -913,12 +945,11 @@       , iSignature       = sig       , iDisplayForms    = display       , iBuiltin         = builtin'-      , iHaskellImports  = hsImps `Set.difference` previousHsImports-      , iHaskellImportsUHC = uhcHsImps `Set.difference` previousHsImportsUHC-      , iHaskellCode     = hsCode+      , iForeignCode     = foreignCode       , iHighlighting    = syntaxInfo       , iPragmaOptions   = pragmas       , iPatternSyns     = patsyns+      , iWarnings        = warnings       }     reportSLn "import.iface" 7 "  interface complete"     return i
src/full/Agda/Interaction/InteractionTop.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                   #-}-{-# LANGUAGE ScopedTypeVariables   #-}+{-# LANGUAGE CPP #-}  {-# OPTIONS_GHC -fno-cse #-} @@ -13,15 +12,19 @@ import Prelude hiding (null)  import Control.Applicative hiding (empty)+import Control.Concurrent+import Control.Concurrent.Async+import Control.Concurrent.STM.TChan import qualified Control.Exception as E import Control.Monad.Identity import Control.Monad.Reader import Control.Monad.State+import Control.Monad.STM  import qualified Data.Char as Char import Data.Foldable (Foldable) import Data.Function-import Data.List as List hiding (null)+import qualified Data.List as List import Data.Maybe import Data.Map (Map) import qualified Data.Map as Map@@ -36,6 +39,7 @@   hiding (initState, setCommandLineOptions) import qualified Agda.TypeChecking.Monad as TM import qualified Agda.TypeChecking.Pretty as TCP+import Agda.TypeChecking.Rules.Term (checkExpr, isType_) import Agda.TypeChecking.Errors  import Agda.Syntax.Fixity@@ -64,15 +68,15 @@ import Agda.Interaction.BasicOps hiding (whyInScope) import Agda.Interaction.Highlighting.Precise hiding (Postulate) import qualified Agda.Interaction.Imports as Imp+import Agda.TypeChecking.Warnings import Agda.Interaction.Highlighting.Generate import qualified Agda.Interaction.Highlighting.LaTeX as LaTeX import qualified Agda.Interaction.Highlighting.Range as H  import Agda.Compiler.Common (IsMain (..))-import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo-import qualified Agda.Compiler.JS.Compiler as JS+import Agda.Compiler.Backend -import qualified Agda.Auto.Auto as Auto+import Agda.Auto.Auto as Auto  import Agda.Utils.Except   ( ExceptT@@ -97,7 +101,8 @@ #include "undefined.h" import Agda.Utils.Impossible -------------------------------------------+------------------------------------------------------------------------+-- The CommandM monad  -- | Auxiliary state of an interactive computation. @@ -119,20 +124,30 @@     -- ^ We remember (the scope of) old interaction points to make it     --   possible to parse and compute highlighting information for the     --   expression that it got replaced by.+  , commandQueue :: CommandQueue+    -- ^ Command queue.+    --+    -- The commands in the queue are processed in the order in which+    -- they are received. Abort commands do not have precedence over+    -- other commands, they only abort the immediately preceding+    -- command. (The Emacs mode is expected not to send a new command,+    -- other than the abort command, before the previous command has+    -- completed.)   }  type OldInteractionScopes = Map InteractionId ScopeInfo  -- | Initial auxiliary interaction state -initCommandState :: CommandState-initCommandState = CommandState-  { theInteractionPoints = []-  , theCurrentFile       = Nothing-  , optionsOnReload      = defaultOptions-  , oldInteractionScopes = Map.empty-  }-+initCommandState :: CommandQueue -> CommandState+initCommandState commandQueue =+  CommandState+    { theInteractionPoints = []+    , theCurrentFile       = Nothing+    , optionsOnReload      = defaultOptions+    , oldInteractionScopes = Map.empty+    , commandQueue         = commandQueue+    }  -- | Monad for computing answers to interactive commands. --@@ -229,7 +244,7 @@  handleCommand :: (forall a. CommandM a -> CommandM a) -> CommandM () -> CommandM () -> CommandM () handleCommand wrap onFail cmd = handleNastyErrors $ wrap $ do-    tcSt <- lift get+    oldState <- lift get      -- -- Andreas, 2016-11-18 OLD CODE:     -- -- onFail and handleErr are executed in "new" command state (not TCState).@@ -246,7 +261,10 @@       handleErr e       -- Andreas, 2016-11-18, issue #2174       -- Reset TCState after error is handled, to get rid of metas created during failed command-      lift $ put tcSt+      lift $ do+        newPersistentState <- use lensPersistentState+        put oldState+        lensPersistentState .= newPersistentState    where     -- Preserves state so we can do unsolved meta highlighting@@ -259,13 +277,25 @@       put s'       return x -    -- | Handle nasty errors like stack space overflow (issue 637)-    -- We assume that the input action handles other kind of errors.+    -- | Handle every possible kind of error (#637), except for+    -- ThreadKilled, which is used to abort Agda.     handleNastyErrors :: CommandM () -> CommandM ()-    handleNastyErrors m = commandMToIO $ \ toIO ->-        toIO m `E.catch` \ (e :: E.SomeException) ->-          toIO $ handleErr $ Exception noRange $ text $ show e+    handleNastyErrors m = commandMToIO $ \ toIO -> do+      let handle e =+            Right <$>+              (toIO $ handleErr $ Exception noRange $ text $ show e) +          asyncHandler e@E.ThreadKilled = return (Left e)+          asyncHandler e                = handle e++          generalHandler (e :: E.SomeException) = handle e++      r <- ((Right <$> toIO m) `E.catch` asyncHandler)+             `E.catch` generalHandler+      case r of+        Right x -> return x+        Left e  -> E.throwIO e+     -- | Displays an error and instructs Emacs to jump to the site of the     -- error. Because this function may switch the focus to another file     -- the status information is also updated.@@ -275,15 +305,18 @@         constr  <- lift $ computeUnsolvedConstraints         err     <- lift $ errorHighlighting e         modFile <- lift $ use stModuleToSource+        method  <- lift $ view eHighlightingMethod         let info = compress $ mconcat $                      -- Errors take precedence over unsolved things.                      err : if unsolvedNotOK then [meta, constr] else []-        s <- lift $ prettyError e+        s1 <- lift $ prettyError e+        s2 <- lift $ prettyTCWarnings' =<< Imp.errorWarningsOfTCErr e+        let s = List.intercalate "\n" $ filter (not . null) $ s1 : s2         x <- lift $ optShowImplicit <$> use stPragmaOptions-        unless (null s) $ mapM_ putResponse $+        unless (null s1) $ mapM_ putResponse $             [ Resp_DisplayInfo $ Info_Error s ] ++             tellEmacsToJumpToError (getRange e) ++-            [ Resp_HighlightingInfo info modFile ] +++            [ Resp_HighlightingInfo info method modFile ] ++             [ Resp_Status $ Status { sChecked = False                                    , sShowImplicitArguments = x                                    } ]@@ -320,6 +353,95 @@     onFail | independent cmd = modify $ \ s -> s { theCurrentFile = Nothing }            | otherwise       = return () +------------------------------------------------------------------------+-- Command queues++-- | Commands.++data Command+  = Command IOTCM+    -- ^ An 'IOTCM' command.+  | Done+    -- ^ Stop processing commands.+  | Error String+    -- ^ An error message for a command that could not be parsed.+  deriving Show++-- | Command queues.++type CommandQueue = TChan Command++-- | The next command.++nextCommand :: CommandM Command+nextCommand =+  liftIO . atomically . readTChan =<< gets commandQueue++-- | Runs the given computation, but if an abort command is+-- encountered (and acted upon), then the computation is interrupted,+-- the persistent state and all options are restored, and some+-- commands are sent to the frontend.++-- TODO: It might be nice if some of the changes to the persistent+-- state inflicted by the interrupted computation were preserved.++maybeAbort :: CommandM () -> CommandM ()+maybeAbort c = do+  commandState <- get+  tcState      <- lift get+  tcEnv        <- lift ask+  result       <- liftIO $ race+                    (runTCM tcEnv tcState $ runStateT c commandState)+                    (waitForAbort $ commandQueue commandState)+  case result of+    Left (((), commandState), tcState) -> do+      lift $ put tcState+      put commandState+    Right () -> do+      lift $ put $ initState+        { stPersistentState = stPersistentState tcState+        , stPreScopeState   =+            (stPreScopeState initState)+              { stPrePragmaOptions =+                  stPrePragmaOptions+                    (stPreScopeState tcState)+              }+        }+      put $ (initCommandState (commandQueue commandState))+        { optionsOnReload = optionsOnReload commandState+        }+      putResponse Resp_DoneAborting+      displayStatus+  where++  -- | Returns if the first element in the queue is an abort command.+  -- The abort command is removed from the queue.++  waitForAbort :: CommandQueue -> IO ()+  waitForAbort q = atomically $ do+    c <- peekTChan q+    case c of+      Command (IOTCM _ _ _ Cmd_abort) -> void $ readTChan q+      _                               -> retry++-- | Creates a command queue, and forks a thread that writes commands+-- to the queue. The queue is returned.++initialiseCommandQueue+  :: IO Command+     -- ^ Returns the next command.+  -> IO CommandQueue+initialiseCommandQueue next = do+  q <- newTChanIO+  let readCommands = do+        c <- next+        atomically $ writeTChan q c+        case c of+          Done -> return ()+          _    -> readCommands+  _ <- forkIO readCommands+  return q+ ---------------------------------------------------------------------------- -- | An interactive computation. @@ -332,7 +454,7 @@      -- | @cmd_compile b m argv@ compiles the module in file @m@ using     -- the backend @b@, using @argv@ as the command-line options.-  | Cmd_compile         Backend FilePath [String]+  | Cmd_compile         CompilerBackend FilePath [String]    | Cmd_constraints @@ -410,7 +532,7 @@     -- If the range is 'noRange', then the string comes from the     -- minibuffer rather than the goal. -  | Cmd_give            InteractionId range String+  | Cmd_give            UseForce InteractionId range String    | Cmd_refine          InteractionId range String @@ -436,6 +558,11 @@   | Cmd_goal_type_context_infer                         B.Rewrite InteractionId range String +  -- | Grabs the current goal's type and checks the expression in the hole+  -- against it.+  | Cmd_goal_type_context_check+                        B.Rewrite InteractionId range String+     -- | Shows all the top-level names in the given module, along with     -- their types. Uses the scope of the given goal.   | Cmd_show_module_contents@@ -450,8 +577,11 @@   | Cmd_why_in_scope_toplevel String     -- | Displays version of the running Agda   | Cmd_show_version-        deriving (Read, Functor, Foldable, Traversable)-+  | Cmd_abort+    -- ^ Abort the current computation.+    --+    -- Does nothing if no computation is in progress.+        deriving (Show, Read, Functor, Foldable, Traversable)  type IOTCM = IOTCM' Range data IOTCM' range@@ -464,7 +594,7 @@         HighlightingMethod         (Interaction' range)          -- -^ What to do-            deriving (Read, Functor, Foldable, Traversable)+            deriving (Show, Read, Functor, Foldable, Traversable)  --------------------------------------------------------- -- Read instances@@ -496,7 +626,7 @@ -- | Demand an exact string.  exact :: String -> Parse ()-exact s = readsToParse (show s) $ fmap (\x -> ((),x)) . stripPrefix s . dropWhile (==' ')+exact s = readsToParse (show s) $ fmap (\x -> ((),x)) . List.stripPrefix s . dropWhile (==' ')  readParse :: Read a => Parse a readParse = readsToParse "read failed" $ listToMaybe . reads@@ -556,23 +686,30 @@ interpret :: Interaction -> CommandM ()  interpret (Cmd_load m argv) =-  cmd_load' m argv True $ \_ -> interpret Cmd_metas+  cmd_load' m argv True Imp.TypeCheck $ \_ -> interpret Cmd_metas  interpret (Cmd_compile b file argv) =-  cmd_load' file argv (b == LaTeX) $ \(i, mw) -> do+  cmd_load' file argv (b `elem` [LaTeX, QuickLaTeX])+            (if b == QuickLaTeX+             then Imp.ScopeCheck+             else Imp.TypeCheck) $ \(i, mw) -> do     mw <- lift $ Imp.applyFlagsToMaybeWarnings RespectFlags mw     case mw of       Imp.NoWarnings -> do         lift $ case b of-          GHC       -> MAlonzo.compilerMain IsMain i-          GHCNoMain -> MAlonzo.compilerMain NotMain i-          JS        -> JS.compilerMain i-          LaTeX     -> LaTeX.generateLaTeX i-        display_info $ Info_CompilationOk-      Imp.SomeWarnings w ->+          LaTeX                    -> LaTeX.generateLaTeX i+          QuickLaTeX               -> LaTeX.generateLaTeX i+          OtherBackend "GHCNoMain" -> callBackend "GHC" NotMain i   -- for backwards compatibility+          OtherBackend b           -> callBackend b IsMain  i+        (pwe, pwa) <- interpretWarnings+        display_info $ Info_CompilationOk pwa pwe+      Imp.SomeWarnings w -> do+        pw <- lift $ prettyTCWarnings w         display_info $ Info_Error $ unlines-          [ "You can only compile modules without unsolved metavariables"-          , "or termination checking problems."+          [ "You need to fix the following errors before you can compile"+          , "the module:"+          , ""+          , pw           ]  interpret Cmd_constraints =@@ -654,7 +791,8 @@               if sourceH == iSourceHash (miInterface mi)                then do                 modFile <- use stModuleToSource-                return $ Just (iHighlighting $ miInterface mi, modFile)+                method  <- view eHighlightingMethod+                return $ Just (iHighlighting $ miInterface mi, method, modFile)                else                 return Nothing     mapM_ putResponse resp@@ -680,15 +818,15 @@     try err m = mkExceptT $ do       (Right <$> m) `catchError` \ _ -> return (Left err) -interpret (Cmd_give   ii rng s) = give_gen ii rng s Give-interpret (Cmd_refine ii rng s) = give_gen ii rng s Refine+interpret (Cmd_give   force ii rng s) = give_gen force ii rng s Give+interpret (Cmd_refine ii rng s) = give_gen WithoutForce ii rng s Refine  interpret (Cmd_intro pmLambda ii rng _) = do   ss <- lift $ B.introTactic pmLambda ii   liftCommandMT (B.withInteractionId ii) $ case ss of     []    -> do       display_info $ Info_Intro $ text "No introduction forms found."-    [s]   -> give_gen ii rng s Intro+    [s]   -> give_gen WithoutForce ii rng s Intro     _:_:_ -> do       display_info $ Info_Intro $         sep [ text "Don't know which constructor to introduce of"@@ -707,11 +845,11 @@   -- Save the state to have access to even those interaction ids   -- that Auto solves (since Auto gives the solution right away).   st <- lift $ get-  (res, msg) <- lift $ Auto.auto ii rng s-  case res of-   Left xs -> do-    lift $ reportSLn "auto" 10 $ "Auto produced the following solutions " ++ show xs-    forM_ xs $ \(ii, s) -> do+  (time , res) <- maybeTimed $ lift $ Auto.auto ii rng s+  case autoProgress res of+   Solutions sols -> do+    lift $ reportSLn "auto" 10 $ "Auto produced the following solutions " ++ show sols+    forM_ sols $ \(ii, s) -> do       -- Andreas, 2014-07-05 Issue 1226:       -- For highlighting, Resp_GiveAction needs to access       -- the @oldInteractionScope@s of the interaction points solved by Auto.@@ -723,16 +861,17 @@       -- modifyTheInteractionPoints $ filter (/= ii)       putResponse $ Resp_GiveAction ii $ Give_String s     -- Andreas, 2014-07-07: Remove the interaction points in one go.-    modifyTheInteractionPoints (\\ (map fst xs))-    case msg of-     Nothing -> interpret Cmd_metas+    modifyTheInteractionPoints (List.\\ (map fst sols))+    case autoMessage res of+     Nothing  -> interpret Cmd_metas      Just msg -> display_info $ Info_Auto msg-   Right (Left cs) -> do-    case msg of-     Nothing -> return ()+   FunClauses cs -> do+    case autoMessage res of+     Nothing  -> return ()      Just msg -> display_info $ Info_Auto msg     putResponse $ Resp_MakeCase R.Function cs-   Right (Right s) -> give_gen ii rng s Refine+   Refinement s -> give_gen WithoutForce ii rng s Refine+  maybe (return ()) (display_info . Info_Time) time  interpret (Cmd_context norm ii _ _) =   display_info . Info_Context =<< liftLocalState (prettyContext norm False ii)@@ -762,6 +901,17 @@     return $ text "Have:" <+> typ   cmd_goal_type_context_and have norm ii rng s +interpret (Cmd_goal_type_context_check norm ii rng s) = do+  have <- liftLocalState $ B.withInteractionId ii $ do+    expr <- B.parseExprIn ii rng s+    goal <- B.typeOfMeta AsIs ii+    term <- case goal of+      OfType _ ty -> checkExpr expr =<< isType_ ty+      _           -> __IMPOSSIBLE__+    txt <- TCP.prettyTCM =<< normalForm norm term+    return $ text "Elaborates to:" <+> txt+  cmd_goal_type_context_and have norm ii rng s+ interpret (Cmd_show_module_contents norm ii rng s) =   liftCommandMT (B.withInteractionId ii) $ showModuleContents norm rng s @@ -788,6 +938,13 @@         , TCP.text "pcs' = " TCP.<+> TCP.vcat (map TCP.text pcs')         ]       ]+    lift $ reportSDoc "interaction.case" 90 $ TCP.vcat+      [ TCP.text "InteractionTop.Cmd_make_case"+      , TCP.nest 2 $ TCP.vcat+        [ TCP.text "cs   = " TCP.<+> TCP.text (show cs)+        , TCP.text "cs'  = " TCP.<+> TCP.text (show cs')+        ]+      ]     putResponse $ Resp_MakeCase (makeCaseVariant casectxt) pcs'   where     render = renderStyle (style { mode = OneLineMode })@@ -811,11 +968,10 @@     -- Drops pattern added to extended lambda functions when lambda lifting them     extlam_dropLLifted :: CaseContext -> Bool -> A.Clause -> A.Clause     extlam_dropLLifted Nothing _ x = x-    extlam_dropLLifted _ _ (A.Clause (A.LHS _ A.LHSProj{} _) _ _ _ _) = __IMPOSSIBLE__-    extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info (A.LHSHead name nps) ps) dots rhs decl catchall)+    extlam_dropLLifted _ _ (A.Clause (A.LHS _ A.LHSProj{} _) _ _ _ _ _) = __IMPOSSIBLE__+    extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden cl@A.Clause{ A.clauseLHS = A.LHS info (A.LHSHead name nps) ps }       = let n = if hidden then h + nh else nh-        in-         (A.Clause (A.LHS info (A.LHSHead name (drop n nps)) ps) dots rhs decl catchall)+        in cl{ A.clauseLHS = A.LHS info (A.LHSHead name (drop n nps)) ps }  interpret (Cmd_compute cmode ii rng s) = display_info . Info_NormalForm =<< do   liftLocalState $ do@@ -826,13 +982,15 @@  interpret Cmd_show_version = display_info Info_Version +interpret Cmd_abort = return ()+ -- | Show warnings interpretWarnings :: CommandM (String, String) interpretWarnings = do-  mws <- lift $ Imp.getAllWarnings Imp.AllWarnings RespectFlags+  mws <- lift $ Imp.getAllWarnings AllWarnings RespectFlags   case filter isNotMeta <$> mws of     Imp.SomeWarnings ws@(_:_) -> do-      let (we, wa) = Imp.classifyWarnings ws+      let (we, wa) = classifyWarnings ws       pwe <- lift $ prettyTCWarnings we       pwa <- lift $ prettyTCWarnings wa       return (pwe, pwa)@@ -895,10 +1053,12 @@ -- result of 'Imp.typeCheckMain'.  cmd_load' :: FilePath -> [String]-          -> Bool -- ^ Allow unsolved meta-variables?+          -> Bool      -- ^ Allow unsolved meta-variables?+          -> Imp.Mode  -- ^ Full type-checking, or only+                       --   scope-checking?           -> ((Interface, Imp.MaybeWarnings) -> CommandM ())           -> CommandM ()-cmd_load' file argv unsolvedOK cmd = do+cmd_load' file argv unsolvedOK mode cmd = do     f <- liftIO $ absolute file     ex <- liftIO $ doesFileExist $ filePath f     let relativeTo | ex        = ProjectRoot f@@ -937,7 +1097,7 @@     -- We activate the cache only when agda is used interactively     lift activateLoadedFileCache -    ok <- lift $ Imp.typeCheckMain f+    ok <- lift $ Imp.typeCheckMain f mode      -- The module type checked. If the file was not changed while the     -- type checker was running then the interaction points and the@@ -959,30 +1119,42 @@  -- | Available backends. -data Backend = GHC-             | GHCNoMain-             | JS-             | LaTeX-    deriving (Show, Read, Eq)+data CompilerBackend = LaTeX | QuickLaTeX | OtherBackend String+    deriving (Eq) +instance Show CompilerBackend where+  show LaTeX            = "LaTeX"+  show QuickLaTeX       = "QuickLaTeX"+  show (OtherBackend s) = s++instance Read CompilerBackend where+  readsPrec _ s = do+    (t, s) <- lex s+    let b = case t of+              "LaTeX"      -> LaTeX+              "QuickLaTeX" -> QuickLaTeX+              _            -> OtherBackend t+    return (b, s)+ data GiveRefine = Give | Refine | Intro   deriving (Eq, Show)  -- | A "give"-like action (give, refine, etc). -----   @give_gen ii rng s give_ref mk_newtxt@+--   @give_gen force ii rng s give_ref mk_newtxt@ --   acts on interaction point @ii@ --   occupying range @rng@, --   placing the new content given by string @s@, --   and replacing @ii@ by the newly created interaction points---   in the state.+--   in the state if safety checks pass (unless @force@ is applied). give_gen-  :: InteractionId+  :: UseForce       -- ^ Should safety checks be skipped?+  -> InteractionId   -> Range   -> String   -> GiveRefine   -> CommandM ()-give_gen ii rng s0 giveRefine = do+give_gen force ii rng s0 giveRefine = do   let s = trim s0   lift $ reportSLn "interaction.give" 20 $ "give_gen  " ++ s   -- Andreas, 2015-02-26 if string is empty do nothing rather@@ -1001,10 +1173,10 @@         mis  <- getInteractionPoints         reportSLn "interaction.give" 30 $ "interaction points before = " ++ show mis         given <- B.parseExprIn ii rng s-        ae    <- give_ref ii Nothing given+        ae    <- give_ref force ii Nothing given         mis' <- getInteractionPoints         reportSLn "interaction.give" 30 $ "interaction points after = " ++ show mis'-        return (ae, given, mis' \\ mis)+        return (ae, given, mis' List.\\ mis)     -- favonia: backup the old scope for highlighting     insertOldInteractionScope ii scope     -- sort the new interaction points and put them into the state@@ -1053,7 +1225,7 @@   local (\e -> e { envModuleNestingLevel = 0                  , envHighlightingLevel  = NonInteractive                  , envHighlightingMethod = Direct }) $-    generateAndPrintSyntaxInfo decl Full+    generateAndPrintSyntaxInfo decl Full True   where     dummy = mkName_ (NameId 0 0) "dummy"     info  = mkDefInfo (nameConcrete dummy) noFixity' PublicAccess ConcreteDef (getRange e)@@ -1063,7 +1235,7 @@  sortInteractionPoints :: [InteractionId] -> TCM [InteractionId] sortInteractionPoints is =-  map fst . sortBy (compare `on` snd) <$> do+  map fst . List.sortBy (compare `on` snd) <$> do     forM is $ \ i -> do       (i,) <$> getInteractionRange i @@ -1123,7 +1295,7 @@     (modules, types) <- B.moduleContents norm rng s     types' <- forM types $ \ (x, t) -> do       t <- TCP.prettyTCM t-      return (show x, text ":" <+> t)+      return (prettyShow x, text ":" <+> t)     return $ vcat       [ text "Modules"       , nest 2 $ vcat $ map (text . show) modules@@ -1142,9 +1314,9 @@        hits <- findMentions norm rg tnm        forM hits $ \ (x, t) -> do          t <- TCP.prettyTCM t-         return (show x, text ":" <+> t)+         return (prettyShow x, text ":" <+> t)     display_info $ Info_SearchAbout $-      text "Definitions about" <+> text (intercalate ", " $ words nm) $$+      text "Definitions about" <+> text (List.intercalate ", " $ words nm) $$       nest 2 (align 10 fancy)  -- | Explain why something is in scope.@@ -1181,8 +1353,8 @@             asVar = do               TCP.text "* a variable bound at" TCP.<+> TCP.prettyTCM (nameBindingSite $ localVar x)             shadowing :: LocalVar -> TCM Doc-            shadowing LocalVar{}    = TCP.text "shadowing"-            shadowing ShadowedVar{} = TCP.text "in conflict with"+            shadowing (LocalVar _ _ [])    = TCP.text "shadowing"+            shadowing _ = TCP.text "in conflict with"         names   xs = TCP.vcat $ map pName xs         modules ms = TCP.vcat $ map pMod ms @@ -1256,7 +1428,7 @@           mm <- lookupModuleFromSource f           case mm of             Nothing -> return False -- work-around for Issue1007-            Just m  -> not . miWarnings . fromMaybe __IMPOSSIBLE__ <$> getVisitedModule m+            Just m  -> maybe False (not . miWarnings) <$> getVisitedModule m    return $ Status { sShowImplicitArguments = showImpl                   , sChecked               = checked@@ -1322,10 +1494,10 @@ -- info (unless it is @Nothing@).  tellToUpdateHighlighting-  :: Maybe (HighlightingInfo, ModuleToSource) -> IO [Response]+  :: Maybe (HighlightingInfo, HighlightingMethod, ModuleToSource) -> IO [Response] tellToUpdateHighlighting Nothing                = return []-tellToUpdateHighlighting (Just (info, modFile)) =-  return [Resp_HighlightingInfo info modFile]+tellToUpdateHighlighting (Just (info, method, modFile)) =+  return [Resp_HighlightingInfo info method modFile]  -- | Tells the Emacs mode to go to the first error position (if any). 
src/full/Agda/Interaction/Library.hs view
@@ -1,10 +1,30 @@-+-- | Library management.+--+--   Sample use:+--+--   @+--     -- Get libraries as listed in @.agda/libraries@ file.+--     libs <- getInstalledLibraries Nothing+--+--     -- Get the libraries (and immediate paths) relevant for @projectRoot@.+--     -- This involves locating and processing the @.agda-lib@ file for the project.+--     (libNames, includePaths) <-  getDefaultLibraries projectRoot True+--+--     -- Get include paths of depended-on libraries.+--     resolvedPaths <- libraryIncludePaths Nothing libs libNames+--+--     let allPaths = includePaths ++ resolvedPaths+--   @+-- module Agda.Interaction.Library   ( getDefaultLibraries   , getInstalledLibraries   , libraryIncludePaths   , LibName   , LibM+  -- * Exported for testing+  , VersionView(..), versionView, unVersionView+  , findLib'   ) where  import Control.Arrow (first, second)@@ -14,57 +34,117 @@ import Data.Char import Data.Either import Data.Function-import Data.List+import qualified Data.List as List import Data.Maybe+import System.Directory ( getAppUserDataDirectory ) import System.Directory import System.FilePath import System.Environment  import Agda.Interaction.Library.Base import Agda.Interaction.Library.Parse-import Agda.Utils.Monad+ import Agda.Utils.Environment import Agda.Utils.Except ( ExceptT, runExceptT, MonadError(throwError) )+import Agda.Utils.IO ( catchIO ) import Agda.Utils.List+import Agda.Utils.Maybe+import Agda.Utils.Monad import Agda.Utils.Pretty+import Agda.Utils.String ( trim, ltrim )  import Agda.Version +------------------------------------------------------------------------+-- Types and Monads+------------------------------------------------------------------------++-- | Library names are structured into the base name and a suffix of version+--   numbers, e.g. @mylib-1.2.3@.  The version suffix is optional.+data VersionView = VersionView+  { vvBase    :: LibName+      -- ^ Actual library name.+  , vvNumbers :: [Integer]+      -- ^ Major version, minor version, subminor version, etc., all non-negative.+      --   Note: a priori, there is no reason why the version numbers should be @Int@s.+  } deriving (Eq, Show)++-- | Collected errors while processing library files.+--+data LibError+  = LibNotFound FilePath LibName+      -- ^ Raised when a library name could no successfully be resolved+      --   to an @.agda-lib@ file.+  | AmbiguousLib LibName [AgdaLibFile]+      -- ^ Raised when a library name is defined in several @.agda-lib files@.+  | OtherError String+      -- ^ Generic error.+  deriving (Show)++-- | Collects 'LibError's.+--+type LibErrorIO = WriterT [LibError] IO++-- | Throws 'Doc' exceptions. type LibM = ExceptT Doc IO -catchIO :: IO a -> (IOException -> IO a) -> IO a-catchIO = catch+-- | Raise collected 'LibErrors' as exception.+--+mkLibM :: [AgdaLibFile] -> LibErrorIO a -> LibM a+mkLibM libs m = do+  (x, err) <- lift $ runWriterT m+  case err of+    [] -> return x+    _  -> throwError =<< do lift $ vcat <$> mapM (formatLibError libs) err +------------------------------------------------------------------------+-- Resources+------------------------------------------------------------------------++-- | Get the path to @~/.agda@ (system-specific).+--   Can be overwritten by the @AGDA_DIR@ environment variable.+--+--   (This is not to be confused with the directory for the data files+--   that Agda needs (e.g. the primitive modules).)+-- getAgdaAppDir :: IO FilePath getAgdaAppDir = do-  agdaDir <- lookupEnv "AGDA_DIR"-  case agdaDir of-    Nothing  -> getAppUserDataDirectory "agda"-    Just dir ->+  -- System-specific command to build the path to ~/.agda (Unix) or %APPDATA%\agda (Win)+  let agdaDir = getAppUserDataDirectory "agda"+  -- The default can be overwritten by setting the AGDA_DIR environment variable+  caseMaybeM (lookupEnv "AGDA_DIR") agdaDir $ \ dir ->       ifM (doesDirectoryExist dir) (canonicalizePath dir) $ do-        d <- getAppUserDataDirectory "agda"+        d <- agdaDir         putStrLn $ "Warning: Environment variable AGDA_DIR points to non-existing directory " ++ show dir ++ ", using " ++ show d ++ " instead."         return d +-- | The @~/.agda/libraries@ file lists the libraries Agda should know about.+--   The content of @libraries@ is is a list of pathes to @.agda-lib@ files.+--+--   Agda honors also version specific @libraries@ files, e.g. @libraries-2.6.0@.+--+--   @defaultLibraryFiles@ gives a list of all @libraries@ files Agda should process+--   by default.+-- defaultLibraryFiles :: [FilePath] defaultLibraryFiles = ["libraries-" ++ version, "libraries"] +-- | The @defaultsFile@ contains a list of library names relevant for each Agda project.+-- defaultsFile :: FilePath defaultsFile = "defaults" -data LibError = LibNotFound FilePath LibName-              | AmbiguousLib LibName [AgdaLibFile]-              | OtherError String-  deriving (Show)--mkLibM :: [AgdaLibFile] -> IO (a, [LibError]) -> LibM a-mkLibM libs m = do-  (x, err) <- lift m-  case err of-    [] -> return x-    _  -> throwError =<< lift (vcat <$> mapM (formatLibError libs) err)+------------------------------------------------------------------------+-- * Get the libraries for the current project+------------------------------------------------------------------------ -findAgdaLibFiles :: FilePath -> IO [FilePath]+-- | Get pathes of @.agda-lib@ files in given project root.+--+--   If there are none, look in the parent directories until one is found.+--+findAgdaLibFiles+  :: FilePath       -- ^ Project root.+  -> IO [FilePath]  -- ^ Pathes of @.agda-lib@ files for this project (if any). findAgdaLibFiles root = do   libs <- map (root </>) . filter ((== ".agda-lib") . takeExtension) <$> getDirectoryContents root   case libs of@@ -73,92 +153,149 @@       if up == root then return [] else findAgdaLibFiles up     files -> return files -getDefaultLibraries :: FilePath -> Bool -> LibM ([LibName], [FilePath])+-- | Get dependencies and include paths for given project root:+--+--   Look for @.agda-lib@ files according to 'findAgdaLibFiles'.+--   If none are found, use default dependencies (according to @defaults@ file)+--   and current directory (project root).+--+getDefaultLibraries+  :: FilePath  -- ^ Project root.+  -> Bool      -- ^ Use @defaults@ if no @.agda-lib@ file exists for this project?+  -> LibM ([LibName], [FilePath])  -- ^ The returned @LibName@s are all non-empty strings. getDefaultLibraries root optDefaultLibs = mkLibM [] $ do-  libs <- findAgdaLibFiles root+  libs <- lift $ findAgdaLibFiles root   if null libs-    then-    if optDefaultLibs then first (, []) <$> readDefaultsFile else return (([], []), [])-    else first libsAndPaths <$> parseLibFiles Nothing (zip (repeat 0) libs)+    then (,[]) <$> if optDefaultLibs then (libNameForCurrentDir :) <$> readDefaultsFile else return []+    else libsAndPaths <$> parseLibFiles Nothing (zip (repeat 0) libs)   where     libsAndPaths ls = (concatMap libDepends ls, concatMap libIncludes ls) -readDefaultsFile :: IO ([LibName], [LibError])+-- | Return list of libraries to be used by default.+--+--   None if the @defaults@ file does not exist.+--+readDefaultsFile :: LibErrorIO [LibName] readDefaultsFile = do-    agdaDir <- getAgdaAppDir+    agdaDir <- lift $ getAgdaAppDir     let file = agdaDir </> defaultsFile-    ifM (doesFileExist file) (do-      ls <- map snd . stripCommentLines <$> readFile file-      return ("." : concatMap splitCommas ls, [])-      ) {- else -} (return (["."], []))-  `catchIO` \e -> return (["."], [OtherError $ "Failed to read defaults file.\n" ++ show e])+    ifNotM (lift $ doesFileExist file) (return []) $ {-else-} do+      ls <- lift $ map snd . stripCommentLines <$> readFile file+      return $ concatMap splitCommas ls+  `catchIO` \ e -> do+    tell [ OtherError $ unlines ["Failed to read defaults file.", show e] ]+    return [] -getLibrariesFile :: Maybe FilePath -> IO FilePath+------------------------------------------------------------------------+-- * Reading the installed libraries+------------------------------------------------------------------------++-- | Returns the path of the @libraries@ file which lists the libraries Agda knows about.+--+--   Note: file may not exist.+--+getLibrariesFile+  :: Maybe FilePath -- ^ Override the default @libraries@ file?+  -> IO FilePath getLibrariesFile (Just overrideLibFile) = return overrideLibFile getLibrariesFile Nothing = do   agdaDir <- getAgdaAppDir-  let defaults = map (agdaDir </>) defaultLibraryFiles+  let defaults = map (agdaDir </>) defaultLibraryFiles  -- NB: non-empty list   files <- filterM doesFileExist defaults   case files of     file : _ -> return file     []       -> return (last defaults) -- doesn't exist, but that's ok -getInstalledLibraries :: Maybe FilePath -> LibM [AgdaLibFile]+-- | Parse the descriptions of the libraries Agda knows about.+--+--   Returns none if there is no @libraries@ file.+--+getInstalledLibraries+  :: Maybe FilePath  -- ^ Override the default @libraries@ file?+  -> LibM [AgdaLibFile] -- ^ Content of library files.  (Might have empty @LibName@s.) getInstalledLibraries overrideLibFile = mkLibM [] $ do-    file <- getLibrariesFile overrideLibFile-    ifM (doesFileExist file) (do-      ls    <- stripCommentLines <$> readFile file-      files <- sequence [ (i, ) <$> expandEnvironmentVariables s | (i, s) <- ls ]+    file <- lift $ getLibrariesFile overrideLibFile+    ifNotM (lift $ doesFileExist file) (return []) $ {-else-} do+      ls    <- lift $ stripCommentLines <$> readFile file+      files <- lift $ sequence [ (i, ) <$> expandEnvironmentVariables s | (i, s) <- ls ]       parseLibFiles (Just file) files-      ) {- else -} (return ([], []))-  `catchIO` \e -> return ([], [OtherError $ "Failed to read installed libraries.\n" ++ show e])+  `catchIO` \ e -> do+    tell [ OtherError $ unlines ["Failed to read installed libraries.", show e] ]+    return [] -parseLibFiles :: Maybe FilePath -> [(Int, FilePath)] -> IO ([AgdaLibFile], [LibError])+-- | Parse the given library files.+--+parseLibFiles+  :: Maybe FilePath            -- ^ Name of @libraries@ file for error reporting.+  -> [(LineNumber, FilePath)]  -- ^ Library files paired with their line number in @libraries@.+  -> LibErrorIO [AgdaLibFile]  -- ^ Content of library files.  (Might have empty @LibName@s.) parseLibFiles libFile files = do-  rs <- mapM (parseLibFile . snd) files+  rs <- lift $ mapM (parseLibFile . snd) files+  -- Format and raise the errors.   let loc line | Just f <- libFile = f ++ ":" ++ show line ++ ": "                | otherwise         = ""-      errs = [ if isPrefixOf "Failed to read" err-                then OtherError $ loc line ++ err-                else OtherError $ path ++ ":" ++ (if all isDigit (take 1 err) then "" else " ") ++ err-             | ((line, path), Left err) <- zip files rs ]-  return (rights rs, errs)+  tell [ OtherError $ pos ++ err+       | ((line, path), Left err) <- zip files rs+       , let pos = if List.isPrefixOf "Failed to read" err+                   then loc line+                   else path ++ ":" ++ (if all isDigit (take 1 err) then "" else " ")+       ]+  return $ rights rs -stripCommentLines :: String -> [(Int, String)]+-- | Remove trailing white space and line comments.+--+stripCommentLines :: String -> [(LineNumber, String)] stripCommentLines = concatMap strip . zip [1..] . lines   where     strip (i, s) = [ (i, s') | not $ null s' ]-      where s' = stripComments $ dropWhile isSpace s+      where s' = trimLineComment s +-- | Pretty-print 'LibError'. formatLibError :: [AgdaLibFile] -> LibError -> IO Doc-formatLibError installed (LibNotFound file lib) = do-  return $ vcat $+formatLibError installed = \case++  LibNotFound file lib -> return $ vcat $     [ text $ "Library '" ++ lib ++ "' not found."     , sep [ text "Add the path to its .agda-lib file to"           , nest 2 $ text $ "'" ++ file ++ "'"-          , text "to install." ]+          , text "to install."+          ]     , text "Installed libraries:"     ] ++     map (nest 2)       (if null installed then [text "(none)"]       else [ sep [ text $ libName l, nest 2 $ parens $ text $ libFile l ] | l <- installed ])-formatLibError _ (AmbiguousLib lib tgts) = return $-  vcat $ sep [ text $ "Ambiguous library '" ++ lib ++ "'."-             , text "Could refer to any one of" ]-       : [ nest 2 $ text (libName l) <+> parens (text $ libFile l) | l <- tgts ]-formatLibError _ (OtherError err) = return $ text err -libraryIncludePaths :: Maybe FilePath -> [AgdaLibFile] -> [LibName] -> LibM [FilePath]-libraryIncludePaths overrideLibFile libs xs0 = mkLibM libs $ do+  AmbiguousLib lib tgts -> return $ vcat $+    [ sep [ text $ "Ambiguous library '" ++ lib ++ "'.", text "Could refer to any one of" ]+    ] ++ [ nest 2 $ text (libName l) <+> parens (text $ libFile l) | l <- tgts ]++  OtherError err -> return $ text err++------------------------------------------------------------------------+-- * Resolving library names to include pathes+------------------------------------------------------------------------++-- | Get all include pathes for a list of libraries to use.+libraryIncludePaths+  :: Maybe FilePath  -- ^ @libraries@ file (error reporting only).+  -> [AgdaLibFile]   -- ^ Libraries Agda knows about.+  -> [LibName]       -- ^ (Non-empty) library names to be resolved to (lists of) pathes.+  -> LibM [FilePath] -- ^ Resolved pathes (no duplicates).  Contains "." if @[LibName]@ does.+libraryIncludePaths overrideLibFile libs xs0 = mkLibM libs $ WriterT $ do     file <- getLibrariesFile overrideLibFile-    return $ runWriter ((dot ++) . incs <$> find file [] xs)+    return $ runWriter $ (dot ++) . incs <$> find file [] xs   where-    xs = map trim $ delete "." xs0-    trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace-    incs = nub . concatMap libIncludes-    dot = [ "." | elem "." xs0 ]+    (dots, xs) = List.partition (== libNameForCurrentDir) $ map trim xs0+    incs = List.nub . concatMap libIncludes+    dot = [ "." | not $ null dots ] -    find :: FilePath -> [LibName] -> [LibName] -> Writer [LibError] [AgdaLibFile]+    -- | Due to library dependencies, the work list may grow temporarily.+    find+      :: FilePath   -- ^ Only for error reporting.+      -> [LibName]  -- ^ Already resolved libraries.+      -> [LibName]  -- ^ Work list: libraries left to be resolved.+      -> Writer [LibError] [AgdaLibFile]     find _ _ [] = pure []     find file visited (x : xs)       | elem x visited = find file visited xs@@ -166,33 +303,73 @@           case findLib x libs of             [l] -> (l :) <$> find file (x : visited) (libDepends l ++ xs)             []  -> tell [LibNotFound file x] >> find file (x : visited) xs-            ls  -> tell [AmbiguousLib x ls] >> find file (x : visited) xs+            ls  -> tell [AmbiguousLib x ls]  >> find file (x : visited) xs +-- | @findLib x libs@ retrieves the matches for @x@ from list @libs@.+--+--   1. Case @x@ is unversioned:+--      If @x@ is contained in @libs@, then that match is returned.+--      Otherwise, the matches with the highest version number are returned.+--+--   2. Case @x@ is versioned: the matches with the highest version number are returned.+--+--   Examples, see 'findLib''.+-- findLib :: LibName -> [AgdaLibFile] -> [AgdaLibFile]-findLib x libs =+findLib = findLib' libName++-- | Generalized version of 'findLib' for testing.+--+--   > findLib' id "a"   [ "a-1", "a-02", "a-2", "b" ] == [ "a-02", "a-2" ]+--+--   > findLib' id "a"   [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a" ]+--   > findLib' id "a-1" [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a-1", "a-01" ]+--   > findLib' id "a-2" [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a-2" ]+--   > findLib' id "c"   [ "a", "a-1", "a-01", "a-2", "b" ] == []+--+findLib' :: (a -> LibName) -> LibName -> [a] -> [a]+findLib' libName x libs =   case ls of-    l : ls -> l : takeWhile ((== versionMeasure l) . versionMeasure) ls-    []     -> []+    -- Take the first and all exact matches (modulo leading zeros in version numbers).+    l : ls' -> l : takeWhile (((==) `on` versionMeasure) l) ls'+    []      -> []   where-    ls = sortBy (flip compare `on` versionMeasure) [ l | l <- libs, matchLib x l ]+    -- @LibName@s that match @x@, sorted descendingly.+    -- The unversioned LibName, if any, will come first.+    ls = List.sortBy (flip compare `on` versionMeasure) [ l | l <- libs, x `hasMatch` libName l ]      -- foo > foo-2.2 > foo-2.0.1 > foo-2 > foo-1.0     versionMeasure l = (rx, null vs, vs)       where-        (rx, vs) = versionView (libName l)+        VersionView rx vs = versionView (libName l) -matchLib :: LibName -> AgdaLibFile -> Bool-matchLib x l = rx == ry && (vx == vy || null vx)+-- | @x `hasMatch` y@ if @x@ and @y@ have the same @vvBase@ and+--   either @x@ has no version qualifier or the versions also match.+hasMatch :: LibName -> LibName -> Bool+hasMatch x y = rx == ry && (vx == vy || null vx)   where-    (rx, vx) = versionView x-    (ry, vy) = versionView $ libName l+    VersionView rx vx = versionView x+    VersionView ry vy = versionView y --- versionView "foo-1.2.3" == ("foo", [1, 2, 3])-versionView :: LibName -> (LibName, [Int])+-- | Split a library name into basename and a list of version numbers.+--+--   > versionView "foo-1.2.3"    == VersionView "foo" [1, 2, 3]+--   > versionView "foo-01.002.3" == VersionView "foo" [1, 2, 3]+--+--   Note that because of leading zeros, @versionView@ is not injective.+--   (@unVersionView . versionView@ would produce a normal form.)+versionView :: LibName -> VersionView versionView s =   case span (\ c -> isDigit c || c == '.') (reverse s) of-    (v, '-' : x) | valid vs -> (reverse x, reverse $ map (read . reverse) vs)+    (v, '-' : x) | valid vs ->+      VersionView (reverse x) $ reverse $ map (read . reverse) vs       where vs = chopWhen (== '.') v             valid [] = False             valid vs = not $ any null vs-    _ -> (s, [])+    _ -> VersionView s []++-- | Print a @VersionView@, inverse of @versionView@ (modulo leading zeros).+unVersionView :: VersionView -> LibName+unVersionView = \case+  VersionView base [] -> base+  VersionView base vs -> base ++ "-" ++ List.intercalate "." (map show vs)
src/full/Agda/Interaction/Library/Base.hs view
@@ -1,13 +1,26 @@+-- | Basic data types for library management.  module Agda.Interaction.Library.Base where +-- | A symbolic library name.+-- type LibName = String +-- | The special name @\".\"@ is used to indicated that the current directory+--   should count as a project root.+--+libNameForCurrentDir :: LibName+libNameForCurrentDir = "."++-- | Content of a @.agda-lib@ file.+-- data AgdaLibFile = AgdaLib-  { libName     :: LibName-  , libFile     :: FilePath-  , libIncludes :: [FilePath]-  , libDepends  :: [LibName]+  { libName     :: LibName     -- ^ The symbolic name of the library.+  , libFile     :: FilePath    -- ^ Path to this @.agda-lib@ file (not content of the file).+  , libIncludes :: [FilePath]  -- ^ Roots where to look for the modules of the library.+  , libDepends  :: [LibName]   -- ^ Dependencies.   }   deriving (Show) +emptyLibFile :: AgdaLibFile+emptyLibFile = AgdaLib { libName = "", libFile = "", libIncludes = [], libDepends = [] }
src/full/Agda/Interaction/Library/Parse.hs view
@@ -1,32 +1,67 @@-module Agda.Interaction.Library.Parse (parseLibFile, stripComments, splitCommas) where+-- | Parser for @.agda-lib@ files.+--+--   Example file:+--+--   @+--     name: Main+--     depend:+--       standard-library+--     include: .+--       src more-src+--   @+--+--   Should parse as:+--+--   @+--     AgdaLib+--       { libName     = "Main"+--       , libFile     = path_to_this_file+--       , libIncludes = [ "." , "src" , "more-src" ]+--       , libDepends  = [ "standard-library" ]+--       }+--   @+--+module Agda.Interaction.Library.Parse ( parseLibFile, splitCommas, trimLineComment, LineNumber ) where  import Control.Applicative import Control.Exception import Control.Monad import Data.Char-import Data.List+import qualified Data.List as List import System.FilePath  import Agda.Interaction.Library.Base-import Agda.Utils.Except ( MonadError(throwError) ) -catchIO :: IO a -> (IOException -> IO a) -> IO a-catchIO = catch+import Agda.Utils.Except ( MonadError(throwError) )+import Agda.Utils.IO ( catchIO )+import Agda.Utils.String ( ltrim ) +-- | Parser monad: Can throw @String@ error messages.+-- type P = Either String -type GenericFile = [(String, [String])]+-- | The config files we parse have the generic structure of a sequence+--   of @field : content@ entries.+type GenericFile = [GenericEntry] +data GenericEntry = GenericEntry+  { geHeader  :: String   -- ^ E.g. field name.    @trim@med.+  , geContent :: [String] -- ^ E.g. field content. @trim@med.+  }++-- | Library file field format format [sic!]. data Field = forall a. Field-  { fName     :: String-  , fOptional :: Bool-  , fParse    :: [String] -> P a-  , fSet      :: a -> AgdaLibFile -> AgdaLibFile }+  { fName     :: String                           -- ^ Name of the field.+  , fOptional :: Bool                             -- ^ Is it optional?+  , fParse    :: [String] -> P a                  -- ^ Content parser for this field.+  , fSet      :: a -> AgdaLibFile -> AgdaLibFile  -- ^ Sets parsed content in 'AgdaLibFile' structure.+  } --- | .agda-lib file format+-- | @.agda-lib@ file format with parsers and setters. agdaLibFields :: [Field] agdaLibFields =-  [ Field "name"    False parseName                      $ \ name l -> l { libName     = name }+  -- Andreas, 2017-08-23, issue #2708, field "name" is optional.+  [ Field "name"    True  parseName                      $ \ name l -> l { libName     = name }   , Field "include" True  (pure . concatMap words)       $ \ inc  l -> l { libIncludes = inc }   , Field "depend"  True  (pure . concatMap splitCommas) $ \ ds   l -> l { libDepends  = ds }   ]@@ -34,10 +69,11 @@     parseName [s] | [name] <- words s = pure name     parseName ls = throwError $ "Bad library name: '" ++ unwords ls ++ "'" -defaultLibFile :: AgdaLibFile-defaultLibFile = AgdaLib { libName = "", libFile = "", libIncludes = [], libDepends = [] }---- | .agda-lib parser+-- | Parse @.agda-lib@ file.+--+--   Sets 'libFile' name and turn mentioned include directories into absolute pathes+--   (provided the given 'FilePath' is absolute).+-- parseLibFile :: FilePath -> IO (P AgdaLibFile) parseLibFile file =   (fmap setPath . parseLib <$> readFile file) `catchIO` \e ->@@ -46,73 +82,133 @@     setPath lib = unrelativise (takeDirectory file) lib{ libFile = file }     unrelativise dir lib = lib { libIncludes = map (dir </>) (libIncludes lib) } +-- | Parse file contents. parseLib :: String -> P AgdaLibFile parseLib s = fromGeneric =<< parseGeneric s -findField :: String -> [Field] -> P Field-findField s fs =-  case [ f | f <- fs, fName f == s ] of-    f : _ -> return f-    []    -> throwError $ "Unknown field '" ++ s ++ "'"-+-- | Parse 'GenericFile' with 'agdaLibFields' descriptors. fromGeneric :: GenericFile -> P AgdaLibFile fromGeneric = fromGeneric' agdaLibFields +-- | Given a list of 'Field' descriptors (with their custom parsers),+--   parse a 'GenericFile' into the 'AgdaLibFile' structure.+--+--   Checks mandatory fields are present; no duplicate fields, no unknown fields. fromGeneric' :: [Field] -> GenericFile -> P AgdaLibFile fromGeneric' fields fs = do-  checkFields fields (map fst fs)-  foldM upd defaultLibFile fs+  checkFields fields (map geHeader fs)+  foldM upd emptyLibFile fs   where-    upd :: AgdaLibFile -> (String, [String]) -> P AgdaLibFile-    upd l (h, cs) = do+    upd :: AgdaLibFile -> GenericEntry -> P AgdaLibFile+    upd l (GenericEntry h cs) = do       Field{..} <- findField h fields       x         <- fParse cs       return $ fSet x l +-- | Ensure that there are no duplicate fields and no mandatory fields are missing. checkFields :: [Field] -> [String] -> P () checkFields fields fs = do   let mandatory = [ fName f | f <- fields, not $ fOptional f ]-      missing   = mandatory \\ fs-      dup       = fs \\ nub fs+      -- Missing fields.+      missing   = mandatory List.\\ fs+      -- Duplicate fields.+      dup       = fs List.\\ List.nub fs+      -- Plural s for error message.       s xs      = if length xs > 1 then "s" else ""-      list xs   = intercalate ", " [ "'" ++ f ++ "'" | f <- xs ]+      list xs   = List.intercalate ", " [ "'" ++ f ++ "'" | f <- xs ]   when (not $ null missing) $ throwError $ "Missing field" ++ s missing ++ " " ++ list missing   when (not $ null dup)     $ throwError $ "Duplicate field" ++ s dup ++ " " ++ list dup +-- | Find 'Field' with given 'fName', throw error if unknown.+findField :: String -> [Field] -> P Field+findField s fs = maybe err return $ List.find ((s ==) . fName) fs+  where err = throwError $ "Unknown field '" ++ s ++ "'"+ -- Generic file parser ---------------------------------------------------- +-- | Example:+--+-- @+--     parseGeneric "name:Main--BLA\ndepend:--BLA\n  standard-library--BLA\ninclude : . --BLA\n  src more-src   \n"+--     == Right [("name",["Main"]),("depend",["standard-library"]),("include",[".","src more-src"])]+-- @ parseGeneric :: String -> P GenericFile parseGeneric s =   groupLines =<< concat <$> mapM (uncurry parseLine) (zip [1..] $ map stripComments $ lines s) -data GenericLine = Header Int String | Content Int String+type LineNumber = Int++-- | Lines with line numbers.+data GenericLine+  = Header  LineNumber String+      -- ^ Header line, like a field name, e.g. "include :".  Cannot be indented.+      --   @String@ is 'trim'med.+  | Content LineNumber String+      -- ^ Other line.  Must be indented.+      --   @String@ is 'trim'med.   deriving (Show) -parseLine :: Int -> String -> P [GenericLine]+-- | Parse line into 'Header' and 'Content' components.+--+--   Precondition: line comments and trailing whitespace have been stripped away.+--+--   Example file:+--+--   @+--     name: Main+--     depend:+--       standard-library+--     include: .+--       src more-src+--   @+--+--   This should give+--+--   @+--     [ Header  1 "name"+--     , Content 1 "Main"+--     , Header  2 "depend"+--     , Content 3 "standard-library"+--     , Header  4 "include"+--     , Content 4 "."+--     , Content 5 "src more-src"+--     ]+--   @+parseLine :: LineNumber -> String -> P [GenericLine] parseLine _ "" = pure [] parseLine l s@(c:_)-  | isSpace c   = pure [Content l $ trim s]+    -- Indented lines are 'Content'.+  | isSpace c   = pure [Content l $ ltrim s]+    -- Non-indented lines are 'Header'.   | otherwise   =     case break (==':') s of+      -- Headers are single words followed by a colon.+      -- Anything after the colon that is not whitespace is 'Content'.       (h, ':' : r) ->         case words h of-          [h] -> pure $ [Header l h] ++ [Content l s | let s = trim r, not (null s)]+          [h] -> pure $ [Header l h] ++ [Content l r' | let r' = ltrim r, not (null r')]           []  -> throwError $ show l ++ ": Missing field name"           hs  -> throwError $ show l ++ ": Bad field name " ++ show h-      _ -> throwError $ show l ++ ": Missing ':' for field " ++ show (trim s)+      _ -> throwError $ show l ++ ": Missing ':' for field " ++ show (ltrim s) +-- | Collect 'Header' and subsequent 'Content's into 'GenericEntry'.+--+--   Tailing 'Content's?  That's an error.+-- groupLines :: [GenericLine] -> P GenericFile groupLines [] = pure [] groupLines (Content l c : _) = throwError $ show l ++ ": Missing field"-groupLines (Header _ h : ls) = ((h, [ c | Content _ c <- cs ]) :) <$> groupLines ls1+groupLines (Header _ h : ls) = (GenericEntry h [ c | Content _ c <- cs ] :) <$> groupLines ls1   where     (cs, ls1) = span isContent ls     isContent Content{} = True     isContent Header{} = False -trim :: String -> String-trim = stripComments . dropWhile isSpace+-- | Remove leading whitespace and line comment.+trimLineComment :: String -> String+trimLineComment = stripComments . ltrim +-- | Break a comma-separated string.  Result strings are @trim@med. splitCommas :: String -> [String] splitCommas s = words $ map (\c -> if c == ',' then ' ' else c) s @@ -124,4 +220,3 @@   where     cons c "" | isSpace c = ""     cons c s = c : s-
src/full/Agda/Interaction/MakeCase.hs view
@@ -36,6 +36,7 @@ import Agda.Interaction.Options import Agda.Interaction.BasicOps +import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List@@ -124,11 +125,14 @@          -- If s is a variable name in scope, get its de Bruijn index         -- via the type checker.-        VarName x -> do+        VarName x _ -> do           (v, _) <- getVarInfo x           case ignoreSharing v of             Var i [] -> done $ i - nlocals-            _        -> failNotVar+            _        -> typeError . GenericDocError =<< sep+              [ text $ "Cannot split on variable " ++ s ++ ", because it is bound to"+              , prettyTCM v+              ]          -- If s is not a name, compare it to the printed variable representation.         -- This fallback is to enable splitting on hidden variables.@@ -162,7 +166,7 @@  -- | Entry point for case splitting tactic. -makeCase :: InteractionId -> Range -> String -> TCM (QName, CaseContext , [A.Clause])+makeCase :: InteractionId -> Range -> String -> TCM (QName, CaseContext, [A.Clause]) makeCase hole rng s = withInteractionId hole $ do    -- Get function clause which contains the interaction point.@@ -181,8 +185,8 @@     [ text "splitting clause:"     , nest 2 $ vcat       [ text "f       =" <+> prettyTCM f-      , text "context =" <+> (prettyTCM =<< getContextTelescope)-      , text "tel     =" <+> prettyTCM tel+      , text "context =" <+> ((inTopContext . prettyTCM) =<< getContextTelescope)+      , text "tel     =" <+> (inTopContext . prettyTCM) tel       , text "perm    =" <+> text (show perm)       , text "ps      =" <+> text (show ps)       ]@@ -192,9 +196,21 @@    let vars = words s +  -- If the user just entered ".", do nothing.+  -- This will expand an ellipsis, if present.++  if concat vars == "." then do+    cl <- makeAbstractClause f rhs $ clauseToSplitClause clause+    return (f, casectxt, [cl])+   -- If we have no split variables, split on result. -  if null vars then do+  else if null vars then do+    -- Andreas, 2017-07-24, issue #2654:+    -- When we introduce projection patterns in an extended lambda,+    -- we need to print them postfix.+    let postProjInExtLam = applyWhen (isJust casectxt) $+          withPragmaOptions $ \ opt -> opt { optPostfixProjections = True }     (piTel, sc) <- fixTarget $ clauseToSplitClause clause     -- Andreas, 2015-05-05 If we introduced new function arguments     -- do not split on result.  This might be more what the user wants.@@ -207,7 +223,7 @@       -- if any of them is shown by the printer       imp <- optShowImplicit <$> pragmaOptions       return $ imp || any visible (telToList piTel)-    scs <- if newPats then return [sc] else do+    scs <- if newPats then return [sc] else postProjInExtLam $ do       res <- splitResult f sc       case res of         Nothing  -> typeError $ GenericError $ "Cannot split on result here"@@ -247,7 +263,7 @@   split :: QName -> [Nat] -> SplitClause -> TCM [(SplitClause, Bool)]   split f [] clause = return [(clause,False)]   split f (var : vars) clause = do-    z <- splitClauseWithAbsurd clause var+    z <- dontAssignMetas $ splitClauseWithAbsurd clause var     case z of       Left err          -> typeError $ SplitError err       Right (Left cl)   -> return [(cl,True)]@@ -265,7 +281,7 @@   -- In this case, we refuse to split, as this might lose the refinements.   checkClauseIsClean :: IPClause -> TCM ()   checkClauseIsClean ipCl = do-    sips <- Map.elems <$> use stSolvedInteractionPoints+    sips <- filter ipSolved . Map.elems <$> use stInteractionPoints     when (List.any ((== ipCl) . ipClause) sips) $       typeError $ GenericError $ "Cannot split as clause rhs has been refined.  Please reload" @@ -282,7 +298,7 @@       -- We could introduce extra consistency checks, like       -- if visible ai then __IMPOSSIBLE__ else       -- or passing the parsed name along and comparing it with @x@-      setOrigin UserWritten nx+      setOrigin CaseSplit nx     | otherwise = nx  -- | Make clause with no rhs (because of absurd match).@@ -292,9 +308,9 @@   reportSDoc "interaction.case" 10 $ vcat     [ text "Interaction.MakeCase.makeAbsurdClause: split clause:"     , nest 2 $ vcat-      [ text "context =" <+> (prettyTCM =<< getContextTelescope)-      , text "tel =" <+> prettyTCM tel-      , text "ps =" <+> text (show ps)+      [ text "context =" <+> do (inTopContext . prettyTCM) =<< getContextTelescope+      , text "tel     =" <+> do inTopContext $ prettyTCM tel+      , text "ps      =" <+> do inTopContext $ addContext tel $ prettyTCMPatternList ps -- P.sep <$> prettyTCMPatterns ps       ]     ]   withCurrentModule (qnameModule f) $ do@@ -302,7 +318,7 @@     -- Contract implicit record patterns before printing.     -- c <- translateRecordPatterns $ Clause noRange tel perm ps NoBody t False     -- Jesper, 2015-09-19 Don't contract, since we do on-demand splitting-    let c = Clause noRange tel ps Nothing t False+    let c = Clause noRange noRange tel ps Nothing t False Nothing     -- Normalise the dot patterns     ps <- addContext tel $ normalise $ namedClausePats c     reportSDoc "interaction.case" 60 $ text "normalized patterns: " <+> text (show ps)@@ -314,9 +330,9 @@ makeAbstractClause :: QName -> A.RHS -> SplitClause -> TCM A.Clause makeAbstractClause f rhs cl = do -  A.Clause lhs _ _ _ _ <- makeAbsurdClause f cl+  lhs <- A.clauseLHS <$> makeAbsurdClause f cl   reportSDoc "interaction.case" 60 $ text "reified lhs: " <+> text (show lhs)-  return $ A.Clause lhs [] rhs [] False+  return $ A.Clause lhs [] [] rhs [] False   -- let ii = InteractionId (-1)  -- Dummy interaction point since we never type check this.   --                              -- Can end up in verbose output though (#1842), hence not __IMPOSSIBLE__.   -- let info = A.emptyMetaInfo   -- metaNumber = Nothing in order to print as ?, not ?n
src/full/Agda/Interaction/Options.hs view
@@ -1,12 +1,17 @@ {-# LANGUAGE CPP #-} +#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE DeriveDataTypeable #-}+#endif+ module Agda.Interaction.Options     ( CommandLineOptions(..)     , IgnoreFlags(..)     , PragmaOptions(..)     , OptionsPragma-    , Flag, OptM, runOptM+    , Flag, OptM, runOptM, OptDescr(..), ArgDescr(..)     , Verbosity+    , WarningMode(..)     , checkOpts     , parseStandardOptions, parseStandardOptions'     , parsePragmaOptions@@ -32,14 +37,14 @@ import Control.Monad            ( (>=>), when ) import Control.Monad.Trans --- base-4.7 defines the Functor instances for OptDescr and ArgDescr-#if !(MIN_VERSION_base(4,7,0))-import Data.Orphans             ()-#endif- import Data.Either import Data.Maybe import Data.List                ( isSuffixOf , intercalate )++#if __GLASGOW_HASKELL__ <= 708+import Data.Typeable            ( Typeable )+#endif+ import System.Console.GetOpt    ( getOpt', usageInfo, ArgOrder(ReturnInOrder)                                 , OptDescr(..), ArgDescr(..)                                 )@@ -82,6 +87,26 @@ data IgnoreFlags = IgnoreFlags | RespectFlags   deriving Eq +-- Potentially turn harmless warnings into nothing, or errors+-- (does not apply to non-fatal errors)+data WarningMode = LeaveAlone | TurnIntoErrors | IgnoreAllWarnings+  deriving (Show, Eq+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )++warningModes :: [ (String, WarningMode) ]+warningModes =+  [ (defaultWarningMode, LeaveAlone)+  , ("ignore"          , IgnoreAllWarnings)+  , ("error"           , TurnIntoErrors)+  ]++-- Don't forget to update+--   doc/user-manual/tools/command-line-options.rst+-- if you make changes to the command-line options!+ data CommandLineOptions = Options   { optProgramName      :: String   , optInputFile        :: Maybe FilePath@@ -98,18 +123,6 @@   , optShowHelp         :: Bool   , optInteractive      :: Bool   , optGHCiInteraction  :: Bool-  , optCompileNoMain    :: Bool-  , optGhcCompile       :: Bool-  , optGhcCallGhc       :: Bool-  , optGhcFlags         :: [String]-  , optEpicCompile      :: Bool-  , optJSCompile        :: Bool-  , optUHCCompile       :: Bool-  , optUHCBin           :: Maybe FilePath-  , optUHCTextualCore   :: Bool-  , optUHCCallUHC       :: Bool-  , optUHCTraceLevel    :: Int-  , optUHCFlags         :: [String]   , optOptimSmashing    :: Bool   , optCompileDir       :: Maybe FilePath   -- ^ In the absence of a path the project root is used.@@ -118,15 +131,19 @@   , optGenerateHTML     :: Bool   , optDependencyGraph  :: Maybe FilePath   , optLaTeXDir         :: FilePath+  , optCountClusters    :: Bool+    -- ^ Count extended grapheme clusters rather than code points when+    -- generating LaTeX.   , optHTMLDir          :: FilePath   , optCSSFile          :: Maybe FilePath   , optIgnoreInterfaces :: Bool   , optForcing          :: Bool   , optPragmaOptions    :: PragmaOptions-  , optEpicFlags        :: [String]-  , optSafe             :: Bool   , optSharing          :: Bool   , optCaching          :: Bool+  , optOnlyScopeChecking :: Bool+    -- ^ Should the top-level module only be scope-checked, and not+    --   type-checked?   }   deriving Show @@ -160,8 +177,16 @@       -- ^ Should system generated projections 'ProjSystem' be printed       --   postfix (True) or prefix (False).   , optInstanceSearchDepth       :: Int+  , optSafe                      :: Bool+  , optWarningMode               :: WarningMode+  , optCompileNoMain             :: Bool   }-  deriving (Show,Eq)+  deriving ( Show+           , Eq+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  -- | The options from an @OPTIONS@ pragma. --@@ -195,18 +220,6 @@   , optShowHelp         = False   , optInteractive      = False   , optGHCiInteraction  = False-  , optCompileNoMain    = False-  , optGhcCompile       = False-  , optGhcCallGhc       = True-  , optGhcFlags         = []-  , optEpicCompile      = False-  , optJSCompile        = False-  , optUHCCompile       = False-  , optUHCBin           = Nothing-  , optUHCTextualCore   = False-  , optUHCCallUHC       = True-  , optUHCTraceLevel    = 0-  , optUHCFlags         = []   , optOptimSmashing    = True   , optCompileDir       = Nothing   , optGenerateVimFile  = False@@ -214,15 +227,15 @@   , optGenerateHTML     = False   , optDependencyGraph  = Nothing   , optLaTeXDir         = defaultLaTeXDir+  , optCountClusters    = False   , optHTMLDir          = defaultHTMLDir   , optCSSFile          = Nothing   , optIgnoreInterfaces = False   , optForcing          = True   , optPragmaOptions    = defaultPragmaOptions-  , optEpicFlags        = []-  , optSafe             = False   , optSharing          = False   , optCaching          = False+  , optOnlyScopeChecking = False   }  defaultPragmaOptions :: PragmaOptions@@ -251,6 +264,9 @@   , optRewriting                 = False   , optPostfixProjections        = False   , optInstanceSearchDepth       = 500+  , optSafe                      = False+  , optWarningMode               = fromJust $ lookup defaultWarningMode warningModes+  , optCompileNoMain             = False   }  -- | The default termination depth.@@ -268,6 +284,12 @@ defaultHTMLDir :: String defaultHTMLDir = "html" +-- | The default warning mode.++defaultWarningMode :: String+defaultWarningMode = "warn"++ type OptM = ExceptT String IO  runOptM :: OptM a -> IO (Either String a)@@ -283,37 +305,43 @@  checkOpts :: Flag CommandLineOptions checkOpts opts-  | not (atMostOne [optAllowUnsolved . p, \x -> optGhcCompile x]) = throwError-      "Unsolved meta variables are not allowed when compiling.\n"-  | optCompileNoMain opts && (not (optGhcCompile opts || optUHCCompile opts)) = throwError-      "--no-main only allowed in combination with --compile.\n"-  | not (atMostOne [optGHCiInteraction, isJust . optInputFile]) =+  | not (matches [optGHCiInteraction, isJust . optInputFile] <= 1) =       throwError "Choose at most one: input file or --interaction.\n"-  | not (atMostOne $ interactive ++ [\x -> optGhcCompile x, optEpicCompile, optJSCompile]) =-      throwError "Choose at most one: compilers/--interactive/--interaction.\n"-  | not (atMostOne $ interactive ++ [optGenerateHTML]) =-      throwError "Choose at most one: --html/--interactive/--interaction.\n"-  | not (atMostOne $ interactive ++ [isJust . optDependencyGraph]) =-      throwError "Choose at most one: --dependency-graph/--interactive/--interaction.\n"-  | not (atMostOne $ interactive ++ [optGenerateLaTeX]) =-      throwError "Choose at most one: --latex/--interactive/--interaction.\n"-  | (not . null . optEpicFlags $ opts)-      && not (optEpicCompile opts) =-      throwError "Cannot set Epic flags without using the Epic backend.\n"-  | (isJust $ optUHCBin opts)-      && not (optUHCCompile opts) =-      throwError "Cannot set uhc binary without using UHC backend.\n"-  | (optUHCTextualCore opts)-      && not (optUHCCompile opts) =-      throwError "Cannot set --uhc-textual-core without using UHC backend.\n"+  | or [ p opts && matches ps > 1 | (p, ps) <- exclusive ] =+      throwError exclusiveMessage   | otherwise = return opts   where-  atMostOne bs = length (filter ($ opts) bs) <= 1+  matches = length . filter ($ opts) -  p = optPragmaOptions+  atMostOne =+    [ optGenerateHTML+    , isJust . optDependencyGraph+    ] +++    map fst exclusive -  interactive = [optInteractive, optGHCiInteraction]+  exclusive =+    [ ( optOnlyScopeChecking+      , optSafe . optPragmaOptions :+        optGenerateVimFile :+        atMostOne+      )+    , ( optInteractive+      , optGenerateLaTeX : atMostOne+      )+    , ( optGHCiInteraction+      , optGenerateLaTeX : atMostOne+      )+    ] +  exclusiveMessage = unlines $+    [ "The options --interactive, --interaction and"+    , "--only-scope-checking cannot be combined with each other or"+    , "with --html or --dependency-graph. Furthermore"+    , "--interactive and --interaction cannot be combined with"+    , "--latex, and --only-scope-checking cannot be combined with"+    , "--safe or --vim."+    ]+ -- | Check for unsafe pramas. Gives a list of used unsafe flags.  unsafePragmaOptions :: PragmaOptions -> [String]@@ -341,7 +369,7 @@ helpFlag :: Flag CommandLineOptions helpFlag o = return $ o { optShowHelp = True } -safeFlag :: Flag CommandLineOptions+safeFlag :: Flag PragmaOptions safeFlag o = return $ o { optSafe = True }  sharingFlag :: Bool -> Flag CommandLineOptions@@ -380,6 +408,18 @@ latexFlag :: Flag CommandLineOptions latexFlag o = return $ o { optGenerateLaTeX = True } +onlyScopeCheckingFlag :: Flag CommandLineOptions+onlyScopeCheckingFlag o = return $ o { optOnlyScopeChecking = True }++countClustersFlag :: Flag CommandLineOptions+countClustersFlag o =+#ifdef COUNT_CLUSTERS+  return $ o { optCountClusters = True }+#else+  throwError+    "Cluster counting has not been enabled in this build of Agda."+#endif+ latexDirFlag :: FilePath -> Flag CommandLineOptions latexDirFlag d o = return $ o { optLaTeXDir = d } @@ -462,55 +502,12 @@                                                       { optAllowUnsolved = True }                                 } -compileFlagNoMain :: Flag CommandLineOptions+compileFlagNoMain :: Flag PragmaOptions compileFlagNoMain o = return $ o { optCompileNoMain = True } -compileGhcFlag :: Flag CommandLineOptions-compileGhcFlag o = return $ o { optGhcCompile = True }--ghcDontCallGhcFlag :: Flag CommandLineOptions-ghcDontCallGhcFlag o = return $ o { optGhcCallGhc = False }---- NOTE: Quadratic in number of flags.-ghcFlag :: String -> Flag CommandLineOptions-ghcFlag f o = return $ o { optGhcFlags = optGhcFlags o ++ [f] }---- The Epic backend has been removed. See Issue 1481.-compileEpicFlag :: Flag CommandLineOptions--- compileEpicFlag o = return $ o { optEpicCompile = True}-compileEpicFlag o = throwError "the Epic backend has been disabled"--compileJSFlag :: Flag CommandLineOptions-compileJSFlag  o = return $ o { optJSCompile = True }--compileUHCFlag :: Flag CommandLineOptions-compileUHCFlag o = return $ o { optUHCCompile = True}- compileDirFlag :: FilePath -> Flag CommandLineOptions compileDirFlag f o = return $ o { optCompileDir = Just f } --- NOTE: Quadratic in number of flags.--- The Epic backend has been removed. See Issue 1481.-epicFlagsFlag :: String -> Flag CommandLineOptions--- epicFlagsFlag s o = return $ o { optEpicFlags = optEpicFlags o ++ [s] }-epicFlagsFlag s o = throwError "the Epic backend has been disabled"--uhcBinFlag :: String -> Flag CommandLineOptions-uhcBinFlag s o = return $ o { optUHCBin  = Just s }--uhcTextualCoreFlag :: Flag CommandLineOptions-uhcTextualCoreFlag o = return $ o { optUHCTextualCore = True }--uhcDontCallUHCFlag :: Flag CommandLineOptions-uhcDontCallUHCFlag o = return $ o { optUHCCallUHC = False }--uhcTraceLevelFlag :: String -> Flag CommandLineOptions--- TODO proper parsing and error handling-uhcTraceLevelFlag i o = return $ o { optUHCTraceLevel = read i }--uhcFlagsFlag :: String -> Flag CommandLineOptions-uhcFlagsFlag s o = return $ o { optUHCFlags = optUHCFlags o ++ [s] }- htmlFlag :: Flag CommandLineOptions htmlFlag o = return $ o { optGenerateHTML = True } @@ -553,6 +550,15 @@         return (init ss, n)     usage = throwError "argument to verbose should be on the form x.y.z:N or N" +warningModeFlag :: String -> Flag PragmaOptions+warningModeFlag s o =+    case lookup s warningModes of+      Just m -> return $ o { optWarningMode = m }+      Nothing -> usage+  where+    usage = throwError $ "unknown warning mode (available: " +++                           intercalate ", " (map fst warningModes) ++ ")"+ terminationDepthFlag :: String -> Flag PragmaOptions terminationDepthFlag s o =     do k <- readM s `catchError` \_ -> usage@@ -573,35 +579,10 @@                     "start in interactive mode"     , Option []     ["interaction"] (NoArg ghciInteractionFlag)                     "for use with the Emacs mode"-    , Option ['c']  ["compile", "ghc"] (NoArg compileGhcFlag)-                    "compile program using the GHC backend"-    , Option []     ["ghc-dont-call-ghc"] (NoArg ghcDontCallGhcFlag) "Don't call ghc, just write the GHC Haskell files."-    , Option []     ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")-                    "give the flag GHC-FLAG to GHC when compiling using the GHC backend"-    , Option []     ["no-main"] (NoArg compileFlagNoMain)-                    "when compiling using the GHC backend or the UHC backend (experimental), do not treat the requested module as the main module of a program" -    -- The Epic backend has been removed. See Issue 1481.-    , Option []     ["epic"] (NoArg compileEpicFlag)-    --                "compile program using the Epic backend"-                    "the Epic backend has been removed"--    , Option []     ["js"] (NoArg compileJSFlag) "compile program using the JS backend"-    , Option []     ["uhc"] (NoArg compileUHCFlag) "compile program using the UHC backend"-    , Option []     ["uhc-bin"] (ReqArg uhcBinFlag "UHC") "The uhc binary to use when compiling with the UHC backend."-    , Option []     ["uhc-textual-core"] (NoArg uhcTextualCoreFlag) "Use textual core as intermediate representation instead of binary core."-    , Option []     ["uhc-dont-call-uhc"] (NoArg uhcDontCallUHCFlag) "Don't call uhc, just write the UHC Core files."-    , Option []     ["uhc-gen-trace"] (ReqArg uhcTraceLevelFlag "TRACE") "Add tracing code to generated executable."-    , Option []     ["uhc-flag"] (ReqArg uhcFlagsFlag "UHC-FLAG")-                    "give the flag UHC-FLAG to UHC when compiling using the UHC backend"     , Option []     ["compile-dir"] (ReqArg compileDirFlag "DIR")                     ("directory for compiler output (default: the project root)") -    -- The Epic backend has been removed. See Issue 1481.-    , Option []     ["epic-flag"] (ReqArg epicFlagsFlag "EPIC-FLAG")-    --                "give the flag EPIC-FLAG to Epic when compiling using Epic"-                    "the Epic backend has been removed"-     , Option []     ["vim"] (NoArg vimFlag)                     "generate Vim highlighting files"     , Option []     ["latex"] (NoArg latexFlag)@@ -609,15 +590,24 @@     , Option []     ["latex-dir"] (ReqArg latexDirFlag "DIR")                     ("directory in which LaTeX files are placed (default: " ++                      defaultLaTeXDir ++ ")")+    , Option []     ["count-clusters"] (NoArg countClustersFlag)+                    ("count extended grapheme clusters when " +++                     "generating LaTeX (note that this flag " +++#ifdef COUNT_CLUSTERS+                     "is not enabled in all builds of Agda)"+#else+                     "has not been enabled in this build of Agda)"+#endif+                    )     , Option []     ["html"] (NoArg htmlFlag)                     "generate HTML files with highlighted source code"-    , Option []     ["dependency-graph"] (ReqArg dependencyGraphFlag "FILE")-                    "generate a Dot file with a module dependency graph"     , Option []     ["html-dir"] (ReqArg htmlDirFlag "DIR")                     ("directory in which HTML files are placed (default: " ++                      defaultHTMLDir ++ ")")     , Option []     ["css"] (ReqArg cssFlag "URL")                     "the CSS file used by the HTML files (can be relative)"+    , Option []     ["dependency-graph"] (ReqArg dependencyGraphFlag "FILE")+                    "generate a Dot file with a module dependency graph"     , Option []     ["ignore-interfaces"] (NoArg ignoreInterfacesFlag)                     "ignore interface files (re-type check everything)"     , Option ['i']  ["include-path"] (ReqArg includeFlag "DIR")@@ -632,8 +622,6 @@                     "don't use default libraries"     , Option []     ["no-forcing"] (NoArg noForcingFlag)                     "disable the forcing optimisation"-    , Option []     ["safe"] (NoArg safeFlag)-                    "disable postulates, unsafe OPTION pragmas and primTrustMe"     , Option []     ["sharing"] (NoArg $ sharingFlag True)                     "enable sharing and call-by-need evaluation (experimental) (default: OFF)"     , Option []     ["no-sharing"] (NoArg $ sharingFlag False)@@ -642,6 +630,8 @@                     "enable caching of typechecking (experimental) (default: OFF)"     , Option []     ["no-caching"] (NoArg $ cachingFlag False)                     "disable caching of typechecking"+    , Option []     ["only-scope-checking"] (NoArg onlyScopeCheckingFlag)+                    "only scope-check the top-level module, do not type-check it"     ] ++ map (fmap lift) pragmaOptions   where   lift :: Flag PragmaOptions -> Flag CommandLineOptions@@ -660,7 +650,7 @@     -- , Option []          ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)     --              "enable proof irrelevance (experimental feature)"     , Option []     ["allow-unsolved-metas"] (NoArg allowUnsolvedFlag)-                    "allow unsolved meta variables (only needed in batch mode)"+                    "succeed and create interface file regardless of unsolved meta variables"     , Option []     ["no-positivity-check"] (NoArg noPositivityFlag)                     "do not warn about not strictly positive data types"     , Option []     ["no-termination-check"] (NoArg dontTerminationCheckFlag)@@ -698,17 +688,25 @@     , Option []     ["no-pattern-matching"] (NoArg noPatternMatchingFlag)                     "disable pattern matching completely"     , Option []     ["exact-split"] (NoArg exactSplitFlag)-                    "require all clauses in a definition by pattern matching to hold as definitional equalities (except those marked as CATCHALL)"+                    "require all clauses in a definition to hold as definitional equalities (unless marked CATCHALL)"     , Option []     ["no-exact-split"] (NoArg noExactSplitFlag)-                    "do not require all clauses in a definition by pattern matching to hold as definitional equalities (ignore those marked as CATCHALL)"+                    "do not require all clauses in a definition to hold as definitional equalities (default)"     , Option []     ["no-eta-equality"] (NoArg noEtaFlag)-                    "disable eta rules for records"+                    "default records to no-eta-equality"     , Option []     ["rewriting"] (NoArg rewritingFlag)                     "enable declaration and use of REWRITE rules"     , Option []     ["postfix-projections"] (NoArg postfixProjectionsFlag)                     "make postfix projection notation the default"     , Option []     ["instance-search-depth"] (ReqArg instanceDepthFlag "N")                     "set instance search depth to N (default: 500)"+    , Option []     ["safe"] (NoArg safeFlag)+                    "disable postulates, unsafe OPTION pragmas and primTrustMe"+    , Option ['W']  ["warning"] (ReqArg warningModeFlag "MODE")+                    ("set warning mode to MODE (available: "+                       ++ intercalate ", " (map fst warningModes)+                       ++ ". Default: " ++  defaultWarningMode ++ ")")+    , Option []     ["no-main"] (NoArg compileFlagNoMain)+                    "do not treat the requested module as the main module of a program when compiling"     ]  -- | Used for printing usage info.
src/full/Agda/Interaction/Options/Lenses.hs view
@@ -105,9 +105,13 @@   setSafeMode     = mapSafeMode . const   mapSafeMode f a = setSafeMode (f $ getSafeMode a) a -instance LensSafeMode CommandLineOptions where+instance LensSafeMode PragmaOptions where   getSafeMode = optSafe   setSafeMode is opts = opts { optSafe = is }++instance LensSafeMode CommandLineOptions where+  getSafeMode = getSafeMode . getPragmaOptions+  mapSafeMode = mapPragmaOptions . mapSafeMode  instance LensSafeMode PersistentTCState where   getSafeMode = getSafeMode . getCommandLineOptions
src/full/Agda/Interaction/Response.hs view
@@ -33,7 +33,7 @@ --   so the user can have timely response even during long computations.  data Response-    = Resp_HighlightingInfo HighlightingInfo ModuleToSource+    = Resp_HighlightingInfo HighlightingInfo HighlightingMethod ModuleToSource     | Resp_Status Status     | Resp_JumpToError FilePath Int32     | Resp_InteractionPoints [InteractionId]@@ -46,6 +46,9 @@       -- ^ The integer is the message's debug level.     | Resp_ClearRunningInfo     | Resp_ClearHighlighting+    | Resp_DoneAborting+      -- ^ A command sent when an abort command has completed+      -- successfully.  -- | There are two kinds of \"make case\" commands. @@ -54,7 +57,8 @@ -- | Info to display at the end of an interactive command  data DisplayInfo-    = Info_CompilationOk+    = Info_CompilationOk String String+      -- ^ Strings are the warnings and the (non-fatal) errors     | Info_Constraints String     | Info_AllGoalsWarnings String String String         -- ^ Strings are the goals, the warnings and the (non-fatal) errors@@ -119,7 +123,7 @@ --      closure of the 'InteractionOutputCallback' function. --      (suitable for intra-process communication). -type InteractionOutputCallback = Response -> TCM ()+type InteractionOutputCallback = Response -> IO ()  -- | The default 'InteractionOutputCallback' function prints certain -- things to stdout (other things generate internal errors).@@ -139,3 +143,4 @@                                  hFlush stdout   Resp_ClearRunningInfo {}  -> __IMPOSSIBLE__   Resp_ClearHighlighting {} -> __IMPOSSIBLE__+  Resp_DoneAborting {}      -> __IMPOSSIBLE__
src/full/Agda/Interaction/SearchAbout.hs view
@@ -2,64 +2,65 @@  import Control.Applicative import Control.Monad-import Control.Monad.State+ import qualified Data.Map as Map+import qualified Data.Set as Set import Data.List (isInfixOf) import Data.Either (partitionEithers)  import Agda.Syntax.Position (Range) import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad-import Agda.TypeChecking.Monad-import qualified Agda.Syntax.Common as Com-import Agda.Syntax.Internal-import Agda.Interaction.BasicOps (normalForm)-import qualified Agda.Syntax.Translation.ConcreteToAbstract as TCA-import qualified Agda.Syntax.Abstract as A+import Agda.TypeChecking.Monad.Signature+import Agda.TypeChecking.Monad.Env+import Agda.Syntax.Internal.Names (namesIn)+import Agda.Interaction.BasicOps (normalForm, Rewrite, parseName)+ import qualified Agda.Syntax.Concrete as C+import qualified Agda.Syntax.Abstract as A+import qualified Agda.Syntax.Internal as I -import Agda.Interaction.BasicOps-import Debug.Trace+import Agda.Utils.Pretty ( prettyShow ) -collectNamesInType :: Type -> [A.QName]-collectNamesInType = collectNamesInTerm . unEl+findMentions :: Rewrite -> Range -> String -> ScopeM [(C.Name, I.Type)]+findMentions norm rg nm = do+  -- We start by dealing with the user's input -collectNamesInTerm :: Term -> [A.QName]-collectNamesInTerm (Var _ els)  = collectNamesInElims els-collectNamesInTerm (Lam ty t)   = collectNamesInTerm $ unAbs t-collectNamesInTerm (Def n els)  = n : collectNamesInElims els-collectNamesInTerm (Con n _ args) = conName n : collectNamesInArgs args-collectNamesInTerm (Pi dom cod) = collectNamesInType (Com.unDom dom) ++ collectNamesInType (unAbs cod)-collectNamesInTerm (Shared t)   = collectNamesInTerm $ ignoreSharing $ derefPtr t-collectNamesInTerm _            = []+  -- The users passes in `nm`, a list of identifiers and strings+  -- to match against definitions in scope. `findMentions` will+  -- select all of the definitions such that:+  -- - all of the specified identifiers appear in their type+  --   (which has been normalised according to `norm`)+  -- - all of the specified strings are substrings of their name -collectNamesInElims :: Elims -> [A.QName]-collectNamesInElims = concatMap collectNamesInElim+  -- We separate the strings from the names by a rough analysis+  -- and then parse and resolve the names in the current scope+  let (userSubStrings, nms) = partitionEithers $ isString <$> words nm+  rnms <- mapM (parseName rg >=> resolveName) nms+  let userIdentifiers = fmap (fmap anameName . anames) rnms -collectNamesInElim :: Elim -> [A.QName]-collectNamesInElim (Apply a) = collectNamesInTerm $ Com.unArg a-collectNamesInElim (Proj _ n)= [n]+  -- We then collect all the things in scope, by name.+  -- Issue #2381: We explicitly filter out pattern synonyms because they+  -- don't have a type. Looking it up makes Agda panic!+  snms <- fmap (nsNames . allThingsInScope) $ currentModule >>= getNamedScope+  let namesInScope = filter ((PatternSynName /=) . anameKind . snd)+                   $ concatMap (uncurry $ map . (,)) $ Map.toList snms -collectNamesInArgs :: Args -> [A.QName]-collectNamesInArgs = concatMap (collectNamesInTerm . Com.unArg)+  -- Once we have the user-provided names and the names of all the+  -- thing in scope we can start the search: for each name in scope,+  -- we grab its type, normalise it according to `norm` and collect+  -- the identifiers in it. We then check whether it meets the user's+  -- criteria.+  ress <- forM namesInScope $ \ (x, n) -> do+    t <- normalForm norm =<< typeOfConst (anameName n)+    let namesInT = Set.toList $ namesIn t+    let defName  = prettyShow x+    return $ do+      guard $ all (`isInfixOf` defName)   userSubStrings+      guard $ all (any (`elem` namesInT)) userIdentifiers+      return (x, t)+  return $ concat ress -findMentions :: Rewrite -> Range -> String -> TCM [(C.Name, Type)]-findMentions norm rg nm = do-  let (strs, nms) = partitionEithers $ fmap isString $ words nm-  cnms <- mapM (parseName rg) nms-  rnms <- mapM resolveName cnms-  let defs = fmap (fmap anameName . anames) rnms-  scp  <- getNamedScope =<< currentModule-  let names = nsNames $ allThingsInScope scp-  concat <$> mapM (\ (x, n) -> do-              t <- normalForm norm =<< typeOfConst (anameName n)-              let defName  = show x-              let namesInT = collectNamesInType t-              return $ do-                guard (all (`isInfixOf` defName) strs)-                guard (all (any (`elem` namesInT)) defs)-                return (x, t)-           ) (concatMap (\ (x, ns) -> map ((,) x) ns) $ Map.toList names)   where     isString str       |  not (null str)@@ -70,5 +71,4 @@     anames (DefinedName _ an)     = [an]     anames (FieldName     ans)    = ans     anames (ConstructorName ans)  = ans-    anames (PatternSynResName an) = [an]     anames _                      = []
src/full/Agda/Main.hs view
@@ -11,6 +11,7 @@  import System.Environment import System.Exit+import System.Console.GetOpt  import Agda.Syntax.Position (Range) import Agda.Syntax.Concrete.Pretty ()@@ -29,14 +30,15 @@ import Agda.TypeChecking.Monad import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TypeChecking.Errors+import Agda.TypeChecking.Warnings import Agda.TypeChecking.Pretty  import Agda.Compiler.Common (IsMain (..))-import Agda.Compiler.MAlonzo.Compiler as MAlonzo-import Agda.Compiler.Epic.Compiler as Epic-import Agda.Compiler.JS.Compiler as JS-import Agda.Compiler.UHC.Compiler as UHC+import Agda.Compiler.MAlonzo.Compiler (ghcBackend)+import Agda.Compiler.JS.Compiler (jsBackend) +import Agda.Compiler.Backend+ import Agda.Utils.Lens import Agda.Utils.Monad import Agda.Utils.String@@ -46,78 +48,79 @@ import qualified Agda.Utils.Benchmark as UtilsBench import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.Impossible+import Agda.Utils.Lens  #include "undefined.h" +builtinBackends :: [Backend]+builtinBackends = [ ghcBackend, jsBackend ]+ -- | The main function-runAgda :: TCM ()-runAgda = do+runAgda :: [Backend] -> IO ()+runAgda backends = runAgda' $ builtinBackends ++ backends++runAgda' :: [Backend] -> IO ()+runAgda' backends = runTCMPrettyErrors $ do   progName <- liftIO getProgName   argv     <- liftIO getArgs-  opts     <- liftIO $ runOptM $ parseStandardOptions argv+  opts     <- liftIO $ runOptM $ parseBackendOptions backends argv   case opts of-    Left err -> liftIO $ optionError err-    Right opts -> runAgdaWithOptions generateHTML progName opts+    Left  err        -> liftIO $ optionError err+    Right (bs, opts) -> do+      stBackends .= bs+      let enabled (Backend b) = isEnabled b (options b)+          bs' = filter enabled bs+      () <$ runAgdaWithOptions backends generateHTML (interaction bs') progName opts+      where+        interaction bs = backendInteraction bs $ defaultInteraction opts +defaultInteraction :: CommandLineOptions -> TCM (Maybe Interface) -> TCM ()+defaultInteraction opts+  | i         = runIM . interactionLoop+  | ghci      = mimicGHCi . (failIfInt =<<)+  | otherwise = (() <$)+  where+    i    = optInteractive     opts+    ghci = optGHCiInteraction opts++    failIfInt Nothing  = return ()+    failIfInt (Just _) = __IMPOSSIBLE__++ -- | Run Agda with parsed command line options and with a custom HTML generator runAgdaWithOptions-  :: TCM ()             -- ^ HTML generating action+  :: [Backend]          -- ^ Backends only for printing usage and version information+  -> TCM ()             -- ^ HTML generating action+  -> (TCM (Maybe Interface) -> TCM a) -- ^ Backend interaction   -> String             -- ^ program name   -> CommandLineOptions -- ^ parsed command line options-  -> TCM ()-runAgdaWithOptions generateHTML progName opts-      | optShowHelp opts    = liftIO printUsage-      | optShowVersion opts = liftIO printVersion+  -> TCM (Maybe a)+runAgdaWithOptions backends generateHTML interaction progName opts+      | optShowHelp opts    = Nothing <$ liftIO (printUsage backends)+      | optShowVersion opts = Nothing <$ liftIO (printVersion backends)       | isNothing (optInputFile opts)           && not (optInteractive opts)           && not (optGHCiInteraction opts)-                            = liftIO printUsage+                            = Nothing <$ liftIO (printUsage backends)       | otherwise           = do           -- Main function.           -- Bill everything to root of Benchmark trie.-          UtilsBench.setBenchmarking True+          UtilsBench.setBenchmarking UtilsBench.BenchmarkOn             -- Andreas, Nisse, 2016-10-11 AIM XXIV             -- Turn benchmarking on provisionally, otherwise we lose track of time spent             -- on e.g. LaTeX-code generation.             -- Benchmarking might be turned off later by setCommandlineOptions            Bench.billTo [] checkFile `finally_` do+             -- Print benchmarks.             Bench.print              -- Print accumulated statistics.             printStatistics 20 Nothing =<< use lensAccumStatistics   where-    checkFile :: TCM ()-    checkFile = do-      let i             = optInteractive     opts-          ghci          = optGHCiInteraction opts-          ghc           = optGhcCompile      opts-          compileNoMain = optCompileNoMain   opts-          epic          = optEpicCompile     opts-          js            = optJSCompile       opts-          uhc           = optUHCCompile      opts-      when i $ liftIO $ putStr splashScreen-      let failIfNoInt (Just i) = return i-          -- The allowed combinations of command-line-          -- options should rule out Nothing here.-          failIfNoInt Nothing  = __IMPOSSIBLE__--          failIfInt Nothing  = return ()-          failIfInt (Just _) = __IMPOSSIBLE__--          interaction :: TCM (Maybe Interface) -> TCM ()-          interaction | i             = runIM . interactionLoop-                      | ghci          = mimicGHCi . (failIfInt =<<)-                      | ghc && compileNoMain-                                      = (MAlonzo.compilerMain NotMain =<<) . (failIfNoInt =<<)-                      | ghc           = (MAlonzo.compilerMain IsMain =<<) . (failIfNoInt =<<)-                      | epic          = (Epic.compilerMain    =<<) . (failIfNoInt =<<)-                      | js            = (JS.compilerMain      =<<) . (failIfNoInt =<<)-                      | uhc && compileNoMain-                                      = (UHC.compilerMain NotMain =<<) . (failIfNoInt =<<)-                      | uhc           = (UHC.compilerMain IsMain =<<)  . (failIfNoInt =<<)-                      | otherwise     = (() <$)+    checkFile = Just <$> do+      when (optInteractive opts) $ liftIO $ putStr splashScreen       interaction $ do         setCommandLineOptions opts         hasFile <- hasInputFile@@ -127,17 +130,23 @@         -- thus, I am removing it.         -- resetState         if not hasFile then return Nothing else do+          let mode = if optOnlyScopeChecking opts+                     then Imp.ScopeCheck+                     else Imp.TypeCheck+           file    <- getInputFile-          (i, mw) <- Imp.typeCheckMain file+          (i, mw) <- Imp.typeCheckMain file mode -          -- An interface is only generated if NoWarnings.-          result <- case mw of-            SomeWarnings ws -> do+          -- An interface is only generated if the mode is+          -- Imp.TypeCheck and there are no warnings.+          result <- case (mode, mw) of+            (Imp.ScopeCheck, _)  -> return Nothing+            (_, NoWarnings)      -> return $ Just i+            (_, SomeWarnings ws) -> do               ws' <- applyFlagsToTCWarnings RespectFlags ws               case ws' of                 []   -> return Nothing                 cuws -> tcWarningsToError cuws-            NoWarnings      -> return $ Just i            reportSDoc "main" 50 $ pretty i @@ -150,31 +159,52 @@           whenM (optGenerateLaTeX <$> commandLineOptions) $             LaTeX.generateLaTeX i +          -- Print accumulated warnings+          ws <- (snd . classifyWarnings) <$> Imp.getAllWarnings' AllWarnings RespectFlags+          unless (null ws) $ do+            let banner = text $ "\n" ++ delimiter "All done; warnings encountered"+            reportSDoc "warning" 1 $+              vcat $ punctuate (text "\n") $ banner : (prettyTCM <$> ws)+           return result ++ -- | Print usage information.-printUsage :: IO ()-printUsage = do+printUsage :: [Backend] -> IO ()+printUsage backends = do   progName <- getProgName   putStr $ usage standardOptions_ progName+  mapM_ (putStr . backendUsage) backends +backendUsage :: Backend -> String+backendUsage (Backend b) =+  usageInfo ("\n" ++ backendName b ++ " backend options") $+    map (fmap $ const ()) (commandLineFlags b)+ -- | Print version information.-printVersion :: IO ()-printVersion = do+printVersion :: [Backend] -> IO ()+printVersion backends = do   putStrLn $ "Agda version " ++ versionWithCommitInfo+  mapM_ putStrLn+    [ "  - " ++ name ++ " backend version " ++ ver+    | Backend Backend'{ backendName = name, backendVersion = Just ver } <- backends ]  -- | What to do for bad options. optionError :: String -> IO () optionError err = do-  putStrLn $ "Error: " ++ err ++ "\nRun 'agda --help' for help on command line options."+  prog <- getProgName+  putStrLn $ "Error: " ++ err ++ "\nRun '" ++ prog ++ " --help' for help on command line options."   exitFailure  -- | Run a TCM action in IO; catch and pretty print errors. runTCMPrettyErrors :: TCM () -> IO () runTCMPrettyErrors tcm = do     r <- runTCMTop $ tcm `catchError` \err -> do-      s <- prettyError err-      unless (null s) (liftIO $ putStrLn s)+      s2s <- prettyTCWarnings' =<< Imp.errorWarningsOfTCErr err+      s1  <- prettyError err+      let ss = filter (not . null) $ s2s ++ [s1]+      unless (null s1) (liftIO $ putStr $ unlines ss)       throwError err     case r of       Right _ -> exitSuccess@@ -185,4 +215,4 @@  -- | Main main :: IO ()-main = runTCMPrettyErrors runAgda+main = runAgda []
src/full/Agda/Syntax/Abstract.hs view
@@ -22,9 +22,11 @@ import Data.Sequence (Seq, (<|), (><)) import qualified Data.Sequence as Seq import Data.Traversable-import Data.Typeable (Typeable) import Data.Void +import Data.Data (Data)+import Data.Typeable (Typeable)+ import Agda.Syntax.Concrete.Name (NumHoles(..)) import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA) import qualified Agda.Syntax.Concrete as C@@ -71,9 +73,9 @@   | Dot ExprInfo Expr                  -- ^ @.e@, for postfix projection.   | App  ExprInfo Expr (NamedArg Expr) -- ^ Ordinary (binary) application.   | WithApp ExprInfo Expr [Expr]       -- ^ With application.-  | Lam  ExprInfo LamBinding Expr      -- ^ @λ bs → e@.-  | AbsurdLam ExprInfo Hiding          -- ^ @λ()@ or @λ{}@.-  | ExtendedLam ExprInfo DefInfo QName [Clause]+  | Lam  LamInfo LamBinding Expr      -- ^ @λ bs → e@.+  | AbsurdLam LamInfo Hiding          -- ^ @λ()@ or @λ{}@.+  | ExtendedLam LamInfo DefInfo QName [Clause]   | Pi   ExprInfo Telescope Expr       -- ^ Dependent function space @Γ → A@.   | Fun  ExprInfo (Arg Expr) Expr      -- ^ Non-dependent function space.   | Set  ExprInfo Integer              -- ^ @Set@, @Set1@, @Set2@, ...@@ -91,7 +93,7 @@   | Tactic ExprInfo Expr [NamedArg Expr] [NamedArg Expr]                                        -- ^ @tactic e x1 .. xn | y1 | .. | yn@   | DontCare Expr                      -- ^ For printing @DontCare@ from @Syntax.Internal@.-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  -- | Record field assignment @f = e@. type Assign  = FieldAssignment' Expr@@ -104,7 +106,7 @@   = FunSig    -- ^ A function signature.   | NoFunSig  -- ^ Not a function signature, i.e., a postulate (in user input)               --   or another (e.g. data/record) type signature (internally).-  deriving (Typeable, Eq, Ord, Show)+  deriving (Typeable, Data, Eq, Ord, Show)  -- | Renaming (generic). type Ren a = [(a, a)]@@ -112,7 +114,7 @@ data ScopeCopyInfo = ScopeCopyInfo   { renModules :: Ren ModuleName   , renNames   :: Ren QName }-  deriving (Eq, Show)+  deriving (Eq, Show, Typeable, Data)  initCopyInfo :: ScopeCopyInfo initCopyInfo = ScopeCopyInfo@@ -146,19 +148,19 @@     -- ^ only retained for highlighting purposes   | FunDef     DefInfo QName Delayed [Clause] -- ^ sequence of function clauses   | DataSig    DefInfo QName Telescope Expr -- ^ lone data signature-      -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.   | DataDef    DefInfo QName [LamBinding] [Constructor]-      -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.+      -- ^ the 'LamBinding's are 'DomainFree' and bind the parameters of the datatype.   | RecSig     DefInfo QName Telescope Expr -- ^ lone record signature   | RecDef     DefInfo QName (Maybe (Ranged Induction)) (Maybe Bool) (Maybe QName) [LamBinding] Expr [Declaration]-      -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,+      -- ^ The 'LamBinding's are 'DomainFree' and bind the parameters of the datatype.+      --   The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,       --   and the optional name is the constructor's name.   | PatternSynDef QName [Arg Name] (Pattern' Void)       -- ^ Only for highlighting purposes   | UnquoteDecl MutualInfo [DefInfo] [QName] Expr   | UnquoteDef  [DefInfo] [QName] Expr   | ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  class GetDefInfo a where   getDefInfo :: a -> Maybe DefInfo@@ -184,7 +186,7 @@       -- ^ @tel. M args@:  applies @M@ to @args@ and abstracts @tel@.     | RecordModuleIFS ModuleName       -- ^ @M {{...}}@-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  data Pragma   = OptionsPragma [String]@@ -193,19 +195,22 @@     -- ^ Builtins that do not come with a definition,     --   but declare a name for an Agda concept.   | RewritePragma QName+  | CompilePragma String QName String   | CompiledPragma QName String   | CompiledExportPragma QName String-  | CompiledDeclareDataPragma QName String   | CompiledTypePragma QName String   | CompiledDataPragma QName String [String]-  | CompiledEpicPragma QName String   | CompiledJSPragma QName String   | CompiledUHCPragma QName String   | CompiledDataUHCPragma QName String [String]   | StaticPragma QName+  | EtaPragma QName+    -- ^ For coinductive records, use pragma instead of regular+    --   @eta-equality@ definition (as it is might make Agda loop).+  | InjectivePragma QName   | InlinePragma QName   | DisplayPragma QName [NamedArg Pattern] Expr-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  -- | Bindings that are valid in a @let@. data LetBinding@@ -221,7 +226,7 @@   | LetDeclaredVariable Name     -- ^ Only used for highlighting. Refers to the first occurrence of     -- @x@ in @let x : A; x = e@.-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  -- | Only 'Axiom's. type TypeSignature  = Declaration@@ -232,12 +237,12 @@ data LamBinding   = DomainFree ArgInfo Name   -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@   | DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@ or @(let Ds)@-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  -- | Typed bindings with hiding information. data TypedBindings = TypedBindings Range (Arg TypedBinding)             -- ^ . @(xs : e)@ or @{xs : e}@-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  -- | A typed binding.  Appears in dependent function spaces, typed lambdas, and --   telescopes.  It might be tempting to simplify this to only bind a single@@ -258,16 +263,20 @@     -- ^ As in telescope @(x y z : A)@ or type @(x y z : A) -> B@.   | TLet Range [LetBinding]     -- ^ E.g. @(let x = e)@ or @(let open M)@.-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  type Telescope  = [TypedBindings]  data NamedDotPattern = NamedDot Name I.Term I.Type-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show) -instance Eq NamedDotPattern where-  _ == _ = True -- These are not relevant for caching purposes+data StrippedDotPattern = StrippedDot Expr I.Term I.Type+  deriving (Typeable, Data, Show) +-- These are not relevant for caching purposes+instance Eq NamedDotPattern    where _ == _ = True+instance Eq StrippedDotPattern where _ == _ = True+ -- | We could throw away @where@ clauses at this point and translate them to --   @let@. It's not obvious how to remember that the @let@ was really a --   @where@ clause though, so for the time being we keep it here.@@ -276,10 +285,14 @@   , clauseNamedDots  :: [NamedDotPattern]       -- ^ Only in with-clauses where we inherit some already checked dot patterns from the parent.       --   These live in the context of the parent clause left-hand side.+  , clauseStrippedDots :: [StrippedDotPattern]+      -- ^ In with-clauses where a dot pattern from the parent clause is+      --   repeated in the with-clause. In this case it's not actually part of+      --   the clause, but it still needs to be checked (Issue 142).   , clauseRHS        :: RHS   , clauseWhereDecls :: [Declaration]   , clauseCatchall   :: Bool-  } deriving (Typeable, Show, Functor, Foldable, Traversable, Eq)+  } deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)  type Clause = Clause' LHS type SpineClause = Clause' SpineLHS@@ -305,7 +318,7 @@       -- ^ The where clauses are attached to the @RewriteRHS@ by       ---  the scope checker (instead of to the clause).     }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  instance Eq RHS where   RHS e _          == RHS e' _            = e == e'@@ -323,7 +336,7 @@   , spLhsPats     :: [NamedArg Pattern]  -- ^ Function parameters (patterns).   , spLhsWithPats :: [Pattern]           -- ^ @with@ patterns (after @|@).   }-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)   instance Eq LHS where@@ -336,7 +349,7 @@   , lhsCore     :: LHSCore               -- ^ Copatterns.   , lhsWithPats :: [Pattern]             -- ^ @with@ patterns (after @|@).   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  -- | The lhs minus @with@-patterns in projection-application view. --   Parameterised over the type @e@ of dot patterns.@@ -353,7 +366,7 @@              , lhsPatsRight  :: [NamedArg (Pattern' e)]                -- ^ Further applied to patterns.              }-  deriving (Typeable, Show, Functor, Foldable, Traversable, Eq)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)  type LHSCore = LHSCore' Expr @@ -444,11 +457,14 @@     --   Or generated at type checking for implicit arguments.   | AsP PatInfo Name (Pattern' e)   | DotP PatInfo Origin e+    -- ^ Dot pattern @.e@: the Origin keeps track whether this dot pattern was+    --   written by the user or inserted by the system (e.g. while expanding+    --   the ellipsis in a with clause).   | AbsurdP PatInfo   | LitP Literal   | PatternSynP PatInfo QName [NamedArg (Pattern' e)]   | RecP PatInfo [FieldAssignment' (Pattern' e)]-  deriving (Typeable, Show, Functor, Foldable, Traversable, Eq)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)  type Pattern  = Pattern' Expr type Patterns = [NamedArg Pattern]@@ -646,7 +662,7 @@     getRange (LHSProj d lhscore ps) = d `fuseRange` lhscore `fuseRange` ps  instance HasRange a => HasRange (Clause' a) where-    getRange (Clause lhs _ rhs ds catchall) = getRange (lhs,rhs,ds)+    getRange (Clause lhs _ _ rhs ds catchall) = getRange (lhs, rhs, ds)  instance HasRange RHS where     getRange AbsurdRHS                = noRange@@ -770,11 +786,14 @@   killRange (LHSProj a b c) = killRange3 LHSProj a b c  instance KillRange a => KillRange (Clause' a) where-  killRange (Clause lhs dots rhs ds catchall) = killRange5 Clause lhs dots rhs ds catchall+  killRange (Clause lhs dots sdots rhs ds catchall) = killRange6 Clause lhs dots sdots rhs ds catchall  instance KillRange NamedDotPattern where   killRange (NamedDot a b c) = killRange3 NamedDot a b c +instance KillRange StrippedDotPattern where+  killRange (StrippedDot a b c) = killRange3 StrippedDot a b c+ instance KillRange RHS where   killRange AbsurdRHS                = AbsurdRHS   killRange (RHS e c)                = killRange2 RHS e c@@ -856,7 +875,7 @@   allNames (ScopedDecl _ decls)       = allNames decls  instance AllNames Clause where-  allNames (Clause _ _ rhs decls _) = allNames rhs >< allNames decls+  allNames cl = allNames (clauseRHS cl, clauseWhereDecls cl)  instance AllNames RHS where   allNames (RHS e _)                 = allNames e@@ -990,7 +1009,7 @@  lambdaLiftExpr :: [Name] -> Expr -> Expr lambdaLiftExpr []     e = e-lambdaLiftExpr (n:ns) e = Lam (ExprRange noRange) (DomainFree defaultArgInfo n) $+lambdaLiftExpr (n:ns) e = Lam defaultLamInfo_ (DomainFree defaultArgInfo n) $                                      lambdaLiftExpr ns e  substPattern :: [(Name, Pattern)] -> Pattern -> Pattern@@ -1090,19 +1109,19 @@ insertImplicitPatSynArgs wild r ns as = matchArgs r ns as   where     matchNextArg r n as@(~(a : as'))-      | matchNext n as           = return (namedArg a, as')-      | getHiding n == NotHidden = Nothing-      | otherwise                = return (wild r, as)+      | matchNext n as = return (namedArg a, as')+      | visible n      = Nothing+      | otherwise      = return (wild r, as)      matchNext _ [] = False-    matchNext n (a:as) = getHiding n == getHiding a && matchName+    matchNext n (a:as) = sameHiding n a && matchName       where         x = unranged $ C.nameToRawName $ nameConcrete $ unArg n         matchName = maybe True (== x) (nameOf $ unArg a)      matchArgs r [] []     = return ([], [])     matchArgs r [] as     = Nothing-    matchArgs r (n:ns) [] | getHiding n == NotHidden = return ([], n : ns)    -- under-applied+    matchArgs r (n:ns) [] | visible n = return ([], n : ns)    -- under-applied     matchArgs r (n:ns) as = do       (p, as) <- matchNextArg r n as       first ((unArg n, p) :) <$> matchArgs (getRange p) ns as
src/full/Agda/Syntax/Abstract/Copatterns.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE ScopedTypeVariables #-}  module Agda.Syntax.Abstract.Copatterns (translateCopatternClauses) where @@ -180,10 +179,10 @@     rhsExpr _       = __IMPOSSIBLE__  clauseToPath :: Clause -> ScopeM (ProjPath Clause)-clauseToPath (Clause (LHS i lhs wps) dots (RHS e c) [] catchall) =-  fmap (\ lhs -> Clause (LHS i lhs wps) dots (RHS e c) [] catchall) <$> lhsToPath [] lhs-clauseToPath (Clause lhs _ (RHS e _) (_:_) _) = typeError $ NotImplemented $ "copattern clauses with where declarations"-clauseToPath (Clause lhs _ _ wheredecls _) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side"+clauseToPath (Clause (LHS i lhs wps) dots sdots (RHS e c) [] catchall) =+  fmap (\ lhs -> Clause (LHS i lhs wps) dots sdots (RHS e c) [] catchall) <$> lhsToPath [] lhs+clauseToPath (Clause lhs _ _ (RHS e _) (_:_) _) = typeError $ NotImplemented $ "copattern clauses with where declarations"+clauseToPath (Clause lhs _ _ _ wheredecls _) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side"  lhsToPath :: [ProjEntry] -> LHSCore -> ScopeM (ProjPath LHSCore) lhsToPath acc lhs@LHSHead{}         = return $ Path acc lhs@@ -214,7 +213,7 @@            abstract :: NamedArg Name -> ScopeM Expr -> ScopeM Expr           abstract (Arg info (Named Nothing x)) me =-            Lam (ExprRange noRange) (DomainFree info x) <$> me+            Lam defaultLamInfo_ (DomainFree info x) <$> me           abstract (Arg _ (Named Just{} _)) me = typeError $ NotImplemented $             "named arguments in projection patterns" @@ -322,11 +321,14 @@   rename rho (TLet r lbs)   = TLet r (rename rho lbs)  instance Rename Clause where-  rename rho (Clause lhs dots rhs wheredecls catchall) =-    Clause (rename rho lhs) (rename rho dots) (rename rho rhs) (rename rho wheredecls) catchall+  rename rho (Clause lhs dots sdots rhs wheredecls catchall) =+    Clause (rename rho lhs) (rename rho dots) (rename rho sdots) (rename rho rhs) (rename rho wheredecls) catchall  instance Rename NamedDotPattern where   rename rho (NamedDot x v t) = NamedDot (rename rho x) v t++instance Rename StrippedDotPattern where+  rename rho (StrippedDot e v t) = StrippedDot (rename rho e) v t  instance Rename RHS where   rename rho e = case e of
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -13,10 +13,11 @@  import Data.Foldable (Foldable) import Data.Traversable (Traversable)+import Data.Data (Data) import Data.Typeable (Typeable) import Data.List import Data.Function-import Data.Hashable+import Data.Hashable (Hashable(..))  import Agda.Syntax.Position import Agda.Syntax.Common@@ -42,7 +43,7 @@                  , nameBindingSite :: Range                  , nameFixity      :: Fixity'                  }-    deriving (Typeable)+    deriving (Typeable, Data)  -- | Qualified names are non-empty lists of names. Equality on qualified names --   are just equality on the last name, i.e. the module part is just@@ -53,7 +54,7 @@ data QName = QName { qnameModule :: ModuleName                    , qnameName   :: Name                    }-    deriving (Typeable)+    deriving (Typeable, Data)  -- | Something preceeded by a qualified name. data QNamed a = QNamed@@ -67,14 +68,14 @@ -- The 'SetRange' instance for module names sets all individual ranges -- to the given one. newtype ModuleName = MName { mnameToList :: [Name] }-  deriving (Eq, Ord, Typeable)+  deriving (Eq, Ord, Typeable, Data)  -- | Ambiguous qualified names. Used for overloaded constructors. -- -- Invariant: All the names in the list must have the same concrete, -- unqualified name.  (This implies that they all have the same 'Range'). newtype AmbiguousQName = AmbQ { unAmbQ :: [QName] }-  deriving (Eq, Ord, Typeable)+  deriving (Eq, Ord, Typeable, Data)  -- | Check whether we are a projection pattern. class IsProjP a where@@ -182,7 +183,7 @@  toTopLevelModuleName :: ModuleName -> C.TopLevelModuleName toTopLevelModuleName (MName []) = __IMPOSSIBLE__-toTopLevelModuleName (MName ms) = C.TopLevelModuleName $ map (C.nameToRawName . nameConcrete) ms+toTopLevelModuleName (MName ms) = C.TopLevelModuleName (getRange ms) $ map (C.nameToRawName . nameConcrete) ms  qualifyM :: ModuleName -> ModuleName -> ModuleName qualifyM m1 m2 = mnameFromList $ mnameToList m1 ++ mnameToList m2@@ -270,7 +271,9 @@   numHoles (AmbQ qs) = numHoles $ fromMaybe __IMPOSSIBLE__ $ headMaybe qs  --------------------------------------------------------------------------- * Show instances+-- * Show instances (only for debug printing!)+--+-- | Use 'prettyShow' to print names to the user. ------------------------------------------------------------------------  -- deriving instance Show Name@@ -284,8 +287,8 @@ instance Show Name where   -- Andreas, 2014-10-02: Reverted to nice printing.   -- Reason: I do not have time just now to properly fix the-  -- use of Show Name for pretty printing everywhere, e.g. in-  -- the Epic backend.  But I want to push the fix for Issue 836 now.+  -- use of Show Name for pretty printing everywhere.+  -- But I want to push the fix for Issue 836 now.   show = prettyShow  -- | Only use this @show@ function in debugging!  To convert an@@ -350,21 +353,30 @@                    }  instance SetRange ModuleName where-  setRange r (MName ns) = MName (map (setRange r) ns)+  setRange r (MName ns) = MName (zipWith setRange rs ns)+    where+      -- Put the range only on the last name. Otherwise+      -- we get overlapping jump-to-definition links for all+      -- the parts (See #2666).+      rs = replicate (length ns - 1) noRange ++ [r]  -- ** KillRange  instance KillRange Name where-  killRange (Name a b c d) = killRange4 Name a b c d-  -- killRange x = x { nameConcrete = killRange $ nameConcrete x-  --                 -- Andreas, 2014-03-30-  --                 -- An experiment: what happens if we preserve-  --                 -- the range of the binding site, but kill all-  --                 -- other ranges before serialization?-  --                 -- Andreas, Makoto, 2014-10-18 AIM XX-  --                 -- Kill all ranges in signature, including nameBindingSite.-  --                 , nameBindingSite = noRange-  --                 }+  killRange (Name a b c d) =+    (killRange4 Name a b c d) { nameBindingSite = c }+    -- Andreas, 2017-07-25, issue #2649+    -- Preserve the nameBindingSite for error message.+    --+    -- Older remarks:+    --+    -- Andreas, 2014-03-30+    -- An experiment: what happens if we preserve+    -- the range of the binding site, but kill all+    -- other ranges before serialization?+    --+    -- Andreas, Makoto, 2014-10-18 AIM XX+    -- Kill all ranges in signature, including nameBindingSite.  instance KillRange ModuleName where   killRange (MName xs) = MName $ killRange xs
+ src/full/Agda/Syntax/Abstract/Pattern.hs view
@@ -0,0 +1,209 @@+{-# LANGUAGE CPP                       #-}+{-# LANGUAGE TypeFamilies              #-}+{-# LANGUAGE UndecidableInstances      #-}++-- | Auxiliary functions to handle patterns in the abstract syntax.+--+--   Generic and specific traversals.++module Agda.Syntax.Abstract.Pattern where++import Control.Monad ((>=>))+import Control.Applicative (Applicative)++import Data.Foldable (Foldable, foldMap)+import Data.Traversable (Traversable, traverse)+import Data.Functor+import Data.Monoid++import Agda.Syntax.Common+import Agda.Syntax.Concrete (FieldAssignment', exprFieldA)+import Agda.Syntax.Abstract as A++#include "undefined.h"+import Agda.Utils.Impossible++-- * Generic traversals++type NAP = NamedArg Pattern++class MapNamedArgPattern a  where+  mapNamedArgPattern :: (NAP -> NAP) -> a -> a++  default mapNamedArgPattern+     :: (Functor f, MapNamedArgPattern a', a ~ f a') => (NAP -> NAP) -> a -> a+  mapNamedArgPattern = fmap . mapNamedArgPattern++instance MapNamedArgPattern NAP where+  mapNamedArgPattern f p =+    case namedArg p of+      -- no sub patterns:+      VarP{}    -> f p+      WildP{}   -> f p+      DotP{}    -> f p+      LitP{}    -> f p+      AbsurdP{} -> f p+      ProjP{}   -> f p+      -- list of NamedArg subpatterns:+      ConP i qs ps       -> f $ setNamedArg p $ ConP i qs $ mapNamedArgPattern f ps+      DefP i qs ps       -> f $ setNamedArg p $ DefP i qs $ mapNamedArgPattern f ps+      PatternSynP i x ps -> f $ setNamedArg p $ PatternSynP i x $ mapNamedArgPattern f ps+      -- Pattern subpattern(s):+      -- RecP: we copy the NamedArg info to the subpatterns but discard it after recursion+      RecP i fs          -> f $ setNamedArg p $ RecP i $ map (fmap namedArg) $ mapNamedArgPattern f $ map (fmap (setNamedArg p)) fs+      -- AsP: we hand the NamedArg info to the subpattern+      AsP i x p0         -> f $ updateNamedArg (AsP i x) $ mapNamedArgPattern f $ setNamedArg p p0++instance MapNamedArgPattern a => MapNamedArgPattern [a]                  where+instance MapNamedArgPattern a => MapNamedArgPattern (FieldAssignment' a) where+instance MapNamedArgPattern a => MapNamedArgPattern (Maybe a)            where++-- | Generic pattern traversal.++class APatternLike a p | p -> a where++  -- | Fold pattern.+  foldrAPattern+    :: Monoid m+    => (Pattern' a -> m -> m)+         -- ^ Combine a pattern and the value computed from its subpatterns.+    -> p -> m++  default foldrAPattern+    :: (Monoid m, Foldable f, APatternLike a b, f b ~ p)+    => (Pattern' a -> m -> m) -> p -> m+  foldrAPattern = foldMap . foldrAPattern++  -- | Traverse pattern.+  traverseAPatternM :: (Monad m+#if __GLASGOW_HASKELL__ <= 708+    , Applicative m, Functor m+#endif+    ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.+      -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.+      -> p -> m p++  default traverseAPatternM :: (Traversable f, APatternLike a q, f q ~ p, Monad m+#if __GLASGOW_HASKELL__ <= 708+    , Applicative m, Functor m+#endif+    ) => (Pattern' a -> m (Pattern' a))+      -> (Pattern' a -> m (Pattern' a))+      -> p -> m p+  traverseAPatternM pre post = traverse $ traverseAPatternM pre post++-- | Compute from each subpattern a value and collect them all in a monoid.++foldAPattern :: (APatternLike a p, Monoid m) => (Pattern' a -> m) -> p -> m+foldAPattern f = foldrAPattern $ \ p m -> f p `mappend` m++-- | Traverse pattern(s) with a modification before the recursive descent.++preTraverseAPatternM :: (APatternLike a b, Monad m+#if __GLASGOW_HASKELL__ <= 708+  , Applicative m, Functor m+#endif+  ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.+    -> b -> m b+preTraverseAPatternM pre p = traverseAPatternM pre return p++-- | Traverse pattern(s) with a modification after the recursive descent.++postTraverseAPatternM :: (APatternLike a b, Monad m+#if __GLASGOW_HASKELL__ <= 708+  , Applicative m, Functor m+#endif+  ) => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.+    -> b -> m b+postTraverseAPatternM post p = traverseAPatternM return post p++-- Interesting instance:++instance APatternLike a (Pattern' a) where+  foldrAPattern f p = f p $+    case p of+      AsP _ _ p          -> foldrAPattern f p+      ConP _ _ ps        -> foldrAPattern f ps+      DefP _ _ ps        -> foldrAPattern f ps+      RecP _ ps          -> foldrAPattern f ps+      PatternSynP _ _ ps -> foldrAPattern f ps+      VarP _             -> mempty+      ProjP _ _ _        -> mempty+      WildP _            -> mempty+      DotP _ _ _         -> mempty+      AbsurdP _          -> mempty+      LitP _             -> mempty++  traverseAPatternM pre post = pre >=> recurse >=> post+    where+    recurse p = case p of+      -- Non-recursive cases:+      A.VarP{}             -> return p+      A.WildP{}            -> return p+      A.DotP{}             -> return p+      A.LitP{}             -> return p+      A.AbsurdP{}          -> return p+      A.ProjP{}            -> return p+      -- Recursive cases:+      A.ConP        i ds ps -> A.ConP        i ds <$> traverseAPatternM pre post ps+      A.DefP        i q  ps -> A.DefP        i q  <$> traverseAPatternM pre post ps+      A.AsP         i x  p  -> A.AsP         i x  <$> traverseAPatternM pre post p+      A.RecP        i    ps -> A.RecP        i    <$> traverseAPatternM pre post ps+      A.PatternSynP i x  ps -> A.PatternSynP i x  <$> traverseAPatternM pre post ps++-- The following instances need UndecidableInstances+-- for the FunctionalDependency (since injectivity is not taken into account).++instance APatternLike a b => APatternLike a (Arg b)              where+instance APatternLike a b => APatternLike a (Named n b)          where+instance APatternLike a b => APatternLike a [b]                  where+instance APatternLike a b => APatternLike a (Maybe b)            where+instance APatternLike a b => APatternLike a (FieldAssignment' b) where++-- * Specific folds++-- | Collect pattern variables in left-to-right textual order.++patternVars :: forall a p. APatternLike a p => p -> [A.Name]+patternVars p = foldAPattern f p `appEndo` []+  where+  -- We use difference lists @[A.Name] -> [A.Name]@ to avoid reconcatenation.+  f :: Pattern' a -> Endo [A.Name]+  f = \case+    A.VarP x         -> Endo (x :)+    A.AsP _ x _      -> Endo (x :)+    A.LitP        {} -> mempty+    A.ConP        {} -> mempty+    A.RecP        {} -> mempty+    A.DefP        {} -> mempty+    A.ProjP       {} -> mempty+    A.WildP       {} -> mempty+    A.DotP        {} -> mempty+    A.AbsurdP     {} -> mempty+    A.PatternSynP {} -> mempty++-- | Check if a pattern contains a specific (sub)pattern.++containsAPattern :: APatternLike a p => (Pattern' a -> Bool) -> p -> Bool+containsAPattern f = getAny . foldAPattern (Any . f)++-- | Check if a pattern contains an absurd pattern.+--   For instance, @suc ()@, does so.+--+--   Precondition: contains no pattern synonyms.++containsAbsurdPattern :: APatternLike a p => p -> Bool+containsAbsurdPattern = containsAPattern $ \case+    A.PatternSynP{} -> __IMPOSSIBLE__+    A.AbsurdP{}     -> True+    _               -> False++-- | Check if a pattern contains an @-pattern.+--+--   Precondition: contains no pattern synonyms.++containsAsPattern :: APatternLike a p => p -> Bool+containsAsPattern = containsAPattern $ \case+    A.PatternSynP{} -> __IMPOSSIBLE__+    A.AsP{}         -> True+    _               -> False
src/full/Agda/Syntax/Abstract/Views.hs view
@@ -53,6 +53,15 @@ unAppView (Application h es) =   foldl (App (ExprRange noRange)) h es +-- | Collects plain lambdas.+data LamView = LamView [(LamInfo, LamBinding)] Expr++lamView :: Expr -> LamView+lamView (Lam i b e) = cons (i, b) $ lamView e+  where cons b (LamView bs e) = LamView (b : bs) e+lamView (ScopedExpr _ e) = lamView e+lamView e = LamView [] e+ -- | Gather top-level 'AsP'atterns to expose underlying pattern. asView :: A.Pattern -> ([Name], A.Pattern) asView (A.AsP _ x p) = first (x :) $ asView p@@ -311,7 +320,7 @@ instance ExprLike a => ExprLike (Pattern' a) where  instance ExprLike a => ExprLike (Clause' a) where-  recurseExpr f (Clause lhs dots rhs ds ca) = Clause <$> rec lhs <*> pure dots <*> rec rhs <*> rec ds <*> pure ca+  recurseExpr f (Clause lhs dots sdots rhs ds ca) = Clause <$> rec lhs <*> pure dots <*> pure sdots <*> rec rhs <*> rec ds <*> pure ca     where rec = recurseExpr f  instance ExprLike RHS where@@ -337,17 +346,18 @@       OptionsPragma{}             -> pure p       BuiltinNoDefPragma{}        -> pure p       RewritePragma{}             -> pure p+      CompilePragma{}             -> pure p       CompiledPragma{}            -> pure p       CompiledExportPragma{}      -> pure p-      CompiledDeclareDataPragma{} -> pure p       CompiledTypePragma{}        -> pure p       CompiledDataPragma{}        -> pure p-      CompiledEpicPragma{}        -> pure p       CompiledJSPragma{}          -> pure p       CompiledUHCPragma{}         -> pure p       CompiledDataUHCPragma{}     -> pure p       StaticPragma{}              -> pure p+      InjectivePragma{}           -> pure p       InlinePragma{}              -> pure p+      EtaPragma{}                 -> pure p       DisplayPragma f xs e        -> DisplayPragma f <$> rec xs <*> rec e     where rec e = recurseExpr f e 
src/full/Agda/Syntax/Common.hs view
@@ -13,10 +13,11 @@ import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as ByteString import Data.Foldable-import Data.Hashable+import Data.Hashable (Hashable(..)) import qualified Data.Strict.Maybe as Strict import Data.Semigroup hiding (Arg) import Data.Traversable+import Data.Data (Data) import Data.Typeable (Typeable) import Data.Word @@ -36,7 +37,7 @@  -- | Used to specify whether something should be delayed. data Delayed = Delayed | NotDelayed-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange Delayed where   killRange = id@@ -46,7 +47,7 @@ ---------------------------------------------------------------------------  data Induction = Inductive | CoInductive-  deriving (Typeable, Eq, Ord)+  deriving (Typeable, Data, Eq, Ord)  instance Show Induction where   show Inductive   = "inductive"@@ -66,18 +67,32 @@ -- * Hiding --------------------------------------------------------------------------- -data Hiding  = Hidden | Instance | NotHidden-  deriving (Typeable, Show, Eq, Ord)+data Overlappable = YesOverlap | NoOverlap+  deriving (Typeable, Data, Show, Eq, Ord) +data Hiding  = Hidden | Instance Overlappable | NotHidden+  deriving (Typeable, Data, Show, Eq, Ord)++-- | Just for the 'Hiding' instance. Should never combine different+--   overlapping.+instance Semigroup Overlappable where+  NoOverlap  <> NoOverlap  = NoOverlap+  YesOverlap <> YesOverlap = YesOverlap+  _          <> _          = __IMPOSSIBLE__+ -- | 'Hiding' is an idempotent partial monoid, with unit 'NotHidden'. --   'Instance' and 'NotHidden' are incompatible. instance Semigroup Hiding where-  NotHidden <> h         = h-  h         <> NotHidden = h-  Hidden    <> Hidden    = Hidden-  Instance  <> Instance  = Instance-  _         <> _         = __IMPOSSIBLE__+  NotHidden  <> h           = h+  h          <> NotHidden   = h+  Hidden     <> Hidden      = Hidden+  Instance o <> Instance o' = Instance (o <> o')+  _          <> _           = __IMPOSSIBLE__ +instance Monoid Overlappable where+  mempty  = NoOverlap+  mappend = (<>)+ instance Monoid Hiding where   mempty = NotHidden   mappend = (<>)@@ -85,14 +100,21 @@ instance KillRange Hiding where   killRange = id +instance NFData Overlappable where+  rnf NoOverlap  = ()+  rnf YesOverlap = ()+ instance NFData Hiding where-  rnf Hidden    = ()-  rnf Instance  = ()-  rnf NotHidden = ()+  rnf Hidden       = ()+  rnf (Instance o) = rnf o+  rnf NotHidden    = ()  -- | Decorating something with 'Hiding' information.-data WithHiding a = WithHiding !Hiding a-  deriving (Typeable, Eq, Ord, Show, Functor, Foldable, Traversable)+data WithHiding a = WithHiding+  { whHiding :: !Hiding+  , whThing  :: a+  }+  deriving (Typeable, Data, Eq, Ord, Show, Functor, Foldable, Traversable)  instance Decoration WithHiding where   traverseF f (WithHiding h a) = WithHiding h <$> f a@@ -139,10 +161,6 @@ mergeHiding :: LensHiding a => WithHiding a -> a mergeHiding (WithHiding h a) = mapHiding (mappend h) a --- | Visible ('NotHidden') arguments are @notHidden@. (DEPRECATED, use 'visible'.)-notHidden :: LensHiding a => a -> Bool-notHidden a = getHiding a == NotHidden- -- | 'NotHidden' arguments are @visible@. visible :: LensHiding a => a -> Bool visible a = getHiding a == NotHidden@@ -151,19 +169,45 @@ notVisible :: LensHiding a => a -> Bool notVisible a = getHiding a /= NotHidden +-- | 'Hidden' arguments are @hidden@.+hidden :: LensHiding a => a -> Bool+hidden a = getHiding a == Hidden+ hide :: LensHiding a => a -> a hide = setHiding Hidden  hideOrKeepInstance :: LensHiding a => a -> a hideOrKeepInstance x =   case getHiding x of-    Hidden -> x-    Instance -> x-    NotHidden -> setHiding Hidden x+    Hidden     -> x+    Instance{} -> x+    NotHidden  -> setHiding Hidden x  makeInstance :: LensHiding a => a -> a-makeInstance = setHiding Instance+makeInstance = makeInstance' NoOverlap +makeInstance' :: LensHiding a => Overlappable -> a -> a+makeInstance' o = setHiding (Instance o)++isOverlappable :: LensHiding a => a -> Bool+isOverlappable x =+  case getHiding x of+    Instance YesOverlap -> True+    _ -> False++isInstance :: LensHiding a => a -> Bool+isInstance x =+  case getHiding x of+    Instance{} -> True+    _          -> False++-- | Ignores 'Overlappable'.+sameHiding :: (LensHiding a, LensHiding b) => a -> b -> Bool+sameHiding x y =+  case (getHiding x, getHiding y) of+    (Instance{}, Instance{}) -> True+    (hx, hy)                 -> hx == hy+ --------------------------------------------------------------------------- -- * Relevance ---------------------------------------------------------------------------@@ -178,7 +222,7 @@ --   @A@ is big in constructor @nil@ as the sort @Set1@ of its type @Set@ --   is bigger than the sort @Set@ of the data type @List@. data Big = Big | Small-  deriving (Typeable, Show, Eq, Enum, Bounded)+  deriving (Typeable, Data, Show, Eq, Enum, Bounded)  instance Ord Big where   Big <= Small = False@@ -200,11 +244,7 @@                 --   because its value is already determined by the type.                 --   If a constructor argument is big, it has to be regarded                 --   absent, otherwise we get into paradoxes.-  | UnusedArg   -- ^ The polarity checker has determined that this argument-                --   is unused in the definition.  It can be skipped during-                --   equality checking but should be mined for solutions-                --   of meta-variables with relevance 'UnusedArg'-    deriving (Typeable, Show, Eq)+    deriving (Typeable, Data, Show, Eq)  allRelevances :: [Relevance] allRelevances =@@ -213,7 +253,6 @@   , Irrelevant   , Forced Small   , Forced Big-  , UnusedArg   ]  instance KillRange Relevance where@@ -227,7 +266,6 @@   rnf NonStrict  = ()   rnf Irrelevant = ()   rnf (Forced a) = rnf a-  rnf UnusedArg  = ()  -- | A lens to access the 'Relevance' attribute in data structures. --   Minimal implementation: @getRelevance@ and one of @setRelevance@ or @mapRelevance@.@@ -254,7 +292,6 @@  -- | Information ordering. -- @Relevant  \`moreRelevant\`---  UnusedArg \`moreRelevant\` --  Forced    \`moreRelevant\` --  NonStrict \`moreRelevant\` --  Irrelevant@@@ -268,26 +305,26 @@     (Relevant, _)   -> True     (_, Relevant)   -> False     -- second bottom-    (UnusedArg, _)  -> True-    (_, UnusedArg)  -> False-    -- third bottom     (Forced{}, _)   -> True     (_, Forced{})   -> False     -- remaining case     (NonStrict,NonStrict) -> True -irrelevantOrUnused :: Relevance -> Bool-irrelevantOrUnused r =+irrelevant :: Relevance -> Bool+irrelevant r =   case r of     Irrelevant -> True-    UnusedArg  -> True     NonStrict  -> False     Relevant   -> False     Forced{}   -> False  -- | @unusableRelevance rel == True@ iff we cannot use a variable of @rel@.-unusableRelevance :: Relevance -> Bool-unusableRelevance rel = NonStrict `moreRelevant` rel+unusableRelevance :: LensRelevance a => a -> Bool+unusableRelevance a = case getRelevance a of+  Irrelevant -> True+  NonStrict  -> True+  Forced{}   -> False -- @Forced@ has no semantic relevance+  Relevant   -> False  -- | 'Relevance' composition. --   'Irrelevant' is dominant, 'Relevant' is neutral.@@ -301,8 +338,6 @@     (Forced b, Forced b') -> Forced (max b b')  -- prefer Big over Small     (Forced b, _)     -> Forced b     (_, Forced b)     -> Forced b-    (UnusedArg, _)  -> UnusedArg-    (_, UnusedArg)  -> UnusedArg     (Relevant, Relevant) -> Relevant  -- | @inverseComposeRelevance r x@ returns the most irrelevant @y@@@ -316,17 +351,14 @@     (Relevant, x)        -> x          -- going to relevant arg.: nothing changes     _ | r == x           -> Relevant   -- because Relevant is comp.-neutral     (Forced{}, Forced{}) -> Relevant   -- same, but (==) does not ignore Big-    (UnusedArg, x)       -> x-    (Forced{}, UnusedArg)  -> Relevant     (Forced{}, x)          -> x     (Irrelevant, x)      -> Relevant   -- going irrelevant: every thing usable     (_, Irrelevant)      -> Irrelevant -- otherwise: irrelevant things remain unusable     (NonStrict, _)       -> Relevant   -- but @NonStrict@s become usable --- | For comparing @Relevance@ ignoring @Forced@ and @UnusedArg@.+-- | For comparing @Relevance@ ignoring @Forced@. ignoreForced :: Relevance -> Relevance ignoreForced Forced{}   = Relevant-ignoreForced UnusedArg  = Relevant ignoreForced Relevant   = Relevant ignoreForced NonStrict  = NonStrict ignoreForced Irrelevant = Irrelevant@@ -350,8 +382,13 @@ -- * Origin of arguments (user-written, inserted or reflected) --------------------------------------------------------------------------- -data Origin = UserWritten | Inserted | Reflected-  deriving (Typeable, Show, Eq, Ord)+-- | Origin of arguments.+data Origin+  = UserWritten  -- ^ From the source file / user input.  (Preserve!)+  | Inserted     -- ^ E.g. inserted hidden arguments.+  | Reflected    -- ^ Produced by the reflection machinery.+  | CaseSplit    -- ^ Produced by an interactive case split.+  deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange Origin where   killRange = id@@ -360,7 +397,33 @@   rnf UserWritten = ()   rnf Inserted = ()   rnf Reflected = ()+  rnf CaseSplit = () +-- | Decorating something with 'Origin' information.+data WithOrigin a = WithOrigin+  { woOrigin :: !Origin+  , woThing  :: a+  }+  deriving (Typeable, Data, Eq, Ord, Show, Functor, Foldable, Traversable)++instance Decoration WithOrigin where+  traverseF f (WithOrigin h a) = WithOrigin h <$> f a++instance HasRange a => HasRange (WithOrigin a) where+  getRange = getRange . dget++instance SetRange a => SetRange (WithOrigin a) where+  setRange = fmap . setRange++instance KillRange a => KillRange (WithOrigin a) where+  killRange = fmap killRange++instance NFData a => NFData (WithOrigin a) where+  rnf (WithOrigin _ a) = rnf a++-- | A lens to access the 'Origin' attribute in data structures.+--   Minimal implementation: @getOrigin@ and one of @setOrigin@ or @mapOrigin@.+ class LensOrigin a where    getOrigin :: a -> Origin@@ -376,6 +439,11 @@   setOrigin = const   mapOrigin = id +instance LensOrigin (WithOrigin a) where+  getOrigin   (WithOrigin h _) = h+  setOrigin h (WithOrigin _ a) = WithOrigin h a+  mapOrigin f (WithOrigin h a) = WithOrigin (f h) a+ --------------------------------------------------------------------------- -- * Argument decoration ---------------------------------------------------------------------------@@ -386,11 +454,10 @@   { argInfoHiding       :: Hiding   , argInfoRelevance    :: Relevance   , argInfoOrigin       :: Origin-  , argInfoOverlappable :: Bool-  } deriving (Typeable, Eq, Ord, Show)+  } deriving (Typeable, Data, Eq, Ord, Show)  instance KillRange ArgInfo where-  killRange (ArgInfo h r o v) = killRange3 ArgInfo h r o v+  killRange (ArgInfo h r o) = killRange3 ArgInfo h r o  class LensArgInfo a where   getArgInfo :: a -> ArgInfo@@ -405,7 +472,7 @@   mapArgInfo = id  instance NFData ArgInfo where-  rnf (ArgInfo a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d+  rnf (ArgInfo a b c) = rnf a `seq` rnf b `seq` rnf c  instance LensHiding ArgInfo where   getHiding = argInfoHiding@@ -425,8 +492,7 @@ defaultArgInfo :: ArgInfo defaultArgInfo =  ArgInfo { argInfoHiding       = NotHidden                           , argInfoRelevance    = Relevant-                          , argInfoOrigin       = UserWritten-                          , argInfoOverlappable = False }+                          , argInfoOrigin       = UserWritten }   ---------------------------------------------------------------------------@@ -436,7 +502,7 @@ data Arg e  = Arg   { argInfo :: ArgInfo   , unArg :: e-  } deriving (Typeable, Ord, Functor, Foldable, Traversable)+  } deriving (Data, Typeable, Ord, Functor, Foldable, Traversable)  instance Decoration Arg where   traverseF f (Arg ai a) = Arg ai <$> f a@@ -451,25 +517,27 @@   killRange (Arg info a) = killRange2 Arg info a  instance Eq a => Eq (Arg a) where-  Arg (ArgInfo h1 _ _ _) x1 == Arg (ArgInfo h2 _ _ _) x2 = (h1, x1) == (h2, x2)+  Arg (ArgInfo h1 _ _) x1 == Arg (ArgInfo h2 _ _) x2 = (h1, x1) == (h2, x2)  instance Show a => Show (Arg a) where-    show (Arg (ArgInfo h r o v) x) = showR r $ showO o $ showH h $ show x+    show (Arg (ArgInfo h r o) a) = showR r $ showO o $ showH h $ show a       where-        showH Hidden     s = "{" ++ s ++ "}"-        showH NotHidden  s = "(" ++ s ++ ")"-        showH Instance   s = (if v then "overlap " else "") ++ "{{" ++ s ++ "}}"+        showH Hidden       s = "{" ++ s ++ "}"+        showH NotHidden    s = "(" ++ s ++ ")"+        showH (Instance o) s = showOv o ++ "{{" ++ s ++ "}}"+          where showOv YesOverlap = "overlap "+                showOv NoOverlap  = ""         showR r s = case r of           Irrelevant   -> "." ++ s           NonStrict    -> "?" ++ s           Forced Big   -> "!b" ++ s           Forced Small -> "!" ++ s-          UnusedArg    -> "k" ++ s -- constant           Relevant     -> "r" ++ s -- Andreas: I want to see it explicitly         showO o s = case o of           UserWritten -> "u" ++ s           Inserted    -> "i" ++ s           Reflected   -> "g" ++ s -- generated by reflection+          CaseSplit   -> "c" ++ s -- generated by case split  instance NFData e => NFData (Arg e) where   rnf (Arg a b) = rnf a `seq` rnf b@@ -539,7 +607,7 @@ data Dom e = Dom   { domInfo   :: ArgInfo   , unDom     :: e-  } deriving (Typeable, Ord, Functor, Foldable, Traversable)+  } deriving (Typeable, Data, Ord, Functor, Foldable, Traversable)  instance Decoration Dom where   traverseF f (Dom ai a) = Dom ai <$> f a@@ -551,7 +619,7 @@   killRange (Dom info a) = killRange2 Dom info a  instance Eq a => Eq (Dom a) where-  Dom (ArgInfo h1 r1 _ _) x1 == Dom (ArgInfo h2 r2 _ _) x2 =+  Dom (ArgInfo h1 r1 _) x1 == Dom (ArgInfo h2 r2 _) x2 =     (h1, ignoreForced r1, x1) == (h2, ignoreForced r2, x2)  instance Show a => Show (Dom a) where@@ -569,6 +637,10 @@   getArgInfo = domInfo   mapArgInfo f arg = arg { domInfo = f $ domInfo arg } +instance LensOrigin (Dom e) where+  getOrigin = getOrigin . getArgInfo+  mapOrigin = mapArgInfo . mapOrigin+ argFromDom :: Dom a -> Arg a argFromDom (Dom i a) = Arg i a @@ -587,7 +659,7 @@     Named { nameOf     :: Maybe name           , namedThing :: a           }-    deriving (Eq, Ord, Typeable, Functor, Foldable, Traversable)+    deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)  -- | Standard naming. type Named_ = Named RString@@ -611,8 +683,8 @@   killRange (Named n a) = Named (killRange n) (killRange a)  instance Show a => Show (Named_ a) where-    show (Named Nothing x)  = show x-    show (Named (Just n) x) = rawNameToString (rangedThing n) ++ " = " ++ show x+    show (Named Nothing a)  = show a+    show (Named (Just n) a) = rawNameToString (rangedThing n) ++ " = " ++ show a  instance (NFData name, NFData a) => NFData (Named name a) where   rnf (Named a b) = rnf a `seq` rnf b@@ -632,6 +704,10 @@ updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b updateNamedArg = fmap . fmap +-- | @setNamedArg a b = updateNamedArg (const b) a@+setNamedArg :: NamedArg a -> b -> NamedArg b+setNamedArg a b = (b <$) <$> a+ --------------------------------------------------------------------------- -- * Range decoration. ---------------------------------------------------------------------------@@ -641,7 +717,7 @@   { rangeOf     :: Range   , rangedThing :: a   }-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  -- | Thing with no range info. unranged :: a -> Ranged a@@ -695,7 +771,8 @@   = ConOSystem  -- ^ Inserted by system or expanded from an implicit pattern.   | ConOCon     -- ^ User wrote a constructor (pattern).   | ConORec     -- ^ User wrote a record (pattern).-  deriving (Typeable, Show, Eq, Ord, Enum, Bounded)+  | ConOSplit   -- ^ Generated by interactive case splitting.+  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded)  instance KillRange ConOrigin where   killRange = id@@ -710,11 +787,14 @@   = ProjPrefix    -- ^ User wrote a prefix projection.   | ProjPostfix   -- ^ User wrote a postfix projection.   | ProjSystem    -- ^ Projection was generated by the system.-  deriving (Typeable, Show, Eq, Ord, Enum, Bounded)+  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded)  instance KillRange ProjOrigin where   killRange = id +data DataOrRecord = IsData | IsRecord+  deriving (Typeable, Data, Eq, Ord, Show)+ --------------------------------------------------------------------------- -- * Infixity, access, abstract, etc. ---------------------------------------------------------------------------@@ -722,7 +802,7 @@ -- | Functions can be defined in both infix and prefix style. See --   'Agda.Syntax.Concrete.LHS'. data IsInfix = InfixDef | PrefixDef-    deriving (Typeable, Show, Eq, Ord)+    deriving (Typeable, Data, Show, Eq, Ord)  -- | Access modifier. data Access@@ -732,8 +812,14 @@   | PublicAccess   | OnlyQualified  -- ^ Visible from outside, but not exported when opening the module                              --   Used for qualified constructors.-    deriving (Typeable, Show, Eq, Ord)+    deriving (Typeable, Data, Show, Eq, Ord) +instance Pretty Access where+  pretty = text . \case+    PrivateAccess _ -> "private"+    PublicAccess    -> "public"+    OnlyQualified   -> "only-qualified"+ instance NFData Access where   rnf _ = () @@ -745,14 +831,14 @@  -- | Abstract or concrete data IsAbstract = AbstractDef | ConcreteDef-    deriving (Typeable, Show, Eq, Ord)+    deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange IsAbstract where   killRange = id  -- | Is this definition eligible for instance search? data IsInstance = InstanceDef | NotInstanceDef-    deriving (Typeable, Show, Eq, Ord)+    deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange IsInstance where   killRange = id@@ -766,7 +852,7 @@  -- | Is this a macro definition? data IsMacro = MacroDef | NotMacroDef-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange IsMacro where killRange = id instance HasRange  IsMacro where getRange _ = noRange@@ -781,13 +867,13 @@ -- | The unique identifier of a name. Second argument is the top-level module --   identifier. data NameId = NameId {-# UNPACK #-} !Word64 {-# UNPACK #-} !Word64-    deriving (Eq, Ord, Typeable, Generic)+    deriving (Eq, Ord, Typeable, Data, Generic)  instance KillRange NameId where   killRange = id  instance Show NameId where-  show (NameId x i) = show x ++ "@" ++ show i+  show (NameId n m) = show n ++ "@" ++ show m  instance Enum NameId where   succ (NameId n m)     = NameId (n + 1) m@@ -809,7 +895,7 @@ -- | A meta variable identifier is just a natural number. -- newtype MetaId = MetaId { metaId :: Nat }-    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable)+    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable, Data)  instance Pretty MetaId where   pretty (MetaId n) = text $ "_" ++ show n@@ -839,7 +925,7 @@     -- @foo_bar@.   | End     -- ^ The following underscore is at the end of the name: @foo_@.-  deriving (Show, Eq, Ord)+  deriving (Show, Eq, Ord, Typeable, Data)  -- | Placeholders are used to represent the underscores in a section. @@ -848,7 +934,7 @@   | NoPlaceholder !(Strict.Maybe PositionInName) e     -- ^ The second argument is used only (but not always) for name     -- parts other than underscores.-  deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Show)+  deriving (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable, Show)  -- | An abbreviation: @noPlaceholder = 'NoPlaceholder' -- 'Strict.Nothing'@.@@ -873,10 +959,20 @@ ---------------------------------------------------------------------------  newtype InteractionId = InteractionId { interactionId :: Nat }-    deriving (Eq,Ord,Num,Integral,Real,Enum)+    deriving ( Eq+             , Ord+             , Num+             , Integral+             , Real+             , Enum+             , Data+#if __GLASGOW_HASKELL__ <= 708+             , Typeable+#endif+             )  instance Show InteractionId where-    show (InteractionId x) = "?" ++ show x+    show (InteractionId i) = "?" ++ show i  instance KillRange InteractionId where killRange = id @@ -893,18 +989,18 @@   , impRenaming    :: [Renaming' a b]   , publicOpen     :: Bool -- ^ Only for @open@. Exports the opened names from the current module.   }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq)  data Using' a b = UseEverything | Using [ImportedName' a b]-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq)  instance Semigroup (Using' a b) where-  UseEverything <> u = u-  u <> UseEverything = u-  Using xs <> Using ys = Using (xs ++ ys)+  UseEverything <> u             = u+  u             <> UseEverything = u+  Using xs      <> Using ys      = Using (xs ++ ys)  instance Monoid (Using' a b) where-  mempty = UseEverything+  mempty  = UseEverything   mappend = (<>)  -- | Default is directive is @private@ (use everything, but do not export).@@ -919,15 +1015,15 @@ data ImportedName' a b   = ImportedModule  b   | ImportedName    a-  deriving (Typeable, Eq, Ord)+  deriving (Typeable, Data, Eq, Ord)  setImportedName :: ImportedName' a a -> a -> ImportedName' a a setImportedName (ImportedName   x) y = ImportedName   y setImportedName (ImportedModule x) y = ImportedModule y  instance (Show a, Show b) => Show (ImportedName' a b) where-  show (ImportedModule x) = "module " ++ show x-  show (ImportedName   x) = show x+  show (ImportedModule b) = "module " ++ show b+  show (ImportedName   a) = show a  data Renaming' a b = Renaming   { renFrom    :: ImportedName' a b@@ -937,7 +1033,7 @@   , renToRange :: Range     -- ^ The range of the \"to\" keyword.  Retained for highlighting purposes.   }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq)  -- ** HasRange instances @@ -1008,7 +1104,7 @@     -- ^ Treat as terminating (unsafe).  Same effect as 'NoTerminationCheck'.   | TerminationMeasure Range m     -- ^ Skip termination checking but use measure instead.-    deriving (Typeable, Show, Eq, Functor)+    deriving (Typeable, Data, Show, Eq, Functor)  instance KillRange m => KillRange (TerminationCheck m) where   killRange (TerminationMeasure _ m) = TerminationMeasure noRange (killRange m)
src/full/Agda/Syntax/Concrete.hs view
@@ -52,13 +52,15 @@ import Prelude hiding (null)  import Control.DeepSeq-import Data.Typeable (Typeable) import Data.Foldable (Foldable) import Data.Traversable (Traversable) import Data.List hiding (null) import Data.Set (Set) import Data.Monoid +import Data.Typeable (Typeable)+import Data.Data (Data)+ import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Fixity@@ -81,14 +83,14 @@     -- ^ An abstraction inside a special syntax declaration     --   (see Issue 358 why we introduce this).   | Ordinary e-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  fromOrdinary :: e -> OpApp e -> e fromOrdinary d (Ordinary e) = e fromOrdinary d _            = d  data FieldAssignment' a = FieldAssignment { _nameFieldA :: Name, _exprFieldA :: a }-  deriving (Typeable, Functor, Foldable, Traversable, Show, Eq)+  deriving (Typeable, Data, Functor, Foldable, Traversable, Show, Eq)  type FieldAssignment = FieldAssignment' Expr @@ -97,7 +99,7 @@                            , _exprModA      :: [Expr]                            , _importDirModA :: ImportDirective                            }-  deriving (Typeable)+  deriving (Typeable, Data) type RecordAssignment  = Either FieldAssignment ModuleAssignment type RecordAssignments = [RecordAssignment] @@ -161,7 +163,7 @@   | Unquote Range                              -- ^ ex: @unquote@, should be applied to a term of type @Term@   | DontCare Expr                              -- ^ to print irrelevant things   | Equal Range Expr Expr                      -- ^ ex: @a = b@, used internally in the parser-  deriving (Typeable)+  deriving (Typeable, Data)  -- | Concrete patterns. No literals in patterns at the moment. data Pattern@@ -181,17 +183,20 @@   | WildP Range                            -- ^ @_@   | AbsurdP Range                          -- ^ @()@   | AsP Range Name Pattern                 -- ^ @x\@p@ unused-  | DotP Range Origin Expr                 -- ^ @.e@+  | DotP Range Origin Expr                 -- ^ @.e@ (the Origin keeps track+                                           -- whether this dot pattern was+                                           -- written by the user or inserted+                                           -- by the system)   | LitP Literal                           -- ^ @0@, @1@, etc.   | RecP Range [FieldAssignment' Pattern]  -- ^ @record {x = p; y = q}@-  deriving (Typeable)+  deriving (Typeable, Data)  -- | A lambda binding is either domain free or typed. type LamBinding = LamBinding' TypedBindings data LamBinding' a   = DomainFree ArgInfo BoundName  -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ or @{.x}@   | DomainFull a                  -- ^ . @(xs : e)@ or @{xs : e}@-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)   -- | A sequence of typed bindings with hiding information. Appears in dependent@@ -204,14 +209,14 @@  data TypedBindings' a = TypedBindings Range (Arg a)      -- ^ . @(xs : e)@ or @{xs : e}@ or something like @(x {y} _ : e)@.-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  data BoundName = BName   { boundName   :: Name   , boundLabel  :: Name    -- ^ for implicit function types the label matters and can't be alpha-renamed   , bnameFixity :: Fixity'   }-  deriving (Typeable)+  deriving (Typeable, Data, Eq, Show)  mkBoundName_ :: Name -> BoundName mkBoundName_ x = mkBoundName x noFixity'@@ -226,7 +231,7 @@ data TypedBinding' e   = TBind Range [WithHiding BoundName] e  -- ^ Binding @(x1 ... xn : A)@.   | TLet  Range [Declaration]  -- ^ Let binding @(let Ds)@ or @(open M args)@.-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  -- | A telescope is a sequence of typed bindings. Bound variables are in scope --   in later types.@@ -255,7 +260,7 @@     -- ^ original pattern, with-patterns, rewrite equations and with-expressions   | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]     -- ^ new with-patterns, rewrite equations and with-expressions-  deriving (Typeable)+  deriving (Typeable, Data)  type RewriteEqn = Expr type WithExpr   = Expr@@ -277,7 +282,7 @@ data RHS' e   = AbsurdRHS -- ^ No right hand side because of absurd match.   | RHS e-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)   type WhereClause = WhereClause' [Declaration]@@ -288,7 +293,7 @@     -- ^ Named where: @module M where@.     --   The 'Access' flag applies to the 'Name' (not the module contents!)     --   and is propagated from the parent function.-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  -- | An expression followed by a where clause. --   Currently only used to give better a better error message in interaction.@@ -309,7 +314,7 @@   , asRange :: Range     -- ^ The range of the \"as\" keyword.  Retained for highlighting purposes.   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  {--------------------------------------------------------------------------     Declarations@@ -355,17 +360,17 @@   | UnquoteDecl Range [Name] Expr   | UnquoteDef  Range [Name] Expr   | Pragma      Pragma-  deriving (Typeable)+  deriving (Typeable, Data)  data ModuleApplication   = SectionApp Range [TypedBindings] Expr     -- ^ @tel. M args@   | RecordModuleIFS Range QName     -- ^ @M {{...}}@-  deriving (Typeable)+  deriving (Typeable, Data)  data OpenShortHand = DoOpen | DontOpen-  deriving (Typeable, Eq, Show)+  deriving (Typeable, Data, Eq, Show)  -- Pragmas ---------------------------------------------------------------- @@ -374,28 +379,32 @@   | BuiltinPragma             Range String Expr   | RewritePragma             Range [QName]   | CompiledDataPragma        Range QName String [String]-  | CompiledDeclareDataPragma Range QName String   | CompiledTypePragma        Range QName String   | CompiledPragma            Range QName String   | CompiledExportPragma      Range QName String-  | CompiledEpicPragma        Range QName String   | CompiledJSPragma          Range QName String   | CompiledUHCPragma         Range QName String   | CompiledDataUHCPragma     Range QName String [String]   | HaskellCodePragma         Range String+  | ForeignPragma             Range String String       -- ^ first string is backend name+  | CompilePragma             Range String QName String -- ^ first string is backend name   | StaticPragma              Range QName+  | InjectivePragma           Range QName   | InlinePragma              Range QName   | ImportPragma              Range String     -- ^ Invariant: The string must be a valid Haskell module name.   | ImportUHCPragma           Range String     -- ^ same as above, but for the UHC backend   | ImpossiblePragma          Range+  | EtaPragma                 Range QName+    -- ^ For coinductive records, use pragma instead of regular+    --   @eta-equality@ definition (as it is might make Agda loop).   | TerminationCheckPragma    Range (TerminationCheck Name)   | CatchallPragma            Range   | DisplayPragma             Range Pattern Expr   | NoPositivityCheckPragma   Range   | PolarityPragma            Range Name [Occurrence]-  deriving (Typeable)+  deriving (Typeable, Data)  --------------------------------------------------------------------------- @@ -455,8 +464,8 @@   where     vApp (AppView e es) arg = AppView e (es ++ [arg]) -    arg (HiddenArg   _ e) = setHiding Hidden   $ defaultArg e-    arg (InstanceArg _ e) = setHiding Instance $ defaultArg e+    arg (HiddenArg   _ e) = hide         $ defaultArg e+    arg (InstanceArg _ e) = makeInstance $ defaultArg e     arg e                 = defaultArg (unnamed e)  {--------------------------------------------------------------------------@@ -642,20 +651,22 @@   getRange (BuiltinPragma r _ _)             = r   getRange (RewritePragma r _)               = r   getRange (CompiledDataPragma r _ _ _)      = r-  getRange (CompiledDeclareDataPragma r _ _) = r   getRange (CompiledTypePragma r _ _)        = r   getRange (CompiledPragma r _ _)            = r   getRange (CompiledExportPragma r _ _)      = r-  getRange (CompiledEpicPragma r _ _)        = r   getRange (CompiledJSPragma r _ _)          = r   getRange (CompiledUHCPragma r _ _)         = r   getRange (CompiledDataUHCPragma r _ _ _)   = r   getRange (HaskellCodePragma r _)           = r+  getRange (CompilePragma r _ _ _)           = r+  getRange (ForeignPragma r _ _)             = r   getRange (StaticPragma r _)                = r+  getRange (InjectivePragma r _)             = r   getRange (InlinePragma r _)                = r   getRange (ImportPragma r _)                = r   getRange (ImportUHCPragma r _)             = r   getRange (ImpossiblePragma r)              = r+  getRange (EtaPragma r _)                   = r   getRange (TerminationCheckPragma r _)      = r   getRange (CatchallPragma r)                = r   getRange (DisplayPragma r _ _)             = r@@ -818,23 +829,25 @@   killRange (BuiltinPragma _ s e)             = killRange1 (BuiltinPragma noRange s) e   killRange (RewritePragma _ qs)              = killRange1 (RewritePragma noRange) qs   killRange (CompiledDataPragma _ q s ss)     = killRange1 (\q -> CompiledDataPragma noRange q s ss) q-  killRange (CompiledDeclareDataPragma _ q s) = killRange1 (\q -> CompiledDeclareDataPragma noRange q s) q   killRange (CompiledTypePragma _ q s)        = killRange1 (\q -> CompiledTypePragma noRange q s) q   killRange (CompiledPragma _ q s)            = killRange1 (\q -> CompiledPragma noRange q s) q   killRange (CompiledExportPragma _ q s)      = killRange1 (\q -> CompiledExportPragma noRange q s) q-  killRange (CompiledEpicPragma _ q s)        = killRange1 (\q -> CompiledEpicPragma noRange q s) q   killRange (CompiledJSPragma _ q s)          = killRange1 (\q -> CompiledJSPragma noRange q s) q   killRange (CompiledUHCPragma _ q s)         = killRange1 (\q -> CompiledUHCPragma noRange q s) q   killRange (CompiledDataUHCPragma _ q s ss)  = killRange1 (\q -> CompiledDataUHCPragma noRange q s ss) q   killRange (HaskellCodePragma _ s)           = HaskellCodePragma noRange s   killRange (StaticPragma _ q)                = killRange1 (StaticPragma noRange) q+  killRange (InjectivePragma _ q)             = killRange1 (InjectivePragma noRange) q   killRange (InlinePragma _ q)                = killRange1 (InlinePragma noRange) q   killRange (ImportPragma _ s)                = ImportPragma noRange s   killRange (ImportUHCPragma _ s)             = ImportUHCPragma noRange s+  killRange (CompilePragma _ b q s)           = killRange1 (\ q -> CompilePragma noRange b q s) q+  killRange (ForeignPragma _ b s)             = ForeignPragma noRange b s   killRange (ImpossiblePragma _)              = ImpossiblePragma noRange   killRange (TerminationCheckPragma _ t)      = TerminationCheckPragma noRange (killRange t)   killRange (CatchallPragma _)                = CatchallPragma noRange   killRange (DisplayPragma _ lhs rhs)         = killRange2 (DisplayPragma noRange) lhs rhs+  killRange (EtaPragma _ q)                   = killRange1 (EtaPragma noRange) q   killRange (NoPositivityCheckPragma _)       = NoPositivityCheckPragma noRange   killRange (PolarityPragma _ q occs)         = killRange1 (\q -> PolarityPragma noRange q occs) q @@ -949,20 +962,22 @@   rnf (BuiltinPragma _ a b)             = rnf a `seq` rnf b   rnf (RewritePragma _ a)               = rnf a   rnf (CompiledDataPragma _ a b c)      = rnf a `seq` rnf b `seq` rnf c-  rnf (CompiledDeclareDataPragma _ a b) = rnf a `seq` rnf b   rnf (CompiledTypePragma _ a b)        = rnf a `seq` rnf b   rnf (CompiledPragma _ a b)            = rnf a `seq` rnf b   rnf (CompiledExportPragma _ a b)      = rnf a `seq` rnf b-  rnf (CompiledEpicPragma _ a b)        = rnf a `seq` rnf b   rnf (CompiledJSPragma _ a b)          = rnf a `seq` rnf b   rnf (CompiledUHCPragma _ a b)         = rnf a `seq` rnf b   rnf (CompiledDataUHCPragma _ a b c)   = rnf a `seq` rnf b `seq` rnf c   rnf (HaskellCodePragma _ s)           = rnf s+  rnf (CompilePragma _ a b c)           = rnf a `seq` rnf b `seq` rnf c+  rnf (ForeignPragma _ b s)             = rnf b `seq` rnf s   rnf (StaticPragma _ a)                = rnf a+  rnf (InjectivePragma _ a)             = rnf a   rnf (InlinePragma _ a)                = rnf a   rnf (ImportPragma _ a)                = rnf a   rnf (ImportUHCPragma _ a)             = rnf a   rnf (ImpossiblePragma _)              = ()+  rnf (EtaPragma _ a)                   = rnf a   rnf (TerminationCheckPragma _ a)      = rnf a   rnf (CatchallPragma _)                = ()   rnf (DisplayPragma _ a b)             = rnf a `seq` rnf b
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -1,7 +1,6 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE DeriveDataTypeable  #-}-{-# LANGUAGE GADTs               #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE GADTs              #-}  -- | Preprocess 'Agda.Syntax.Concrete.Declaration's, producing 'NiceDeclaration's. --@@ -31,6 +30,7 @@     , NiceConstructor, NiceTypeSignature     , Clause(..)     , DeclarationException(..)+    , DeclarationWarning(..)     , Nice, runNice     , niceDeclarations     , notSoNiceDeclarations@@ -40,7 +40,7 @@  import Prelude hiding (null) -import Control.Arrow ((***))+import Control.Arrow ((***), first, second) import Control.Applicative hiding (empty) import Control.Monad.State @@ -52,9 +52,12 @@ import Data.Map (Map) import Data.Maybe import Data.Semigroup ( Semigroup, Monoid, (<>), mempty, mappend )-import Data.List as List hiding (null)+import qualified Data.List as List import qualified Data.Set as Set import Data.Traversable (Traversable, traverse)+import qualified Data.Traversable as Trav++import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Concrete@@ -67,10 +70,12 @@  import Agda.TypeChecking.Positivity.Occurrence -import Agda.Utils.Except ( Error(strMsg), MonadError(throwError) )+import Agda.Utils.Except ( MonadError(throwError,catchError) )+import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List (caseList, headMaybe, isSublistOf)+import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import qualified Agda.Utils.Pretty as Pretty@@ -130,16 +135,18 @@     --   without type signature or a pattern lhs (e.g. for irrefutable let).     --   The 'Declaration' is the actual 'FunClause'.   | FunSig Range Fixity' Access IsAbstract IsInstance IsMacro ArgInfo TerminationCheck Name Expr-  | FunDef Range [Declaration] Fixity' IsAbstract TerminationCheck Name [Clause]+  | FunDef Range [Declaration] Fixity' IsAbstract IsInstance TerminationCheck Name [Clause]       -- ^ Block of function clauses (we have seen the type signature before).       --   The 'Declaration's are the original declarations that were processed       --   into this 'FunDef' and are only used in 'notSoNiceDeclaration'.+      --   Andreas, 2017-01-01: Because of issue #2372, we add 'IsInstance' here.+      --   An alias should know that it is an instance.   | DataDef Range Fixity' IsAbstract PositivityCheck Name [LamBinding] [NiceConstructor]   | RecDef Range Fixity' IsAbstract PositivityCheck Name (Maybe (Ranged Induction)) (Maybe Bool) (Maybe (ThingWithFixity Name, IsInstance)) [LamBinding] [NiceDeclaration]   | NicePatternSyn Range Fixity' Name [Arg Name] Pattern   | NiceUnquoteDecl Range [Fixity'] Access IsAbstract IsInstance TerminationCheck [Name] Expr   | NiceUnquoteDef Range [Fixity'] Access IsAbstract TerminationCheck [Name] Expr-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  type TerminationCheck = Common.TerminationCheck Measure @@ -157,7 +164,7 @@ -- | One clause in a function definition. There is no guarantee that the 'LHS' --   actually declares the 'Name'. We will have to check that later. data Clause = Clause Name Catchall LHS RHS WhereClause [Clause]-    deriving (Typeable, Show)+    deriving (Typeable, Data, Show)  -- | The exception type. data DeclarationException@@ -170,16 +177,11 @@         | MissingTypeSignature LHS -- Andreas 2012-06-02: currently unused, remove after a while -- Fredrik 2012-09-20: now used, can we keep it?         | MissingDataSignature Name         | WrongDefinition Name DataRecOrFun DataRecOrFun-        | WrongParameters Name+        | WrongParameters Name Params Params+          -- ^ 'Name' of symbol, 'Params' of signature, 'Params' of definition.         | NotAllowedInMutual NiceDeclaration-        | UnknownNamesInFixityDecl [Name]-        | UnknownNamesInPolarityPragmas [Name]-        | PolarityPragmasButNotPostulates [Name]         | Codata Range         | DeclarationPanic String-        | UselessPrivate Range-        | UselessAbstract Range-        | UselessInstance Range         | WrongContentBlock KindOfBlock Range         | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures         | InvalidTerminationCheckPragma Range@@ -194,8 +196,18 @@         | BadMacroDef NiceDeclaration         | InvalidNoPositivityCheckPragma Range -    deriving (Typeable)+    deriving (Typeable, Data, Show) +-- | Non-fatal errors encountered in the Nicifier+data DeclarationWarning+  = UnknownNamesInFixityDecl [Name]+  | UnknownNamesInPolarityPragmas [Name]+  | PolarityPragmasButNotPostulates [Name]+  | UselessPrivate Range+  | UselessAbstract Range+  | UselessInstance Range+  deriving (Typeable, Data, Show)+ -- | Several declarations expect only type signatures as sub-declarations.  These are: data KindOfBlock   = PostulateBlock  -- ^ @postulate@@@ -203,7 +215,7 @@   | 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.5 (Issue 1698).-  deriving (Typeable, Eq, Ord, Show)+  deriving (Typeable, Data, Eq, Ord, Show)   instance HasRange DeclarationException where@@ -216,17 +228,11 @@   getRange (MissingTypeSignature x)             = getRange x   getRange (MissingDataSignature x)             = getRange x   getRange (WrongDefinition x k k')             = getRange x-  getRange (WrongParameters x)                  = getRange x+  getRange (WrongParameters x _ _)              = getRange x   getRange (AmbiguousFunClauses lhs xs)         = getRange lhs   getRange (NotAllowedInMutual x)               = getRange x-  getRange (UnknownNamesInFixityDecl xs)        = getRange . head $ xs-  getRange (UnknownNamesInPolarityPragmas xs)   = getRange . head $ xs-  getRange (PolarityPragmasButNotPostulates xs) = getRange . head $ xs   getRange (Codata r)                           = r   getRange (DeclarationPanic _)                 = noRange-  getRange (UselessPrivate r)                   = r-  getRange (UselessAbstract r)                  = r-  getRange (UselessInstance r)                  = r   getRange (WrongContentBlock _ r)              = r   getRange (InvalidTerminationCheckPragma r)    = r   getRange (InvalidMeasureMutual r)             = r@@ -236,6 +242,14 @@   getRange (BadMacroDef d)                      = getRange d   getRange (InvalidNoPositivityCheckPragma r)   = r +instance HasRange DeclarationWarning where+  getRange (UnknownNamesInFixityDecl xs)        = getRange . head $ xs+  getRange (UnknownNamesInPolarityPragmas xs)   = getRange . head $ xs+  getRange (PolarityPragmasButNotPostulates xs) = getRange . head $ xs+  getRange (UselessPrivate r)                   = r+  getRange (UselessAbstract r)                  = r+  getRange (UselessInstance r)                  = r+ instance HasRange NiceDeclaration where   getRange (Axiom r _ _ _ _ _ _ _ _)         = r   getRange (NiceField r _ _ _ _ _ _)         = r@@ -247,7 +261,7 @@   getRange (NicePragma r _)                  = r   getRange (PrimitiveFunction r _ _ _ _ _)   = r   getRange (FunSig r _ _ _ _ _ _ _ _ _)      = r-  getRange (FunDef r _ _ _ _ _ _)            = r+  getRange (FunDef r _ _ _ _ _ _ _)          = r   getRange (DataDef r _ _ _ _ _ _)           = r   getRange (RecDef r _ _ _ _ _ _ _ _ _)      = r   getRange (NiceRecSig r _ _ _ _ _ _ _)      = r@@ -257,9 +271,6 @@   getRange (NiceUnquoteDecl r _ _ _ _ _ _ _) = r   getRange (NiceUnquoteDef r _ _ _ _ _ _)    = r -instance Error DeclarationException where-  strMsg = DeclarationPanic- -- These error messages can (should) be terminated by a dot ".", -- there is no error context printed after them. instance Pretty DeclarationException where@@ -286,31 +297,21 @@   pretty (WrongDefinition x k k') = fsep $ pretty x :     pwords ("has been declared as a " ++ show k ++       ", but is being defined as a " ++ show k')-  pretty (WrongParameters x) = fsep $-    pwords "List of parameters does not match previous signature for" ++ [pretty x]+  pretty (WrongParameters x sig def) = fsep $+    pwords "List of parameters " ++ map pretty def +++    pwords " does not match parameters " ++ map pretty sig +++    pwords " of previous signature for " ++ [pretty x]   pretty (AmbiguousFunClauses lhs xs) = sep     [ fsep $         pwords "More than one matching type signature for left hand side " ++ [pretty lhs] ++         pwords "it could belong to any of:"     , vcat $ map (pretty . PrintRange) xs     ]-  pretty (UnknownNamesInFixityDecl xs) = fsep $-    pwords "The following names are not declared in the same scope as their syntax or fixity declaration (i.e., either not in scope at all, imported from another module, or declared in a super module):" ++ map pretty xs-  pretty (UnknownNamesInPolarityPragmas xs) = fsep $-    pwords "The following names are not declared in the same scope as their polarity pragmas (they could for instance be out of scope, imported from another module, or declared in a super module):" ++ map pretty xs-  pretty (PolarityPragmasButNotPostulates xs) = fsep $-    pwords "Polarity pragmas have been given for the following identifiers which are not postulates:" ++ map pretty xs-  pretty (UselessPrivate _)      = fsep $-    pwords "Using private here has no effect. Private applies only to declarations that introduce new identifiers into the module, like type signatures and data, record, and module declarations."-  pretty (UselessAbstract _)      = fsep $-    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 (WrongContentBlock b _)      = fsep . pwords $     case b of       PostulateBlock -> "A postulate block can only contain type signatures, possibly under keyword instance"       DataBlock -> "A data definition can only contain type signatures, possibly under keyword instance"-      _ -> __IMPOSSIBLE__+      _ -> "Unexpected declaration"   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 #-}."   pretty (InvalidTerminationCheckPragma _) = fsep $@@ -332,6 +333,20 @@   pretty (InvalidNoPositivityCheckPragma _) = fsep $     pwords "No positivity checking pragmas can only precede a mutual block or a data/record definition." +instance Pretty DeclarationWarning where+  pretty (UnknownNamesInFixityDecl xs) = fsep $+    pwords "The following names are not declared in the same scope as their syntax or fixity declaration (i.e., either not in scope at all, imported from another module, or declared in a super module):" ++ map pretty xs+  pretty (UnknownNamesInPolarityPragmas xs) = fsep $+    pwords "The following names are not declared in the same scope as their polarity pragmas (they could for instance be out of scope, imported from another module, or declared in a super module):" ++ map pretty xs+  pretty (PolarityPragmasButNotPostulates xs) = fsep $+    pwords "Polarity pragmas have been given for the following identifiers which are not postulates:" ++ map pretty xs+  pretty (UselessPrivate _)      = fsep $+    pwords "Using private here has no effect. Private applies only to declarations that introduce new identifiers into the module, like type signatures and data, record, and module declarations."+  pretty (UselessAbstract _)      = fsep $+    pwords "Using abstract here has no effect. Abstract applies to 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."+ declName :: NiceDeclaration -> String declName Axiom{}             = "Postulates" declName NiceField{}         = "Fields"@@ -365,9 +380,13 @@ -- | The kind of the forward declaration, remembering the parameters.  data DataRecOrFun-  = DataName PositivityCheck Params  -- ^ name of a data with parameters-  | RecName  PositivityCheck Params  -- ^ name of a record with parameters-  | FunName  TerminationCheck        -- ^ name of a function+  = DataName { kindPosCheck :: PositivityCheck, kindParams :: Params }+    -- ^ Name of a data type with parameters.+  | RecName  { kindPosCheck :: PositivityCheck, kindParams :: Params }+    -- ^ Name of a record type with parameters.+  | FunName  TerminationCheck+    -- ^ Name of a function.+  deriving (Typeable, Data)  -- Ignore pragmas when checking equality instance Eq DataRecOrFun where@@ -376,7 +395,7 @@   FunName  _   == FunName  _   = True   _            == _            = False -type Params = [Hiding]+type Params = [Arg BoundName]  instance Show DataRecOrFun where   show (DataName _ n) = "data type" --  "with " ++ show n ++ " visible parameters"@@ -407,6 +426,7 @@ --   NO_TERMINATION_CHECK pragma. combineTermChecks :: Range -> [TerminationCheck] -> Nice TerminationCheck combineTermChecks r tcs = loop tcs where+  loop :: [TerminationCheck] -> Nice TerminationCheck   loop []         = return TerminationCheck   loop (tc : tcs) = do     let failure r = throwError $ InvalidMeasureMutual r@@ -431,11 +451,76 @@       (NonTerminating        , NoTerminationCheck    ) -> failure r       (NonTerminating        , Terminating           ) -> failure r +-- | Check that the parameters of the data/record definition+--   match the parameters of the corresponding signature.+--+--   The definition may omit some hidden parameters.+--   The names need to match.+--   The types are not checked here.+--+--   Precondition: the signature and definition have the same kind (data/record/fun).+--+matchParameters+  :: Name          -- ^ The data/record name.+  -> DataRecOrFun  -- ^ The data/record signature.+  -> DataRecOrFun  -- ^ The parameters as given in the data/record definition.+  -> Nice ()+matchParameters _ FunName{} FunName{} = return ()+matchParameters x sig def = loop (kindParams sig) (kindParams def)+  where+  failure = throwError $ WrongParameters x (kindParams sig) (kindParams def)+  loop hs     []     = unless (all notVisible hs) failure+  loop []     (_:_)  = failure+  loop (h:hs) (j:js)+    | h == j                  = loop hs js+    | notVisible h, visible j = loop hs (j:js)+    | otherwise               = failure  -- | Nicifier monad.+--   Preserve the state when throwing an exception. -type Nice = StateT NiceEnv (Either DeclarationException)+newtype Nice a = Nice { unNice :: NiceEnv -> (Either DeclarationException a, NiceEnv) } +-- We have to hand-roll the instances ourselves, since the automagic does not+-- work for @Nice a = State s (Except e a)@, only for the usual+-- @Nice a = StateT s (Except e) a@.++instance Functor Nice where+  fmap f m = Nice $ \ s ->+    let (r, s') = unNice m s in+    case r of+      Left  e -> (Left e, s')+      Right a -> (Right (f a), s')++instance Applicative Nice where+  pure a = Nice $ \ s -> (Right a, s)+  (<*>)  = ap++instance Monad Nice where+  return = pure+  m >>= k  = Nice $ \ s ->+    let (r, s') = unNice m s in+    case r of+      Left e  -> (Left e, s')+      Right a -> unNice (k a) s'++instance MonadState NiceEnv Nice where+  state f  = Nice $ \ s -> first Right $ f s+  -- get = Nice $ \ s -> (Right s, s)  -- Subsumed by state++instance MonadError DeclarationException Nice where+  throwError e   = Nice $ \ s -> (Left e, s)+  catchError m h = Nice $ \ s ->+    let (r, s') = unNice m s in+    case r of+      Left e  -> unNice (h e) s'+      Right a -> (Right a, s')++-- | Run a Nicifier computation, return result and warnings+--   (in chronological order).+runNice :: Nice a -> (Either DeclarationException a, NiceWarnings)+runNice m = second (reverse . niceWarn) $ unNice m initNiceEnv+ -- | Nicifier state.  data NiceEnv = NiceEnv@@ -449,11 +534,15 @@     -- ^ Catchall pragma waiting for a function clause.   , fixs     :: Fixities   , pols     :: Polarities+  , niceWarn :: NiceWarnings+    -- ^ Stack of warnings. Head is last warning.   }  type LoneSigs   = Map Name DataRecOrFun type Fixities   = Map Name Fixity' type Polarities = Map Name [Occurrence]+type NiceWarnings = [DeclarationWarning]+     -- ^ Stack of warnings. Head is last warning.  -- | Initial nicifier state. @@ -465,6 +554,7 @@   , _catchall = False   , fixs      = empty   , pols      = empty+  , niceWarn  = []   }  -- * Handling the lone signatures, stored to infer mutual blocks.@@ -553,6 +643,10 @@   catchallPragma .= ca_old   return result +-- | Add a new warning.+niceWarning :: DeclarationWarning -> Nice ()+niceWarning w = modify $ \ st -> st { niceWarn = w : niceWarn st }+ -- | Check whether name is not "_" and return its fixity. getFixity :: Name -> Nice Fixity' getFixity x = Map.findWithDefault noFixity' x <$> gets fixs -- WAS: defaultFixity'@@ -565,9 +659,6 @@   modify (\s -> s { pols = Map.delete x (pols s) })   return p -runNice :: Nice a -> Either DeclarationException a-runNice nice = nice `evalStateT` initNiceEnv- data DeclKind     = LoneSig DataRecOrFun Name     | LoneDefs DataRecOrFun [Name]@@ -578,7 +669,7 @@ declKind (FunSig _ _ _ _ _ _ _ tc x _)    = LoneSig (FunName tc) x declKind (NiceRecSig _ _ _ _ pc x pars _) = LoneSig (RecName pc $ parameters pars) x declKind (NiceDataSig _ _ _ _ pc x pars _)= LoneSig (DataName pc $ parameters pars) x-declKind (FunDef _ _ _ _ tc x _)          = LoneDefs (FunName tc) [x]+declKind (FunDef _ _ _ _ _ tc x _)        = LoneDefs (FunName tc) [x] declKind (DataDef _ _ _ pc x pars _)      = LoneDefs (DataName pc $ parameters pars) [x] declKind (RecDef _ _ _ pc x _ _ _ pars _) = LoneDefs (RecName pc $ parameters pars) [x] declKind (NiceUnquoteDef _ _ _ _ tc xs _) = LoneDefs (FunName tc) xs@@ -595,43 +686,61 @@ declKind NicePatternSyn{}                 = OtherDecl declKind NiceUnquoteDecl{}                = OtherDecl --- | Compute visible parameters of a data or record signature or definition.+-- | Compute parameters of a data or record signature or definition. parameters :: [LamBinding] -> Params-parameters = List.concat . List.map numP where-  numP (DomainFree i _) = [argInfoHiding i]-  numP (DomainFull (TypedBindings _ (Arg i (TBind _ xs _)))) = List.replicate (length xs) $ argInfoHiding i-  numP (DomainFull (TypedBindings _ (Arg _ TLet{})))         = []+parameters = List.concatMap $ \case+  DomainFree i x                                      -> [Arg i x]+  DomainFull (TypedBindings _ (Arg _ TLet{}))         -> []+  DomainFull (TypedBindings _ (Arg i (TBind _ xs _))) -> for xs $ \ (WithHiding h x) ->+    mergeHiding $ WithHiding h $ Arg i x  -- | Main. niceDeclarations :: [Declaration] -> Nice [NiceDeclaration] niceDeclarations ds = do+   -- Get fixity and syntax declarations.   (fixs, polarities) <- fixitiesAndPolarities ds   let declared    = Set.fromList (concatMap declaredNames ds)-      unknownFixs = Map.keysSet fixs       Set.\\ declared-      unknownPols = Map.keysSet polarities Set.\\ declared-  case (Set.null unknownFixs, Set.null unknownPols) of-    -- If we have fixity/syntax decls for names not declared-    -- in the current scope, fail.-    (False, _)   -> throwError $ UnknownNamesInFixityDecl-                                   (Set.toList unknownFixs)-    -- Fail if there are polarity pragmas with undeclared names.-    (_, False)   -> throwError $ UnknownNamesInPolarityPragmas-                                   (Set.toList unknownPols)-    (True, True) -> localState $ do-      -- Run the nicifier in an initial environment of fixity decls-      -- and polarities.-      put $ initNiceEnv { fixs = fixs, pols = polarities }-      ds <- nice ds-      -- Check that every polarity pragma was used.-      unusedPolarities <- gets (Map.keys . pols)-      unless (null unusedPolarities) $ do-        throwError $ PolarityPragmasButNotPostulates unusedPolarities-      -- Check that every signature got its definition.-      checkLoneSigs . Map.toList =<< use loneSigs-      -- Note that loneSigs is ensured to be empty.-      -- (Important, since inferMutualBlocks also uses loneSigs state).-      inferMutualBlocks ds++  -- If we have names in fixity declarations+  -- which are not defined in the appropriate scope,+  -- raise a warning and delete them from fixs.+  fixs <- ifNull (Map.keysSet fixs Set.\\ declared) (return fixs) $ \ unknownFixs -> do+    niceWarning $ UnknownNamesInFixityDecl $ Set.toList unknownFixs+    -- Note: Data.Map.restrictKeys requires containers >= 0.5.8.2+    -- return $ Map.restrictKeys fixs declared+    return $ Map.filterWithKey (\ k _ -> Set.member k declared) fixs++  -- Same for undefined names in polarity declarations.+  polarities <- ifNull (Map.keysSet polarities Set.\\ declared) (return polarities) $+    \ unknownPols -> do+      niceWarning $ UnknownNamesInPolarityPragmas $ Set.toList unknownPols+      -- Note: Data.Map.restrictKeys requires containers >= 0.5.8.2+      -- return $ Map.restrictKeys polarities declared+      return $ Map.filterWithKey (\ k _ -> Set.member k declared) polarities++  -- Run the nicifier in an initial environment of fixity decls+  -- and polarities.  But keep the warnings.+  st <- get+  put $ initNiceEnv { fixs = fixs, pols = polarities, niceWarn = niceWarn st }+  ds <- nice ds++  -- Check that every polarity pragma was used.+  unlessNullM (Map.keys <$> gets pols) $ \ unusedPolarities -> do+    niceWarning $ PolarityPragmasButNotPostulates unusedPolarities++  -- Check that every signature got its definition.+  checkLoneSigs . Map.toList =<< use loneSigs++  -- Note that loneSigs is ensured to be empty.+  -- (Important, since inferMutualBlocks also uses loneSigs state).+  res <- inferMutualBlocks ds++  -- Restore the old state, but keep the warnings.+  warns <- gets niceWarn+  put $ st { niceWarn = warns }+  return res+   where     -- Compute the names defined in a declaration.     -- We stay in the current scope, i.e., do not go into modules.@@ -767,7 +876,7 @@                removeLoneSig x                cs  <- mkClauses x (expandEllipsis fits) False                fx  <- getFixity x-               return ([FunDef (getRange fits) fits fx ConcreteDef termCheck x cs] , rest)+               return ([FunDef (getRange fits) fits fx ConcreteDef NotInstanceDef termCheck x cs] , rest)              -- case: clauses match more than one sigs (ambiguity)             l -> throwError $ AmbiguousFunClauses lhs $ reverse $ map fst l -- "ambiguous function clause; cannot assign it uniquely to one type signature"@@ -779,13 +888,13 @@         (DataSig r Inductive x tel t) -> do           pc <- use positivityCheckPragma           addLoneSig x (DataName pc $ parameters tel)-          (,) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x tel (Just t) Nothing+          (,) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x (Just (tel, t)) Nothing               <*> return ds -        (Data r Inductive x tel t cs) -> do+        (Data r Inductive x tel mt cs) -> do           pc <- use positivityCheckPragma-          t <- defaultTypeSig (DataName pc $ parameters tel) x t-          (,) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x tel t (Just cs)+          mt <- defaultTypeSig (DataName pc $ parameters tel) x mt+          (,) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x ((tel,) <$> mt) (Just (tel, cs))               <*> return ds          (RecordSig r x tel t)         -> do@@ -794,12 +903,12 @@           fx <- getFixity x           return ([NiceRecSig r fx PublicAccess ConcreteDef pc x tel t] , ds) -        (Record r x i e c tel t cs)   -> do+        (Record r x i e c tel mt cs)   -> do           pc <- use positivityCheckPragma-          t <- defaultTypeSig (RecName pc $ parameters tel) x t+          mt <- defaultTypeSig (RecName pc $ parameters tel) x mt           c <- traverse (\(cname, cinst) -> do fix <- getFixity cname; return (ThingWithFixity cname fix, cinst)) c           (,) <$> dataOrRec pc (\ r f a pc x tel cs -> RecDef r f a pc x i e c tel cs) NiceRecSig-                    niceDeclarations r x tel t (Just cs)+                    niceDeclarations r x ((tel,) <$> mt) (Just (tel, cs))               <*> return ds          Mutual r ds' ->@@ -942,34 +1051,36 @@     defaultTypeSig :: DataRecOrFun -> Name -> Maybe Expr -> Nice (Maybe Expr)     defaultTypeSig k x t@Just{} = return t     defaultTypeSig k x Nothing  = do-      mk <- getSig x-      case mk of-        Nothing -> throwError $ MissingDataSignature x-        Just k' | k == k'       -> Nothing <$ removeLoneSig x-                | sameKind k k' -> throwError $ WrongParameters x-                | otherwise     -> throwError $ WrongDefinition x k' k+      caseMaybeM (getSig x) (throwError $ MissingDataSignature x) $ \ k' -> do+        unless (sameKind k k') $ throwError $ WrongDefinition x k' k+        unless (k == k') $ matchParameters x k' k+        Nothing <$ removeLoneSig x -    dataOrRec :: forall a .-                 PositivityCheck ->-                 (Range -> Fixity' -> IsAbstract -> PositivityCheck -> Name -> [LamBinding] ->-                   [NiceConstructor] -> NiceDeclaration) ->-                 (Range -> Fixity' -> Access -> IsAbstract -> PositivityCheck -> Name -> [LamBinding] -> Expr ->-                   NiceDeclaration) ->-                 ([a] -> Nice [NiceDeclaration]) ->-                 Range ->-                 Name ->-                 [LamBinding] ->-                 Maybe Expr ->-                 Maybe [a] ->-                 Nice [NiceDeclaration]-    dataOrRec pc mkDef mkSig niceD r x tel mt mcs = do-      mds <- traverse niceD mcs+    dataOrRec+      :: forall a+      .  PositivityCheck+      -> (Range -> Fixity' -> IsAbstract -> PositivityCheck -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDeclaration)+         -- ^ Construct definition.+      -> (Range -> Fixity' -> Access -> IsAbstract -> PositivityCheck -> Name -> [LamBinding] -> Expr -> NiceDeclaration)+         -- ^ Construct signature.+      -> ([a] -> Nice [NiceDeclaration])+         -- ^ Constructor checking.+      -> Range+      -> Name          -- ^ Data/record type name.+      -> Maybe ([LamBinding], Expr)    -- ^ Parameters and type.  If not @Nothing@ a signature is created.+      -> Maybe ([LamBinding], [a])     -- ^ Parameters and constructors.  If not @Nothing@, a definition body is created.+      -> Nice [NiceDeclaration]+    dataOrRec pc mkDef mkSig niceD r x mt mcs = do+      mds <- Trav.forM mcs $ \ (tel, cs) -> (tel,) <$> niceD cs       f   <- getFixity x       return $ catMaybes $-        [ mt <&> \ t -> mkSig (fuseRange x t) f PublicAccess ConcreteDef pc x tel t-        , mkDef r f ConcreteDef pc x (concatMap dropType tel) <$> mds+        [ mt  <&> \ (tel, t)  -> mkSig (fuseRange x t) f PublicAccess ConcreteDef pc x tel t+        , mds <&> \ (tel, ds) -> mkDef r f ConcreteDef pc x (caseMaybe mt tel $ const $ concatMap dropType tel) ds+          -- If a type is given (mt /= Nothing), we have to delete the types in @tel@+          -- for the data definition, lest we duplicate them.         ]       where+        -- | Drop type annotations and lets from bindings.         dropType :: LamBinding -> [LamBinding]         dropType (DomainFull (TypedBindings _r (Arg ai (TBind _ xs _)))) =           map (mergeHiding . fmap (DomainFree ai)) xs@@ -985,7 +1096,7 @@       TypeSig rel x t -> do         fx <- getFixity x         return [ Axiom (getRange d) fx PublicAccess ConcreteDef NotInstanceDef rel Nothing x t ]-      Field i x argt -> do+      Field i x argt | b == FieldBlock -> do         fx <- getFixity x         return [ NiceField (getRange d) fx PublicAccess ConcreteDef i x argt ]       InstanceB r decls -> do@@ -1003,7 +1114,7 @@       cs <- mkClauses x (expandEllipsis ds0) False       f  <- getFixity x       return [ FunSig (fuseRange x t) f PublicAccess ConcreteDef NotInstanceDef NotMacroDef info termCheck x t-             , FunDef (getRange ds0) ds0 f ConcreteDef termCheck x cs ]+             , FunDef (getRange ds0) ds0 f ConcreteDef NotInstanceDef termCheck x cs ]         where           t = case mt of                 Just t  -> t@@ -1017,21 +1128,32 @@     expandEllipsis (d@(FunClause Ellipsis{} _ _ _) : ds) =       d : expandEllipsis ds     expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _ _) : ds) =-      d : expand (setInserted p) (map setInserted ps) ds+      d : expand (wipe p) (map wipe ps) ds       where         expand _ _ [] = []         expand p ps (d@(Pragma (CatchallPragma r)) : ds) = d : expand p ps ds-        expand p ps (FunClause (Ellipsis r ps' eqs []) rhs wh ca : ds) =-          FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs []) rhs wh ca : expand p ps ds         expand p ps (FunClause (Ellipsis r ps' eqs es) rhs wh ca : ds) =-          FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs es) rhs wh ca : expand p (ps ++ ps') ds+          FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs es) rhs wh ca+            : expand p (applyUnless (null es) (++ (map wipe ps')) ps) ds+                       -- If we have with-expressions (es /= []) then the following+                       -- ellipses also get the additional with patterns ps'+        -- We can have ellipses after a fun clause.+        -- They refer to the last clause that introduced new with-expressions.         expand p ps (d@(FunClause (LHS _ _ _ []) _ _ _) : ds) =           d : expand p ps ds-        expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _ _) : ds) =-          d : expand p ps ds+        -- Same here: If we have new with-expressions, the next ellipses will+        -- refer to us.+        expand _ _ (d@(FunClause (LHS p' ps' _ (_ : _)) _ _ _) : ds) =+          d : expand (wipe p') (map wipe ps') ds+          -- Andreas, Jesper, 2017-05-13, issue #2578+          -- Need to update the range also on the next with-patterns.         expand _ _ (_ : ds) = __IMPOSSIBLE__     expandEllipsis (_ : ds) = __IMPOSSIBLE__ +    -- Before copying a pattern, remove traces to its origin.+    wipe :: Pattern -> Pattern+    wipe = killRange . setInserted+     setInserted :: Pattern -> Pattern     setInserted p = case p of       IdentP{} -> p@@ -1093,14 +1215,14 @@       xStrings   = nameStringParts x       patStrings = concatMap nameStringParts pns       in---          trace ("x = " ++ show x) $+--          trace ("x = " ++ prettyShow x) $ --          trace ("pns = " ++ show pns) $ --          trace ("xStrings = " ++ show xStrings) $ --          trace ("patStrings = " ++ show patStrings) $ --          trace ("mFixity = " ++ show mFixity) $       case (headMaybe pns, mFixity) of         -- first identifier in the patterns is the fun.symbol?-        (Just y, _) | x == y -> True -- trace ("couldBe since y = " ++ show y) $ True+        (Just y, _) | x == y -> True -- trace ("couldBe since y = " ++ prettyShow y) $ True         -- are the parts of x contained in p         _ | xStrings `isSublistOf` patStrings -> True -- trace ("couldBe since isSublistOf") $ True         -- looking for a mixfix fun.symb@@ -1163,7 +1285,7 @@         notAllowedInMutual Axiom{} = False         notAllowedInMutual d       = declKind d == OtherDecl         -- Pull type signatures to the top-        (sigs, other) = partition isTypeSig ds+        (sigs, other) = List.partition isTypeSig ds         isTypeSig Axiom{}                     = True         isTypeSig d | LoneSig{} <- declKind d = True         isTypeSig _                           = False@@ -1177,7 +1299,7 @@         -- do not termination check a mutual block if any of its         -- inner declarations comes with a {-# NO_TERMINATION_CHECK #-}         termCheck (FunSig _ _ _ _ _ _ _ tc _ _)      = tc-        termCheck (FunDef _ _ _ _ tc _ _)            = tc+        termCheck (FunDef _ _ _ _ _ tc _ _)          = tc         -- ASR (28 December 2015): Is this equation necessary?         termCheck (NiceMutual _ tc _ _)              = __IMPOSSIBLE__         termCheck (NiceUnquoteDecl _ _ _ _ _ tc _ _) = tc@@ -1215,19 +1337,24 @@     abstractBlock r ds = do       let (ds', anyChange) = runChange $ mkAbstract ds           inherited        = r == noRange-          -- hack to avoid failing on inherited abstract blocks in where clauses-      if anyChange || inherited then return ds' else throwError $ UselessAbstract r+      if anyChange then return ds' else do+        -- hack to avoid failing on inherited abstract blocks in where clauses+        unless inherited $ niceWarning $ UselessAbstract r+        return ds -- no change!      privateBlock _ _ [] = return []     privateBlock r o ds = do       let (ds', anyChange) = runChange $ mkPrivate o ds-      if anyChange then return ds' else-        if o == UserWritten then throwError $ UselessPrivate r else return ds -- no change!+      if anyChange then return ds' else do+        when (o == UserWritten) $ niceWarning $ UselessPrivate r+        return ds -- no change!      instanceBlock _ [] = return []     instanceBlock r ds = do       let (ds', anyChange) = runChange $ mapM mkInstance ds-      if anyChange then return ds' else throwError $ UselessInstance r+      if anyChange then return ds' else do+        niceWarning $ UselessInstance r+        return ds -- no change!      -- Make a declaration eligible for instance search.     mkInstance :: Updater NiceDeclaration@@ -1238,7 +1365,7 @@         NiceUnquoteDecl r f p a i tc x e -> (\ i -> NiceUnquoteDecl r f p a i tc x e) <$> setInstance i         NiceMutual{}                     -> return d         NiceFunClause{}                  -> return d-        FunDef{}                         -> return d+        FunDef r ds f a i tc x cs        -> (\ i -> FunDef r ds f a i tc x cs) <$> setInstance i         NiceField{}                      -> return d  -- Field instance are handled by the parser         PrimitiveFunction{}              -> return d         NiceUnquoteDef{}                 -> return d@@ -1297,7 +1424,7 @@   mkAbstract d =     case d of       NiceMutual r termCheck pc ds     -> NiceMutual r termCheck pc <$> mkAbstract ds-      FunDef r ds f a tc x cs          -> (\ a -> FunDef r ds f a tc x) <$> mkAbstract a <*> mkAbstract cs+      FunDef r ds f a i tc x cs        -> (\ a -> FunDef r ds f a i tc x) <$> mkAbstract a <*> mkAbstract cs       DataDef r f a pc x ps cs         -> (\ a -> DataDef r f a pc x ps) <$> mkAbstract a <*> mkAbstract cs       RecDef r f a pc x i e c ps cs    -> (\ a -> RecDef r f a pc x i e c ps) <$> mkAbstract a <*> mkAbstract cs       NiceFunClause r p a termCheck catchall d  -> (\ a -> NiceFunClause r p a termCheck catchall d) <$> mkAbstract a@@ -1379,7 +1506,7 @@       NiceImport _ _ _ _ _                     -> return $ d       -- Andreas, 2016-07-08, issue #2089       -- we need to propagate 'private' to the named where modules-      FunDef r ds f a tc x cls                 -> FunDef r ds f a tc x <$> mkPrivate o cls+      FunDef r ds f a i tc x cls               -> FunDef r ds f a i tc x <$> mkPrivate o cls       DataDef{}                                -> return $ d       RecDef{}                                 -> return $ d       NicePatternSyn _ _ _ _ _                 -> return $ d@@ -1517,7 +1644,7 @@     NiceDataSig r _ _ _ _ x bs e     -> [DataSig r Inductive x bs e]     NiceFunClause _ _ _ _ _ d        -> [d]     FunSig _ _ _ _ i _ rel tc x e    -> inst i [TypeSig rel x e]-    FunDef _r ds _ _ _ _ _           -> ds+    FunDef _r ds _ _ _ _ _ _         -> ds     DataDef r _ _ _ x bs cs          -> [Data r Inductive x bs Nothing $ concatMap notSoNiceDeclarations cs]     RecDef r _ _ _ x i e c bs ds     -> [Record r x i e (unThing <$> c) bs Nothing $ concatMap notSoNiceDeclarations ds]       where unThing (ThingWithFixity c _, inst) = (c, inst)@@ -1545,7 +1672,7 @@     NiceDataSig{}                   -> Nothing     NiceFunClause _ _ a _ _ _       -> Just a     FunSig{}                        -> Nothing-    FunDef _ _ _ a _ _ _            -> Just a+    FunDef _ _ _ a _ _ _ _          -> Just a     DataDef _ _ a _ _ _ _           -> Just a     RecDef _ _ a _ _ _ _ _ _ _      -> Just a     NicePatternSyn{}                -> Nothing
src/full/Agda/Syntax/Concrete/Name.hs view
@@ -12,7 +12,10 @@ import Control.Applicative  import Data.ByteString.Char8 (ByteString)-import Data.List+import Data.Function+import qualified Data.List as List++import Data.Data (Data) import Data.Typeable (Typeable)  import GHC.Generics (Generic)@@ -40,7 +43,7 @@ data Name   = Name Range [NamePart]  -- ^ A (mixfix) identifier.   | NoName Range NameId    -- ^ @_@.-  deriving (Typeable)+  deriving (Typeable, Data)  instance Underscore Name where   underscore = NoName noRange __IMPOSSIBLE__@@ -53,7 +56,7 @@ data NamePart   = Hole       -- ^ @_@ part.   | Id RawName  -- ^ Identifier part.-  deriving (Typeable, Generic)+  deriving (Typeable, Data, Generic)  -- | Define equality on @Name@ to ignore range so same names in different --   locations are equal.@@ -96,7 +99,7 @@ data QName   = Qual  Name QName -- ^ @A.rest@.   | QName Name       -- ^ @x@.-  deriving (Typeable, Eq, Ord)+  deriving (Typeable, Data, Eq, Ord)  instance Underscore QName where   underscore = QName underscore@@ -107,10 +110,16 @@ -- --   Invariant: The list must not be empty. -newtype TopLevelModuleName-  = TopLevelModuleName { moduleNameParts :: [String] }-  deriving (Show, Eq, Ord, Typeable, Sized)+data TopLevelModuleName = TopLevelModuleName+  { moduleNameRange :: Range+  , moduleNameParts :: [String]+  }+  deriving (Show, Typeable, Data) +instance Eq    TopLevelModuleName where (==)    = (==)    `on` moduleNameParts+instance Ord   TopLevelModuleName where compare = compare `on` moduleNameParts+instance Sized TopLevelModuleName where size    = size     .   moduleNameParts+ ------------------------------------------------------------------------ -- * Operations on 'Name' and 'NamePart' ------------------------------------------------------------------------@@ -190,6 +199,12 @@ qnameParts (Qual x q) = x : qnameParts q qnameParts (QName x)  = [x] +-- | Is the name qualified?++isQualified :: QName -> Bool+isQualified Qual{}  = True+isQualified QName{} = False+ ------------------------------------------------------------------------ -- * Operations on 'TopLevelModuleName' ------------------------------------------------------------------------@@ -198,25 +213,26 @@ -- name is assumed to represent a top-level module name.  toTopLevelModuleName :: QName -> TopLevelModuleName-toTopLevelModuleName = TopLevelModuleName . map prettyShow . qnameParts+toTopLevelModuleName q = TopLevelModuleName (getRange q) $ map prettyShow $ qnameParts q --- | Turns a top level module into a qualified name with 'noRange'.+-- UNUSED+-- -- | Turns a top level module into a qualified name with 'noRange'. -fromTopLevelModuleName :: TopLevelModuleName -> QName-fromTopLevelModuleName (TopLevelModuleName [])     = __IMPOSSIBLE__-fromTopLevelModuleName (TopLevelModuleName (x:xs)) = loop x xs-  where-  loop x []       = QName (mk x)-  loop x (y : ys) = Qual  (mk x) $ loop y ys-  mk :: String -> Name-  mk x = Name noRange [Id x]+-- fromTopLevelModuleName :: TopLevelModuleName -> QName+-- fromTopLevelModuleName (TopLevelModuleName _ [])     = __IMPOSSIBLE__+-- fromTopLevelModuleName (TopLevelModuleName _ (x:xs)) = loop x xs+--   where+--   loop x []       = QName (mk x)+--   loop x (y : ys) = Qual  (mk x) $ loop y ys+--   mk :: String -> Name+--   mk x = Name noRange [Id x]  -- | Turns a top-level module name into a file name with the given -- suffix.  moduleNameToFileName :: TopLevelModuleName -> String -> FilePath-moduleNameToFileName (TopLevelModuleName []) ext = __IMPOSSIBLE__-moduleNameToFileName (TopLevelModuleName ms) ext =+moduleNameToFileName (TopLevelModuleName _ []) ext = __IMPOSSIBLE__+moduleNameToFileName (TopLevelModuleName _ ms) ext =   joinPath (init ms) </> last ms <.> ext  -- | Finds the current project's \"root\" directory, given a project@@ -228,7 +244,7 @@ -- Precondition: The module name must be well-formed.  projectRoot :: AbsolutePath -> TopLevelModuleName -> AbsolutePath-projectRoot file (TopLevelModuleName m) =+projectRoot file (TopLevelModuleName _ m) =   mkAbsolute $   foldr (.) id (replicate (length m - 1) takeDirectory) $   takeDirectory $@@ -308,7 +324,7 @@   pretty (QName x)  = pretty x  instance Pretty TopLevelModuleName where-  pretty (TopLevelModuleName ms) = text $ intercalate "." ms+  pretty (TopLevelModuleName _ ms) = text $ List.intercalate "." ms  ------------------------------------------------------------------------ -- * Range instances@@ -322,6 +338,9 @@     getRange (QName  x) = getRange x     getRange (Qual n x) = fuseRange n x +instance HasRange TopLevelModuleName where+  getRange = moduleNameRange+ instance SetRange Name where   setRange r (Name _ ps)  = Name r ps   setRange r (NoName _ i) = NoName r i@@ -330,6 +349,9 @@   setRange r (QName x)  = QName (setRange r x)   setRange r (Qual n x) = Qual (setRange r n) (setRange r x) +instance SetRange TopLevelModuleName where+  setRange r (TopLevelModuleName _ x) = TopLevelModuleName r x+ instance KillRange QName where   killRange (QName x) = QName $ killRange x   killRange (Qual n x) = killRange n `Qual` killRange x@@ -337,6 +359,9 @@ instance KillRange Name where   killRange (Name r ps)  = Name (killRange r) ps   killRange (NoName r i) = NoName (killRange r) i++instance KillRange TopLevelModuleName where+  killRange (TopLevelModuleName _ x) = TopLevelModuleName noRange x  ------------------------------------------------------------------------ -- * NFData instances
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -1,6 +1,5 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE GADTs               #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP   #-}+{-# LANGUAGE GADTs #-}  {-| The parser doesn't know about operators and parses everything as normal     function application. This module contains the functions that parses the@@ -26,7 +25,7 @@ import Data.Either (partitionEithers) import qualified Data.Foldable as Fold import Data.Function-import Data.List+import qualified Data.List as List import Data.Maybe import Data.Map (Map) import qualified Data.Map as Map@@ -49,16 +48,13 @@  import Agda.TypeChecking.Monad.Base (typeError, TypeError(..), LHSOrPatSyn(..)) import qualified Agda.TypeChecking.Monad.Benchmark as Bench+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.State (getScope) import Agda.TypeChecking.Monad.Options  import Agda.Utils.Either import Agda.Utils.Pretty-#if MIN_VERSION_base(4,8,0)-import Agda.Utils.List hiding ( uncons )-#else import Agda.Utils.List-#endif import Agda.Utils.Trie (Trie) import qualified Agda.Utils.Trie as Trie @@ -71,8 +67,13 @@  -- | Bills the operator parser. -billToParser :: ScopeM a -> ScopeM a-billToParser = Bench.billTo [Bench.Parsing, Bench.Operators]+billToParser :: ExprKind -> ScopeM a -> ScopeM a+billToParser k = Bench.billTo+  [ Bench.Parsing+  , case k of+      IsExpr    -> Bench.OperatorsExpr+      IsPattern -> Bench.OperatorsPattern+  ]  --------------------------------------------------------------------------- -- * Building the parser@@ -138,9 +139,9 @@ -- and function symbols in scope. -- -- When parsing a pattern we do not use bound names. The effect is--- that operator parts (that are not constructor parts) can be used as--- atomic names in the pattern (so they can be rebound). See--- @test/succeed/OpBind.agda@ for an example.+-- that unqualified operator parts (that are not constructor parts)+-- can be used as atomic names in the pattern (so they can be+-- rebound). See @test/succeed/OpBind.agda@ for an example. -- -- When parsing a pattern we also disallow the use of sections, mainly -- because there is little need for sections in patterns. Note that@@ -258,7 +259,7 @@         -- resulting in a confusing error message claiming that "if"         -- is not in scope. -        (non, fix) = partition nonfix (filter (and . partsPresent) ops)+        (non, fix) = List.partition nonfix (filter (and . partsPresent) ops)          cons       = getDefinedNames [ConName, PatternSynName] flat         conNames   = Set.fromList $@@ -276,9 +277,11 @@                         concatMap notationNames $                         filter (or . partsPresent) ops) -        isAtom   x = case kind of-                       IsExpr    -> not (Set.member x allParts) || Set.member x allNames-                       IsPattern -> not (Set.member x conParts) || Set.member x conNames+        isAtom x+          | kind == IsPattern && not (isQualified x) =+            not (Set.member x conParts) || Set.member x conNames+          | otherwise =+            not (Set.member x allParts) || Set.member x allNames         -- If string is a part of notation, it cannot be used as an identifier,         -- unless it is also used as an identifier. See issue 307. @@ -324,8 +327,8 @@         relatedOperators :: [(Integer, [NotationSection])]         relatedOperators =           map (\((l, ns) : rest) -> (l, ns ++ concat (map snd rest))) .-          groupBy ((==) `on` fst) .-          sortBy (compare `on` fst) .+          List.groupBy ((==) `on` fst) .+          List.sortBy (compare `on` fst) .           mapMaybe (\n -> case level n of                             Unrelated     -> Nothing                             r@(Related l) ->@@ -600,11 +603,9 @@         [(p,lhs)] -> do reportSDoc "scope.operators" 50 $ return $                           text "Parsed lhs:" <+> pretty lhs                         return (lhs, ops)-        []        -> typeError $ OperatorChangeMessage-                               $ OperatorInformation ops+        []        -> typeError $ OperatorInformation ops                                $ NoParseForLHS lhsOrPatSyn p-        rs        -> typeError $ OperatorChangeMessage-                               $ OperatorInformation ops+        rs        -> typeError $ OperatorInformation ops                                $ AmbiguousParseForLHS lhsOrPatSyn p $                        map (fullParen . fst) rs     where@@ -663,12 +664,11 @@  -- | Parses a left-hand side, and makes sure that it defined the expected name. parseLHS :: QName -> Pattern -> ScopeM LHSCore-parseLHS top p = billToParser $ do+parseLHS top p = billToParser IsPattern $ do   (res, ops) <- parseLHS' IsLHS (Just top) p   case res of     Right (f, lhs) -> return lhs-    _ -> typeError $ OperatorChangeMessage-                   $ OperatorInformation ops+    _ -> typeError $ OperatorInformation ops                    $ NoParseForLHS IsLHS p  -- | Parses a pattern.@@ -679,12 +679,11 @@ parsePatternSyn = parsePatternOrSyn IsPatSyn  parsePatternOrSyn :: LHSOrPatSyn -> Pattern -> ScopeM Pattern-parsePatternOrSyn lhsOrPatSyn p = billToParser $ do+parsePatternOrSyn lhsOrPatSyn p = billToParser IsPattern $ do   (res, ops) <- parseLHS' lhsOrPatSyn Nothing p   case res of     Left p -> return p-    _      -> typeError $ OperatorChangeMessage-                        $ OperatorInformation ops+    _      -> typeError $ OperatorInformation ops                         $ NoParseForLHS lhsOrPatSyn p  -- | Helper function for 'parseLHS' and 'parsePattern'.@@ -715,12 +714,12 @@ --   for @Data.Nat._+_@ we return the list @[Data,Nat]@. qualifierModules :: [QName] -> [[Name]] qualifierModules qs =-  nub $ filter (not . null) $ map (init . qnameParts) qs+  List.nub $ filter (not . null) $ map (init . qnameParts) qs  -- | Parse a list of expressions into an application. parseApplication :: [Expr] -> ScopeM Expr parseApplication [e] = return e-parseApplication es  = billToParser $ do+parseApplication es  = billToParser IsExpr $ do     -- Build the parser     let names = [ q | Ident q <- es ]         ms    = qualifierModules names@@ -734,11 +733,9 @@           reportSDoc "scope.operators" 50 $ return $             text "Parsed an operator application:" <+> pretty e           return e-        []  -> typeError $ OperatorChangeMessage-                         $ OperatorInformation ops+        []  -> typeError $ OperatorInformation ops                          $ NoParseForApplication es-        es' -> typeError $ OperatorChangeMessage-                         $ OperatorInformation ops+        es' -> typeError $ OperatorInformation ops                          $ AmbiguousParseForApplication es                          $ map fullParen es' @@ -747,7 +744,7 @@ parseModuleIdentifier e = typeError $ NotAModuleExpr e  parseRawModuleApplication :: [Expr] -> ScopeM (QName, [NamedArg Expr])-parseRawModuleApplication es = billToParser $ do+parseRawModuleApplication es = billToParser IsExpr $ do     let e : es_args = es     m <- parseModuleIdentifier e @@ -762,13 +759,11 @@     -- TODO: not sure about forcing     case {-force $-} parse (parseSections, pArgs p) es_args of         [as] -> return (m, as)-        []   -> typeError $ OperatorChangeMessage-                          $ OperatorInformation ops+        []   -> typeError $ OperatorInformation ops                           $ NoParseForApplication es         ass -> do           let f = fullParen . foldl (App noRange) (Ident m)-          typeError $ OperatorChangeMessage-                    $ OperatorInformation ops+          typeError $ OperatorInformation ops                     $ AmbiguousParseForApplication es                     $ map f ass @@ -803,9 +798,9 @@     AppV e1 (Arg info e2) -> par $ unExprView $ AppV (fullParen' e1) (Arg info e2')         where             e2' = case argInfoHiding info of-                Hidden    -> e2-                Instance  -> e2-                NotHidden -> fullParen' <$> e2+                Hidden     -> e2+                Instance{} -> e2+                NotHidden  -> fullParen' <$> e2     OpAppV x ns es -> par $ unExprView $ OpAppV x ns $ (map . fmap . fmap . fmap . fmap) fullParen' es     LamV bs e -> par $ unExprView $ LamV bs (fullParen e)     where
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -1,7 +1,6 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE GADTs               #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies        #-}+{-# LANGUAGE CPP          #-}+{-# LANGUAGE GADTs        #-}+{-# LANGUAGE TypeFamilies #-}  module Agda.Syntax.Concrete.Operators.Parser where @@ -13,8 +12,6 @@ import qualified Data.Strict.Maybe as Strict import Data.Set (Set) -import Text.PrettyPrint.HughesPJ hiding (empty)- import Agda.Syntax.Position import qualified Agda.Syntax.Abstract.Name as A import Agda.Syntax.Common@@ -24,12 +21,14 @@ import Agda.Syntax.Concrete.Operators.Parser.Monad hiding (parse) import qualified Agda.Syntax.Concrete.Operators.Parser.Monad as P +import Agda.Utils.Pretty+ #include "undefined.h" import Agda.Utils.Impossible  placeholder :: PositionInName -> Parser e (MaybePlaceholder e) placeholder p =-  annotate (const $ text ("_" ++ show p)) $+  doc (text ("_" ++ show p)) $   sat $ \t ->   case t of     Placeholder p' | p' == p -> True@@ -43,17 +42,11 @@   where   p' = noPlaceholder <$> p -notPlaceholder :: Parser e e-notPlaceholder = do-  tok <- token+satNoPlaceholder :: (e -> Maybe a) -> Parser e a+satNoPlaceholder p = sat' $ \tok ->   case tok of-    Placeholder _     -> empty-    NoPlaceholder _ e -> return e--sat' :: (e -> Bool) -> Parser e e-sat' p = do-  tok <- notPlaceholder-  if p tok then return tok else empty+    NoPlaceholder _ e -> p e+    Placeholder _     -> Nothing  data ExprView e     = LocalV QName@@ -179,16 +172,14 @@  -- | Parse a specific identifier as a NamePart partP :: IsExpr e => [Name] -> RawName -> Parser e Range-partP ms s = annotate (const $ text (show str)) $ do-    tok <- notPlaceholder-    case isLocal tok of-      Just p  -> return p-      Nothing -> empty-    where-        str = show (foldr Qual (QName (Name noRange [Id s])) ms)-        isLocal e = case exprView e of-            LocalV y | str == show y -> Just (getRange y)-            _                        -> Nothing+partP ms s =+  doc (text (show str)) $+  satNoPlaceholder isLocal+  where+  str = prettyShow $ foldr Qual (QName $ Name noRange [Id s]) ms+  isLocal e = case exprView e of+      LocalV y | str == prettyShow y -> Just $ getRange y+      _ -> Nothing  -- | Parses a split-up, unqualified name consisting of at least two -- name parts.@@ -198,27 +189,25 @@ -- first name part that is not an underscore.  atLeastTwoParts :: IsExpr e => Parser e Name-atLeastTwoParts = do-  (r, ps) <- parts Beginning-  case r of-    Nothing -> __IMPOSSIBLE__-    Just r  -> return (Name r ps)+atLeastTwoParts =+  (\p1 ps p2 ->+      let all = p1 : ps ++ [p2] in+      case catMaybes (map fst all) of+        r : _ -> Name r (map snd all)+        []    -> __IMPOSSIBLE__)+  <$> part Beginning+  <*> many (part Middle)+  <*> part End   where-  parts pos = do-    tok          <- token-    (pos', r, p) <- case tok of-      Placeholder pos'                   -> return (pos', Nothing, Hole)-      NoPlaceholder (Strict.Just pos') e -> case exprView e of-        LocalV (QName (Name r [Id s])) -> return (pos', Just r, Id s)-        _                              -> empty-      _ -> empty-    if pos == Middle && pos' == End then-      return (r, [p])-     else if pos' == pos then do-      (r', ps) <- parts Middle-      return (maybe r' Just r, p : ps)-     else-      empty+  part pos = sat' $ \tok -> case tok of+    Placeholder pos'                   | pos == pos' -> Just ( Nothing+                                                             , Hole+                                                             )+    NoPlaceholder (Strict.Just pos') e | pos == pos' ->+      case exprView e of+        LocalV (QName (Name r [Id s])) -> Just (Just r, Id s)+        _                              -> Nothing+    _ -> Nothing  -- | Either a wildcard (@_@), or an unqualified name (possibly -- containing multiple name parts).@@ -227,11 +216,11 @@ wildOrUnqualifiedName =   (Nothing <$ partP [] "_")     <|>-  (do e <- notPlaceholder-      case exprView e of-        LocalV (QName n) -> return (Just n)-        WildV _          -> return Nothing-        _                -> empty)+  (satNoPlaceholder $ \e ->+     case exprView e of+       LocalV (QName n) -> Just (Just n)+       WildV _          -> Just Nothing+       _                -> Nothing)     <|>   Just <$> atLeastTwoParts @@ -310,7 +299,7 @@     [Name] -> Notation ->     Parser e (Range, [Either (MaybePlaceholder e, NamedArg Int)                              (LamBinding, Int)])-  worker ms []              = return (noRange, [])+  worker ms []              = pure (noRange, [])   worker ms (IdPart x : xs) =     (\r1 (r2, es) -> (fuseRanges r1 r2, es))       <$> partP ms x@@ -360,29 +349,12 @@     isPlaceholder Placeholder{}   = 1  argsP :: IsExpr e => Parser e e -> Parser e [NamedArg e]-argsP p = many (annotate (const $ text "<argument>") $-                  nothidden <|> hidden <|> instanceH)-    where-        isHidden (HiddenArgV _) = True-        isHidden _              = False--        isInstance (InstanceArgV _) = True-        isInstance _                = False--        nothidden = defaultArg . unnamed <$> do-            e <- p-            case exprView e of-                HiddenArgV   _ -> empty-                InstanceArgV _ -> empty-                _              -> return e--        instanceH = do-            InstanceArgV e <- exprView <$> sat' (isInstance . exprView)-            return $ makeInstance $ defaultArg e--        hidden = do-            HiddenArgV e <- exprView <$> sat' (isHidden . exprView)-            return $ hide $ defaultArg e+argsP p = many (mkArg <$> p)+  where+  mkArg e = case exprView e of+    HiddenArgV   e -> hide (defaultArg e)+    InstanceArgV e -> makeInstance (defaultArg e)+    _              -> defaultArg (unnamed e)  appP :: IsExpr e => Parser e e -> Parser e [NamedArg e] -> Parser e e appP p pa = foldl app <$> p <*> pa@@ -390,8 +362,9 @@         app e = unExprView . AppV e  atomP :: IsExpr e => (QName -> Bool) -> Parser e e-atomP p = annotate (const $ text "<atom>") $ do-    e <- notPlaceholder-    case exprView e of-        LocalV x | not (p x) -> empty-        _                    -> return e+atomP p =+  doc (text "<atom>") $+  satNoPlaceholder $ \e ->+  case exprView e of+    LocalV x | not (p x) -> Nothing+    _                    -> Just e
src/full/Agda/Syntax/Concrete/Operators/Parser/Monad.hs view
@@ -2,19 +2,17 @@ -- | The parser monad used by the operator parser ------------------------------------------------------------------------ -{-# LANGUAGE CPP                 #-}-{-# LANGUAGE DeriveGeneric       #-}-{-# LANGUAGE Rank2Types          #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP           #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE Rank2Types    #-}  module Agda.Syntax.Concrete.Operators.Parser.Monad   ( MemoKey(..)   , Parser   , parse-  , token+  , sat'   , sat-  , tok-  , annotate+  , doc   , memoise   , memoiseIfPrinting   , grammar@@ -54,10 +52,11 @@ parse :: forall tok a. Parser tok a -> [MaybePlaceholder tok] -> [a] parse = Parser.parse --- | Parses a single token.+-- | Parses a token satisfying the given predicate. The computed value+-- is returned. -token :: Parser tok (MaybePlaceholder tok)-token = Parser.token+sat' :: (MaybePlaceholder tok -> Maybe a) -> Parser tok a+sat' = Parser.sat'  -- | Parses a token satisfying the given predicate. @@ -65,17 +64,11 @@        Parser tok (MaybePlaceholder tok) sat = Parser.sat --- | Parses a given token.--tok :: (Eq tok, Show tok) =>-       MaybePlaceholder tok -> Parser tok (MaybePlaceholder tok)-tok = Parser.tok---- | Uses the given function to modify the printed representation (if--- any) of the given parser.+-- | Uses the given document as the printed representation of the+-- given parser. The document's precedence is taken to be 'atomP'. -annotate :: (Doc -> Doc) -> Parser tok a -> Parser tok a-annotate = Parser.annotate+doc :: Doc -> Parser tok a -> Parser tok a+doc = Parser.doc  -- | Memoises the given parser. --
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -74,9 +74,9 @@ prettyHiding :: LensHiding a => a -> (Doc -> Doc) -> Doc -> Doc prettyHiding a parens =   case getHiding a of-    Hidden    -> braces'-    Instance  -> dbraces-    NotHidden -> parens+    Hidden     -> braces'+    Instance{} -> dbraces+    NotHidden  -> parens  prettyRelevance :: LensRelevance a => a -> Doc -> Doc prettyRelevance a d =@@ -93,7 +93,6 @@  instance Pretty Relevance where   pretty Forced{}   = empty-  pretty UnusedArg  = empty   pretty Relevant   = empty   pretty Irrelevant = text "."   pretty NonStrict  = text ".."@@ -137,9 +136,9 @@                 sep [ lambda <+> fsep (map pretty bs) <+> arrow                     , nest 2 $ pretty e                     ]-            AbsurdLam _ NotHidden -> lambda <+> text "()"-            AbsurdLam _ Instance -> lambda <+> text "{{}}"-            AbsurdLam _ Hidden -> lambda <+> text "{}"+            AbsurdLam _ NotHidden  -> lambda <+> text "()"+            AbsurdLam _ Instance{} -> lambda <+> text "{{}}"+            AbsurdLam _ Hidden     -> lambda <+> text "{}"             ExtendedLam _ pes ->               lambda <+> bracesAndSemicolons (map (\(x,y,z,_) -> prettyClause x y z) pes)                    where prettyClause lhs rhs wh = sep [ pretty lhs@@ -286,15 +285,13 @@     pretty d : map (parens . pretty) ps ++     parens (pretty lhscore) : map (parens . pretty) ps' -instance Pretty [Declaration] where-  pretty = vcat . map pretty- instance Show ModuleApplication where show = show . pretty instance Pretty ModuleApplication where   pretty (SectionApp _ bs e) = fsep (map pretty bs) <+> text "=" <+> pretty e   pretty (RecordModuleIFS _ rec) = text "=" <+> pretty rec <+> text "{{...}}"  instance Pretty Declaration where+    prettyList = vcat . map pretty     pretty d =         case d of             TypeSig i x e ->@@ -311,8 +308,8 @@                   mkInst InstanceDef    d = sep [ text "instance", nest 2 d ]                   mkInst NotInstanceDef d = d -                  mkOverlap i d | argInfoOverlappable i = text "overlap" <+> d-                                | otherwise             = d+                  mkOverlap i d | isOverlappable i = text "overlap" <+> d+                                | otherwise        = d             FunClause lhs rhs wh _ ->                 sep [ pretty lhs                     , nest 2 $ pretty rhs@@ -438,12 +435,8 @@       hsep [ text "COMPILED_EXPORT", pretty x, text hs ]     pretty (CompiledTypePragma _ x hs) =       hsep [ text "COMPILED_TYPE", pretty x, text hs ]-    pretty (CompiledDeclareDataPragma _ x hs) =-      hsep [ text "COMPILED_DECLARE_DATA", pretty x, text hs ]     pretty (CompiledDataPragma _ x hs hcs) =       hsep $ [text "COMPILED_DATA", pretty x] ++ map text (hs : hcs)-    pretty (CompiledEpicPragma _ x e) =-      hsep [ text "COMPILED_EPIC", pretty x, text e ]     pretty (CompiledJSPragma _ x e) =       hsep [ text "COMPILED_JS", pretty x, text e ]     pretty (CompiledUHCPragma _ x e) =@@ -452,8 +445,14 @@       hsep $ [ text "COMPILED_DATA_UHC", pretty x] ++ map text (crd : crcs)     pretty (HaskellCodePragma _ s) =       vcat (text "HASKELL" : map text (lines s))+    pretty (CompilePragma _ b x e) =+      hsep [ text "COMPILE", text b, pretty x, text e ]+    pretty (ForeignPragma _ b s) =+      vcat $ text ("FOREIGN " ++ b) : map text (lines s)     pretty (StaticPragma _ i) =       hsep $ [text "STATIC", pretty i]+    pretty (InjectivePragma _ i) =+      hsep $ [text "INJECTIVE", pretty i]     pretty (InlinePragma _ i) =       hsep $ [text "INLINE", pretty i]     pretty (ImportPragma _ i) =@@ -462,6 +461,8 @@       hsep $ [text "IMPORT_UHC", text i]     pretty (ImpossiblePragma _) =       hsep $ [text "IMPOSSIBLE"]+    pretty (EtaPragma _ x) =+      hsep $ [text "ETA", pretty x]     pretty (TerminationCheckPragma _ tc) =       case tc of         TerminationCheck       -> __IMPOSSIBLE__@@ -473,7 +474,7 @@     pretty (DisplayPragma _ lhs rhs) = text "DISPLAY" <+> sep [ pretty lhs <+> text "=", nest 2 $ pretty rhs ]     pretty (NoPositivityCheckPragma _) = text "NO_POSITIVITY_CHECK"     pretty (PolarityPragma _ q occs) =-      hsep (text "NO_POSITIVITY_CHECK" : pretty q : map pretty occs)+      hsep (text "POLARITY" : pretty q : map pretty occs)  instance Pretty Fixity where     pretty (Fixity _ Unrelated   _)   = __IMPOSSIBLE__@@ -484,25 +485,13 @@             RightAssoc -> "infixr"             NonAssoc   -> "infix" -instance Pretty Occurrence where-  pretty Unused    = text "_"-  pretty Mixed     = text "*"-  pretty JustNeg   = text "-"-  pretty JustPos   = text "+"-  pretty StrictPos = text "++"--  -- No syntax has been assigned to GuardPos.--  pretty GuardPos  = __IMPOSSIBLE__- instance Pretty GenPart where     pretty (IdPart x)   = text x     pretty BindHole{}   = underscore     pretty NormalHole{} = underscore     pretty WildHole{}   = underscore -instance Pretty Notation where-    pretty = hcat . map pretty+    prettyList = hcat . map pretty  instance Pretty Fixity' where     pretty (Fixity' fix nota _)@@ -513,17 +502,15 @@  -- Andreas 2010-09-24: and in record fields instance Pretty a => Pretty (Arg a) where   prettyPrec p (Arg ai e) = prettyHiding ai id $ prettyPrec p' e-      where p' | getHiding ai == NotHidden = p-               | otherwise                 = 0+      where p' | visible ai = p+               | otherwise  = 0  instance Pretty e => Pretty (Named_ e) where     prettyPrec p (Named Nothing e) = prettyPrec p e     prettyPrec p (Named (Just s) e) = mparens (p > 0) $ sep [ text (rawNameToString $ rangedThing s) <+> text "=", pretty e ] -instance Pretty [Pattern] where-    pretty = fsep . map pretty- instance Pretty Pattern where+    prettyList = fsep . map pretty     pretty p =         case p of             IdentP x        -> pretty x@@ -541,15 +528,18 @@             QuoteP _        -> text "quote"             RecP _ fs       -> sep [ text "record", bracesAndSemicolons (map pretty fs) ] -prettyOpApp ::+prettyOpApp :: forall a .   Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc] prettyOpApp q es = merge [] $ prOp ms xs es   where+    -- ms: the module part of the name.     ms = init (qnameParts q)+    -- xs: the concrete name (alternation of @Id@ and @Hole@)     xs = case unqualify q of            Name _ xs -> xs            NoName{}  -> __IMPOSSIBLE__ +    prOp :: [Name] -> [NamePart] -> [NamedArg (MaybePlaceholder a)] -> [(Doc, Maybe PositionInName)]     prOp ms (Hole : xs) (e : es) = (pretty e, case namedArg e of                                                 Placeholder p -> Just p                                                 _             -> Nothing) :@@ -558,7 +548,9 @@     prOp ms (Id x : xs) es       = ( pretty (foldr Qual (QName (Name noRange $ [Id x])) ms)                                    , Nothing                                    ) : prOp [] xs es-    prOp _  []       []          = []+      -- Qualify the name part with the module.+      -- We then clear @ms@ such that the following name parts will not be qualified.+     prOp _  []       es          = map (\e -> (pretty e, Nothing)) es      -- Section underscores should be printed without surrounding
src/full/Agda/Syntax/Fixity.hs view
@@ -16,6 +16,8 @@ import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable++import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Position@@ -26,6 +28,7 @@  import Agda.Utils.Lens import Agda.Utils.List+import Agda.Utils.Pretty  #include "undefined.h" import Agda.Utils.Impossible@@ -41,14 +44,14 @@       -- ^ Range of the name in the fixity declaration       --   (used for correct highlighting, see issue #2140).     }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  instance Eq Fixity' where   Fixity' f n _ == Fixity' f' n' _ = f == f' && n == n'  -- | Decorating something with @Fixity'@. data ThingWithFixity x = ThingWithFixity x Fixity'-  deriving (Functor, Foldable, Traversable, Typeable, Show)+  deriving (Functor, Foldable, Traversable, Typeable, Data, Show)  -- | All the notation information related to a name. data NewNotation = NewNotation@@ -215,12 +218,12 @@     -- ^ No fixity declared.   | Related !Integer     -- ^ Fixity level declared as the @Integer@.-  deriving (Eq, Ord, Show, Typeable)+  deriving (Eq, Ord, Show, Typeable, Data)  -- | Associativity.  data Associativity = NonAssoc | LeftAssoc | RightAssoc-   deriving (Eq, Ord, Show, Typeable)+   deriving (Eq, Ord, Show, Typeable, Data)  -- | Fixity of operators. @@ -230,7 +233,7 @@   , fixityLevel :: !PrecedenceLevel   , fixityAssoc :: !Associativity   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  instance Eq Fixity where   f1 == f2 = compare f1 f2 == EQ@@ -253,70 +256,114 @@                 | LeftOperandCtx Fixity | RightOperandCtx Fixity                 | FunctionCtx | ArgumentCtx | InsideOperandCtx                 | WithFunCtx | WithArgCtx | DotPatternCtx-    deriving (Show, Typeable, Eq)+    deriving (Show, Typeable, Data, Eq) +instance Pretty Precedence where+  pretty = text . show++-- | When printing we keep track of a stack of precedences in order to be able+--   to decide whether it's safe to leave out parens around lambdas. An empty+--   stack is equivalent to `TopCtx`. Invariant: `notElem TopCtx`.+type PrecedenceStack = [Precedence]++pushPrecedence :: Precedence -> PrecedenceStack -> PrecedenceStack+pushPrecedence TopCtx _  = []+pushPrecedence p      ps = p : ps++headPrecedence :: PrecedenceStack -> Precedence+headPrecedence []      = TopCtx+headPrecedence (p : _) = p+ -- | The precedence corresponding to a possibly hidden argument. hiddenArgumentCtx :: Hiding -> Precedence-hiddenArgumentCtx NotHidden = ArgumentCtx-hiddenArgumentCtx Hidden    = TopCtx-hiddenArgumentCtx Instance  = TopCtx+hiddenArgumentCtx NotHidden  = ArgumentCtx+hiddenArgumentCtx Hidden     = TopCtx+hiddenArgumentCtx Instance{} = TopCtx  -- | Do we need to bracket an operator application of the given fixity --   in a context with the given precedence.-opBrackets :: Fixity -> Precedence -> Bool-opBrackets                   (Fixity _ (Related n1) LeftAssoc)-           (LeftOperandCtx   (Fixity _ (Related n2) LeftAssoc))  | n1 >= n2 = False-opBrackets                   (Fixity _ (Related n1) RightAssoc)-           (RightOperandCtx  (Fixity _ (Related n2) RightAssoc)) | n1 >= n2 = False-opBrackets f1-           (LeftOperandCtx  f2) | Related f1 <- fixityLevel f1-                                , Related f2 <- fixityLevel f2-                                , f1 > f2 = False-opBrackets f1-           (RightOperandCtx f2) | Related f1 <- fixityLevel f1-                                , Related f2 <- fixityLevel f2-                                , f1 > f2 = False-opBrackets _ TopCtx = False-opBrackets _ FunctionSpaceDomainCtx = False-opBrackets _ InsideOperandCtx       = False-opBrackets _ WithArgCtx             = False-opBrackets _ WithFunCtx             = False-opBrackets _ _                      = True+opBrackets :: Fixity -> PrecedenceStack -> Bool+opBrackets = opBrackets' False +-- | Do we need to bracket an operator application of the given fixity+--   in a context with the given precedence.+opBrackets' :: Bool ->   -- Is the last argument a parenless lambda?+               Fixity -> PrecedenceStack -> Bool+opBrackets' isLam f ps = brack f (headPrecedence ps)+  where+    false = isLam && lamBrackets' False ps -- require more parens for `e >>= λ x → e₁` than `e >>= e₁`+    brack                        (Fixity _ (Related n1) LeftAssoc)+               (LeftOperandCtx   (Fixity _ (Related n2) LeftAssoc))  | n1 >= n2 = false+    brack                        (Fixity _ (Related n1) RightAssoc)+               (RightOperandCtx  (Fixity _ (Related n2) RightAssoc)) | n1 >= n2 = false+    brack f1   (LeftOperandCtx  f2) | Related f1 <- fixityLevel f1+                                    , Related f2 <- fixityLevel f2+                                    , f1 > f2 = false+    brack f1   (RightOperandCtx f2) | Related f1 <- fixityLevel f1+                                    , Related f2 <- fixityLevel f2+                                    , f1 > f2 = false+    brack _ TopCtx                 = false+    brack _ FunctionSpaceDomainCtx = false+    brack _ InsideOperandCtx       = false+    brack _ WithArgCtx             = false+    brack _ WithFunCtx             = false+    brack _ _                      = True+ -- | Does a lambda-like thing (lambda, let or pi) need brackets in the -- given context? A peculiar thing with lambdas is that they don't--- need brackets in certain right operand contexts. However, we insert--- brackets anyway, for the following reasons:------ * Clarity.------ * Sometimes brackets are needed. Example: @m₁ >>= (λ x → x) >>= m₂@---   (here @_>>=_@ is left associative).-lamBrackets :: Precedence -> Bool-lamBrackets TopCtx = False-lamBrackets _      = True+-- need brackets in certain right operand contexts. To decide we need to look+-- at the stack of precedences and not just the current precedence.+-- Example: @m₁ >>= (λ x → x) >>= m₂@ (for @_>>=_@ left associative).+-- The first argument is the parenthesis preference. If True, we add+-- parentheses also in right operand contexts where they aren't strictly+-- needed.+lamBrackets' :: Bool -> PrecedenceStack -> Bool+lamBrackets' _      []       = False+lamBrackets' strict (p : ps) = case p of+  TopCtx                 -> __IMPOSSIBLE__+  ArgumentCtx            -> strict || lamBrackets' strict ps+  RightOperandCtx{}      -> strict || lamBrackets' strict ps+  FunctionSpaceDomainCtx -> True+  LeftOperandCtx{}       -> True+  FunctionCtx            -> True+  InsideOperandCtx       -> True+  WithFunCtx             -> True+  WithArgCtx             -> True+  DotPatternCtx          -> True +-- | Preference for adding parentheses.+lamBrackets :: PrecedenceStack -> Bool+lamBrackets = lamBrackets' True+ -- | Does a function application need brackets?-appBrackets :: Precedence -> Bool-appBrackets ArgumentCtx   = True-appBrackets DotPatternCtx = True-appBrackets _             = False+appBrackets :: PrecedenceStack -> Bool+appBrackets = appBrackets' False +-- | Does a function application need brackets?+appBrackets' :: Bool ->   -- Is the argument of the application a parenless lambda?+                PrecedenceStack -> Bool+appBrackets' isLam ps = brack (headPrecedence ps)+  where+    brack ArgumentCtx   = True+    brack DotPatternCtx = True+    brack _             = isLam && lamBrackets' False ps -- allow e + e₁ λ x → e₂+ -- | Does a with application need brackets?-withAppBrackets :: Precedence -> Bool-withAppBrackets TopCtx                 = False-withAppBrackets FunctionSpaceDomainCtx = False-withAppBrackets WithFunCtx             = False-withAppBrackets _                      = True+withAppBrackets :: PrecedenceStack -> Bool+withAppBrackets = brack . headPrecedence+  where+    brack TopCtx                 = False+    brack FunctionSpaceDomainCtx = False+    brack WithFunCtx             = False+    brack _                      = True  -- | Does a function space need brackets?-piBrackets :: Precedence -> Bool-piBrackets TopCtx   = False-piBrackets _        = True+piBrackets :: PrecedenceStack -> Bool+piBrackets [] = False+piBrackets _  = True -roundFixBrackets :: Precedence -> Bool-roundFixBrackets DotPatternCtx = True-roundFixBrackets _ = False+roundFixBrackets :: PrecedenceStack -> Bool+roundFixBrackets ps = DotPatternCtx == headPrecedence ps  instance HasRange Fixity where   getRange = fixityRange
src/full/Agda/Syntax/Fixity.hs-boot view
@@ -1,12 +1,14 @@ module Agda.Syntax.Fixity where  import Control.DeepSeq (NFData)+import Data.Data (Data)  import Agda.Syntax.Position ( KillRange )  data Fixity'  instance KillRange Fixity'+instance Data Fixity' instance NFData Fixity' instance Show Fixity' 
src/full/Agda/Syntax/IdiomBrackets.hs view
@@ -11,6 +11,8 @@ import Agda.Syntax.Scope.Monad import Agda.TypeChecking.Monad +import Agda.Utils.Pretty ( prettyShow )+ parseIdiomBrackets :: Range -> Expr -> ScopeM Expr parseIdiomBrackets r e = do   let qPure = QName $ Name noRange [Id "pure"]@@ -44,5 +46,6 @@ ensureInScope q = do   r <- resolveName q   case r of-    UnknownName -> genericError $ show q ++ " needs to be in scope to use idiom brackets (| ... |)"+    UnknownName -> genericError $+      prettyShow q ++ " needs to be in scope to use idiom brackets (| ... |)"     _ -> return ()
src/full/Agda/Syntax/Info.hs view
@@ -1,6 +1,5 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE UndecidableInstances #-}  {-| An info object contains additional information about a piece of abstract     syntax that isn't part of the actual syntax. For instance, it might contain@@ -12,6 +11,7 @@  import Prelude hiding (null) +import Data.Data (Data) import Data.Typeable (Typeable)  import qualified Agda.Syntax.Concrete.Name as C@@ -34,7 +34,7 @@   , metaNumber         :: Maybe MetaId   , metaNameSuggestion :: String   }-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  emptyMetaInfo :: MetaInfo emptyMetaInfo = MetaInfo@@ -55,7 +55,7 @@  --------------------------------------------------------------------------}  newtype ExprInfo = ExprRange Range-  deriving (Typeable, Show, Eq, Null)+  deriving (Typeable, Data, Show, Eq, Null)  exprNoRange :: ExprInfo exprNoRange = ExprRange noRange@@ -67,6 +67,35 @@   killRange (ExprRange r) = exprNoRange  {--------------------------------------------------------------------------+    Lambda information+ --------------------------------------------------------------------------}++-- | Information about lambdas.+data LamInfo = LamInfo { lamRange  :: Range+                       , lamOrigin :: Origin+                       , lamParens :: Bool    -- ^ Do we prefer the lambda with or without parens?+                       }+  deriving (Typeable, Data, Show, Eq, Ord)++-- | Default is system inserted and prefer parens.+defaultLamInfo :: Range -> LamInfo+defaultLamInfo r = LamInfo{ lamRange = r, lamOrigin = Inserted, lamParens = True }++-- | `LamInfo` with no range information.+defaultLamInfo_ :: LamInfo+defaultLamInfo_ = defaultLamInfo noRange++instance HasRange LamInfo where+  getRange = lamRange++instance KillRange LamInfo where+  killRange (LamInfo r o p) = LamInfo (killRange r) o p++instance LensOrigin LamInfo where+  getOrigin = lamOrigin+  setOrigin o i = i { lamOrigin = o }++{--------------------------------------------------------------------------     Module information  --------------------------------------------------------------------------} @@ -81,9 +110,9 @@   , minfoDirective :: Maybe ImportDirective     -- ^ Retained for @abstractToConcrete@ of 'ModuleMacro'.   }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq) -deriving instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo+deriving instance Show ModuleInfo  instance HasRange ModuleInfo where   getRange = minfoRange@@ -99,7 +128,7 @@ ---------------------------------------------------------------------------  newtype LetInfo = LetRange Range-  deriving (Typeable, Show, Eq, Null)+  deriving (Typeable, Data, Show, Eq, Null)  instance HasRange LetInfo where   getRange (LetRange r)   = r@@ -119,7 +148,7 @@   , defMacro    :: IsMacro   , defInfo     :: DeclInfo   }-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo mkDefInfo x f a ab r = DefInfo f a ab NotInstanceDef NotMacroDef (DeclInfo x r)@@ -145,7 +174,7 @@   { declName  :: Name   , declRange :: Range   }-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  instance HasRange DeclInfo where   getRange = declRange@@ -165,7 +194,7 @@   , mutualPositivityCheck :: PositivityCheck   , mutualRange           :: Range   }-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  -- | Default value for 'MutualInfo'. instance Null MutualInfo where@@ -182,7 +211,7 @@  --------------------------------------------------------------------------}  newtype LHSInfo = LHSRange Range-  deriving (Typeable, Show, Eq, Null)+  deriving (Typeable, Data, Show, Eq, Null)  instance HasRange LHSInfo where   getRange (LHSRange r) = r@@ -197,7 +226,7 @@ -- | For a general pattern we remember the source code position. newtype PatInfo   = PatRange Range-  deriving (Typeable, Eq, Null, Show, HasRange, KillRange)+  deriving (Typeable, Data, Eq, Null, Show, HasRange, KillRange)  -- | Empty range for patterns. patNoRange :: PatInfo@@ -210,7 +239,7 @@     ---  Or from a user written constructor or record pattern?   , patInfo     :: PatInfo   }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq)  instance Show ConPatInfo where   show (ConPatInfo po i) = applyWhen (po == ConOSystem) ("implicit " ++) $ show i
src/full/Agda/Syntax/Internal.hs view
@@ -3,6 +3,8 @@ {-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TemplateHaskell            #-}+{-# LANGUAGE UndecidableInstances       #-}  -- because of shortcomings of FunctionalDependencies+ #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-} #endif@@ -26,12 +28,8 @@ import Data.Maybe import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Sum(..)) --- base-4.7 defines the Num instance for Sum-#if !(MIN_VERSION_base(4,7,0))-import Data.Orphans             ()-#endif- import Data.Traversable+import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Position@@ -42,11 +40,6 @@  import Agda.Utils.Empty --- See Issue 1593.-#if !MIN_VERSION_transformers(0,4,1)-import Agda.Utils.Except ( Error(noMsg) )-#endif- import Agda.Utils.Functor import Agda.Utils.Geniplate import Agda.Utils.Lens@@ -78,7 +71,7 @@                               --   Empty list for data constructors.                               --   'Arg' is not needed here since it                               --   is stored in the constructor args.-  } deriving (Typeable)+  } deriving (Typeable, Data, Show)  instance Eq ConHead where   (==) = (==) `on` conName@@ -86,8 +79,8 @@ instance Ord ConHead where   (<=) = (<=) `on` conName -instance Show ConHead where-  show (ConHead c i fs) = show c ++ "(" ++ show i ++ ")" ++ show fs+instance Pretty ConHead where+  pretty = pretty . conName  instance HasRange ConHead where   getRange = getRange . conName@@ -129,7 +122,7 @@             --   version of the irrelevance axiom @.irrAx : .A -> A@.           | Shared !(Ptr Term)             -- ^ Explicit sharing-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  type ConInfo = ConOrigin @@ -138,11 +131,19 @@ data Elim' a   = Apply (Arg a)         -- ^ Application.   | Proj ProjOrigin QName -- ^ Projection.  'QName' is name of a record projection.-  deriving (Typeable, Show, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Elim = Elim' Term type Elims = [Elim]  -- ^ eliminations ordered left-to-right. +-- | This instance cheats on 'Proj', use with care.+--   'Proj's are always assumed to be 'UserWritten', since they have no 'ArgInfo'.+instance LensOrigin (Elim' a) where+  getOrigin (Apply a)   = getOrigin a+  getOrigin Proj{}      = UserWritten+  mapOrigin f (Apply a) = Apply $ mapOrigin f a+  mapOrigin f e@Proj{}  = e+ -- | Names in binders and arguments. type ArgName = String @@ -166,7 +167,7 @@                -- ^ The body has (at least) one free variable.                --   Danger: 'unAbs' doesn't shift variables properly            | NoAbs { absName :: ArgName, unAbs :: a }-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable)  instance Decoration Abs where   traverseF f (Abs   x a) = Abs   x <$> f a@@ -175,7 +176,7 @@ -- | Types are terms with a sort annotation. -- data Type' a = El { _getSort :: Sort, unEl :: a }-  deriving (Typeable, Show, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Type = Type' Term @@ -202,32 +203,10 @@ --   and so on. data Tele a = EmptyTel             | ExtendTel a (Abs (Tele a))  -- ^ 'Abs' is never 'NoAbs'.-  deriving (Typeable, Show, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Telescope = Tele (Dom Type) --- | A traversal for the names in a telescope.-mapAbsNamesM :: Applicative m => (ArgName -> m ArgName) -> Tele a -> m (Tele a)-mapAbsNamesM f EmptyTel                  = pure EmptyTel-mapAbsNamesM f (ExtendTel a (  Abs x b)) = ExtendTel a <$> (  Abs <$> f x <*> mapAbsNamesM f b)-mapAbsNamesM f (ExtendTel a (NoAbs x b)) = ExtendTel a <$> (NoAbs <$> f x <*> mapAbsNamesM f b)-  -- Ulf, 2013-11-06: Last case is really impossible but I'd rather find out we-  --                  violated that invariant somewhere other than here.--mapAbsNames :: (ArgName -> ArgName) -> Tele a -> Tele a-mapAbsNames f = runIdentity . mapAbsNamesM (Identity . f)---- Ulf, 2013-11-06--- The record parameter is named "" inside the record module so we can avoid--- printing it (issue 208), but we don't want that to show up in the type of--- the functions in the module (issue 892). This function is used on the record--- module telescope before adding it to a type in--- TypeChecking.Monad.Signature.addConstant (to handle functions defined in--- record modules) and TypeChecking.Rules.Record.checkProjection (to handle--- record projections).-replaceEmptyName :: ArgName -> Tele a -> Tele a-replaceEmptyName x = mapAbsNames $ \ y -> if null y then x else y- -- | Sorts. -- data Sort@@ -240,19 +219,19 @@     --   If the free variable occurs in the second sort,     --   the whole thing should reduce to Inf,     --   otherwise it's the normal lub.-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  -- | A level is a maximum expression of 0..n 'PlusLevel' expressions --   each of which is a number or an atom plus a number. -- --   The empty maximum is the canonical representation for level 0. newtype Level = Max [PlusLevel]-  deriving (Show, Typeable)+  deriving (Show, Typeable, Data)  data PlusLevel   = ClosedLevel Integer     -- ^ @n@, to represent @Setₙ@.   | Plus Integer LevelAtom  -- ^ @n + ℓ@.-  deriving (Show, Typeable)+  deriving (Show, Typeable, Data)  -- | An atomic term of type @Level@. data LevelAtom@@ -264,7 +243,7 @@     -- ^ A neutral term of type @Level@.   | UnreducedLevel Term     -- ^ Introduced by 'instantiate', removed by 'reduce'.-  deriving (Show, Typeable)+  deriving (Show, Typeable, Data)  --------------------------------------------------------------------------- -- * Blocked Terms@@ -289,7 +268,7 @@   | ReallyNotBlocked     -- ^ Reduction was not blocked, we reached a whnf     --   which can be anything but a stuck @'Def'@.-  deriving (Show, Typeable)+  deriving (Show, Typeable, Data)  -- | 'ReallyNotBlocked' is the unit. --   'MissingClauses' is dominant.@@ -306,7 +285,7 @@  instance Monoid NotBlocked where   -- ReallyNotBlocked is neutral-  mempty = ReallyNotBlocked+  mempty  = ReallyNotBlocked   mappend = (<>)  -- | Something where a meta variable may block reduction.@@ -340,12 +319,6 @@   mempty = notBlocked ()   mappend = (<>) --- See issues 1573 and 1674.-#if !MIN_VERSION_transformers(0,4,1)-instance Error Blocked_ where-  noMsg = mempty-#endif- -- | When trying to reduce @f es@, on match failed on one --   elimination @e ∈ es@ that came with info @r :: NotBlocked@. --   @stuckOn e r@ produces the new @NotBlocked@ info.@@ -398,7 +371,8 @@ --  For the purpose of the permutation and the body dot patterns count --  as variables. TODO: Change this! data Clause = Clause-    { clauseRange     :: Range+    { clauseLHSRange  :: Range+    , clauseFullRange :: Range     , clauseTel       :: Telescope       -- ^ @Δ@: The types of the pattern variables in dependency order.     , namedClausePats :: [NamedArg DeBruijnPattern]@@ -413,14 +387,19 @@       --   pattern on the lhs.     , clauseCatchall  :: Bool       -- ^ Clause has been labelled as CATCHALL.+    , clauseUnreachable :: Maybe Bool+      -- ^ Clause has been labelled as unreachable by the coverage checker.+      --   @Nothing@ means coverage checker has not run yet (clause may be unreachable).+      --   @Just False@ means clause is not unreachable.+      --   @Just True@ means clause is unreachable.     }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  clausePats :: Clause -> [Arg DeBruijnPattern] clausePats = map (fmap namedThing) . namedClausePats  instance HasRange Clause where-  getRange = clauseRange+  getRange = clauseLHSRange  -- | Pattern variables. type PatVarName = ArgName@@ -445,11 +424,15 @@   | ConP ConHead ConPatternInfo [NamedArg (Pattern' x)]     -- ^ @c ps@     --   The subpatterns do not contain any projection copatterns.+  | AbsurdP (Pattern' x)+    -- ^ @()@+    --   The argument is to keep track of the original pattern+    --   (before the absurd match).   | LitP Literal     -- ^ E.g. @5@, @"hello"@.   | ProjP ProjOrigin QName     -- ^ Projection copattern.  Can only appear by itself.-  deriving (Typeable, Show, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Pattern = Pattern' PatVarName     -- ^ The @PatVarName@ is a name suggestion.@@ -461,7 +444,7 @@ data DBPatVar = DBPatVar   { dbPatVarName  :: PatVarName   , dbPatVarIndex :: Int-  } deriving (Typeable, Show)+  } deriving (Typeable, Data, Show)  type DeBruijnPattern = Pattern' DBPatVar @@ -491,7 +474,7 @@     --   plugin (like Agsy).     --   Needed e.g. for with-clause stripping.   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  noConPatternInfo :: ConPatternInfo noConPatternInfo = ConPatternInfo Nothing Nothing@@ -507,17 +490,29 @@  -- | Extract pattern variables in left-to-right order. --   A 'DotP' is also treated as variable (see docu for 'Clause').-patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]-patternVars (Arg i (VarP x)     ) = [Arg i $ Left x]-patternVars (Arg i (DotP t)     ) = [Arg i $ Right t]-patternVars (Arg i (ConP _ _ ps)) = List.concat $ map (patternVars . fmap namedThing) ps-patternVars (Arg i (LitP l)     ) = []-patternVars (Arg i ProjP{}      ) = []+class PatternVars a b | b -> a where+  patternVars :: b -> [Arg (Either a Term)] +instance PatternVars a (Arg (Pattern' a)) where+  -- patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]+  patternVars (Arg i (VarP x)     ) = [Arg i $ Left x]+  patternVars (Arg i (DotP t)     ) = [Arg i $ Right t]+  patternVars (Arg i (AbsurdP p)  ) = patternVars (Arg i p)+  patternVars (Arg _ (ConP _ _ ps)) = patternVars ps+  patternVars (Arg _ (LitP _)     ) = []+  patternVars (Arg _ ProjP{}      ) = []++instance PatternVars a (NamedArg (Pattern' a)) where+  patternVars = patternVars . fmap namedThing++instance PatternVars a b => PatternVars a [b] where+  patternVars = concatMap patternVars+ -- | Does the pattern perform a match that could fail? properlyMatching :: DeBruijnPattern -> Bool-properlyMatching (VarP x) = isAbsurdPatternName $ dbPatVarName x+properlyMatching (VarP x) = False properlyMatching DotP{} = False+properlyMatching AbsurdP{} = True properlyMatching LitP{} = True properlyMatching (ConP _ ci ps) = isNothing (conPRecord ci) || -- not a record cons   List.any (properlyMatching . namedArg) ps  -- or one of subpatterns is a proper m@@ -539,8 +534,8 @@     -- ^ Identity substitution.     --   @Γ ⊢ IdS : Γ@ -  | EmptyS-    -- ^ Empty substitution, lifts from the empty context.+  | EmptyS Empty+    -- ^ Empty substitution, lifts from the empty context. First argument is @__IMPOSSIBLE__@.     --   Apply this to closed terms you want to use in a non-empty context.     --   @Γ ⊢ EmptyS : ()@ @@ -580,7 +575,15 @@     --     Γ, Ψρ ⊢ Lift |Ψ| ρ : Δ, Ψ     --   @ -  deriving (Show, Functor, Foldable, Traversable)+  deriving ( Show+           , Functor+           , Foldable+           , Traversable+           , Data+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  type Substitution = Substitution' Term type PatternSubstitution = Substitution' DeBruijnPattern@@ -603,7 +606,7 @@   = EqualityType     { eqtSort  :: Sort     -- ^ Sort of this type.     , eqtName  :: QName    -- ^ Builtin EQUALITY.-    , eqtLevel :: Arg Term -- ^ Hidden+    , eqtParams :: [Arg Term] -- ^ Hidden.  Empty or @Level@.     , eqtType  :: Arg Term -- ^ Hidden     , eqtLhs   :: Arg Term -- ^ NotHidden     , eqtRhs   :: Arg Term -- ^ NotHidden@@ -749,12 +752,79 @@ mkType :: Integer -> Sort mkType n = Type $ Max [ClosedLevel n | n > 0] +isSort :: Term -> Maybe Sort+isSort v = case ignoreSharing v of+  Sort s -> Just s+  _      -> Nothing+ impossibleTerm :: String -> Int -> Term impossibleTerm file line = Lit $ LitString noRange $ unlines   [ "An internal error has occurred. Please report this as a bug."   , "Location of the error: " ++ file ++ ":" ++ show line   ] +hackReifyToMeta :: Term+hackReifyToMeta = DontCare $ Lit $ LitNat noRange (-42)++isHackReifyToMeta :: Term -> Bool+isHackReifyToMeta (DontCare (Lit (LitNat r (-42)))) = r == noRange+isHackReifyToMeta _ = False++---------------------------------------------------------------------------+-- * Telescopes.+---------------------------------------------------------------------------++-- | A traversal for the names in a telescope.+mapAbsNamesM :: Applicative m => (ArgName -> m ArgName) -> Tele a -> m (Tele a)+mapAbsNamesM f EmptyTel                  = pure EmptyTel+mapAbsNamesM f (ExtendTel a (  Abs x b)) = ExtendTel a <$> (  Abs <$> f x <*> mapAbsNamesM f b)+mapAbsNamesM f (ExtendTel a (NoAbs x b)) = ExtendTel a <$> (NoAbs <$> f x <*> mapAbsNamesM f b)+  -- Ulf, 2013-11-06: Last case is really impossible but I'd rather find out we+  --                  violated that invariant somewhere other than here.++mapAbsNames :: (ArgName -> ArgName) -> Tele a -> Tele a+mapAbsNames f = runIdentity . mapAbsNamesM (Identity . f)++-- Ulf, 2013-11-06+-- The record parameter is named "" inside the record module so we can avoid+-- printing it (issue 208), but we don't want that to show up in the type of+-- the functions in the module (issue 892). This function is used on the record+-- module telescope before adding it to a type in+-- TypeChecking.Monad.Signature.addConstant (to handle functions defined in+-- record modules) and TypeChecking.Rules.Record.checkProjection (to handle+-- record projections).+replaceEmptyName :: ArgName -> Tele a -> Tele a+replaceEmptyName x = mapAbsNames $ \ y -> if null y then x else y++-- | Telescope as list.+type ListTel' a = [Dom (a, Type)]+type ListTel = ListTel' ArgName++telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope+telFromList' f = List.foldr extTel EmptyTel+  where+    extTel (Dom info (x, a)) = ExtendTel (Dom info a) . Abs (f x)++-- | Convert a list telescope to a telescope.+telFromList :: ListTel -> Telescope+telFromList = telFromList' id++-- | Convert a telescope to its list form.+telToList :: Telescope -> ListTel+telToList EmptyTel                    = []+telToList (ExtendTel arg (Abs x tel)) = fmap (x,) arg : telToList tel+telToList (ExtendTel _    NoAbs{}   ) = __IMPOSSIBLE__++-- | Drop the types from a telescope.+class TelToArgs a where+  telToArgs :: a -> [Arg ArgName]++instance TelToArgs ListTel where+  telToArgs = map $ \ dom -> Arg (domInfo dom) (fst $ unDom dom)++instance TelToArgs Telescope where+  telToArgs = telToArgs . telToList+ -- | Constructing a singleton telescope. class SgTel a where   sgTel :: a -> Telescope@@ -768,13 +838,6 @@ instance SgTel (Dom Type) where   sgTel dom = sgTel (stringToArgName "_", dom) -hackReifyToMeta :: Term-hackReifyToMeta = DontCare $ Lit $ LitNat noRange (-42)--isHackReifyToMeta :: Term -> Bool-isHackReifyToMeta (DontCare (Lit (LitNat r (-42)))) = r == noRange-isHackReifyToMeta _ = False- --------------------------------------------------------------------------- -- * Handling blocked terms. ---------------------------------------------------------------------------@@ -872,13 +935,6 @@     DontCare{} -> Nothing     Shared{}   -> __IMPOSSIBLE__ -{- PROBABLY USELESS-getElims :: Term -> (Elims -> Term, Elims)-getElims v = maybe default id $ hasElims v-  where-    default = (\ [] -> v, [])--}- -- | Drop 'Apply' constructor. (Unsafe!) argFromElim :: Elim' a -> Arg a argFromElim (Apply u) = u@@ -929,8 +985,8 @@ -- | A 'null' clause is one with no patterns and no rhs. --   Should not exist in practice. instance Null Clause where-  empty = Clause empty empty empty empty empty False-  null (Clause r tel pats body t catchall)+  empty = Clause empty empty empty empty empty empty False Nothing+  null (Clause _ _ tel pats body _ _ _)     =  null tel     && null pats     && null body@@ -1023,7 +1079,7 @@  instance TermSize a => TermSize (Substitution' a) where   tsize IdS                = 1-  tsize EmptyS             = 1+  tsize (EmptyS _)         = 1   tsize (Wk _ rho)         = 1 + tsize rho   tsize (t :# rho)         = 1 + tsize t + tsize rho   tsize (Strengthen _ rho) = 1 + tsize rho@@ -1076,7 +1132,7 @@  instance KillRange Substitution where   killRange IdS                  = IdS-  killRange EmptyS               = EmptyS+  killRange (EmptyS err)         = EmptyS err   killRange (Wk n rho)           = killRange1 (Wk n) rho   killRange (t :# rho)           = killRange2 (:#) t rho   killRange (Strengthen err rho) = killRange1 (Strengthen err) rho@@ -1093,12 +1149,14 @@     case p of       VarP x           -> killRange1 VarP x       DotP v           -> killRange1 DotP v+      AbsurdP p        -> killRange1 AbsurdP p       ConP con info ps -> killRange3 ConP con info ps       LitP l           -> killRange1 LitP l       ProjP o q        -> killRange1 (ProjP o) q  instance KillRange Clause where-  killRange (Clause r tel ps body t catchall) = killRange6 Clause r tel ps body t catchall+  killRange (Clause rl rf tel ps body t catchall unreachable) =+    killRange8 Clause rl rf tel ps body t catchall unreachable  instance KillRange a => KillRange (Tele a) where   killRange = fmap killRange@@ -1133,7 +1191,7 @@     where     pr p rho = case rho of       IdS              -> text "idS"-      EmptyS           -> text "emptyS"+      EmptyS err       -> text "emptyS"       t :# rho         -> mparens (p > 2) $ sep [ pr 2 rho P.<> text ",", prettyPrec 3 t ]       Strengthen _ rho -> mparens (p > 9) $ text "strS" <+> pr 10 rho       Wk n rho         -> mparens (p > 9) $ text ("wkS " ++ show n) <+> pr 10 rho@@ -1145,11 +1203,11 @@       Var x els -> text ("@" ++ show x) `pApp` els       Lam ai b   ->         mparens (p > 0) $-        sep [ text "λ" <+> prettyHiding ai id (text . show . absName $ b) <+> text "->"+        sep [ text "λ" <+> prettyHiding ai id (text . absName $ b) <+> text "->"             , nest 2 $ pretty (unAbs b) ]       Lit l                -> pretty l-      Def q els            -> text (show q) `pApp` els-      Con c ci vs          -> text (show $ conName c) `pApp` map Apply vs+      Def q els            -> pretty q `pApp` els+      Con c ci vs          -> pretty (conName c) `pApp` map Apply vs       Pi a (NoAbs _ b)     -> mparens (p > 0) $         sep [ prettyPrec 1 (unDom a) <+> text "->"             , nest 2 $ pretty b ]@@ -1168,9 +1226,9 @@ pDom :: LensHiding a => a -> Doc -> Doc pDom i =   case getHiding i of-    NotHidden -> parens-    Hidden    -> braces-    Instance  -> braces . braces+    NotHidden  -> parens+    Hidden     -> braces+    Instance{} -> braces . braces  instance Pretty Clause where   pretty Clause{clauseTel = tel, namedClausePats = ps, clauseBody = b, clauseType = t} =@@ -1223,15 +1281,15 @@       SizeUniv -> text "SizeUniv"       DLub s b -> mparens (p > 9) $         text "dlub" <+> prettyPrec 10 s-                    <+> parens (sep [ text ("λ " ++ show (absName b) ++ " ->")+                    <+> parens (sep [ text ("λ " ++ absName b ++ " ->")                                     , nest 2 $ pretty (unAbs b) ])  instance Pretty Type where   prettyPrec p (El _ a) = prettyPrec p a -instance Pretty Elim where+instance Pretty tm => Pretty (Elim' tm) where   prettyPrec p (Apply v)    = prettyPrec p v-  prettyPrec _ (Proj _o x)  = text ("." ++ show x)+  prettyPrec _ (Proj _o x)  = text ("." ++ prettyShow x)  instance Pretty DBPatVar where   prettyPrec _ x = text $ patVarNameToString (dbPatVarName x) ++ "@" ++ show (dbPatVarIndex x)@@ -1239,8 +1297,9 @@ instance Pretty a => Pretty (Pattern' a) where   prettyPrec n (VarP x)      = prettyPrec n x   prettyPrec _ (DotP t)      = text "." P.<> prettyPrec 10 t+  prettyPrec _ (AbsurdP _)   = text "()"   prettyPrec n (ConP c i nps)= mparens (n > 0) $-    text (show $ conName c) <+> fsep (map pretty ps)+    pretty (conName c) <+> fsep (map pretty ps)     where ps = map (fmap namedThing) nps   -- -- Version with printing record type:   -- prettyPrec _ (ConP c i ps) = (if b then braces else parens) $ prTy $@@ -1248,8 +1307,8 @@   --   where   --     b = maybe False (== ConOSystem) $ conPRecord i   --     prTy d = caseMaybe (conPType i) d $ \ t -> d  <+> text ":" <+> pretty t-  prettyPrec _ (LitP l)      = text (show l)-  prettyPrec _ (ProjP _o q)  = text ("." ++ show q)+  prettyPrec _ (LitP l)      = pretty l+  prettyPrec _ (ProjP _o q)  = text ("." ++ prettyShow q)  ----------------------------------------------------------------------------- -- * NFData instances
src/full/Agda/Syntax/Internal/Defs.hs view
@@ -1,10 +1,13 @@+{-# LANGUAGE TypeFamilies #-}  -- | Extract used definitions from terms.+ module Agda.Syntax.Internal.Defs where  import Control.Monad.Reader import Control.Monad.Writer +import Data.Foldable (Foldable) import qualified Data.Foldable as Fold  import Agda.Syntax.Common@@ -38,9 +41,17 @@   doMeta x = getDefs . ($ x) =<< asks lookupMeta  -- | Getting the used definitions.+--+-- Note: in contrast to 'Agda.Syntax.Internal.Generic.foldTerm'+-- @getDefs@ also collects from sorts in terms.+-- Thus, this is not an instance of @foldTerm@.+ class GetDefs a where   getDefs :: MonadGetDefs m => a -> m () +  default getDefs :: (MonadGetDefs m, Foldable f, GetDefs b, f b ~ a) => a -> m ()+  getDefs = Fold.mapM_ getDefs+ instance GetDefs Clause where   getDefs = getDefs . clauseBody @@ -89,22 +100,11 @@ -- collection instances  instance GetDefs a => GetDefs (Maybe a) where-  getDefs = Fold.mapM_ getDefs--instance GetDefs a => GetDefs [a] where-  getDefs = Fold.mapM_ getDefs-+instance GetDefs a => GetDefs [a]       where instance GetDefs a => GetDefs (Elim' a) where-  getDefs = Fold.mapM_ getDefs--instance GetDefs a => GetDefs (Arg a) where-  getDefs = getDefs . unArg--instance GetDefs a => GetDefs (Dom a) where-  getDefs = getDefs . unDom--instance GetDefs a => GetDefs (Abs a) where-  getDefs = getDefs . unAbs+instance GetDefs a => GetDefs (Arg a)   where+instance GetDefs a => GetDefs (Dom a)   where+instance GetDefs a => GetDefs (Abs a)   where  instance (GetDefs a, GetDefs b) => GetDefs (a,b) where   getDefs (a,b) = getDefs a >> getDefs b
src/full/Agda/Syntax/Internal/Generic.hs view
@@ -1,5 +1,8 @@-{-# LANGUAGE CPP               #-}+{-# LANGUAGE CPP          #-}+{-# LANGUAGE TypeFamilies #-} +-- | Tree traversal for internal syntax.+ module Agda.Syntax.Internal.Generic where  import Control.Applicative@@ -9,116 +12,85 @@ import Agda.Syntax.Common import Agda.Syntax.Internal +-- | Generic term traversal.+--+--   Note: ignores sorts in terms!+--   (Does not traverse into or collect from them.)+ class TermLike a where-  traverseTerm :: (Term -> Term) -> a -> a-  traverseTermM++  -- | Generic traversal with post-traversal action.+  --   Ignores sorts.+  traverseTermM :: (Monad m #if __GLASGOW_HASKELL__ <= 708-    :: (Applicative m, Monad m)-#else-    :: Monad m+    , Applicative m #endif-    => (Term -> m Term) -> a -> m a+    ) => (Term -> m Term) -> a -> m a++  default traverseTermM :: (Monad m, Traversable f, TermLike b, f b ~ a+#if __GLASGOW_HASKELL__ <= 708+    , Applicative m+#endif+    ) => (Term -> m Term) -> a -> m a+  traverseTermM = traverse . traverseTermM++  -- | Generic fold, ignoring sorts.   foldTerm :: Monoid m => (Term -> m) -> a -> m --- * Constants+  default foldTerm+    :: (Monoid m, Foldable f, TermLike b, f b ~ a) => (Term -> m) -> a -> m+  foldTerm = foldMap . foldTerm +-- Constants+ instance TermLike Bool where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty  instance TermLike Int where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty  instance TermLike Integer where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty  instance TermLike Char where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty  instance TermLike QName where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty --- * Functors--instance TermLike a => TermLike (Elim' a) where-  traverseTerm  f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)--instance TermLike a => TermLike (Arg a) where-  traverseTerm  f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)--instance TermLike a => TermLike (Dom a) where-  traverseTerm  f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)+-- Functors -instance TermLike a => TermLike [a] where-  traverseTerm f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)+instance TermLike a => TermLike (Elim' a)   where+instance TermLike a => TermLike (Arg a)     where+instance TermLike a => TermLike (Dom a)     where+instance TermLike a => TermLike [a]         where+instance TermLike a => TermLike (Maybe a)   where+instance TermLike a => TermLike (Abs a)     where+instance TermLike a => TermLike (Ptr a)     where+instance TermLike a => TermLike (Blocked a) where -instance TermLike a => TermLike (Maybe a) where-  traverseTerm f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)+-- Tuples  instance (TermLike a, TermLike b) => TermLike (a, b) where-  traverseTerm f (x, y) = (traverseTerm f x, traverseTerm f y)   traverseTermM f (x, y) = (,) <$> traverseTermM f x <*> traverseTermM f y   foldTerm f (x, y) = foldTerm f x `mappend` foldTerm f y  instance (TermLike a, TermLike b, TermLike c) => TermLike (a, b, c) where-  traverseTerm f (x, y, z) = (traverseTerm f x, traverseTerm f y, traverseTerm f z)   traverseTermM f (x, y, z) = (,,) <$> traverseTermM f x <*> traverseTermM f y <*> traverseTermM f z   foldTerm f (x, y, z) = mconcat [foldTerm f x, foldTerm f y, foldTerm f z]  instance (TermLike a, TermLike b, TermLike c, TermLike d) => TermLike (a, b, c, d) where-  traverseTerm f (x, y, z, u) = (traverseTerm f x, traverseTerm f y, traverseTerm f z, traverseTerm f u)   traverseTermM f (x, y, z, u) = (,,,) <$> traverseTermM f x <*> traverseTermM f y <*> traverseTermM f z <*> traverseTermM f u   foldTerm f (x, y, z, u) = mconcat [foldTerm f x, foldTerm f y, foldTerm f z, foldTerm f u] -instance TermLike a => TermLike (Abs a) where-  traverseTerm f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)--instance TermLike a => TermLike (Ptr a) where-  traverseTerm f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)--instance TermLike a => TermLike (Blocked a) where-  traverseTerm f = fmap (traverseTerm f)-  traverseTermM f = traverse (traverseTermM f)-  foldTerm f = foldMap (foldTerm f)---- * Real terms+-- Real terms  instance TermLike Term where-  traverseTerm f t = case t of-    Var i xs    -> f $ Var i $ traverseTerm f xs-    Def c xs    -> f $ Def c $ traverseTerm f xs-    Con c ci xs -> f $ Con c ci $ traverseTerm f xs-    Lam h b     -> f $ Lam h $ traverseTerm f b-    Pi a b      -> f $ uncurry Pi $ traverseTerm f (a, b)-    MetaV m xs  -> f $ MetaV m $ traverseTerm f xs-    Level l     -> f $ Level $ traverseTerm f l-    Lit _       -> f t-    Sort _      -> f t-    DontCare mv -> f $ DontCare $ traverseTerm f mv-    Shared p    -> f $ Shared $ traverseTerm f p    traverseTermM f t = case t of     Var i xs    -> f =<< Var i <$> traverseTermM f xs@@ -147,14 +119,10 @@     Shared p    -> foldTerm f p  instance TermLike Level where-  traverseTerm f  (Max as) = Max $ traverseTerm f as   traverseTermM f (Max as) = Max <$> traverseTermM f as   foldTerm f      (Max as) = foldTerm f as  instance TermLike PlusLevel where-  traverseTerm f l = case l of-    ClosedLevel{} -> l-    Plus n l      -> Plus n $ traverseTerm f l   traverseTermM f l = case l of     ClosedLevel{} -> return l     Plus n l      -> Plus n <$> traverseTermM f l@@ -162,11 +130,6 @@   foldTerm f (Plus _ l)    = foldTerm f l  instance TermLike LevelAtom where-  traverseTerm f l = case l of-    MetaLevel m vs   -> MetaLevel m $ traverseTerm f vs-    NeutralLevel r v -> NeutralLevel r $ traverseTerm f v-    BlockedLevel m v -> BlockedLevel m $ traverseTerm f v-    UnreducedLevel v -> UnreducedLevel $ traverseTerm f v   traverseTermM f l = case l of     MetaLevel m vs   -> MetaLevel m <$> traverseTermM f vs     NeutralLevel r v -> NeutralLevel r <$> traverseTermM f v@@ -179,40 +142,28 @@     UnreducedLevel v -> foldTerm f v  instance TermLike Type where-  traverseTerm f (El s t) = El s $ traverseTerm f t   traverseTermM f (El s t) = El s <$> traverseTermM f t   foldTerm f (El s t) = foldTerm f t  instance TermLike EqualityView where -  traverseTerm f v = case v of-    OtherType t -> OtherType-      (traverseTerm f t)-    EqualityType s eq l t a b -> EqualityType s eq-      (traverseTerm f l)-      (traverseTerm f t)-      (traverseTerm f a)-      (traverseTerm f b)-   traverseTermM f v = case v of     OtherType t -> OtherType       <$> traverseTermM f t     EqualityType s eq l t a b -> EqualityType s eq-      <$> traverseTermM f l+      <$> traverse (traverseTermM f) l       <*> traverseTermM f t       <*> traverseTermM f a       <*> traverseTermM f b    foldTerm f v = case v of     OtherType t -> foldTerm f t-    EqualityType s eq l t a b -> foldTerm f [l, t, a, b]+    EqualityType s eq l t a b -> foldTerm f (l ++ [t, a, b])  -- | Put it in a monad to make it possible to do strictly.-copyTerm+copyTerm :: (TermLike a, Monad m #if __GLASGOW_HASKELL__ <= 708-  :: (TermLike a, Applicative m, Monad m)-#else-  :: (TermLike a, Monad m)+  , Applicative m #endif-  => a -> m a+  ) => a -> m a copyTerm = traverseTermM return
src/full/Agda/Syntax/Internal/Names.hs view
@@ -1,6 +1,8 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE TypeFamilies #-}  -- | Extract all names from things.+ module Agda.Syntax.Internal.Names where  import Data.Foldable@@ -16,6 +18,7 @@ import Agda.Syntax.Internal import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Abstract as A+ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.CompiledClause @@ -26,19 +29,18 @@ class NamesIn a where   namesIn :: a -> Set QName -namesInFoldable :: (Foldable f, NamesIn a) => f a -> Set QName-namesInFoldable x = Set.unions $ foldMap ((:[]) . namesIn) x--instance NamesIn a => NamesIn (Maybe a)       where namesIn = namesInFoldable-instance NamesIn a => NamesIn [a]             where namesIn = namesInFoldable-instance NamesIn a => NamesIn (Arg a)         where namesIn = namesInFoldable-instance NamesIn a => NamesIn (Dom a)         where namesIn = namesInFoldable-instance NamesIn a => NamesIn (Named n a)     where namesIn = namesInFoldable-instance NamesIn a => NamesIn (Abs a)         where namesIn = namesInFoldable-instance NamesIn a => NamesIn (WithArity a)   where namesIn = namesInFoldable-instance NamesIn a => NamesIn (Tele a)        where namesIn = namesInFoldable+  default namesIn :: (Foldable f, NamesIn b, f b ~ a) => a -> Set QName+  namesIn = foldMap namesIn -instance NamesIn a => NamesIn (C.FieldAssignment' a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Maybe a)              where+instance NamesIn a => NamesIn [a]                    where+instance NamesIn a => NamesIn (Arg a)                where+instance NamesIn a => NamesIn (Dom a)                where+instance NamesIn a => NamesIn (Named n a)            where+instance NamesIn a => NamesIn (Abs a)                where+instance NamesIn a => NamesIn (WithArity a)          where+instance NamesIn a => NamesIn (Tele a)               where+instance NamesIn a => NamesIn (C.FieldAssignment' a) where  instance (NamesIn a, NamesIn b) => NamesIn (a, b) where   namesIn (x, y) = Set.union (namesIn x) (namesIn y)@@ -46,19 +48,28 @@ instance (NamesIn a, NamesIn b, NamesIn c) => NamesIn (a, b, c) where   namesIn (x, y, z) = namesIn (x, (y, z)) +-- Andreas, 2017-07-27+-- In the following clauses, the choice of fields is not obvious+-- to the reader.  Please comment on the choices.+--+-- Also, this would be more robust if these were constructor-style+-- matches instead of record-style matches.+-- If someone adds a field containing names, this would go unnoticed.+ instance NamesIn Definition where   namesIn def = namesIn (defType def, theDef def)  instance NamesIn Defn where   namesIn def = case def of     Axiom -> Set.empty+    -- Andreas 2017-07-27, Q: which names can be in @cc@ which are not already in @cl@?     Function    { funClauses = cl, funCompiled = cc }              -> namesIn (cl, cc)     Datatype    { dataClause = cl, dataCons = cs, dataSort = s }   -> namesIn (cl, cs, s)     Record      { recClause = cl, recConHead = c, recFields = fs } -> namesIn (cl, c, fs)       -- Don't need recTel since those will be reachable from the constructor     Constructor { conSrcCon = c, conData = d }                     -> namesIn (c, d)     Primitive   { primClauses = cl, primCompiled = cc }            -> namesIn (cl, cc)-    AbstractDefn -> __IMPOSSIBLE__+    AbstractDefn{} -> __IMPOSSIBLE__  instance NamesIn Clause where   namesIn Clause{ clauseTel = tel, namedClausePats = ps, clauseBody = b, clauseType = t } =@@ -69,6 +80,8 @@   namesIn (Done _ v) = namesIn v   namesIn Fail       = Set.empty +-- Andreas, 2017-07-27+-- Why ignoring the litBranches? instance NamesIn a => NamesIn (Case a) where   namesIn Branches{ conBranches = bs, catchAllBranch = c } =     namesIn (Map.toList bs, c)@@ -78,6 +91,7 @@     VarP{}        -> Set.empty     LitP l        -> namesIn l     DotP v        -> namesIn v+    AbsurdP p     -> namesIn p     ConP c _ args -> namesIn (c, args)     ProjP _ f     -> namesIn f @@ -134,13 +148,11 @@   namesIn (Apply arg) = namesIn arg   namesIn (Proj _ f)  = namesIn f -instance NamesIn QName   where namesIn x = Set.singleton x+instance NamesIn QName   where namesIn x = Set.singleton x  -- interesting case instance NamesIn ConHead where namesIn h = namesIn (conName h) -instance NamesIn a => NamesIn (Open a) where-  namesIn = namesIn . openThing--instance NamesIn a => NamesIn (Local a) where namesIn = namesIn . dget+instance NamesIn a => NamesIn (Open a)  where+instance NamesIn a => NamesIn (Local a) where  instance NamesIn DisplayForm where   namesIn (Display _ ps v) = namesIn (ps, v)
src/full/Agda/Syntax/Internal/Pattern.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP                    #-}+{-# LANGUAGE TypeFamilies           #-}  -- because of type equality ~ {-# LANGUAGE UndecidableInstances   #-}  -- because of func. deps.  #if __GLASGOW_HASKELL__ <= 708@@ -11,8 +12,10 @@ import Control.Monad.State  import Data.Maybe-import Data.List-import Data.Traversable (traverse)+import Data.Monoid+import qualified Data.List as List+import Data.Foldable (Foldable, foldMap)+import Data.Traversable (Traversable, traverse)  import Agda.Syntax.Common import Agda.Syntax.Abstract (IsProjP(..))@@ -79,17 +82,19 @@   -- ^ Intended, but unpractical due to the absence of type-level lambda, is:   --   @labelPatVars :: f (Pattern' x) -> State [i] (f (Pattern' (i,x)))@ -instance LabelPatVars a b i => LabelPatVars (Arg a) (Arg b) i where+  default labelPatVars+    :: (Traversable f, LabelPatVars a' b' i, f a' ~ a, f b' ~ b)+    => a -> State [i] b   labelPatVars = traverse labelPatVars-  unlabelPatVars = fmap unlabelPatVars -instance LabelPatVars a b i => LabelPatVars (Named x a) (Named x b) i where-  labelPatVars = traverse labelPatVars+  default unlabelPatVars+    :: (Traversable f, LabelPatVars a' b' i, f a' ~ a, f b' ~ b)+    => b -> a   unlabelPatVars = fmap unlabelPatVars -instance LabelPatVars a b i => LabelPatVars [a] [b] i where-  labelPatVars = traverse labelPatVars-  unlabelPatVars = fmap unlabelPatVars+instance LabelPatVars a b i => LabelPatVars (Arg a) (Arg b) i         where+instance LabelPatVars a b i => LabelPatVars (Named x a) (Named x b) i where+instance LabelPatVars a b i => LabelPatVars [a] [b] i                 where  instance LabelPatVars Pattern DeBruijnPattern Int where   labelPatVars p =@@ -97,6 +102,7 @@       VarP x       -> do i <- next                          return $ VarP (DBPatVar x i)       DotP t       -> DotP t <$ next+      AbsurdP p    -> AbsurdP <$> labelPatVars p       ConP c mt ps -> ConP c mt <$> labelPatVars ps       LitP l       -> return $ LitP l       ProjP o q    -> return $ ProjP o q@@ -142,12 +148,13 @@   where     ixs   = concatMap (getIndices . namedThing . unArg) ps     n     = size $ catMaybes ixs-    picks = forM (downFrom n) $ \ i -> findIndex (Just i ==) ixs+    picks = forM (downFrom n) $ \ i -> List.findIndex (Just i ==) ixs      getIndices :: DeBruijnPattern -> [Maybe Int]     getIndices (VarP x)      = [Just $ dbPatVarIndex x]     getIndices (ConP c _ ps) = concatMap (getIndices . namedThing . unArg) ps     getIndices (DotP _)      = [Nothing | countDots]+    getIndices (AbsurdP p)   = getIndices p     getIndices (LitP _)      = []     getIndices ProjP{}       = [] @@ -169,6 +176,7 @@       map (argFromElim . patternToElim . fmap namedThing) ps   where ci = fromConPatternInfo cpi patternToElim (Arg ai (DotP t)     ) = Apply $ Arg ai t+patternToElim (Arg ai (AbsurdP p))   = patternToElim $ Arg ai p patternToElim (Arg ai (LitP l)     ) = Apply $ Arg ai $ Lit l patternToElim (Arg ai (ProjP o dest)) = Proj o dest @@ -183,17 +191,112 @@   Apply x -> unArg x   Proj{}  -> __IMPOSSIBLE__ + class MapNamedArg f where   mapNamedArg :: (NamedArg a -> NamedArg b) -> NamedArg (f a) -> NamedArg (f b) +-- | Modify the content of @VarP@, and the closest surrounding @NamedArg@.+--+--   Note: the @mapNamedArg@ for @Pattern'@ is not expressible simply+--   by @fmap@ or @traverse@ etc., since @ConP@ has @NamedArg@ subpatterns,+--   which are taken into account by @mapNamedArg@.+ instance MapNamedArg Pattern' where   mapNamedArg f np =     case namedArg np of-      VarP  x     -> map2 VarP $ f $ map2 (const x) np-      DotP  t     -> map2 (const $ DotP t) np  -- just Haskell type conversion-      LitP  l     -> map2 (const $ LitP l) np  -- ditto-      ProjP o q   -> map2 (const $ ProjP o q) np -- ditto-      ConP c i ps -> map2 (const $ ConP c i $ map (mapNamedArg f) ps) np+      VarP  x     -> updateNamedArg VarP $ f $ setNamedArg np x+      AbsurdP p   -> updateNamedArg AbsurdP $ mapNamedArg f $ setNamedArg np p+      DotP  t     -> setNamedArg np $ DotP t     -- just Haskell type conversion+      LitP  l     -> setNamedArg np $ LitP l     -- ditto+      ProjP o q   -> setNamedArg np $ ProjP o q  -- ditto+      ConP c i ps -> setNamedArg np $ ConP c i $ map (mapNamedArg f) ps+++-- | Generic pattern traversal.+--+--   Pre-applies a pattern modification, recurses, and post-applies another one.++class PatternLike a b where++  -- | Fold pattern.+  foldrPattern+    :: Monoid m+    => (Pattern' a -> m -> m)+         -- ^ Combine a pattern and the value computed from its subpatterns.+    -> b -> m++  default foldrPattern+    :: (Monoid m, Foldable f, PatternLike a p, f p ~ b)+    => (Pattern' a -> m -> m) -> b -> m+  foldrPattern = foldMap . foldrPattern++  -- | Traverse pattern.+  traversePatternM :: (Monad m+#if __GLASGOW_HASKELL__ <= 708+    , Applicative m, Functor m+#endif+    ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.+      -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.+      -> b -> m b++  default traversePatternM :: (Traversable f, PatternLike a p, f p ~ b, Monad m+#if __GLASGOW_HASKELL__ <= 708+    , Applicative m, Functor m+#endif+    ) => (Pattern' a -> m (Pattern' a))+      -> (Pattern' a -> m (Pattern' a))+      -> b -> m b+  traversePatternM pre post = traverse $ traversePatternM pre post++-- | Compute from each subpattern a value and collect them all in a monoid.++foldPattern :: (PatternLike a b, Monoid m) => (Pattern' a -> m) -> b -> m+foldPattern f = foldrPattern $ \ p m -> f p `mappend` m++-- | Traverse pattern(s) with a modification before the recursive descent.++preTraversePatternM :: (PatternLike a b, Monad m+#if __GLASGOW_HASKELL__ <= 708+  , Applicative m, Functor m+#endif+  ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.+    -> b -> m b+preTraversePatternM pre = traversePatternM pre return++-- | Traverse pattern(s) with a modification after the recursive descent.++postTraversePatternM :: (PatternLike a b, Monad m+#if __GLASGOW_HASKELL__ <= 708+  , Applicative m, Functor m+#endif+  ) => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.+    -> b -> m b+postTraversePatternM = traversePatternM return++-- This is where the action is:++instance PatternLike a (Pattern' a) where++  foldrPattern f p = f p $ case p of+    ConP _ _ ps -> foldrPattern f ps+    VarP _      -> mempty+    AbsurdP _   -> mempty+    LitP _      -> mempty+    DotP _      -> mempty+    ProjP _ _   -> mempty++  traversePatternM pre post = pre >=> recurse >=> post     where-    map2 :: (a -> b) -> NamedArg a -> NamedArg b-    map2 = fmap . fmap+    recurse p = case p of+      ConP c ci ps -> ConP c ci <$> traversePatternM pre post ps+      VarP  _      -> return p+      LitP  _      -> return p+      DotP  _      -> return p+      AbsurdP _    -> return p+      ProjP _ _    -> return p++-- Boilerplate instances:++instance PatternLike a b => PatternLike a [b]         where+instance PatternLike a b => PatternLike a (Arg b)     where+instance PatternLike a b => PatternLike a (Named x b) where
src/full/Agda/Syntax/Internal/SanityCheck.hs view
@@ -18,7 +18,7 @@  #include "undefined.h" -sanityCheckVars :: (Pretty a, FreeVS a) => Telescope -> a -> TCM ()+sanityCheckVars :: (Pretty a, Free a) => Telescope -> a -> TCM () sanityCheckVars tel v =   case filter bad (Set.toList $ allFreeVars v) of     [] -> return ()@@ -33,13 +33,13 @@     bad x = x < 0 || x >= n  -- | Check that @Γ ⊢ ρ : Δ@.-sanityCheckSubst :: (Pretty a, FreeVS a) => Telescope -> Substitution' a -> Telescope -> TCM ()+sanityCheckSubst :: (Pretty a, Free a) => Telescope -> Substitution' a -> Telescope -> TCM () sanityCheckSubst gamma rho delta = go gamma rho delta   where     go gamma rho delta =       case rho of         IdS      -> unless (size gamma == size delta) $ err $ text "idS:" <+> hang (pretty gamma <+> text "/=") 2 (pretty delta)-        EmptyS   -> unless (size delta == 0) $ err $ text "emptyS:" <+> pretty delta <+> text "is not empty"+        EmptyS _ -> unless (size delta == 0) $ err $ text "emptyS:" <+> pretty delta <+> text "is not empty"         v :# rho -> do           unless (size delta > 0) $ err $ text "consS: empty target"           sanityCheckVars gamma v
src/full/Agda/Syntax/Literal.hs view
@@ -4,7 +4,9 @@  import Control.DeepSeq import Data.Char+ import Data.Typeable (Typeable)+import Data.Data (Data)  import Numeric.IEEE ( IEEE(identicalIEEE) ) @@ -20,26 +22,26 @@              | LitChar   Range !Char              | LitQName  Range QName              | LitMeta   Range AbsolutePath MetaId-  deriving (Typeable)+  deriving (Typeable, Data)  instance Show Literal where   showsPrec p l = showParen (p > 9) $ case l of-    LitNat _ n    -> sh "LitNat" n-    LitFloat _ x  -> sh "LitFloat" x-    LitString _ s -> sh "LitString" s-    LitChar _ c   -> sh "LitChar" c-    LitQName _ q  -> sh "LitQName" q-    LitMeta _ _ x -> sh "LitMeta" x+    LitNat _ n    -> sh "LitNat _" n+    LitFloat _ x  -> sh "LitFloat _" x+    LitString _ s -> sh "LitString _" s+    LitChar _ c   -> sh "LitChar _" c+    LitQName _ q  -> sh "LitQName _" q+    LitMeta _ _ x -> sh "LitMeta _ _" x     where       sh :: Show a => String -> a -> ShowS       sh c x = showString (c ++ " ") . shows x  instance Pretty Literal where     pretty (LitNat _ n)     = text $ show n-    pretty (LitFloat _ x)   = text $ show x+    pretty (LitFloat _ d)   = text $ show d     pretty (LitString _ s)  = text $ showString' s ""     pretty (LitChar _ c)    = text $ "'" ++ showChar' c "" ++ "'"-    pretty (LitQName _ x)   = text $ show x+    pretty (LitQName _ x)   = pretty x     pretty (LitMeta _ _ x)  = pretty x  showString' :: String -> ShowS
src/full/Agda/Syntax/Notation.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE CPP                 #-} {-# LANGUAGE DeriveDataTypeable  #-}-{-# LANGUAGE ScopedTypeVariables #-}  {-| As a concrete name, a notation is a non-empty list of alternating 'IdPart's and holes.     In contrast to concrete names, holes can be binders.@@ -19,8 +18,10 @@ import Control.DeepSeq import Control.Monad -import Data.List+import qualified Data.List as List import Data.Maybe++import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Common@@ -58,7 +59,7 @@   | WildHole !Int     -- ^ An underscore in binding position.   | IdPart RawName-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  instance KillRange GenPart where   killRange p = case p of@@ -187,8 +188,8 @@       -- The hole names are the keys of the @holeMap@.       uniqueHoleNames = distinct [ x | (x, _) <- holeMap, x /= "_" ] -      isExprLinear   xs = sort [ i | x <- xs, isNormalHole x, let Just i = holeTarget x ] == holeNumbers-      isLambdaLinear xs = sort [ x | BindHole x <- xs ] ==+      isExprLinear   xs = List.sort [ i | x <- xs, isNormalHole x, let Just i = holeTarget x ] == holeNumbers+      isLambdaLinear xs = List.sort [ x | BindHole x <- xs ] ==                           [ i | (i, h) <- numberedHoles,                                 LambdaHole x _ <- [namedArg h], x /= "_" ] 
src/full/Agda/Syntax/Parser.hs view
@@ -28,7 +28,8 @@ import Control.Monad.State import Control.Monad.Reader import Control.Monad.Writer hiding ((<>))-import Data.List++import qualified Data.List as List import Data.Typeable ( Typeable )  import Agda.Syntax.Position@@ -42,12 +43,12 @@ import Agda.Syntax.Parser.Tokens  import Agda.Utils.Except-  ( Error(strMsg)-  , ExceptT+  ( ExceptT   , MonadError(catchError, throwError)   , runExceptT   ) import Agda.Utils.FileName+import Agda.Utils.IO.UTF8 (readTextFile) import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Pretty @@ -120,7 +121,7 @@ parseLiterateWithComments :: LiterateParser [Token] parseLiterateWithComments p layers = do   code <- map Left <$> parseLiterateWithoutComments p layers-  let literate = Right <$> filter (not . isCode) layers+  let literate = Right <$> filter (not . isCodeLayer) layers   let (terms, overlaps) = interleaveRanges code literate   forM_ (map fst overlaps) $ \c ->     warning$ OverlappingTokensWarning { warnRange = getRange c }@@ -133,7 +134,7 @@                    | m <- terms ]  readFilePM :: AbsolutePath -> PM String-readFilePM path = wrapIOM (ReadFileError path) (readFile (filePath path))+readFilePM path = wrapIOM (ReadFileError path) (readTextFile (filePath path))  parseLiterateFile :: Processor -> Parser a -> AbsolutePath -> PM a parseLiterateFile po p path = readFilePM path >>= parseLiterate p p . po (startPos (Just path))@@ -147,7 +148,7 @@  parseFile' :: (Show a) => Parser a -> AbsolutePath -> PM a parseFile' p file =-  if ".agda" `isSuffixOf` filePath file then+  if ".agda" `List.isSuffixOf` filePath file then     Agda.Syntax.Parser.parseFile p file   else     go literateProcessors@@ -156,7 +157,7 @@                      errPath = file                    , errValidExts = parseFileExts                    }-    go ((ext, po):pos) | ext `isSuffixOf` filePath file = parseLiterateFile po p file+    go ((ext, po):pos) | ext `List.isSuffixOf` filePath file = parseLiterateFile po p file     go (_:pos) = go pos  ------------------------------------------------------------------------
src/full/Agda/Syntax/Parser/Comments.hs view
@@ -10,7 +10,7 @@ module Agda.Syntax.Parser.Comments     where -import Data.List+import qualified Data.List as List  import {-# SOURCE #-} Agda.Syntax.Parser.LexActions import Agda.Syntax.Parser.Monad@@ -45,7 +45,7 @@               i = posToInterval (lexSrcFile inp) p1 p2               s = case (p1, p2) of                     (Pn { posPos = p1 }, Pn { posPos = p2 }) ->-                      genericTake (p2 - p1) $ lexInput inp+                      List.genericTake (p2 - p1) $ lexInput inp           return $ TokComment (i, s)          else           lexToken
src/full/Agda/Syntax/Parser/LexActions.hs view
@@ -9,7 +9,7 @@     , token     , withInterval, withInterval', withInterval_     , withLayout-    , begin, end, endWith+    , begin, end, beginWith, endWith     , begin_, end_     , lexError       -- ** Specialized actions@@ -161,13 +161,18 @@     do  pushLexState code         skipTo inp' - -- | Exit the current state throwing away the current lexeme. end_ :: LexAction Token end_ _ inp' _ =     do  popLexState         skipTo inp' ++-- | Enter a new state and perform the given action.+beginWith :: LexState -> LexAction a -> LexAction a+beginWith code a inp inp' n =+    do  pushLexState code+        a inp inp' n  -- | Exit the current state and perform the given action. endWith :: LexAction a -> LexAction a
src/full/Agda/Syntax/Parser/LexActions.hs-boot view
@@ -14,10 +14,11 @@ withInterval' :: (String -> a) -> ((Interval, a) -> tok) -> LexAction tok withLayout :: LexAction r -> LexAction r -begin   :: LexState -> LexAction Token-endWith :: LexAction a -> LexAction a-begin_  :: LexState -> LexAction Token-end_    :: LexAction Token+begin     :: LexState -> LexAction Token+beginWith :: LexState -> LexAction a -> LexAction a+endWith   :: LexAction a -> LexAction a+begin_    :: LexState -> LexAction Token+end_      :: LexAction Token  keyword    :: Keyword -> LexAction Token symbol     :: Symbol -> LexAction Token
src/full/Agda/Syntax/Parser/Lexer.x view
@@ -20,8 +20,6 @@     , AlexReturn(..), alexScanUser     ) where --- -- import Data.List- import Agda.Syntax.Parser.Alex import Agda.Syntax.Parser.Comments #ifndef __HADDOCK__@@ -72,25 +70,26 @@ <pragma_> $white_notab ;  -- Pragmas-<0,code>    "{-#"                      { begin pragma }-<pragma_>   "{-#"                      { symbol SymOpenPragma }+<0,code,pragma_> "{-#"                 { beginWith pragma $ symbol SymOpenPragma } <pragma_>   "#-}"                      { endWith $ symbol SymClosePragma } <pragma_>   "BUILTIN"                  { keyword KwBUILTIN } <pragma_>   "CATCHALL"                 { keyword KwCATCHALL } <pragma_>   "COMPILED"                 { keyword KwCOMPILED } <pragma_>   "COMPILED_DATA"            { keyword KwCOMPILED_DATA } <pragma_>   "COMPILED_DATA_UHC"        { keyword KwCOMPILED_DATA_UHC }-<pragma_>   "COMPILED_DECLARE_DATA"    { keyword KwCOMPILED_DECLARE_DATA }-<pragma_>   "COMPILED_EPIC"            { keyword KwCOMPILED_EPIC } <pragma_>   "COMPILED_EXPORT"          { keyword KwCOMPILED_EXPORT } <pragma_>   "COMPILED_JS"              { keyword KwCOMPILED_JS } <pragma_>   "COMPILED_TYPE"            { keyword KwCOMPILED_TYPE } <pragma_>   "COMPILED_UHC"             { keyword KwCOMPILED_UHC }-<pragma_>   "HASKELL"                  { keyword KwHASKELL }+<pragma_>   "COMPILE"                  { keyword KwCOMPILE }+<pragma_>   "FOREIGN"                  { keyword KwFOREIGN } <pragma_>   "DISPLAY"                  { keyword KwDISPLAY }+<pragma_>   "ETA"                      { keyword KwETA }+<pragma_>   "HASKELL"                  { keyword KwHASKELL } <pragma_>   "IMPORT"                   { keyword KwIMPORT } <pragma_>   "IMPORT_UHC"               { keyword KwIMPORT_UHC } <pragma_>   "IMPOSSIBLE"               { keyword KwIMPOSSIBLE }+<pragma_>   "INJECTIVE"                { keyword KwINJECTIVE } <pragma_>   "INLINE"                   { keyword KwINLINE } <pragma_>   "LINE"                     { keyword KwLINE } <pragma_>   "MEASURE"                  { keyword KwMEASURE }
src/full/Agda/Syntax/Parser/Literate.hs view
@@ -2,17 +2,21 @@ {-# LANGUAGE ViewPatterns #-} -- | Preprocessors for literate code formats module Agda.Syntax.Parser.Literate (-  literateProcessors,-  literateExts,-  literateExtsShortList,-  literateSrcFile,-  literateTeX,-  literateRsT,-  illiterate,-  isCode,-  Processor,-  Layer(..),-  LayerType(..)+   literateProcessors+  ,literateExts+  ,literateExtsShortList+  ,literateSrcFile+  ,literateTeX+  ,literateRsT+  ,literateMd+  ,illiterate+  ,atomizeLayers+  ,Processor+  ,Layers+  ,Layer(..)+  ,LayerRole(..)+  ,isCode+  ,isCodeLayer   )   where @@ -29,31 +33,37 @@ #include "undefined.h" import Agda.Utils.Impossible -data LayerType = Markup | Comment | Code+-- | Role of a character in the file+data LayerRole = Markup | Comment | Code                 deriving (Show, Eq) +-- | A sequence of characters in a file playing the same role data Layer = Layer {-  layerType    :: LayerType+  layerRole    :: LayerRole  ,interval     :: Interval  ,layerContent :: String } deriving (Show) +-- | A list of contiguous layers+type Layers = [Layer]+ instance HasRange Layer where   getRange = getRange . interval  -- | Annotates a tokenized string with position information.-mkLayers :: Position -> [(LayerType, String)] -> [Layer]+mkLayers :: Position -> [(LayerRole, String)] -> Layers mkLayers pos [] = emptyLiterate pos+-- Ignore empty layers mkLayers pos ((_,""):xs) = mkLayers pos xs mkLayers pos ((ty,s):xs) = let next = movePosByString pos s in                            (Layer ty (Interval pos next) s):(mkLayers next xs) --- | Checks if a layer corresponds to Agda code-isCode :: Layer -> Bool-isCode Layer{layerType=Code}    = True-isCode Layer{layerType=Markup } = False-isCode Layer{layerType=Comment} = False+unMkLayers :: Layers -> [(LayerRole, String)]+unMkLayers = map ((,) <$> layerRole <*> layerContent) +atomizeLayers :: Layers -> [(LayerRole, Char)]+atomizeLayers = (>>= fmap <$> ((,) . fst) <*> snd) . unMkLayers+ -- | Type of a literate preprocessor: --   Invariants: --@@ -78,16 +88,27 @@                  [(""    , literateTeX)                  ,(".rst", literateRsT)                  ,(".tex", literateTeX)+                 ,(".md", literateMd)                  ] +-- | Returns `True` if a role corresponds to Agda code+isCode :: LayerRole -> Bool+isCode Code    = True+isCode Markup  = False+isCode Comment = False++-- | Returns `True` a layer contains Agda code+isCodeLayer :: Layer -> Bool+isCodeLayer = isCode . layerRole+ -- | Blanks the non-code parts of a given file, preserving positions of --   characters corresponding to code. This way, there is a direct --   correspondence between source positions and positions in the --   processed result. illiterate :: [Layer] -> String illiterate xs = concat [-  (if isCode m then id else bleach) layerContent-  | m@Layer{layerContent} <- xs]+  (if isCode layerRole then id else bleach) layerContent+  | Layer{layerRole,layerContent} <- xs]  -- | Replaces non-space characters in a string with spaces. bleach :: String -> String@@ -138,35 +159,74 @@ literateTeX :: Position -> String -> [Layer] literateTeX pos s = mkLayers pos$ tex s   where-  tex :: String -> [(LayerType, String)]+  tex :: String -> [(LayerRole, String)]   tex [] = []   tex s  = let (line, rest) = getLine s in     case r_begin `matchM` line of-      Just (getAllTextSubmatches -> [_, pre, markup]) ->-        (Comment, pre):(Markup, markup):code rest+      Just (getAllTextSubmatches -> [_, pre, _, markup, blanks]) ->+        (Comment, pre):(Markup, markup):(Code, blanks):code rest       Just _                 -> __IMPOSSIBLE__       Nothing                -> (Comment, line):tex rest -  r_begin = rex "(.*)([[:space:]]*\\\\begin\\{code\\}[[:space:]]*)"+  r_begin = rex "(([^\\%]|\\\\.)*)(\\\\begin\\{code\\})([[:space:]]*)"  -  code :: String -> [(LayerType, String)]+  code :: String -> [(LayerRole, String)]   code [] = []   code s = let (line, rest) = getLine s in     case r_end `matchM` line of-      Just (getAllTextSubmatches -> [_, markup, post]) ->-        (Markup, markup):(Comment, post):tex rest+      Just (getAllTextSubmatches -> [_, code, markup, post]) ->+        (Code,code):(Markup, markup):(Comment, post):tex rest       Just _ -> __IMPOSSIBLE__       Nothing             -> (Code, line):code rest -  r_end   = rex "([[:space:]]*\\\\end\\{code\\}[[:space:]]*)(.*)"+  r_end   = rex "([[:blank:]]*)(\\\\end\\{code\\})(.*)" +-- | Preprocessor for Markdown+literateMd :: Position -> String -> [Layer]+literateMd pos s = mkLayers pos$ md s+  where+  md :: String -> [(LayerRole, String)]+  md [] = []+  md s  = let (line, rest) = getLine s in+    case md_begin `matchM` line of+      Just (getAllTextSubmatches -> [_, pre, markup, _]) ->+        (Comment, pre):(Markup, markup):code rest+      Just _                 -> __IMPOSSIBLE__+      Nothing                ->+        (Comment, line):+          if md_begin_other `match` line+            then code_other rest+            else md rest +  md_begin = rex "(.*)([[:space:]]*```(agda)?[[:space:]]*)"+  md_begin_other = rex "[[:space:]]*```[a-zA-Z0-9-]*[[:space:]]*"++  code :: String -> [(LayerRole, String)]+  code [] = []+  code s = let (line, rest) = getLine s in+    case md_end `matchM` line of+      Just (getAllTextSubmatches -> [_, markup]) ->+        (Markup, markup):md rest+      Just _ -> __IMPOSSIBLE__+      Nothing             -> (Code, line):code rest++  -- A non-Agda code block.+  code_other :: String -> [(LayerRole, String)]+  code_other [] = []+  code_other s = let (line, rest) = getLine s in+    (Comment, line):+      if md_end `match` line+        then md rest+        else code_other rest++  md_end   = rex "([[:space:]]*```[[:space:]]*)"+ -- | Preprocessor for reStructuredText literateRsT :: Position -> String -> [Layer] literateRsT pos s = mkLayers pos$ rst s   where-  rst :: String -> [(LayerType, String)]+  rst :: String -> [(LayerRole, String)]   rst [] = []   rst s  = maybe_code s @@ -189,7 +249,7 @@     -- | Finds the next indented block in the input-  code :: String -> [(LayerType, String)]+  code :: String -> [(LayerRole, String)]   code [] = []   code s = let (line, rest) = getLine s in     if all isSpace line then@@ -202,7 +262,7 @@               (indented xs rest)    -- | Process an indented block-  indented :: String -> String -> [(LayerType, String)]+  indented :: String -> String -> [(LayerRole, String)]   indented _   [] = []   indented ind s  = let (line, rest) = getLine s in       if all isSpace line then
src/full/Agda/Syntax/Parser/Monad.hs view
@@ -33,7 +33,9 @@  import Control.Exception (catch) import Data.Int+ import Data.Typeable ( Typeable )+import Data.Data (Data)  import Control.Monad.State import Control.Applicative@@ -41,10 +43,6 @@ import Agda.Syntax.Position  import Agda.Utils.Except ( MonadError(catchError, throwError) )-#if !(MIN_VERSION_mtl(2,2,1))-import Agda.Utils.Except ( Error(noMsg) )-#endif- import Agda.Utils.FileName import qualified Agda.Utils.IO.UTF8 as UTF8 import qualified Agda.Utils.Maybe.Strict as Strict@@ -137,7 +135,7 @@   OverlappingTokensWarning   { warnRange    :: !(Range' SrcFile)                     -- ^ The range of the bigger overlapping token-  }+  } deriving (Typeable, Data)  -- | The result of parsing something. data ParseResult a  = ParseOk ParseState a@@ -197,7 +195,7 @@   pretty InvalidExtensionError{errPath,errValidExts} = vcat       [ pretty errPath <> colon <+>         text "Unsupported extension."-      , text "Supported extensions are:" <+> prettyList errValidExts+      , text "Supported extensions are:" <+> prettyList_ errValidExts       ]   pretty ReadFileError{errPath,errIOError} = vcat       [ text "Cannot read file" <+> pretty errPath@@ -213,12 +211,6 @@     where p = startPos (Just errPath)   getRange ReadFileError{errPath} = posToRange p p     where p = startPos (Just errPath)--#if !(MIN_VERSION_mtl(2,2,1))--- Stupid ErrorT!-instance Error ParseError where-  noMsg = __IMPOSSIBLE__-#endif  instance Show ParseWarning where   show = prettyShow
src/full/Agda/Syntax/Parser/Parser.y view
@@ -133,17 +133,19 @@     'COMPILED'                { TokKeyword KwCOMPILED $$ }     'COMPILED_DATA'           { TokKeyword KwCOMPILED_DATA $$ }     'COMPILED_DATA_UHC'       { TokKeyword KwCOMPILED_DATA_UHC $$ }-    'COMPILED_DECLARE_DATA'   { TokKeyword KwCOMPILED_DECLARE_DATA $$ }-    'COMPILED_EPIC'           { TokKeyword KwCOMPILED_EPIC $$ }     'COMPILED_EXPORT'         { TokKeyword KwCOMPILED_EXPORT $$ }     'COMPILED_JS'             { TokKeyword KwCOMPILED_JS $$ }     'COMPILED_TYPE'           { TokKeyword KwCOMPILED_TYPE $$ }     'COMPILED_UHC'            { TokKeyword KwCOMPILED_UHC $$ }-    'HASKELL'                 { TokKeyword KwHASKELL $$ }     'DISPLAY'                 { TokKeyword KwDISPLAY $$ }+    'ETA'                     { TokKeyword KwETA $$ }+    'HASKELL'                 { TokKeyword KwHASKELL $$ }     'IMPORT'                  { TokKeyword KwIMPORT $$ }     'IMPORT_UHC'              { TokKeyword KwIMPORT_UHC $$ }+    'FOREIGN'                 { TokKeyword KwFOREIGN $$ }+    'COMPILE'                 { TokKeyword KwCOMPILE $$ }     'IMPOSSIBLE'              { TokKeyword KwIMPOSSIBLE $$ }+    'INJECTIVE'               { TokKeyword KwINJECTIVE $$ }     'INLINE'                  { TokKeyword KwINLINE $$ }     'MEASURE'                 { TokKeyword KwMEASURE $$ }     'NO_TERMINATION_CHECK'    { TokKeyword KwNO_TERMINATION_CHECK $$ }@@ -263,17 +265,19 @@     | 'COMPILED'                { TokKeyword KwCOMPILED $1 }     | 'COMPILED_DATA'           { TokKeyword KwCOMPILED_DATA $1 }     | 'COMPILED_DATA_UHC'       { TokKeyword KwCOMPILED_DATA_UHC $1 }-    | 'COMPILED_DECLARE_DATA'   { TokKeyword KwCOMPILED_DECLARE_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 }     | 'COMPILED_UHC'            { TokKeyword KwCOMPILED_UHC $1 }-    | 'HASKELL'                 { TokKeyword KwHASKELL $1 }     | 'DISPLAY'                 { TokKeyword KwDISPLAY $1 }+    | 'ETA'                     { TokKeyword KwETA $1 }+    | 'HASKELL'                 { TokKeyword KwHASKELL $1 }     | 'IMPORT'                  { TokKeyword KwIMPORT $1 }     | 'IMPORT_UHC'              { TokKeyword KwIMPORT_UHC $1 }+    | 'FOREIGN'                 { TokKeyword KwFOREIGN $1 }+    | 'COMPILE'                 { TokKeyword KwCOMPILE $1 }     | 'IMPOSSIBLE'              { TokKeyword KwIMPOSSIBLE $1 }+    | 'INJECTIVE'               { TokKeyword KwINJECTIVE $1 }     | 'INLINE'                  { TokKeyword KwINLINE $1 }     | 'MEASURE'                 { TokKeyword KwMEASURE $1 }     | 'NO_TERMINATION_CHECK'    { TokKeyword KwNO_TERMINATION_CHECK $1 }@@ -328,6 +332,7 @@ File :: { ([Pragma], [Declaration]) } File : vopen TopLevel maybe_vclose { takeOptionsPragmas $2 } +maybe_vclose :: { () } maybe_vclose : {- empty -} { () }              | vclose      { () } @@ -347,6 +352,7 @@     brace. However when the parser sees the 'in' there will be a parse error.     This is our cue to close the layout block. -}+close :: { () } close : vclose  { () }       | error   {% popContext } @@ -355,6 +361,7 @@ -- brace, so we don't have to distinguish between the two semi colons. You can't -- use a virtual semi colon in a block started by a concrete brace, but this is -- simply because the lexer will not generate virtual semis in this case.+semi :: { Interval } semi : ';'    { $1 }      | vsemi  { $1 } @@ -566,6 +573,12 @@ Strings : {- empty -}    { [] }         | string Strings { $1 : $2 } +ForeignCode :: { [(Interval, String)] }+ForeignCode+  : {- empty -} { [] }+  | string ForeignCode { $1 : $2 }+  | '{-#' ForeignCode '#-}' ForeignCode { [($1, "{-#")] ++ $2 ++ [($3, "#-}")] ++ $4 }+ PragmaName :: { Name } PragmaName : string {% mkName $1 } @@ -607,6 +620,7 @@   | Expr1 %prec LOWEST                  { $1 }  -- Level 1: Application+Expr1 :: { Expr } Expr1  : WithExprs {% case $1 of                       { [e]    -> return e                       ; e : es -> return $ WithApp (fuseRange e es) e es@@ -625,6 +639,7 @@     | Expr3 Application { $1 : $2 }  -- Level 2: Lambdas and lets+Expr2 :: { Expr } Expr2     : '\\' LamBindings Expr        { Lam (getRange ($1,$2,$3)) $2 $3 }     | ExtendedOrAbsurdLam          { $1 }@@ -638,7 +653,7 @@ ExtendedOrAbsurdLam :: { Expr } ExtendedOrAbsurdLam     : '\\'  '{' LamClauses '}'     { ExtendedLam (getRange ($1,$2,$3,$4)) (reverse $3) }-    | '\\' 'where' vopen LamClauses close { ExtendedLam (getRange ($1, $2, $4)) (reverse $4) }+    | '\\' 'where' vopen LamWhereClauses close { ExtendedLam (getRange ($1, $2, $4)) (reverse $4) }     | '\\' AbsurdLamBindings       {% case $2 of                                        Left (bs, h) -> if null bs then return $ AbsurdLam r h else                                                        return $ Lam r bs (AbsurdLam r h)@@ -654,11 +669,22 @@     : Expr3              { [$1] }     | Expr3 Application3 { $1 : $2 } +-- Christian Sattler, 2017-08-04, issue #2671+-- We allow empty lists of expressions for the LHS of extended lambda clauses.+-- I am not sure what Application3 is otherwise used for, so I keep the+-- original type and create this copy solely for extended lambda clauses.+Application3PossiblyEmpty :: { [Expr] }+Application3PossiblyEmpty+    :                                 { [] }+    | Expr3 Application3PossiblyEmpty { $1 : $2 }+ -- Level 3: Atoms+Expr3Curly :: { Expr } Expr3Curly     : '{' Expr '}'                      { HiddenArg (getRange ($1,$2,$3)) (maybeNamed $2) }     | '{' '}'                           { let r = fuseRange $1 $2 in HiddenArg r $ unnamed $ Absurd r } +Expr3NoCurly :: { Expr } Expr3NoCurly     : QId                               { Ident $1 }     | literal                           { Lit $1 }@@ -682,6 +708,7 @@     | 'record' '{' RecordAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 }     | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$2,$3,$4,$5)) $2 $4 } +Expr3 :: { Expr } Expr3     : Expr3Curly                        { $1 }     | Expr3NoCurly                      { $1 }@@ -724,8 +751,10 @@  --------------------------------------------------------------------------}  -- "Delta ->" to avoid conflict between Delta -> Gamma and Delta -> A.+TeleArrow :: { Telescope } TeleArrow : Telescope1 '->' { $1 } +Telescope1 :: { Telescope } Telescope1     : TypedBindingss    { {-TeleBind-} $1 } @@ -747,7 +776,7 @@                              setRelevance Irrelevant $3 }     | '.' '{{' TBind DoubleCloseBrace                            { setRange (getRange ($2,$3,$4)) $-                             setHiding Instance $+                             makeInstance $                              setRelevance Irrelevant $3 }     | '..' '(' TBindWithHiding ')'   { setRange (getRange ($2,$3,$4)) $                              setRelevance NonStrict $3 }@@ -756,12 +785,12 @@                              setRelevance NonStrict $3 }     | '..' '{{' TBind DoubleCloseBrace                            { setRange (getRange ($2,$3,$4)) $-                             setHiding Instance $+                             makeInstance $                              setRelevance NonStrict $3 }     | '(' TBindWithHiding ')'        { setRange (getRange ($1,$2,$3)) $2 }     | '{{' TBind DoubleCloseBrace                            { setRange (getRange ($1,$2,$3)) $-                             setHiding Instance $2 }+                             makeInstance $2 }     | '{' TBind '}'        { setRange (getRange ($1,$2,$3)) $                              setHiding Hidden $2 }     | '(' Open ')'               { tLet (getRange ($1,$3)) $2 }@@ -820,7 +849,7 @@   | TypedBindings               { [Right $ DomainFull $1] }   | '(' ')'                     { [Left NotHidden] }   | '{' '}'                     { [Left Hidden] }-  | '{{' DoubleCloseBrace       { [Left Instance] }+  | '{{' DoubleCloseBrace       { [Left (Instance NoOverlap)] }  -- Like LamBinds, but could also parse an absurd LHS of an extended lambda @{ p1 ... () }@ LamBindsAbsurd :: { Either [Either Hiding LamBinding] [Expr] }@@ -833,16 +862,16 @@   | TypedBindings               { Left [Right $ DomainFull $1] }   | '(' ')'                     { Left [Left NotHidden] }   | '{' '}'                     { Left [Left Hidden] }-  | '{{' DoubleCloseBrace       { Left [Left Instance] }+  | '{{' DoubleCloseBrace       { Left [Left (Instance NoOverlap)] }  -- FNF, 2011-05-05: No where clauses in extended lambdas for now NonAbsurdLamClause :: { (LHS,RHS,WhereClause,Bool) } NonAbsurdLamClause-  : Application3 '->' Expr {% do+  : Application3PossiblyEmpty '->' Expr {% do       p <- exprToLHS (RawApp (getRange $1) $1) ;       return (p [] [], RHS $3, NoWhere, False)         }-  | CatchallPragma Application3 '->' Expr {% do+  | CatchallPragma Application3PossiblyEmpty '->' Expr {% do       p <- exprToLHS (RawApp (getRange $2) $2) ;       return (p [] [], RHS $4, NoWhere, True)         }@@ -874,6 +903,12 @@    | NonAbsurdLamClause { [$1] } --   | {- empty -} { [] } +-- Parses all extended lambda clauses including a single absurd clause. For λ+-- where this is not taken care of in AbsurdLambda+LamWhereClauses :: { [(LHS,RHS,WhereClause,Bool)] }+LamWhereClauses+   : LamWhereClauses semi LamClause { $3 : $1 }+   | LamClause { [$1] }  ForallBindings :: { [LamBinding] } ForallBindings@@ -902,17 +937,6 @@                              Left lbs -> lbs                              Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"                           }-{-    : BId             { [DomainFree NotHidden Relevant $ mkBoundName_ $1]  }-    | '.' BId           { [DomainFree NotHidden Irrelevant $ mkBoundName_ $2]  }-    | '..' BId          { [DomainFree NotHidden NonStrict $ mkBoundName_ $2]  }-    | '{' CommaBIds '}' { map (DomainFree Hidden Relevant . mkBoundName_) $2 }-    | '{{' CommaBIds DoubleCloseBrace { map (DomainFree (setHiding Instance defaultArgInfo) . mkBoundName_) $2 }-    | '.' '{' CommaBIds '}' { map (DomainFree Hidden Irrelevant . mkBoundName_) $3 }-    | '.' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance Irrelevant . mkBoundName_) $3 }-    | '..' '{' CommaBIds '}' { map (DomainFree Hidden NonStrict . mkBoundName_) $3 }-    | '..' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance NonStrict . mkBoundName_) $3 }-    | '..' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance NonStrict . mkBoundName_) $3 }-  -}  -- A domain free binding is either x or {x1 .. xn} DomainFreeBindingAbsurd :: { Either [LamBinding] [Expr]}@@ -922,11 +946,11 @@     | '..' BId          { Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ $2]  }     | '{' CommaBIdAndAbsurds '}'          { mapLeft (map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) $2 }-    | '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (setHiding Instance $ defaultArgInfo) . mkBoundName_) $2 }+    | '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (makeInstance $ defaultArgInfo) . mkBoundName_) $2 }     | '.' '{' CommaBIds '}' { Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) $3 }-    | '.' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (setHiding Instance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) $3 }+    | '.' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (makeInstance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) $3 }     | '..' '{' CommaBIds '}' { Left $ map (DomainFree (setHiding Hidden $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) $3 }-    | '..' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree  (setHiding Instance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) $3 }+    | '..' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree  (makeInstance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) $3 }   {--------------------------------------------------------------------------@@ -990,6 +1014,7 @@     : {- empty -}       { [] }     | CommaImportNames1 { $1 } +CommaImportNames1 :: { [ImportedName] } CommaImportNames1     : ImportName                        { [$1] }     | ImportName ';' CommaImportNames1  { $1 : $3 }@@ -1082,12 +1107,17 @@ ArgTypeSigs :: { [Arg Declaration] } ArgTypeSigs   : ArgIds ':' Expr { map (fmap (\ x -> TypeSig defaultArgInfo x $3)) $1 }-  | 'overlap' ArgIds ':' Expr {-      let setOverlap (Arg i x) = Arg i{ argInfoOverlappable = True } x in-      map (setOverlap . fmap (\ x -> TypeSig defaultArgInfo x $4)) $2 }+  | 'overlap' ArgIds ':' Expr {%+      let setOverlap x =+            case getHiding x of+              Instance _ -> return $ makeInstance' YesOverlap x+              _          ->+                parseErrorAt (fromJust $ rStart' $ getRange $1)+                             "The 'overlap' keyword only applies to instance fields (fields marked with {{ }})"+      in T.traverse (setOverlap . fmap (\ x -> TypeSig defaultArgInfo x $4)) $2 }   | 'instance' ArgTypeSignatures {     let-      setInstance (TypeSig info x t) = TypeSig (setHiding Instance info) x t+      setInstance (TypeSig info x t) = TypeSig (makeInstance info) x t       setInstance _ = __IMPOSSIBLE__ in     map (fmap setInstance) $2 } @@ -1153,8 +1183,9 @@ Fields :: { [Declaration] } Fields : 'field' ArgTypeSignatures             { let-                inst i | getHiding i == Instance = InstanceDef-                       | otherwise               = NotInstanceDef+                inst i = case getHiding i of+                           Instance _ -> InstanceDef+                           _          -> NotInstanceDef                 toField (Arg info (TypeSig info' x t)) = Field (inst info') x (Arg info t)               in map toField $2 } @@ -1231,10 +1262,10 @@ HoleName :: { NamedArg HoleName } HoleName   : SimpleTopHole { defaultNamedArg $1 }-  | '{'  SimpleHole '}'  { setHiding Hidden   $ defaultNamedArg $2 }-  | '{{' SimpleHole '}}' { setHiding Instance $ defaultNamedArg $2 }-  | '{'  SimpleId '=' SimpleHole '}'  { setHiding Hidden   $ defaultArg $ named $2 $4 }-  | '{{' SimpleId '=' SimpleHole '}}' { setHiding Instance $ defaultArg $ named $2 $4 }+  | '{'  SimpleHole '}'  { hide         $ defaultNamedArg $2 }+  | '{{' SimpleHole '}}' { makeInstance $ defaultNamedArg $2 }+  | '{'  SimpleId '=' SimpleHole '}'  { hide         $ defaultArg $ named $2 $4 }+  | '{{' SimpleId '=' SimpleHole '}}' { makeInstance $ defaultArg $ named $2 $4 }  SimpleTopHole :: { HoleName } SimpleTopHole@@ -1298,7 +1329,10 @@                      (Just (AsName m' asR)) doOpen dir                  ]               else return [ impStm asR, appStm m' initArgs ]-          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart' $ getRange $2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."+          -- Andreas, 2017-05-13, issue #2579+          -- Nisse reports that importing with instantation but without open+          -- could be usefule for bringing instances into scope.+          -- -- | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart' $ getRange $2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."           | otherwise -> return               [ impStm noRange               , appStm (noName $ beginningOf $ getRange m) es@@ -1375,14 +1409,15 @@   | CompiledPragma           { $1 }   | CompiledExportPragma     { $1 }   | CompiledDataPragma       { $1 }-  | CompiledDeclareDataPragma { $1 }   | CompiledTypePragma       { $1 }-  | CompiledEpicPragma       { $1 }   | CompiledJSPragma         { $1 }   | CompiledUHCPragma        { $1 }   | CompiledDataUHCPragma    { $1 }   | HaskellPragma            { $1 }+  | CompilePragma            { $1 }+  | ForeignPragma            { $1 }   | StaticPragma             { $1 }+  | InjectivePragma          { $1 }   | InlinePragma             { $1 }   | ImportPragma             { $1 }   | ImportUHCPragma          { $1 }@@ -1393,6 +1428,7 @@   | MeasurePragma            { $1 }   | CatchallPragma           { $1 }   | DisplayPragma            { $1 }+  | EtaPragma                { $1 }   | NoPositivityCheckPragma  { $1 }   | PolarityPragma           { $1 }   | OptionsPragma            { $1 }@@ -1426,11 +1462,6 @@   : '{-#' 'COMPILED_EXPORT' PragmaQName PragmaString '#-}'     { CompiledExportPragma (getRange ($1,$2,$3,$5)) $3 $4 } -CompiledDeclareDataPragma :: { Pragma }-CompiledDeclareDataPragma-  : '{-#' 'COMPILED_DECLARE_DATA' PragmaQName PragmaStrings '#-}'-    { CompiledDeclareDataPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }- CompiledTypePragma :: { Pragma } CompiledTypePragma   : '{-#' 'COMPILED_TYPE' PragmaQName PragmaStrings '#-}'@@ -1441,11 +1472,6 @@   : '{-#' 'COMPILED_DATA' PragmaQName string PragmaStrings '#-}'     { CompiledDataPragma (getRange ($1,$2,$3,fst $4,$6)) $3 (snd $4) $5 } -CompiledEpicPragma :: { Pragma }-CompiledEpicPragma-  : '{-#' 'COMPILED_EPIC' PragmaQName PragmaStrings '#-}'-    { CompiledEpicPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }- CompiledJSPragma :: { Pragma } CompiledJSPragma   : '{-#' 'COMPILED_JS' PragmaQName PragmaStrings '#-}'@@ -1463,8 +1489,17 @@  HaskellPragma :: { Pragma } HaskellPragma-  : '{-#' 'HASKELL' Strings '#-}' { HaskellCodePragma (getRange ($1, $2, $4)) (recoverLayout $3) }+  : '{-#' 'HASKELL' ForeignCode '#-}' { HaskellCodePragma (getRange ($1, $2, $4)) (recoverLayout $3) } +ForeignPragma :: { Pragma }+ForeignPragma+  : '{-#' 'FOREIGN' string ForeignCode '#-}' { ForeignPragma (getRange ($1, $2, fst $3, $5)) (snd $3) (recoverLayout $4) }++CompilePragma :: { Pragma }+CompilePragma+  : '{-#' 'COMPILE' string PragmaQName PragmaStrings '#-}'+    { CompilePragma (getRange ($1,$2,fst $3,$4,$6)) (snd $3) $4 (unwords $5) }+ StaticPragma :: { Pragma } StaticPragma   : '{-#' 'STATIC' PragmaQName '#-}'@@ -1475,12 +1510,22 @@   : '{-#' 'INLINE' PragmaQName '#-}'     { InlinePragma (getRange ($1,$2,$3,$4)) $3 } +InjectivePragma :: { Pragma }+InjectivePragma+  : '{-#' 'INJECTIVE' PragmaQName '#-}'+    { InjectivePragma (getRange ($1,$2,$3,$4)) $3 }+ DisplayPragma :: { Pragma } DisplayPragma   : '{-#' 'DISPLAY' string PragmaStrings '#-}' {%       let (r, s) = $3 in       parseDisplayPragma (fuseRange $1 $5) (iStart r) (unwords (s : $4)) } +EtaPragma :: { Pragma }+EtaPragma+  : '{-#' 'ETA' PragmaQName '#-}'+    { EtaPragma (getRange ($1,$2,$3,$4)) $3 }+ NoTerminationCheckPragma :: { Pragma } NoTerminationCheckPragma   : '{-#' 'NO_TERMINATION_CHECK' '#-}'@@ -1675,11 +1720,14 @@   case spanAllowedBeforeModule ds of     -- Andreas 2016-02-01, issue #1388.     -- We need to distinguish two additional cases.+     -- Case 1: Regular file layout: imports followed by one module. Nothing to do.     (ds0, [ Module{} ]) -> ds+     -- Case 2: The declarations in the module are not indented.     -- This is allowed for the top level module, and thus rectified here.     (ds0, Module r m tel [] : ds2) -> ds0 ++ [Module r m tel ds2]+     -- Case 3: There is a module with indented declarations,     -- followed by non-indented declarations.  This should be a     -- parse error and be reported later (see @toAbstract TopLevel{}@),@@ -1687,8 +1735,19 @@     (ds0, Module r m tel ds1 : ds2) -> ds  -- Gives parse error in scope checker.     -- OLD code causing issue 1388:     -- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]+     -- Case 4: a top-level module declaration is missing.-    (ds0, ds1)                      -> ds0 ++ [Module (getRange ds1) (QName noName_) [] ds1]+    -- Andreas, 2017-01-01, issue #2229:+    -- Put everything (except OPTIONS pragmas) into an anonymous module.+    _ -> ds0 ++ [Module r (QName $ noName r) [] ds1]+      where+      (ds0, ds1) = (`span` ds) $ \case+        Pragma OptionsPragma{} -> True+        _ -> False+      -- Andreas, 2017-05-17, issue #2574.+      -- Since the module noName will act as jump target, it needs a range.+      -- We use the beginning of the file as beginning of the top level module.+      r = beginningOfFile $ getRange ds1  -- | Create a name from a string. 
src/full/Agda/Syntax/Parser/Tokens.hs view
@@ -19,10 +19,11 @@         | KwEta | KwNoEta         | KwHiding | KwUsing | KwRenaming | KwTo | KwPublic         | KwOPTIONS | KwBUILTIN | KwLINE-        | KwCOMPILED_DATA | KwCOMPILED_DECLARE_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EXPORT-        | KwHASKELL-        | KwCOMPILED_EPIC | KwCOMPILED_JS | KwCOMPILED_UHC | KwCOMPILED_DATA_UHC-        | KwIMPORT | KwIMPORT_UHC | KwIMPOSSIBLE | KwSTATIC | KwINLINE+        | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EXPORT+        | KwHASKELL | KwFOREIGN | KwCOMPILE+        | KwCOMPILED_JS | KwCOMPILED_UHC | KwCOMPILED_DATA_UHC+        | KwIMPORT | KwIMPORT_UHC | KwIMPOSSIBLE | KwSTATIC | KwINJECTIVE | KwINLINE+        | KwETA         | KwNO_TERMINATION_CHECK | KwTERMINATING | KwNON_TERMINATING         | KwMEASURE | KwDISPLAY         | KwREWRITE
src/full/Agda/Syntax/Position.hs view
@@ -3,7 +3,6 @@ {-# LANGUAGE DeriveGeneric              #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NoMonomorphismRestriction  #-}-{-# LANGUAGE ScopedTypeVariables        #-}  #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -89,6 +88,7 @@ import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable (Traversable)+import Data.Data (Data) import Data.Typeable (Typeable) import Data.Sequence (Seq) import qualified Data.Sequence as Seq@@ -128,7 +128,7 @@   , posCol  :: !Int32     -- ^ Column number, counting from 1.   }-  deriving (Typeable, Functor, Foldable, Traversable, Generic)+  deriving (Data, Typeable, Functor, Foldable, Traversable, Generic)  positionInvariant :: Position' a -> Bool positionInvariant p =@@ -152,7 +152,7 @@ -- -- Note the invariant which intervals have to satisfy: 'intervalInvariant'. data Interval' a = Interval { iStart, iEnd :: !(Position' a) }-  deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic)+  deriving (Data, Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic)  type Interval            = Interval' SrcFile type IntervalWithoutFile = Interval' ()@@ -197,7 +197,7 @@   = NoRange   | Range !a (Seq IntervalWithoutFile)   deriving-    (Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic)+    (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable, Generic)  type Range = Range' SrcFile 
src/full/Agda/Syntax/Scope/Base.hs view
@@ -1,28 +1,29 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE DeriveDataTypeable  #-}-{-# LANGUAGE GADTs               #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE GADTs              #-}  {-| This module defines the notion of a scope and operations on scopes. -} module Agda.Syntax.Scope.Base where +import Prelude hiding (null)+ import Control.Arrow (first, second, (***))-import Control.Applicative+import Control.Applicative hiding (empty) import Control.DeepSeq import Control.Monad  import Data.Either (partitionEithers) import Data.Function-import Data.List as List+import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map import Data.Set (Set) import qualified Data.Set as Set import Data.Maybe-import Data.Typeable (Typeable) --- import Debug.Trace (trace)+import Data.Typeable (Typeable)+import Data.Data (Data)  import Agda.Benchmarking @@ -38,6 +39,7 @@ import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List+import Agda.Utils.Null import Agda.Utils.Pretty import qualified Agda.Utils.Map as Map @@ -53,9 +55,9 @@       , scopeParents        :: [A.ModuleName]       , scopeNameSpaces     :: ScopeNameSpaces       , scopeImports        :: Map C.QName A.ModuleName-      , scopeDatatypeModule :: Bool+      , scopeDatatypeModule :: Maybe DataOrRecord       }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq, Show)  -- | See 'Agda.Syntax.Common.Access'. data NameSpaceId@@ -65,7 +67,7 @@   | OnlyQualifiedNS  -- ^ Visible (as qualified) from outside,                      --   but not exported when opening the module.                      --   Used for qualified constructors.-  deriving (Typeable, Eq, Bounded, Enum)+  deriving (Typeable, Data, Eq, Bounded, Enum, Show)  type ScopeNameSpaces = [(NameSpaceId, NameSpace)] @@ -98,12 +100,12 @@       { scopeCurrent       :: A.ModuleName       , scopeModules       :: Map A.ModuleName Scope       , scopeLocals        :: LocalVars-      , scopePrecedence    :: Precedence+      , scopePrecedence    :: PrecedenceStack       , scopeInverseName   :: Map A.QName [C.QName]       , scopeInverseModule :: Map A.ModuleName [C.QName]       , scopeInScope       :: InScopeSet       }-  deriving Typeable+  deriving (Typeable, Data, Show)  instance Eq ScopeInfo where   ScopeInfo c1 m1 l1 p1 _ _ _ == ScopeInfo c2 m2 l2 p2 _ _ _ =@@ -115,13 +117,16 @@ -- | A local variable can be shadowed by an import. --   In case of reference to a shadowed variable, we want to report --   a scope error.-data LocalVar-  = LocalVar    { localVar :: A.Name }+data LocalVar = LocalVar+  { localVar        :: A.Name     -- ^ Unique ID of local variable.-  | ShadowedVar { localVar :: A.Name, localShadowedBy :: [AbstractName] }-    -- ^ This local variable is shadowed by one or more imports.-    --   (List not empty).-  deriving (Typeable)+  , localLetBound   :: Bool+    -- ^ Flag whether the variable is introduced by a @let@.+  , localShadowedBy :: [AbstractName]+     -- ^ If this list is not empty, the local variable is+     --   shadowed by one or more imports.+  }+  deriving (Typeable, Data, Show)  instance Eq LocalVar where   (==) = (==) `on` localVar@@ -130,20 +135,19 @@   compare = compare `on` localVar  -- | We show shadowed variables as prefixed by a ".", as not in scope.-instance Show LocalVar where-  show (LocalVar    x)    = show x-  show (ShadowedVar x xs) = "." ++ show x+instance Pretty LocalVar where+  pretty (LocalVar x _ []) = pretty x+  pretty (LocalVar x _ xs) = text "." <> pretty x  -- | Shadow a local name by a non-empty list of imports. shadowLocal :: [AbstractName] -> LocalVar -> LocalVar shadowLocal [] _ = __IMPOSSIBLE__-shadowLocal ys (LocalVar    x   ) = ShadowedVar x ys-shadowLocal ys (ShadowedVar x zs) = ShadowedVar x (ys ++ zs)+shadowLocal ys (LocalVar x b zs) = LocalVar x b (ys ++ zs)  -- | Project name of unshadowed local variable. notShadowedLocal :: LocalVar -> Maybe A.Name-notShadowedLocal (LocalVar x) = Just x-notShadowedLocal ShadowedVar{} = Nothing+notShadowedLocal (LocalVar x _ []) = Just x+notShadowedLocal _ = Nothing  -- | Get all locals that are not shadowed __by imports__. notShadowedLocals :: LocalVars -> AssocList C.Name A.Name@@ -175,7 +179,7 @@         -- ^ Maps concrete module names to a list of abstract module names.       , nsInScope :: InScopeSet       }-  deriving (Typeable, Eq)+  deriving (Typeable, Data, Eq, Show)  type ThingsInScope a = Map C.Name [a] type NamesInScope    = ThingsInScope AbstractName@@ -223,7 +227,7 @@   | PatternSynName -- ^ Name of a pattern synonym.   | MacroName      -- ^ Name of a macro   | QuotableName   -- ^ A name that can only be quoted.-  deriving (Eq, Show, Typeable, Enum, Bounded)+  deriving (Eq, Show, Typeable, Data, Enum, Bounded)  -- | A list containing all name kinds. allKindsOfNames :: [KindOfName]@@ -240,7 +244,7 @@     -- ^ Imported from another module.   | Applied C.QName WhyInScope     -- ^ Imported by a module application.-  deriving (Typeable)+  deriving (Typeable, Data, Show)  -- | A decoration of 'Agda.Syntax.Abstract.Name.QName'. data AbstractName = AbsName@@ -251,7 +255,7 @@   , anameLineage :: WhyInScope     -- ^ Explanation where this name came from.   }-  deriving (Typeable)+  deriving (Typeable, Data, Show)  -- | A decoration of abstract syntax module names. data AbstractModule = AbsModule@@ -260,7 +264,7 @@   , amodLineage :: WhyInScope     -- ^ Explanation where this name came from.   }-  deriving (Typeable)+  deriving (Typeable, Data, Show)  instance Eq AbstractName where   (==) = (==) `on` anameName@@ -285,7 +289,7 @@ -- * Operations on name and module maps.  mergeNames :: Eq a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a-mergeNames = Map.unionWith union+mergeNames = Map.unionWith List.union  ------------------------------------------------------------------------ -- * Operations on name spaces@@ -339,7 +343,7 @@   , scopeParents        = []   , scopeNameSpaces     = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]   , scopeImports        = Map.empty-  , scopeDatatypeModule = False+  , scopeDatatypeModule = Nothing   }  -- | The empty scope info.@@ -348,7 +352,7 @@   { scopeCurrent       = noModuleName   , scopeModules       = Map.singleton noModuleName emptyScope   , scopeLocals        = []-  , scopePrecedence    = TopCtx+  , scopePrecedence    = []   , scopeInverseName   = Map.empty   , scopeInverseModule = Map.empty   , scopeInScope       = Set.empty@@ -405,11 +409,14 @@             (NameSpaceId -> InScopeSet     -> InScopeSet     -> InScopeSet    ) ->             Scope -> Scope -> Scope zipScope fd fm fs s1 s2 =-  s1 { scopeNameSpaces = [ (nsid, zipNS nsid ns1 ns2)-                         | ((nsid, ns1), (nsid', ns2)) <- zipWith' (,) (scopeNameSpaces s1) (scopeNameSpaces s2)-                         , assert (nsid == nsid')-                         ]-     , scopeImports  = Map.union (scopeImports s1) (scopeImports s2)+  s1 { scopeNameSpaces =+         [ (nsid, zipNS nsid ns1 ns2)+         | ((nsid, ns1), (nsid', ns2)) <-+             fromMaybe __IMPOSSIBLE__ $+               zipWith' (,) (scopeNameSpaces s1) (scopeNameSpaces s2)+         , assert (nsid == nsid')+         ]+     , scopeImports = Map.union (scopeImports s1) (scopeImports s2)      }   where     assert True  = True@@ -714,7 +721,9 @@ scopeLookup q scope = map fst $ scopeLookup' q scope  scopeLookup' :: forall a. InScope a => C.QName -> ScopeInfo -> [(a, Access)]-scopeLookup' q scope = nubBy ((==) `on` fst) $ findName q root ++ maybeToList topImports ++ imports+scopeLookup' q scope =+  List.nubBy ((==) `on` fst) $+    findName q root ++ maybeToList topImports ++ imports   where      -- 1. Finding a name in the current scope and its parents.@@ -824,7 +833,7 @@     len (C.Qual _ x) = 1 + len x      best :: [C.QName] -> [C.QName]-    best = sortBy (compare `on` len)+    best = List.sortBy (compare `on` len)      unique :: forall a . [a] -> Bool     unique []      = __IMPOSSIBLE__@@ -922,58 +931,56 @@ -- * (Debug) printing ------------------------------------------------------------------------ -instance Show AbstractName where-  show = show . anameName+instance Pretty AbstractName where+  pretty = pretty . anameName -instance Show AbstractModule where-  show = show . amodName+instance Pretty AbstractModule where+  pretty = pretty . amodName -instance Show NameSpaceId where-  show nsid = case nsid of+instance Pretty NameSpaceId where+  pretty = text . \case     PublicNS        -> "public"     PrivateNS       -> "private"     ImportedNS      -> "imported"     OnlyQualifiedNS -> "only-qualified" -instance Show NameSpace where-  show (NameSpace names mods _) =-    unlines $-      blockOfLines "names"   (map pr $ Map.toList names) ++-      blockOfLines "modules" (map pr $ Map.toList mods)-    where-      pr :: (Show a, Show b) => (a,b) -> String-      pr (x, y) = show x ++ " --> " ++ show y+instance Pretty NameSpace where+  pretty = vcat . prettyNameSpace -instance Show Scope where-  show (scope@Scope{ scopeName = name, scopeParents = parents, scopeImports = imps }) =-    unlines $-      [ "scope " ++ show name ] ++ ind (-        concat [ blockOfLines (show nsid) (lines $ show $ scopeNameSpace nsid scope)+prettyNameSpace :: NameSpace -> [Doc]+prettyNameSpace (NameSpace names mods _) =+    blockOfLines (text "names")   (map pr $ Map.toList names) +++    blockOfLines (text "modules") (map pr $ Map.toList mods)+  where+    pr :: (Pretty a, Pretty b) => (a,b) -> Doc+    pr (x, y) = pretty x <+> text "-->" <+> pretty y++instance Pretty Scope where+  pretty (scope@Scope{ scopeName = name, scopeParents = parents, scopeImports = imps }) =+    vcat $+      [ text "scope" <+> pretty name ] ++ ind (+        concat [ blockOfLines (pretty nsid) $ prettyNameSpace $ scopeNameSpace nsid scope                | nsid <- [minBound..maxBound] ]-      ++ blockOfLines "imports"  (case Map.keys imps of-                                    [] -> []-                                    ks -> [ show ks ]-                                 )+      ++ blockOfLines (text "imports")+           (case Map.keys imps of [] -> []; ks -> [ prettyList ks ])       )-    where ind = map ("  " ++)+    where ind = map $ nest 2  -- | Add first string only if list is non-empty.-blockOfLines :: String -> [String] -> [String]+blockOfLines :: Doc -> [Doc] -> [Doc] blockOfLines _  [] = []-blockOfLines hd ss = hd : map ("  " ++) ss+blockOfLines hd ss = hd : map (nest 2) ss -instance Show ScopeInfo where-  show (ScopeInfo this mods locals ctx _ _ _) =-    unlines $-      [ "ScopeInfo"-      , "  current = " ++ show this-      ] ++-      (if null locals then [] else [ "  locals  = " ++ show locals ]) ++-      [ "  context = " ++ show ctx-      , "  modules"-      ] ++ map ("    "++) (relines . map show $ Map.elems mods)-    where-      relines = filter (not . null) . lines . unlines+instance Pretty ScopeInfo where+  pretty (ScopeInfo this mods locals ctx _ _ _) = vcat $+    [ text "ScopeInfo"+    , text "  current = " <> pretty this+    ] +++    (if null locals then [] else [ text "  locals  = " <> pretty locals ]) +++    [ text "  context = " <> pretty ctx+    , text "  modules"+    ] +++    map (nest 4) (List.filter (not . null) $ map pretty $ Map.elems mods)  ------------------------------------------------------------------------ -- * Boring instances
src/full/Agda/Syntax/Scope/Monad.hs view
@@ -13,7 +13,7 @@ import Control.Monad.Writer hiding (mapM, forM) import Control.Monad.State hiding (mapM, forM) -import Data.List as List+import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe@@ -31,6 +31,7 @@ import Agda.Syntax.Scope.Base  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Options @@ -55,10 +56,9 @@  -- * Errors -isDatatypeModule :: A.ModuleName -> ScopeM Bool+isDatatypeModule :: A.ModuleName -> ScopeM (Maybe DataOrRecord) isDatatypeModule m = do-   sc <- getScope-   return $ maybe __IMPOSSIBLE__ scopeDatatypeModule (Map.lookup m (scopeModules sc))+   scopeDatatypeModule . Map.findWithDefault __IMPOSSIBLE__ m . scopeModules <$> getScope  -- * General operations @@ -90,14 +90,15 @@   case Map.lookup m (scopeModules scope) of     Just s  -> return s     Nothing -> do-      reportSLn "" 0 $ "ERROR: In scope\n" ++ show scope ++ "\nNO SUCH SCOPE " ++ show m+      reportSLn "" 0 $ "ERROR: In scope\n" ++ prettyShow scope ++ "\nNO SUCH SCOPE " ++ prettyShow m       __IMPOSSIBLE__  getCurrentScope :: ScopeM Scope getCurrentScope = getNamedScope =<< getCurrentModule --- | Create a new module with an empty scope (Bool is True if it is a datatype module)-createModule :: Bool -> A.ModuleName -> ScopeM ()+-- | Create a new module with an empty scope.+--   (@Just@ if it is a datatype or record module.)+createModule :: Maybe DataOrRecord -> A.ModuleName -> ScopeM () createModule b m = do   reportSLn "scope.createModule" 10 $ "createModule " ++ prettyShow m   s <- getCurrentScope@@ -139,18 +140,17 @@ modifyCurrentNameSpace acc f = modifyCurrentScope $ updateScopeNameSpaces $   AssocList.updateAt acc f -setContextPrecedence :: Precedence -> ScopeM ()-setContextPrecedence p = modifyScope_ $ \s -> s { scopePrecedence = p }+pushContextPrecedence :: Precedence -> ScopeM ()+pushContextPrecedence p = modifyScope_ $ \ s -> s { scopePrecedence = pushPrecedence p $ scopePrecedence s } -getContextPrecedence :: ScopeM Precedence-getContextPrecedence = scopePrecedence <$> getScope+popContextPrecedence :: ScopeM ()+popContextPrecedence = modifyScope_ $ \ s -> s { scopePrecedence = drop 1 $ scopePrecedence s }  withContextPrecedence :: Precedence -> ScopeM a -> ScopeM a withContextPrecedence p m = do-  p' <- getContextPrecedence-  setContextPrecedence p+  pushContextPrecedence p   x <- m-  setContextPrecedence p'+  popContextPrecedence   return x  getLocalVars :: ScopeM LocalVars@@ -201,15 +201,37 @@ -- * Resolving names  data ResolvedName-  = VarName A.Name-  | DefinedName Access AbstractName-  | FieldName [AbstractName]-      -- ^ record fields names need to be distinguished to parse copatterns-  | ConstructorName [AbstractName]-  | PatternSynResName AbstractName-  | UnknownName+  =   -- | Local variable bound by λ, Π, module telescope, pattern, @let@.+    VarName+    { resolvedVar      :: A.Name+    , resolvedLetBound :: Bool    -- ^ Variable bound by @let@?+    }++  |   -- | Function, data/record type, postulate.+    DefinedName Access AbstractName++  |   -- | Record field name.  Needs to be distinguished to parse copatterns.+    FieldName [AbstractName]++  |   -- | Data or record constructor name.+    ConstructorName [AbstractName]++  |   -- | Name of pattern synonym.+    PatternSynResName AbstractName++  |   -- | Unbound name.+    UnknownName   deriving (Show, Eq) +instance Pretty ResolvedName where+  pretty = \case+    VarName x _         -> text "variable"    <+> pretty x+    DefinedName a x     -> pretty a           <+> pretty x+    FieldName xs        -> text "field"       <+> pretty xs+    ConstructorName xs  -> text "constructor" <+> pretty xs+    PatternSynResName x -> text "pattern"     <+> pretty x+    UnknownName         -> text "<unknown name>"+ -- | Look up the abstract name referred to by a given concrete name. resolveName :: C.QName -> ScopeM ResolvedName resolveName = resolveName' allKindsOfNames Nothing@@ -225,16 +247,16 @@ resolveName' kinds names x = do   scope <- getScope   let vars     = AssocList.mapKeysMonotonic C.QName $ scopeLocals scope-      retVar y = return $ VarName $ y { nameConcrete = unqualify x }+      retVar y = return . VarName y{ nameConcrete = unqualify x }       aName    = A.qnameName . anameName   case lookup x vars of     -- Case: we have a local variable x.-    Just (LocalVar y)  -> retVar y+    Just (LocalVar y b []) -> retVar y b     -- Case: ... but is (perhaps) shadowed by some imports.-    Just (ShadowedVar y ys) -> case names of+    Just (LocalVar y b ys) -> case names of       Nothing -> shadowed ys-      Just ns -> case filter (\y -> aName y `Set.member` ns) ys of-        [] -> retVar y+      Just ns -> case filter (\ y -> aName y `Set.member` ns) ys of+        [] -> retVar y b         ys -> shadowed ys       where       shadowed ys =@@ -272,7 +294,7 @@ resolveModule x = do   ms <- scopeLookup x <$> getScope   case ms of-    [AbsModule m why] -> return $ AbsModule (m `withRangesOfQ` x) why+    [AbsModule m why] -> return $ AbsModule (m `withRangeOf` x) why     []                -> typeError $ NoSuchModule x     ms                -> typeError $ AmbiguousModule x (map amodName ms) @@ -285,7 +307,7 @@ getNotation x ns = do   r <- resolveName' allKindsOfNames (Just ns) x   case r of-    VarName y           -> return $ namesToNotation x y+    VarName y _         -> return $ namesToNotation x y     DefinedName _ d     -> return $ notation d     FieldName ds        -> return $ oneNotation ds     ConstructorName ds  -> return $ oneNotation ds@@ -300,9 +322,13 @@  -- * Binding names --- | Bind a variable. The abstract name is supplied as the second argument.-bindVariable :: C.Name -> A.Name -> ScopeM ()-bindVariable x y = modifyScope_ $ updateScopeLocals $ AssocList.insert x $ LocalVar y+-- | Bind a variable.+bindVariable+  :: Bool    -- ^ Let-bound variable?+  -> C.Name  -- ^ Concrete name.+  -> A.Name  -- ^ Abstract name.+  -> ScopeM ()+bindVariable b x y = modifyScope_ $ updateScopeLocals $ AssocList.insert x $ LocalVar y b []  -- | Bind a defined name. Must not shadow anything. bindName :: Access -> KindOfName -> C.Name -> A.QName -> ScopeM ()@@ -314,7 +340,7 @@     UnknownName   | isNoName x -> success     DefinedName{} | isNoName x -> success <* modifyCurrentScope (removeNameFromScope PrivateNS x)     DefinedName _ d     -> clash $ anameName d-    VarName z           -> clash $ A.qualify (mnameFromList []) z+    VarName z _         -> clash $ A.qualify (mnameFromList []) z     FieldName       ds  -> ambiguous FldName ds     ConstructorName ds  -> ambiguous ConName ds     PatternSynResName n -> clash $ anameName n@@ -380,8 +406,8 @@   where     copy :: A.ModuleName -> Scope -> WSM Scope     copy new s = do-      lift $ reportSLn "scope.copy" 20 $ "Copying scope " ++ show old ++ " to " ++ show new-      lift $ reportSLn "scope.copy" 50 $ show s+      lift $ reportSLn "scope.copy" 20 $ "Copying scope " ++ prettyShow old ++ " to " ++ prettyShow new+      lift $ reportSLn "scope.copy" 50 $ prettyShow s       s0 <- lift $ getNamedScope new       -- Delete private names, then copy names and modules. Recompute inScope       -- set rather than trying to copy it.@@ -454,7 +480,7 @@           -- For now, we just set their range           -- to the new module name's one, which fixes issue 1619.           y <- setRange rnew . A.qualify m <$> refresh (qnameName x)-          lift $ reportSLn "scope.copy" 50 $ "  Copying " ++ show x ++ " to " ++ show y+          lift $ reportSLn "scope.copy" 50 $ "  Copying " ++ prettyShow x ++ " to " ++ prettyShow y           addName x y           return y @@ -491,9 +517,9 @@             -- Andreas, Jesper, 2015-07-02: Issue 1597             -- Don't copy a module over itself, it will just be emptied of its contents.             if (x == y) then return x else do-            lift $ reportSLn "scope.copy" 50 $ "  Copying module " ++ show x ++ " to " ++ show y+            lift $ reportSLn "scope.copy" 50 $ "  Copying module " ++ prettyShow x ++ " to " ++ prettyShow y             addMod x y rec-            lift $ createModule False y+            lift $ createModule Nothing y             -- We need to copy the contents of included modules recursively (only when 'rec')             when rec $ copyRec x y             return y@@ -522,7 +548,7 @@      -- Check for duplicate imports in a single import directive.     -- @dup@ : To be imported names that are mentioned more than once.-    let dup = targetNames \\ nub targetNames+    let dup = targetNames List.\\ List.nub targetNames     unless (null dup) $ typeError $ DuplicateImports m dup      -- Apply the import directive.@@ -565,7 +591,7 @@         (Using xs, ys) -> do           let uselessHiding = [ x | x@ImportedName{} <- ys ] ++                               [ x | x@(ImportedModule y) <- ys, ImportedName y `notElem` names ]-          unless (null uselessHiding) $ typeError $ GenericError $ "Hiding " ++ intercalate ", " (map show uselessHiding)+          unless (null uselessHiding) $ typeError $ GenericError $ "Hiding " ++ List.intercalate ", " (map prettyShow uselessHiding)                                                                 ++ " has no effect"           return dir{ hiding = [] }         _ -> return dir@@ -605,7 +631,7 @@     doesntExport = do       -- Names @xs@ mentioned in the import directive @dir@ but not in the @scope@.       let xs = filter doesntExist names-      reportSLn "scope.import.apply" 20 $ "non existing names: " ++ show xs+      reportSLn "scope.import.apply" 20 $ "non existing names: " ++ prettyShow xs       typeError $ ModuleDoesntExport m xs      doesntExist (ImportedName   x) = isNothing $ Map.lookup x namesInScope@@ -679,7 +705,7 @@     locals <- mapMaybe (\ (c,x) -> c <$ notShadowedLocal x) <$> getLocalVars     let newdefs = Map.keys $ nsNames ns         shadowed = List.intersect locals newdefs-    reportSLn "scope.locals" 10 $ "opening module shadows the following locals vars: " ++ show shadowed+    reportSLn "scope.locals" 10 $ "opening module shadows the following locals vars: " ++ prettyShow shadowed   -- Andreas, 2014-09-03, issue 1266: shadow local variables by imported defs.   modifyLocalVars $ AssocList.mapWithKey $ \ c x ->     case Map.lookup c $ nsNames ns of
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -27,6 +27,7 @@  import Control.Applicative hiding (empty) import Control.Monad.Reader+import Control.Monad.State  import qualified Data.Map as Map import Data.Maybe@@ -41,6 +42,7 @@ import Agda.Syntax.Literal import Agda.Syntax.Info import Agda.Syntax.Internal (MetaId(..))+import qualified Agda.Syntax.Internal as I import Agda.Syntax.Fixity import Agda.Syntax.Concrete as C import Agda.Syntax.Abstract as A@@ -48,11 +50,13 @@ import Agda.Syntax.Scope.Base  import Agda.TypeChecking.Monad.State (getScope)-import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..))+import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..), stBuiltinThings, BuiltinThings, Builtin(..))+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options  import qualified Agda.Utils.AssocList as AssocList import Agda.Utils.Either+import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Maybe import Agda.Utils.Monad@@ -70,10 +74,11 @@                , currentScope :: ScopeInfo                } -defaultEnv :: Env-defaultEnv = Env { takenNames   = Set.empty-                 , currentScope = emptyScopeInfo-                 }+-- -- UNUSED+-- defaultEnv :: Env+-- defaultEnv = Env { takenNames   = Set.empty+--                  , currentScope = emptyScopeInfo+--                  }  makeEnv :: ScopeInfo -> Env makeEnv scope = Env { takenNames   = Set.union vars defs@@ -83,12 +88,17 @@     vars  = Set.fromList $ map fst $ scopeLocals scope     defs  = Map.keysSet $ nsNames $ everythingInScope scope -currentPrecedence :: AbsToCon Precedence+currentPrecedence :: AbsToCon PrecedenceStack currentPrecedence = asks $ scopePrecedence . currentScope +withPrecedence' :: PrecedenceStack -> AbsToCon a -> AbsToCon a+withPrecedence' ps = local $ \e ->+  e { currentScope = (currentScope e) { scopePrecedence = ps } }+ withPrecedence :: Precedence -> AbsToCon a -> AbsToCon a-withPrecedence p = local $ \e ->-  e { currentScope = (currentScope e) { scopePrecedence = p } }+withPrecedence p ret = do+  ps <- currentPrecedence+  withPrecedence' (pushPrecedence p ps) ret  withScope :: ScopeInfo -> AbsToCon a -> AbsToCon a withScope scope = local $ \e -> e { currentScope = scope }@@ -96,6 +106,14 @@ noTakenNames :: AbsToCon a -> AbsToCon a noTakenNames = local $ \e -> e { takenNames = Set.empty } +-- | Bind a concrete name to an abstract in the translation environment.+addBinding :: C.Name -> A.Name -> Env -> Env+addBinding y x e =+  e { takenNames   = Set.insert y $ takenNames e+    , currentScope = (`updateScopeLocals` currentScope e) $+        AssocList.insert y (LocalVar x __IMPOSSIBLE__ [])+    }+ -- The Monad --------------------------------------------------------------  -- | We put the translation into TCM in order to print debug messages.@@ -110,10 +128,7 @@ abstractToConcreteEnv flags a = runReaderT (toConcrete a) flags  abstractToConcreteCtx :: ToConcrete a c => Precedence -> a -> TCM c-abstractToConcreteCtx ctx x = do-  scope <- getScope-  let scope' = scope { scopePrecedence = ctx }-  abstractToConcreteEnv (makeEnv scope') x+abstractToConcreteCtx ctx x = runAbsToCon $ withPrecedence ctx (toConcrete x)  abstractToConcrete_ :: ToConcrete a c => a -> TCM c abstractToConcrete_ = runAbsToCon . toConcrete@@ -140,7 +155,7 @@ lookupQName ambCon x = do   ys <- inverseScopeLookupName' ambCon x <$> asks currentScope   lift $ reportSLn "scope.inverse" 100 $-    "inverse looking up abstract name " ++ show x ++ " yields " ++ show ys+    "inverse looking up abstract name " ++ prettyShow x ++ " yields " ++ prettyShow ys   case ys of     (y : _) -> return y     [] -> do@@ -165,25 +180,30 @@             []      -> return $ mnameToConcrete x                 -- this is what happens for names that are not in scope (private names) +-- | Add a abstract name to the scope and produce an available concrete version of it. bindName :: A.Name -> (C.Name -> AbsToCon a) -> AbsToCon a bindName x ret = do-  names <- asks takenNames   let y = nameConcrete x-  case (Set.member y names) of-    _ | isNoName y -> ret y-    True           -> bindName (nextName x) ret-    False          ->-        local (\e -> e { takenNames   = Set.insert y $ takenNames e-                       , currentScope = (`updateScopeLocals` currentScope e) $-                           AssocList.insert y (LocalVar x)-                       }-              ) $ ret y+  if isNoName y then ret y else do+    names <- asks takenNames+    let loop x = do+          let y = nameConcrete x+          if y `Set.member` names then loop $ nextName x+          else local (addBinding y x) $ ret y+    loop x ++-- | Like 'bindName', but do not care whether name is already taken.+bindName' :: A.Name -> AbsToCon a -> AbsToCon a+bindName' x = applyUnless (isNoName y) $ local $ addBinding y x+  where y = nameConcrete x++ -- Dealing with precedences -----------------------------------------------  -- | General bracketing function. bracket' ::    (e -> e)             -- ^ the bracketing function-            -> (Precedence -> Bool) -- ^ Should we bracket things+            -> (PrecedenceStack -> Bool) -- ^ Should we bracket things                                     --   which have the given                                     --   precedence?             -> e -> AbsToCon e@@ -192,20 +212,20 @@         return $ if needParen p then paren e else e  -- | Expression bracketing-bracket :: (Precedence -> Bool) -> AbsToCon C.Expr -> AbsToCon C.Expr+bracket :: (PrecedenceStack -> Bool) -> AbsToCon C.Expr -> AbsToCon C.Expr bracket par m =     do  e <- m         bracket' (Paren (getRange e)) par e  -- | Pattern bracketing-bracketP_ :: (Precedence -> Bool) -> AbsToCon C.Pattern -> AbsToCon C.Pattern+bracketP_ :: (PrecedenceStack -> Bool) -> AbsToCon C.Pattern -> AbsToCon C.Pattern bracketP_ par m =     do  e <- m         bracket' (ParenP (getRange e)) par e  {- UNUSED -- | Pattern bracketing-bracketP :: (Precedence -> Bool) -> (C.Pattern -> AbsToCon a)+bracketP :: (PrecedenceStack -> Bool) -> (C.Pattern -> AbsToCon a)                                  -> ((C.Pattern -> AbsToCon a) -> AbsToCon a)                                  -> AbsToCon a bracketP par ret m = m $ \p -> do@@ -213,6 +233,17 @@     ret p -} +-- | Applications where the argument is a lambda without parentheses need+--   parens more often than other applications.+isParenlessLambda :: NamedArg A.Expr -> Bool+isParenlessLambda e | notVisible e = False+isParenlessLambda e =+  case unScope $ namedArg e of+    A.Lam i _ _           -> not $ lamParens i+    A.AbsurdLam i _       -> not $ lamParens i+    A.ExtendedLam i _ _ _ -> not $ lamParens i+    _                     -> False+ -- Dealing with infix declarations ----------------------------------------  -- | If a name is defined with a fixity that differs from the default, we have@@ -255,6 +286,9 @@     toConcrete :: a -> AbsToCon c     bindToConcrete :: a -> (c -> AbsToCon b) -> AbsToCon b +    -- Christian Sattler, 2017-08-05:+    -- These default implementations are not valid semantically (at least+    -- the second one). Perhaps they (it) should be removed.     toConcrete     x     = bindToConcrete x return     bindToConcrete x ret = ret =<< toConcrete x @@ -278,23 +312,33 @@ toConcreteHiding :: (LensHiding h, ToConcrete a c) => h -> a -> AbsToCon c toConcreteHiding h =   case getHiding h of-    NotHidden -> toConcrete-    Hidden    -> toConcreteTop-    Instance  -> toConcreteTop+    NotHidden  -> toConcrete+    Hidden     -> toConcreteTop+    Instance{} -> toConcreteTop  -- | Translate something in a context indicated by 'Hiding' info. bindToConcreteHiding :: (LensHiding h, ToConcrete a c) => h -> a -> (c -> AbsToCon b) -> AbsToCon b bindToConcreteHiding h =   case getHiding h of-    NotHidden -> bindToConcrete-    Hidden    -> bindToConcreteTop-    Instance  -> bindToConcreteTop+    NotHidden  -> bindToConcrete+    Hidden     -> bindToConcreteTop+    Instance{} -> bindToConcreteTop  -- General instances ------------------------------------------------------  instance ToConcrete a c => ToConcrete [a] [c] where     toConcrete     = mapM toConcrete-    bindToConcrete = thread bindToConcrete+    -- Andreas, 2017-04-11, Issue #2543+    -- The naive `thread'ing does not work as we have to undo+    -- changes to the Precedence.+    -- bindToConcrete = thread bindToConcrete+    bindToConcrete []     ret = ret []+    bindToConcrete (a:as) ret = do+      p <- currentPrecedence  -- save precedence+      bindToConcrete a $ \ c ->+        withPrecedence' p $ -- reset precedence+          bindToConcrete as $ \ cs ->+            ret (c : cs)  instance (ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (Either a1 a2) (Either c1 c2) where     toConcrete = traverseEither toConcrete toConcrete@@ -391,8 +435,9 @@      toConcrete e@(A.App i e1 e2)    =         tryToRecoverOpApp e+        $ tryToRecoverNatural e         -- or fallback to App-        $ bracket appBrackets+        $ bracket (appBrackets' $ isParenlessLambda e2)         $ do e1' <- toConcreteCtx FunctionCtx e1              e2' <- toConcreteCtx ArgumentCtx e2              return $ C.App (getRange i) e1' e2'@@ -404,9 +449,10 @@         return $ C.WithApp (getRange i) e es      toConcrete (A.AbsurdLam i h) =-      bracket lamBrackets $ return $ C.AbsurdLam (getRange i) h+      bracket (lamBrackets' $ lamParens i) $ return $ C.AbsurdLam (getRange i) h     toConcrete e@(A.Lam i _ _)      =-        bracket lamBrackets+        tryToRecoverOpApp e   -- recover sections+        $ bracket (lamBrackets' $ lamParens i)         $ case lamView e of             (bs, e) ->                 bindToConcrete (map makeDomainFree bs) $ \bs -> do@@ -425,12 +471,12 @@                     _                              -> ([b], e)             lamView e = ([], e)     toConcrete (A.ExtendedLam i di qname cs) =-        bracket lamBrackets $ do+        bracket (lamBrackets' $ lamParens i) $ do           decls <- concat <$> toConcrete cs           let namedPat np = case getHiding np of-                 NotHidden -> namedArg np-                 Hidden    -> C.HiddenP noRange (unArg np)-                 Instance  -> C.InstanceP noRange (unArg np)+                 NotHidden  -> namedArg np+                 Hidden     -> C.HiddenP noRange (unArg np)+                 Instance{} -> C.InstanceP noRange (unArg np)               -- we know all lhs are of the form `.extlam p1 p2 ... pn`,               -- with the name .extlam leftmost. It is our mission to remove it.           let removeApp (C.RawAppP r (_:es)) = return $ C.RawAppP r es@@ -473,9 +519,9 @@                            _          -> e             addDot a e = C.Dot (getRange a) e             mkArg (Arg info e) = case getHiding info of-                                          Hidden    -> HiddenArg   (getRange e) (unnamed e)-                                          Instance  -> InstanceArg (getRange e) (unnamed e)-                                          NotHidden -> e+                                          Hidden     -> HiddenArg   (getRange e) (unnamed e)+                                          Instance{} -> InstanceArg (getRange e) (unnamed e)+                                          NotHidden  -> e      toConcrete (A.Set i 0)  = return $ C.Set (getRange i)     toConcrete (A.Set i n)  = return $ C.SetN (getRange i) n@@ -531,9 +577,18 @@     _ -> b makeDomainFree b = b +-- Christian Sattler, 2017-08-05, fixing #2669+-- Both methods of ToConcrete (FieldAssignment' a) (FieldAssignment' c) need+-- to be implemented, each in terms of the corresponding one of ToConcrete a c.+-- This mirrors the instance ToConcrete (Arg a) (Arg c).+-- The default implementations of ToConcrete are not valid semantically. instance ToConcrete a c => ToConcrete (FieldAssignment' a) (FieldAssignment' c) where     toConcrete = traverse toConcrete +    bindToConcrete (FieldAssignment name a) ret =+      bindToConcrete a $ ret . FieldAssignment name++ -- Binder instances -------------------------------------------------------  instance ToConcrete A.LamBinding [C.LamBinding] where@@ -547,7 +602,7 @@     where       recoverLabels :: Arg A.TypedBinding -> Arg C.TypedBinding -> [Arg C.TypedBinding]       recoverLabels b cb-        | getHiding b == NotHidden = [cb]   -- We don't care about labels for explicit args+        | visible b = [cb]   -- We don't care about labels for explicit args         | otherwise = traverse (recover (unArg b)) cb        recover (A.TBind _ xs _) (C.TBind r ys e) = tbind r e (zipWith label xs ys)@@ -577,7 +632,7 @@     bindToConcrete (LetBind i info x t e) ret =         bindToConcrete x $ \x ->         do (t,(e, [], [], [])) <- toConcrete (t, A.RHS e Nothing)-           ret $ addInstanceB (getHiding info == Instance) $+           ret $ addInstanceB (isInstance info) $                [ C.TypeSig info x t                , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])                              e C.NoWhere False@@ -591,14 +646,14 @@       x' <- unqualify <$> toConcrete x       modapp <- toConcrete modapp       let r = getRange modapp-          open = maybe DontOpen id $ minfoOpenShort i-          dir  = maybe defaultImportDir{ importDirRange = r } id $ minfoDirective i+          open = fromMaybe DontOpen $ minfoOpenShort i+          dir  = fromMaybe defaultImportDir{ importDirRange = r } $ minfoDirective i       -- This is no use since toAbstract LetDefs is in localToAbstract.       local (openModule' x dir id) $         ret [ C.ModuleMacro (getRange i) x' modapp open dir ]     bindToConcrete (LetOpen i x _) ret = do       x' <- toConcrete x-      let dir = maybe defaultImportDir id $ minfoDirective i+      let dir = fromMaybe defaultImportDir $ minfoDirective i       local (openModule' x dir restrictPrivate) $             ret [ C.Open (getRange i) x' dir ]     bindToConcrete (LetDeclaredVariable _) ret =@@ -652,7 +707,7 @@     toConcrete A.AbsurdRHS = return (C.AbsurdRHS, [], [], [])     toConcrete (A.WithRHS _ es cs) = do       es <- toConcrete es-      cs <- concat <$> toConcrete cs+      cs <- noTakenNames $ concat <$> toConcrete cs       return (C.AbsurdRHS, [], es, cs)     toConcrete (A.RewriteRHS xeqs rhs wh) = do       wh <- declsToConcrete wh@@ -679,7 +734,7 @@   toConcrete (Constr d) = head <$> toConcrete d  instance ToConcrete a C.LHS => ToConcrete (A.Clause' a) [C.Declaration] where-  toConcrete (A.Clause lhs _ rhs wh catchall) =+  toConcrete (A.Clause lhs _ _ rhs wh catchall) =       bindToConcrete lhs $ \lhs ->         case lhs of           C.LHS p wps _ _ -> do@@ -780,8 +835,8 @@    toConcrete (A.Import i x _) = do     x <- toConcrete x-    let open = maybe DontOpen id $ minfoOpenShort i-        dir  = maybe defaultImportDir id $ minfoDirective i+    let open = fromMaybe DontOpen $ minfoOpenShort i+        dir  = fromMaybe defaultImportDir $ minfoDirective i     return [ C.Import (getRange i) x Nothing open dir]    toConcrete (A.Pragma i p)     = do@@ -824,18 +879,15 @@     A.CompiledDataPragma x hs hcs -> do       x <- toConcrete x       return $ C.CompiledDataPragma r x hs hcs-    A.CompiledDeclareDataPragma x hs -> do-      x <- toConcrete x-      return $ C.CompiledDeclareDataPragma r x hs     A.CompiledPragma x hs -> do       x <- toConcrete x       return $ C.CompiledPragma r x hs+    A.CompilePragma b x s -> do+      x <- toConcrete x+      return $ C.CompilePragma r b x s     A.CompiledExportPragma x hs -> do       x <- toConcrete x       return $ C.CompiledExportPragma r x hs-    A.CompiledEpicPragma x e -> do-      x <- toConcrete x-      return $ C.CompiledEpicPragma r x e     A.CompiledJSPragma x e -> do       x <- toConcrete x       return $ C.CompiledJSPragma r x e@@ -846,7 +898,9 @@       x <- toConcrete x       return $ C.CompiledDataUHCPragma r x crd crcs     A.StaticPragma x -> C.StaticPragma r <$> toConcrete x+    A.InjectivePragma x -> C.InjectivePragma r <$> toConcrete x     A.InlinePragma x -> C.InlinePragma r <$> toConcrete x+    A.EtaPragma x    -> C.EtaPragma    r <$> toConcrete x     A.DisplayPragma f ps rhs ->       C.DisplayPragma r <$> toConcrete (A.DefP (PatRange noRange) (AmbQ [f]) ps) <*> toConcrete rhs @@ -864,18 +918,82 @@ instance ToConcrete A.LHSCore C.Pattern where   bindToConcrete = bindToConcrete . lhsCoreToPattern -appBrackets' :: [arg] -> Precedence -> Bool-appBrackets' []    _   = False-appBrackets' (_:_) ctx = appBrackets ctx+appBracketsArgs :: [arg] -> PrecedenceStack -> Bool+appBracketsArgs []    _   = False+appBracketsArgs (_:_) ctx = appBrackets ctx +-- Auxiliary wrappers for processing the bindings in patterns in the right order.+newtype UserPattern a  = UserPattern a+newtype SplitPattern a = SplitPattern a newtype BindingPattern = BindingPat A.Pattern newtype FreshName = FreshenName A.Name  instance ToConcrete FreshName A.Name where   bindToConcrete (FreshenName x) ret = bindToConcrete x $ \ y -> ret x{ nameConcrete = y } --- Takes care of freshening and binding pattern variables, but doesn't actually+-- Pass 1: (Issue #2729)+-- Takes care of binding the originally user-written pattern variables, but doesn't actually -- translate anything to Concrete.+instance ToConcrete (UserPattern A.Pattern) A.Pattern where+  bindToConcrete (UserPattern p) ret =+    case p of+      A.VarP x               -> bindName' x $ ret $ A.VarP x+      A.WildP{}              -> ret p+      A.ProjP{}              -> ret p+      A.AbsurdP{}            -> ret p+      A.LitP{}               -> ret p+      A.DotP{}               -> ret p+      -- Andreas, 2017-09-03, issue #2729:+      -- Do not go into patterns generated by case-split here!+      -- They are treated in a second pass.+      A.ConP i c args+        | patOrigin i == ConOSplit -> ret p+        | otherwise          -> bindToConcrete (map UserPattern args) $ ret . A.ConP i c+      A.DefP i f args        -> bindToConcrete (map UserPattern args) $ ret . A.DefP i f+      A.PatternSynP i f args -> bindToConcrete (map UserPattern args) $ ret . A.PatternSynP i f+      A.RecP i args          -> bindToConcrete ((map . fmap) UserPattern args) $ ret . A.RecP i+      A.AsP i x p            -> bindName' x $+                                bindToConcrete (UserPattern p) $ \ p ->+                                ret (A.AsP i x p)++instance ToConcrete (UserPattern (NamedArg A.Pattern)) (NamedArg A.Pattern) where+  bindToConcrete (UserPattern np) ret =+    case getOrigin np of+      CaseSplit -> ret np+      _         -> bindToConcrete (fmap (fmap UserPattern) np) ret++-- Pass 2a: locate case-split pattern.  Don't bind anything!+instance ToConcrete (SplitPattern A.Pattern) A.Pattern where+  bindToConcrete (SplitPattern p) ret =+    case p of+      A.VarP x               -> ret p+      A.WildP{}              -> ret p+      A.ProjP{}              -> ret p+      A.AbsurdP{}            -> ret p+      A.LitP{}               -> ret p+      A.DotP{}               -> ret p+      -- Andreas, 2017-09-03, issue #2729:+      -- For patterns generated by case-split here, switch to freshening & binding.+      A.ConP i c args+        | patOrigin i == ConOSplit+                             -> bindToConcrete ((map . fmap . fmap) BindingPat args) $ ret . A.ConP i c+        | otherwise          -> bindToConcrete (map SplitPattern args) $ ret . A.ConP i c+      A.DefP i f args        -> bindToConcrete (map SplitPattern args) $ ret . A.DefP i f+      A.PatternSynP i f args -> bindToConcrete (map SplitPattern args) $ ret . A.PatternSynP i f+      A.RecP i args          -> bindToConcrete ((map . fmap) SplitPattern args) $ ret . A.RecP i+      A.AsP i x p            -> bindToConcrete (SplitPattern p)  $ \ p ->+                                ret (A.AsP i x p)++instance ToConcrete (SplitPattern (NamedArg A.Pattern)) (NamedArg A.Pattern) where+  bindToConcrete (SplitPattern np) ret =+    case getOrigin np of+      CaseSplit -> bindToConcrete (fmap (fmap BindingPat  ) np) ret+      _         -> bindToConcrete (fmap (fmap SplitPattern) np) ret+++-- Pass 2b:+-- Takes care of freshening and binding pattern variables introduced by case split.+-- Still does not translate anything to Concrete. instance ToConcrete BindingPattern A.Pattern where   bindToConcrete (BindingPat p) ret =     case p of@@ -896,7 +1014,9 @@ instance ToConcrete A.Pattern C.Pattern where   bindToConcrete p ret = do     prec <- currentPrecedence-    bindToConcrete (BindingPat p) (ret <=< withPrecedence prec . toConcrete)+    bindToConcrete (UserPattern p) $ \ p -> do+      bindToConcrete (SplitPattern p) $ \ p -> do+        ret =<< do withPrecedence' prec $ toConcrete p   toConcrete p =     case p of       A.VarP x ->@@ -957,7 +1077,7 @@         Just c  -> applyTo args2 c         Nothing -> applyTo args . C.IdentP =<< toConcrete x     -- Note: applyTo [] c = return c-    applyTo args c = bracketP_ (appBrackets' args) $ do+    applyTo args c = bracketP_ (appBracketsArgs args) $ do       foldl C.AppP c <$> toConcreteCtx ArgumentCtx args  @@ -965,46 +1085,112 @@  data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName -cOpApp :: Range -> C.QName -> A.Name -> [C.Expr] -> C.Expr+cOpApp :: Range -> C.QName -> A.Name -> [Maybe C.Expr] -> C.Expr cOpApp r x n es =   C.OpApp r x (Set.singleton n)-          (map (defaultNamedArg . noPlaceholder . Ordinary) es)+          (map (defaultNamedArg . placeholder) eps)+  where+    x0 = C.unqualify x+    positions | isPrefix  x0 =                [ Middle | _ <- drop 1 es ] ++ [End]+              | isPostfix x0 = [Beginning] ++ [ Middle | _ <- drop 1 es ]+              | isInfix x0   = [Beginning] ++ [ Middle | _ <- drop 2 es ] ++ [End]+              | otherwise    =                [ Middle | _ <- es ]+    eps = zip es positions+    placeholder (Nothing, pos) = Placeholder pos+    placeholder (Just e,  _)   = noPlaceholder (Ordinary e) +tryToRecoverNatural :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr+tryToRecoverNatural e def = do+  builtins <- stBuiltinThings <$> lift get+  let reified = do+        zero <- getAQName "ZERO" builtins+        suc  <- getAQName "SUC"  builtins+        explore zero suc 0 e+  case reified of+    Just n  -> return $ C.Lit $ LitNat noRange n+    Nothing -> def+  where++    getAQName :: String -> BuiltinThings a -> Maybe A.QName+    getAQName str bs = do+      Builtin (I.Con hd _ _) <- Map.lookup str bs+      return $ I.conName hd++    explore :: A.QName -> A.QName -> Integer -> A.Expr -> Maybe Integer+    explore z s k (A.App _ (A.Con (AmbQ [f])) t) | f == s =+      let v = 1+k in v `seq` explore z s v $ namedArg t+    explore z s k (A.Con (AmbQ [x]))             | x == z = Just k+    explore z s k (A.Lit (LitNat _ l))                    = Just (k + l)+    explore _ _ _ _ = Nothing+ tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr-tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket cOpApp view e) def return+tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket (isParenlessLambda . defaultNamedArg) cOpApp view e) def return   where-    view e = do-      let Application hd args = AV.appView e-      case hd of-        Var x            -> Just (HdVar x, args)-        Def f            -> Just (HdDef f, args)-        Con (AmbQ (c:_)) -> Just (HdCon c, args)-        Con (AmbQ [])    -> __IMPOSSIBLE__-        _                -> Nothing+    view e+        -- Do we have a series of inserted lambdas?+      | Just xs@(_:_) <- traverse insertedName bs =+        (,) <$> getHead hd <*> sectionArgs xs args+      where+        LamView     bs body = AV.lamView e+        Application hd args = AV.appView body +        -- Only inserted domain-free visible lambdas come from sections.+        insertedName (i, A.DomainFree ai x)+          | getOrigin i == Inserted && visible ai = Just x+        insertedName _ = Nothing++        -- Build section arguments. Need to check that:+        -- lambda bound variables appear in the right order and only as+        -- top-level arguments.+        sectionArgs :: [A.Name] -> [NamedArg A.Expr] -> Maybe [NamedArg (Maybe A.Expr)]+        sectionArgs xs = go xs+          where+            noXs = getAll . foldExpr (\ case A.Var x -> All (notElem x xs)+                                             _       -> All True)+            go [] [] = return []+            go (y : ys) (arg : args)+              | visible arg+              , A.Var y' <- namedArg arg+              , y == y'       = (fmap (Nothing <$) arg :) <$> go ys args+            go ys (arg : args)+              | visible arg, noXs arg = ((fmap . fmap) Just arg :) <$> go ys args+            go _ _ = Nothing++    view e = (, (map . fmap . fmap) Just args) <$> getHead hd+      where Application hd args = AV.appView e++    getHead (Var x)              = Just (HdVar x)+    getHead (Def f)              = Just (HdDef f)+    getHead (Con (AmbQ (c : _))) = Just (HdCon c)+    getHead (Con (AmbQ []))      = __IMPOSSIBLE__+    getHead _                    = Nothing+ tryToRecoverOpAppP :: A.Pattern -> AbsToCon (Maybe C.Pattern)-tryToRecoverOpAppP = recoverOpApp bracketP_ opApp view+tryToRecoverOpAppP = recoverOpApp bracketP_ (const False) opApp view   where     opApp r x n ps =-      C.OpAppP r x (Set.singleton n) (map defaultNamedArg ps)+      C.OpAppP r x (Set.singleton n) (map (defaultNamedArg . fromjust) ps)+    fromjust (Just x) = x+    fromjust Nothing  = __IMPOSSIBLE__  -- `view` does not generate any `Nothing`s      view p = case p of-      ConP _ (AmbQ (c:_)) ps -> Just (HdCon c, ps)-      DefP _ (AmbQ (f:_)) ps -> Just (HdDef f, ps)+      ConP _ (AmbQ (c:_)) ps -> Just (HdCon c, (map . fmap . fmap) Just ps)+      DefP _ (AmbQ (f:_)) ps -> Just (HdDef f, (map . fmap . fmap) Just ps)       _ -> __IMPOSSIBLE__       -- ProjP _ _ (AmbQ (d:_))   -> Just (HdDef d, [])   -- ? Andreas, 2016-04-21       -- _                      -> Nothing  recoverOpApp :: (ToConcrete a c, HasRange c)-  => ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c)-  -> (Range -> C.QName -> A.Name -> [c] -> c)-  -> (a -> Maybe (Hd, [NamedArg a]))+  => ((PrecedenceStack -> Bool) -> AbsToCon c -> AbsToCon c)+  -> (a -> Bool)  -- ^ Check for parenless lambdas+  -> (Range -> C.QName -> A.Name -> [Maybe c] -> c)+  -> (a -> Maybe (Hd, [NamedArg (Maybe a)]))  -- ^ `Nothing` for sections   -> a   -> AbsToCon (Maybe c)-recoverOpApp bracket opApp view e = case view e of+recoverOpApp bracket isParenlessLam opApp view e = case view e of   Nothing -> mDefault   Just (hd, args)-    | all notHidden args  -> do+    | all visible args    -> do       let  args' = map namedArg args       case hd of         HdVar  n@@ -1036,11 +1222,11 @@             as' = case as of                     as@(_ : _ : _) -> init $ tail as                     _              -> __IMPOSSIBLE__-        e1 <- toConcreteCtx (LeftOperandCtx fixity) a1-        es <- mapM (toConcreteCtx InsideOperandCtx) as'-        en <- toConcreteCtx (RightOperandCtx fixity) an         Just <$> do-          bracket (opBrackets fixity) $+          bracket (opBrackets' (maybe False isParenlessLam an) fixity) $ do+            e1 <- traverse (toConcreteCtx $ LeftOperandCtx fixity) a1+            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'+            en <- traverse (toConcreteCtx $ RightOperandCtx fixity) an             return $ opApp (getRange (e1, en)) x n ([e1] ++ es ++ [en])    -- prefix@@ -1050,10 +1236,10 @@             as' = case as of                     as@(_ : _) -> init as                     _          -> __IMPOSSIBLE__-        es <- mapM (toConcreteCtx InsideOperandCtx) as'-        en <- toConcreteCtx (RightOperandCtx fixity) an         Just <$> do-          bracket (opBrackets fixity) $+          bracket (opBrackets' (maybe False isParenlessLam an) fixity) $ do+            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'+            en <- traverse (toConcreteCtx $ RightOperandCtx fixity) an             return $ opApp (getRange (n, en)) x n (es ++ [en])    -- postfix@@ -1061,15 +1247,15 @@     | Hole <- head xs = do         let a1  = head as             as' = tail as-        e1 <- toConcreteCtx (LeftOperandCtx fixity) a1-        es <- mapM (toConcreteCtx InsideOperandCtx) as'+        e1 <- traverse (toConcreteCtx $ LeftOperandCtx fixity) a1+        es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'         Just <$> do           bracket (opBrackets fixity) $             return $ opApp (getRange (e1, n)) x n ([e1] ++ es)    -- roundfix   doQName _ x n as xs = do-    es <- mapM (toConcreteCtx InsideOperandCtx) as+    es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as     Just <$> do       bracket roundFixBrackets $         return $ opApp (getRange x) x n es@@ -1082,3 +1268,4 @@ instance ToConcrete NamedMeta C.Expr where     toConcrete i = do       return $ C.Underscore noRange (Just $ prettyShow i)+
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -1,6 +1,5 @@-{-# LANGUAGE CPP                    #-}-{-# LANGUAGE ScopedTypeVariables    #-}-{-# LANGUAGE UndecidableInstances   #-}+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE UndecidableInstances #-}  #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -42,6 +41,7 @@ import Agda.Syntax.Concrete.Generic import Agda.Syntax.Concrete.Operators import Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Pattern ( patternVars ) import Agda.Syntax.Abstract.Pretty import qualified Agda.Syntax.Internal as I import Agda.Syntax.Position@@ -62,17 +62,20 @@ import Agda.TypeChecking.Monad.Trace (traceCall, setCurrentRange) import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.MetaVars (registerInteractionPoint)+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Env (insideDotPattern, isInsideDotPattern) import Agda.TypeChecking.Rules.Builtin (isUntypedBuiltin, bindUntypedBuiltin)  import Agda.TypeChecking.Patterns.Abstract (expandPatternSynonyms) import Agda.TypeChecking.Pretty hiding (pretty, prettyA)+import Agda.TypeChecking.Warnings  import Agda.Interaction.FindFile (checkModuleName) -- import Agda.Interaction.Imports  -- for type-checking in ghci import {-# SOURCE #-} Agda.Interaction.Imports (scopeCheckImport) import Agda.Interaction.Options+import qualified Agda.Interaction.Options.Lenses as Lens  import Agda.Utils.Either import Agda.Utils.Except ( MonadError(catchError, throwError) )@@ -115,7 +118,7 @@ printLocals :: Int -> String -> ScopeM () printLocals v s = verboseS "scope.top" v $ do   locals <- getLocalVars-  reportSLn "scope.top" v $ s ++ " " ++ show locals+  reportSLn "scope.top" v $ s ++ " " ++ prettyShow locals  {--------------------------------------------------------------------------     Helpers@@ -142,55 +145,9 @@   unlessNull (duplicates $ map nameConcrete $ patternVars ps) $ \ ys -> do     typeError $ RepeatedVariablesInPattern ys -class PatternVars a where-  patternVars :: a -> [A.Name]--instance PatternVars a => PatternVars [a] where-  patternVars = concatMap patternVars--instance PatternVars a => PatternVars (Arg a) where-  patternVars = patternVars . unArg--instance PatternVars a => PatternVars (Named n a) where-  patternVars = patternVars . namedThing--instance PatternVars a => PatternVars (C.FieldAssignment' a) where-  patternVars = patternVars . (^. exprFieldA)--instance PatternVars (A.Pattern' e) where-  patternVars p = case p of-      A.VarP x               -> [x]-      A.ConP _ _ args        -> patternVars args-      A.ProjP _ _ _          -> []-      A.WildP _              -> []-      A.AsP _ x p            -> x : patternVars p-      A.DotP _ _ _           -> []-      A.AbsurdP _            -> []-      A.LitP _               -> []-      A.DefP _ _ args        -> patternVars args-        -- Projection pattern, @args@ should be empty unless we have-        -- indexed records.-      A.PatternSynP _ _ args -> patternVars args-      A.RecP _ fs            -> patternVars fs-- -- | Make sure that there are no dot patterns (called on pattern synonyms). noDotPattern :: String -> A.Pattern' e -> ScopeM (A.Pattern' Void)-noDotPattern err = dot-  where-    dot :: A.Pattern' e -> ScopeM (A.Pattern' Void)-    dot p = case p of-      A.VarP x               -> pure $ A.VarP x-      A.ConP i c args        -> A.ConP i c <$> (traverse $ traverse $ traverse dot) args-      A.ProjP i o d          -> pure $ A.ProjP i o d-      A.WildP i              -> pure $ A.WildP i-      A.AsP i x p            -> A.AsP i x <$> dot p-      A.DotP{}               -> typeError $ GenericError err-      A.AbsurdP i            -> pure $ A.AbsurdP i-      A.LitP l               -> pure $ A.LitP l-      A.DefP i f args        -> A.DefP i f <$> (traverse $ traverse $ traverse dot) args-      A.PatternSynP i c args -> A.PatternSynP i c <$> (traverse $ traverse $ traverse dot) args-      A.RecP i fs            -> A.RecP i <$> (traverse $ traverse dot) fs+noDotPattern err = traverse $ const $ typeError $ GenericError err  -- | Compute the type of the record constructor (with bogus target type) recordConstructorType :: [NiceDeclaration] -> ScopeM C.Expr@@ -226,7 +183,7 @@          C.NiceMutual _ _ _           [ C.FunSig _ _ _ _ _instanc macro _info _ _ _-          , C.FunDef _ _ _ abstract _ _+          , C.FunDef _ _ _ abstract _ _ _              [ C.Clause _top _catchall (C.LHS _p [] [] []) (C.RHS _rhs) NoWhere [] ]           ] | abstract /= AbstractDef && macro /= MacroDef ->           -- TODO: this is still too generous, we also need to check that _p@@ -297,7 +254,7 @@     -- Set the current scope to @s'@     modifyCurrentScope $ const s'     printScope "mod.inst" 20 "copied source module"-    reportSLn "scope.mod.inst" 30 $ show (pretty copyInfo)+    reportSDoc "scope.mod.inst" 30 $ return $ pretty copyInfo     let amodapp = A.SectionApp tel' m1 args'     reportSDoc "scope.decl" 70 $ vcat $       [ text $ "scope checked ModuleApplication " ++ prettyShow x@@ -389,9 +346,9 @@       [ text $ "scope checked ModuleMacro " ++ prettyShow x       ]     reportSLn  "scope.decl" 90 $ "info    = " ++ show info-    reportSLn  "scope.decl" 90 $ "m       = " ++ show m+    reportSLn  "scope.decl" 90 $ "m       = " ++ prettyShow m     reportSLn  "scope.decl" 90 $ "modapp' = " ++ show modapp'-    reportSLn  "scope.decl" 90 $ show $ pretty copyInfo+    reportSDoc "scope.decl" 90 $ return $ pretty copyInfo     reportSDoc "scope.decl" 70 $ vcat $       map (nest 2 . prettyA) adecls     return adecls@@ -423,12 +380,21 @@   :: Range -> C.QName -> C.ImportDirective                -- ^ Arguments of 'NiceOpen'   -> ScopeM (ModuleInfo, A.ModuleName, A.ImportDirective) -- ^ Arguments of 'A.Open' checkOpen r x dir = do-  reportSDoc "scope.decl" 70 $ vcat $-    [ text $ "scope checking NiceOpen " ++ prettyShow x-    ]+  reportSDoc "scope.decl" 70 $ do+    cm <- getCurrentModule+    vcat $+      [ text   "scope checking NiceOpen " <> return (pretty x)+      , text   "  getCurrentModule       = " <> prettyA cm+      , text $ "  getCurrentModule (raw) = " ++ show cm+      , text $ "  C.ImportDirective      = " ++ prettyShow dir+      ]+  -- Andreas, 2017-01-01, issue #2377: warn about useless `public`+  when (publicOpen dir) $ do+    whenM ((A.noModuleName ==) <$> getCurrentModule) $ do+      warning $ UselessPublic    m <- toAbstract (OldModuleName x)-  printScope "open" 20 $ "opening " ++ show x+  printScope "open" 20 $ "opening " ++ prettyShow x   adir <- openModule_ x dir   printScope "open" 20 $ "result:"   let minfo = ModuleInfo@@ -473,9 +439,9 @@  setContextCPS :: Precedence -> (a -> ScopeM b) ->                  ((a -> ScopeM b) -> ScopeM b) -> ScopeM b-setContextCPS p ret f = do-  p' <- getContextPrecedence-  withContextPrecedence p $ f $ withContextPrecedence p' . ret+setContextCPS p ret f =+  withContextPrecedence p $ f $+    bracket_ popContextPrecedence (\ _ -> pushContextPrecedence p) . ret  localToAbstractCtx :: ToAbstract concrete abstract =>                      Precedence -> concrete -> (abstract -> ScopeM a) -> ScopeM a@@ -518,7 +484,11 @@  -- Names ------------------------------------------------------------------ -newtype NewName a = NewName a+data NewName a = NewName+  { newLetBound :: Bool -- bound by a @let@?+  , newName     :: a+  }+ data OldQName     = OldQName C.QName (Maybe (Set A.Name))   -- ^ If a set is given, then the first name must correspond to one   -- of the names in the set.@@ -528,23 +498,23 @@   -- of the names in the set.  instance ToAbstract (NewName C.Name) A.Name where-  toAbstract (NewName x) = do+  toAbstract (NewName b x) = do     y <- freshAbstractName_ x-    bindVariable x y+    bindVariable b x y     return y  instance ToAbstract (NewName C.BoundName) A.Name where-  toAbstract (NewName BName{ boundName = x, bnameFixity = fx }) = do+  toAbstract (NewName b BName{ boundName = x, bnameFixity = fx }) = do     y <- freshAbstractName fx x-    bindVariable x y+    bindVariable b x y     return y  instance ToAbstract OldQName A.Expr where   toAbstract (OldQName x ns) = do     qx <- resolveName' allKindsOfNames ns x-    reportSLn "scope.name" 10 $ "resolved " ++ show x ++ ": " ++ show qx+    reportSLn "scope.name" 10 $ "resolved " ++ prettyShow x ++ ": " ++ prettyShow qx     case qx of-      VarName x'          -> return $ A.Var x'+      VarName x' _        -> return $ A.Var x'       DefinedName _ d     -> return $ nameExpr d       FieldName     ds    -> return $ A.Proj ProjPrefix $ AmbQ (map anameName ds)       ConstructorName ds  -> return $ A.Con $ AmbQ (map anameName ds)@@ -557,13 +527,13 @@  instance ToAbstract PatName APatName where   toAbstract (PatName x ns) = do-    reportSLn "scope.pat" 10 $ "checking pattern name: " ++ show x+    reportSLn "scope.pat" 10 $ "checking pattern name: " ++ prettyShow x     rx <- resolveName' [ConName, PatternSynName] ns x           -- Andreas, 2013-03-21 ignore conflicting names which cannot           -- be meant since we are in a pattern     z  <- case (rx, x) of       -- TODO: warn about shadowing-      (VarName y,       C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x+      (VarName y _,     C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x       (FieldName d,     C.QName x)                          -> return $ Left x       (DefinedName _ d, C.QName x) | DefName == anameKind d -> return $ Left x       (UnknownName,     C.QName x)                          -> return $ Left x@@ -572,15 +542,15 @@       _ -> genericError $ "Cannot pattern match on non-constructor " ++ prettyShow x     case z of       Left x  -> do-        reportSLn "scope.pat" 10 $ "it was a var: " ++ show x-        p <- VarPatName <$> toAbstract (NewName x)+        reportSLn "scope.pat" 10 $ "it was a var: " ++ prettyShow x+        p <- VarPatName <$> toAbstract (NewName False x)         printLocals 10 "bound it:"         return p       Right (Left ds) -> do-        reportSLn "scope.pat" 10 $ "it was a con: " ++ show (map anameName ds)+        reportSLn "scope.pat" 10 $ "it was a con: " ++ prettyShow (map anameName ds)         return $ ConPatName ds       Right (Right d) -> do-        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ show (anameName d)+        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ prettyShow (anameName d)         return $ PatternSynPatName d  class ToQName a where@@ -601,7 +571,7 @@       FieldName (d:_)         -> return $ anameName d       FieldName []            -> __IMPOSSIBLE__       PatternSynResName d     -> return $ anameName d-      VarName x               -> typeError $ GenericError $ "Not a defined name: " ++ show x+      VarName x _             -> typeError $ GenericError $ "Not a defined name: " ++ prettyShow x       UnknownName             -> notInScope (toQName x)  newtype NewModuleName      = NewModuleName      C.Name@@ -615,7 +585,8 @@ checkForModuleClash x = do   ms <- scopeLookup (C.QName x) <$> getScope   unless (null ms) $ do-    reportSLn "scope.clash" 20 $ "clashing modules ms = " ++ show ms+    reportSLn "scope.clash" 20 $ "clashing modules ms = " ++ prettyShow ms+    reportSLn "scope.clash" 60 $ "clashing modules ms = " ++ show ms     setCurrentRange x $       typeError $ ShadowedModule x $                 map ((`withRangeOf` x) . amodName) ms@@ -625,7 +596,7 @@     checkForModuleClash x     m <- getCurrentModule     y <- freshQModule m x-    createModule False y+    createModule Nothing y     return y  instance ToAbstract NewModuleQName A.ModuleName where@@ -633,7 +604,7 @@     where       toAbs m (C.QName x)  = do         y <- freshQModule m x-        createModule False y+        createModule Nothing y         return y       toAbs m (C.Qual x q) = do         m' <- freshQModule m x@@ -647,14 +618,14 @@  -- | Peel off 'C.HiddenArg' and represent it as an 'NamedArg'. mkNamedArg :: C.Expr -> NamedArg C.Expr-mkNamedArg (C.HiddenArg   _ e) = Arg (setHiding Hidden defaultArgInfo) e-mkNamedArg (C.InstanceArg _ e) = Arg (setHiding Instance defaultArgInfo) e+mkNamedArg (C.HiddenArg   _ e) = Arg (hide         defaultArgInfo) e+mkNamedArg (C.InstanceArg _ e) = Arg (makeInstance defaultArgInfo) e mkNamedArg e                   = Arg defaultArgInfo $ unnamed e  -- | Peel off 'C.HiddenArg' and represent it as an 'Arg', throwing away any name. mkArg' :: ArgInfo -> C.Expr -> Arg C.Expr-mkArg' info (C.HiddenArg   _ e) = Arg (setHiding Hidden info) $ namedThing e-mkArg' info (C.InstanceArg _ e) = Arg (setHiding Instance info) $ namedThing e+mkArg' info (C.HiddenArg   _ e) = Arg (hide         info) $ namedThing e+mkArg' info (C.InstanceArg _ e) = Arg (makeInstance info) $ namedThing e mkArg' info e                   = Arg (setHiding NotHidden info) e  -- | By default, arguments are @Relevant@.@@ -692,9 +663,11 @@     e <- toAbstractCtx ctx e     -- We have at least one binder.  Get first @b@ and rest @bs@.     caseList bs __IMPOSSIBLE__ $ \ b bs -> do-      return $ A.Lam (ExprRange r) b $ foldr mkLam e bs+      return $ A.Lam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) b $ foldr mkLam e bs   where-    mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e+    -- We set the origin of the outer lambda to `UserWritten` and the origin of+    -- the inner lambdas to `Inserted`.+    mkLam b e = A.Lam (defaultLamInfo $ fuseRange b e) b e  -- | Scope check extended lambda expression. scopeCheckExtendedLam :: Range -> [(C.LHS, C.RHS, WhereClause, Bool)] -> ScopeM A.Expr@@ -705,18 +678,18 @@   -- Find an unused name for the extended lambda definition.   cname <- nextlamname r 0 extendedLambdaName   name  <- freshAbstractName_ cname-  reportSLn "scope.extendedLambda" 10 $ "new extended lambda name: " ++ show name+  reportSLn "scope.extendedLambda" 10 $ "new extended lambda name: " ++ prettyShow name   qname <- qualifyName_ name   bindName (PrivateAccess Inserted) DefName cname qname -  -- Compose a function definition an scope check it.+  -- Compose a function definition and 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 [] noFixity' {-'-} a __IMPOSSIBLE__ cname $+    d = C.FunDef r [] noFixity' {-'-} a NotInstanceDef __IMPOSSIBLE__ cname $           for cs $ \ (lhs, rhs, wh, ca) -> -- wh == NoWhere, see parser for more info             C.Clause cname ca (mapLhsOriginalPattern insertApp lhs) rhs wh []   scdef <- toAbstract d@@ -725,7 +698,7 @@   case scdef of     A.ScopedDecl si [A.FunDef di qname' NotDelayed cs] -> do       setScope si  -- This turns into an A.ScopedExpr si $ A.ExtendedLam...-      return $ A.ExtendedLam (ExprRange r) di qname' cs+      return $ A.ExtendedLam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) di qname' cs     _ -> __IMPOSSIBLE__    where@@ -738,8 +711,6 @@         UnknownName -> return cname         _           -> nextlamname r (i+1) s -- instance ToAbstract C.Expr A.Expr where   toAbstract e =     traceCall (ScopeCheckExpr e) $ annotateExpr $ case e of@@ -748,24 +719,30 @@       Ident x -> toAbstract (OldQName x Nothing)    -- Literals-      C.Lit l@(LitNat r n) -> do-        let builtin | n < 0     = Just <$> primFromNeg    -- negative literals are only allowed if FROMNEG is defined-                    | otherwise = getBuiltin' builtinFromNat-            l'   = LitNat r (abs n)-            info = ExprRange r-        conv <- builtin-        case conv of-          Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l')-          _                -> return $ A.Lit l+      C.Lit l ->+        case l of+          LitNat r n -> do+            let builtin | n < 0     = Just <$> primFromNeg    -- negative literals are only allowed if FROMNEG is defined+                        | otherwise = ensureInScope =<< getBuiltin' builtinFromNat+                l'   = LitNat r (abs n)+                info = ExprRange r+            conv <- builtin+            case conv of+              Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l')+              _                -> return $ A.Lit l -      C.Lit l@(LitString r s) -> do-        conv <- getBuiltin' builtinFromString-        let info = ExprRange r-        case conv of-          Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l)-          _                -> return $ A.Lit l+          LitString r s -> do+            conv <- ensureInScope =<< getBuiltin' builtinFromString+            let info = ExprRange r+            case conv of+              Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l)+              _                -> return $ A.Lit l -      C.Lit l -> return $ A.Lit l+          _ -> return $ A.Lit l+        where+          ensureInScope :: Maybe I.Term -> ScopeM (Maybe I.Term)+          ensureInScope v@(Just (I.Def q _)) = ifM (isNameInScope q <$> getScope) (return v) (return Nothing)+          ensureInScope _ = return Nothing    -- Meta variables       C.QuestionMark r n -> do@@ -813,7 +790,7 @@       C.InstanceArg _ _ -> nothingAppliedToInstanceArg e    -- Lambda-      C.AbsurdLam r h -> return $ A.AbsurdLam (ExprRange r) h+      C.AbsurdLam r h -> return $ A.AbsurdLam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) h        C.Lam r bs e -> toAbstractLam r bs e TopCtx @@ -860,7 +837,14 @@         A.RecUpdate (ExprRange r) <$> toAbstract e <*> toAbstractCtx TopCtx fs    -- Parenthesis-      C.Paren _ e -> toAbstractCtx TopCtx e+      C.Paren _ e -> setLamParens <$> toAbstractCtx TopCtx e+        where+          setP i = i { lamParens = True }+          setLamParens (A.Lam i bs e)             = A.Lam (setP i) bs e+          setLamParens (A.AbsurdLam i h)          = A.AbsurdLam (setP i) h+          setLamParens (A.ExtendedLam i def q cs) = A.ExtendedLam (setP i) def q cs+          setLamParens (A.ScopedExpr s e)         = A.ScopedExpr s (setLamParens e)+          setLamParens e                          = e    -- Idiom brackets       C.IdiomBrackets r e ->@@ -879,7 +863,7 @@    -- Quoting       C.QuoteGoal _ x e -> do-        x' <- toAbstract (NewName x)+        x' <- toAbstract (NewName False x)         e' <- toAbstract e         return $ A.QuoteGoal (ExprRange $ getRange e) x' e'       C.QuoteContext r -> return $ A.QuoteContext (ExprRange r)@@ -912,7 +896,7 @@   toAbstract = traverse toAbstract  instance ToAbstract C.LamBinding A.LamBinding where-  toAbstract (C.DomainFree info x) = A.DomainFree info <$> toAbstract (NewName x)+  toAbstract (C.DomainFree info x) = A.DomainFree info <$> toAbstract (NewName False x)   toAbstract (C.DomainFull tb)     = A.DomainFull <$> toAbstract tb  makeDomainFull :: C.LamBinding -> C.TypedBindings@@ -927,7 +911,7 @@ instance ToAbstract C.TypedBinding A.TypedBinding where   toAbstract (C.TBind r xs t) = do     t' <- toAbstractCtx TopCtx t-    xs' <- toAbstract $ map (fmap NewName) xs+    xs' <- toAbstract $ map (fmap (NewName False)) xs     return $ A.TBind r xs' t'   toAbstract (C.TLet r ds) = A.TLet r <$> toAbstract (LetDefs ds) @@ -1049,7 +1033,7 @@   -> ScopeM [A.Declaration]  -- ^ The code for checking the module contents.   -> ScopeM (ScopeInfo, [A.Declaration]) scopeCheckModule r x qm tel checkDs = do-  printScope "module" 20 $ "checking module " ++ show x+  printScope "module" 20 $ "checking module " ++ prettyShow x   -- Andreas, 2013-12-10: Telescope does not live in the new module   -- but its parent, so check it before entering the new module.   -- This is important for Nicolas Pouillard's open parametrized modules@@ -1059,13 +1043,13 @@     withCurrentModule qm $ do       -- pushScope m       -- qm <- getCurrentModule-      printScope "module" 20 $ "inside module " ++ show x+      printScope "module" 20 $ "inside module " ++ prettyShow x       ds    <- checkDs       scope <- getScope       return (scope, [ A.Section info (qm `withRangesOfQ` x) tel ds ])    -- Binding is done by the caller-  printScope "module" 20 $ "after module " ++ show x+  printScope "module" 20 $ "after module " ++ prettyShow x   return res   where     info = ModuleInfo r noRange Nothing Nothing Nothing@@ -1111,7 +1095,26 @@         (outsideDecls, [ C.Module r m0 tel insideDecls ]) -> do           -- If the module name is _ compute the name from the file path           m <- if isNoName m0-                then return $ C.QName $ C.Name noRange [Id $ stringToRawName $ rootNameModule file]+                then do+                  -- Andreas, 2017-07-28, issue #1077+                  -- Check if the insideDecls end in a single module which has the same+                  -- name as the file.  In this case, it is highly likely that the user+                  -- put some non-allowed declarations before the top-level module in error.+                  case flip span insideDecls $ \case { C.Module{} -> False; _ -> True } of+                    (ds0, [ C.Module _ m1 _ _ ])+                       | C.toTopLevelModuleName m1 == expectedMName+                         -- If the anonymous module comes from the user,+                         -- the range cannot be the beginningOfFile.+                         -- That is the range if the parser inserted the anon. module.+                       , r == beginningOfFile (getRange insideDecls) -> do++                         traceCall (SetRange $ getRange ds0) $ typeError $ GenericError $+                           "Illegal declaration(s) before top-level module"++                    -- Otherwise, reconstruct the top-level module name+                    _ -> return $ C.QName $ C.Name (getRange m0)+                           [Id $ stringToRawName $ rootNameModule file]+                -- Andreas, 2017-05-17, issue #2574, keep name as jump target!                 -- Andreas, 2016-07-12, ALTERNATIVE:                 -- -- We assign an anonymous file module the name expected from                 -- -- its import.  For flat file structures, this is the same.@@ -1144,9 +1147,12 @@  -- | runs Syntax.Concrete.Definitions.niceDeclarations on main module niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration]-niceDecls ds = case runNice $ niceDeclarations ds of-  Left e   -> throwError $ Exception (getRange e) $ pretty e-  Right ds -> return ds+niceDecls ds = do+  let (result, warns) = runNice $ niceDeclarations ds+  unless (null warns) $ setCurrentRange ds $ warning $ NicifierIssue warns+  case result of+    Left e   -> throwError $ Exception (getRange e) $ pretty e+    Right ds -> return ds  #if __GLASGOW_HASKELL__ >= 710 instance {-# OVERLAPPING #-} ToAbstract [C.Declaration] [A.Declaration] where@@ -1157,7 +1163,7 @@     -- When --safe is active the termination checker (Issue 586) and     -- positivity checker (Issue 1614) may not be switched off, and     -- polarities may not be assigned.-    ds <- ifM (optSafe <$> commandLineOptions)+    ds <- ifM (Lens.getSafeMode <$> commandLineOptions)               (mapM (noNoTermCheck >=> noNoPositivityCheck >=> noPolarity) ds)               (return ds)     toAbstract =<< niceDecls ds@@ -1166,20 +1172,21 @@     -- @NoTerminationCheck@ because the @NO_TERMINATION_CHECK@ pragma     -- was removed. See Issue 1763.     noNoTermCheck :: C.Declaration -> TCM C.Declaration-    noNoTermCheck (C.Pragma (C.TerminationCheckPragma r NonTerminating)) =-      typeError $ SafeFlagNonTerminating-    noNoTermCheck (C.Pragma (C.TerminationCheckPragma r Terminating)) =-      typeError $ SafeFlagTerminating+    noNoTermCheck d@(C.Pragma (C.TerminationCheckPragma r NonTerminating)) =+      d <$ (setCurrentRange d $ warning SafeFlagNonTerminating)+    noNoTermCheck d@(C.Pragma (C.TerminationCheckPragma r Terminating)) =+      d <$ (setCurrentRange d $ warning SafeFlagTerminating)     noNoTermCheck d = return d      noNoPositivityCheck :: C.Declaration -> TCM C.Declaration-    noNoPositivityCheck (C.Pragma (C.NoPositivityCheckPragma _)) =-      typeError $ SafeFlagNoPositivityCheck+    noNoPositivityCheck d@(C.Pragma (C.NoPositivityCheckPragma _)) =+      d <$ (setCurrentRange d $ warning SafeFlagNoPositivityCheck)     noNoPositivityCheck d = return d      noPolarity :: C.Declaration -> TCM C.Declaration-    noPolarity (C.Pragma C.PolarityPragma{}) = typeError SafeFlagPolarity-    noPolarity d                             = return d+    noPolarity d@(C.Pragma C.PolarityPragma{}) =+      d <$ (setCurrentRange d $ warning SafeFlagPolarity)+    noPolarity d                               = return d  newtype LetDefs = LetDefs [C.Declaration] newtype LetDef = LetDef NiceDeclaration@@ -1191,16 +1198,16 @@ instance ToAbstract LetDef [A.LetBinding] where   toAbstract (LetDef d) =     case d of-      NiceMutual _ _ _ d@[C.FunSig _ fx _ _ instanc macro info _ x t, C.FunDef _ _ _ abstract _ _ [cl]] ->+      NiceMutual _ _ _ d@[C.FunSig _ fx _ _ instanc macro info _ x t, C.FunDef _ _ _ abstract _ _ _ [cl]] ->           do  when (abstract == AbstractDef) $ do                 genericError $ "abstract not allowed in let expressions"               when (macro == MacroDef) $ do                 genericError $ "Macros cannot be defined in a let expression."               (x', e) <- letToAbstract cl               t <- toAbstract t-              x <- toAbstract (NewName $ mkBoundName x fx)+              x <- toAbstract (NewName True $ mkBoundName x fx)               -- If InstanceDef set info to Instance-              let info' | instanc == InstanceDef = setHiding Instance info+              let info' | instanc == InstanceDef = makeInstance info                         | otherwise              = info               -- There are sometimes two instances of the               -- let-bound variable, one declaration and one@@ -1230,7 +1237,7 @@               Nothing -> throwError err               Just x  -> toAbstract $ LetDef $ NiceMutual r termCheck True                 [ C.FunSig r noFixity' PublicAccess ConcreteDef NotInstanceDef NotMacroDef defaultArgInfo termCheck x (C.Underscore (getRange x) Nothing)-                , C.FunDef r __IMPOSSIBLE__ __IMPOSSIBLE__ ConcreteDef __IMPOSSIBLE__ __IMPOSSIBLE__+                , C.FunDef r __IMPOSSIBLE__ __IMPOSSIBLE__ ConcreteDef NotInstanceDef __IMPOSSIBLE__ __IMPOSSIBLE__                   [C.Clause x (ca || catchall) lhs (C.RHS rhs) NoWhere []]                 ]             where@@ -1252,7 +1259,8 @@               definedName C.OpAppP{}             = __IMPOSSIBLE__        -- You can't open public in a let-      NiceOpen r x dirs | not (publicOpen dirs) -> do+      NiceOpen r x dirs -> do+        when (publicOpen dirs) $ warning UselessPublic         m    <- toAbstract (OldModuleName x)         adir <- openModule_ x dirs         let minfo = ModuleInfo@@ -1264,7 +1272,8 @@               }         return [A.LetOpen minfo m adir] -      NiceModuleMacro r p x modapp open dir | not (publicOpen dir) ->+      NiceModuleMacro r p x modapp open dir -> do+        when (publicOpen dir) $ warning UselessPublic         -- Andreas, 2014-10-09, Issue 1299: module macros in lets need         -- to be private         checkModuleMacro LetApply r (PrivateAccess Inserted) x modapp open dir@@ -1292,12 +1301,12 @@         lambda e (Arg info (Named Nothing (A.VarP x))) =                 return $ A.Lam i (A.DomainFree info x) e             where-                i = ExprRange (fuseRange x e)+                i = defaultLamInfo (fuseRange x e)         lambda e (Arg info (Named Nothing (A.WildP i))) =             do  x <- freshNoName (getRange i)                 return $ A.Lam i' (A.DomainFree info x) e             where-                i' = ExprRange (fuseRange i e)+                i' = defaultLamInfo (fuseRange i e)         lambda _ _ = notAValidLetBinding d  newtype Blind a = Blind { unBlind :: a }@@ -1322,7 +1331,7 @@     C.Axiom r f p a i rel _ x t -> do       -- check that we do not postulate in --safe mode       clo <- commandLineOptions-      when (optSafe clo) (typeError (SafeFlagPostulate x))+      when (Lens.getSafeMode clo) (warning $ SafeFlagPostulate x)       -- check the postulate       toAbstractNiceAxiom A.NoFunSig NotMacroDef d @@ -1343,8 +1352,6 @@         -- this ensures that projections out of irrelevant fields cannot occur         -- Ulf: unless you turn on --irrelevant-projections         bindName p FldName x y-      when (getHiding t /= Instance && argInfoOverlappable (argInfo t)) $-        genericError "The 'overlap' keyword only applies to instance fields (fields marked with {{ }})"       return [ A.Field (mkDefInfoInstance x f p a i NotMacroDef r) y t' ]    -- Primitive function@@ -1370,7 +1377,7 @@         return [ A.RecSig (mkDefInfo x f p a r) x' ls' t' ]      C.NiceDataSig r f p a _pc x ls t -> withLocalVars $ do-        printScope "scope.data.sig" 20 ("checking DataSig for " ++ show x)+        printScope "scope.data.sig" 20 ("checking DataSig for " ++ prettyShow x)         ensureNoLetStms ls         ls' <- toAbstract (map makeDomainFull ls)         t'  <- toAbstract t@@ -1385,22 +1392,22 @@         toAbstractNiceAxiom A.FunSig m (C.Axiom r f p a i rel Nothing x t)    -- Function definitions-    C.FunDef r ds f a tc x cs -> do-        printLocals 10 $ "checking def " ++ show x+    C.FunDef r ds f a i tc x cs -> do+        printLocals 10 $ "checking def " ++ prettyShow x         (x',cs) <- toAbstract (OldName x,cs)         let delayed = NotDelayed         -- (delayed, cs) <- translateCopatternClauses cs -- TODO-        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' delayed cs ]+        return [ A.FunDef (mkDefInfoInstance x f PublicAccess a i NotMacroDef r) x' delayed cs ]    -- Uncategorized function clauses     C.NiceFunClause r acc abs termCheck catchall (C.FunClause lhs rhs wcls ca) ->       genericError $-        "Missing type signature for left hand side " ++ show lhs+        "Missing type signature for left hand side " ++ prettyShow lhs     C.NiceFunClause{} -> __IMPOSSIBLE__    -- Data definitions     C.DataDef r f a _ x pars cons -> withLocalVars $ do-        printScope "scope.data.def" 20 ("checking DataDef for " ++ show x)+        printScope "scope.data.def" 20 ("checking DataDef for " ++ prettyShow x)         ensureNoLetStms pars         -- Check for duplicate constructors         do cs <- mapM conName cons@@ -1416,12 +1423,12 @@         -- Create the module for the qualified constructors         checkForModuleClash x -- disallow shadowing previously defined modules         let m = mnameFromList $ qnameToList x'-        createModule True m+        createModule (Just IsData) m         bindModule p x m  -- make it a proper module         cons <- toAbstract (map (ConstrDecl NoRec m a p) cons)         -- Open the module         -- openModule_ (C.QName x) defaultImportDir{ publicOpen = True }-        printScope "data" 20 $ "Checked data " ++ show x+        printScope "data" 20 $ "Checked data " ++ prettyShow x         return [ A.DataDef (mkDefInfo x f PublicAccess a r) x' pars cons ]       where         conName (C.Axiom _ _ _ _ _ _ _ c _) = return c@@ -1443,12 +1450,22 @@         m0     <- getCurrentModule         let m = A.qualifyM m0 $ mnameFromList [ last $ qnameToList x' ]         printScope "rec" 15 "before record"-        createModule False m+        createModule (Just IsRecord) m         -- We scope check the fields a second time, as actual fields.         afields <- withCurrentModule m $ do           afields <- toAbstract fields           printScope "rec" 15 "checked fields"           return afields+        -- Andreas, 2017-07-13 issue #2642 disallow duplicate fields+        -- Check for duplicate fields. (See "Check for duplicate constructors")+        do let fs = catMaybes $ for fields $ \case+                 C.NiceField _ _ _ _ _ f _ -> Just f+                 _ -> Nothing+           let dups = nub $ fs \\ nub fs+               bad  = filter (`elem` dups) fs+           unless (distinct fs) $+             setCurrentRange bad $+               typeError $ DuplicateFields dups         bindModule p x m         cm' <- mapM (\(ThingWithFixity c f, _) -> bindConstructorName m c f a p YesRec) cm         let inst = caseMaybe cm NotInstanceDef snd@@ -1554,7 +1571,7 @@       return [ A.UnquoteDef [ mkDefInfo x fx PublicAccess a r | (fx, x) <- zip fxs xs ] ys e ]      NicePatternSyn r fx n as p -> do-      reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ show r+      reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ prettyShow n       defn@(as, p) <- withLocalVars $ do          p  <- toAbstract =<< parsePatternSyn p          checkPatternLinearity [p]@@ -1570,8 +1587,8 @@       bindName PublicAccess PatternSynName n y       modifyPatternSyns (Map.insert y defn)       return [A.PatternSynDef y as p]   -- only for highlighting-      where unVarName (VarName a) = return a-            unVarName _           = typeError $ UnusedVariableInPatternSynonym+      where unVarName (VarName a _) = return a+            unVarName _ = typeError $ UnusedVariableInPatternSynonym      where       -- checking postulate or type sig. without checking safe flag@@ -1639,16 +1656,11 @@     case e of       A.Def x          -> return [ A.RewritePragma x ]       A.Proj _ (AmbQ [x]) -> return [ A.RewritePragma x ]-      A.Proj _ x       -> genericError $ "REWRITE used on ambiguous name " ++ show x+      A.Proj _ x       -> genericError $ "REWRITE used on ambiguous name " ++ prettyShow x       A.Con (AmbQ [x]) -> return [ A.RewritePragma x ]-      A.Con x          -> genericError $ "REWRITE used on ambiguous name " ++ show x-      A.Var x          -> genericError $ "REWRITE used on parameter " ++ show x ++ " instead of on a defined symbol"+      A.Con x          -> genericError $ "REWRITE used on ambiguous name " ++ prettyShow x+      A.Var x          -> genericError $ "REWRITE used on parameter " ++ prettyShow x ++ " instead of on a defined symbol"       _       -> __IMPOSSIBLE__-  toAbstract (C.CompiledDeclareDataPragma _ x hs) = do-    e <- toAbstract $ OldQName x Nothing-    case e of-      A.Def x -> return [ A.CompiledDeclareDataPragma x hs ]-      _       -> fail $ "Bad compiled type: " ++ show x  -- TODO: error message   toAbstract (C.CompiledTypePragma _ x hs) = do     e <- toAbstract $ OldQName x Nothing     case e of@@ -1664,7 +1676,7 @@     y <- case e of           A.Def x -> return x           A.Proj _ (AmbQ [x]) -> return x -- TODO: do we need to do s.th. special for projections? (Andreas, 2014-10-12)-          A.Proj _ x -> genericError $ "COMPILED on ambiguous name " ++ show x+          A.Proj _ x -> genericError $ "COMPILED on ambiguous name " ++ prettyShow x           A.Con _ -> genericError "Use COMPILED_DATA for constructors" -- TODO           _       -> __IMPOSSIBLE__     return [ A.CompiledPragma y hs ]@@ -1674,12 +1686,6 @@           A.Def x -> return x           _       -> __IMPOSSIBLE__     return [ A.CompiledExportPragma y hs ]-  toAbstract (C.CompiledEpicPragma _ x ep) = do-    e <- toAbstract $ OldQName x Nothing-    y <- case e of-          A.Def x -> return x-          _       -> __IMPOSSIBLE__-    return [ A.CompiledEpicPragma y ep ]   toAbstract (C.CompiledJSPragma _ x ep) = do     e <- toAbstract $ OldQName x Nothing     y <- case e of@@ -1702,7 +1708,22 @@     e <- toAbstract $ OldQName x Nothing     case e of       A.Def x -> return [ A.CompiledDataUHCPragma x crd crcs ]-      _       -> fail $ "Bad compiled type: " ++ show x  -- TODO: error message+      _       -> fail $ "Bad compiled type: " ++ prettyShow x  -- TODO: error message+  toAbstract (C.ForeignPragma _ b s) = [] <$ addForeignCode b s+  toAbstract (C.CompilePragma _ b x s) = do+    e <- toAbstract $ OldQName x Nothing+    let err what = genericError $ "Cannot COMPILE " ++ what ++ " " ++ prettyShow x+    y <- case e of+          A.Def x             -> return x+          A.Proj _ (AmbQ [x]) -> return x+          A.Proj _ x          -> err "ambiguous projection"+          A.Con (AmbQ [x])    -> return x+          A.Con x             -> err "ambiguous constructor"+          A.PatternSyn{}      -> err "pattern synonym"+          A.Var{}             -> err "local variable"+          _                   -> __IMPOSSIBLE__+    return [ A.CompilePragma b y s ]+   toAbstract (C.StaticPragma _ x) = do       e <- toAbstract $ OldQName x Nothing       y <- case e of@@ -1712,6 +1733,15 @@             "STATIC used on ambiguous name " ++ prettyShow x           _        -> genericError "Target of STATIC pragma should be a function"       return [ A.StaticPragma y ]+  toAbstract (C.InjectivePragma _ x) = do+      e <- toAbstract $ OldQName x Nothing+      y <- case e of+          A.Def  x -> return x+          A.Proj _ (AmbQ [x]) -> return x+          A.Proj _ x -> genericError $+            "INJECTIVE used on ambiguous name " ++ prettyShow x+          _        -> genericError "Target of INJECTIVE pragma should be a defined symbol"+      return [ A.InjectivePragma y ]   toAbstract (C.InlinePragma _ x) = do       e <- toAbstract $ OldQName x Nothing       y <- case e of@@ -1752,6 +1782,14 @@   toAbstract (C.HaskellCodePragma _ s) = do     addInlineHaskell s     return []+  toAbstract (C.EtaPragma _ x) = do+    e <- toAbstract $ OldQName x Nothing+    case e of+      A.Def x -> return [ A.EtaPragma x ]+      _       -> do+       e <- showA e+       genericError $ "Pragma ETA: expected identifier, " +++         "but found expression " ++ e   toAbstract (C.DisplayPragma _ lhs rhs) = withLocalVars $ do     let err = genericError "DISPLAY pragma left-hand side must have form 'f e1 .. en'"         getHead (C.IdentP x)          = return x@@ -1763,12 +1801,12 @@     (isPatSyn, hd) <- do       qx <- resolveName' allKindsOfNames Nothing top       case qx of-        VarName x'          -> return . (False,) $ A.qnameFromList [x']+        VarName x' _        -> return . (False,) $ A.qnameFromList [x']         DefinedName _ d     -> return . (False,) $ anameName d         FieldName     [d]    -> return . (False,) $ anameName d-        FieldName ds         -> genericError $ "Ambiguous projection " ++ show top ++ ": " ++ show (map anameName ds)+        FieldName ds         -> genericError $ "Ambiguous projection " ++ prettyShow top ++ ": " ++ prettyShow (map anameName ds)         ConstructorName [d] -> return . (False,) $ anameName d-        ConstructorName ds  -> genericError $ "Ambiguous constructor " ++ show top ++ ": " ++ show (map anameName ds)+        ConstructorName ds  -> genericError $ "Ambiguous constructor " ++ prettyShow top ++ ": " ++ prettyShow (map anameName ds)         UnknownName         -> notInScope top         PatternSynResName d -> return . (True,) $ anameName d @@ -1828,7 +1866,7 @@     if not (null eqs)       then do         rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds)-        return $ A.Clause lhs' [] rhs [] catchall+        return $ A.Clause lhs' [] [] rhs [] catchall       else do         -- ASR (16 November 2015) Issue 1137: We ban termination         -- pragmas inside `where` clause.@@ -1839,7 +1877,7 @@         (rhs, ds) <- whereToAbstract (getRange wh) whname whds $                       toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])         rhs <- toAbstract rhs-        return $ A.Clause lhs' [] rhs ds catchall+        return $ A.Clause lhs' [] [] rhs ds catchall  whereToAbstract :: Range -> Maybe (C.Name, Access) -> [C.Declaration] -> ScopeM a -> ScopeM (a, [A.Declaration]) whereToAbstract _ _      []   inner = (,[]) <$> inner@@ -1965,7 +2003,7 @@                 UnknownName -> notInScope d                 _           -> genericError $                   "head of copattern needs to be a field identifier, but "-                  ++ show d ++ " isn't one"+                  ++ prettyShow d ++ " isn't one"         A.LHSProj (AmbQ ds) <$> toAbstract l <*> toAbstract ps2  instance ToAbstract c a => ToAbstract (WithHiding c) (WithHiding a) where@@ -1992,17 +2030,7 @@ -- bound anywhere in the pattern.  instance ToAbstract (A.Pattern' C.Expr) (A.Pattern' A.Expr) where-    toAbstract (A.VarP x)             = return $ A.VarP x-    toAbstract (A.ConP i ds as)       = A.ConP i ds <$> mapM toAbstract as-    toAbstract (A.ProjP i o ds)       = return $ A.ProjP i o ds-    toAbstract (A.DefP i x as)        = A.DefP i x <$> mapM toAbstract as-    toAbstract (A.WildP i)            = return $ A.WildP i-    toAbstract (A.AsP i x p)          = A.AsP i x <$> toAbstract p-    toAbstract (A.DotP i o e)         = A.DotP i o <$> insideDotPattern (toAbstract e)-    toAbstract (A.AbsurdP i)          = return $ A.AbsurdP i-    toAbstract (A.LitP l)             = return $ A.LitP l-    toAbstract (A.PatternSynP i x as) = A.PatternSynP i x <$> mapM toAbstract as-    toAbstract (A.RecP i fs)          = A.RecP i <$> mapM (traverse toAbstract) fs+  toAbstract = traverse $ insideDotPattern . toAbstract  resolvePatternIdentifier ::   Range -> C.QName -> Maybe (Set A.Name) -> ScopeM (A.Pattern' C.Expr)@@ -2023,14 +2051,14 @@      toAbstract (AppP (QuoteP _) p)       | IdentP x <- namedArg p,-        getHiding p == NotHidden = do+        visible p = do       e <- toAbstract (OldQName x Nothing)       let quoted (A.Def x) = return x           quoted (A.Macro x) = return x           quoted (A.Proj _ (AmbQ [x])) = return x-          quoted (A.Proj _ (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ show xs+          quoted (A.Proj _ (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ prettyShow xs           quoted (A.Con (AmbQ [x])) = return x-          quoted (A.Con (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ show xs+          quoted (A.Con (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ prettyShow xs           quoted (A.ScopedExpr _ e) = quoted e           quoted _                  = genericError $ "quote: not a defined name"       A.LitP . LitQName (getRange x) <$> quoted e@@ -2072,7 +2100,7 @@     toAbstract (C.ParenP _ p)   = toAbstract p     toAbstract (C.LitP l)       = return $ A.LitP l     toAbstract p0@(C.AsP r x p) = do-        x <- toAbstract (NewName x)+        x <- toAbstract (NewName False x)         p <- toAbstract p         return $ A.AsP info x p         where@@ -2114,7 +2142,7 @@     es <- left (notaFixity nota) nonBindingParts es     -- Prepend the generated section binders (if any).     let body = foldl' app op es-    return $ foldr (A.Lam (ExprRange (getRange body))) body binders+    return $ foldr (A.Lam (defaultLamInfo (getRange body))) body binders   where     -- Build an application in the abstract syntax, with correct Range.     app e arg = A.App (ExprRange (fuseRange e arg)) e arg@@ -2161,7 +2189,7 @@                              replacePlaceholders as       Placeholder _     -> do         x <- freshName noRange "section"-        let i = argInfo a+        let i = setOrigin Inserted $ argInfo a         (ls, ns) <- replacePlaceholders as         return ( A.DomainFree i x : ls                , set (Left (Var x)) a : ns
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE CPP                    #-}+{-# LANGUAGE CPP                        #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE NondecreasingIndentation #-}-{-# LANGUAGE ScopedTypeVariables    #-}-{-# LANGUAGE UndecidableInstances   #-}+{-# LANGUAGE NondecreasingIndentation   #-}+{-# LANGUAGE TypeFamilies               #-}  -- for type equality ~+{-# LANGUAGE UndecidableInstances       #-}  {-|     Translating from internal syntax to abstract syntax. Enables nice@@ -26,23 +26,25 @@ import Control.Monad.State hiding (mapM_, mapM) import Control.Monad.Reader hiding (mapM_, mapM) -import Data.Foldable (foldMap)-import Data.List hiding (null, sort)+import Data.Foldable (Foldable, foldMap)+import qualified Data.List as List import qualified Data.Map as Map import Data.Maybe import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend) import Data.Set (Set) import qualified Data.Set as Set-import Data.Traversable (traverse, mapM)+import Data.Traversable (Traversable, traverse, mapM) import qualified Data.Traversable as Trav  import Agda.Syntax.Literal import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Fixity+import qualified Agda.Syntax.Concrete.Name as C import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA) import Agda.Syntax.Info as Info import Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Pattern ( foldAPattern ) import Agda.Syntax.Abstract.Pretty import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern as I@@ -52,7 +54,7 @@ import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Reduce import {-# SOURCE #-} Agda.TypeChecking.Records-import Agda.TypeChecking.CompiledClause (CompiledClauses(Fail))+import Agda.TypeChecking.CompiledClause (CompiledClauses'(Fail)) import Agda.TypeChecking.DisplayForm import Agda.TypeChecking.Level import {-# SOURCE #-} Agda.TypeChecking.Datatypes@@ -63,6 +65,7 @@  import Agda.Interaction.Options ( optPostfixProjections ) +import Agda.Utils.Either import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Function import Agda.Utils.Functor@@ -195,14 +198,14 @@     md <- liftTCM $ -- addContext (replicate (length ps) "x") $       displayForm f $ zipWith (\ p i -> I.Apply $ p $> I.var i) ps [0..]     reportSLn "reify.display" 60 $-      "display form of " ++ show f ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md+      "display form of " ++ prettyShow f ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md     case md of       Just d  | okDisplayForm d -> do         -- In the display term @d@, @var i@ should be a placeholder         -- for the @i@th pattern of @ps@.         -- Andreas, 2014-06-11:         -- Are we sure that @d@ did not use @var i@ otherwise?-        lhs' <- displayLHS (map namedArg ps) wps d+        lhs' <- displayLHS ps wps d         reportSDoc "reify.display" 70 $ do           doc <- prettyA lhs'           return $ vcat@@ -220,6 +223,7 @@     -- can serve as a valid left-hand side. That means checking that it is a     -- defined name applied to valid lhs eliminators (projections or     -- applications to constructor patterns).+    okDisplayForm :: DisplayTerm -> Bool     okDisplayForm (DWithApp d ds es) =       okDisplayForm d && all okDisplayTerm ds  && all okToDropE es       -- Andreas, 2016-05-03, issue #1950.@@ -230,29 +234,36 @@     okDisplayForm DCon{}               = False     okDisplayForm DTerm{}              = False +    okDisplayTerm :: DisplayTerm -> Bool     okDisplayTerm (DTerm v) = okTerm v     okDisplayTerm DDot{}    = True     okDisplayTerm DCon{}    = True     okDisplayTerm DDef{}    = False     okDisplayTerm _         = False +    okDElim :: Elim' DisplayTerm -> Bool     okDElim (I.Apply v) = okDisplayTerm $ unArg v     okDElim I.Proj{}    = True +    okToDropE :: Elim' Term -> Bool     okToDropE (I.Apply v) = okToDrop v     okToDropE I.Proj{}    = False +    okToDrop :: Arg I.Term -> Bool     okToDrop arg = notVisible arg && case ignoreSharing $ unArg arg of       I.Var _ []   -> True       I.DontCare{} -> True  -- no matching on irrelevant things.  __IMPOSSIBLE__ anyway?       I.Level{}    -> True  -- no matching on levels. __IMPOSSIBLE__ anyway?       _ -> False +    okArg :: Arg I.Term -> Bool     okArg = okTerm . unArg +    okElim :: Elim' I.Term -> Bool     okElim (I.Apply a) = okArg a     okElim (I.Proj{})  = True +    okTerm :: I.Term -> Bool     okTerm (I.Var _ []) = True     okTerm (I.Con c ci vs) = all okArg vs     okTerm (I.Def x []) = isNoName $ qnameToConcrete x -- Handling wildcards in display forms@@ -267,37 +278,45 @@     flattenWith (DTerm (I.Def f es)) = (f, map (fmap DTerm) es, [])     flattenWith _ = __IMPOSSIBLE__ -    displayLHS :: [A.Pattern] -> [A.Pattern] -> DisplayTerm -> TCM A.SpineLHS+    displayLHS :: [NamedArg A.Pattern] -> [A.Pattern] -> DisplayTerm -> TCM A.SpineLHS     displayLHS ps wps d = do         let (f, vs, es) = flattenWith d         ds <- mapM (namedArg <.> elimToPat) es         vs <- mapM elimToPat vs         return $ SpineLHS i f vs (ds ++ wps)       where-        argToPat arg = fmap unnamed <$> traverse termToPat arg+        argToPat :: Arg DisplayTerm -> TCM (NamedArg A.Pattern)+        argToPat arg = traverse termToPat arg++        elimToPat :: I.Elim' DisplayTerm -> TCM (NamedArg A.Pattern)         elimToPat (I.Apply arg) = argToPat arg         elimToPat (I.Proj o d)  = return $ defaultNamedArg $ A.ProjP patNoRange o $ AmbQ [d] -        termToPat :: DisplayTerm -> TCM A.Pattern+        termToPat :: DisplayTerm -> TCM (Named_ A.Pattern) -        termToPat (DTerm (I.Var n [])) = return $ case ps !!! n of-                                           Nothing -> __IMPOSSIBLE__-                                           Just p  -> p+        termToPat (DTerm (I.Var n [])) = return $ unArg $ fromMaybe __IMPOSSIBLE__ $ ps !!! n -        termToPat (DCon c ci vs)          = tryRecPFromConP =<< do+        termToPat (DCon c ci vs)          = fmap unnamed <$> tryRecPFromConP =<< do            A.ConP (ConPatInfo ci patNoRange) (AmbQ [conName c]) <$> mapM argToPat vs -        termToPat (DTerm (I.Con c ci vs)) = tryRecPFromConP =<< do+        termToPat (DTerm (I.Con c ci vs)) = fmap unnamed <$> tryRecPFromConP =<< do            A.ConP (ConPatInfo ci patNoRange) (AmbQ [conName c]) <$> mapM (argToPat . fmap DTerm) vs -        termToPat (DTerm (I.Def _ [])) = return $ A.WildP patNoRange-        termToPat (DDef _ [])          = return $ A.WildP patNoRange+        termToPat (DTerm (I.Def _ [])) = return $ unnamed $ A.WildP patNoRange+        termToPat (DDef _ [])          = return $ unnamed $ A.WildP patNoRange -        termToPat (DDot v)             = A.DotP patNoRange Inserted <$> termToExpr v-        termToPat v                    = A.DotP patNoRange Inserted <$> reify v -- __IMPOSSIBLE__+        -- Currently we don't keep track of the origin of a dot pattern in the internal syntax,+        -- so here we give __IMPOSSIBLE__. This is only used for printing purposes, the origin+        -- should not be used anyway after this point.+        -- Andreas, 2017-02-14: This crashes with -v 100.+        -- termToPat (DDot v)             = A.DotP patNoRange __IMPOSSIBLE__ <$> termToExpr v+        -- termToPat v                    = A.DotP patNoRange __IMPOSSIBLE__ <$> reify v -- __IMPOSSIBLE__+        termToPat (DDot v)             = unnamed . A.DotP patNoRange Inserted <$> termToExpr v+        termToPat v                    = unnamed . A.DotP patNoRange Inserted <$> reify v -        len = genericLength ps+        len = length ps +        argsToExpr :: I.Args -> TCM [Arg A.Expr]         argsToExpr = mapM (traverse termToExpr)          -- TODO: restructure this to avoid having to repeat the code for reify@@ -318,7 +337,7 @@               -- even the pattern variables @n < len@ can be               -- applied to some args @vs@.               e <- if n < len-                   then return $ A.patternToExpr $ ps !! n+                   then return $ A.patternToExpr $ namedArg $ ps !! n                    else reify (I.var (n - len))               apps e =<< argsToExpr vs             _ -> return underscore@@ -354,7 +373,7 @@       case isR || ci == ConORec of         True -> do           showImp <- showImplicitArguments-          let keep (a, v) = showImp || notHidden a+          let keep (a, v) = showImp || visible a           r  <- getConstructorData x           xs <- getRecordFieldNames r           vs <- map unArg <$> reify vs@@ -403,13 +422,13 @@ --    I.Lam info b | isAbsurdBody b -> return $ A. AbsurdLam noExprInfo $ getHiding info     I.Lam info b    -> do       (x,e) <- reify b-      return $ A.Lam noExprInfo (DomainFree info x) e+      return $ A.Lam (setOrigin (getOrigin info) defaultLamInfo_) (DomainFree info x) e       -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda     I.Lit l        -> reify l     I.Level l      -> reify l     I.Pi a b       -> case b of         NoAbs _ b'-          | notHidden a -> uncurry (A.Fun $ noExprInfo) <$> reify (a, b')+          | visible a   -> uncurry (A.Fun $ noExprInfo) <$> reify (a, b')             -- Andreas, 2013-11-11 Hidden/Instance I.Pi must be A.Pi             -- since (a) the syntax {A} -> B or {{A}} -> B is not legal             -- and (b) the name of the binder might matter.@@ -449,14 +468,14 @@         YesReduction _ v -> do           reportSLn "reify.anon" 60 $ unlines             [ "reduction on defined ident. in anonymous module"-            , "x = " ++ show x+            , "x = " ++ prettyShow x             , "v = " ++ show v             ]           reify v         NoReduction () -> do           reportSLn "reify.anon" 60 $ unlines             [ "no reduction on defined ident. in anonymous module"-            , "x  = " ++ show x+            , "x  = " ++ prettyShow x             , "es = " ++ show es             ]           reifyDef' x es@@ -464,13 +483,14 @@      reifyDef' :: QName -> I.Elims -> TCM Expr     reifyDef' x es = do-      reportSLn "reify.def" 60 $ "reifying call to " ++ show x+      reportSLn "reify.def" 60 $ "reifying call to " ++ prettyShow x       -- We should drop this many arguments from the local context.       n <- getDefFreeVars x+      reportSLn "reify.def" 70 $ "freeVars for " ++ prettyShow x ++ " = " ++ show n       -- If the definition is not (yet) in the signature,       -- we just do the obvious.-      let fallback = elims (A.Def x) =<< reify (drop n es)-      caseMaybeM (tryMaybe $ getConstInfo x) fallback $ \ defn -> do+      let fallback _ = elims (A.Def x) =<< reify (drop n es)+      caseEitherM (getConstInfo' x) fallback $ \ defn -> do       let def = theDef defn        -- Check if we have an absurd lambda.@@ -479,7 +499,7 @@                 | isAbsurdLambdaName x -> do                   -- get hiding info from last pattern, which should be ()                   let h = getHiding $ last $ namedClausePats cl-                  elims (A.AbsurdLam noExprInfo h) =<< reify (drop n es)+                  elims (A.AbsurdLam defaultLamInfo_ h) =<< reify (drop n es)        -- Otherwise (no absurd lambda):        _ -> do@@ -504,6 +524,8 @@            (pad, nes :: [Elim' (Named_ Term)]) <- case def of              Function{ funProjection = Just Projection{ projIndex = np } } | np > 0 -> do+              reportSLn "reify.def" 70 $ "  def. is a projection with projIndex = " ++ show np+               -- This is tricky:               --  * getDefFreeVars x tells us how many arguments               --    are part of the local context@@ -547,7 +569,7 @@               let padVis  = map (fmap (unnamed . namedThing)) padVisNamed                -- Keep only the rest with the same visibility of @dom@...-              let padTail = filter ((getHiding dom ==) . getHiding) padRest+              let padTail = filter (sameHiding dom) padRest                -- ... and even the same name.               let padSame = filter ((Just (fst (unDom dom)) ==) . fmap rangedThing . nameOf . unArg) padTail@@ -558,7 +580,12 @@              -- If it is not a projection(-like) function, we need no padding.             _ -> return ([], map (fmap unnamed) $ drop n es)-           let hd = foldl' (A.App noExprInfo) (A.Def x) pad++           reportSLn "reify.def" 70 $ unlines+             [ "  pad = " ++ show pad+             , "  nes = " ++ show nes+             ]+           let hd = List.foldl' (A.App noExprInfo) (A.Def x) pad            nelims hd =<< reify nes      -- Andreas, 2016-07-06 Issue #2047@@ -582,8 +609,8 @@      reifyExtLam :: QName -> Int -> [I.Clause] -> I.Elims -> TCM Expr     reifyExtLam x npars cls es = do-      reportSLn "reify.def" 10 $ "reifying extended lambda " ++ show x-      reportSLn "reify.def" 50 $ show $ nest 2 $ vcat+      reportSLn "reify.def" 10 $ "reifying extended lambda " ++ prettyShow x+      reportSLn "reify.def" 50 $ render $ nest 2 $ vcat         [ text "npars =" <+> pretty npars         , text "es    =" <+> fsep (map (prettyPrec 10) es)         , text "def   =" <+> vcat (map pretty cls) ]@@ -596,7 +623,7 @@       cls <- mapM (reify . NamedClause x False . (`applyE` pars)) cls       let cx    = nameConcrete $ qnameName x           dInfo = mkDefInfo cx noFixity' PublicAccess ConcreteDef (getRange x)-      elims (A.ExtendedLam noExprInfo dInfo x cls) =<< reify rest+      elims (A.ExtendedLam defaultLamInfo_ dInfo x cls) =<< reify rest  -- | @nameFirstIfHidden (x:a) ({e} es) = {x = e} es@ nameFirstIfHidden :: Dom (ArgName, t) -> [Elim' a] -> [Elim' (Named_ a)]@@ -660,20 +687,28 @@       strip ps = stripArgs True ps         where           stripArgs _ [] = []-          stripArgs fixedPos (a : as) =-            if canStrip a-            then if   all canStrip $ takeWhile isUnnamedHidden as+          stripArgs fixedPos (a : as)+            -- Andreas, 2017-01-18, issue #819: preserves _ when splitting:+            -- An Inserted visible variable comes form a WildP and is restored as such.+            | visible a, getOrigin a == Inserted, varOrDot (namedArg a) = goWild+            -- A hidden non-UserWritten variable is removed if not needed for+            -- correct position of the following hidden arguments.+            | canStrip a =+                 if   all canStrip $ takeWhile isUnnamedHidden as                  then stripArgs False as-                 else let a' = fmap ($> A.WildP (Info.PatRange $ getRange a)) a-                      in  stripName fixedPos a' : stripArgs True as-            else stripName fixedPos (stripArg a) : stripArgs True as+                 else goWild+            -- Other arguments are kept.+            | otherwise = stripName fixedPos (stripArg a) : stripArgs True as+            where+              a'     = setNamedArg a $ A.WildP $ Info.PatRange $ getRange a+              goWild = stripName fixedPos a' : stripArgs True as            stripName True  = fmap (unnamed . namedThing)           stripName False = id            canStrip a = and             [ notVisible a-            , getOrigin a /= UserWritten+            , getOrigin a `notElem` [ UserWritten , CaseSplit ]             , varOrDot (namedArg a)             ] @@ -701,21 +736,22 @@                                  = all varOrDot $ map namedArg ps           varOrDot _             = False --- | @blank bound x@ replaces all variables in @x@ that are not in @bound@ by+-- | @blank bound e@ replaces all variables in expression @e@ that are not in @bound@ by --   an underscore @_@. It is used for printing dot patterns: we don't want to --   make implicit variables explicit, so we blank them out in the dot patterns --   instead (this is fine since dot patterns can be inferred anyway).+ class BlankVars a where   blank :: Set Name -> a -> a -instance BlankVars a => BlankVars (Arg a) where-  blank bound = fmap $ blank bound--instance BlankVars a => BlankVars (Named s a) where-  blank bound = fmap $ blank bound+  default blank :: (Functor f, BlankVars b, f b ~ a) => Set Name -> a -> a+  blank = fmap . blank -instance BlankVars a => BlankVars [a] where-  blank bound = fmap $ blank bound+instance BlankVars a => BlankVars (Arg a)              where+instance BlankVars a => BlankVars (Named s a)          where+instance BlankVars a => BlankVars [a]                  where+instance BlankVars a => BlankVars (A.Pattern' a)       where+instance BlankVars a => BlankVars (FieldAssignment' a) where  instance (BlankVars a, BlankVars b) => BlankVars (a, b) where   blank bound (x, y) = (blank bound x, blank bound y)@@ -727,13 +763,17 @@ instance BlankVars A.NamedDotPattern where   blank bound = id +instance BlankVars A.StrippedDotPattern where+  blank bound = id+ instance BlankVars A.Clause where-  blank bound (A.Clause lhs namedDots rhs [] ca) =+  blank bound (A.Clause lhs namedDots strippedDots rhs [] ca) =     let bound' = varsBoundIn lhs `Set.union` bound     in  A.Clause (blank bound' lhs)                  (blank bound' namedDots)+                 (blank bound' strippedDots)                  (blank bound' rhs) [] ca-  blank bound (A.Clause lhs namedDots rhs (_:_) ca) = __IMPOSSIBLE__+  blank bound (A.Clause lhs namedDots strippedDots rhs (_:_) ca) = __IMPOSSIBLE__  instance BlankVars A.LHS where   blank bound (A.LHS i core wps) = uncurry (A.LHS i) $ blank bound (core, wps)@@ -742,25 +782,11 @@   blank bound (A.LHSHead f ps) = A.LHSHead f $ blank bound ps   blank bound (A.LHSProj p b ps) = uncurry (A.LHSProj p) $ blank bound (b, ps) -instance BlankVars A.Pattern where-  blank bound p = case p of-    A.VarP _      -> p   -- do not blank pattern vars-    A.ConP c i ps -> A.ConP c i $ blank bound ps-    A.ProjP{}     -> p-    A.DefP i f ps -> A.DefP i f $ blank bound ps-    A.DotP i o e  -> A.DotP i o $ blank bound e-    A.WildP _     -> p-    A.AbsurdP _   -> p-    A.LitP _      -> p-    A.AsP i n p   -> A.AsP i n $ blank bound p-    A.PatternSynP _ _ _ -> __IMPOSSIBLE__-    A.RecP i fs   -> A.RecP i $ blank bound fs- instance BlankVars A.Expr where   blank bound e = case e of     A.ScopedExpr i e       -> A.ScopedExpr i $ blank bound e     A.Var x                -> if x `Set.member` bound then e-                              else A.Underscore emptyMetaInfo+                              else A.Underscore emptyMetaInfo  -- Here is the action!     A.Def _                -> e     A.Proj{}               -> e     A.Con _                -> e@@ -793,9 +819,6 @@     A.PatternSyn {}        -> e     A.Macro {}             -> e -instance BlankVars a => BlankVars (FieldAssignment' a) where-  blank bound = over exprFieldA (blank bound)- instance BlankVars A.ModuleName where   blank bound = id @@ -816,9 +839,15 @@   blank bound (TBind r n e) = TBind r n $ blank bound e   blank bound (TLet _ _)    = __IMPOSSIBLE__ -- Since the internal syntax has no let bindings left ++-- | Collect the binders in some abstract syntax lhs.+ class Binder a where   varsBoundIn :: a -> Set Name +  default varsBoundIn :: (Foldable f, Binder b, f b ~ a) => a -> Set Name+  varsBoundIn = foldMap varsBoundIn+ instance Binder A.LHS where   varsBoundIn (A.LHS _ core ps) = varsBoundIn (core, ps) @@ -827,18 +856,18 @@   varsBoundIn (A.LHSProj _ b ps) = varsBoundIn (b, ps)  instance Binder A.Pattern where-  varsBoundIn p = case p of-    A.VarP x             -> if show x == "()" then empty else singleton x-    A.ConP _ _ ps        -> varsBoundIn ps-    A.ProjP{}            -> empty-    A.DefP _ _ ps        -> varsBoundIn ps-    A.WildP{}            -> empty-    A.AsP _ _ p          -> varsBoundIn p-    A.DotP{}             -> empty-    A.AbsurdP{}          -> empty-    A.LitP{}             -> empty-    A.PatternSynP _ _ ps -> varsBoundIn ps-    A.RecP _ fs          -> varsBoundIn fs+  varsBoundIn = foldAPattern $ \case+    A.VarP x            -> if prettyShow x == "()" then empty else singleton x -- TODO: get rid of this hack?+    A.AsP _ x _         -> empty+    A.ConP _ _ _        -> empty+    A.ProjP{}           -> empty+    A.DefP _ _ _        -> empty+    A.WildP{}           -> empty+    A.DotP{}            -> empty+    A.AbsurdP{}         -> empty+    A.LitP{}            -> empty+    A.PatternSynP _ _ _ -> empty+    A.RecP _ _          -> empty  instance Binder A.LamBinding where   varsBoundIn (A.DomainFree _ x) = singleton x@@ -858,20 +887,13 @@   varsBoundIn LetOpen{}           = empty   varsBoundIn LetDeclaredVariable{} = empty -instance Binder a => Binder (FieldAssignment' a) where-  varsBoundIn = varsBoundIn . (^. exprFieldA)--instance Binder a => Binder (Arg a) where-  varsBoundIn = varsBoundIn . unArg--instance Binder a => Binder (Named x a) where-  varsBoundIn = varsBoundIn . namedThing- instance Binder (WithHiding Name) where   varsBoundIn (WithHiding _ x) = singleton x -instance Binder a => Binder [a] where-  varsBoundIn xs = Set.unions $ map varsBoundIn xs+instance Binder a => Binder (FieldAssignment' a) where+instance Binder a => Binder (Arg a)              where+instance Binder a => Binder (Named x a)          where+instance Binder a => Binder [a]                  where  instance (Binder a, Binder b) => Binder (a, b) where   varsBoundIn (x, y) = varsBoundIn x `Set.union` varsBoundIn y@@ -884,19 +906,32 @@   where     stripNameFromExplicit :: NamedArg p -> NamedArg p     stripNameFromExplicit a-      | getHiding a == NotHidden = fmap (unnamed . namedThing) a-      | otherwise                = a+      | visible a = fmap (unnamed . namedThing) a+      | otherwise = a      reifyPat :: MonadTCM tcm => I.DeBruijnPattern -> tcm A.Pattern     reifyPat p = do      liftTCM $ reportSLn "reify.pat" 80 $ "reifying pattern " ++ show p      case p of-      I.VarP x | isAbsurdPatternName (dbPatVarName x)-               -> return $ A.AbsurdP patNoRange    -- HACK-      I.VarP x -> liftTCM $ A.VarP <$> nameOfBV (dbPatVarIndex x)+      I.VarP x -> do+        n <- liftTCM $ nameOfBV $ dbPatVarIndex x+        case dbPatVarName x of+          "_"  -> return $ A.VarP n+          -- Andreas, 2017-09-03: TODO for #2580+          -- Patterns @VarP "()"@ should have been replaced by @AbsurdP@, but the+          -- case splitter still produces them.+          y    -> if prettyShow (nameConcrete n) == "()" then return $ A.VarP n else+            -- Andreas, 2017-09-03, issue #2729+            -- Restore original pattern name.  AbstractToConcrete picks unique names.+            return $ A.VarP n { nameConcrete = C.Name noRange [ C.Id y ] }       I.DotP v -> do         t <- liftTCM $ reify v+        -- This is only used for printing purposes, so the Origin shouldn't be+        -- used after this point anyway.         return $ A.DotP patNoRange Inserted t+        -- WAS: return $ A.DotP patNoRange __IMPOSSIBLE__ t+        -- Crashes on -v 100.+      I.AbsurdP p -> return $ A.AbsurdP patNoRange       I.LitP l  -> return $ A.LitP l       I.ProjP o d     -> return $ A.ProjP patNoRange o $ AmbQ [d]       I.ConP c cpi ps -> do@@ -932,7 +967,7 @@ instance Reify NamedClause A.Clause where   reify (NamedClause f toDrop cl) = addContext (clauseTel cl) $ do     reportSLn "reify.clause" 60 $ "reifying NamedClause"-      ++ "\n  f      = " ++ show f+      ++ "\n  f      = " ++ prettyShow f       ++ "\n  toDrop = " ++ show toDrop       ++ "\n  cl     = " ++ show cl     ps  <- reifyPatterns $ namedClausePats cl@@ -947,14 +982,14 @@     rhs <- caseMaybe (clauseBody cl) (return AbsurdRHS) $ \ e -> do        RHS <$> reify e <*> pure Nothing     reportSLn "reify.clause" 60 $ "reifying NamedClause, rhs = " ++ show rhs-    let result = A.Clause (spineToLhs lhs) [] rhs [] (I.clauseCatchall cl)+    let result = A.Clause (spineToLhs lhs) [] [] rhs [] (I.clauseCatchall cl)     reportSLn "reify.clause" 60 $ "reified NamedClause, result = " ++ show result     return result     where       perm = fromMaybe __IMPOSSIBLE__ $ clausePerm cl       info = LHSRange noRange -      dropParams n (SpineLHS i f ps wps) = SpineLHS i f (genericDrop n ps) wps+      dropParams n (SpineLHS i f ps wps) = SpineLHS i f (drop n ps) wps       stripImps (SpineLHS i f ps wps) = do         (ps, wps) <- stripImplicits (ps, wps)         return $ SpineLHS i f ps wps
src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE ScopedTypeVariables    #-}-{-# LANGUAGE UndecidableInstances   #-}+{-# LANGUAGE UndecidableInstances #-}  {-# OPTIONS_GHC -fwarn-missing-signatures #-} @@ -75,7 +74,7 @@   toAbstract (f, Apply arg) = do     arg     <- toAbstract arg     showImp <- lift showImplicitArguments-    return $ if showImp || getHiding arg == NotHidden+    return $ if showImp || visible arg              then App (ExprRange noRange) f arg              else f @@ -106,7 +105,7 @@     R.Lam h t  -> do       (e, name) <- toAbstract t       let info  = setHiding h $ setOrigin Reflected defaultArgInfo-      return $ A.Lam exprNoRange (DomainFree info name) e+      return $ A.Lam (setOrigin Reflected defaultLamInfo_) (DomainFree info name) e     R.ExtLam cs es -> do       name <- freshName_ extendedLambdaName       m    <- lift $ getCurrentModule@@ -114,7 +113,7 @@           cname   = nameConcrete name           defInfo = mkDefInfo cname noFixity' PublicAccess ConcreteDef noRange       cs <- toAbstract $ map (QNamed qname) cs-      toAbstract (A.ExtendedLam exprNoRange defInfo qname cs, es)+      toAbstract (A.ExtendedLam (setOrigin Reflected defaultLamInfo_) defInfo qname cs, es)     R.Pi a b   -> do       (b, name) <- toAbstract b       a         <- toAbstract (a, name)@@ -167,11 +166,11 @@     (names, pats) <- toAbstractPats pats     rhs           <- local (names++) $ toAbstract rhs     let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []-    return $ A.Clause lhs [] (RHS rhs Nothing) [] False+    return $ A.Clause lhs [] [] (RHS rhs Nothing) [] False   toAbstract (QNamed name (R.AbsurdClause pats)) = do     (_, pats) <- toAbstractPats pats     let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []-    return $ A.Clause lhs [] AbsurdRHS [] False+    return $ A.Clause lhs [] [] AbsurdRHS [] False  instance ToAbstract [QNamed R.Clause] [A.Clause] where   toAbstract = traverse toAbstract
src/full/Agda/Syntax/Treeless.hs view
@@ -14,6 +14,7 @@ import Control.Arrow (first, second)  import Data.Map (Map)+import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Position@@ -23,7 +24,7 @@ data Compiled = Compiled   { cTreeless :: TTerm   , cArgUsage :: [Bool] }-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  type Args = [TTerm] @@ -53,7 +54,7 @@            | TErased            | TError TError            -- ^ A runtime error, something bad has happened.-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  -- | Compiler-related primitives. This are NOT the same thing as primitives -- in Agda's surface or internal syntax!@@ -80,7 +81,7 @@   | PEqQ   | PIf   | PSeq-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  isPrimEq :: TPrim -> Bool isPrimEq p = p `elem` [PEqI, PEqF, PEqS, PEqC, PEqQ]@@ -155,7 +156,7 @@   | CTString   | CTFloat   | CTQName-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  data TAlt   = TACon    { aCon  :: QName, aArity :: Int, aBody :: TTerm }@@ -165,7 +166,7 @@   | TAGuard  { aGuard :: TTerm, aBody :: TTerm }   -- ^ Binds no variables   | TALit    { aLit :: Literal,   aBody:: TTerm }-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)  data TError   = TUnreachable@@ -173,7 +174,7 @@   -- Runtime behaviour of unreachable code is undefined, but preferably   -- the program will exit with an error message. The compiler is free   -- to assume that this code is unreachable and to remove it.-  deriving (Typeable, Show, Eq, Ord)+  deriving (Typeable, Data, Show, Eq, Ord)   class Unreachable a where
src/full/Agda/Termination/CutOff.hs view
@@ -1,3 +1,9 @@+{-# LANGUAGE CPP #-}++#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE DeriveDataTypeable #-}+#endif+ -- | Defines 'CutOff' type which is used in "Agda.Interaction.Options". --   This module's purpose is to eliminate the dependency of --   "Agda.TypeChecking.Monad.Base" on the termination checker and@@ -5,12 +11,21 @@  module Agda.Termination.CutOff where +#if __GLASGOW_HASKELL__ <= 708+import Data.Typeable ( Typeable )+#endif+ -- | Cut off structural order comparison at some depth in termination checker?  data CutOff   = CutOff Int -- ^ @c >= 0@ means: record decrease up to including @c+1@.   | DontCutOff-  deriving (Eq, Ord)+  deriving ( Eq+           , Ord+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  instance Show CutOff where   show (CutOff k) = show k
src/full/Agda/Termination/Inlining.hs view
@@ -48,8 +48,9 @@ import Control.Applicative import Control.Monad.State +import qualified Data.List as List+import Data.Maybe import Data.Traversable (traverse)-import Data.List as List  import Agda.Syntax.Common import Agda.Syntax.Internal@@ -70,10 +71,12 @@ import Agda.Utils.Impossible #include "undefined.h" -inlineWithClauses :: QName -> Clause -> TCM [Clause]+-- | Returns 'Nothing' if no inlining happened, otherwise, the new clauses.++inlineWithClauses :: QName -> Clause -> TCM (Maybe [Clause]) inlineWithClauses f cl = inTopContext $ do   -- Clauses are relative to the empty context, so we operate @inTopContext@.-  let noInline = return [cl]+  let noInline = return Nothing   -- The de Bruijn indices of @body@ are relative to the @clauseTel cl@.   body <- traverse instantiate $ clauseBody cl   case body of@@ -104,9 +107,15 @@         reportSDoc "term.with.inline" 20 $ vcat $           text "inlinedClauses" : map (nest 2 . prettyTCM . QNamed f) cs2 -        return $ cs1 ++ cs2+        return $ Just $ cs1 ++ cs2     _ -> noInline +-- | Returns the original clause if no inlining happened, otherwise,+--   the new clauses.++inlineWithClauses' :: QName -> Clause -> TCM [Clause]+inlineWithClauses' f cl = fromMaybe [cl] <$> inlineWithClauses f cl+ -- | @withExprClauses cl t as@ generates a clause containing a fake --   call to with-expression @a@ for each @a@ in @as@ that is not --   a variable (and thus cannot contain a recursive call).@@ -146,7 +155,7 @@ inlinedClauses f cl t wf = do   -- @wf@ might define a with-function itself, so we first construct   -- the with-inlined clauses @wcs@ of @wf@ recursively.-  wcs <- concat <$> (mapM (inlineWithClauses wf) =<< defClauses <$> getConstInfo wf)+  wcs <- concat <$> (mapM (inlineWithClauses' wf) =<< defClauses <$> getConstInfo wf)   reportSDoc "term.with.inline" 30 $ vcat $ text "With-clauses to inline" :                                        map (nest 2 . prettyTCM . QNamed wf) wcs   mapM (inline f cl t wf) wcs
src/full/Agda/Termination/Monad.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP                        #-}+{-# LANGUAGE ScopedTypeVariables        #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}  -- | The monad for the termination checker.@@ -13,18 +14,18 @@  import Control.Applicative hiding (empty) import Control.Monad.Reader-import Control.Monad.Writer import Control.Monad.State  import Data.Foldable (Foldable) import Data.Traversable (Traversable)-import Data.Semigroup (Semigroup)+import Data.Semigroup (Semigroup(..), Monoid(..))  import Agda.Interaction.Options  import Agda.Syntax.Abstract (IsProjP(..), AllNames) import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Literal import Agda.Syntax.Position (noRange) @@ -35,7 +36,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Benchmark import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Pretty as TCP+import Agda.TypeChecking.Pretty hiding ((<>)) import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute@@ -46,6 +47,7 @@ import Agda.Utils.Lens import Agda.Utils.Maybe import Agda.Utils.Monad+import Agda.Utils.Monoid import Agda.Utils.Null import Agda.Utils.Pretty (Pretty, prettyShow) import qualified Agda.Utils.Pretty as P@@ -101,6 +103,9 @@   , terUserNames :: [QName]     -- ^ The list of name actually appearing in the file (abstract syntax).     --   Excludes the internally generated functions.+  , terHaveInlinedWith :: Bool+    -- ^ Does the actual clause result from with-inlining?+    --   (If yes, it may be ill-typed.)   , terTarget  :: Maybe Target     -- ^ Target type of the function we are currently termination checking.     --   Only the constructors of 'Target' are considered guarding.@@ -115,7 +120,7 @@     -- ^ How many @SIZELT@ relations do we have in the context     --   (= clause telescope).  Used to approximate termination     --   for metas in call args.-  , terPatterns :: MaskedDeBruijnPats+  , terPatterns :: MaskedDeBruijnPatterns     -- ^ The patterns of the clause we are checking.   , terPatternsRaise :: !Int     -- ^ Number of additional binders we have gone under@@ -158,6 +163,7 @@   , terUserNames                = __IMPOSSIBLE__ -- needs to be set!   , terMutual                   = __IMPOSSIBLE__ -- needs to be set!   , terCurrent                  = __IMPOSSIBLE__ -- needs to be set!+  , terHaveInlinedWith          = False   , terTarget                   = Nothing   , terDelayed                  = NotDelayed   , terMaskArgs                 = repeat False   -- use all arguments (mask none)@@ -182,7 +188,7 @@ -- | Termination monad.  newtype TerM a = TerM { terM :: ReaderT TerEnv TCM a }-  deriving (Functor, Applicative, Monad, MonadBench Phase)+  deriving (Functor, Applicative, Monad, MonadBench Phase, HasOptions, MonadDebug)  instance MonadTer TerM where   terAsk     = TerM $ ask@@ -249,6 +255,14 @@   getConstInfo       = liftTCM . getConstInfo   getRewriteRulesFor = liftTCM . getRewriteRulesFor +instance Semigroup m => Semigroup (TerM m) where+  (<>) = liftA2 (<>)++instance (Semigroup m, Monoid m) => Monoid (TerM m) where+  mempty  = pure mempty+  mappend = (<>)+  mconcat = mconcat <.> sequence+ -- * Modifiers and accessors for the termination environment in the monad.  terGetGuardingTypeConstructors :: TerM Bool@@ -290,6 +304,12 @@ terSetTarget :: Maybe Target -> TerM a -> TerM a terSetTarget t = terLocal $ \ e -> e { terTarget = t } +terGetHaveInlinedWith :: TerM Bool+terGetHaveInlinedWith = terAsks terHaveInlinedWith++terSetHaveInlinedWith :: TerM a -> TerM a+terSetHaveInlinedWith = terLocal $ \ e -> e { terHaveInlinedWith = True }+ terGetDelayed :: TerM Delayed terGetDelayed = terAsks terDelayed @@ -308,13 +328,13 @@ terSetMaskResult :: Bool -> TerM a -> TerM a terSetMaskResult b = terLocal $ \ e -> e { terMaskResult = b } -terGetPatterns :: TerM (MaskedDeBruijnPats)+terGetPatterns :: TerM (MaskedDeBruijnPatterns) terGetPatterns = do   n   <- terAsks terPatternsRaise   mps <- terAsks terPatterns-  return $ if n == 0 then mps else map (fmap (fmap (n +))) mps+  return $ if n == 0 then mps else map (fmap (raise n)) mps -terSetPatterns :: MaskedDeBruijnPats -> TerM a -> TerM a+terSetPatterns :: MaskedDeBruijnPatterns -> TerM a -> TerM a terSetPatterns ps = terLocal $ \ e -> e { terPatterns = ps }  terRaise :: TerM a -> TerM a@@ -367,7 +387,10 @@ withUsableVars :: UsableSizeVars a => a -> TerM b -> TerM b withUsableVars pats m = do   vars <- usableSizeVars pats-  reportSLn "term.size" 20 $ "usableSizeVars = " ++ show vars+  reportSLn "term.size" 70 $ "usableSizeVars = " ++ show vars+  reportSDoc "term.size" 20 $ if null vars then text "no usuable size vars" else+    text "the size variables amoung these variables are usable: " <+>+      sep (map (prettyTCM . var) $ VarSet.toList vars)   terSetUsableVars vars $ m  -- | Set 'terUseSizeLt' when going under constructor @c@.@@ -408,7 +431,7 @@         else do           mp <- isProjection qn           case mp of-            Just Projection{ projProper = True, projFromType = t }+            Just Projection{ projProper = Just{}, projFromType = t }               -> isInductiveRecord (unArg t)             _ -> return False @@ -428,11 +451,11 @@   if Just q == flat then return True else do     pdef <- getConstInfo q     case isProjection_ (theDef pdef) of-      Just Projection{ projProper = True, projFromType = Arg _ r, projIndex = n } ->+      Just Projection{ projProper = Just{}, projFromType = Arg _ r, projIndex = n } ->         caseMaybeM (isRecord r) __IMPOSSIBLE__ $ \ rdef -> do           -- no for inductive or non-recursive record           if recInduction rdef /= Just CoInductive then return False else do-            reportSLn "term.guardedness" 40 $ prettyShow q ++ " is coinductive"+            reportSLn "term.guardedness" 40 $ prettyShow q ++ " is coinductive; record type is " ++ prettyShow r             if not mustBeRecursive then return True else do               reportSLn "term.guardedness" 40 $ prettyShow q ++ " must be recursive"               if not (recRecursive rdef) then return False else do@@ -442,81 +465,45 @@                 -- Now check if type of field mentions mutually recursive symbol.                 -- Get the type of the field by dropping record parameters and record argument.                 let TelV tel core = telView' (defType pdef)-                    tel' = drop n $ telToList tel+                    (pars, tel') = splitAt n $ telToList tel+                    mut = fromMaybe __IMPOSSIBLE__ $ recMutual rdef                 -- Check if any recursive symbols appear in the record type.                 -- Q (2014-07-01): Should we normalize the type?-                reportSDoc "term.guardedness" 40 $ sep-                  [ text "looking for recursive occurrences in"-                  , prettyTCM (telFromList tel')+                -- A (2017-01-13): Yes, since we also normalize during positivity check?+                -- See issue #1899.+                reportSDoc "term.guardedness" 40 $ inTopContext $ sep+                  [ text "looking for recursive occurrences of"+                  , sep (map prettyTCM mut)+                  , text "in"+                  , addContext pars $ prettyTCM (telFromList tel')                   , text "and"-                  , prettyTCM core+                  , addContext tel $ prettyTCM core                   ]-                names <- anyDefs (r : recMutual rdef) (map (snd . unDom) tel', core)+                when (null mut) __IMPOSSIBLE__+                names <- anyDefs mut =<< normalise (map (snd . unDom) tel', core)                 reportSDoc "term.guardedness" 40 $-                  text "found" <+> sep (map prettyTCM names)+                  text "found" <+> if null names then text "none" else sep (map prettyTCM names)                 return $ not $ null names       _ -> do         reportSLn "term.guardedness" 40 $ prettyShow q ++ " is not a proper projection"         return False ---- * De Bruijn patterns.--type DeBruijnPats = [DeBruijnPat]---- | Patterns with variables as de Bruijn indices.-type DeBruijnPat = DeBruijnPat' Int--data DeBruijnPat' a-  = VarDBP a-    -- ^ De Bruijn Index.-  | ConDBP QName [DeBruijnPat' a]-    -- ^ The name refers to either an ordinary-    --   constructor or the successor function on sized types.-  | LitDBP Literal-    -- ^ Literal.  Also abused to censor part of a pattern.-  | TermDBP Term-    -- ^ Part of dot pattern that cannot be converted into a pattern.-  | ProjDBP ProjOrigin QName-    -- ^ Projection pattern.-  deriving (Functor, Show)--instance IsProjP (DeBruijnPat' a) where-  isProjP (ProjDBP o d) = Just (o, AmbQ [d])-  isProjP _ = Nothing--instance PrettyTCM DeBruijnPat where-  prettyTCM (VarDBP i)    = prettyTCM $ var i-  prettyTCM (ConDBP c ps) = parens $ do prettyTCM c <+> hsep (map prettyTCM ps)-  prettyTCM (LitDBP l)    = prettyTCM l-  prettyTCM (TermDBP v)   = parens $ prettyTCM v-  prettyTCM (ProjDBP o d) = text "." TCP.<> prettyTCM d---- | How long is the path to the deepest variable?-patternDepth :: DeBruijnPat' a -> Int-patternDepth p =-  case p of-    ConDBP _ ps -> succ $ maximum $ 0 : map patternDepth ps-    VarDBP{}    -> 0-    LitDBP{}    -> 0-    TermDBP{}   -> 0-    ProjDBP{}   -> 0+-- * De Bruijn pattern stuff +-- | How long is the path to the deepest atomic pattern?+patternDepth :: forall a. Pattern' a -> Int+patternDepth = getMaxNat . foldrPattern depth where+  depth :: Pattern' a -> MaxNat -> MaxNat+  depth ConP{} = succ      -- add 1 to the maximum of the depth of the subpatterns+  depth _      = id        -- atomic pattern (leaf) has depth 0  -- | A dummy pattern used to mask a pattern that cannot be used --   for structural descent. -unusedVar :: DeBruijnPat-unusedVar = LitDBP (LitString noRange "term.unused.pat.var")---- | @raiseDBP n ps@ increases each de Bruijn index in @ps@ by @n@.---   Needed when going under a binder during analysis of a term.--raiseDBP :: Int -> DeBruijnPats -> DeBruijnPats-raiseDBP 0 = id-raiseDBP n = map $ fmap (n +)+unusedVar :: DeBruijnPattern+unusedVar = LitP (LitString noRange "term.unused.pat.var") --- | Extract variables from 'DeBruijnPat's that could witness a decrease+-- | Extract variables from 'DeBruijnPattern's that could witness a decrease --   via a SIZELT constraint. -- --   These variables must be under an inductive constructor (with no record@@ -526,44 +513,46 @@ class UsableSizeVars a where   usableSizeVars :: a -> TerM VarSet -instance UsableSizeVars DeBruijnPat where-  usableSizeVars p = do-    let none = return mempty-    case p of-      VarDBP i    -> ifM terGetUseSizeLt (return $ VarSet.singleton i) {- else -} none-      ConDBP c ps -> conUseSizeLt c $ usableSizeVars ps-      LitDBP{}    -> none-      TermDBP{}   -> none-      ProjDBP{}   -> none+instance UsableSizeVars DeBruijnPattern where+  usableSizeVars = foldrPattern $ \case+    VarP x    -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $+                   {-else-} return mempty+    ConP c _ _ -> conUseSizeLt $ conName c+    LitP{}     -> none+    DotP{}     -> none+    AbsurdP{}  -> none+    ProjP{}    -> none+    where none _ = return mempty -instance UsableSizeVars DeBruijnPats where+instance UsableSizeVars [DeBruijnPattern] where   usableSizeVars ps =     case ps of-      []                 -> return mempty-      (ProjDBP _ q : ps) -> projUseSizeLt q $ usableSizeVars ps-      (p           : ps) -> mappend <$> usableSizeVars p <*> usableSizeVars ps+      []               -> return mempty+      (ProjP _ q : ps) -> projUseSizeLt q $ usableSizeVars ps+      (p         : ps) -> mappend <$> usableSizeVars p <*> usableSizeVars ps -instance UsableSizeVars (Masked DeBruijnPat) where-  usableSizeVars (Masked m p) = do-    let none = return mempty-    case p of-      VarDBP i    -> ifM terGetUseSizeLt (return $ VarSet.singleton i) {- else -} none-      ConDBP c ps -> if m then none else conUseSizeLt c $ usableSizeVars ps-      LitDBP{}    -> none-      TermDBP{}   -> none-      ProjDBP{}   -> none+instance UsableSizeVars (Masked DeBruijnPattern) where+  usableSizeVars (Masked m p) = (`foldrPattern` p) $ \case+    VarP x    -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $+                   {-else-} return mempty+    ConP c _ _ -> if m then none else conUseSizeLt $ conName c+    LitP{}     -> none+    DotP{}     -> none+    AbsurdP{}  -> none+    ProjP{}    -> none+    where none _ = return mempty -instance UsableSizeVars MaskedDeBruijnPats where+instance UsableSizeVars MaskedDeBruijnPatterns where   usableSizeVars ps =     case ps of-      []                            -> return mempty-      (Masked _ (ProjDBP _ q) : ps) -> projUseSizeLt q $ usableSizeVars ps-      (p                      : ps) -> mappend <$> usableSizeVars p <*> usableSizeVars ps+      []                          -> return mempty+      (Masked _ (ProjP _ q) : ps) -> projUseSizeLt q $ usableSizeVars ps+      (p                    : ps) -> mappend <$> usableSizeVars p <*> usableSizeVars ps  -- * Masked patterns (which are not eligible for structural descent, only for size descent) --   See issue #1023. -type MaskedDeBruijnPats = [Masked DeBruijnPat]+type MaskedDeBruijnPatterns = [Masked DeBruijnPattern]  data Masked a = Masked   { getMask   :: Bool  -- ^ True if thing not eligible for structural descent.
src/full/Agda/Termination/Order.hs view
@@ -8,7 +8,7 @@ module Agda.Termination.Order   ( -- * Structural orderings     Order(..), decr-  , increase, decrease+  , increase, decrease, setUsability   , (.*.)   , supremum, infimum   , orderSemiring@@ -55,18 +55,29 @@ -- -- TODO: document orders which are call-matrices themselves. data Order-  = Decr {-# UNPACK #-} !Int+  = Decr !Bool {-# UNPACK #-} !Int     -- ^ Decrease of callee argument wrt. caller parameter.+    --+    --   The @Bool@ indicates whether the decrease (if any) is usable.+    --   In any chain, there needs to be one usable decrease.+    --   Unusable decreases come from SIZELT constraints which are+    --   not in inductive pattern match or a coinductive copattern match.+    --   See issue #2331.+    --+    --   UPDATE: Andreas, 2017-07-26:+    --   Feature #2331 is unsound due to size quantification in terms.+    --   While the infrastructure for usable/unusable decrease remains in+    --   place, no unusable decreases are generated by TermCheck.   | Unknown     -- ^ No relation, infinite increase, or increase beyond termination depth.   | Mat {-# UNPACK #-} !(Matrix Int Order)     -- ^ Matrix-shaped order, currently UNUSED.-  deriving (Eq,Ord)+  deriving (Eq, Ord, Show) -instance Show Order where-  show (Decr k) = show (- k)-  show Unknown  = "."-  show (Mat m)  = "Mat " ++ show m+-- instance Show Order where+--   show (Decr u k) = if u then show (- k) else "(" ++ show (-k) ++ ")"+--   show Unknown    = "."+--   show (Mat m)    = "Mat " ++ show m  instance HasZero Order where   zeroElement = Unknown@@ -82,10 +93,15 @@     (Unknown, Unknown) -> POEQ     (Unknown, _      ) -> POLT     (_      , Unknown) -> POGT-    (Decr k , Decr l ) -> comparableOrd k l+    (Decr u k, Decr u' l) -> comparableBool u u' `orPO` comparableOrd k l     -- Matrix-shaped orders are no longer supported     (Mat{}  , _      ) -> __IMPOSSIBLE__     (_      , Mat{}  ) -> __IMPOSSIBLE__+    where+    comparableBool = curry $ \case+      (False, True) -> POLT+      (True, False) -> POGT+      _ -> POEQ  -- | A partial order, aimed at deciding whether a call graph gets --   worse during the completion.@@ -96,10 +112,10 @@ -- | It does not get worse then ``increase''. --   If we are still decreasing, it can get worse: less decreasing. instance NotWorse Order where-  o       `notWorse` Unknown = True            -- we are unboundedly increasing-  Unknown `notWorse` Decr k = k < 0            -- we are increasing-  Decr l  `notWorse` Decr k = k < 0 || l >= k  -- we are increasing or-                                               -- we are decreasing, but more+  o        `notWorse` Unknown  = True            -- we are unboundedly increasing+  Unknown  `notWorse` Decr _ k = k < 0           -- we are increasing+  Decr u l `notWorse` Decr u' k = k < 0   -- we are increasing or+    || l >= k && (u || not u')            -- we are decreasing, but not less, and not less usable   -- Matrix-shaped orders are no longer supported   Mat m   `notWorse` o       = __IMPOSSIBLE__   o       `notWorse` Mat m   = __IMPOSSIBLE__@@ -125,28 +141,34 @@ -- | Raw increase which does not cut off. increase :: Int -> Order -> Order increase i o = case o of-  Unknown -> Unknown-  Decr k  -> Decr $ k - i-  Mat m   -> Mat $ fmap (increase i) m+  Unknown  -> Unknown+  Decr u k -> Decr u $ k - i   -- TODO: should we set u to False if k - i < 0 ?+  Mat m    -> Mat $ fmap (increase i) m  -- | Raw decrease which does not cut off. decrease :: Int -> Order -> Order decrease i o = increase (-i) o +setUsability :: Bool -> Order -> Order+setUsability u o = case o of+  Decr _ k -> Decr u k+  Unknown  -> o+  Mat{}    -> o+ -- | Smart constructor for @Decr k :: Order@ which cuts off too big values. -- -- Possible values for @k@: @- ?cutoff '<=' k '<=' ?cutoff + 1@. -decr :: (?cutoff :: CutOff) => Int -> Order-decr k = case ?cutoff of+decr :: (?cutoff :: CutOff) => Bool -> Int -> Order+decr u k = case ?cutoff of   CutOff c | k < -c -> Unknown-           | k > c  -> Decr $ c + 1-  _                 -> Decr k+           | k > c  -> Decr u $ c + 1+  _                 -> Decr u k  -- | Smart constructor for matrix shaped orders, avoiding empty and singleton matrices. orderMat :: Matrix Int Order -> Order orderMat m- | Matrix.isEmpty m        = Decr 0 -- 0x0 Matrix = neutral element+ | Matrix.isEmpty m        = le     -- 0x0 Matrix = neutral element  | Just o <- isSingleton m = o      -- 1x1 Matrix  | otherwise               = Mat m  -- nxn Matrix @@ -156,30 +178,29 @@   CutOff c   -> k >= -c && k <= c + 1  isOrder :: (?cutoff :: CutOff) => Order -> Bool-isOrder (Decr k) = withinCutOff k-isOrder Unknown = True-isOrder (Mat m) = False  -- TODO: extend to matrices--prop_decr :: (?cutoff :: CutOff) => Int -> Bool-prop_decr = isOrder . decr+isOrder (Decr _ k) = withinCutOff k+isOrder Unknown    = True+isOrder (Mat m)    = False  -- TODO: extend to matrices  -- | @le@, @lt@, @decreasing@, @unknown@: for backwards compatibility, and for external use. le :: Order-le = Decr 0+le = Decr False 0 +-- | Usable decrease. lt :: Order-lt = Decr 1+lt = Decr True 1  unknown :: Order unknown = Unknown  nonIncreasing :: Order -> Bool-nonIncreasing (Decr k) = k >= 0-nonIncreasing _        = False+nonIncreasing (Decr _ k) = k >= 0+nonIncreasing _          = False +-- | Decreasing and usable? decreasing :: Order -> Bool-decreasing (Decr k) = k > 0-decreasing _        = False+decreasing (Decr u k) = u && k > 0+decreasing _ = False  -- | Matrix-shaped order is decreasing if any diagonal element is decreasing. isDecr :: Order -> Bool@@ -187,10 +208,10 @@ isDecr o = decreasing o  instance Pretty Order where-  pretty (Decr 0) = text "="-  pretty (Decr k) = text $ show (0 - k)-  pretty Unknown  = text "?"-  pretty (Mat m)  = text "Mat" <+> pretty m+  pretty (Decr u 0) = text "="+  pretty (Decr u k) = mparens (not u) $ text $ show (0 - k)+  pretty Unknown    = text "?"+  pretty (Mat m)    = text "Mat" <+> pretty m   -- | Multiplication of 'Order's.@@ -199,17 +220,17 @@ -- I think this funny pattern matching is because overlapping patterns -- are producing a warning and thus an error (strict compilation settings) (.*.) :: (?cutoff :: CutOff) => Order -> Order -> Order-Unknown  .*. _        = Unknown-(Mat m)  .*. Unknown  = Unknown-(Decr k) .*. Unknown  = Unknown-(Decr k) .*. (Decr l) = decr (k + l)-(Decr 0) .*. (Mat m)  = Mat m-(Decr k) .*. (Mat m)  = (Decr k) .*. (collapse m)-(Mat m1) .*. (Mat m2)-  | okM m1 m2         = Mat $ mul orderSemiring m1 m2-  | otherwise         = (collapse m1) .*. (collapse m2)-(Mat m) .*. (Decr 0)  = Mat m-(Mat m) .*. (Decr k)  = (collapse m) .*. (Decr k)+Unknown    .*. _           = Unknown+(Mat m)    .*. Unknown     = Unknown+(Decr _ k) .*. Unknown     = Unknown+(Decr u k) .*. (Decr u' l) = decr (u || u') (k + l)  -- if one is usable, so is the composition+(Decr _ 0) .*. (Mat m)     = Mat m+(Decr u k) .*. (Mat m)     = (Decr u k) .*. (collapse m)+(Mat m1)   .*. (Mat m2)+  | okM m1 m2              = Mat $ mul orderSemiring m1 m2+  | otherwise              = (collapse m1) .*. (collapse m2)+(Mat m)   .*. (Decr _ 0)   = Mat m+(Mat m)   .*. (Decr u k)   = (collapse m) .*. (Decr u k)  -- | collapse @m@ --@@ -247,7 +268,12 @@  maxO :: (?cutoff :: CutOff) => Order -> Order -> Order maxO o1 o2 = case (o1,o2) of-  (Decr k, Decr l) -> Decr (max k l) -- cut off not needed, within borders+    -- NOTE: strictly speaking the maximum does not exists+    -- which is better, an unusable decrease by 2 or a usable decrease by 1?+    -- We give the usable information priority if it is a decrease.+  (Decr False _, Decr True  l) | l > 0 -> o2+  (Decr True  k, Decr False _) | k > 0 -> o1+  (Decr u k, Decr u' l) -> if l > k then o2 else o1   (Unknown, _)     -> o2   (_, Unknown)     -> o1   (Mat m1, Mat m2) -> Mat (Matrix.add maxO m1 m2)@@ -266,7 +292,13 @@ minO o1 o2 = case (o1,o2) of   (Unknown, _)           -> Unknown   (_, Unknown)           -> Unknown-  (Decr k, Decr l)       -> Decr (min k l) -- cut off not needed, within borders+  -- different usability:+  -- We pick the unusable one if it is not a decrease or+  -- decreases not more than the usable one.+  (Decr False k, Decr True  l) -> if k <= 0 || k <= l then o1 else o2+  (Decr True  k, Decr False l) -> if l <= 0 || l <= k then o2 else o1+  -- same usability:+  (Decr u k, Decr _ l) -> Decr u (min k l)   (Mat m1, Mat m2)     | size m1 == size m2 -> Mat $ Matrix.intersectWith minO m1 m2     | otherwise          -> minO (collapse m1) (collapse m2)
src/full/Agda/Termination/SparseMatrix.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                    #-}-{-# LANGUAGE ScopedTypeVariables    #-}+{-# LANGUAGE CPP #-}  {- | Sparse matrices. @@ -43,6 +42,7 @@   , Diagonal(..)   , toSparseRows   , supSize+  , zipAssocWith     -- * Modifying matrices   , addRow   , addColumn@@ -351,16 +351,6 @@     | i > j = interAssocWith f l m'     | otherwise = (i, f a b) : interAssocWith f l' m' -interAssocWith2 :: Ord i => (a -> a -> a) -> [(i,a)] -> [(i,a)] -> [(i,a)]-interAssocWith2 f = zipAssocWith (const []) (const []) (const Nothing) (const Nothing) (\ a -> Just . f a)--prop_interAssocWith_correct2 :: [(Int,Int)] -> [(Int,Int)] -> Bool-prop_interAssocWith_correct2 xs ys =-  interAssocWith (*) xs ys == interAssocWith2 (*) xs ys-  where-    l  = List.sortBy (compare `on` fst) xs-    l' = List.sortBy (compare `on` fst) ys- -- | @'mul' semiring m1 m2@ multiplies matrices @m1@ and @m2@. --   Uses the operations of the semiring @semiring@ to perform the --   multiplication.@@ -449,7 +439,7 @@          . Boxes.render          . Boxes.hsep 1 Boxes.right          . map ( Boxes.vcat Boxes.right-               . map ( Boxes.alignHoriz Boxes.right 2+               . map ( Boxes.alignHoriz Boxes.right 4                      . Boxes.text . render . pretty                      )                )
src/full/Agda/Termination/TermCheck.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP                        #-}+{-# LANGUAGE GADTs                      #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE ImplicitParams             #-} {-# LANGUAGE NondecreasingIndentation   #-}@@ -13,7 +14,7 @@ module Agda.Termination.TermCheck     ( termDecl     , termMutual-    , Result, DeBruijnPat+    , Result     ) where  import Prelude hiding (null)@@ -23,11 +24,10 @@ import Control.Monad.State  import Data.Foldable (toList)-import Data.List hiding (null) import qualified Data.List as List-import Data.Monoid+import Data.Monoid hiding ((<>)) import qualified Data.Set as Set-import Data.Traversable (traverse)+import Data.Traversable (Traversable, traverse)  import Agda.Syntax.Abstract (IsProjP(..), AllNames(..)) import qualified Agda.Syntax.Abstract as A@@ -51,18 +51,18 @@ import Agda.Termination.RecCheck import Agda.Termination.Inlining +import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Functions import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull) import Agda.TypeChecking.Records -- (isRecordConstructor, isInductiveRecord)-import Agda.TypeChecking.Telescope-import Agda.TypeChecking.EtaContract-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Records-import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull) import Agda.TypeChecking.SizedTypes-import Agda.TypeChecking.Datatypes-import Agda.TypeChecking.Positivity.Occurrence+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope  import qualified Agda.Benchmarking as Benchmark import Agda.TypeChecking.Monad.Benchmark (billTo, billPureTo)@@ -162,7 +162,7 @@      --   (For error-reporting only.)   -> TCM Result termMutual names0 = ifNotM (optTerminationCheck <$> pragmaOptions) (return mempty) $ {-else-}- disableDestructiveUpdate $ do+ inTopContext $ disableDestructiveUpdate $ do    -- Get set of mutually defined names from the TCM.   -- This includes local and auxiliary functions introduced@@ -182,25 +182,29 @@         -- Recursivity checker has to see through abstract definitions!         ignoreAbstractMode $ do         billTo [Benchmark.Termination, Benchmark.RecCheck] $ recursive allNames+      -- -- Andreas, 2017-03-24, use positivity info to skip non-recursive functions+      -- skip = ignoreAbstractMode $ allM allNames $ \ x -> do+      --   null <$> getMutual x+      -- PROBLEMS with test/Succeed/AbstractCoinduction.agda    -- We set the range to avoid panics when printing error messages.   setCurrentRange i $ do -  reportSLn "term.mutual" 10 $ "Termination checking " ++ show allNames+  reportSLn "term.mutual" 10 $ "Termination checking " ++ prettyShow allNames    -- NO_TERMINATION_CHECK   if (Info.mutualTermCheck i `elem` [ NoTerminationCheck, Terminating ]) then do-      reportSLn "term.warn.yes" 2 $ "Skipping termination check for " ++ show names+      reportSLn "term.warn.yes" 2 $ "Skipping termination check for " ++ prettyShow names       forM_ allNames $ \ q -> setTerminates q True -- considered terminating!       return mempty   -- NON_TERMINATING     else if (Info.mutualTermCheck i == NonTerminating) then do-      reportSLn "term.warn.yes" 2 $ "Considering as non-terminating: " ++ show names+      reportSLn "term.warn.yes" 2 $ "Considering as non-terminating: " ++ prettyShow names       forM_ allNames $ \ q -> setTerminates q False       return mempty   -- Trivially terminating (non-recursive)     else ifM skip (do-      reportSLn "term.warn.yes" 2 $ "Trivially terminating: " ++ show names+      reportSLn "term.warn.yes" 2 $ "Trivially terminating: " ++ prettyShow names       forM_ allNames $ \ q -> setTerminates q True       return mempty)    $ {- else -} do@@ -212,7 +216,7 @@            }          runTerm cont = runTerDefault $ do            cutoff <- terGetCutOff-           reportSLn "term.top" 10 $ "Termination checking " ++ show names +++           reportSLn "term.top" 10 $ "Termination checking " ++ prettyShow names ++              " with cutoff=" ++ show cutoff ++ "..."            terLocal setNames cont @@ -268,18 +272,15 @@     Left calls -> return $ singleton $ terminationError names $ callInfos calls     Right{} -> do       liftTCM $ reportSLn "term.warn.yes" 2 $-        show (names) ++ " does termination check"+        prettyShow (names) ++ " does termination check"       return mempty  -- | Smart constructor for 'TerminationError'. --   Removes 'termErrFunctions' that are not mentioned in 'termErrCalls'. terminationError :: [QName] -> [CallInfo] -> TerminationError terminationError names calls = TerminationError names' calls-  where names' = names `intersect` toList (allNames calls)+  where names' = names `List.intersect` toList (allNames calls) --- ASR (08 November 2014). The type of the function could be------ @Either a b -> TerM (Either a b)@. billToTerGraph :: a -> TerM a billToTerGraph a = liftTCM $ billPureTo [Benchmark.Termination, Benchmark.Graph] a @@ -296,7 +297,7 @@   liftTCM $ do      reportS "term.lex" 20 $ unlines-      [ "Calls (" ++ no ++ "dot patterns): " ++ show calls+      [ "Calls (" ++ no ++ "dot patterns): " ++ prettyShow calls       ]      -- Print the whole completion phase.@@ -392,16 +393,16 @@      names <- terGetUserNames     case r of-      Left calls -> return $ singleton $ terminationError ([name] `intersect` names) calls+      Left calls -> return $ singleton $ terminationError ([name] `List.intersect` names) calls       Right () -> do         liftTCM $ reportSLn "term.warn.yes" 2 $-          show name ++ " does termination check"+          prettyShow name ++ " does termination check"         return mempty    where      reportTarget r = liftTCM $        reportSLn "term.target" 20 $ "  target type " ++          caseMaybe r "not recognized" (\ q ->-           "ends in " ++ show q)+           "ends in " ++ prettyShow q)  -- | To process the target type. typeEndsInDef :: MonadTCM tcm => Type -> tcm (Maybe QName)@@ -471,27 +472,7 @@     return (ds, d)   terSetMaskArgs (ds ++ repeat True) $ terSetMaskResult d $ cont -{- Termination check clauses: -   For instance--   f x (cons y nil) = g x y--   Clause-     [VarP "x", ConP "List.cons" [VarP "y", ConP "List.nil" []]]-     Bind (Abs { absName = "x"-               , absBody = Bind (Abs { absName = "y"-                                     , absBody = Def "g" [ Var 1 []-                                                         , Var 0 []]})})--   Outline:-   - create "De Bruijn pattern"-   - collect recursive calls-   - going under a binder, lift de Bruijn pattern-   - compare arguments of recursive call to pattern---}- -- | Is the current target type among the given ones?  targetElem :: [Target] -> TerM Bool@@ -517,97 +498,107 @@ -- --   The term is first normalized and stripped of all non-coinductive projections. -termToDBP :: Term -> TerM DeBruijnPat+termToDBP :: Term -> TerM DeBruijnPattern termToDBP t = ifNotM terGetUseDotPatterns (return unusedVar) $ {- else -} do-    suc <- terGetSizeSuc-    let-      loop :: Term -> TCM DeBruijnPat-      loop t = do-        t <- constructorForm t-        case ignoreSharing t of-          -- Constructors.-          Con c ci args -> ConDBP (conName c) <$> mapM (loop . unArg) args-          Def s [Apply arg] | Just s == suc-                      -> ConDBP s . (:[]) <$> loop (unArg arg)-          DontCare t  -> __IMPOSSIBLE__  -- removed by stripAllProjections-          -- Leaves.-          Var i []    -> return $ VarDBP i-          Lit l       -> return $ LitDBP l-          t           -> return $ TermDBP t-    liftTCM $ loop =<< stripAllProjections =<< normalise t+  termToPattern =<< do liftTCM $ stripAllProjections =<< normalise t +-- | Convert a term (from a dot pattern) to a pattern for the purposes of the termination checker.+--+--   @SIZESUC@ is treated as a constructor. --- | Masks coconstructor patterns in a deBruijn pattern.-stripCoConstructors :: DeBruijnPat -> TerM DeBruijnPat-stripCoConstructors p = do-  case p of-    ConDBP c args -> do-      ind <- ifM ((Just c ==) <$> terGetSizeSuc) (return Inductive) {- else -}-               (liftTCM $ whatInduction c)-      case ind of-        Inductive   -> ConDBP c <$> mapM stripCoConstructors args-        CoInductive -> return unusedVar-    -- The remaining (atomic) patterns cannot contain coconstructors, obviously.-    VarDBP{}  -> return p-    LitDBP{}  -> return p-    TermDBP{} -> return p  -- Can contain coconstructors, but they do not count here.-    ProjDBP{} -> return p+class TermToPattern a b where+  termToPattern :: a -> TerM b +  default termToPattern :: (TermToPattern a' b', Traversable f, a ~ f a', b ~ f b') => a -> TerM b+  termToPattern = traverse termToPattern++instance TermToPattern a b => TermToPattern [a] [b] where+instance TermToPattern a b => TermToPattern (Arg a) (Arg b) where+instance TermToPattern a b => TermToPattern (Named c a) (Named c b) where++-- OVERLAPPING+-- instance TermToPattern a b => TermToPattern a (Named c b) where+--   termToPattern t = unnamed <$> termToPattern t++instance TermToPattern Term DeBruijnPattern where+  termToPattern t = (liftTCM $ ignoreSharing <$> constructorForm t) >>= \case+    -- Constructors.+    Con c _ args -> ConP c noConPatternInfo . map (fmap unnamed) <$> termToPattern args+    Def s [Apply arg] -> do+      suc <- terGetSizeSuc+      if Just s == suc then ConP (ConHead s Inductive []) noConPatternInfo . map (fmap unnamed) <$> termToPattern [arg]+       else return $ DotP t+    DontCare t  -> termToPattern t -- OR: __IMPOSSIBLE__  -- removed by stripAllProjections+    -- Leaves.+    Var i []    -> VarP . (`DBPatVar` i) . prettyShow <$> nameOfBV i+    Lit l       -> return $ LitP l+    t           -> return $ DotP t++ -- | Masks all non-data/record type patterns if --without-K. --   See issue #1023.-maskNonDataArgs :: [DeBruijnPat] -> TerM [Masked DeBruijnPat]+maskNonDataArgs :: [DeBruijnPattern] -> TerM [Masked DeBruijnPattern] maskNonDataArgs ps = zipWith mask ps <$> terGetMaskArgs   where-    mask p@ProjDBP{} _ = Masked False p-    mask p           d = Masked d     p+    mask p@ProjP{} _ = Masked False p+    mask p         d = Masked d     p --- | Convert patterns to the format used by the termination checker---   TODO: refactor termination checking to use regular patterns-convertPatterns :: [DeBruijnPattern] -> TerM [DeBruijnPat]-convertPatterns ps = mapM build ps-  where-    build :: DeBruijnPattern -> TerM DeBruijnPat-    build (VarP x)        = return $ VarDBP $ dbPatVarIndex x-    build (ConP con _ ps) = ConDBP (conName con) <$> mapM (build . namedArg) ps-    build (DotP t)        = termToDBP t-    build (LitP l)        = return $ LitDBP l-    build (ProjP o d)     = return $ ProjDBP o d  -- | Extract recursive calls from one clause.+ termClause :: Clause -> TerM Calls termClause clause = do-  ifNotM (terGetInlineWithFunctions) (termClause' clause) $ {- else -} do++  -- If with-function inlining is disallowed (e.g. --without-K),+  -- we check the original clause.++  let fallback = termClause' clause+  ifNotM (terGetInlineWithFunctions) fallback $ {- else -} do++    -- Otherwise, we will do inlining, hence, can skip with-generated functions.+     name <- terGetCurrent-    ifM (isJust <$> do isWithFunction name) (return mempty) $-      mapM' termClause' =<< do liftTCM $ inlineWithClauses name clause+    ifM (isJust <$> isWithFunction name) (return mempty) $ {- else -} do +      -- With inlining, the termination check for all subordinated+      -- with-functions is included in the parent function.++      (liftTCM $ inlineWithClauses name clause) >>= \case+        Nothing  -> fallback+        Just cls -> terSetHaveInlinedWith $ mapM' termClause' cls+ termClause' :: Clause -> TerM Calls termClause' clause = do-  cl <- introHiddenLambdas clause-  let tel      = clauseTel cl-      argPats' = namedClausePats cl-      body     = clauseBody cl+  Clause{ clauseTel = tel, namedClausePats = ps, clauseBody = body } <- etaExpandClause clause   liftTCM $ reportSDoc "term.check.clause" 25 $ vcat     [ text "termClause"-    , nest 2 $ text "tel      =" <+> prettyTCM tel-    , nest 2 $ text "argPats' =" <+> do-      addContext tel $ do-       aps <- reifyPatterns argPats'-       fsep $ map prettyA aps+    , nest 2 $ text "tel =" <+> prettyTCM tel+    , nest 2 $ text "ps  =" <+> do addContext tel $ prettyTCMPatternList ps     ]-  addContext tel $ do-    dbpats <- convertPatterns $ map namedArg argPats'-    case body of-      Nothing -> return empty-      Just v -> do-        dbpats <- mapM stripCoConstructors dbpats-        mdbpats <- maskNonDataArgs dbpats-        terSetPatterns mdbpats $ do-          terSetSizeDepth tel $ do-            reportBody v-            extract v+  forM' body $ \ v -> addContext tel $ do+    -- TODO: combine the following two traversals, avoid full normalisation.+    -- Parse dot patterns as patterns as far as possible.+    ps <- postTraversePatternM parseDotP ps+    -- Blank out coconstructors.+    ps <- preTraversePatternM stripCoCon ps+    -- Mask non-data arguments.+    mdbpats <- maskNonDataArgs $ map namedArg ps+    terSetPatterns mdbpats $ do+      terSetSizeDepth tel $ do+        reportBody v+        extract v    where+    parseDotP = \case+      DotP t -> termToDBP t+      p      -> return p+    stripCoCon p = case p of+      ConP (ConHead c _ _) _ _ -> do+        ifM ((Just c ==) <$> terGetSizeSuc) (return p) $ {- else -} do+        whatInduction c >>= \case+          Inductive   -> return p+          CoInductive -> return unusedVar+      _ -> return p     reportBody :: Term -> TerM ()     reportBody v = verboseS "term.check.clause" 6 $ do       f       <- terGetCurrent@@ -618,46 +609,11 @@                     (if delayed == Delayed then "delayed " else "") ++                     "clause of")                 <+> prettyTCM f-            , nest 2 $ text "lhs:" <+> hsep (map prettyTCM pats)+            , nest 2 $ text "lhs:" <+> sep (map prettyTCM pats)             , nest 2 $ text "rhs:" <+> prettyTCM v             ] --- | Rewrite a clause @f ps =tel= \ {xs} -> v@ to @f ps {xs} =(tel {xs})= v@.---   The pupose is to move hidden size quantifications---   to the lhs such that the termination checker can make use of them.---   See, e.g., test/succeed/SizedTypesExtendedLambda.agda.-introHiddenLambdas :: MonadTCM tcm => Clause -> tcm Clause-introHiddenLambdas clause = liftTCM $ do-  case clause of-    Clause range ctel ps body        Nothing  catchall -> return clause -    Clause range ctel ps Nothing     (Just t) catchall -> return clause-    Clause range ctel ps (Just body) (Just t) catchall -> do-      case removeHiddenLambdas body of-        -- nobody or no hidden lambdas-        ([], _) -> return clause-        -- hidden lambdas-        (axs, body') -> do-          -- n = number of hidden lambdas-          let n = length axs-          -- take n abstractions from rhs type-          TelV ttel t' <- telViewUpTo n $ unArg t-          when (size ttel < n) __IMPOSSIBLE__-          -- join with lhs telescope-          let ctel' = telFromList $ telToList ctel ++ telToList ttel-              ps'   = raise n ps ++ zipWith toPat (downFrom $ size axs) axs-          return $ Clause range ctel' ps' (Just body') (Just (t $> t')) catchall-  where-    toPat i (Arg info x) = Arg info $ namedDBVarP i x--    removeHiddenLambdas :: Term -> ([Arg ArgName], Term)-    removeHiddenLambdas v =-      case ignoreSharing v of-        Lam info b | getHiding info == Hidden ->-          let (xs, b') = removeHiddenLambdas $ unAbs b-          in  (Arg info (absName b) : xs, b')-        _ -> ([], v)- -- | Extract recursive calls from expressions. class ExtractCalls a where   extract :: a -> TerM Calls@@ -721,14 +677,12 @@ constructor c ind args = do   cutoff <- terGetCutOff   let ?cutoff = cutoff-  mapM' loopArg args-  where-    loopArg (arg, preserves) = terModifyGuarded g' $ extract arg where-      g' = case (preserves, ind) of+  forM' args $ \ (arg, preserves) -> do+    let g' = case (preserves, ind) of              (True,  Inductive)   -> id              (True,  CoInductive) -> (Order.lt .*.)              (False, _)           -> const Order.unknown-+    terModifyGuarded g' $ extract arg  -- | Handle guardedness preserving type constructor. @@ -763,16 +717,16 @@ -- | Handles function applications @g es@.  function :: QName -> Elims -> TerM Calls-function g es = ifM (terGetInlineWithFunctions `and2M` do isJust <$> isWithFunction g) (withFunction g es)+function g es0 = ifM (terGetInlineWithFunctions `and2M` do isJust <$> isWithFunction g) (withFunction g es0)   $ {-else, no with function-} do      f       <- terGetCurrent     names   <- terGetMutual     guarded <- terGetGuarded -    let gArgs = Def g es+    -- let gArgs = Def g es0     liftTCM $ reportSDoc "term.function" 30 $-      text "termination checking function call " <+> prettyTCM gArgs+      text "termination checking function call " <+> prettyTCM (Def g es0)      -- First, look for calls in the arguments of the call gArgs. @@ -780,7 +734,7 @@     -- Andreas, Issue 1530: constructors have to be reduced deep inside terms,     -- thus, we need to use traverseTermM.  Sharing is handled by traverseTermM,     -- so no ignoreSharing needed here.-    let reduceCon = traverseTermM $ \ t -> case t of+    let (reduceCon :: Term -> TCM Term) = traverseTermM $ \ t -> case t of            Con c ci vs -> (`apply` vs) <$> reduce (Con c ci [])  -- make sure we don't reduce the arguments            _ -> return t @@ -794,7 +748,7 @@     let unguards = repeat Order.unknown     let guards = applyWhen isProj (guarded :) unguards     -- Collect calls in the arguments of this call.-    let args = map unArg $ argsFromElims es+    let args = map unArg $ argsFromElims es0     calls <- forM' (zip guards args) $ \ (guard, a) -> do       terSetGuarded guard $ extract a @@ -815,10 +769,26 @@        Just gInd -> do          delayed <- terGetDelayed          pats    <- terGetPatterns-         -- 2014-03-25 Andreas, the costs seem small, benchmark turned off.-         es <- liftTCM $ -- billTo [Benchmark.Termination, Benchmark.Reduce] $-           forM es $-              etaContract <=< traverse reduceCon <=< instantiateFull+         -- Andreas, 2017-02-14, issue #2458:+         -- If we have inlined with-functions, we could be illtyped,+         -- hence, do not reduce anything.+         -- Andreas, 2017-06-20 issue #2613:+         -- We still need to reduce constructors, even when with-inlining happened.+         es <- -- ifM terGetHaveInlinedWith (return es0) {-else-} $+           liftTCM $ forM es0 $+             etaContract <=< traverse reduceCon <=< instantiateFull+           -- 2017-05-16, issue #2403: Argument normalization is too expensive,+           -- even if we only expand non-recursive functions.+           -- Argument normalization TURNED OFF.+           -- liftTCM $ billTo [Benchmark.Termination, Benchmark.Reduce] $ do+           --  -- Andreas, 2017-01-13, issue #2403, normalize arguments for the structural ordering.+           --  -- Andreas, 2017-03-25, issue #2495, restrict this to non-recursive functions+           --  -- otherwise, the termination checking may run forever.+           --  reportSLn "term.reduce" 90 $ "normalizing call arguments"+           --  modifyAllowedReductions (List.\\ [UnconfirmedReductions,RecursiveReductions]) $+           --    forM es0 $ \ e -> do+           --      reportSDoc "term.reduce" 95 $ text "normalizing " <+> prettyTCM e+           --      etaContract =<< normalise e           -- Compute the call matrix. @@ -849,7 +819,10 @@          -- Andreas, 2015-01-21 Issue 1410: Go to the module where g is defined          -- otherwise its free variables with be prepended to the call          -- in the error message.-         doc <- liftTCM $ withCurrentModule (qnameModule g) $ buildClosure gArgs+         doc <- liftTCM $ withCurrentModule (qnameModule g) $ buildClosure $+           Def g $ filter ((/= Inserted) . getOrigin) es0+           -- Andreas, 2017-01-05, issue #2376+           -- Remove arguments inserted by etaExpandClause.           let src  = fromMaybe __IMPOSSIBLE__ $ List.elemIndex f names              tgt  = gInd@@ -860,8 +833,8 @@                       , callInfoCall   = doc                       }]          liftTCM $ reportSDoc "term.kept.call" 5 $ vcat-           [ text "kept call from" <+> text (show f) <+> hsep (map prettyTCM pats)-           , nest 2 $ text "to" <+> text (show g) <+>+           [ text "kept call from" <+> text (prettyShow f) <+> hsep (map prettyTCM pats)+           , nest 2 $ text "to" <+> text (prettyShow g) <+>                        hsep (map (parens . prettyTCM) args)            , nest 2 $ text "call matrix (with guardedness): "            , nest 2 $ pretty cm@@ -889,13 +862,11 @@         -- in a type mutual with the current target         -- then we count it as guarding.         ind <- ifM ((Just c ==) <$> terGetSharp) (return CoInductive) $ do-          r <- liftTCM $ isRecordConstructor c-          case r of-            Nothing       -> return Inductive-            Just (q, def) -> (\ b -> if b then CoInductive else Inductive) <$>-              andM [ return $ recRecursive def-                   , return $ recInduction def == Just CoInductive-                   , targetElem (q : recMutual def)+          caseMaybeM (liftTCM $ isRecordConstructor c) (return Inductive) $ \ (q, def) -> do+            reportSLn "term.check.term" 50 $ "constructor " ++ prettyShow c ++ " has record type " ++ prettyShow q+            (\ b -> if b then CoInductive else Inductive) <$>+              andM [ return $ recInduction def == Just CoInductive+                   , targetElem . fromMaybe __IMPOSSIBLE__ $ recMutual def                    ]         constructor c ind argsg @@ -975,8 +946,11 @@      The guardedness is the number of projection patterns in @pats@      minus the number of projections in @es@.  -}-compareArgs :: (Integral n) => [Elim] -> TerM (n, n, [[Order]])+compareArgs :: [Elim] -> TerM (Int, Int, [[Order]]) compareArgs es = do+  liftTCM $ reportSDoc "term.compareArgs" 90 $ vcat+    [ text $ "comparing " ++ show (length es) ++ " args"+    ]   pats <- terGetPatterns   -- apats <- annotatePatsWithUseSizeLt pats   -- reportSDoc "term.compare" 20 $@@ -986,18 +960,18 @@    -- Count the number of coinductive projection(pattern)s in caller and callee.   -- Only recursive coinductive projections are eligible (Issue 1209).-  projsCaller <- genericLength <$> do+  projsCaller <- length <$> do     filterM (isCoinductiveProjection True) $ mapMaybe (fmap (head . unAmbQ . snd) . isProjP . getMasked) pats-  projsCallee <- genericLength <$> do+  projsCallee <- length <$> do     filterM (isCoinductiveProjection True) $ mapMaybe (fmap snd . isProjElim) es   cutoff <- terGetCutOff   let ?cutoff = cutoff-  let guardedness = decr $ projsCaller - projsCallee+  let guardedness = decr True $ projsCaller - projsCallee   liftTCM $ reportSDoc "term.guardedness" 30 $ sep     [ text "compareArgs:"-    , nest 2 $ text $ "projsCaller = " ++ show projsCaller-    , nest 2 $ text $ "projsCallee = " ++ show projsCallee-    , nest 2 $ text $ "guardedness of call: " ++ show guardedness+    , nest 2 $ text $ "projsCaller = " ++ prettyShow projsCaller+    , nest 2 $ text $ "projsCallee = " ++ prettyShow projsCallee+    , nest 2 $ text $ "guardedness of call: " ++ prettyShow guardedness     ]   return $ addGuardedness guardedness (size es) (size pats) matrix @@ -1008,35 +982,41 @@ --   off, if inductive. -- --   UNUSED-annotatePatsWithUseSizeLt :: [DeBruijnPat] -> TerM [(Bool,DeBruijnPat)]+annotatePatsWithUseSizeLt :: [DeBruijnPattern] -> TerM [(Bool,DeBruijnPattern)] annotatePatsWithUseSizeLt = loop where   loop [] = return []-  loop (p@(ProjDBP _ q) : pats) = ((False,p) :) <$> do projUseSizeLt q $ loop pats+  loop (p@(ProjP _ q) : pats) = ((False,p) :) <$> do projUseSizeLt q $ loop pats   loop (p : pats) = (\ b ps -> (b,p) : ps) <$> terGetUseSizeLt <*> loop pats   -- | @compareElim e dbpat@ -compareElim :: Elim -> Masked DeBruijnPat -> TerM Order+compareElim :: Elim -> Masked DeBruijnPattern -> TerM Order compareElim e p = do   liftTCM $ do     reportSDoc "term.compare" 30 $ sep       [ text "compareElim"-      , nest 2 $ text "e = " <+> prettyTCM e-      , nest 2 $ text "p = " <+> prettyTCM p+      , nest 2 $ text "e = " <> prettyTCM e+      , nest 2 $ text "p = " <> prettyTCM p       ]     reportSDoc "term.compare" 50 $ sep       [ nest 2 $ text $ "e = " ++ show e       , nest 2 $ text $ "p = " ++ show p       ]   case (e, getMasked p) of-    (Proj _ d, ProjDBP _ d')       -> do-      d  <- liftTCM $ getOriginalProjection d-      d' <- liftTCM $ getOriginalProjection d'-      compareProj d d'-    (Proj{}, _         )           -> return Order.unknown-    (Apply{}, ProjDBP{})           -> return Order.unknown-    (Apply arg, _)                 -> compareTerm (unArg arg) p+    (Proj _ d, ProjP _ d') -> do+      d  <- getOriginalProjection d+      d' <- getOriginalProjection d'+      o  <- compareProj d d'+      reportSDoc "term.compare" 30 $ sep+        [ text $ "comparing callee projection " ++ prettyShow d+        , text $ "against caller projection " ++ prettyShow d'+        , text $ "yields order " ++ prettyShow o+        ]+      return o+    (Proj{}, _)            -> return Order.unknown+    (Apply{}, ProjP{})     -> return Order.unknown+    (Apply arg, _)         -> compareTerm (unArg arg) p  -- | In dependent records, the types of later fields may depend on the --   values of earlier fields.  Thus when defining an inhabitant of a@@ -1061,7 +1041,7 @@           case def of             Record{ recFields = fs } -> do               fs <- return $ map unArg fs-              case (find (d==) fs, find (d'==) fs) of+              case (List.find (d==) fs, List.find (d'==) fs) of                 (Just i, Just i')                   -- earlier field is smaller                   | i < i'    -> return Order.lt@@ -1084,10 +1064,10 @@ -}  -- | 'addGuardedness' adds guardedness flag in the upper left corner (0,0).-addGuardedness :: Integral n => Order -> n -> n -> [[Order]] -> (n, n, [[Order]])+addGuardedness :: Order -> Int -> Int -> [[Order]] -> (Int, Int, [[Order]]) addGuardedness o nrows ncols m =   (nrows + 1, ncols + 1,-   (o : genericReplicate ncols Order.unknown) : map (Order.unknown :) m)+   (o : replicate ncols Order.unknown) : map (Order.unknown :) m)  -- | Compose something with the upper-left corner of a call matrix composeGuardedness :: (?cutoff :: CutOff) => Order -> [[Order]] -> [[Order]]@@ -1101,16 +1081,18 @@ offsetFromConstructor c = maybe 1 (const 0) <$> do   liftTCM $ isRecordConstructor c --- | Compute the proper subpatterns of a 'DeBruijnPat'.-subPatterns :: DeBruijnPat -> [DeBruijnPat]-subPatterns p = case p of-  ConDBP c ps -> ps ++ concatMap subPatterns ps-  VarDBP _    -> []-  LitDBP _    -> []-  TermDBP _   -> []-  ProjDBP{}   -> []+-- | Compute the proper subpatterns of a 'DeBruijnPattern'.+subPatterns :: DeBruijnPattern -> [DeBruijnPattern]+subPatterns = foldPattern $ \case+  ConP _ _ ps -> map namedArg ps+  VarP _      -> mempty+  LitP _      -> mempty+  DotP _      -> mempty+  AbsurdP _   -> mempty+  ProjP _ _   -> mempty -compareTerm :: Term -> Masked DeBruijnPat -> TerM Order++compareTerm :: Term -> Masked DeBruijnPattern -> TerM Order compareTerm t p = do --   reportSDoc "term.compare" 25 $ --     text " comparing term " <+> prettyTCM t <+>@@ -1120,13 +1102,8 @@   liftTCM $ reportSDoc "term.compare" 25 $     text " comparing term " <+> prettyTCM t <+>     text " to pattern " <+> prettyTCM p <+>-    text (" results in " ++ show o)+    text (" results in " ++ prettyShow o)   return o-{--compareTerm t p = Order.supremum $ compareTerm' t p : map cmp (subPatterns p)-  where-    cmp p' = (Order..*.) Order.lt (compareTerm' t p')--}   -- | Remove all non-coinductive projections from an algebraic term@@ -1137,15 +1114,7 @@  instance StripAllProjections a => StripAllProjections (Arg a) where   stripAllProjections = traverse stripAllProjections-  -- stripAllProjections (Arg info a) = Arg info <$> stripAllProjections a -{- DOES NOT WORK, since s.th. special is needed for Elims-instance StripAllProjections a => StripAllProjections [a] where-  stripAllProjections = traverse stripAllProjections--instance StripAllProjections a => StripAllProjections (Elim' a) where--}- instance StripAllProjections Elims where   stripAllProjections es =     case es of@@ -1172,7 +1141,7 @@ -- --   Precondition: top meta variable resolved -compareTerm' :: Term -> Masked DeBruijnPat -> TerM Order+compareTerm' :: Term -> Masked DeBruijnPattern -> TerM Order compareTerm' v mp@(Masked m p) = do   suc  <- terGetSizeSuc   cutoff <- terGetCutOff@@ -1196,13 +1165,13 @@     -- deepest variable in @p@.     -- For sized types, the depth is maximally     -- the number of SIZELT hypotheses one can have in a context.-    (MetaV{}, p) -> Order.decr . max (if m then 0 else patternDepth p) . pred <$>+    (MetaV{}, p) -> Order.decr True . max (if m then 0 else patternDepth p) . pred <$>        terAsks _terSizeDepth      -- Successor on both sides cancel each other.     -- We ignore the mask for sizes.-    (Def s [Apply t], ConDBP s' [p]) | s == s' && Just s == suc ->-      compareTerm' (unArg t) (notMasked p)+    (Def s [Apply t], ConP s' _ [p]) | s == conName s' && Just s == suc ->+      compareTerm' (unArg t) (notMasked $ namedArg p)      -- Register also size increase.     (Def s [Apply t], p) | Just s == suc ->@@ -1214,7 +1183,7 @@      _ | m -> return Order.unknown -    (Lit l, LitDBP l')+    (Lit l, LitP l')       | l == l'     -> return Order.le       | otherwise   -> return Order.unknown @@ -1226,47 +1195,48 @@      -- Andreas, 2011-04-19 give subterm priority over matrix order -    (Con{}, ConDBP c ps) | any (isSubTerm v) ps ->-      decrease <$> offsetFromConstructor c <*> return Order.le+    (Con{}, ConP c _ ps) | any (isSubTerm v . namedArg) ps ->+      decr True <$> offsetFromConstructor (conName c) -    (Con c ci ts, ConDBP c' ps) | conName c == c'->+    (Con c _ ts, ConP c' _ ps) | conName c == conName c'->       compareConArgs ts ps -    (Con c ci [], _) -> return Order.le+    (Con _ _ [], _) -> return Order.le      -- new case for counting constructors / projections     -- register also increase-    (Con c ci ts, _) -> do+    (Con c _ ts, _) -> do       increase <$> offsetFromConstructor (conName c)                <*> (infimum <$> mapM (\ t -> compareTerm' (unArg t) mp) ts)      (t, p) -> return $ subTerm t p  -- | @subTerm@ computes a size difference (Order)-subTerm :: (?cutoff :: CutOff) => Term -> DeBruijnPat -> Order+subTerm :: (?cutoff :: CutOff) => Term -> DeBruijnPattern -> Order subTerm t p = if equal t p then Order.le else properSubTerm t p   where     equal (Shared p) dbp = equal (derefPtr p) dbp-    equal (Con c ci ts) (ConDBP c' ps) =-      and $ (conName c == c')+    equal (Con c _ ts) (ConP c' _ ps) =+      and $ (conName c == conName c')           : (length ts == length ps)-          : zipWith equal (map unArg ts) ps-    equal (Var i []) (VarDBP i') = i == i'-    equal (Lit l)    (LitDBP l') = l == l'+          : zipWith (\ t p -> equal (unArg t) (namedArg p)) ts ps+    equal (Var i []) (VarP x) = i == dbPatVarIndex x+    equal (Lit l)    (LitP l') = l == l'     -- Terms.     -- Checking for identity here is very fragile.     -- However, we cannot do much more, as we are not allowed to normalize t.     -- (It might diverge, and we are just in the process of termination checking.)-    equal t         (TermDBP t') = t == t'+    equal t         (DotP t') = t == t'     equal _ _ = False -    properSubTerm t (ConDBP _ ps) = decrease 1 $ supremum $ map (subTerm t) ps+    properSubTerm t (ConP _ _ ps) =+      setUsability True $ decrease 1 $ supremum $ map (subTerm t . namedArg) ps     properSubTerm _ _ = Order.unknown -isSubTerm :: (?cutoff :: CutOff) => Term -> DeBruijnPat -> Bool+isSubTerm :: (?cutoff :: CutOff) => Term -> DeBruijnPattern -> Bool isSubTerm t p = nonIncreasing $ subTerm t p -compareConArgs :: Args -> [DeBruijnPat] -> TerM Order+compareConArgs :: Args -> [NamedArg DeBruijnPattern] -> TerM Order compareConArgs ts ps = do   cutoff <- terGetCutOff   let ?cutoff = cutoff@@ -1276,9 +1246,9 @@     (0,0) -> return Order.le        -- c <= c     (0,1) -> return Order.unknown   -- c not<= c x     (1,0) -> __IMPOSSIBLE__-    (1,1) -> compareTerm' (unArg (head ts)) (notMasked (head ps))+    (1,1) -> compareTerm' (unArg (head ts)) (notMasked $ namedArg $ head ps)     (_,_) -> foldl (Order..*.) Order.le <$>-               zipWithM compareTerm' (map unArg ts) (map notMasked ps)+               zipWithM compareTerm' (map unArg ts) (map (notMasked . namedArg) ps)        -- corresponds to taking the size, not the height        -- allows examples like (x, y) < (Succ x, y) {- version which does an "order matrix"@@ -1287,7 +1257,7 @@    -- Trigges issue 787.         (_,_) -> do -- build "call matrix"           m <- mapM (\t -> mapM (compareTerm' suc (unArg t)) ps) ts-          let m2 = makeCM (genericLength ps) (genericLength ts) m+          let m2 = makeCM (length ps) (length ts) m           return $ Order.orderMat (Order.mat m2) -} {- version which takes height@@ -1295,34 +1265,45 @@ --               else Order.infimum (zipWith compareTerm' (map unArg ts) ps) -} -compareVar :: Nat -> Masked DeBruijnPat -> TerM Order+compareVar :: Nat -> Masked DeBruijnPattern -> TerM Order compareVar i (Masked m p) = do   suc    <- terGetSizeSuc   cutoff <- terGetCutOff   let ?cutoff = cutoff   let no = return Order.unknown   case p of-    ProjDBP{}   -> no-    LitDBP{}    -> no-    TermDBP{}   -> no-    VarDBP j    -> compareVarVar i (Masked m j)-    ConDBP s [p] | Just s == suc -> decrease 1 <$> compareVar i (notMasked p)-    ConDBP c ps -> if m then no else do-      decrease <$> offsetFromConstructor c-               <*> (Order.supremum <$> mapM (compareVar i . notMasked) ps)+    ProjP{}   -> no+    LitP{}    -> no+    DotP{}   -> no+    AbsurdP{} -> no+    VarP x    -> compareVarVar i (Masked m x) +    ConP s _ [p] | Just (conName s) == suc ->+      setUsability True . decrease 1 <$> compareVar i (notMasked $ namedArg p)++    ConP c _ ps -> if m then no else setUsability True <$> do+      decrease <$> offsetFromConstructor (conName c)+               <*> (Order.supremum <$> mapM (compareVar i . notMasked . namedArg) ps)+ -- | Compare two variables. -- --   The first variable comes from a term, the second from a pattern.-compareVarVar :: Nat -> Masked Nat -> TerM Order-compareVarVar i (Masked m j)-  | i == j    = if not m then return Order.le else liftTCM $+compareVarVar :: Nat -> Masked DBPatVar -> TerM Order+compareVarVar i (Masked m x@(DBPatVar _ j))+  | i == j = if not m then return Order.le else liftTCM $       -- If j is a size, we ignore the mask.       ifM (isJust <$> do isSizeType =<< reduce =<< typeOfBV j)         {- then -} (return Order.le)         {- else -} (return Order.unknown)-  | otherwise = ifNotM ((i `VarSet.member`) <$> terGetUsableVars) (return Order.unknown) $ {- else -} do+  | otherwise = do+      -- record usability of variable+      u <- (i `VarSet.member`) <$> terGetUsableVars+      -- Andreas, 2017-07-26, issue #2331.+      -- The usability logic is refuted by bounded size quantification in terms.+      -- Thus, it is switched off (the infrastructure remains in place for now).+      if not u then return Order.unknown else do+      -- Only if usable:       res <- isBounded i       case res of         BoundedNo  -> return Order.unknown-        BoundedLt v -> decrease 1 <$> compareTerm' v (Masked  m (VarDBP j))+        BoundedLt v -> setUsability u . decrease 1 <$> compareTerm' v (Masked m $ VarP x)
src/full/Agda/TypeChecking/Abstract.hs view
@@ -55,9 +55,10 @@  piAbstract :: (Term, EqualityView) -> Type -> TCM Type piAbstract (v, OtherType a) b = piAbstractTerm v a b-piAbstract (prf, eqt@(EqualityType s _ _ a v _)) b = do+piAbstract (prf, eqt@(EqualityType _ _ _ (Arg _ a) v _)) b = do+  s <- inferSort a   let prfTy = equalityUnview eqt-      vTy   = El s (unArg a)+      vTy   = El s a   b <- abstractType prfTy prf b   b <- addContext ("w", defaultDom prfTy) $ abstractType (raise 1 vTy) (unArg $ raise 1 v) b   return . funType vTy . funType eqTy' . swap01 $ b@@ -108,7 +109,7 @@   let n = length args    let abstr b v = do-        m <- size <$> getContext+        m <- getContextSize         let (a', u') = raise (m - n) (a, u)         case isPrefixOf u' v of           Nothing -> return v@@ -129,6 +130,11 @@                , nest 2 $ (prettyTCM =<< getContextTelescope) <+> text "⊢"                , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ]                , nest 2 $ prettyTCM err ]+        reportSDoc "impossible" 60 $+          vcat [ text "Type error in term to abstract (raw)"+               , nest 2 $ ((text . show) =<< getContextTelescope) <+> text "⊢"+               , nest 2 $ sep [ (text . show) v <+> text ":", nest 2 $ (text . show) b ]+               ]         __IMPOSSIBLE__   reportSDoc "tc.abstract" 50 $ sep [ text "Resulting abstraction", nest 2 $ prettyTCM v ]   modifySignature $ updateDefinitions $ HMap.delete hole
src/full/Agda/TypeChecking/CheckInternal.hs view
@@ -12,8 +12,9 @@   ( checkType   , checkInternal   , checkInternal'-  , defaultAction, Action(..)+  , Action(..), defaultAction, eraseUnusedAction   , infer+  , inferSort   ) where  import Control.Arrow ((&&&), (***), first, second)@@ -24,7 +25,7 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Conversion-import Agda.TypeChecking.Datatypes (getConType)+import Agda.TypeChecking.Datatypes -- (getConType, getFullyAppliedConType) import Agda.TypeChecking.Level import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -42,6 +43,8 @@ #include "undefined.h" import Agda.Utils.Impossible +-- * Bidirectional rechecker+ -- -- | Entry point for e.g. checking WithFunctionType. -- checkType :: Type -> TCM () -- checkType t = -- dontAssignMetas $ ignoreSorts $@@ -96,12 +99,44 @@ checkTypeSpine :: Type -> Term -> Elims -> TCM Sort checkTypeSpine a self es = shouldBeSort =<< do snd <$> inferSpine a self es -data Action = Action { preAction  :: Type -> Term -> TCM Term-                     , postAction :: Type -> Term -> TCM Term } +-- | 'checkInternal' traverses the whole 'Term', and we can use this+--   traversal to modify the term.+data Action = Action+  { preAction  :: Type -> Term -> TCM Term+    -- ^ Called on each subterm before the checker runs.+  , postAction :: Type -> Term -> TCM Term+    -- ^ Called on each subterm after the type checking.+  , relevanceAction :: Relevance -> Relevance -> Relevance+    -- ^ Called for each @ArgInfo@.+    --   The first 'Relevance' is from the type,+    --   the second from the term.+  }++-- | The default action is to not change the 'Term' at all. defaultAction :: Action-defaultAction = Action (\ _ v -> return v) (\ _ v -> return v)+defaultAction = Action+  { preAction       = \ _ -> return+  , postAction      = \ _ -> return+  , relevanceAction = \ _ -> id+  } +eraseUnusedAction :: Action+eraseUnusedAction = defaultAction { postAction = eraseUnused }+  where+    eraseUnused :: Type -> Term -> TCM Term+    eraseUnused t v = case ignoreSharing v of+      Def f es -> do+        pols <- getPolarity f+        return $ Def f $ eraseIfNonvariant pols es+      _        -> return v++    eraseIfNonvariant :: [Polarity] -> Elims -> Elims+    eraseIfNonvariant []                  es             = es+    eraseIfNonvariant pols                []             = []+    eraseIfNonvariant (Nonvariant : pols) (e : es) = (fmap DontCare e) : eraseIfNonvariant pols es+    eraseIfNonvariant (_          : pols) (e : es) = e : eraseIfNonvariant pols es+ -- | Entry point for term checking. checkInternal :: Term -> Type -> TCM () checkInternal v t = void $ checkInternal' defaultAction v t@@ -126,20 +161,16 @@       a <- metaType x       checkSpine action a (MetaV x []) es t     Con c ci vs -> do-      -- we need to fully apply the constructor to make getConType work-      TelV tel t <- telView t-      addContext tel $ do-        let failure = typeError $ DoesNotConstructAnElementOf (conName c) t-            vs'     = raise (size tel) vs ++ teleArgs tel-        a <- maybe failure return =<< getConType c t+      -- We need to fully apply the constructor to make getConType work!+      fullyApplyCon c vs t $ \ _d _dt _pars a vs' tel t -> do         Con c ci vs2 <- checkArgs action a (Con c ci []) vs' t-                 -- Strip away the extra arguments+        -- Strip away the extra arguments         return $ applySubst (strengthenS __IMPOSSIBLE__ (size tel))-               $ Con c ci (take (length vs) vs2)+          $ Con c ci $ take (length vs) vs2     Lit l      -> Lit l <$ ((`subtype` t) =<< litType l)     Lam ai vb  -> do       (a, b) <- shouldBePi t-      checkArgInfo ai $ domInfo a+      ai <- checkArgInfo action ai $ domInfo a       addContext (suggest vb b, a) $ do         Lam ai . Abs (absName vb) <$> checkInternal' action (absBody vb) (absBody b)     Pi a b     -> do@@ -165,7 +196,41 @@     DontCare v -> DontCare <$> checkInternal' action v t     Shared{}   -> __IMPOSSIBLE__ -checkSpine :: Action -> Type -> Term -> Elims -> Type -> TCM Term+-- | Make sure a constructor is fully applied+--   and infer the type of the constructor.+--   Raises a type error if the constructor does not belong to the given type.+fullyApplyCon+  :: ConHead -- ^ Constructor.+  -> Args    -- ^ Constructor arguments.+  -> Type    -- ^ Type of the constructor application.+  -> (QName -> Type -> Args -> Type -> Args -> Telescope -> Type -> TCM a)+       -- ^ Name of the data/record type,+       --   type of the data/record type,+       --   reconstructed parameters,+       --   type of the constructor (applied to parameters),+       --   full application arguments,+       --   types of missing arguments (already added to context),+       --   type of the full application.+  -> TCM a+fullyApplyCon c vs t0 ret = do+  TelV tel t <- telView t0+  -- The type of the constructor application may still be a function+  -- type.  In this case, we introduce the domains @tel@ into the context+  -- and apply the constructor to these fresh variables.+  addContext tel $ do+    getFullyAppliedConType c t >>= \case+      Nothing ->+        typeError $ DoesNotConstructAnElementOf (conName c) t+      Just ((d, dt, pars), a) ->+        ret d dt pars a (raise (size tel) vs ++ teleArgs tel) tel t++checkSpine+  :: Action+  -> Type      -- ^ Type of the head @self@.+  -> Term      -- ^ The head @self@.+  -> Elims     -- ^ The eliminations @es@.+  -> Type      -- ^ Expected type of the application @self es@.+  -> TCM Term  -- ^ The application after modification by the @Action@. checkSpine action a self es t = do   reportSDoc "tc.check.internal" 20 $ sep     [ text "checking spine "@@ -174,27 +239,45 @@                    , nest 4 $ prettyTCM es <+> text ":"                    , nest 2 $ prettyTCM t ] ]   ((v, v'), t') <- inferSpine' action a self self es+  t' <- reduce t'   v' <$ coerceSize subtype v t' t -checkArgs :: Action -> Type -> Term -> Args -> Type -> TCM Term+checkArgs+  :: Action+  -> Type      -- ^ Type of the head.+  -> Term      -- ^ The head.+  -> Args      -- ^ The arguments.+  -> Type      -- ^ Expected type of the application.+  -> TCM Term  -- ^ The application after modification by the @Action@. checkArgs action a self vs t = checkSpine action a self (map Apply vs) t  -- | @checkArgInfo actual expected@.-checkArgInfo :: ArgInfo -> ArgInfo -> TCM ()-checkArgInfo ai ai' = do+--+--   The @expected@ 'ArgInfo' comes from the type.+--   The @actual@ 'ArgInfo' comes from the term and can be updated+--   by an action.+checkArgInfo :: Action -> ArgInfo -> ArgInfo -> TCM ArgInfo+checkArgInfo action ai ai' = do   checkHiding    (getHiding ai)     (getHiding ai')-  checkRelevance (getRelevance ai)  (getRelevance ai')+  r <- checkRelevance action (getRelevance ai)  (getRelevance ai')+  return $ setRelevance r ai  checkHiding    :: Hiding -> Hiding -> TCM ()-checkHiding    h h' = unless (h == h') $ typeError $ HidingMismatch h h'+checkHiding    h h' = unless (sameHiding h h') $ typeError $ HidingMismatch h h' -checkRelevance :: Relevance -> Relevance -> TCM ()-checkRelevance r0 r0' = unless (r == r') $ typeError $ RelevanceMismatch r r'+-- | @checkRelevance action term type@.+--+--   The @term@ 'Relevance' can be updated by the @action@.+--   Note that the relevances might not match precisedly,+--   because of the non-semantic 'Forced' relevance.+checkRelevance :: Action -> Relevance -> Relevance -> TCM Relevance+checkRelevance action r0 r0' = do+  unless (r == r') $ typeError $ RelevanceMismatch r r'+  return $ relevanceAction action r0' r0  -- Argument order for actions: @type@ @term@   where     r  = canon r0     r' = canon r0'     canon Forced{}  = Relevant-    canon UnusedArg = Relevant     canon r         = r  -- | Infer type of a neutral term.@@ -252,7 +335,7 @@   case e of     Apply (Arg ai v) -> do       (a, b) <- shouldBePi t-      checkArgInfo ai $ domInfo a+      ai <- checkArgInfo action ai $ domInfo a       v' <- checkInternal' action v $ unDom a       inferSpine' action (b `absApp` v) (self `applyE` [e]) (self' `applyE` [Apply (Arg ai v')]) es     -- case: projection or projection-like@@ -321,5 +404,47 @@ -- | Universe subsumption and type equality (subtyping for sizes, resp.). subtype :: Type -> Type -> TCM () subtype t1 t2 = do-  ifIsSort t1 (\ s1 -> (s1 `leqSort`) =<< shouldBeSort t2) $-    leqType t1 t2+  ifIsSort t1 (\ s1 -> (s1 `leqSort`) =<< shouldBeSort t2) $ do+    -- Andreas, 2017-03-09, issue #2493+    -- Only check subtyping, do not solve any metas!+    -- TODO: NEED? disableDestructiveUpdate+    dontAssignMetas $ leqType t1 t2++-- | Compute the sort of a type.++inferSort :: Term -> TCM Sort+inferSort t = case ignoreSharing t of+    Var i es   -> do+      a <- typeOfBV i+      (_, s) <- eliminate (Var i []) a es+      shouldBeSort s+    Def f es   -> do  -- f is not projection(-like)!+      a <- defType <$> getConstInfo f+      (_, s) <- eliminate (Def f []) a es+      shouldBeSort s+    MetaV x es -> do+      a <- metaType x+      (_, s) <- eliminate (MetaV x []) a es+      shouldBeSort s+    Pi a b     -> return $ dLub (getSort a) (getSort <$> b)+    Sort s     -> return $ sSuc s+    Con{}      -> __IMPOSSIBLE__+    Lit{}      -> __IMPOSSIBLE__+    Lam{}      -> __IMPOSSIBLE__+    Level{}    -> __IMPOSSIBLE__+    DontCare{} -> __IMPOSSIBLE__+    Shared{}   -> __IMPOSSIBLE__++-- | @eliminate t self es@ eliminates value @self@ of type @t@ by spine @es@+--   and returns the remaining value and its type.+eliminate :: Term -> Type -> Elims -> TCM (Term, Type)+eliminate self t [] = return (self, t)+eliminate self t (e : es) = case e of+    Apply (Arg _ v) -> do+      (_, b) <- shouldBePi t+      eliminate (self `apply1` v) (b `absApp` v) es+    -- case: projection or projection-like+    Proj o f -> do+      (Dom ai _, b) <- shouldBePi =<< shouldBeProjectible t f+      u  <- applyDef o f $ Arg ai self+      eliminate u (b `absApp` self) es
src/full/Agda/TypeChecking/CheckInternal.hs-boot view
@@ -3,6 +3,12 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base (TCM) +data Action++defaultAction :: Action+eraseUnusedAction :: Action+ checkType :: Type -> TCM () checkInternal :: Term -> Type -> TCM ()+checkInternal' :: Action -> Term -> Type -> TCM Term infer :: Term -> TCM Type
src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -14,12 +14,15 @@ import qualified Data.Map as Map import Data.Map (Map) import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))-import Data.Typeable (Typeable) import Data.Foldable (Foldable, foldMap)-import Data.Traversable (Traversable)+import Data.Traversable (Traversable, traverse) +import Data.Data (Data)+import Data.Typeable (Typeable)+ import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Generic import Agda.Syntax.Literal import Agda.Syntax.Position @@ -30,7 +33,7 @@ import Agda.Utils.Impossible  data WithArity c = WithArity { arity :: Int, content :: c }-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable, Show)  -- | Branches in a case tree. @@ -46,25 +49,27 @@   , catchAllBranch :: Maybe c     -- ^ (Possibly additional) catch-all clause.   }-  deriving (Typeable, Functor, Foldable, Traversable)+  deriving (Typeable, Data, Functor, Foldable, Traversable, Show)  -- | Case tree with bodies. -data CompiledClauses-  = Case (Arg Int) (Case CompiledClauses)+data CompiledClauses' a+  = Case (Arg Int) (Case (CompiledClauses' a))     -- ^ @Case n bs@ stands for a match on the @n@-th argument     -- (counting from zero) with @bs@ as the case branches.     -- If the @n@-th argument is a projection, we have only 'conBranches'     -- with arity 0.-  | Done [Arg ArgName] Term+  | Done [Arg ArgName] a     -- ^ @Done xs b@ stands for the body @b@ where the @xs@ contains hiding     --   and name suggestions for the free variables. This is needed to build     --   lambdas on the right hand side for partial applications which can     --   still reduce.   | Fail     -- ^ Absurd case.-  deriving (Typeable)+  deriving (Typeable, Data, Functor, Traversable, Foldable, Show) +type CompiledClauses = CompiledClauses' Term+ litCase :: Literal -> c -> Case c litCase l x = Branches False Map.empty (Map.singleton l x) Nothing @@ -86,24 +91,24 @@     Done{}    -> mempty     Case _ br -> maybe (foldMap loop br) (const $ Any True) $ catchAllBranch br -instance Monoid c => Semigroup (WithArity c) where+instance Semigroup c => Semigroup (WithArity c) where   WithArity n1 c1 <> WithArity n2 c2-    | n1 == n2  = WithArity n1 $ mappend c1 c2+    | n1 == n2  = WithArity n1 (c1 <> c2)     | otherwise = __IMPOSSIBLE__   -- arity must match! -instance Monoid c => Monoid (WithArity c) where-  mempty = WithArity __IMPOSSIBLE__ mempty+instance (Semigroup c, Monoid c) => Monoid (WithArity c) where+  mempty  = WithArity __IMPOSSIBLE__ mempty   mappend = (<>) -instance Monoid m => Semigroup (Case m) where+instance Semigroup m => Semigroup (Case m) where   Branches cop  cs  ls  m <> Branches cop' cs' ls' m' =     Branches (cop || cop') -- for @projCase <> mempty@-             (Map.unionWith mappend cs cs')-             (Map.unionWith mappend ls ls')-             (mappend m m')+             (Map.unionWith (<>) cs cs')+             (Map.unionWith (<>) ls ls')+             (m <> m') -instance Monoid m => Monoid (Case m) where-  mempty = empty+instance (Semigroup m, Monoid m) => Monoid (Case m) where+  mempty  = empty   mappend = (<>)  instance Null (Case m) where@@ -112,12 +117,6 @@  -- * Pretty instances. -instance Pretty a => Show (Case a) where-  show = show . pretty--instance Show CompiledClauses where-  show = show . pretty- instance Pretty a => Pretty (WithArity a) where   pretty = pretty . content @@ -129,10 +128,10 @@       prC Nothing = []       prC (Just x) = [text "_ ->" <+> pretty x] -prettyMap :: (Show k, Pretty v) => Map k v -> [Doc]-prettyMap m = [ sep [ text (show x ++ " ->")+prettyMap :: (Pretty k, Pretty v) => Map k v -> [Doc]+prettyMap m = [ sep [ pretty k <+> text "->"                     , nest 2 $ pretty v ]-              | (x, v) <- Map.toList m ]+              | (k, v) <- Map.toList m ]  instance Pretty CompiledClauses where   pretty (Done hs t) = text ("done" ++ show hs) <+> pretty t@@ -142,7 +141,7 @@         , nest 2 $ pretty bs         ]   pretty (Case n bs) =-    sep [ text ("case " ++ show n ++ " of")+    sep [ text ("case " ++ prettyShow n ++ " of")         , nest 2 $ pretty bs         ] @@ -161,3 +160,17 @@   killRange (Case i br) = killRange2 Case i br   killRange (Done xs v) = killRange2 Done xs v   killRange Fail        = Fail++-- * TermLike instances++instance TermLike a => TermLike (WithArity a) where+  traverseTermM = traverse . traverseTermM+  foldTerm      = foldMap . foldTerm++instance TermLike a => TermLike (Case a) where+  traverseTermM = traverse . traverseTermM+  foldTerm      = foldMap . foldTerm++instance TermLike a => TermLike (CompiledClauses' a) where+  traverseTermM = traverse . traverseTermM+  foldTerm      = foldMap . foldTerm
src/full/Agda/TypeChecking/CompiledClause/Compile.hs view
@@ -4,6 +4,8 @@  import Prelude hiding (null) +import Control.Monad+ import Data.Maybe import Data.Monoid import qualified Data.Map as Map@@ -46,17 +48,18 @@ compileClauses mt cs = do   -- Construct clauses with pattern variables bound in left-to-right order.   -- Discard de Bruijn indices in patterns.-  cs <- normaliseProjP cs   let unBruijn cs = [ Cl (map (fmap (fmap dbPatVarName . namedThing)) $ namedClausePats c)                          (compiledClauseBody c) | c <- cs ]   shared <- sharedFun   case mt of-    Nothing -> return $ compile shared $ unBruijn cs+    Nothing -> compile shared . unBruijn <$> normaliseProjP cs     Just (q, t)  -> do       splitTree <- coverageCheck q t cs        -- The coverage checker might have added some clauses (#2288)!-      cs <- normaliseProjP =<< defClauses <$> getConstInfo q+      -- Throw away the unreachable clauses (#2723).+      let notUnreachable = (Just True /=) . clauseUnreachable+      cs <- normaliseProjP =<< filter notUnreachable . defClauses <$> getConstInfo q       let cls = unBruijn cs        reportSDoc "tc.cc" 30 $ sep $ do@@ -69,7 +72,7 @@       let cc = compileWithSplitTree shared splitTree cls       reportSDoc "tc.cc" 12 $ sep         [ text "compiled clauses (still containing record splits)"-        , nest 2 $ text (show cc)+        , nest 2 $ return $ P.pretty cc         ]       cc <- translateCompiledClauses cc       return cc@@ -126,6 +129,7 @@     c = headWithDefault __IMPOSSIBLE__ cs     name (VarP x) = x     name (DotP _) = underscore+    name AbsurdP{} = absurdPatternName     name ConP{}  = __IMPOSSIBLE__     name LitP{}  = __IMPOSSIBLE__     name ProjP{} = __IMPOSSIBLE__@@ -144,6 +148,7 @@ properSplit LitP{}  = Just False properSplit ProjP{} = Just False properSplit VarP{}  = Nothing+properSplit AbsurdP{} = Nothing -- for purposes of compilation properSplit DotP{}  = Nothing  -- | Is this a variable pattern?@@ -152,6 +157,7 @@ isVar :: Pattern' a -> Bool isVar VarP{}  = True isVar DotP{}  = True+isVar AbsurdP{} = True isVar ConP{}  = False isVar LitP{}  = False isVar ProjP{} = False@@ -171,6 +177,7 @@   LitP l      -> litCase l $ Cl (ps0 ++ ps1) b   VarP{}      -> fallback   DotP{}      -> fallback+  AbsurdP{}   -> fallback   where     (ps0, rest) = splitAt n ps     mp          = unArg <$> headMaybe rest@@ -264,9 +271,15 @@     expansions = nubBy ((==) `on` (classify . unArg . snd))                . mapMaybe (notVarNth . clPats)                $ cs-    notVarNth ps = caseMaybe (headMaybe ps2) Nothing $ \ p ->-      if isVar (unArg p) then Nothing else Just (ps1, p)-      where (ps1, ps2) = splitAt n ps+    notVarNth+      :: [Arg Pattern]+      -> Maybe ([Arg Pattern]  -- First @n@ patterns.+               , Arg Pattern)  -- @n+1@st pattern, not a variable+    notVarNth ps = do+      let (ps1, ps2) = splitAt n ps+      p <- headMaybe ps2+      guard $ not $ isVar $ unArg p+      return (ps1, p)      expand cl (qs, q) =       case unArg q of@@ -293,6 +306,7 @@         count VarP{}        = 1         count (ConP _ _ ps) = countVars $ map (fmap namedThing) ps         count DotP{}        = 1   -- dot patterns are treated as variables in the clauses+        count (AbsurdP p)   = count p         count _             = 0  -- | Make sure (by eta-expansion) that clause has arity at least @n@
src/full/Agda/TypeChecking/CompiledClause/Match.hs view
@@ -1,19 +1,18 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  module Agda.TypeChecking.CompiledClause.Match where  import Control.Applicative import Control.Monad.Reader (asks) -import Data.List+import qualified Data.List as List import qualified Data.Map as Map  import Agda.Syntax.Internal import Agda.Syntax.Common  import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Monad hiding (reportSDoc, reportSLn)+import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad as RedM@@ -97,7 +96,7 @@        -- splitting on the @n@th elimination       Case (Arg _ n) bs -> do-        case genericSplitAt n es of+        case splitAt n es of           -- if the @n@th elimination is not supplied, no match           (_, []) -> no (NotBlocked Underapplied) es           -- if the @n@th elimination is @e0@@@ -172,6 +171,10 @@ -- If we reach the empty stack, then pattern matching was incomplete match' [] = {- new line here since __IMPOSSIBLE__ does not like the ' in match' -}   caseMaybeM (asks envAppDef) __IMPOSSIBLE__ $ \ f -> do-    traceSLn "impossible" 10-      ("Incomplete pattern matching when applying " ++ show f)-      __IMPOSSIBLE__+    pds <- getPartialDefs+    if f `elem` pds+    then return (NoReduction $ NotBlocked MissingClauses [])+    else do+      traceSLn "impossible" 10+        ("Incomplete pattern matching when applying " ++ show f)+        __IMPOSSIBLE__
src/full/Agda/TypeChecking/Constraints.hs view
@@ -12,7 +12,8 @@ import Control.Monad.State import Control.Monad.Trans.Maybe -import Data.List as List hiding (null)+import qualified Data.List as List+import qualified Data.Set as Set  import Agda.Syntax.Internal @@ -24,6 +25,8 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.LevelConstraints import Agda.TypeChecking.SizedTypes+import Agda.TypeChecking.MetaVars.Mention+import Agda.TypeChecking.Warnings  import {-# SOURCE #-} Agda.TypeChecking.Rules.Term import {-# SOURCE #-} Agda.TypeChecking.Conversion@@ -61,7 +64,7 @@     pids <- asks envActiveProblems     reportSDoc "tc.constr.add" 20 $ hsep       [ text "adding constraint"-      , text (show pids)+      , text (show $ Set.toList pids)       , prettyTCM c ]     -- Need to reduce to reveal possibly blocking metas     c <- reduce =<< instantiateFull c@@ -90,7 +93,6 @@     -- Try to simplify a level constraint     simpl :: Constraint -> TCM Constraint     simpl c = if not $ isLvl c then return c else do-      n <- genericLength <$> getContext       cs <- map theConstraint <$> getAllConstraints       lvls <- instantiateFull $ List.filter (isLvl . clValue) cs       when (not $ null lvls) $ do@@ -149,7 +151,7 @@ -- | Wake up the constraints depending on the given meta. wakeupConstraints :: MetaId -> TCM () wakeupConstraints x = do-  wakeConstraints (return . const True) -- (mentionsMeta x) -- TODO: needs fixing to cope with shared updates+  wakeConstraints (return . mentionsMeta x)   solveAwakeConstraints  -- | Wake up all constraints.@@ -163,12 +165,12 @@  solveAwakeConstraints' :: Bool -> TCM () solveAwakeConstraints' force = do-    verboseS "profile.constraints" 10 $ liftTCM $ tickMax "max-open-constraints" . genericLength =<< getAllConstraints+    verboseS "profile.constraints" 10 $ liftTCM $ tickMax "max-open-constraints" . List.genericLength =<< getAllConstraints     whenM ((force ||) . not <$> isSolvingConstraints) $ nowSolvingConstraints $ do      -- solveSizeConstraints -- Andreas, 2012-09-27 attacks size constrs too early      -- Ulf, 2016-12-06: Don't inherit problems here! Stored constraints      -- already contain all their dependencies.-     locally eActiveProblems (const []) solve+     locally eActiveProblems (const Set.empty) solve   where     solve = do       reportSDoc "tc.constr.solve" 10 $ hsep [ text "Solving awake constraints."@@ -183,7 +185,7 @@     verboseS "profile.constraints" 10 $ liftTCM $ tick "attempted-constraints"     verboseBracket "tc.constr.solve" 20 "solving constraint" $ do       pids <- asks envActiveProblems-      reportSDoc "tc.constr.solve" 20 $ text (show pids) <+> prettyTCM c+      reportSDoc "tc.constr.solve" 20 $ text (show $ Set.toList pids) <+> prettyTCM c       solveConstraint_ c  solveConstraint_ :: Constraint -> TCM ()@@ -194,8 +196,13 @@ solveConstraint_ (SortCmp cmp s1 s2)        = compareSort cmp s1 s2 solveConstraint_ (LevelCmp cmp a b)         = compareLevel cmp a b solveConstraint_ c0@(Guarded c pid)         = do-  ifM (isProblemSolved pid) (solveConstraint_ c)-                            (addConstraint c0)+  ifM (isProblemSolved pid)+    {-then-} (do+      reportSLn "tc.constr.solve" 50 $ "Guarding problem " ++ show pid ++ " is solved, moving on..."+      solveConstraint_ c)+    {-else-} $ do+      reportSLn "tc.constr.solve" 50 $ "Guarding problem " ++ show pid ++ " is still unsolved."+      addConstraint c0 solveConstraint_ (IsEmpty r t)              = isEmptyType r t solveConstraint_ (CheckSizeLtSat t)         = checkSizeLtSat t solveConstraint_ (UnBlock m)                =@@ -217,6 +224,10 @@       --       -- already solved metavariables: should only happen for size       -- metas (not sure why it does, Andreas?)+      -- Andreas, 2017-07-11:+      -- I think this is because the size solver instantiates+      -- some metas with infinity but does not clean up the UnBlock constraints.+      -- See also issue #2637.       InstV{} -> return ()       -- Open (whatever that means)       Open -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Conversion.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP               #-}+{-# LANGUAGE CPP                      #-}+{-# LANGUAGE NondecreasingIndentation #-}  module Agda.TypeChecking.Conversion where @@ -7,7 +8,6 @@ import Control.Monad.Reader import Control.Monad.State -import Data.List hiding (sort) import qualified Data.List as List import Data.Traversable hiding (mapM, sequence) @@ -18,7 +18,7 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.CompiledClause (CompiledClauses(Fail))+import Agda.TypeChecking.CompiledClause (CompiledClauses'(Fail)) import Agda.TypeChecking.MetaVars import Agda.TypeChecking.MetaVars.Occurs (killArgs,PruneResult(..)) import Agda.TypeChecking.Reduce@@ -29,7 +29,7 @@ import {-# SOURCE #-} Agda.TypeChecking.CheckInternal (infer) import Agda.TypeChecking.Errors import Agda.TypeChecking.Free-import Agda.TypeChecking.Datatypes (getConType)+import Agda.TypeChecking.Datatypes (getConType, getFullyAppliedConType) import Agda.TypeChecking.Records import Agda.TypeChecking.Pretty import Agda.TypeChecking.Injectivity@@ -169,10 +169,8 @@         ]       ifM (isInstantiatedMeta x) patternViolation {-else-} $ do         assignE dir x es v $ compareTermDir dir a-      _ <- instantiate u-      -- () <- seq u' $ return ()-      reportSLn "tc.conv.term.shortcut" 50 $-        "shortcut successful\n  result: " ++ show u+      reportSDoc "tc.conv.term.shortcut" 50 $+        text "shortcut successful" $$ nest 2 (text "result:" <+> (pretty =<< instantiate (MetaV x es)))     -- Should be ok with catchError_ but catchError is much safer since we don't     -- rethrow errors.     orelse m h = catchError m (\_ -> h)@@ -237,8 +235,8 @@     s        <- reduce $ getSort a'     mlvl     <- tryMaybe primLevel     reportSDoc "tc.conv.level" 60 $ nest 2 $ sep-      [ text $ "a'   = " ++ show a'-      , text $ "mlvl = " ++ show mlvl+      [ text "a'   =" <+> pretty a'+      , text "mlvl =" <+> pretty mlvl       , text $ "(Just (ignoreSharing $ unEl a') == mlvl) = " ++ show (Just (ignoreSharing $ unEl a') == mlvl)       ]     case s of@@ -307,7 +305,7 @@     equalFun (Shared p) m n = equalFun (derefPtr p) m n     equalFun (Pi dom@(Dom info _) b) m n = do         name <- freshName_ $ suggest (absName b) "x"-        addContext (name, dom) $ compareTerm cmp (absBody b) m' n'+        addContext' (name, dom) $ compareTerm cmp (absBody b) m' n'       where         (m',n') = raise 1 (m,n) `apply` [Arg info $ var 0]     equalFun _ _ _ = __IMPOSSIBLE__@@ -376,6 +374,31 @@ compareAtomDir :: CompareDirection -> Type -> Term -> Term -> TCM () compareAtomDir dir a = dirToCmp (`compareAtom` a) dir +-- | Compute the head type of an elimination. For projection-like functions+--   this requires inferring the type of the principal argument.+computeElimHeadType :: QName -> Elims -> Elims -> TCM Type+computeElimHeadType f es es' = do+  def <- getConstInfo f+  -- To compute the type @a@ of a projection-like @f@,+  -- we have to infer the type of its first argument.+  if projectionArgs (theDef def) <= 0 then return $ defType def else do+    -- Find an first argument to @f@.+    let arg = case (es, es') of+              (Apply arg : _, _) -> arg+              (_, Apply arg : _) -> arg+              _ -> __IMPOSSIBLE__+    -- Infer its type.+    reportSDoc "tc.conv.infer" 30 $+      text "inferring type of internal arg: " <+> prettyTCM arg+    targ <- infer $ unArg arg+    reportSDoc "tc.conv.infer" 30 $+      text "inferred type: " <+> prettyTCM targ+    -- getDefType wants the argument type reduced.+    -- Andreas, 2016-02-09, Issue 1825: The type of arg might be+    -- a meta-variable, e.g. in interactive development.+    -- In this case, we postpone.+    fromMaybeM patternViolation $ getDefType f =<< reduce targ+ -- | Syntax directed equality on atomic values -- compareAtom :: Comparison -> Type -> Term -> Term -> TCM ()@@ -492,26 +515,7 @@                 compareElims [] a (var i) es es'             (Def f [], Def f' []) | f == f' -> return ()             (Def f es, Def f' es') | f == f' -> do-                def <- getConstInfo f-                -- To compute the type @a@ of a projection-like @f@,-                -- we have to infer the type of its first argument.-                a <- if projectionArgs (theDef def) <= 0 then return $ defType def else do-                  -- Find an first argument to @f@.-                  let arg = case (es, es') of-                            (Apply arg : _, _) -> arg-                            (_, Apply arg : _) -> arg-                            _ -> __IMPOSSIBLE__-                  -- Infer its type.-                  reportSDoc "tc.conv.infer" 30 $-                    text "inferring type of internal arg: " <+> prettyTCM arg-                  targ <- infer $ unArg arg-                  reportSDoc "tc.conv.infer" 30 $-                    text "inferred type: " <+> prettyTCM targ-                  -- getDefType wants the argument type reduced.-                  -- Andreas, 2016-02-09, Issue 1825: The type of arg might be-                  -- a meta-variable, e.g. in interactive development.-                  -- In this case, we postpone.-                  fromMaybeM patternViolation $ getDefType f =<< reduce targ+                a <- computeElimHeadType f es es'                 -- The polarity vector of projection-like functions                 -- does not include the parameters.                 pol <- getPolarity' cmp f@@ -519,6 +523,7 @@             (Def f es, Def f' es') ->               unlessM (bothAbsurd f f') $ do                 trySizeUniv cmp t m n f es f' es'+            -- Due to eta-expansion, these constructors are fully applied.             (Con x ci xArgs, Con y _ yArgs)                 | x == y -> do                     -- Get the type of the constructor instantiated to the datatype parameters.@@ -533,7 +538,7 @@           let impossible = do                 reportSDoc "impossible" 10 $                   text "expected data/record type, found " <+> prettyTCM t-                reportSLn "impossible" 70 $ "  raw = " ++ show t+                reportSDoc "impossible" 70 $ nest 2 $ text "raw =" <+> pretty t                 -- __IMPOSSIBLE__                 -- Andreas, 2013-10-20:  in case termination checking fails                 -- we might get some unreduced types here.@@ -541,7 +546,7 @@                 -- to solve left-over constraints.                 -- Thus, instead of crashing, just give up gracefully.                 patternViolation-          maybe impossible return =<< getConType c t+          maybe impossible (return . snd) =<< getFullyAppliedConType c t         equalFun t1 t2 = case (ignoreSharing t1, ignoreSharing t2) of           (Pi dom1 b1, Pi dom2 b2) -> do             verboseBracket "tc.conv.fun" 15 "compare function types" $ do@@ -579,7 +584,7 @@   -> TCM ()     -- ^ Continuation if comparison is successful.   -> TCM () compareDom cmp dom1@(Dom i1 a1) dom2@(Dom i2 a2) b1 b2 errH errR cont-  | getHiding dom1 /= getHiding dom2 = errH+  | not (sameHiding dom1 dom2) = errH   -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations!   | not $ compareRelevance cmp (ignoreForced $ getRelevance dom1)                                (ignoreForced $ getRelevance dom2) = errR@@ -594,7 +599,7 @@         -- We only need to require a1 == a2 if b2 is dependent         -- If it's non-dependent it doesn't matter what we add to the context.       name <- freshName_ $ suggest b1 b2-      addContext (name, dom) $ cont+      addContext' (name, dom) $ cont       stealConstraints pid         -- Andreas, 2013-05-15 Now, comparison of codomains is not         -- blocked any more by getting stuck on domains.@@ -605,6 +610,79 @@ compareRelevance CmpEq  = (==) compareRelevance CmpLeq = (<=) +-- | When comparing argument spines (in compareElims) where the first arguments+--   don't match, we keep going, substituting the anti-unification of the two+--   terms in the telescope. More precisely:+--+--  @@+--    (u = v : A)[pid]   w = antiUnify pid A u v   us = vs : Δ[w/x]+--    -------------------------------------------------------------+--                    u us = v vs : (x : A) Δ+--  @@+--+--   The simplest case of anti-unification is to return a fresh metavariable+--   (created by blockTermOnProblem), but if there's shared structure between+--   the two terms we can expose that.+--+--   This is really a crutch that lets us get away with things that otherwise+--   would require heterogenous conversion checking. See for instance issue+--   #2384.+antiUnify :: ProblemId -> Type -> Term -> Term -> TCM Term+antiUnify pid a u v = do+  ((u, v), eq) <- runReduceM (SynEq.checkSyntacticEquality u v)+  if eq then return u else do+  (u, v) <- reduce (u, v)+  case (ignoreSharing u, ignoreSharing v) of+    (Pi ua ub, Pi va vb) -> do+      wa0 <- antiUnifyType pid (unDom ua) (unDom va)+      let wa = wa0 <$ ua+      wb <- addContext wa $ antiUnifyType pid (unAbs ub) (unAbs vb)+      return $ Pi wa (wb <$ ub)+    (Lam i u, Lam _ v) ->+      case ignoreSharing $ unEl a of+        Pi a b -> Lam i . (<$ u) <$> addContext a (antiUnify pid (unAbs b) (unAbs u) (unAbs v))+        _      -> fallback+    (Var i us, Var j vs) | i == j -> maybeGiveUp $ do+      a <- typeOfBV i+      antiUnifyElims pid a (var i) us vs+    -- Andreas, 2017-07-27:+    -- It seems that nothing guarantees here that the constructors are fully+    -- applied!?  Thus, @a@ could be a function type and we need the robust+    -- @getConType@ here.+    -- (Note that @patternViolation@ swallows exceptions coming from @getConType@+    -- thus, we would not see clearly if we used @getFullyAppliedConType@ instead.)+    (Con x ci us, Con y _ vs) | x == y -> maybeGiveUp $ do+      a <- maybe patternViolation (return . snd) =<< getConType x a+      antiUnifyElims pid a (Con x ci []) (map Apply us) (map Apply vs)+    (Def f us, Def g vs) | f == g, length us == length vs -> maybeGiveUp $ do+      a <- computeElimHeadType f us vs+      antiUnifyElims pid a (Def f []) us vs+    _ -> fallback+  where+    fallback = blockTermOnProblem a u pid+    maybeGiveUp m = m `catchError_` \ err ->+      case err of+        PatternErr{} -> fallback+        _            -> throwError err++antiUnifyType :: ProblemId -> Type -> Type -> TCM Type+antiUnifyType pid (El s a) (El _ b) = El s <$> antiUnify pid (sort s) a b++antiUnifyElims :: ProblemId -> Type -> Term -> Elims -> Elims -> TCM Term+antiUnifyElims pid a self [] [] = return self+antiUnifyElims pid a self (Proj o f : es1) (Proj _ g : es2) | f == g = do+  res <- projectTyped self a o f+  case res of+    Just (_, self, a) -> antiUnifyElims pid a self es1 es2+    Nothing -> patternViolation -- can fail for projection like+antiUnifyElims pid a self (Apply u : es1) (Apply v : es2) = do+  case ignoreSharing $ unEl a of+    Pi a b -> do+      w <- antiUnify pid (unDom a) (unArg u) (unArg v)+      antiUnifyElims pid (b `lazyAbsApp` w) (apply self [w <$ u]) es1 es2+    _ -> patternViolation+antiUnifyElims _ _ _ _ _ = patternViolation -- trigger maybeGiveUp in antiUnify+ -- | @compareElims pols a v els1 els2@ performs type-directed equality on eliminator spines. --   @t@ is the type of the head @v@. compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()@@ -640,9 +718,9 @@         , text "arg2 =" <+> prettyTCM arg2         ]       reportSDoc "tc.conv.elim" 50 $ nest 2 $ vcat-        [ text "v    =" <+> text (show v)-        , text "arg1 =" <+> text (show arg1)-        , text "arg2 =" <+> text (show arg2)+        [ text "v    =" <+> pretty v+        , text "arg1 =" <+> pretty arg1+        , text "arg2 =" <+> pretty arg2         , text ""         ]       let (pol, pols) = nextPolarity pols0@@ -667,13 +745,18 @@             pid <- newProblem_ $ applyRelevanceToContext r $                 case r of                   Forced{}   -> return ()-                  r | irrelevantOrUnused r ->+                  r | irrelevant r ->                                 compareIrrelevant b (unArg arg1) (unArg arg2)                   _          -> compareWithPol pol (flip compareTerm b)                                   (unArg arg1) (unArg arg2)             -- if comparison got stuck and function type is dependent, block arg-            arg <- if dependent-                   then (arg1 $>) <$> blockTermOnProblem b (unArg arg1) pid+            solved <- isProblemSolved pid+            arg <- if dependent && not solved+                   then do+                    arg <- (arg1 $>) <$> antiUnify pid b (unArg arg1) (unArg arg2)+                    reportSDoc "tc.conv.elims" 30 $ hang (text "Anti-unification:") 2 (prettyTCM arg)+                    reportSDoc "tc.conv.elims" 70 $ nest 2 $ text "raw:" <+> pretty arg+                    return arg                    else return arg1             -- continue, possibly with blocked instantiation             compareElims pols (codom `lazyAbsApp` unArg arg) (apply v [arg]) els1 els2@@ -693,7 +776,7 @@             let checkArg = applyRelevanceToContext r $                                case r of                   Forced     -> return ()-                  r | irrelevantOrUnused r ->+                  r | irrelevant r ->                                 compareIrrelevant b (unArg arg1) (unArg arg2)                   _          -> compareWithPol pol (flip compareTerm b)                                   (unArg arg1) (unArg arg2)@@ -708,7 +791,7 @@           a -> do             reportSDoc "impossible" 10 $               text "unexpected type when comparing apply eliminations " <+> prettyTCM a-            reportSLn "impossible" 50 $ "raw type: " ++ show a+            reportSDoc "impossible" 50 $ text "raw type:" <+> pretty a             patternViolation             -- Andreas, 2013-10-22             -- in case of disabled reductions (due to failing termination check)@@ -752,8 +835,8 @@     , nest 2 $ text "w =" <+> prettyTCM w     ]   reportSDoc "tc.conv.irr" 50 $ vcat-    [ nest 2 $ text $ "v = " ++ show v-    , nest 2 $ text $ "w = " ++ show w+    [ nest 2 $ text "v =" <+> pretty v+    , nest 2 $ text "w =" <+> pretty w     ]   try v w $ try w v $ return ()   where@@ -766,9 +849,9 @@                    _       -> False       reportSDoc "tc.conv.irr" 20 $ vcat         [ nest 2 $ text $ "rel  = " ++ show rel-        , nest 2 $ text $ "inst = " ++ show inst+        , nest 2 $ text "inst =" <+> pretty inst         ]-      if not (irrelevantOrUnused rel) || inst+      if not (irrelevant rel) || inst         then fallback         -- Andreas, 2016-08-08, issue #2131:         -- Mining for solutions for irrelevant metas is not definite.@@ -850,6 +933,8 @@ -- --   In principle, this function can host coercive subtyping, but --   currently it only tries to fix problems with hidden function types.+--+--   Precondition: @a@ and @b@ are reduced. coerce :: Term -> Type -> Type -> TCM Term coerce v t1 t2 = blockTerm t2 $ do   verboseS "tc.conv.coerce" 10 $ do@@ -861,10 +946,16 @@         , text "from type t1 =" <+> prettyTCM a1         , text "to type   t2 =" <+> prettyTCM a2         ]+    reportSDoc "tc.conv.coerce" 70 $+      text "coerce" <+> vcat+        [ text "term      v  =" <+> pretty v+        , text "from type t1 =" <+> pretty t1+        , text "to type   t2 =" <+> pretty t2+        ]   -- v <$ do workOnTypes $ leqType t1 t2   -- take off hidden/instance domains from t1 and t2-  TelV tel1 b1 <- telViewUpTo' (-1) ((NotHidden /=) . getHiding) t1-  TelV tel2 b2 <- telViewUpTo' (-1) ((NotHidden /=) . getHiding) t2+  TelV tel1 b1 <- telViewUpTo' (-1) notVisible t1+  TelV tel2 b2 <- telViewUpTo' (-1) notVisible t2   let n = size tel1 - size tel2   -- the crude solution would be   --   v' = λ {tel2} → v {tel1}@@ -873,7 +964,7 @@   -- insert n many hidden args   if n <= 0 then fallback else do     ifBlockedType b2 (\ _ _ -> fallback) $ \ _ -> do-      (args, t1') <- implicitArgs n (NotHidden /=) t1+      (args, t1') <- implicitArgs n notVisible t1       coerceSize leqType (v `apply` args) t1' t2   where     fallback = coerceSize leqType v t1 t2@@ -886,18 +977,32 @@ --   TODO. -- --   For now, we do a cheap heuristics.+--+--   Precondition: types are reduced. coerceSize :: (Type -> Type -> TCM ()) -> Term -> Type -> Type -> TCM Term coerceSize leqType v t1 t2 = workOnTypes $ do+    reportSDoc "tc.conv.coerce" 70 $+      text "coerceSize" <+> vcat+        [ text "term      v  =" <+> pretty v+        , text "from type t1 =" <+> pretty t1+        , text "to type   t2 =" <+> pretty t2+        ]     let fallback = v <$ leqType t1 t2         done = caseMaybeM (isSizeType t1) fallback $ \ b1 -> return v     -- Andreas, 2015-07-22, Issue 1615:     -- If t1 is a meta and t2 a type like Size< v2, we need to make sure we do not miss     -- the constraint v < v2!     caseMaybeM (isSizeType t2) fallback $ \ b2 -> do+      -- Andreas, 2017-01-20, issue #2329:+      -- If v is not a size suitable for the solver, like a neutral term,+      -- we can only rely on the type.+      mv <- sizeMaxView v+      if any (\case{ DOtherSize{} -> True; _ -> False }) mv then fallback else do       -- Andreas, 2015-02-11 do not instantiate metas here (triggers issue 1203).       ifM (tryConversion $ dontAssignMetas $ leqType t1 t2) (return v) $ {- else -} do         -- A (most probably weaker) alternative is to just check syn.eq.         -- ifM (snd <$> checkSyntacticEquality t1 t2) (return v) $ {- else -} do+        reportSDoc "tc.conv.coerce" 20 $ text "coercing to a size type"         case b2 of           -- @t2 = Size@.  We are done!           BoundedNo -> done@@ -985,8 +1090,8 @@     leqView a@(Max as) b@(Max bs) = catchConstraint (LevelCmp CmpLeq a b) $ do       reportSDoc "tc.conv.nat" 30 $         text "compareLevelView" <+>-          sep [ text (show a) <+> text "=<"-              , text (show b) ]+          sep [ pretty a <+> text "=<"+              , pretty b ]       wrap $ case (as, bs) of          -- same term@@ -1015,7 +1120,7 @@         -- remove subsumed         -- Andreas, 2014-04-07: This is ok if we do not go back to equalLevel         (as, bs)-          | not $ null subsumed -> leqView (Max $ as \\ subsumed) (Max bs)+          | not $ null subsumed -> leqView (Max $ as List.\\ subsumed) (Max bs)           where             subsumed = [ a | a@(Plus m l) <- as, n <- findN l, m <= n ]             -- @findN a@ finds the unique(?) term @Plus n a@ in @bs@, if any.@@ -1100,7 +1205,7 @@ -- | Precondition: levels are 'normalise'd. equalLevel' :: Level -> Level -> TCM () equalLevel' a b = do-  reportSLn "tc.conv.level" 50 $ "equalLevel (" ++ show a ++ ") (" ++ show b ++ ")"+  reportSDoc "tc.conv.level" 50 $ sep [ text "equalLevel", nest 2 $ parens $ pretty a, nest 2 $ parens $ pretty b ]   liftTCM $ catchConstraint (LevelCmp CmpEq a b) $     check a b   where@@ -1132,8 +1237,8 @@             ]       reportSDoc "tc.conv.level" 50 $         sep [ text "equalLevel"-            , vcat [ nest 2 $ sep [ text (show (Max as)) <+> text "=="-                                  , text (show (Max bs))+            , vcat [ nest 2 $ sep [ pretty (Max as) <+> text "=="+                                  , pretty (Max bs)                                   ]                    ]             ]@@ -1198,7 +1303,7 @@         notok    = unlessM typeInType notOk         notOk    = typeError $ UnequalSorts (Type a) (Type b)         postpone = do-          reportSLn "tc.conv.level" 30 $ "postponing: " ++ show a ++ " == " ++ show b+          reportSDoc "tc.conv.level" 30 $ hang (text "postponing:") 2 $ hang (pretty a <+> text "==") 0 (pretty b)           patternViolation          closed0 [] = [ClosedLevel 0]@@ -1207,7 +1312,7 @@         -- perform assignment (Plus n (MetaLevel x as)) := bs         meta n x as bs = do           reportSLn "tc.meta.level" 30 $ "Assigning meta level"-          reportSLn "tc.meta.level" 50 $ "meta " ++ show as ++ " " ++ show bs+          reportSDoc "tc.meta.level" 50 $ text "meta" <+> sep [prettyList $ map pretty as, prettyList $ map pretty bs]           bs' <- mapM (subtr n) bs           assignE DirEq x as (levelTm (Max bs')) (===) -- fallback: check equality as atoms @@ -1291,8 +1396,8 @@           [ text "equalSort"           , vcat [ nest 2 $ fsep [ prettyTCM s1 <+> text "=="                                  , prettyTCM s2 ]-                 , nest 2 $ fsep [ text (show s1) <+> text "=="-                                 , text (show s2) ]+                 , nest 2 $ fsep [ pretty s1 <+> text "=="+                                 , pretty s2 ]                  ]           ] 
src/full/Agda/TypeChecking/Coverage.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP              #-}+{-# LANGUAGE CPP                      #-} {-# LANGUAGE NondecreasingIndentation #-}  {-| Coverage checking, case splitting, and splitting for refine tactics.@@ -25,7 +25,8 @@ import Control.Applicative hiding (empty) #endif -import Data.List hiding (null)+import Data.Either (lefts)+import qualified Data.List as List import Data.Monoid (Any(..)) import Data.Map (Map) import qualified Data.Map as Map@@ -40,7 +41,6 @@ import Agda.Syntax.Internal.Pattern  import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Exception  import Agda.TypeChecking.Rules.LHS.Problem (allFlexVars) import Agda.TypeChecking.Rules.LHS.Unify@@ -55,17 +55,25 @@ import Agda.TypeChecking.Records import Agda.TypeChecking.Telescope import Agda.TypeChecking.MetaVars+import Agda.TypeChecking.Warnings  import Agda.Interaction.Options  import Agda.Utils.Either+import Agda.Utils.Except+  ( ExceptT+  , MonadError(catchError, throwError)+  , runExceptT+  ) import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Permutation+import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size+import Agda.Utils.Suffix (nameVariant) import Agda.Utils.Tuple import Agda.Utils.Lens @@ -124,9 +132,16 @@   , scTarget = clauseType cl   } -type CoverM = ExceptionT SplitError TCM+type CoverM = ExceptT SplitError TCM  -- | Top-level function for checking pattern coverage.+--+--   Effects:+--+--   - Marks unreachable clauses as such in the signature.+--+--   - Adds missing instances clauses to the signature.+-- coverageCheck :: QName -> Type -> [Clause] -> TCM SplitTree coverageCheck f t cs = do   TelV gamma a <- telView t@@ -145,54 +160,93 @@     let prCl cl = addContext (clauseTel cl) $                   prettyTCMPatternList $ namedClausePats cl     vcat-      [ text $ "Coverage checking " ++ show f ++ " with patterns:"+      [ text $ "Coverage checking " ++ prettyShow f ++ " with patterns:"       , nest 2 $ vcat $ map prCl cs       ]    -- used = actually used clauses for cover   -- pss  = uncovered cases-  (splitTree, used, pss) <- cover f cs sc+  CoverResult splitTree used pss noex <- cover f cs sc+  reportSDoc "tc.cover.top" 10 $ vcat+    [ text "cover computed!"+    , text $ "used clauses: " ++ show used+    , text $ "non-exact clauses: " ++ show noex+    ]   reportSDoc "tc.cover.splittree" 10 $ vcat     [ text "generated split tree for" <+> prettyTCM f-    , text $ show splitTree+    , text $ prettyShow splitTree     ]-  -- report an error if there are uncovered cases+  -- report a warning if there are uncovered cases,+  -- generate a catch-all clause with a metavariable as its body to avoid+  -- internal errors in the reduction machinery.   unless (null pss) $       setCurrentRange cs $-        typeError $ CoverageFailure f pss+        warning $ CoverageIssue f pss++  -- Andreas, 2017-08-28, issue #2723:+  -- Mark clauses as reachable or unreachable in the signature.+  let (is0, cs1) = unzip $ for (zip [0..] cs) $ \ (i, cl) ->+        let unreachable = i `Set.notMember` used in+        (boolToMaybe unreachable i, cl { clauseUnreachable = Just unreachable  })   -- is = indices of unreachable clauses-  let is = Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used-  -- report an error if there are unreachable clauses+  let is = catMaybes is0+  reportSDoc "tc.cover.top" 10 $ vcat+    [ text $ "unreachable clauses: " ++ if null is then "(none)" else show is+    ]+  -- Replace the first clauses by @cs1@.  There might be more+  -- added by @inferMissingClause@.+  modifyFunClauses f $ \ cs0 -> cs1 ++ drop (length cs1) cs0++  -- Warn if there are unreachable clauses and mark them as unreachable.   unless (null is) $ do-      let unreached = map (cs !!) is-      setCurrentRange unreached $-        typeError $ UnreachableClauses f $ map namedClausePats unreached+    -- Warn about unreachable clauses.+    let unreached = filter ((Just True ==) . clauseUnreachable) cs1+    setCurrentRange (map clauseFullRange unreached) $+      warning $ UnreachableClauses f $ map namedClausePats unreached++  -- report a warning if there are clauses that are not preserved as+  -- definitional equalities and --exact-split is enabled+  unless (null noex) $ do+      let noexclauses = map (cs1 !!) $ Set.toList noex+      setCurrentRange (map clauseLHSRange noexclauses) $+        warning $ CoverageNoExactSplit f $ noexclauses   return splitTree  -- | Top-level function for eliminating redundant clauses in the interactive --   case splitter isCovered :: QName -> [Clause] -> SplitClause -> TCM Bool isCovered f cs sc = do-  (_, _, missing) <- cover f cs sc+  CoverResult { coverMissingClauses = missing } <- cover f cs sc   return $ null missing +data CoverResult = CoverResult+  { coverSplitTree       :: SplitTree+  , coverUsedClauses     :: Set Nat+  , coverMissingClauses  :: [(Telescope, [NamedArg DeBruijnPattern])]+  , coverNoExactClauses  :: Set Nat+  }+ -- | @cover f cs (SClause _ _ ps _) = return (splitTree, used, pss)@. --   checks that the list of clauses @cs@ covers the given split clause. --   Returns the @splitTree@, the @used@ clauses, and missing cases @pss@.+--+--   Effect: adds missing instance clauses for @f@ to signature.+-- cover :: QName -> [Clause] -> SplitClause ->-         TCM (SplitTree, Set Nat, [[NamedArg DeBruijnPattern]])+         TCM CoverResult cover f cs sc@(SClause tel ps _ _ target) = do-  reportSDoc "tc.cover.cover" 10 $ vcat+  reportSDoc "tc.cover.cover" 10 $ inTopContext $ vcat     [ text "checking coverage of pattern:"     , nest 2 $ text "tel  =" <+> prettyTCM tel     , nest 2 $ text "ps   =" <+> do addContext tel $ prettyTCMPatternList ps     ]-  exactSplitEnabled <- optExactSplit <$> pragmaOptions   cs' <- normaliseProjP cs   case match cs' ps of-    Yes (i,(mps,ls0))-     | not exactSplitEnabled || (clauseCatchall (cs !! i) || all isTrivialPattern mps)-     -> do+    Yes (i,(mps,ls0)) -> do+      exact <- allM mps isTrivialPattern+      let noExactClause = if exact || clauseCatchall (cs !! i)+                          then Set.empty+                          else Set.singleton i       reportSLn "tc.cover.cover" 10 $ "pattern covered by clause " ++ show i       -- Check if any earlier clauses could match with appropriate literals       let lsis = mapMaybe (\(j,c) -> (,j) <$> matchLits c ps) $ zip [0..i-1] cs@@ -201,57 +255,45 @@       -- If we have several literal matches with the same literals       -- only take the first matching clause of these.       let is = Map.elems $ Map.fromListWith min $ (ls0,i) : lsis-      return (SplittingDone (size tel), Set.fromList is, [])--     | otherwise -> do-         reportSDoc "tc.cover.cover" 10 $ vcat-           [ text $ "pattern covered by clause " ++ show i ++ " but case splitting was not exact. remaining mpats: "-           , nest 2 $ vcat $ map (text . show) mps-           ]-         setCurrentRange (cs !! i) $-           typeError $ CoverageNoExactSplit f (cs !! i)+      return $ CoverResult (SplittingDone (size tel)) (Set.fromList is) [] noExactClause      No        ->  do       reportSLn "tc.cover" 20 $ "pattern is not covered"       case fmap getHiding target of-        Just h | h == Instance -> do+        Just h | isInstance h -> do           -- Ulf, 2016-10-31: For now we only infer instance clauses. It would           -- make sense to do it also for hidden, but since the value of a           -- hidden clause is expected to be forced by later clauses, it's too           -- late to add it now. If it was inferrable we would have gotten a           -- type error before getting to this point.           inferMissingClause f sc-          return (SplittingDone (size tel), Set.empty, [])-        _ -> return (SplittingDone (size tel), Set.empty, [ps])+          return $ CoverResult (SplittingDone (size tel)) Set.empty [] Set.empty+        _ -> return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps)] Set.empty      -- We need to split!     -- If all clauses have an unsplit copattern, we try that first.     Block res bs -> tryIf (getAny res) splitRes $ do-      let done = return (SplittingDone (size tel), Set.empty, [ps])+      let done = return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps)] Set.empty       if null bs then done else do       -- Otherwise, if there are variables to split, we try them       -- in the order determined by a split strategy.-      reportSLn "tc.cover.strategy" 20 $ "blocking vars = " ++ show bs+      reportSLn "tc.cover.strategy" 20 $ "blocking vars = " ++ prettyShow bs       -- xs is a non-empty lists of blocking variables       -- try splitting on one of them       xs <- splitStrategy bs tel       r <- altM1 (split Inductive sc) xs       case r of-        Left err  -> case err of-          CantSplit c tel us vs   -> typeError $ CoverageCantSplitOn c tel us vs-          NotADatatype a          -> enterClosure a $ typeError . CoverageCantSplitType-          IrrelevantDatatype a    -> enterClosure a $ typeError . CoverageCantSplitIrrelevantType-          CoinductiveDatatype a   -> enterClosure a $ typeError . CoverageCantSplitType-{- UNUSED-          NoRecordConstructor a   -> typeError $ CoverageCantSplitType a- -}-          GenericSplitError s     -> fail $ "failed to split: " ++ s+        Left err -> typeError $ SplitError err         -- If we get the empty covering, we have reached an impossible case         -- and are done.         Right (Covering n []) ->-          return (SplittingDone (size tel), Set.empty, [])+          return $ CoverResult (SplittingDone (size tel)) Set.empty [] Set.empty         Right (Covering n scs) -> do-          (trees, useds, psss) <- unzip3 <$> mapM (cover f cs) (map snd scs)+          results <- mapM (cover f cs) (map snd scs)+          let trees = map coverSplitTree results+              useds = map coverUsedClauses results+              psss  = map coverMissingClauses results+              noex  = map coverNoExactClauses results           -- Jesper, 2016-03-10  We need to remember which variables were           -- eta-expanded by the unifier in order to generate a correct split           -- tree (see Issue 1872).@@ -265,7 +307,7 @@             ]           let trees' = zipWith (etaRecordSplits (unArg n) ps) scs trees               tree   = SplitAt n trees'-          return (tree, Set.unions useds, concat psss)+          return $ CoverResult tree (Set.unions useds) (concat psss) (Set.unions noex)    where     tryIf :: Monad m => Bool -> m (Maybe a) -> m a -> m a@@ -273,21 +315,25 @@     tryIf False me m = m      -- Try to split result-    splitRes :: TCM (Maybe (SplitTree, Set Nat, [[NamedArg DeBruijnPattern]]))+    splitRes :: TCM (Maybe CoverResult)     splitRes = do       reportSLn "tc.cover" 20 $ "blocked by projection pattern"       -- forM is a monadic map over a Maybe here       mcov <- splitResult f sc       Trav.forM mcov $ \ (Covering n scs) -> do         -- If result splitting was successful, continue coverage checking.-        (projs, (trees, useds, psss)) <- mapSnd unzip3 . unzip <$> do+        (projs, results) <- unzip <$> do           mapM (traverseF $ cover f cs <=< (snd <.> fixTarget)) scs           -- OR:           -- forM scs $ \ (proj, sc') -> (proj,) <$> do           --   cover f cs =<< do           --     snd <$> fixTarget sc'-        let tree = SplitAt n $ zip projs trees-        return (tree, Set.unions useds, concat psss)+        let trees = map coverSplitTree results+            useds = map coverUsedClauses results+            psss  = map coverMissingClauses results+            noex  = map coverNoExactClauses results+            tree  = SplitAt n $ zip projs trees+        return $ CoverResult tree (Set.unions useds) (concat psss) (Set.unions noex)      gatherEtaSplits :: Int -> SplitClause                     -> [NamedArg DeBruijnPattern] -> [NamedArg DeBruijnPattern]@@ -300,6 +346,7 @@        | n == 0    -> case p' of -- this is the main split            VarP  _      -> __IMPOSSIBLE__            DotP  _      -> __IMPOSSIBLE__+           AbsurdP _    -> __IMPOSSIBLE__            ConP  _ _ qs -> qs ++ gatherEtaSplits (-1) sc ps            LitP  _      -> __IMPOSSIBLE__            ProjP{}      -> __IMPOSSIBLE__@@ -307,6 +354,7 @@            updateNamedArg (\ _ -> p') p : gatherEtaSplits (n-1) sc ps         where p' = lookupS (scSubst sc) $ dbPatVarIndex x       DotP  _      -> p : gatherEtaSplits (n-1) sc ps -- count dot patterns+      AbsurdP _    -> p : gatherEtaSplits (n-1) sc ps       ConP  _ _ qs -> gatherEtaSplits n sc (qs ++ ps)       LitP  _      -> gatherEtaSplits n sc ps       ProjP{}      -> gatherEtaSplits n sc ps@@ -316,6 +364,7 @@     addEtaSplits k (p:ps) t = case namedArg p of       VarP  _       -> addEtaSplits (k+1) ps t       DotP  _       -> addEtaSplits (k+1) ps t+      AbsurdP _     -> addEtaSplits (k+1) ps t       ConP c cpi qs -> SplitAt (p $> k) [(conName c , addEtaSplits k (qs ++ ps) t)]       LitP  _       -> __IMPOSSIBLE__       ProjP{}       -> __IMPOSSIBLE__@@ -325,21 +374,30 @@     etaRecordSplits n ps (q , sc) t =       (q , addEtaSplits 0 (gatherEtaSplits n sc ps) t) -inferMissingClause :: QName -> SplitClause -> TCM ()+-- | Append a instance clause to the clauses of a function.+inferMissingClause+  :: QName+       -- ^ Function name.+  -> SplitClause+       -- ^ Clause to add.  Clause hiding (in 'clauseType') must be 'Instance'.+   -> TCM () inferMissingClause f (SClause tel ps _ mpsub (Just t)) = setCurrentRange f $ do   reportSDoc "tc.cover.infer" 20 $ addContext tel $ text "Trying to infer right-hand side of type" <+> prettyTCM t   cl <- addContext tel $ withModuleParameters mpsub $ do-    (x, rhs) <- case getHiding t of-                  Instance  -> newIFSMeta "" (unArg t)-                  Hidden    -> __IMPOSSIBLE__-                  NotHidden -> __IMPOSSIBLE__-    return $ Clause { clauseRange     = noRange+    (_x, rhs) <- case getHiding t of+                  Instance{} -> newIFSMeta "" (unArg t)+                  Hidden     -> __IMPOSSIBLE__+                  NotHidden  -> __IMPOSSIBLE__+    return $ Clause { clauseLHSRange  = noRange+                    , clauseFullRange = noRange                     , clauseTel       = tel                     , namedClausePats = ps                     , clauseBody      = Just rhs                     , clauseType      = Just t-                    , clauseCatchall  = False }-  addClauses f [cl]+                    , clauseCatchall  = False+                    , clauseUnreachable = Just False  -- missing, thus, not unreachable+                    }+  addClauses f [cl]  -- Important: add at the end. inferMissingClause _ (SClause _ _ _ _ Nothing) = __IMPOSSIBLE__  splitStrategy :: BlockingVars -> Telescope -> TCM BlockingVars@@ -362,12 +420,12 @@ -- | Check that a type is a non-irrelevant datatype or a record with -- named constructor. Unless the 'Induction' argument is 'CoInductive' -- the data type must be inductive.-isDatatype :: (MonadTCM tcm, MonadException SplitError tcm) =>+isDatatype :: (MonadTCM tcm, MonadError SplitError tcm) =>               Induction -> Dom Type ->               tcm (QName, [Arg Term], [Arg Term], [QName]) isDatatype ind at = do   let t       = unDom at-      throw f = throwException . f =<< do liftTCM $ buildClosure t+      throw f = throwError . f =<< do liftTCM $ buildClosure t   t' <- liftTCM $ reduce t   case ignoreSharing $ unEl t' of     Def d es -> do@@ -382,7 +440,7 @@           | isIrrelevant at && not splitOnIrrelevantDataAllowed ->               throw IrrelevantDatatype           | otherwise -> do-              let (ps, is) = genericSplitAt np args+              let (ps, is) = splitAt np args               return (d, ps, is, cs)         Record{recPars = np, recConHead = con, recInduction = i}           | i == Just CoInductive && ind /= CoInductive ->@@ -420,7 +478,7 @@     let n         = size tel         -- Andreas, 2016-10-04 issue #2236         -- Need to set origin to "Inserted" to avoid printing of hidden patterns.-        xs        = map (setOrigin Inserted) $ teleNamedArgs tel+        xs        = map (mapArgInfo hiddenInserted) $ teleNamedArgs tel         -- Compute new split clause         sctel'    = telFromList $ telToList (raise n sctel) ++ telToList tel         -- Dot patterns in @ps@ need to be raised!  (Issue 1298)@@ -455,6 +513,13 @@       ]     return $ if n == 0 then (empty, sc { scTarget = newTarget }) else (tel, sc') +-- Andreas, 2017-01-18, issue #819, set visible arguments to UserWritten.+-- Otherwise, they will be printed as _.+hiddenInserted :: ArgInfo -> ArgInfo+hiddenInserted ai+  | visible ai = setOrigin UserWritten ai+  | otherwise  = setOrigin Inserted ai+ -- | @computeNeighbourhood delta1 delta2 d pars ixs hix tel ps mpsub con@ -- --   @@@ -490,13 +555,9 @@   dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d    -- Get the real constructor name-  con <- liftTCM $ getConForm c+  con <- liftTCM $ fromRight __IMPOSSIBLE__ <$> getConForm c   con <- return $ con { conName = c }  -- What if we restore the current name?                                        -- Andreas, 2013-11-29 changes nothing!-{--  con <- conSrcCon . theDef <$> getConstInfo con-  Con con ci [] <- liftTCM $ ignoreSharing <$> (constructorForm =<< normalise (Con con ci []))--}    -- Get the type of the constructor   ctype <- liftTCM $ defType <$> getConInfo con@@ -513,7 +574,7 @@    let preserve (x, t@(El _ (Def d' _))) | d == d' = (n, t)       preserve (x, (El s (Shared p))) = preserve (x, El s $ derefPtr p)-      preserve p = p+      preserve (x, t) = (x, t)       gammal = map (fmap preserve) . telToList $ gamma0       gamma  = telFromList gammal       delta1Gamma = delta1 `abstract` gamma@@ -537,20 +598,21 @@   case r of     NoUnify {} -> debugNoUnify $> Nothing -    DontKnow{} -> do+    DontKnow errs -> do       debugCantSplit-      throwException $ CantSplit (conName con) (delta1 `abstract` gamma) conIxs givenIxs+      throwError $ UnificationStuck (conName con) (delta1 `abstract` gamma) conIxs givenIxs errs     Unifies (delta1',rho0,_) -> do       debugSubst "rho0" rho0        -- We have Δ₁' ⊢ ρ₀ : Δ₁Γ, so split it into the part for Δ₁ and the part for Γ       let (rho1,rho2) = splitS (size gamma) rho0 -      -- Andreas, 2015-05-01  I guess it is fine to use @noConPatternInfo@+      -- Andreas, 2015-05-01  I guess it is fine to use no @conPType@       -- as the result of splitting is never used further down the pipeline.       -- After splitting, Agda reloads the file.-      let conp    = ConP con noConPatternInfo $ applySubst rho2 $-                      map (setOrigin Inserted) $ tele2NamedArgs gamma0 gamma+      -- Andreas, 2017-09-03, issue #2729: remember that pattern was generated by case split.+      let conp    = ConP con (ConPatternInfo (Just ConOSplit) Nothing) $ applySubst rho2 $+                      map (mapArgInfo hiddenInserted) $ tele2NamedArgs gamma0 gamma           -- Andreas, 2016-09-08, issue #2166: use gamma0 for correct argument names        -- Compute final context and substitution@@ -561,11 +623,11 @@        debugTel "delta'" delta'       debugSubst "rho" rho-      addContext tel $ debugPs ps+      debugPs tel ps        -- Apply the substitution       let ps' = applySubst rho ps-      addContext delta' $ debugPlugged ps'+      debugPlugged delta' ps'        let mpsub' = applySubst (fromPatternSubstitution rho) mpsub @@ -579,14 +641,14 @@           [ text "context=" <+> (inTopContext . prettyTCM =<< getContextTelescope)           , text "con    =" <+> prettyTCM con           , text "ctype  =" <+> prettyTCM ctype-          , text "ps     =" <+> do addContext tel $ prettyTCMPatternList ps+          , text "ps     =" <+> do inTopContext $ addContext tel $ prettyTCMPatternList ps           , text "d      =" <+> prettyTCM d-          , text "pars   =" <+> prettyList (map prettyTCM pars)-          , text "ixs    =" <+> addContext delta1 (prettyList (map prettyTCM ixs))-          , text "cixs   =" <+> do addContext gamma $ prettyList (map prettyTCM cixs)-          , text "delta1 =" <+> prettyTCM delta1-          , text "delta2 =" <+> prettyTCM delta2-          , text "gamma  =" <+> prettyTCM gamma+          , text "pars   =" <+> do prettyList $ map prettyTCM pars+          , text "ixs    =" <+> do addContext delta1 $ prettyList $ map prettyTCM ixs+          , text "cixs   =" <+> do addContext gamma  $ prettyList $ map prettyTCM cixs+          , text "delta1 =" <+> do inTopContext $ prettyTCM delta1+          , text "delta2 =" <+> do inTopContext $ addContext delta1 $ addContext gamma $ prettyTCM delta2+          , text "gamma  =" <+> do inTopContext $ addContext delta1 $ prettyTCM gamma           , text "hix    =" <+> text (show hix)           ]         ]@@ -607,15 +669,17 @@         [ text (s ++ " =") <+> prettyTCM tel         ] -    debugPs ps =-      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat-        [ text "ps     =" <+> prettyTCMPatternList ps-        ]+    debugPs tel ps =+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $+        inTopContext $ addContext tel $ nest 2 $ vcat+          [ text "ps     =" <+> prettyTCMPatternList ps+          ] -    debugPlugged ps' =-      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat-        [ text "ps'    =" <+> do prettyTCMPatternList ps'-        ]+    debugPlugged delta' ps' =+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $+        inTopContext $ addContext delta' $ nest 2 $ vcat+          [ text "ps'    =" <+> do prettyTCMPatternList ps'+          ]  -- | Entry point from @Interaction.MakeCase@. splitClauseWithAbsurd :: SplitClause -> Nat -> TCM (Either SplitError (Either SplitClause Covering))@@ -691,14 +755,14 @@        -> SplitClause        -> BlockingVar        -> TCM (Either SplitError (Either SplitClause Covering))-split' ind fixtarget sc@(SClause tel ps _ mpsub target) (BlockingVar x mcons) = liftTCM $ runExceptionT $ do+split' ind fixtarget sc@(SClause tel ps _ mpsub target) (BlockingVar x mcons) = liftTCM $ runExceptT $ do    debugInit tel x ps mpsub    -- Split the telescope at the variable   -- t = type of the variable,  Δ₁ ⊢ t   (n, t, delta1, delta2) <- do-    let (tel1, Dom info (n, t) : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel+    let (tel1, Dom info (n, t) : tel2) = splitAt (size tel - x - 1) $ telToList tel     return (n, Dom info t, telFromList tel1, telFromList tel2)    -- Check that t is a datatype or a record@@ -735,7 +799,7 @@     -- if more than one constructor matches, we cannot be irrelevant     -- (this piece of code is unreachable if --experimental-irrelevance is off)     (_ : _ : _) | unusableRelevance (getRelevance t) ->-      throwException . IrrelevantDatatype =<< do liftTCM $ buildClosure (unDom t)+      throwError . IrrelevantDatatype =<< do liftTCM $ buildClosure (unDom t)    -- Andreas, 2012-10-10 fail if precomputed constructor set does not cover   -- all the data type constructors@@ -749,7 +813,7 @@             [ hsep $ text "pcons =" : map prettyTCM pcons             , hsep $ text "cons  =" : map prettyTCM cons             ]-          throwException (GenericSplitError "precomputed set of constructors does not cover all cases")+          throwError (GenericSplitError "precomputed set of constructors does not cover all cases")      _  -> return $ Right $ Covering (lookupPatternVar sc x) ns @@ -761,12 +825,12 @@     inContextOfDelta2 = addContext tel . escapeContext x      -- Debug printing-    debugInit tel x ps mpsub = liftTCM $ do+    debugInit tel x ps mpsub = liftTCM $ inTopContext $ do       reportSDoc "tc.cover.top" 10 $ vcat         [ text "TypeChecking.Coverage.split': split"         , nest 2 $ vcat           [ text "tel     =" <+> prettyTCM tel-          , text "x       =" <+> text (show x)+          , text "x       =" <+> prettyTCM x           , text "ps      =" <+> do addContext tel $ prettyTCMPatternList ps           , text "mpsub   =" <+> prettyTCM mpsub           ]@@ -775,7 +839,7 @@     debugHoleAndType delta1 delta2 s ps t =       liftTCM $ reportSDoc "tc.cover.top" 10 $ nest 2 $ vcat $         [ text "p      =" <+> text (patVarNameToString s)-        , text "ps    =" <+> text (show ps)+        , text "ps     =" <+> text (show ps)         , text "delta1 =" <+> prettyTCM delta1         , text "delta2 =" <+> inContextOfDelta2 (prettyTCM delta2)         , text "t      =" <+> inContextOfT (prettyTCM t)@@ -791,7 +855,7 @@ splitResult f sc@(SClause tel ps _ _ target) = do   reportSDoc "tc.cover.split" 10 $ vcat     [ text "splitting result:"-    , nest 2 $ text "f      =" <+> text (show f)+    , nest 2 $ text "f      =" <+> prettyTCM f     , nest 2 $ text "target =" <+> (addContext tel $ maybe empty prettyTCM target)     ]   -- if we want to split projections, but have no target type, we give up@@ -801,9 +865,9 @@     case isR of       Just (_r, vs, Record{ recFields = fs }) -> do         reportSDoc "tc.cover" 20 $ sep-          [ text $ "we are of record type _r = " ++ show _r+          [ text $ "we are of record type _r = " ++ prettyShow _r           , text   "applied to parameters vs = " <+> (addContext tel $ prettyTCM vs)-          , text $ "and have fields       fs = " ++ show fs+          , text $ "and have fields       fs = " ++ prettyShow fs           ]         let es = patternsToElims ps         -- Note: module parameters are part of ps
src/full/Agda/TypeChecking/Coverage/Match.hs view
@@ -16,11 +16,15 @@ import Agda.Syntax.Internal.Pattern () import Agda.Syntax.Literal +import Agda.TypeChecking.Monad+import Agda.TypeChecking.Records import Agda.TypeChecking.Substitute  import Agda.Utils.Permutation+import Agda.Utils.Pretty ( Pretty(pretty), text, (<+>) ) import Agda.Utils.Size import Agda.Utils.List+import Agda.Utils.Monad  #include "undefined.h" import Agda.Utils.Impossible@@ -68,13 +72,15 @@ buildPattern _              = Nothing  -- | A pattern that matches anything (modulo eta).-isTrivialPattern :: Pattern' a -> Bool+isTrivialPattern :: (HasConstInfo m) => Pattern' a -> m Bool isTrivialPattern p = case p of-  VarP{}      -> True-  DotP{}      -> True-  ConP c i ps -> isJust (conPRecord i) && all (isTrivialPattern . namedArg) ps-  LitP{}      -> False-  ProjP{}     -> False+  VarP{}      -> return True+  DotP{}      -> return True+  AbsurdP{}   -> return True+  ConP c i ps -> andM $ (isEtaCon $ conName c)+                      : (map (isTrivialPattern . namedArg) ps)+  LitP{}      -> return False+  ProjP{}     -> return False  -- | If matching succeeds, we return the instantiation of the clause pattern vector --   to obtain the split clause pattern vector, plus the literals of the clause patterns@@ -105,6 +111,13 @@     --   @Just cons@ means that it is an non-overlapping match and     --   @cons@ are the encountered constructors.   } deriving (Show)++instance Pretty BlockingVar where+  pretty (BlockingVar i mcs) = case mcs of+    Nothing -> text $ "blocking var " ++ show i ++ " (overlapping)"+    Just cs -> text ("blocking var " ++ show i ++ " (non-overlapping); constructors:")+      <+> pretty cs+ type BlockingVars = [BlockingVar]  -- | Lens for 'blockingVarCons'.@@ -156,6 +169,7 @@ yesMatchLit l (DotP t) = maybe No (yesMatchLit l) $ buildPattern t yesMatchLit _ ConP{}   = No yesMatchLit _ ProjP{}  = No+yesMatchLit _ AbsurdP{} = __IMPOSSIBLE__ yesMatchLit _ LitP{}   = __IMPOSSIBLE__  -- | Check if a clause could match given generously chosen literals@@ -246,15 +260,15 @@ --   that have to be instantiated (an projection names of copattern matches) --   to make the split clause an instance of the function clause. -instance Monoid a => Semigroup (Match a) where-  Yes a      <> Yes b      = Yes $ mappend a b+instance Semigroup a => Semigroup (Match a) where+  Yes a      <> Yes b      = Yes (a <> b)   Yes _      <> m          = m   No         <> _          = No   Block{}    <> No         = No-  Block r xs <> Block s ys = Block (mappend r s) $ mappend xs ys+  Block r xs <> Block s ys = Block (r <> s) (xs <> ys)   m@Block{}  <> Yes{}      = m -instance Monoid a => Monoid (Match a) where+instance (Semigroup a, Monoid a) => Monoid (Match a) where   mempty  = Yes mempty   mappend = (<>) @@ -281,6 +295,7 @@  matchPat _    VarP{}   q = Yes ([q],[]) matchPat _    DotP{}   q = mempty+matchPat _    AbsurdP{} q = mempty -- Jesper, 2014-11-04: putting 'Yes [q]' here triggers issue 1333. -- Not checking for trivial patterns should be safe here, as dot patterns are -- guaranteed to match if the rest of the pattern does, so some extra splitting@@ -294,5 +309,6 @@     | c == c'   -> matchPats mlit ps qs     | otherwise -> No   DotP t  -> maybe No (matchPat mlit p) $ buildPattern t+  AbsurdP{} -> __IMPOSSIBLE__  -- excluded by typing   LitP _  -> __IMPOSSIBLE__  -- split clause has no literal patterns   ProjP{} -> __IMPOSSIBLE__  -- excluded by typing
src/full/Agda/TypeChecking/Coverage/SplitTree.hs view
@@ -20,6 +20,7 @@ import Agda.Syntax.Internal as I  import Agda.Utils.Monad+import Agda.Utils.Pretty  #include "undefined.h" import Agda.Utils.Impossible@@ -53,12 +54,13 @@   , lblSplitArg        :: Maybe (Arg Int)   , lblBindings        :: Maybe Int   }-instance Show a => Show (SplitTreeLabel a) where-  show (SplitTreeLabel Nothing Nothing (Just n))  = "done, " ++ show n ++ " bindings"-  show (SplitTreeLabel Nothing (Just n) Nothing)  = "split at " ++ show n-  show (SplitTreeLabel (Just q) Nothing (Just n)) = show q ++ " -> done, " ++ show n ++ " bindings"-  show (SplitTreeLabel (Just q) (Just n) Nothing) = show q ++ " -> split at " ++ show n-  show _ = __IMPOSSIBLE__+instance Pretty a => Pretty (SplitTreeLabel a) where+  pretty = \case+    SplitTreeLabel Nothing Nothing (Just n)  -> text $ "done, " ++ show n ++ " bindings"+    SplitTreeLabel Nothing (Just n) Nothing  -> text $ "split at " ++ show n+    SplitTreeLabel (Just q) Nothing (Just n) -> pretty q <+> text (" -> done, " ++ show n ++ " bindings")+    SplitTreeLabel (Just q) (Just n) Nothing -> pretty q <+> text (" -> split at " ++ show n)+    _ -> __IMPOSSIBLE__  -- | Convert a split tree into a 'Data.Tree' (for printing). toTree :: SplitTree' a -> Tree (SplitTreeLabel a)@@ -72,5 +74,5 @@     setCons :: a -> Tree (SplitTreeLabel a) -> Tree (SplitTreeLabel a)     setCons c (Node l ts) = Node (l { lblConstructorName = Just c }) ts -instance Show a => Show (SplitTree' a) where-  show = drawTree . fmap show . toTree+instance Pretty a => Pretty (SplitTree' a) where+  pretty = text . drawTree . fmap prettyShow . toTree
src/full/Agda/TypeChecking/Datatypes.hs view
@@ -3,6 +3,7 @@ module Agda.TypeChecking.Datatypes where  import Data.Maybe (fromMaybe)+import qualified Data.List as List  import Agda.Syntax.Common import Agda.Syntax.Internal@@ -11,9 +12,12 @@ import Agda.TypeChecking.Monad.Builtin (constructorForm) import Agda.TypeChecking.Telescope import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Pretty -import Agda.Utils.Size+import Agda.Utils.Either import Agda.Utils.Functor+import Agda.Utils.Pretty ( prettyShow )+import Agda.Utils.Size  #include "undefined.h" import Agda.Utils.Impossible@@ -23,21 +27,20 @@ ---------------------------------------------------------------------------  -- | Get true constructor with record fields.-getConHead :: QName -> TCM ConHead-getConHead c = conSrcCon . theDef <$> getConstInfo c+getConHead :: QName -> TCM (Either SigError ConHead)+getConHead c = mapRight (conSrcCon . theDef) <$> getConstInfo' c  -- | Get true constructor with fields, expanding literals to constructors --   if possible.-getConForm :: QName -> TCM ConHead-getConForm c = do-  ch <- getConHead c+getConForm :: QName -> TCM (Either SigError ConHead)+getConForm c = caseEitherM (getConHead c) (return . Left) $ \ ch -> do   Con con _ [] <- ignoreSharing <$> constructorForm (Con ch ConOCon [])-  return con+  return $ Right con  -- | Augment constructor with record fields (preserve constructor name). --   The true constructor might only surface via 'reduce'.-getOrigConHead :: QName -> TCM ConHead-getOrigConHead c = setConName c <$> getConHead c+getOrigConHead :: QName -> TCM (Either SigError ConHead)+getOrigConHead c = mapRight (setConName c) <$> getConHead c  -- | Get the name of the datatype constructed by a given constructor. --   Precondition: The argument must refer to a constructor@@ -50,31 +53,96 @@     _                        -> __IMPOSSIBLE__  -- | @getConType c t@ computes the constructor parameters from type @t@---   and returns the instantiated type of constructor @c@.+--   and returns them plus the instantiated type of constructor @c@.+--   This works also if @t@ is a function type ending in a data/record type;+--   the term from which @c@ comes need not be fully applied+-- --   @Nothing@ if @t@ is not a data/record type or does not have --   a constructor @c@.---   Precondition: @t@ is reduced.-getConType :: ConHead -> Type -> TCM (Maybe Type)+getConType+  :: ConHead  -- ^ Constructor.+  -> Type     -- ^ Ending in data/record type.+  -> TCM (Maybe ((QName, Type, Args), Type))+       -- ^ @Nothing@ if not ends in data or record type.+       --+       --   @Just ((d, dt, pars), ct)@ otherwise, where+       --     @d@    is the data or record type name,+       --     @dt@   is the type of the data or record name,+       --     @pars@ are the reconstructed parameters,+       --     @ct@   is the type of the constructor instantiated to the parameters. getConType c t = do-  c <- getConHead $ conName c+  reportSDoc "tc.getConType" 30 $ sep $+    [ text "getConType: constructor "+    , prettyTCM c+    , text " at type "+    , prettyTCM t+    ]+  TelV tel t <- telView t+  -- Now @t@ lives under @tel@, we need to remove the dependency on @tel@.+  -- This will succeed if @t@ is indeed a data/record type that is the+  -- type of a constructor coming from a term+  -- (applied to at least the parameters).+  -- Note: @t@ will have some unbound deBruijn indices if view outside of @tel@.+  reportSLn "tc.getConType" 35 $ "  target type: " ++ prettyShow t+  applySubst (strengthenS __IMPOSSIBLE__ (size tel)) <$> do+    addContext tel $ getFullyAppliedConType c t+  -- Andreas, 2017-08-18, issue #2703:+  -- The original code+  --    getFullyAppliedConType c $ applySubst (strengthenS __IMPOSSIBLE__ (size tel)) t+  -- crashes because substitution into @Def@s is slightly too strict+  -- (see @defApp@ and @canProject@).+  -- Strengthening the parameters after the call to @getFullyAppliedConType@+  -- does not produce intermediate terms with __IMPOSSIBLE__s and this thus+  -- robust wrt. strictness/laziness of substitution.++-- | @getFullyAppliedConType c t@ computes the constructor parameters+--   from data type @t@ and returns them+--   plus the instantiated type of constructor @c@.+--+--   @Nothing@ if @t@ is not a data/record type or does not have+--   a constructor @c@.+--+--   Precondition: @t@ is reduced.+getFullyAppliedConType+  :: ConHead  -- ^ Constructor.+  -> Type     -- ^ Reduced type of the fully applied constructor.+  -> TCM (Maybe ((QName, Type, Args), Type))+       -- ^ @Nothing@ if not data or record type.+       --+       --   @Just ((d, dt, pars), ct)@ otherwise, where+       --     @d@    is the data or record type name,+       --     @dt@   is the type of the data or record name,+       --     @pars@ are the reconstructed parameters,+       --     @ct@   is the type of the constructor instantiated to the parameters.+getFullyAppliedConType c t = do+  reportSLn "tc.getConType" 35 $ List.intercalate " " $+    [ "getFullyAppliedConType", prettyShow c, prettyShow t ]+  c <- fromRight __IMPOSSIBLE__ <$> do getConHead $ conName c   case ignoreSharing $ unEl t of+    -- Note that if we come e.g. from getConType,+    -- then the non-parameter arguments of @es@ might contain __IMPOSSIBLE__+    -- coming from strengthening.  (Thus, printing them is not safe.)     Def d es -> do-      def <- theDef <$> getConstInfo d-      case def of+      reportSLn "tc.getConType" 35 $ List.intercalate " " $+        [ "getFullyAppliedConType: case Def", prettyShow d, prettyShow es ]+      def <- getConstInfo d+      let cont n = do+            -- At this point we can be sure that the parameters are well-scoped.+            let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take n es+            Just . ((d, defType def, pars),) <$> do+              (`piApplyM` pars) . defType =<< getConInfo c+      case theDef def of         Datatype { dataPars = n, dataCons   = cs  } | conName c `elem` cs -> cont n         Record   { recPars  = n, recConHead = con } | c == con            -> cont n         _ ->  return Nothing-      where-        cont n = do-          let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take n es-          Just <$> do (`piApplyM` pars) . defType =<< getConInfo c     _ -> return Nothing  data HasEta = NoEta | YesEta   deriving (Eq) -data ConstructorInfo = DataCon Nat  -- arity-                     | RecordCon HasEta [Arg QName]+data ConstructorInfo+  = DataCon Nat                  -- ^ Arity.+  | RecordCon HasEta [Arg QName] -- ^ List of field names.  -- | Return the number of non-parameter arguments to a data constructor, --   or the field names of a record constructor.@@ -83,28 +151,16 @@ --   use @either id size <$> getConstructorArity c@. getConstructorInfo :: QName -> TCM ConstructorInfo getConstructorInfo c = do-  Defn{ defType = t, theDef = def } <- getConstInfo c-  case def of-    Constructor{ conData = d, conPars = n } -> do-      def <- theDef <$> getConstInfo d-      case def of+  (theDef <$> getConstInfo c) >>= \case+    Constructor{ conData = d, conArity = n } -> do+      (theDef <$> getConstInfo d) >>= \case         r@Record{ recFields = fs } ->            return $ RecordCon (if recEtaEquality r then YesEta else NoEta) fs-        Datatype{} -> do-          -- TODO: I do not want to take the type of constructor apart-          -- to see its arity!-          TelV tel _ <- telView t-          return $ DataCon $ size tel - n+        Datatype{} ->+           return $ DataCon n         _ -> __IMPOSSIBLE__     _ -> __IMPOSSIBLE__ -getConstructorArity :: QName -> TCM Nat-getConstructorArity c =-  for (getConstructorInfo c) $ \i ->-  case i of-    DataCon n      -> n-    RecordCon _ fs -> size fs- --------------------------------------------------------------------------- -- * Data types ---------------------------------------------------------------------------@@ -117,9 +173,6 @@     Datatype{}                   -> return True     Record{recNamedCon = namedC} -> return namedC     _                            -> return False--data DataOrRecord = IsData | IsRecord-  deriving (Eq, Ord, Show)  -- | Check if a name refers to a datatype or a record. isDataOrRecordType :: QName -> TCM (Maybe DataOrRecord)
src/full/Agda/TypeChecking/Datatypes.hs-boot view
@@ -5,5 +5,5 @@ import Agda.TypeChecking.Monad.Signature import Agda.Syntax.Internal -getConHead         :: QName -> TCM ConHead+getConHead         :: QName -> TCM (Either SigError ConHead) getConstructorData :: HasConstInfo m => QName -> m QName
src/full/Agda/TypeChecking/DisplayForm.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE UndecidableInstances #-}  -- for Arg a => Elim' a  -- | Tools for 'DisplayTerm' and 'DisplayForm'. @@ -22,10 +23,11 @@ import Agda.TypeChecking.Level import Agda.TypeChecking.Reduce (instantiate) -import Agda.Utils.List-import Agda.Utils.Maybe import Agda.Utils.Except import Agda.Utils.Functor+import Agda.Utils.List+import Agda.Utils.Maybe+import Agda.Utils.Pretty ( prettyShow )  #include "undefined.h" import Agda.Utils.Impossible@@ -56,7 +58,7 @@     unless (null odfs) $ verboseS "tc.display.top" 100 $ do       n <- getContextId       reportSLn "tc.display.top" 100 $-        "displayForm for " ++ show q ++ ": context = " ++ show n +++        "displayForm for " ++ prettyShow q ++ ": context = " ++ show n ++         ", dfs = " ++ show odfs     -- Use only the display forms that can be opened in the current context.     dfs   <- catMaybes <$> mapM getLocal odfs@@ -68,7 +70,7 @@     -- Not safe when printing non-terminating terms.     -- (nfdfs, us) <- normalise (dfs, es)     unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines-      [ "name        : " ++ show q+      [ "name        : " ++ prettyShow q       , "displayForms: " ++ show dfs       , "arguments   : " ++ show es       , "matches     : " ++ show ms@@ -103,8 +105,8 @@   | length ps > length es = mzero   | otherwise             = do       let (es0, es1) = splitAt (length ps) es-      us <- match ps $ raise 1 es0-      return (d, applySubst (parallelS $ reverse us) v `applyE` es1)+      us <- reverse <$> do match ps $ raise 1 es0+      return (d, substWithOrigin (parallelS $ map woThing us) us v `applyE` es1)  -- | Class @Match@ for matching a term @p@ in the role of a pattern --   against a term @v@.@@ -122,13 +124,13 @@ --   (It has been substituted by __IMPOSSIBLE__ which corresponds to --   a raise by -1). class Match a where-  match :: a -> a -> MaybeT TCM [Term]+  match :: a -> a -> MaybeT TCM [WithOrigin Term]  instance Match a => Match [a] where   match xs ys = concat <$> zipWithM match xs ys  instance Match a => Match (Arg a) where-  match p v = match (unArg p) (unArg v)+  match p v = map (setOrigin (getOrigin v)) <$> match (unArg p) (unArg v)  instance Match a => Match (Elim' a) where   match p v =@@ -139,7 +141,7 @@  instance Match Term where   match p v = lift (instantiate v) >>= \ v -> case (ignoreSharing p, ignoreSharing v) of-    (Var 0 [], v)                  -> return [strengthen __IMPOSSIBLE__ v]+    (Var 0 [], v) -> return [ WithOrigin Inserted $ strengthen __IMPOSSIBLE__ v ]     (Var i ps, Var j vs) | i == j  -> match ps vs     (Def c ps, Def d vs) | c == d  -> match ps vs     (Con c _ ps, Con d _ vs) | c == d -> match ps vs@@ -161,3 +163,74 @@     p <- reallyUnLevelView p     v <- reallyUnLevelView v     match p v++-- | Substitute terms with origin into display terms,+--   replacing variables along with their origins.+--+--   The purpose is to replace the pattern variables in a with-display form,+--   and only on the top level of the lhs.  Thus, we are happy to fall back+--   to ordinary substitution where it does not matter.+--   This fixes issue #2590.++class SubstWithOrigin a where+  substWithOrigin :: Substitution -> [WithOrigin Term] -> a -> a++instance SubstWithOrigin a => SubstWithOrigin [a] where+  substWithOrigin rho ots = map (substWithOrigin rho ots)++instance SubstWithOrigin (Arg a) => SubstWithOrigin (Elim' a) where+  substWithOrigin rho ots (Apply arg) = Apply $ substWithOrigin rho ots arg+  substWithOrigin rho ots e@Proj{}    = e++instance SubstWithOrigin (Arg Term) where+  substWithOrigin rho ots (Arg ai v) =+    case ignoreSharing v of+      -- pattern variable: replace origin if better+      Var x [] -> case ots !!! x of+        Just (WithOrigin o u) -> Arg (mapOrigin (replaceOrigin o) ai) u+        Nothing -> Arg ai $ applySubst rho v -- Issue #2717, not __IMPOSSIBLE__+      -- constructor: recurse+      Con c ci args -> Arg ai $ Con c ci $ substWithOrigin rho ots args+      -- def: recurse+      Def q es -> Arg ai $ Def q $ substWithOrigin rho ots es+      -- otherwise: fall back to ordinary substitution+      _ -> Arg ai $ applySubst rho v+    where+      replaceOrigin _ UserWritten = UserWritten+      replaceOrigin o _           = o++instance SubstWithOrigin Term where+  substWithOrigin rho ots v =+    case ignoreSharing v of+      -- constructor: recurse+      Con c ci args -> Con c ci $ substWithOrigin rho ots args+      -- def: recurse+      Def q es -> Def q $ substWithOrigin rho ots es+      -- otherwise: fall back to oridinary substitution+      _ -> applySubst rho v++-- Do not go into dot pattern, otherwise interaction test #231 fails+instance SubstWithOrigin DisplayTerm where+  substWithOrigin rho ots dt =+    case dt of+      DTerm v        -> DTerm     $ substWithOrigin rho ots v+      DDot  v        -> DDot      $ applySubst rho v+      DDef q es      -> DDef q    $ substWithOrigin rho ots es+      DCon c ci args -> DCon c ci $ substWithOrigin rho ots args+      DWithApp t ts es -> DWithApp+        (substWithOrigin rho ots t)+        (substWithOrigin rho ots ts)+        (substWithOrigin rho ots es)++-- Do not go into dot pattern, otherwise interaction test #231 fails+instance SubstWithOrigin (Arg DisplayTerm) where+  substWithOrigin rho ots (Arg ai dt) =+    case dt of+      DTerm v        -> fmap DTerm $ substWithOrigin rho ots $ Arg ai v+      DDot  v        -> Arg ai $ DDot      $ applySubst rho v+      DDef q es      -> Arg ai $ DDef q    $ substWithOrigin rho ots es+      DCon c ci args -> Arg ai $ DCon c ci $ substWithOrigin rho ots args+      DWithApp t ts es -> Arg ai $ DWithApp+        (substWithOrigin rho ots t)+        (substWithOrigin rho ots ts)+        (substWithOrigin rho ots es)
src/full/Agda/TypeChecking/Empty.hs view
@@ -1,9 +1,13 @@ -module Agda.TypeChecking.Empty where+module Agda.TypeChecking.Empty (isEmptyType) where  import Control.Applicative import Control.Monad+import Control.Monad.Except +import Data.Semigroup+import Data.Monoid+ import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern@@ -12,31 +16,75 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Coverage import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope +import Agda.Utils.Either+import Agda.Utils.Monad++data ErrorNonEmpty+  = Fail              -- ^ Generic failure+  | FailBecause TCErr -- ^ Failure with informative error+  | DontKnow          -- ^ Emptyness check blocked++instance Semigroup ErrorNonEmpty where+  DontKnow        <> _        = DontKnow+  _               <> DontKnow = DontKnow+  FailBecause err <> _        = FailBecause err+  Fail            <> err      = err++instance Monoid ErrorNonEmpty where+  mempty  = Fail+  mappend = (Data.Semigroup.<>)+ -- | Check whether a type is empty. --   This check may be postponed as emptiness constraint.- isEmptyType :: Range -> Type -> TCM ()-isEmptyType r t = do-  let postpone t = addConstraint $ IsEmpty r t-  -- If t is blocked or a meta, we cannot decide emptiness now.  Postpone.-  ifBlockedType t (\ _ t -> postpone t) $ {- else -} \ t -> do-    -- from the current context xs:ts, create a pattern list-    -- xs _ : ts t and try to split on _ (the last variable)-    tel0 <- getContextTelescope-    let gamma = telToList tel0 ++ [domFromArg $ defaultArg (underscore, t)]-        tel   = telFromList gamma-        ps    = teleNamedArgs tel+isEmptyType r t = caseEitherM (loop t) failure return+  where+  failure DontKnow          = addConstraint $ IsEmpty r t+  failure (FailBecause err) = throwError err+  failure Fail              = typeError $ ShouldBeEmpty t [] -    dontAssignMetas $ do-      r <- splitLast Inductive tel ps-      case r of-        Left (CantSplit c tel us vs) -> postpone t-        Left _                       -> typeError $ ShouldBeEmpty t []-        Right cov -> do-          let cs = splitClauses cov-          unless (null cs) $-            typeError $ ShouldBeEmpty t $ map (namedArg . last . scPats) cs+  -- Either the type is possibly non-empty (Left err) or it is really empty+  -- (Right ()).+  loop :: Type -> TCM (Either ErrorNonEmpty ())+  loop t = do+    mr <- tryRecordType t+    case mr of++      -- If t is blocked or a meta, we cannot decide emptiness now.  Postpone.+      Left Nothing -> return $ Left DontKnow++      -- If t is not a record type, try to split+      Left (Just t) -> do+        -- from the current context xs:ts, create a pattern list+        -- xs _ : ts t and try to split on _ (the last variable)+        tel0 <- getContextTelescope+        let gamma = telToList tel0 ++ [domFromArg $ defaultArg (underscore, t)]+            tel   = telFromList gamma+            ps    = teleNamedArgs tel++        dontAssignMetas $ do+          r <- splitLast Inductive tel ps+          case r of+            Left UnificationStuck{} -> return $ Left DontKnow+            Left _                  -> return $ Left Fail+            Right cov -> do+              let ps = map (namedArg . last . scPats) $ splitClauses cov+              if (null ps) then return (Right ()) else+                Left . FailBecause <$> do typeError_ $ ShouldBeEmpty t ps++      -- If t is a record type, see if any of the field types is empty+      Right (r, pars, def) -> do+        if not $ recEtaEquality def then return $ Left Fail else do+          checkTel $ recTel def `apply` pars++  checkTel :: Telescope -> TCM (Either ErrorNonEmpty ())+  checkTel EmptyTel          = return $ Left Fail+  checkTel (ExtendTel dom tel) = orEitherM+    [ loop (unDom dom)+    , underAbstraction dom tel checkTel+    ]
src/full/Agda/TypeChecking/Errors.hs view
@@ -5,10 +5,15 @@  module Agda.TypeChecking.Errors   ( prettyError+  , prettyWarning   , tcErrString+  , prettyTCWarnings'   , prettyTCWarnings   , tcWarningsToError   , applyFlagsToTCWarnings+  , dropTopLevelModule+  , stringTCErr+  , sayWhen   ) where  import Prelude hiding (null)@@ -16,6 +21,10 @@ import Control.Monad.Reader import Control.Monad.State +#if __GLASGOW_HASKELL__ <= 708+import Data.Foldable (foldMap)+#endif+ import Data.Function import Data.List (nub, sortBy, intersperse, isInfixOf) import Data.Maybe@@ -42,23 +51,27 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Context+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Positivity import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope ( ifPiType ) import Agda.TypeChecking.Reduce (instantiate)  import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.FileName import Agda.Utils.Function+import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null-import Agda.Utils.Size+import Agda.Utils.Pretty ( prettyShow ) import qualified Agda.Utils.Pretty as P+import Agda.Utils.Size  #include "undefined.h" import Agda.Utils.Impossible@@ -86,15 +99,15 @@ ---------------------------------------------------------------------------  instance PrettyTCM TCWarning where-  prettyTCM (TCWarning tcst clw) = localState $ do-    put tcst-    sayWhen (envRange  $ clEnv clw)-            (envCall   $ clEnv clw)-            (prettyTCM $ clValue clw)+  prettyTCM = return . tcWarningPrintedWarning  instance PrettyTCM Warning where-  prettyTCM wng = case wng of+  prettyTCM = prettyWarning +{-# SPECIALIZE prettyWarning :: Warning -> TCM Doc #-}+prettyWarning :: MonadTCM tcm => Warning -> tcm Doc+prettyWarning wng = liftTCM $ case wng of+     UnsolvedMetaVariables ms  ->       fsep ( pwords "Unsolved metas at the following locations:" )       $$ nest 2 (vcat $ map prettyTCM ms)@@ -115,19 +128,38 @@                     then d                     else d $$ nest 4 (text "[ at" <+> prettyTCM r <+> text "]") -    TerminationIssue tes ->+    TerminationIssue tes -> do+      dropTopLevel <- topLevelModuleDropper       fwords "Termination checking failed for the following functions:"-      $$ (nest 2 $ fsep $ punctuate comma $-           map (pretty . dropTopLevelModule) $-             concatMap termErrFunctions tes)-      $$ fwords "Problematic calls:"-      $$ (nest 2 $ fmap (P.vcat . nub) $-            mapM prettyTCM $ sortBy (compare `on` callInfoRange) $-            concatMap termErrCalls tes)+        $$ (nest 2 $ fsep $ punctuate comma $+             map (pretty . dropTopLevel) $+               concatMap termErrFunctions tes)+        $$ fwords "Problematic calls:"+        $$ (nest 2 $ fmap (P.vcat . nub) $+              mapM prettyTCM $ sortBy (compare `on` callInfoRange) $+              concatMap termErrCalls tes) +    UnreachableClauses f pss -> fsep $+      pwords "Unreachable" ++ pwords (plural (length pss) "clause")+        where+          plural 1 thing = thing+          plural n thing = thing ++ "s"++    CoverageIssue f pss -> fsep (+      pwords "Incomplete pattern matching for" ++ [prettyTCM f <> text "."] +++      pwords "Missing cases:") $$ nest 2 (vcat $ map display pss)+        where+        display (tel, ps) = prettyTCM $ NamedClause f True $+          empty { clauseTel = tel, namedClausePats = ps }++    CoverageNoExactSplit f cs -> vcat $+      [ fsep $ pwords "Exact splitting is enabled, but the following" ++ pwords (singPlural cs "clause" "clauses") +++               pwords "could not be preserved as definitional equalities in the translation to a case tree:"+      ] +++      map (nest 2 . prettyTCM . NamedClause f True) cs+     NotStrictlyPositive d ocs -> fsep $-      [prettyTCM (dropTopLevelModule d)] ++-      pwords "is not strictly positive, because it occurs"+      [prettyTCM d] ++ pwords "is not strictly positive, because it occurs"       ++ [prettyTCM ocs]      OldBuiltin old new -> fwords $@@ -136,10 +168,51 @@      EmptyRewritePragma -> fsep . pwords $ "Empty REWRITE pragma" +    UselessPublic -> fwords $ "Keyword `public' is ignored here"++    UselessInline q -> fsep $+      pwords "It is pointless for INLINE'd function" ++ [prettyTCM q] +++      pwords "to have a separate Haskell definition"++    GenericWarning d -> return d++    GenericNonFatalError d -> return d++    SafeFlagPostulate e -> fsep $+      pwords "Cannot postulate" ++ [pretty e] ++ pwords "with safe flag"++    SafeFlagPragma xs ->+      let plural | length xs == 1 = ""+                 | otherwise      = "s"+      in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]+                ++ map text xs ++ [fwords "with safe flag."]++    SafeFlagNonTerminating -> fsep $+      pwords "Cannot use NON_TERMINATING pragma with safe flag."++    SafeFlagTerminating -> fsep $+      pwords "Cannot use TERMINATING pragma with safe flag."++    SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")++    SafeFlagNoPositivityCheck -> fsep $+      pwords "Cannot use NO_POSITIVITY_CHECK pragma with safe flag."++    SafeFlagPolarity -> fsep $+      pwords "The POLARITY pragma must not be used in safe mode."+     ParseWarning pw -> pretty pw +    DeprecationWarning old new version -> fsep $+      [text old] ++ pwords "has been deprecated. Use" ++ [text new] ++ pwords+      "instead. This will be an error in Agda" ++ [text version <> text "."]++    NicifierIssue ws -> vcat $ do+      for ws $ \ w -> do+        sayWhere (getRange w) $ pretty w+ prettyTCWarnings :: [TCWarning] -> TCM String-prettyTCWarnings = fmap (unlines . intersperse " ") . prettyTCWarnings'+prettyTCWarnings = fmap (unlines . intersperse "") . prettyTCWarnings'  prettyTCWarnings' :: [TCWarning] -> TCM [String] prettyTCWarnings' = mapM (fmap show . prettyTCM)@@ -157,24 +230,51 @@ applyFlagsToTCWarnings :: IgnoreFlags -> [TCWarning] -> TCM [TCWarning] applyFlagsToTCWarnings ifs ws = do +  -- For some reason some SafeFlagPragma seem to be created multiple times.+  -- This is a way to collect all of them and remove duplicates.+  let pragmas w = case tcWarning w of { SafeFlagPragma ps -> ([w], ps); _ -> ([], []) }+  let sfp = case fmap nub (foldMap pragmas ws) of+              (TCWarning r w p:_, sfp) ->+                 [TCWarning r (SafeFlagPragma sfp) p]+              _                        -> []++   unsolvedNotOK <- not . optAllowUnsolved <$> pragmaOptions   negativeNotOK <- not . optDisablePositivity <$> pragmaOptions   loopingNotOK  <- optTerminationCheck <$> pragmaOptions+  catchallNotOK <- optExactSplit <$> pragmaOptions +  -- filter out the warnings the flags told us to ignore   let cleanUp w =         let ignore = ifs == IgnoreFlags             keepUnsolved us = not (null us) && (ignore || unsolvedNotOK)         in case w of           TerminationIssue{}           -> ignore || loopingNotOK+          CoverageIssue{}              -> ignore || unsolvedNotOK           NotStrictlyPositive{}        -> ignore || negativeNotOK           UnsolvedMetaVariables ums    -> keepUnsolved ums           UnsolvedInteractionMetas uis -> keepUnsolved uis           UnsolvedConstraints ucs      -> keepUnsolved ucs           OldBuiltin{}                 -> True           EmptyRewritePragma           -> True+          UselessPublic                -> True           ParseWarning{}               -> True+          UnreachableClauses{}         -> True+          CoverageNoExactSplit{}       -> catchallNotOK+          UselessInline{}              -> True+          GenericWarning{}             -> True+          GenericNonFatalError{}       -> True+          SafeFlagPostulate{}          -> True+          SafeFlagPragma{}             -> False -- dealt with separately+          SafeFlagNonTerminating       -> True+          SafeFlagTerminating          -> True+          SafeFlagPrimTrustMe          -> True+          SafeFlagNoPositivityCheck    -> True+          SafeFlagPolarity             -> True+          DeprecationWarning{}         -> True+          NicifierIssue{}              -> True -  return $ filter (cleanUp . tcWarning) ws+  return $ sfp ++ filter (cleanUp . tcWarning) ws  --------------------------------------------------------------------------- -- * Helpers@@ -199,11 +299,14 @@  tcErrString :: TCErr -> String tcErrString err = show (getRange err) ++ " " ++ case err of-  TypeError _ cl  -> errorString $ clValue cl-  Exception r s   -> show r ++ " " ++ show s-  IOException r e -> show r ++ " " ++ show e-  PatternErr{}    -> "PatternErr"+  TypeError _ cl    -> errorString $ clValue cl+  Exception r s     -> show r ++ " " ++ show s+  IOException _ r e -> show r ++ " " ++ show e+  PatternErr{}      -> "PatternErr" +stringTCErr :: String -> TCErr+stringTCErr = Exception noRange . P.text+ errorString :: TypeError -> String errorString err = case err of   AmbiguousModule{}                        -> "AmbiguousModule"@@ -224,11 +327,6 @@   ClashingModuleImport{}                   -> "ClashingModuleImport"   CompilationError{}                       -> "CompilationError"   ConstructorPatternInWrongDatatype{}      -> "ConstructorPatternInWrongDatatype"-  CoverageFailure{}                        -> "CoverageFailure"-  CoverageCantSplitOn{}                    -> "CoverageCantSplitOn"-  CoverageCantSplitIrrelevantType{}        -> "CoverageCantSplitIrrelevantType"-  CoverageCantSplitType{}                  -> "CoverageCantSplitType"-  CoverageNoExactSplit{}                   -> "CoverageNoExactSplit"   CyclicModuleDependency{}                 -> "CyclicModuleDependency"   DataMustEndInSort{}                      -> "DataMustEndInSort" -- UNUSED:    DataTooManyParameters{}                  -> "DataTooManyParameters"@@ -248,10 +346,7 @@   IllformedProjectionPattern{}             -> "IllformedProjectionPattern"   CannotEliminateWithPattern{}             -> "CannotEliminateWithPattern"   IllegalLetInTelescope{}                  -> "IllegalLetInTelescope"-  IncompletePatternMatching{}              -> "IncompletePatternMatching"-  IndexVariablesNotDistinct{}              -> "IndexVariablesNotDistinct"-  IndicesFreeInParameters{}                -> "IndicesFreeInParameters"-  IndicesNotConstructorApplications{}      -> "IndicesNotConstructorApplications"+-- UNUSED:  IncompletePatternMatching{}              -> "IncompletePatternMatching"   InternalError{}                          -> "InternalError"   InvalidPattern{}                         -> "InvalidPattern"   LocalVsImportedModuleClash{}             -> "LocalVsImportedModuleClash"@@ -269,7 +364,6 @@   NoParseForLHS{}                          -> "NoParseForLHS" --  NoParseForPatternSynonym{}               -> "NoParseForPatternSynonym"   NoRHSRequiresAbsurdPattern{}             -> "NoRHSRequiresAbsurdPattern"-  NotInductive {}                          -> "NotInductive"   AbsurdPatternRequiresNoRHS{}             -> "AbsurdPatternRequiresNoRHS"   NoSuchBuiltinName{}                      -> "NoSuchBuiltinName"   NoSuchModule{}                           -> "NoSuchModule"@@ -285,23 +379,16 @@   NotAnExpression{}                        -> "NotAnExpression"   NotImplemented{}                         -> "NotImplemented"   NotSupported{}                           -> "NotSupported"+  AbstractConstructorNotInScope{}          -> "AbstractConstructorNotInScope"   NotInScope{}                             -> "NotInScope"   NotLeqSort{}                             -> "NotLeqSort"   NothingAppliedToHiddenArg{}              -> "NothingAppliedToHiddenArg"   NothingAppliedToInstanceArg{}            -> "NothingAppliedToInstanceArg"   OverlappingProjects {}                   -> "OverlappingProjects"-  OperatorChangeMessage {}                 -> "OperatorChangeMessage"   OperatorInformation {}                   -> "OperatorInformation"   PatternShadowsConstructor {}             -> "PatternShadowsConstructor"   PropMustBeSingleton                      -> "PropMustBeSingleton"   RepeatedVariablesInPattern{}             -> "RepeatedVariablesInPattern"-  SafeFlagPostulate{}                      -> "SafeFlagPostulate"-  SafeFlagPragma{}                         -> "SafeFlagPragma"-  SafeFlagNonTerminating{}                 -> "SafeFlagNonTerminating"-  SafeFlagTerminating{}                    -> "SafeFlagTerminating"-  SafeFlagPrimTrustMe{}                    -> "SafeFlagPrimTrustMe"-  SafeFlagNoPositivityCheck{}              -> "SafeFlagNoPositivityCheck"-  SafeFlagPolarity{}                       -> "SafeFlagPolarity"   ShadowedModule{}                         -> "ShadowedModule"   ShouldBeASort{}                          -> "ShouldBeASort"   ShouldBeApplicationOf{}                  -> "ShouldBeApplicationOf"@@ -313,6 +400,7 @@   NotAProjectionPattern{}                  -> "NotAProjectionPattern"   ShouldEndInApplicationOfTheDatatype{}    -> "ShouldEndInApplicationOfTheDatatype"   SplitError{}                             -> "SplitError"+  ImpossibleConstructor{}                  -> "ImpossibleConstructor"   TerminationCheckFailed{}                 -> "TerminationCheckFailed"   TooFewFields{}                           -> "TooFewFields"   TooManyArgumentsInLHS{}                  -> "TooManyArgumentsInLHS"@@ -328,24 +416,16 @@   UnequalSorts{}                           -> "UnequalSorts"   UnequalTerms{}                           -> "UnequalTerms"   UnequalTypes{}                           -> "UnequalTypes"-  UnifyConflict{}                          -> "UnifyConflict"-  UnifyCycle{}                             -> "UnifyCycle"-  UnifyIndicesNotVars{}                    -> "UnifyIndicesNotVars"-  UnificationRecursiveEq{}                 -> "UnificationRecursiveEq"-  UnificationStuck{}                       -> "UnificationStuck" --  UnequalTelescopes{}                      -> "UnequalTelescopes" -- UNUSED-  HeterogeneousEquality{}                  -> "HeterogeneousEquality"   WithOnFreeVariable{}                     -> "WithOnFreeVariable"   UnexpectedWithPatterns{}                 -> "UnexpectedWithPatterns"   UninstantiatedDotPattern{}               -> "UninstantiatedDotPattern"   UninstantiatedModule{}                   -> "UninstantiatedModule"-  UnreachableClauses{}                     -> "UnreachableClauses"   SolvedButOpenHoles{}                     -> "SolvedButOpenHoles"   UnusedVariableInPatternSynonym           -> "UnusedVariableInPatternSynonym"   UnquoteFailed{}                          -> "UnquoteFailed"   DeBruijnIndexOutOfScope{}                -> "DeBruijnIndexOutOfScope"   WithClausePatternMismatch{}              -> "WithClausePatternMismatch"-  WithoutKError{}                          -> "WithoutKError"   WrongHidingInApplication{}               -> "WrongHidingInApplication"   WrongHidingInLHS{}                       -> "WrongHidingInLHS"   WrongHidingInLambda{}                    -> "WrongHidingInLambda"@@ -370,9 +450,9 @@     TypeError s e -> localState $ do       put s       sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e-    Exception r s   -> sayWhere r $ return s-    IOException r e -> sayWhere r $ fwords $ show e-    PatternErr{}    -> sayWhere err $ panic "uncaught pattern violation"+    Exception r s     -> sayWhere r $ return s+    IOException _ r e -> sayWhere r $ fwords $ show e+    PatternErr{}      -> sayWhere err $ panic "uncaught pattern violation"  instance PrettyTCM CallInfo where   prettyTCM c = do@@ -382,13 +462,21 @@       then call       else call $$ nest 2 (text "(at" <+> prettyTCM r <> text ")") --- | Drops the filename component of the qualified name.+-- | Drops given amount of leading components of the qualified name. dropTopLevelModule' :: Int -> QName -> QName dropTopLevelModule' k (QName (MName ns) n) = QName (MName (drop k ns)) n -dropTopLevelModule :: QName -> QName-dropTopLevelModule = dropTopLevelModule' 1+-- | Drops the filename component of the qualified name.+dropTopLevelModule :: QName -> TCM QName+dropTopLevelModule q = ($ q) <$> topLevelModuleDropper +-- | Produces a function which drops the filename component of the qualified name.+topLevelModuleDropper :: TCM (QName -> QName)+topLevelModuleDropper = do+  caseMaybeM (asks envCurrentPath) (return id) $ \ f -> do+  m <- fromMaybe __IMPOSSIBLE__ <$> lookupModuleFromSource f+  return $ dropTopLevelModule' $ size m+ instance PrettyTCM TypeError where   prettyTCM err = case err of     InternalError s -> panic s@@ -404,13 +492,10 @@     GenericDocError d -> return d      TerminationCheckFailed because -> do-      dropTopLevelModule <- do-        caseMaybeM (asks envCurrentPath) (return id) $ \ f -> do-        m <- fromMaybe __IMPOSSIBLE__ <$> lookupModuleFromSource f-        return $ dropTopLevelModule' $ size m+      dropTopLevel <- topLevelModuleDropper       fwords "Termination checking failed for the following functions:"         $$ (nest 2 $ fsep $ punctuate comma $-             map (pretty . dropTopLevelModule) $+             map (pretty . dropTopLevel) $                concatMap termErrFunctions because)         $$ fwords "Problematic calls:"         $$ (nest 2 $ fmap (P.vcat . nub) $@@ -457,8 +542,8 @@     WrongHidingInLambda t ->       fwords "Found an implicit lambda where an explicit lambda was expected" -    WrongIrrelevanceInLambda t ->-      fwords "Found an irrelevant lambda where a relevant lambda was expected"+    WrongIrrelevanceInLambda ->+      fwords "Found a non-strict lambda where a irrelevant lambda was expected"      WrongNamedArgument a -> fsep $       pwords "Function does not accept argument "@@ -477,14 +562,13 @@       "Expected " ++ verbalize (Indefinite r') ++ " argument, but found " ++       verbalize (Indefinite r) ++ " argument" -    NotInductive t -> fsep $-      [prettyTCM t] ++ pwords "is not an inductive data type"-     UninstantiatedDotPattern e -> fsep $       pwords "Failed to infer the value of dotted pattern" -    IlltypedPattern p a -> fsep $-      pwords "Type mismatch"+    IlltypedPattern p a -> do+      let ho _ _ = fsep $ pwords "Cannot pattern match on functions"+      ifPiType a ho $ {- else -} \ _ -> do+        fsep $ pwords "Type mismatch"      IllformedProjectionPattern p -> fsep $       pwords "Ill-formed projection pattern " ++ [prettyA p]@@ -522,51 +606,43 @@       [prettyTCM c] ++ pwords "is not a constructor of the datatype"       ++ [prettyTCM d] -    IndicesNotConstructorApplications [i] ->-      fwords "The index"-      $$ nest 2 (prettyTCM i)-      $$ fsep (pwords "is not a constructor (or literal) applied to variables" ++-               pwords "(note that parameters count as constructor arguments)")--    IndicesNotConstructorApplications is ->-      fwords "The indices"-      $$ nest 2 (vcat $ map prettyTCM is)-      $$ fsep (pwords "are not constructors (or literals) applied to variables" ++-               pwords "(note that parameters count as constructor arguments)")+    ShadowedModule x [] -> __IMPOSSIBLE__ -    IndexVariablesNotDistinct vs is ->-      fwords "The variables"-      $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)-      $$ fwords "in the indices"-      $$ nest 2 (vcat $ map prettyTCM is)-      $$ fwords "are not distinct (note that parameters count as constructor arguments)"+    ShadowedModule x ms@(m0 : _) -> do+      -- Clash! Concrete module name x already points to the abstract names ms.+      (r, m) <- do+        -- Andreas, 2017-07-28, issue #719.+        -- First, we try to find whether one of the abstract names @ms@ points back to @x@+        scope <- getScope+        -- Get all pairs (y,m) such that y points to some m ∈ ms.+        let xms0 = ms >>= \ m -> map (,m) $ inverseScopeLookupModule m scope+        reportSLn "scope.clash.error" 30 $ "candidates = " ++ prettyShow xms0 -    IndicesFreeInParameters vs indices pars ->-      fwords "The variables"-      $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)-      $$ fwords "which are used (perhaps as constructor parameters) in the index expressions"-      $$ nest 2 (vcat $ map prettyTCM indices)-      $$ fwords "are free in the parameters"-      $$ nest 2 (vcat $ map prettyTCM pars)+        -- Try to find x (which will have a different Range, if it has one (#2649)).+        let xms = filter ((\ y -> not (null $ getRange y) && y == C.QName x) . fst) xms0+        reportSLn "scope.class.error" 30 $ "filtered candidates = " ++ prettyShow xms -    ShadowedModule x [] -> __IMPOSSIBLE__+        -- If we found a copy of x with non-empty range, great!+        ifJust (headMaybe xms) (\ (x', m) -> return (getRange x', m)) $ {-else-} do -    ShadowedModule x ms@(m : _) -> fsep $-      pwords "Duplicate definition of module" ++ [prettyTCM x <> text "."] ++-      pwords "Previous definition of" ++ [help m] ++ pwords "module" ++ [prettyTCM x] ++-      pwords "at" ++ [prettyTCM r]-      where-        help m = do-          b <- isDatatypeModule m-          if b then text "datatype" else empty+        -- If that failed, we pick the first m from ms which has a nameBindingSite.+        let rms = ms >>= \ m -> map (,m) $+              filter (noRange /=) $ map nameBindingSite $ reverse $ mnameToList m+              -- Andreas, 2017-07-25, issue #2649+              -- Take the first nameBindingSite we can get hold of.+        reportSLn "scope.class.error" 30 $ "rangeful clashing modules = " ++ prettyShow rms -        r = case [ r | r <- map (defSiteOfLast . mnameToList) ms-                     , r /= noRange ] of-              []    -> noRange-              r : _ -> r+        -- If even this fails, we pick the first m and give no range.+        return $ fromMaybe (noRange, m0) $ headMaybe rms -        defSiteOfLast [] = noRange-        defSiteOfLast ns = nameBindingSite (last ns)+      fsep $+        pwords "Duplicate definition of module" ++ [prettyTCM x <> text "."] +++        pwords "Previous definition of" ++ [help m] ++ pwords "module" ++ [prettyTCM x] +++        pwords "at" ++ [prettyTCM r]+      where+        help m = caseMaybeM (isDatatypeModule m) empty $ \case+          IsData   -> text "(datatype)"+          IsRecord -> text "(record)"      ModuleArityMismatch m EmptyTel args -> fsep $       pwords "The module" ++ [prettyTCM m] ++@@ -603,7 +679,8 @@      SplitOnIrrelevant p t -> fsep $       pwords "Cannot pattern match" ++ [prettyA p] ++-      pwords "against irrelevant type" ++ [prettyTCM t]+      pwords "against" ++ [text $ verbalize $ getRelevance t] +++      pwords "argument of type" ++ [prettyTCM t]      DefinitionIsIrrelevant x -> fsep $       text "Identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"@@ -627,11 +704,6 @@     UnequalTypes cmp a b -> prettyUnequal a (notCmp cmp) b --              fsep $ [prettyTCM a, notCmp cmp, prettyTCM b] -    HeterogeneousEquality u a v b -> fsep $-      pwords "Refuse to solve heterogeneous constraint" ++-      [prettyTCM u] ++ pwords ":" ++ [prettyTCM a] ++ pwords "=?=" ++-      [prettyTCM v] ++ pwords ":" ++ [prettyTCM b]-     UnequalRelevance cmp a b -> fsep $       [prettyTCM a, notCmp cmp, prettyTCM b] ++ -- Andreas 2010-09-21 to reveal Forced annotations, print also uglily@@ -681,8 +753,7 @@      WithClausePatternMismatch p q -> fsep $       pwords "With clause pattern " ++ [prettyA p] ++-      pwords " is not an instance of its parent pattern " ++ [prettyTCM q]-         -- TODO: prettier printing for internal patterns+      pwords " is not an instance of its parent pattern " ++ [P.fsep <$> prettyTCMPatterns [q]]      MetaCannotDependOn m ps i -> fsep $       pwords "The metavariable" ++ [prettyTCM $ MetaV m []] ++@@ -741,8 +812,9 @@       pwords "The module" ++ [prettyTCM m] ++       pwords "can refer to either a local module or an imported module" -    SolvedButOpenHoles ->-      text "Module cannot be imported since it has open interaction points"+    SolvedButOpenHoles -> fsep $+      pwords "Module cannot be imported since it has open interaction points" +++      pwords "(consider adding {-# OPTIONS --allow-unsolved-metas #-} to this module)"      CyclicModuleDependency ms ->       fsep (pwords "cyclic module dependency:")@@ -790,6 +862,11 @@      BothWithAndRHS -> fsep $ pwords "Unexpected right hand side" +    AbstractConstructorNotInScope q -> fsep $+      [ text "Constructor"+      , prettyTCM q+      ] ++ pwords "is abstract, thus, not in scope here"+     NotInScope xs -> do       inscope <- Set.toList . concreteNamesInScope <$> getScope       fsep (pwords "Not in scope:") $$ nest 2 (vcat $ map (name inscope) xs)@@ -834,8 +911,10 @@       where         help :: ModuleName -> TCM Doc         help m = do-          b <- isDatatypeModule m-          sep [prettyTCM m, if b then text "(datatype module)" else empty]+          anno <- caseMaybeM (isDatatypeModule m) (return empty) $ \case+            IsData   -> return $ text "(datatype module)"+            IsRecord -> return $ text "(record module)"+          sep [prettyTCM m, anno ]      UninstantiatedModule x -> fsep (       pwords "Cannot access the contents of the parameterised module"@@ -1078,15 +1157,6 @@               LeftAssoc  -> "infixl"               RightAssoc -> "infixr" -    OperatorChangeMessage err@(OperatorInformation [] _) ->-      prettyTCM err-    OperatorChangeMessage err ->-      prettyTCM err-        $+$-      fsep (pwords $-        "(the treatment of operators was changed in Agda 2.5.1, " ++-        "so code that used to parse may have to be changed)")- {- UNUSED     AmbiguousParseForPatternSynonym p ps -> fsep (       pwords "Don't know how to parse" ++ [pretty p <> text "."] ++@@ -1094,85 +1164,19 @@       ) $$ nest 2 (vcat $ map pretty ps) -} +{- UNUSED     IncompletePatternMatching v args -> fsep $       pwords "Incomplete pattern matching for" ++ [prettyTCM v <> text "."] ++       pwords "No match for" ++ map prettyTCM args--    UnreachableClauses f pss -> fsep $-      pwords "Unreachable" ++ pwords (plural (length pss) "clause")-        where-          plural 1 thing = thing-          plural n thing = thing ++ "s"--    CoverageFailure f pss -> fsep (-      pwords "Incomplete pattern matching for" ++ [prettyTCM f <> text "."] ++-      pwords "Missing cases:") $$ nest 2 (vcat $ map display pss)-        where-          display ps = do-            ps <- nicify f ps-            prettyTCM f <+> fsep (map (prettyArg . fmap namedThing) ps)--          nicify f ps = do-            showImp <- showImplicitArguments-            if showImp-              then return ps-              else return ps  -- TODO: remove implicit arguments which aren't constructors--    CoverageCantSplitOn c tel cIxs gIxs-      | length cIxs /= length gIxs -> __IMPOSSIBLE__-      | otherwise                  -> addContext tel $ vcat (-          [ fsep $ pwords "I'm not sure if there should be a case for the constructor" ++-                   [prettyTCM c <> text ","] ++-                   pwords "because I get stuck when trying to solve the following" ++-                   pwords "unification problems (inferred index ≟ expected index):"-          ] ++-          zipWith (\c g -> nest 2 $ prettyTCM c <+> text "≟" <+> prettyTCM g) cIxs gIxs)--    CoverageCantSplitIrrelevantType a -> fsep $-      pwords "Cannot split on argument of irrelevant datatype" ++ [prettyTCM a]---    CoverageCantSplitType a -> fsep $-      pwords "Cannot split on argument of non-datatype" ++ [prettyTCM a]--    CoverageNoExactSplit f cs -> fsep $-      pwords "Exact splitting is enabled, but not all clauses can be preserved as definitional equalities in the translation to a case tree"+-}      SplitError e -> prettyTCM e -    WithoutKError a u v -> fsep $-      pwords "Cannot eliminate reflexive equation" ++ [prettyTCM u] ++-      pwords "=" ++ [prettyTCM v] ++ pwords "of type" ++ [prettyTCM a] ++-      pwords "because K has been disabled."--    UnifyConflict c c' -> fsep $-      pwords "This case is impossible because of a conflict between the constructors " ++-      [prettyTCM c] ++ pwords " and " ++ [prettyTCM c' <> text "."] ++-      pwords "Possible solution: remove the clause, or use an absurd pattern ()."--    UnifyCycle i u -> fsep $-      pwords "This case is impossible because the variable " ++ [prettyTCM (var i)] ++-      pwords "occurs strongly rigid in" ++ [prettyTCM u <> text "."] +++    ImpossibleConstructor c neg -> fsep $+      pwords "The case for the constructor " ++ [prettyTCM c] +++      pwords " is impossible" ++ [prettyTCM neg] ++       pwords "Possible solution: remove the clause, or use an absurd pattern ()." -    UnifyIndicesNotVars a u v ixs -> fsep $-      pwords "Cannot apply injectivity to the equation" ++ [prettyTCM u] ++-      pwords "=" ++ [prettyTCM v] ++ pwords "of type" ++ [prettyTCM a] ++-      pwords "because I cannot generalize over the indices" ++-      [prettyList $ map prettyTCM ixs]--    UnificationRecursiveEq a i u -> fsep $-      pwords "Cannot solve variable " ++ [prettyTCM (var i)] ++-      pwords " of type " ++ [prettyTCM a] ++-      pwords " with solution " ++ [prettyTCM u] ++-      pwords " because the variable occurs in the solution," ++-      pwords " or in the type one of the variables in the solution"--    UnificationStuck tel us vs -> fsep $-      pwords "I got stuck on unifying" ++ [prettyList (map prettyTCM us)] ++-      pwords "with" ++ [prettyList (map prettyTCM vs)] ++-      pwords "in the telescope" ++ [prettyTCM tel]-     TooManyPolarities x n -> fsep $       pwords "Too many polarities given in the POLARITY pragma for" ++       [prettyTCM x] ++@@ -1210,30 +1214,8 @@       where         cxt' = cxt `abstract` raise (size cxt) (nameCxt names)         nameCxt [] = EmptyTel-        nameCxt (x : xs) = ExtendTel (defaultDom (El I.Prop $ I.Var 0 [])) $ NoAbs (show x) $ nameCxt xs--    SafeFlagPostulate e -> fsep $-      pwords "Cannot postulate" ++ [pretty e] ++ pwords "with safe flag"--    SafeFlagPragma xs ->-      let plural | length xs == 1 = ""-                 | otherwise      = "s"-      in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]-                ++ map text xs ++ [fwords "with safe flag."]--    SafeFlagNonTerminating -> fsep $-      pwords "Cannot use NON_TERMINATING pragma with safe flag."--    SafeFlagTerminating -> fsep $-      pwords "Cannot use TERMINATING pragma with safe flag."--    SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")--    SafeFlagNoPositivityCheck -> fsep $-      pwords "Cannot use NO_POSITIVITY_CHECK pragma with safe flag."--    SafeFlagPolarity -> fsep $-      pwords "The POLARITY pragma must not be used in safe mode."+        nameCxt (x : xs) = ExtendTel (defaultDom (El I.Prop $ I.var 0)) $+          NoAbs (P.prettyShow x) $ nameCxt xs      NeedOptionCopatterns -> fsep $       pwords "Option --copatterns needed to enable destructor patterns"@@ -1244,7 +1226,7 @@     NonFatalErrors ws -> foldr1 ($$) $ fmap prettyTCM ws      InstanceSearchDepthExhausted c a d -> fsep $-      pwords ("Instance search depth exhaused (max depth: " ++ show d ++ ") for candidate") +++      pwords ("Instance search depth exhausted (max depth: " ++ show d ++ ") for candidate") ++       [hang (prettyTCM c <+> text ":") 2 (prettyTCM a)]      where@@ -1254,13 +1236,14 @@      prettyArg :: Arg (I.Pattern' a) -> TCM Doc     prettyArg (Arg info x) = case getHiding info of-      Hidden    -> braces $ prettyPat 0 x-      Instance  -> dbraces $ prettyPat 0 x-      NotHidden -> prettyPat 1 x+      Hidden     -> braces $ prettyPat 0 x+      Instance{} -> dbraces $ prettyPat 0 x+      NotHidden  -> prettyPat 1 x      prettyPat :: Integer -> (I.Pattern' a) -> TCM Doc     prettyPat _ (I.VarP _) = text "_"     prettyPat _ (I.DotP _) = text "._"+    prettyPat _ (I.AbsurdP _) = text absurdPatternName     prettyPat n (I.ConP c _ args) =       mpar n args $         prettyTCM c <+> fsep (map (prettyArg . fmap namedThing) args)@@ -1317,11 +1300,10 @@ instance PrettyTCM SplitError where   prettyTCM err = case err of     NotADatatype t -> enterClosure t $ \ t -> fsep $-      pwords "Cannot pattern match on non-datatype" ++ [prettyTCM t]+      pwords "Cannot split on argument of non-datatype" ++ [prettyTCM t]      IrrelevantDatatype t -> enterClosure t $ \ t -> fsep $-      pwords "Cannot pattern match on datatype" ++ [prettyTCM t] ++-      pwords "since it is declared irrelevant"+      pwords "Cannot split on argument of irrelevant datatype" ++ [prettyTCM t]      CoinductiveDatatype t -> enterClosure t $ \ t -> fsep $       pwords "Cannot pattern match on the coinductive type" ++ [prettyTCM t]@@ -1332,11 +1314,55 @@       pwords "because it has no constructor"  -} -    CantSplit c tel cIxs gIxs ->-      prettyTCM $ CoverageCantSplitOn c tel cIxs gIxs+    UnificationStuck c tel cIxs gIxs errs+      | length cIxs /= length gIxs -> __IMPOSSIBLE__+      | otherwise                  -> vcat $+          [ fsep $ pwords "I'm not sure if there should be a case for the constructor" +++                   [prettyTCM c <> text ","] +++                   pwords "because I get stuck when trying to solve the following" +++                   pwords "unification problems (inferred index ≟ expected index):"+          ] +++          zipWith (\c g -> nest 2 $ addContext tel $ prettyTCM c <+> text "≟" <+> prettyTCM g) cIxs gIxs +++          if null errs then [] else+            [ fsep $ pwords "Possible" ++ pwords (singPlural errs "reason" "reasons") +++                     pwords "why unification failed:" ] +++            map (nest 2 . prettyTCM) errs      GenericSplitError s -> fsep $ pwords "Split failed:" ++ pwords s +instance PrettyTCM NegativeUnification where+  prettyTCM err = case err of+    UnifyConflict tel u v -> addContext tel $ vcat $+      [ fsep $ pwords "because unification ended with a conflicting equation "+      , nest 2 $ prettyTCM u <+> text "≟" <+> prettyTCM v+      ]++    UnifyCycle tel i u -> addContext tel $ vcat $+      [ fsep $ pwords "because unification ended with a cyclic equation "+      , nest 2 $ prettyTCM (var i) <+> text "≟" <+> prettyTCM u+      ]++instance PrettyTCM UnificationFailure where+  prettyTCM err = case err of+    UnifyIndicesNotVars tel a u v ixs -> addContext tel $ fsep $+      pwords "Cannot apply injectivity to the equation" ++ [prettyTCM u] +++      pwords "=" ++ [prettyTCM v] ++ pwords "of type" ++ [prettyTCM a] +++      pwords "because I cannot generalize over the indices" +++      [prettyList (map prettyTCM ixs) <> text "."]++    UnifyRecursiveEq tel a i u -> addContext tel $ fsep $+      pwords "Cannot solve variable " ++ [prettyTCM (var i)] +++      pwords " of type " ++ [prettyTCM a] +++      pwords " with solution " ++ [prettyTCM u] +++      pwords " because the variable occurs in the solution," +++      pwords " or in the type of one of the variables in the solution."++    UnifyReflexiveEq tel a u -> addContext tel $ fsep $+      pwords "Cannot eliminate reflexive equation" ++ [prettyTCM u] +++      pwords "=" ++ [prettyTCM u] ++ pwords "of type" ++ [prettyTCM a] +++      pwords "because K has been disabled."++ instance PrettyTCM Call where   prettyTCM c = case c of     CheckClause t cl -> do@@ -1465,9 +1491,9 @@ instance Verbalize Hiding where   verbalize h =     case h of-      Hidden    -> "hidden"-      NotHidden -> "visible"-      Instance  -> "instance"+      Hidden     -> "hidden"+      NotHidden  -> "visible"+      Instance{} -> "instance"  instance Verbalize Relevance where   verbalize r =@@ -1475,8 +1501,7 @@       Relevant   -> "relevant"       Irrelevant -> "irrelevant"       NonStrict  -> "shape-irrelevant"-      Forced{}   -> __IMPOSSIBLE__-      UnusedArg  -> __IMPOSSIBLE__+      Forced{}   -> "forced"  -- | Indefinite article. data Indefinite a = Indefinite a
src/full/Agda/TypeChecking/Errors.hs-boot view
@@ -1,7 +1,14 @@ module Agda.TypeChecking.Errors where  import Agda.TypeChecking.Monad.Base+import Agda.Syntax.Position +import Agda.Utils.Pretty+ -- Misplaced SPECIALISE pragma: -- {-# SPECIALIZE prettyError :: TCErr -> TCM String #-} prettyError :: MonadTCM tcm => TCErr -> tcm String++prettyWarning :: MonadTCM tcm => Warning -> tcm Doc++sayWhen :: Range -> Maybe (Closure Call) -> TCM Doc -> TCM Doc
src/full/Agda/TypeChecking/EtaContract.hs view
@@ -70,8 +70,12 @@       tyty <- typeInType       case binAppView b of         App u (Arg info v)-          | (isIrrelevant info || isVar0 tyty v)-                    && getHiding i == getHiding info+          | isVar0 tyty v+          -- Andreas, 2017-02-20 issue #2464+          -- Contracting with any irrelevant argument breaks subject reduction.+          -- E.g. \ .x -> f .(subst P eq x)  can in general not be contracted to f.+          -- -- | (isIrrelevant info || isVar0 tyty v)+                    && sameHiding i info                     && not (freeIn 0 u) ->             return $ strengthen __IMPOSSIBLE__ u         _ -> return v
src/full/Agda/TypeChecking/Forcing.hs view
@@ -15,12 +15,12 @@ @  At runtime, forced constructor arguments may be erased as they can be-recovered from dot patterns.  In the epic backend,+recovered from dot patterns.  For instance, @   unsing : {A : Set} (x : A) -> Sing x -> A   unsing .x (sing x) = x @-becomes+can become @   unsing x sing = x @@@ -43,8 +43,8 @@  Up to issue 1441 (Feb 2015), the forcing analysis here relied on the wrong equality (II), considering type constructors as injective.  This is-unsound for Epic's program extraction, but ok if forcing is only used-to decide which arguments to skip during conversion checking.+unsound for program extraction, but ok if forcing is only used to decide which+arguments to skip during conversion checking.  From now on, forcing uses equality (I) and does not search for forced variables under type constructors.  This may lose some savings during
src/full/Agda/TypeChecking/Free.hs view
@@ -1,4 +1,4 @@-+{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | Computing the free variables of a term. -- -- The distinction between rigid and strongly rigid occurrences comes from:@@ -18,12 +18,12 @@  module Agda.TypeChecking.Free     ( FreeVars(..)-    , Free, Free', FreeV, FreeVS+    , Free+    , IsVarSet(..)     , IgnoreSorts(..)     , runFree , rigidVars, relevantVars, allVars     , allFreeVars     , allRelevantVars, allRelevantVarsIgnoring-    , allRelevantOrUnusedVars, allRelevantOrUnusedVarsIgnoring     , freeIn, freeInIgnoringSorts, isBinderUsed     , relevantIn, relevantInIgnoringSortAnn     , Occurrence(..)@@ -44,6 +44,7 @@ import Data.IntMap (IntMap) import qualified Data.IntMap as Map import Data.Set (Set)+import Data.Proxy  import qualified Agda.Benchmarking as Bench @@ -51,9 +52,9 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Free.Lazy-  ( Free'(..) , FreeEnv(..), initFreeEnv+  ( Free(..) , FreeEnv(..), initFreeEnv   , VarOcc(..), IgnoreSorts(..), Variable, SingleVar-  , MetaSet+  , MetaSet, IsVarSet(..), runFreeM   ) import qualified Agda.TypeChecking.Free.Lazy as Free @@ -124,7 +125,7 @@   deriving (Eq,Show)  -- | Compute an occurrence of a single variable in a piece of internal syntax.-occurrence :: FreeV a => Nat -> a -> Occurrence+occurrence :: Free a => Nat -> a -> Occurrence occurrence x v = occurrenceFV x $ freeVars v  -- | Extract occurrence of a single variable from computed free variables.@@ -214,57 +215,60 @@ delete n (FV sv gv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Map.delete n fv) (Set.delete n iv) (Set.delete n uv)  instance Singleton Variable FreeVars where-  singleton (i, VarOcc o r) = mod empty where-    mod :: FreeVars -> FreeVars-    mod = case (o, r) of-      (_, Irrelevant) -> mapIRV (Set.insert i)-      (_, UnusedArg ) -> mapUUV (Set.insert i)-      (Free.StronglyRigid, _) -> mapSRV (Set.insert i)-      (Free.Unguarded    , _) -> mapUGV (Set.insert i)-      (Free.WeaklyRigid  , _) -> mapWRV (Set.insert i)-      (Free.Flexible ms  , _) -> mapFXV (Map.insert i ms)+  singleton i = mapUGV (Set.insert i) mempty +instance IsVarSet FreeVars where+  withVarOcc (VarOcc o r) = goOcc o . goRel r+    where+      goOcc o = case o of+        Free.Flexible ms   -> flexible ms+        Free.WeaklyRigid   -> weakly+        Free.Unguarded     -> id+        Free.StronglyRigid -> strongly+      goRel r = case r of+        Relevant   -> id+        NonStrict  -> id    -- we don't track non-strict and+        Forced{}   -> id    -- forced in FreeVars+        Irrelevant -> irrelevantly++-- In most cases we don't care about the VarOcc.++instance IsVarSet VarSet where withVarOcc _ = id+instance IsVarSet [Int]  where withVarOcc _ = id+instance IsVarSet Any    where withVarOcc _ = id+instance IsVarSet All    where withVarOcc _ = id+ -- * Collecting free variables.  bench :: a -> a bench = Bench.billToPure [ Bench.Typing , Bench.Free ] -type Free a = Free' a Any-type FreeV a = Free' a FreeVars-type FreeVS a = Free' a VarSet- -- | Doesn't go inside solved metas, but collects the variables from a -- metavariable application @X ts@ as @flexibleVars@.-{-# SPECIALIZE freeVars :: FreeV a => a -> FreeVars #-}-freeVars :: (Monoid c, Singleton Variable c, Free' a c) => a -> c+{-# SPECIALIZE freeVars :: Free a => a -> FreeVars #-}+freeVars :: (IsVarSet c, Singleton Variable c, Free a) => a -> c freeVars = freeVarsIgnore IgnoreNot -{-# SPECIALIZE freeVarsIgnore :: FreeV a => IgnoreSorts -> a -> FreeVars #-}-freeVarsIgnore :: (Monoid c, Singleton Variable c, Free' a c) => IgnoreSorts -> a -> c+{-# SPECIALIZE freeVarsIgnore :: Free a => IgnoreSorts -> a -> FreeVars #-}+freeVarsIgnore :: (IsVarSet c, Singleton Variable c, Free a) =>+                  IgnoreSorts -> a -> c freeVarsIgnore = runFree singleton  -- Specialization to typical monoids-{-# SPECIALIZE runFree :: Free' a Any      => SingleVar Any      -> IgnoreSorts -> a -> Any #-}-{-# SPECIALIZE runFree :: Free' a All      => SingleVar All      -> IgnoreSorts -> a -> All #-}-{-# SPECIALIZE runFree :: Free' a VarSet   => SingleVar VarSet   -> IgnoreSorts -> a -> VarSet #-}-{-# SPECIALIZE runFree :: Free' a FreeVars => SingleVar FreeVars -> IgnoreSorts -> a -> FreeVars #-}+{-# SPECIALIZE runFree :: Free a => SingleVar Any      -> IgnoreSorts -> a -> Any #-}+{-# SPECIALIZE runFree :: Free a => SingleVar FreeVars -> IgnoreSorts -> a -> FreeVars #-} -- Specialization to Term {-# SPECIALIZE runFree :: SingleVar Any      -> IgnoreSorts -> Term -> Any #-}-{-# SPECIALIZE runFree :: SingleVar All      -> IgnoreSorts -> Term -> All #-}-{-# SPECIALIZE runFree :: SingleVar VarSet   -> IgnoreSorts -> Term -> VarSet #-} {-# SPECIALIZE runFree :: SingleVar FreeVars -> IgnoreSorts -> Term -> FreeVars #-}-runFree :: (Monoid c, Free' a c) => SingleVar c -> IgnoreSorts -> a -> c-runFree singleton i t = -- bench $  -- Benchmarking is expensive (4% on std-lib)-  freeVars' t `runReader` (initFreeEnv singleton) { feIgnoreSorts = i } -freeIn'' :: Free a => (VarOcc -> Bool) -> IgnoreSorts -> Nat -> a -> Bool-freeIn'' test ig x t =-  getAny $ runFree (\ (y, o) -> Any $ x == y && test o) ig t+-- | Compute free variables.+runFree :: (IsVarSet c, Free a) => SingleVar c -> IgnoreSorts -> a -> c+runFree single i t = -- bench $  -- Benchmarking is expensive (4% on std-lib)+  runFreeM single i (freeVars' t) --- | @freeIn' = freeIn'' (const True)@+-- | Check if a variable is free, possibly ignoring sorts. freeIn' :: Free a => IgnoreSorts -> Nat -> a -> Bool-freeIn' ig x t =-  getAny $ runFree (Any . (x ==) . fst) ig t+freeIn' ig x t = getAny $ runFree (Any . (x ==)) ig t  {-# SPECIALIZE freeIn :: Nat -> Term -> Bool #-} freeIn :: Free a => Nat -> a -> Bool@@ -276,11 +280,22 @@ freeInIgnoringSortAnn :: Free a => Nat -> a -> Bool freeInIgnoringSortAnn = freeIn' IgnoreInAnnotations +newtype RelevantIn a = RelevantIn {getRelevantIn :: a}+  deriving (Semigroup, Monoid)++instance IsVarSet a => IsVarSet (RelevantIn a) where+  withVarOcc o x+    | irrelevant (varRelevance o) = mempty+    | otherwise                   = RelevantIn $ withVarOcc o $ getRelevantIn x++relevantIn' :: Free a => IgnoreSorts -> Nat -> a -> Bool+relevantIn' ig x t = getAny . getRelevantIn $ runFree (RelevantIn . Any . (x ==)) ig t+ relevantInIgnoringSortAnn :: Free a => Nat -> a -> Bool-relevantInIgnoringSortAnn = freeIn'' (not . irrelevantOrUnused . varRelevance) IgnoreInAnnotations+relevantInIgnoringSortAnn = relevantIn' IgnoreInAnnotations  relevantIn :: Free a => Nat -> a -> Bool-relevantIn = freeIn'' (not . irrelevantOrUnused . varRelevance) IgnoreAll+relevantIn = relevantIn' IgnoreAll  -- | Is the variable bound by the abstraction actually used? isBinderUsed :: Free a => Abs a -> Bool@@ -288,27 +303,17 @@ isBinderUsed (Abs _ x) = 0 `freeIn` x  -- | Is the term entirely closed (no free variables)?-closed :: Free' a All => a -> Bool+closed :: Free a => a -> Bool closed t = getAll $ runFree (const $ All False) IgnoreNot t  -- | Collect all free variables.-allFreeVars :: Free' a VarSet => a -> VarSet-allFreeVars = runFree (Set.singleton . fst) IgnoreNot+allFreeVars :: Free a => a -> VarSet+allFreeVars = runFree Set.singleton IgnoreNot  -- | Collect all relevant free variables, excluding the "unused" ones, possibly ignoring sorts.-allRelevantVarsIgnoring :: Free' a VarSet => IgnoreSorts -> a -> VarSet-allRelevantVarsIgnoring = runFree sg-  where sg (i, VarOcc _ r) = if irrelevantOrUnused r then Set.empty else Set.singleton i+allRelevantVarsIgnoring :: Free a => IgnoreSorts -> a -> VarSet+allRelevantVarsIgnoring ig = getRelevantIn . runFree (RelevantIn . Set.singleton) ig  -- | Collect all relevant free variables, excluding the "unused" ones.-allRelevantVars :: Free' a VarSet => a -> VarSet+allRelevantVars :: Free a => a -> VarSet allRelevantVars = allRelevantVarsIgnoring IgnoreNot---- | Collect all relevant free variables, possibly ignoring sorts.-allRelevantOrUnusedVarsIgnoring :: Free' a VarSet => IgnoreSorts -> a -> VarSet-allRelevantOrUnusedVarsIgnoring = runFree sg-  where sg (i, VarOcc _ r) = if isIrrelevant r then Set.empty else Set.singleton i---- | Collect all relevant free variables.-allRelevantOrUnusedVars :: Free' a VarSet => a -> VarSet-allRelevantOrUnusedVars = allRelevantOrUnusedVarsIgnoring IgnoreNot
src/full/Agda/TypeChecking/Free/Lazy.hs view
@@ -108,8 +108,32 @@ botVarOcc :: VarOcc botVarOcc = VarOcc (Flexible mempty) Irrelevant +-- | First argument is the outer occurrence and second is the inner.+composeVarOcc :: VarOcc -> VarOcc -> VarOcc+composeVarOcc (VarOcc o r) (VarOcc o' r') = VarOcc (composeFlexRig o o') (max r r')++-- | Any representation of a set of variables need to be able to be modified by+--   a variable occurrence. This is to ensure that free variable analysis is+--   compositional. For instance, it should be possible to compute `fv (v [u/x])`+--   from `fv v` and `fv u`.+class (Semigroup a, Monoid a) => IsVarSet a where+  -- | Laws+  --    * Respects monoid operations:+  --      ```+  --        withVarOcc o mempty   == mempty+  --        withVarOcc o (x <> y) == withVarOcc o x <> withVarOcc o y+  --      ```+  --    * Respects VarOcc composition+  --      ```+  --        withVarOcc (composeVarOcc o1 o2) = withVarOcc o1 . withVarOcc o2+  --      ```+  withVarOcc :: VarOcc -> a -> a+ type VarMap = IntMap VarOcc +instance IsVarSet VarMap where+  withVarOcc o = fmap (composeVarOcc o)+ -- * Collecting free variables.  -- | Where should we skip sorts in free variable analysis?@@ -125,35 +149,37 @@ data FreeEnv c = FreeEnv   { feIgnoreSorts   :: !IgnoreSorts     -- ^ Ignore free variables in sorts.-  , feBinders       :: !Int-    -- ^ Under how many binders have we stepped?   , feFlexRig       :: !FlexRig     -- ^ Are we flexible or rigid?   , feRelevance     :: !Relevance     -- ^ What is the current relevance?-  , feSingleton     :: SingleVar c+  , feSingleton     :: Maybe Variable -> c     -- ^ Method to return a single variable.   } -type Variable    = (Int, VarOcc)+type Variable    = Int type SingleVar c = Variable -> c  -- | The initial context. -initFreeEnv :: SingleVar c -> FreeEnv c+initFreeEnv :: Monoid c => SingleVar c -> FreeEnv c initFreeEnv sing = FreeEnv   { feIgnoreSorts = IgnoreNot-  , feBinders     = 0   , feFlexRig     = Unguarded   , feRelevance   = Relevant-  , feSingleton   = sing+  , feSingleton   = maybe mempty sing   }  type FreeM c = Reader (FreeEnv c) c -instance Monoid c => Semigroup (FreeM c) where-  (<>) = liftA2 mappend-instance Monoid c => Monoid (FreeM c) where+-- | Run function for FreeM.+runFreeM :: IsVarSet c => SingleVar c -> IgnoreSorts -> FreeM c -> c+runFreeM single i m = runReader m $ (initFreeEnv single) { feIgnoreSorts = i }++instance Semigroup c => Semigroup (FreeM c) where+  (<>) = liftA2 (<>)++instance (Semigroup c, Monoid c) => Monoid (FreeM c) where   mempty  = pure mempty   mappend = (<>)   mconcat = mconcat <.> sequence@@ -162,21 +188,23 @@ --   singleton = pure . singleton  -- | Base case: a variable.-variable :: (Monoid c) => Int -> FreeM c+variable :: IsVarSet c => Int -> FreeM c variable n = do-  m <- (n -) <$> asks feBinders-  if m < 0 then mempty else do-    o <- asks feFlexRig-    r <- asks feRelevance-    s <- asks feSingleton-    pure $ s (m, VarOcc o r)+  o <- asks feFlexRig+  r <- asks feRelevance+  s <- asks feSingleton+  pure $ withVarOcc (VarOcc o r) (s $ Just n) +-- | Subtract, but return Nothing if result is negative.+subVar :: Int -> Maybe Variable -> Maybe Variable+subVar n x = x >>= \ i -> (i - n) <$ guard (n <= i)+ -- | Going under a binder. bind :: FreeM a -> FreeM a bind = bind' 1  bind' :: Nat -> FreeM a -> FreeM a-bind' n = local $ \ e -> e { feBinders = n + feBinders e }+bind' n = local $ \ e -> e { feSingleton = feSingleton e . subVar n }  -- | Changing the 'FlexRig' context. go :: FlexRig -> FreeM a -> FreeM a@@ -200,16 +228,16 @@     (Inductive, (_:_)) -> id  -- | Gather free variables in a collection.-class Free' a c where+class Free a where   -- Misplaced SPECIALIZE pragma:   -- {-# SPECIALIZE freeVars' :: a -> FreeM Any #-}   -- So you cannot specialize all instances in one go. :(-  freeVars' :: (Monoid c) => a -> FreeM c+  freeVars' :: IsVarSet c => a -> FreeM c -instance Free' Term c where+instance Free Term where   -- SPECIALIZE instance does not work as well, see   -- https://ghc.haskell.org/trac/ghc/ticket/10434#ticket-  -- {-# SPECIALIZE instance Free' Term All #-}+  -- {-# SPECIALIZE instance Free Term All #-}   -- {-# SPECIALIZE freeVars' :: Term -> FreeM Any #-}   -- {-# SPECIALIZE freeVars' :: Term -> FreeM All #-}   -- {-# SPECIALIZE freeVars' :: Term -> FreeM VarSet #-}@@ -235,23 +263,13 @@     DontCare mt  -> goRel Irrelevant $ freeVars' mt     Shared p     -> freeVars' (derefPtr p) -instance Free' a c => Free' (Type' a) c where-  -- {-# SPECIALIZE instance Free' Type All #-}-  -- {-# SPECIALIZE freeVars' :: Type -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Type -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Type -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Type -> FreeM VarMap #-}+instance Free a => Free (Type' a) where   freeVars' (El s t) =     ifM ((IgnoreNot ==) <$> asks feIgnoreSorts)       {- then -} (freeVars' (s, t))       {- else -} (freeVars' t) -instance Free' Sort c where-  -- {-# SPECIALIZE instance Free' Sort All #-}-  -- {-# SPECIALIZE freeVars' :: Sort -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Sort -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Sort -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Sort -> FreeM VarMap #-}+instance Free Sort where   freeVars' s =     ifM ((IgnoreAll ==) <$> asks feIgnoreSorts) mempty $ {- else -}     case s of@@ -261,110 +279,50 @@       SizeUniv   -> mempty       DLub s1 s2 -> go WeaklyRigid $ freeVars' (s1, s2) -instance Free' Level c where-  -- {-# SPECIALIZE instance Free' Level All #-}-  -- {-# SPECIALIZE freeVars' :: Level -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Level -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Level -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Level -> FreeM VarMap #-}+instance Free Level where   freeVars' (Max as) = freeVars' as -instance Free' PlusLevel c where-  -- {-# SPECIALIZE instance Free' PlusLevel All #-}-  -- {-# SPECIALIZE freeVars' :: PlusLevel -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: PlusLevel -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: PlusLevel -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: PlusLevel -> FreeM VarMap #-}+instance Free PlusLevel where   freeVars' ClosedLevel{} = mempty   freeVars' (Plus _ l)    = freeVars' l -instance Free' LevelAtom c where-  -- {-# SPECIALIZE instance Free' LevelAtom All #-}-  -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM VarMap #-}+instance Free LevelAtom where   freeVars' l = case l of     MetaLevel m vs   -> go (Flexible $ singleton m) $ freeVars' vs     NeutralLevel _ v -> freeVars' v     BlockedLevel _ v -> freeVars' v     UnreducedLevel v -> freeVars' v -instance Free' a c => Free' [a] c where-  -- {-# SPECIALIZE instance Free' a All => Free' [a] All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => [a] -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => [a] -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => [a] -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => [a] -> FreeM VarMap #-}+instance Free a => Free [a] where   freeVars' = foldMap freeVars' -instance Free' a c => Free' (Maybe a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Maybe a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Maybe a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Maybe a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Maybe a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Maybe a -> FreeM VarMap #-}+instance Free a => Free (Maybe a) where   freeVars' = foldMap freeVars' -instance (Free' a c, Free' b c) => Free' (a,b) c where-  -- {-# SPECIALIZE instance (Free' a All, Free' b All) => Free' (a,b) All #-}-  -- {-# SPECIALIZE freeVars' :: (Free' a Any, Free' b Any) => (a,b) -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: (Free' a All, Free' b All) => (a,b) -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: (Free' a VarSet, Free' b VarSet) => (a,b) -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: (Free' a VarMap, Free' b VarMap) => (a,b) -> FreeM VarMap #-}+instance (Free a, Free b) => Free (a, b) where   freeVars' (x,y) = freeVars' x `mappend` freeVars' y -instance Free' a c => Free' (Elim' a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Elim' a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Elim' a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Elim' a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Elim' a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Elim' a -> FreeM VarMap #-}+instance Free a => Free (Elim' a) where   freeVars' (Apply a) = freeVars' a   freeVars' (Proj{} ) = mempty -instance Free' a c => Free' (Arg a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Arg a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Arg a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Arg a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Arg a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Arg a -> FreeM VarMap #-}+instance Free a => Free (Arg a) where   freeVars' a = goRel (getRelevance a) $ freeVars' $ unArg a -instance Free' a c => Free' (Dom a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Dom a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Dom a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Dom a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Dom a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Dom a -> FreeM VarMap #-}+instance Free a => Free (Dom a) where   freeVars' = freeVars' . unDom -instance Free' a c => Free' (Abs a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Abs a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Abs a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Abs a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Abs a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Abs a -> FreeM VarMap #-}+instance Free a => Free (Abs a) where   freeVars' (Abs   _ b) = bind $ freeVars' b   freeVars' (NoAbs _ b) = freeVars' b -instance Free' a c => Free' (Tele a) c where-  -- {-# SPECIALIZE instance Free' a All => Free' (Tele a) All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a Any => Tele a -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Free' a All => Tele a -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarSet => Tele a -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Free' a VarMap => Tele a -> FreeM VarMap #-}+instance Free a => Free (Tele a) where   freeVars' EmptyTel          = mempty   freeVars' (ExtendTel a tel) = freeVars' (a, tel) -instance Free' Clause c where-  -- {-# SPECIALIZE instance Free' Clause All #-}-  -- {-# SPECIALIZE freeVars' :: Clause -> FreeM Any #-}-  -- {-# SPECIALIZE freeVars' :: Clause -> FreeM All #-}-  -- {-# SPECIALIZE freeVars' :: Clause -> FreeM VarSet #-}-  -- {-# SPECIALIZE freeVars' :: Clause -> FreeM VarMap #-}+instance Free Clause where   freeVars' cl = bind' (size $ clauseTel cl) $ freeVars' $ clauseBody cl -instance Free' EqualityView c where+instance Free EqualityView where   freeVars' (OtherType t) = freeVars' t-  freeVars' (EqualityType s _eq l t a b) = freeVars' s `mappend` freeVars' [l, t, a, b]+  freeVars' (EqualityType s _eq l t a b) = freeVars' s `mappend` freeVars' (l ++ [t, a, b])
src/full/Agda/TypeChecking/Free/Old.hs view
@@ -321,7 +321,6 @@   freeVars' a = f <$> freeVars' (unArg a)     where f = case getRelevance a of                Irrelevant -> irrelevantly-               UnusedArg  -> unused                _          -> id  
+ src/full/Agda/TypeChecking/Functions.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Functions+  ( etaExpandClause+  , getDef+  ) where++import Control.Arrow ( first )++import Agda.Syntax.Common+import Agda.Syntax.Internal++import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Context+import Agda.TypeChecking.Monad.Debug+import Agda.TypeChecking.Monad.Options+import Agda.TypeChecking.Level+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope++import Agda.Utils.Impossible+import Agda.Utils.Functor ( ($>) )+import Agda.Utils.Pretty ( prettyShow )+import Agda.Utils.Monad+import Agda.Utils.Size++#include "undefined.h"++-- | Expand a clause to the maximal arity, by inserting variable+--   patterns and applying the body to variables.++--  Fixes issue #2376.+--  Replaces 'introHiddenLambdas'.+--  See, e.g., test/Succeed/SizedTypesExtendedLambda.agda.++--  This is used instead of special treatment of lambdas+--  (which was unsound: Issue #121)++etaExpandClause :: MonadTCM tcm => Clause -> tcm Clause+etaExpandClause clause = liftTCM $ do+  case clause of+    Clause _  _  ctel ps _           Nothing  _ _ -> return clause+    Clause _  _  ctel ps Nothing     (Just t) _ _ -> return clause+    Clause rl rf ctel ps (Just body) (Just t) catchall unreachable -> do++      -- Get the telescope to expand the clause with.+      TelV tel0 t' <- telView $ unArg t++      -- If the rhs has lambdas, harvest the names of the bound variables.+      let xs   = peekLambdas body+      let ltel = useNames xs $ telToList tel0+      let tel  = telFromList ltel+      let n    = size tel+      unless (n == size tel0) __IMPOSSIBLE__  -- useNames should not drop anything+      -- Join with lhs telescope, extend patterns and apply body.+      -- NB: no need to raise ctel!+      let ctel' = telFromList $ telToList ctel ++ ltel+          ps'   = raise n ps ++ teleNamedArgs tel+          body' = raise n body `apply` teleArgs tel+      reportSDoc "term.clause.expand" 30 $ inTopContext $ vcat+        [ text "etaExpandClause"+        , text "  body    = " <+> (addContext ctel' $ prettyTCM body)+        , text "  xs      = " <+> text (prettyShow xs)+        , text "  new tel = " <+> prettyTCM ctel'+        ]+      return $ Clause rl rf ctel' ps' (Just body') (Just (t $> t')) catchall unreachable+  where+    -- Get all initial lambdas of the body.+    peekLambdas :: Term -> [Arg ArgName]+    peekLambdas v =+      case ignoreSharing v of+        Lam info b -> Arg info (absName b) : peekLambdas (unAbs b)+        _ -> []++    -- Use the names of the first argument, and set the Origin all other+    -- parts of the telescope to Inserted.+    -- The first list of arguments is a subset of the telescope.+    -- Thus, if compared pointwise, if the hiding does not match,+    -- it means we skipped an element of the telescope.+    useNames :: [Arg ArgName] -> ListTel -> ListTel+    useNames []     tel       = map (setOrigin Inserted) tel+    useNames (_:_)  []        = []  -- Andreas, 2017-03-24: not IMPOSSIBLE when positivity checking comes before termination checking, see examples/tactics/ac/AC.agda+    useNames (x:xs) (dom:tel)+      | sameHiding x dom =+          -- set the ArgName of the dom+          fmap (first $ const $ unArg x) dom : useNames xs tel+      | otherwise =+          setOrigin Inserted dom : useNames (x:xs) tel++-- | Get the name of defined symbol of the head normal form of a term.+--   Returns 'Nothing' if no such head exists.++getDef :: Term -> TCM (Maybe QName)+getDef t = (ignoreSharing <$> reduce t) >>= \case+  Def d _    -> return $ Just d+  Lam _ v    -> underAbstraction_ v getDef+  Level v    -> getDef =<< reallyUnLevelView v+  DontCare v -> getDef v+  _          -> return Nothing
src/full/Agda/TypeChecking/Implicit.hs view
@@ -46,10 +46,10 @@     t0' <- reduce t0     case ignoreSharing $ unEl t0' of       Pi (Dom info a) b | let x = absName b, expand (getHiding info) x -> do-          info' <- if getHiding info == Hidden then return info else do+          info' <- if hidden info then return info else do             reportSDoc "tc.term.args.ifs" 15 $               text "inserting instance meta for type" <+> prettyTCM a-            return $ setHiding Instance info+            return $ makeInstance info           (_, v) <- newMetaArg info' x a           let narg = Arg info (Named (Just $ unranged x) v)           mapFst (narg :) <$> implicitNamedArgs (n-1) expand (absApp b v)@@ -67,9 +67,9 @@     newMeta (getHiding info) (argNameToString x) a   where     newMeta :: Hiding -> String -> Type -> TCM (MetaId, Term)-    newMeta Instance  = newIFSMeta-    newMeta Hidden    = newNamedValueMeta RunMetaOccursCheck-    newMeta NotHidden = newNamedValueMeta RunMetaOccursCheck+    newMeta Instance{} = newIFSMeta+    newMeta Hidden     = newNamedValueMeta RunMetaOccursCheck+    newMeta NotHidden  = newNamedValueMeta RunMetaOccursCheck  -- | Create a questionmark according to the 'Hiding' info. @@ -83,9 +83,9 @@     newMeta (getHiding info) (argNameToString x) a   where     newMeta :: Hiding -> String -> Type -> TCM (MetaId, Term)-    newMeta Instance  = newIFSMeta-    newMeta Hidden    = newNamedValueMeta' DontRunMetaOccursCheck-    newMeta NotHidden = newNamedValueMeta' DontRunMetaOccursCheck+    newMeta Instance{} = newIFSMeta+    newMeta Hidden     = newNamedValueMeta' RunMetaOccursCheck+    newMeta NotHidden  = newNamedValueMeta' RunMetaOccursCheck  --------------------------------------------------------------------------- @@ -103,23 +103,24 @@ -- | The list should be non-empty. insertImplicit :: NamedArg e -> [Arg ArgName] -> ImplicitInsertion insertImplicit _ [] = __IMPOSSIBLE__-insertImplicit a ts | notHidden a = impInsert $ nofHidden ts+insertImplicit a ts | visible a = impInsert $ nofHidden ts   where     nofHidden :: [Arg a] -> [Hiding]-    nofHidden = takeWhile (NotHidden /=) . map getHiding+    nofHidden = takeWhile notVisible . map getHiding insertImplicit a ts =   case nameOf (unArg a) of     Nothing -> maybe BadImplicits impInsert $ upto (getHiding a) $ map getHiding ts     Just x  -> find [] (rangedThing x) (getHiding a) ts   where     upto h [] = Nothing-    upto h (NotHidden:_) = Nothing-    upto h (h':_) | h == h' = Just []-    upto h (h':hs) = (h':) <$> upto h hs+    upto h (NotHidden : _) = Nothing+    upto h (h' : _) | sameHiding h h' = Just []+    upto h (h' : hs) = (h' :) <$> upto h hs+     find :: [Hiding] -> ArgName -> Hiding -> [Arg ArgName] -> ImplicitInsertion-    find _ x _ (a@(Arg{}) : _) | notHidden a = NoSuchName x+    find _ x _ (a@(Arg{}) : _) | visible a = NoSuchName x     find hs x hidingx (a@(Arg _ y) : ts)-      | x == y && hidingx == getHiding a = impInsert $ reverse hs-      | x == y && hidingx /= getHiding a = BadImplicits-      | otherwise = find (getHiding a:hs) x hidingx ts-    find i x _ []                            = NoSuchName x+      | x == y && sameHiding hidingx a = impInsert $ reverse hs+      | x == y && sameHiding hidingx a = BadImplicits+      | otherwise = find (getHiding a : hs) x hidingx ts+    find i x _ [] = NoSuchName x
src/full/Agda/TypeChecking/Injectivity.hs view
@@ -34,6 +34,7 @@ import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Permutation+import Agda.Utils.Pretty ( prettyShow )  #include "undefined.h" import Agda.Utils.Impossible@@ -55,7 +56,7 @@         Datatype{}  -> yes         Record{}    -> yes         Axiom{}     -> do-          reportSLn "tc.inj.axiom" 50 $ "headSymbol: " ++ show f ++ " is an Axiom."+          reportSLn "tc.inj.axiom" 50 $ "headSymbol: " ++ prettyShow f ++ " is an Axiom."           -- Don't treat axioms in the current mutual block           -- as constructors (they might have definitions we           -- don't know about yet).@@ -65,7 +66,7 @@         Function{}    -> no         Primitive{}   -> no         Constructor{} -> __IMPOSSIBLE__-        AbstractDefn  -> __IMPOSSIBLE__+        AbstractDefn{}-> __IMPOSSIBLE__     Con c _ _ -> return (Just $ ConsHead $ conName c)     Sort _  -> return (Just SortHead)     Pi _ _  -> return (Just PiHead)@@ -82,7 +83,7 @@ checkInjectivity f cs   | pointLess cs = do       reportSLn "tc.inj.check.pointless" 20 $-        "Injectivity of " ++ show (A.qnameToConcrete f) ++ " would be pointless."+        "Injectivity of " ++ prettyShow (A.qnameToConcrete f) ++ " would be pointless."       return NotInjective   where     -- Is it pointless to use injectivity for this function?@@ -93,7 +94,7 @@         -- If we only have record patterns, it is also pointless.         -- We need at least one proper match. checkInjectivity f cs = do-  reportSLn "tc.inj.check" 40 $ "Checking injectivity of " ++ show f+  reportSLn "tc.inj.check" 40 $ "Checking injectivity of " ++ prettyShow f   -- Extract the head symbol of the rhs of each clause (skip absurd clauses)   es <- catMaybes <$> do     forM cs $ \ c -> do             -- produces a list ...@@ -103,10 +104,10 @@   if all isJust hs && distinct hs     then do       let inv = Map.fromList (map fromJust hs `zip` ps)-      reportSLn "tc.inj.check" 20 $ show f ++ " is injective."+      reportSLn "tc.inj.check" 20 $ prettyShow f ++ " is injective."       reportSDoc "tc.inj.check" 30 $ nest 2 $ vcat $         for (Map.toList inv) $ \ (h, c) ->-          text (show h) <+> text "-->" <+>+          text (prettyShow h) <+> text "-->" <+>           fsep (punctuate comma $ map (prettyTCM . namedArg) $ namedClausePats c)       return $ Inverse inv     else return NotInjective@@ -230,7 +231,7 @@               reportSDoc "tc.inj.invert" 30 $ vcat                 [ text "aborting inversion;" <+> prettyTCM org                 , text "plainly," <+> text (show org)-                , text "has TermHead" <+> text (show h)+                , text "has TermHead" <+> text (prettyShow h)                 , text "which does not expose a constructor"                 ]               return Abort@@ -258,6 +259,7 @@      metaPat (DotP v)         = dotP v     metaPat (VarP _)         = nextMeta+    metaPat (AbsurdP p)      = metaPat p     metaPat (ConP c mt args) = Con c (fromConPatternInfo mt) <$> metaArgs args     metaPat (LitP l)         = return $ Lit l     metaPat ProjP{}          = __IMPOSSIBLE__
src/full/Agda/TypeChecking/InstanceArguments.hs view
@@ -8,7 +8,7 @@ import Control.Monad.State import qualified Data.Map as Map import qualified Data.Set as Set-import Data.List as List+import qualified Data.List as List  import Agda.Syntax.Common import Agda.Syntax.Internal as I@@ -45,39 +45,46 @@ --   for instance search. initialIFSCandidates :: Type -> TCM (Maybe [Candidate]) initialIFSCandidates t = do-  cands1 <- getContextVars   otn <- getOutputTypeName t   case otn of-    NoOutputTypeName -> typeError $ GenericError $ "Instance search can only be used to find elements in a named type"+    NoOutputTypeName -> typeError $ GenericError $+      "Instance search can only be used to find elements in a named type"     OutputTypeNameNotYetKnown -> return Nothing-    OutputTypeVar -> return $ Just cands1-    OutputTypeName n -> do-      cands2 <- getScopeDefs n-      return $ Just $ cands1 ++ cands2+    OutputTypeVar    -> Just <$> getContextVars+    OutputTypeName n -> Just <$> do (++) <$> getContextVars <*> getScopeDefs n   where     -- get a list of variables with their type, relative to current context     getContextVars :: TCM [Candidate]     getContextVars = do       ctx <- getContext-      let vars = [ Candidate (var i) (raise (i + 1) t) ExplicitStayExplicit (argInfoOverlappable info)-                 | (Dom info (x, t), i) <- zip ctx [0..]-                 , getHiding info == Instance+      reportSDoc "tc.instance.cands" 40 $ hang (text "Getting candidates from context") 2 (inTopContext $ prettyTCM ctx)+          -- Context variables with their types lifted to live in the full context+      let varsAndRaisedTypes = [ (var i, raise (i + 1) t) | (i, t) <- zip [0..] ctx ]+          vars = [ Candidate x t ExplicitStayExplicit (isOverlappable info)+                 | (x, Dom info (_, t)) <- varsAndRaisedTypes+                 , isInstance info                  , not (unusableRelevance $ argInfoRelevance info)                  ]        -- {{}}-fields of variables are also candidates-      let cxtAndTypes = [ (var i, snd $ unDom $ raise (i + 1) t) | (i, t) <- zip [0..] ctx ]+      let cxtAndTypes = [ (x, t) | (x, Dom _ (_, t)) <- varsAndRaisedTypes ]       fields <- concat <$> mapM instanceFields (reverse cxtAndTypes)-      reportSDoc "tc.instance.fields" 30 $ text "instance field candidates" $$ nest 2 (vcat-        [ sep [ (if overlap then text "overlap" else empty) <+> prettyTCM v <+> text ":"-              , nest 2 $ prettyTCM t ] | Candidate v t _ overlap <- fields ])+      reportSDoc "tc.instance.fields" 30 $+        if null fields then text "no instance field candidates" else+          text "instance field candidates" $$ do+            nest 2 $ vcat+              [ sep [ (if overlap then text "overlap" else empty) <+> prettyTCM v <+> text ":"+                    , nest 2 $ prettyTCM t+                    ]+              | Candidate v t _ overlap <- fields+              ]        -- get let bindings       env <- asks envLetBindings       env <- mapM (getOpen . snd) $ Map.toList env       let lets = [ Candidate v t ExplicitStayExplicit False                  | (v, Dom info t) <- env-                 , getHiding info == Instance+                 , isInstance info                  , not (unusableRelevance $ argInfoRelevance info)                  ]       return $ vars ++ fields ++ lets@@ -91,7 +98,7 @@               m <- currentModule               -- Are we inside the record module? If so it's safe and desirable               -- to eta-expand once (issue #2320).-              if qnameToList r `isPrefixOf` mnameToList m+              if qnameToList r `List.isPrefixOf` mnameToList m                 then return (Just (r, vs))                 else return Nothing         r -> return r@@ -102,8 +109,8 @@         (tel, args) <- forceEtaExpandRecord r pars v         let types = map unDom $ applySubst (parallelS $ reverse $ map unArg args) (flattenTel tel)         fmap concat $ forM (zip args types) $ \ (arg, t) ->-          ([ Candidate (unArg arg) t ExplicitStayExplicit (argInfoOverlappable $ argInfo arg)-           | getHiding arg == Instance ] ++) <$>+          ([ Candidate (unArg arg) t ExplicitStayExplicit (isOverlappable arg)+           | isInstance arg ] ++) <$>           instanceFields' False (unArg arg, t)      getScopeDefs :: QName -> TCM [Candidate]@@ -114,17 +121,19 @@       catMaybes <$> mapM (candidate rel) qs      candidate :: Relevance -> QName -> TCM (Maybe Candidate)-    candidate rel q =+    candidate rel q = ifNotM (isNameInScope q <$> getScope) (return Nothing) $ do       -- Andreas, 2012-07-07:       -- we try to get the info for q       -- while opening a module, q may be in scope but not in the signature       -- in this case, we just ignore q (issue 674)       flip catchError handle $ do         def <- getConstInfo q-        let r = defRelevance def-        if not (r `moreRelevant` rel) then return Nothing else do-          t   <- defType <$> instantiateDef def+        if not (defRelevance def `moreRelevant` rel) then return Nothing else do+          -- Andreas, 2017-01-14: instantiateDef is a bit of an overkill+          -- if we anyway get the freeVarsToApply+          -- WAS: t <- defType <$> instantiateDef def           args <- freeVarsToApply q+          let t = defType def `piApply` args           let v = case theDef def of                -- drop parameters if it's a projection function...                Function{ funProjection = Just p } -> projDropParsApply p ProjSystem args@@ -134,8 +143,7 @@                -- Ulf, 2014-08-20: constructors are always instances.                Constructor{ conSrcCon = c }       -> Con c ConOSystem []                _                                  -> Def q $ map Apply args-          inScope <- isNameInScope q <$> getScope-          return $ Candidate v t ExplicitToInstance False <$ guard inScope+          return $ Just $ Candidate v t ExplicitToInstance False       where         -- unbound constant throws an internal error         handle (TypeError _ (Closure {clValue = InternalError _})) = return Nothing@@ -156,33 +164,33 @@   mv <- lookupMeta m   setCurrentRange mv $ do     reportSLn "tc.instance" 20 $ "The type of the FindInScope constraint isn't known, trying to find it again."-    t <- getMetaType m----     -- We create a new meta (which can have additional leading lambdas, if the---     -- type @t@ now happens to be a function type) and the associated constraint---     newM <- initializeIFSMeta (miNameSuggestion $ mvInfo mv) t----     -- ... and we assign it to the previous one---     ctxElims <- map Apply <$> getContextArgs---     solveConstraint $ ValueCmp CmpEq t (MetaV m ctxElims) newM+    t <- instantiate =<< getMetaTypeInContext m+    reportSLn "tc.instance" 70 $ "findInScope 1: t: " ++ prettyShow t --- {--    cands <- initialIFSCandidates t+    -- Issue #2577: If the target is a function type the arguments are+    -- potential candidates, so we add them to the context to make+    -- initialIFSCandidates pick them up.+    TelV tel t <- telView t+    cands <- addContext' tel $ initialIFSCandidates t     case cands of-      Nothing -> addConstraint $ FindInScope m Nothing Nothing+      Nothing -> do+        reportSLn "tc.instance" 20 "Can't figure out target of instance goal. Postponing constraint."+        addConstraint $ FindInScope m Nothing Nothing       Just {} -> findInScope m cands--- -}+ findInScope m (Just cands) =   whenJustM (findInScope' m cands) $ (\ (cands, b) -> addConstraint $ FindInScope m b $ Just cands)  -- | Result says whether we need to add constraint, and if so, the set of --   remaining candidates and an eventual blocking metavariable. findInScope' :: MetaId -> [Candidate] -> TCM (Maybe ([Candidate], Maybe MetaId))-findInScope' m cands = ifM (isFrozen m) (return (Just (cands, Nothing))) $ do+findInScope' m cands = ifM (isFrozen m) (do+    reportSLn "tc.instance" 20 "Refusing to solve frozen instance meta."+    return (Just (cands, Nothing))) $ do   -- Andreas, 2013-12-28 issue 1003:   -- If instance meta is already solved, simply discard the constraint.   -- Ulf, 2016-12-06 issue 2325: But only if *fully* instantiated.-  ifM (isFullyInstantiatedMeta m) (return Nothing) $ do+  ifM (isFullyInstantiatedMeta m) (Nothing <$ reportSLn "tc.instance" 20 "Instance meta already solved.") $ do     -- Andreas, 2015-02-07: New metas should be created with range of the     -- current instance meta, thus, we set the range.     mv <- lookupMeta m@@ -192,16 +200,23 @@       reportSDoc "tc.instance" 60 $ nest 2 $ vcat         [ sep [ (if overlap then text "overlap" else empty) <+> prettyTCM v <+> text ":"               , nest 2 $ prettyTCM t ] | Candidate v t _ overlap <- cands ]+      reportSDoc "tc.instance" 70 $ text "raw" $$ do+       nest 2 $ vcat+        [ sep [ (if overlap then text "overlap" else empty) <+> pretty v <+> text ":"+              , nest 2 $ pretty t ] | Candidate v t _ overlap <- cands ]       t <- normalise =<< getMetaTypeInContext m+      reportSLn "tc.instance" 70 $ "findInScope 2: t: " ++ prettyShow t       insidePi t $ \ t -> do       reportSDoc "tc.instance" 15 $ text "findInScope 3: t =" <+> prettyTCM t-      reportSLn "tc.instance" 70 $ "findInScope 3: t: " ++ show t+      reportSLn "tc.instance" 70 $ "findInScope 3: t: " ++ prettyShow t        -- If one of the arguments of the typeclass is a meta which is not rigidly       -- constrained, then don’t do anything because it may loop.-      ifJustM (areThereNonRigidMetaArguments (unEl t)) (\ m -> do-        reportSLn "tc.instance" 15 "aborting due to non-rigidly constrained metas"-        return (Just (cands, Just m))) $ do+      let abortNonRigid m = do+            reportSLn "tc.instance" 15 $+              "aborting due to non-rigidly constrained meta " ++ show m+            return $ Just (cands, Just m)+      ifJustM (areThereNonRigidMetaArguments (unEl t)) abortNonRigid $ {-else-} do          mcands <- checkCandidates m t cands         debugConstraints@@ -237,7 +252,7 @@ insidePi :: Type -> (Type -> TCM a) -> TCM a insidePi t ret =   case ignoreSharing $ unEl t of-    Pi a b     -> addContext' (absName b, a) $ insidePi (unAbs b) ret+    Pi a b     -> addContext' (absName b, a) $ insidePi (absBody b) ret     Def{}      -> ret t     Var{}      -> ret t     Sort{}     -> __IMPOSSIBLE__@@ -340,16 +355,16 @@         Var _ es  -> areThereNonRigidMetaArgs es         Con _ _ vs-> areThereNonRigidMetaArgs (map Apply vs)         MetaV i _ -> ifM (isRigid i) (return Nothing) $ do-                      -- Ignore unconstrained level and size metas (#1865)-                      Def lvl [] <- ignoreSharing <$> primLevel-                      sz <- for (fmap ignoreSharing <$> getBuiltin' builtinSize) $ \case-                              Just (Def sz []) -> [sz]-                              Nothing          -> []-                              _                -> __IMPOSSIBLE__-                      o          <- getOutputTypeName . jMetaType . mvJudgement =<< lookupMeta i-                      case o of-                        OutputTypeName l | elem l (lvl : sz) -> return Nothing-                        _                                   -> return (Just i)+          -- Ignore unconstrained level and size metas (#1865)+          mlvl <- getBuiltinDefName builtinLevel+          (msz, mszlt) <- getBuiltinSize+          let ok = catMaybes [ mlvl, msz ]  -- , mszlt ]  -- ?! Andreas, 2016-12-22+            -- @Ulf: are SIZELT metas excluded on purpose?+            -- How to you know the level/size meta is unconstrained?+          o <- getOutputTypeName . jMetaType . mvJudgement =<< lookupMeta i+          case o of+            OutputTypeName l | elem l ok -> return Nothing+            _ -> return $ Just i         Lam _ t   -> isNonRigidMeta (unAbs t)         _         -> return Nothing @@ -387,13 +402,13 @@ -- Drop all candidates which are judgmentally equal to the first one. -- This is sufficient to reduce the list to a singleton should all be equal. dropSameCandidates :: MetaId -> [(Candidate, Term, Type, a)] -> TCM [(Candidate, Term, Type, a)]-dropSameCandidates m cands0 = do+dropSameCandidates m cands0 = verboseBracket "tc.instance" 30 "dropSameCandidates" $ do   metas <- Set.fromList . Map.keys <$> getMetaStore   let freshMetas x = not $ Set.null $ Set.difference (Set.fromList $ allMetas x) metas    -- Take overlappable candidates into account   let cands =-        case partition (\ (c, _, _, _) -> candidateOverlappable c) cands0 of+        case List.partition (\ (c, _, _, _) -> candidateOverlappable c) cands0 of           (cand : _, []) -> [cand]  -- only overlappable candidates: pick the first one           _              -> cands0  -- otherwise require equality @@ -405,16 +420,18 @@   rel <- getMetaRelevance <$> lookupMeta m   case cands of     []            -> return cands+    cvd : _ | isIrrelevant rel -> do+      reportSLn "tc.instance" 30 "Meta is irrelevant so any candidate will do."+      return [cvd]     cvd@(_, v, a, _) : vas -> do         if freshMetas (v, a)           then return (cvd : vas)           else (cvd :) <$> dropWhileM equal vas       where-        equal _ | isIrrelevant rel = return True         equal (_, v', a', _)             | freshMetas (v', a') = return False  -- If there are fresh metas we can't compare             | otherwise           =-          verboseBracket "tc.instance" 30 "checkEqualCandidates" $ do+          verboseBracket "tc.instance" 30 "comparingCandidates" $ do           reportSDoc "tc.instance" 30 $ sep [ prettyTCM v <+> text "==", nest 2 $ prettyTCM v' ]           localTCState $ dontAssignMetas $ ifNoConstraints_ (equalType a a' >> equalTerm a v v')                              {- then -} (return True)@@ -471,7 +488,7 @@         debugConstraints         verboseBracket "tc.instance" 20 ("checkCandidateForMeta " ++ prettyShow m) $           liftTCM $ runCandidateCheck $ do-            reportSLn "tc.instance" 70 $ "  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."+            reportSLn "tc.instance" 70 $ "  t: " ++ prettyShow t ++ "\n  t':" ++ prettyShow t' ++ "\n  term: " ++ prettyShow term ++ "."             reportSDoc "tc.instance" 20 $ vcat               [ text "checkCandidateForMeta"               , text "t    =" <+> prettyTCM t@@ -480,20 +497,28 @@               ]              -- Apply hidden and instance arguments (recursive inst. search!).-            (args, t'') <- implicitArgs (-1) (\h -> h /= NotHidden || eti == ExplicitToInstance) t'+            (args, t'') <- implicitArgs (-1) (\h -> notVisible h || eti == ExplicitToInstance) t'              reportSDoc "tc.instance" 20 $               text "instance search: checking" <+> prettyTCM t''               <+> text "<=" <+> prettyTCM t-            ctxElims <- map Apply <$> getContextArgs+            reportSDoc "tc.instance" 70 $ vcat+              [ text "instance search: checking (raw)"+              , nest 4 $ pretty t''+              , nest 2 $ text "<="+              , nest 4 $ pretty t+              ]             v <- (`applyDroppingParameters` args) =<< reduce term             reportSDoc "tc.instance" 15 $ vcat               [ text "instance search: attempting"               , nest 2 $ prettyTCM m <+> text ":=" <+> prettyTCM v               ]+            reportSDoc "tc.instance" 70 $ nest 2 $+              text "candidate v = " <+> pretty v             -- if constraints remain, we abort, but keep the candidate             -- Jesper, 05-12-2014: When we abort, we should add a constraint to             -- instantiate the meta at a later time (see issue 1377).+            ctxElims <- map Apply <$> getContextArgs             guardConstraint (ValueCmp CmpEq t'' (MetaV m ctxElims) v) $ leqType t'' t             -- make a pass over constraints, to detect cases where some are made             -- unsolvable by the assignment, but don't do this for FindInScope's@@ -553,7 +578,7 @@     Con c ci [] -> do       def <- theDef <$> getConInfo c       case def of-        Constructor {conPars = n} -> return $ Con c ci (genericDrop n vs)+        Constructor {conPars = n} -> return $ Con c ci (drop n vs)         _ -> __IMPOSSIBLE__     Def f [] -> do       mp <- isProjection f
src/full/Agda/TypeChecking/Irrelevance.hs view
@@ -4,6 +4,7 @@ -} module Agda.TypeChecking.Irrelevance where +import Control.Arrow (first, second) import Control.Applicative import Control.Monad.Reader @@ -50,7 +51,7 @@ workOnTypes' :: Bool -> TCM a -> TCM a workOnTypes' experimental cont = modifyContext (modifyContextEntries $ mapRelevance f) cont   where-    f | experimental = irrToNonStrict+    f | experimental = irrToNonStrict . nonStrictToRel       | otherwise    = nonStrictToRel  -- | (Conditionally) wake up irrelevant variables and make them relevant.@@ -63,17 +64,24 @@     Relevant -> id     Forced{} -> id     _        -> local $ \ e -> e-      { envContext   = modifyContextEntries (inverseApplyRelevance rel) (envContext e)-      , envLetBindings = Map.map-          (fmap $ \ (t, a) -> (t, inverseApplyRelevance rel a))-          (envLetBindings e)+      { envContext     = modifyContextEntries      (inverseApplyRelevance rel) (envContext e)+      , envLetBindings = (Map.map . fmap . second) (inverseApplyRelevance rel) (envLetBindings e)                                                   -- enable local  irr. defs-      , envRelevance = composeRelevance rel (envRelevance e)+      , envRelevance   = composeRelevance rel (envRelevance e)                                                   -- enable global irr. defs       } --- | Wake up irrelevant variables and make them relevant.  For instance,---   in an irrelevant function argument otherwise irrelevant variables---   may be used, so they are awoken before type checking the argument.+-- | Wake up irrelevant variables and make them relevant. This is used+--   when type checking terms in a hole, in which case you want to be able to+--   (for instance) infer the type of an irrelevant variable. In the course+--   of type checking an irrelevant function argument 'applyRelevanceToContext'+--   is used instead, which also sets the context relevance to 'Irrelevant'.+--   This is not the right thing to do when type checking interactively in a+--   hole since it also marks all metas created during type checking as+--   irrelevant (issue #2568). wakeIrrelevantVars :: TCM a -> TCM a-wakeIrrelevantVars = applyRelevanceToContext Irrelevant+wakeIrrelevantVars = local $ \ e -> e+  { envContext     = modifyContextEntries      (inverseApplyRelevance Irrelevant) (envContext e)+  , envLetBindings = (Map.map . fmap . second) (inverseApplyRelevance Irrelevant) (envLetBindings e)+  }+
src/full/Agda/TypeChecking/Level.hs view
@@ -4,7 +4,7 @@  import Control.Applicative import Data.Maybe-import Data.List as List+import qualified Data.List as List import Data.Traversable (Traversable,traverse)  import Agda.Syntax.Common@@ -90,8 +90,8 @@     as  -> foldr1 max as  unPlusV :: Term -> (Term -> Term) -> PlusLevel -> Term-unPlusV zer suc (ClosedLevel n) = foldr (.) id (genericReplicate n suc) zer-unPlusV _   suc (Plus n a)      = foldr (.) id (genericReplicate n suc) (unLevelAtom a)+unPlusV zer suc (ClosedLevel n) = foldr (.) id (List.genericReplicate n suc) zer+unPlusV _   suc (Plus n a)      = foldr (.) id (List.genericReplicate n suc) (unLevelAtom a)  maybePrimCon :: TCM Term -> TCM (Maybe ConHead) maybePrimCon prim = tryMaybe $ do
src/full/Agda/TypeChecking/LevelConstraints.hs view
@@ -2,7 +2,7 @@  module Agda.TypeChecking.LevelConstraints ( simplifyLevelConstraint ) where -import Data.List as List+import qualified Data.List as List import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Substitute@@ -35,8 +35,8 @@   | length xs == length ys = (a, b) == applySubst rho (c, d)   | otherwise              = False   where-    free :: Free' a [Int] => a -> [Int]-    free = nub . runFree ((:[]) . fst) IgnoreNot+    free :: Free a => a -> [Int]+    free = List.nub . runFree (:[]) IgnoreNot  -- Note: use a list to preserve order of variables     xs  = free (a, b)     ys  = free (c, d)     rho = mkSub $ List.sort $ zip ys xs
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -8,7 +8,6 @@ import Control.Monad.Reader  import Data.Function-import Data.List hiding (sort, null) import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Foldable as Fold@@ -40,9 +39,6 @@  import Agda.Utils.Except   ( ExceptT-#if !MIN_VERSION_transformers(0,4,1)-  , Error(noMsg)-#endif   , MonadError(throwError)   , runExceptT   )@@ -67,7 +63,7 @@ --   @reverse@ is necessary because we are directly abstracting over the list. -- findIdx :: Eq a => [a] -> a -> Maybe Int-findIdx vs v = findIndex (==v) (reverse vs)+findIdx vs v = List.findIndex (==v) (reverse vs)  -- | Check whether a meta variable is a place holder for a blocked term. isBlockedTerm :: MetaId -> TCM Bool@@ -128,19 +124,13 @@     -- dontAssignMetas $ do     --   checkInternal t . jMetaType . mvJudgement =<< lookupMeta x -    let i = metaInstance tel $ killRange v-    verboseS "profile.metas" 10 $ liftTCM $ tickMax "max-open-metas" . size =<< getOpenMetas-    modifyMetaStore $ ins x i+    verboseS "profile.metas" 10 $ liftTCM $ tickMax "max-open-metas" . (fromIntegral . size) =<< getOpenMetas+    modifyMetaStore $ ins x $ InstV tel $ killRange v     etaExpandListeners x     wakeupConstraints x     reportSLn "tc.meta.assign" 20 $ "completed assignment of " ++ prettyShow x   where-    metaInstance tel v = InstV tel v-    ins x i store = Map.adjust (inst i) x store-    inst i mv = mv { mvInstantiation = i }--    -- Andreas, 2013-10-25 hack to fool the unused-imports-checking-Nazi-    -- phantomUseToOverruleStrictImportsChecking = checkInternal+    ins x i = Map.adjust (\ mv -> mv { mvInstantiation = i }) x  -- * Creating meta variables. @@ -190,15 +180,11 @@  -- | @newIFSMeta s t cands@ creates a new "implicit from scope" metavariable --   of type the output type of @t@ with name suggestion @s@.---   If @t@ is a function type, then insert enough---   lambdas in front of it. newIFSMeta :: MetaNameSuggestion -> Type -> TCM (MetaId, Term) newIFSMeta s t = do-  TelV tel t' <- telView t-  addContext tel $ do-    vs  <- getContextArgs-    ctx <- getContextTelescope-    mapSnd (teleLam tel) <$> newIFSMetaCtx s (telePi_ ctx t') vs+  vs  <- getContextArgs+  ctx <- getContextTelescope+  newIFSMetaCtx s (telePi_ ctx t) vs  newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> TCM (MetaId, Term) newIFSMetaCtx s t vs = do@@ -214,7 +200,11 @@   reportSDoc "tc.meta.new" 50 $ fsep     [ nest 2 $ pretty x <+> text ":" <+> prettyTCM t     ]-  addConstraint $ FindInScope x Nothing Nothing+  let c = FindInScope x Nothing Nothing+  -- If we're not already solving instance constraints we should add this+  -- to the awake constraints to make sure we don't forget about it. If we+  -- are solving constraints it will get woken up later (see #2690)+  ifM isSolvingConstraints (addConstraint c) (addAwakeConstraint' c)   etaExpandMetaSafe x   return (x, MetaV x $ map Apply vs) @@ -319,7 +309,7 @@   return $ Con con ConOSystem fields  newQuestionMark :: InteractionId -> Type -> TCM (MetaId, Term)-newQuestionMark = newQuestionMark' $ newValueMeta' DontRunMetaOccursCheck+newQuestionMark = newQuestionMark' $ newValueMeta' RunMetaOccursCheck  newQuestionMark' :: (Type -> TCM (MetaId, Term)) -> InteractionId -> Type -> TCM (MetaId, Term) newQuestionMark' new ii t = do@@ -469,7 +459,7 @@ -- | Eta expand a metavariable, if it is of the specified kind. --   Don't do anything if the metavariable is a blocked term. etaExpandMeta :: [MetaKind] -> MetaId -> TCM ()-etaExpandMeta kinds m = whenM (isEtaExpandable kinds m) $ do+etaExpandMeta kinds m = whenM (asks envAssignMetas `and2M` isEtaExpandable kinds m) $ do   verboseBracket "tc.meta.eta" 20 ("etaExpandMeta " ++ prettyShow m) $ do     let waitFor x = do           reportSDoc "tc.meta.eta" 20 $ do@@ -595,8 +585,12 @@   -- arguments to definitions as flexible), if that fails it tries again   -- with full unfolding.   v <- instantiate v-  reportSLn "tc.meta.assign" 50 $ "MetaVars.assign: assigning to " ++ show v+  reportSDoc "tc.meta.assign" 45 $+    text "MetaVars.assign: assigning to " <+> prettyTCM v +  reportSLn "tc.meta.assign" 75 $+    "MetaVars.assign: assigning to " ++ show v+   case (ignoreSharing v, mvJudgement mvar) of       (Sort Inf, HasType{}) -> typeError SetOmegaNotValidType       _                     -> return ()@@ -629,8 +623,22 @@     -- args <- etaContract =<< normalise args      -- Also, try to expand away projected vars in meta args.+    reportSDoc "tc.meta.assign.proj" 45 $ do+      cxt <- getContextTelescope+      vcat+        [ text "context before projection expansion"+        , nest 2 $ inTopContext $ prettyTCM cxt+        ]+     expandProjectedVars args v $ \ args v -> do +      reportSDoc "tc.meta.assign.proj" 45 $ do+        cxt <- getContextTelescope+        vcat+          [ text "context after projection expansion"+          , nest 2 $ inTopContext $ prettyTCM cxt+          ]+       -- If we had the type here we could save the work we put       -- into expanding projected variables.       -- catchConstraint (ValueCmp CmpEq ? (MetaV m $ map Apply args) v) $ do@@ -641,16 +649,12 @@        (relVL, irrVL) <- do         -- Andreas, 2016-11-03 #2211 attempt to do s.th. for unused-        if False -- irrelevantOrUnused $ getMetaRelevance mvar+        if False -- irrelevant $ getMetaRelevance mvar           then do             reportSDoc "tc.meta.assign" 25 $ text "meta is irrelevant or unused"             return (Set.toList $ allFreeVars args, empty)           else do-            -- Andreas, 2016-11-03, issue #2211-            -- treating UnusedArg as Irrelevant bears trouble-            -- since the UnusedArg info is not consistently present-            -- Thus, make sure we include the "unused" variables.-            let relVL = Set.toList $ allRelevantOrUnusedVars args+            let relVL = Set.toList $ allRelevantVars args             -- Andreas, 2011-10-06 only irrelevant vars that are direct             -- arguments to the meta, hence, can be abstracted over, may             -- appear on the rhs.  (test/fail/Issue483b)@@ -663,7 +667,7 @@                 fromIrrVar _ = return []             irrVL <- concat <$> mapM fromIrrVar                        [ v | Arg info v <- args, isIrrelevant info ]-                          -- irrelevantOrUnused (getRelevance info) ]+                          -- irrelevant (getRelevance info) ]             return (relVL, irrVL)       reportSDoc "tc.meta.assign" 20 $           let pr (Var n []) = text (show n)@@ -907,8 +911,22 @@        patternViolation -- WAS: __IMPOSSIBLE__      -- Perform the assignment (and wake constraints).++    let vsol = abstract tel' v'+    -- -- Andreas, 2013-10-25 double check solution before assigning+    -- -- Andreas, 2017-07-28+    -- m <- lookupMeta x+    -- case mvJudgement m of+    --   IsSort{}    -> return ()  -- skip double check since type of meta is not accurate+    --   HasType _ a -> do+    --     reportSDoc "tc.meta.check" 30 $ vcat+    --       [ text "double checking solution"+    --       , nest 2 $ prettyTCM vsol <+> text " : " <+> prettyTCM a+    --       ]+    --     dontAssignMetas $ checkInternal vsol a  -- This can crash at assignTerm'!+     reportSDoc "tc.meta.assign" 10 $-      text "solving" <+> prettyTCM x <+> text ":=" <+> prettyTCM (abstract tel' v')+      text "solving" <+> prettyTCM x <+> text ":=" <+> prettyTCM vsol     assignTerm x (telToArgs tel') v'  @@ -991,16 +1009,12 @@  data ProjVarExc = ProjVarExc Int [(ProjOrigin, QName)] --- ASR (17 June 2015). Unused Error instance.--- instance Error ProjVarExc where---   noMsg = __IMPOSSIBLE__- instance NoProjectedVar Term where   noProjectedVar t =     case ignoreSharing t of       Var i es         | qs@(_:_) <- takeWhileJust id $ map isProjElim es -> Left $ ProjVarExc i qs-      -- Andreas, 2015-09-12 Issue 1316:+      -- Andreas, 2015-09-12 Issue #1316:       -- Also look in inductive record constructors       Con (ConHead _ Inductive (_:_)) _ vs -> noProjectedVar vs       _ -> return ()@@ -1071,7 +1085,7 @@ --   Otherwise, raise the error. checkLinearity :: SubstCand -> ExceptT () TCM SubstCand checkLinearity ids0 = do-  let ids = sortBy (compare `on` fst) ids0  -- see issue 920+  let ids = List.sortBy (compare `on` fst) ids0  -- see issue 920   let grps = groupOn fst ids   concat <$> mapM makeLinear grps   where@@ -1094,11 +1108,6 @@   | NeutralArg                -- ^ A potentially neutral arg: can't invert, but can try pruning.   | ProjectedVar Int [(ProjOrigin, QName)]  -- ^ Try to eta-expand var to remove projs. -#if !MIN_VERSION_transformers(0,4,1)-instance Error InvertExcept where-  noMsg = CantInvert-#endif- -- | Check that arguments @args@ to a metavar are in pattern fragment. --   Assumes all arguments already in whnf and eta-reduced. --   Parameters are represented as @Var@s so @checkArgs@ really@@ -1137,10 +1146,6 @@         Arg info (Con c ci vs) -> do           let fallback                | isIrrelevant info = return vars-                 -- Andreas, 2016-11-03, issue #2211-                 -- treating UnusedArg as Irrelevant bears trouble-                 -- since the UnusedArg info is not consistently present-                 -- irrelevantOrUnused (getRelevance info) = return vars                | otherwise                              = failure           isRC <- lift $ isRecordConstructor $ conName c           case isRC of@@ -1151,7 +1156,6 @@                        { argInfoHiding       = min (getHiding info) (getHiding info')                        , argInfoRelevance    = max (getRelevance info) (getRelevance info')                        , argInfoOrigin       = min (getOrigin info) (getOrigin info')-                       , argInfoOverlappable = False                        }                 res <- loop $ zipWith aux vs fs                 return $ res `append` vars@@ -1161,10 +1165,6 @@          -- An irrelevant argument which is not an irrefutable pattern is dropped         Arg info _ | isIrrelevant info -> return vars-          -- Andreas, 2016-11-03, issue #2211-          -- treating UnusedArg as Irrelevant bears trouble-          -- since the UnusedArg info is not consistently present-          -- irrelevantOrUnused (getRelevance info) -> return vars         -- Andreas, 2013-10-29         -- An irrelevant part can also be marked by a DontCare         -- (coming from an irrelevant projection), see Issue 927:@@ -1189,7 +1189,7 @@      -- adding an irrelevant entry only if not present     cons :: (Arg Nat, Term) -> Res -> Res-    cons a@(Arg (ArgInfo _ Irrelevant _ _) i, t) vars    -- TODO? UnusedArg?!+    cons a@(Arg (ArgInfo _ Irrelevant _) i, t) vars       | any ((i==) . unArg . fst) vars  = vars       | otherwise                       = a : vars     -- adding a relevant entry:
src/full/Agda/TypeChecking/MetaVars/Mention.hs view
@@ -94,7 +94,7 @@     TypeCmp _ a b       -> mm (a, b)     TelCmp a b _ u v    -> mm ((a, b), (u, v))     SortCmp _ a b       -> mm (a, b)-    Guarded c _         -> mm c+    Guarded{}           -> False  -- This gets woken up when the problem it's guarded by is solved     UnBlock _           -> True   -- this might be a postponed typechecking                                   -- problem and we don't have a handle on                                   -- what metas it depends on
src/full/Agda/TypeChecking/MetaVars/Occurs.hs view
@@ -256,7 +256,11 @@             if (i `allowedVar` xs) then Var i <$> occ (weakly ctx) es else do               -- if the offending variable is of singleton type,               -- eta-expand it away-              isST <- isSingletonType =<< typeOfBV i+              reportSDoc "tc.meta.occurs" 35 $ text "offending variable: " <+> prettyTCM (var i)+              t <-  typeOfBV i+              reportSDoc "tc.meta.occurs" 35 $ nest 2 $ text "of type " <+> prettyTCM t+              isST <- isSingletonType t+              reportSDoc "tc.meta.occurs" 35 $ nest 2 $ text "(after singleton test)"               case isST of                 -- cannot decide, blocked by meta-var                 Left mid -> patternViolation' 70 $ "Disallowed var " ++ show i ++ " not obviously singleton"@@ -486,7 +490,6 @@       [ text "attempting kills"       , nest 2 $ vcat         [ text "m'    =" <+> pretty m'-        -- , text "xs    =" <+> text (show xs)         , text "xs    =" <+> prettyList (map (prettyTCM . var) xs)         , text "vs    =" <+> prettyList (map prettyTCM vs)         , text "kills =" <+> text (show kills)@@ -546,7 +549,7 @@   def <- getConstInfo f   if defMatchable def then no else do   case theDef def of-    AbstractDefn -> yes+    AbstractDefn{} -> yes     Axiom{}    -> yes     Datatype{} -> yes     Record{}   -> yes@@ -643,7 +646,6 @@   foldRigid f a =     case getRelevance a of       Irrelevant -> mempty-      UnusedArg  -> mempty       _          -> foldRigid f $ unArg a  instance FoldRigid a => FoldRigid (Dom a) where
src/full/Agda/TypeChecking/Monad.hs view
@@ -3,6 +3,7 @@     , module Agda.TypeChecking.Monad.Closure     , module Agda.TypeChecking.Monad.Constraints     , module Agda.TypeChecking.Monad.Context+    , module Agda.TypeChecking.Monad.Debug     , module Agda.TypeChecking.Monad.Env     , module Agda.TypeChecking.Monad.Imports     , module Agda.TypeChecking.Monad.Local@@ -23,6 +24,7 @@ import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Constraints import Agda.TypeChecking.Monad.Context+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Env import Agda.TypeChecking.Monad.Imports import Agda.TypeChecking.Monad.Local
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -2,8 +2,6 @@ {-# LANGUAGE CPP                        #-} {-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ScopedTypeVariables        #-}-{-# LANGUAGE UndecidableInstances       #-}  module Agda.TypeChecking.Monad.Base where @@ -28,6 +26,7 @@ import Data.Set (Set) import qualified Data.Set as Set -- hiding (singleton, null, empty) import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))+import Data.Data (Data, toConstr) import Data.Typeable (Typeable) import Data.Foldable (Foldable) import Data.Traversable@@ -40,12 +39,13 @@ import Agda.Syntax.Concrete (TopLevelModuleName) import Agda.Syntax.Common import qualified Agda.Syntax.Concrete as C-import qualified Agda.Syntax.Concrete.Definitions as D+import Agda.Syntax.Concrete.Definitions (NiceDeclaration, DeclarationWarning) import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract (AllNames) import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern () import Agda.Syntax.Internal.Generic (TermLike(..))+import Agda.Syntax.Literal import Agda.Syntax.Parser (PM(..), ParseWarning, runPMIO) import Agda.Syntax.Treeless (Compiled) import Agda.Syntax.Fixity@@ -55,17 +55,17 @@  import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Positivity.Occurrence-import Agda.TypeChecking.Free.Lazy (Free'(freeVars'), bind', bind)+import Agda.TypeChecking.Free.Lazy (Free(freeVars'), bind', bind) +import {-# SOURCE #-} Agda.Compiler.Backend+ -- import {-# SOURCE #-} Agda.Interaction.FindFile import Agda.Interaction.Options import Agda.Interaction.Response-  (InteractionOutputCallback, defaultInteractionOutputCallback)+  (InteractionOutputCallback, defaultInteractionOutputCallback, Response(..)) import Agda.Interaction.Highlighting.Precise   (CompressedFile, HighlightingInfo) -import qualified Agda.Compiler.UHC.Pragmas.Base as CR- import Agda.Utils.Except   ( Error(strMsg)   , ExceptT@@ -85,8 +85,10 @@ import Agda.Utils.Null import Agda.Utils.Permutation import Agda.Utils.Pretty hiding ((<>))+import qualified Agda.Utils.Pretty as P import Agda.Utils.Singleton import Agda.Utils.Functor+import Agda.Utils.Function  #include "undefined.h" import Agda.Utils.Impossible@@ -103,6 +105,9 @@   , stPersistentState :: !PersistentTCState     -- ^ State which is forever, like a diamond.   }+#if __GLASGOW_HASKELL__ <= 708+  deriving Typeable+#endif  class Monad m => ReadTCState m where   getTCState :: m TCState@@ -133,14 +138,9 @@   , stPreImportedDisplayForms :: !DisplayForms     -- ^ Display forms added by someone else to imported identifiers   , stPreImportedInstanceDefs :: !InstanceTable-  , stPreHaskellImports     :: !(Set String)-    -- ^ Imports that should be generated by the compiler / MAlonzo-    -- (this includes imports from imported modules).-  , stPreHaskellImportsUHC  :: !(Set String)-    -- ^ Imports that should be generated by the compiler / UHC backend-    -- (this includes imports from imported modules).-  , stPreHaskellCode        :: ![String]-    -- ^ Inline Haskell code that should be inserted by the GHC backend+  , stPreForeignCode        :: !(Map BackendName [ForeignCode])+    -- ^ @{-# FOREIGN #-}@ code that should be included in the compiled output.+    -- Does not include code for imported modules.   , stPreFreshInteractionId :: !InteractionId   } @@ -155,8 +155,6 @@     --   for each @'A.AmbiguousQName'@ already passed by the type checker.   , stPostMetaStore           :: !MetaStore   , stPostInteractionPoints   :: !InteractionPoints -- scope checker first-  , stPostSolvedInteractionPoints :: !InteractionPoints-    -- ^ Interaction points that have been filled by a give or solve action.   , stPostAwakeConstraints    :: !Constraints   , stPostSleepingConstraints :: !Constraints   , stPostDirty               :: !Bool -- local@@ -219,6 +217,8 @@   , stLoadedFileCache   :: !(Maybe LoadedFileCache)     -- ^ Cached typechecking state from the last loaded file.     --   Should be Nothing when checking imports.+  , stPersistBackends   :: [Backend]+    -- ^ Current backends with their options   }  data LoadedFileCache = LoadedFileCache@@ -262,6 +262,7 @@   , stBenchmark                 = empty   , stAccumStatistics           = Map.empty   , stLoadedFileCache           = Nothing+  , stPersistBackends           = []   }  -- | Empty state of type checker.@@ -280,9 +281,7 @@   , stPreImportedBuiltins     = Map.empty   , stPreImportedDisplayForms = HMap.empty   , stPreImportedInstanceDefs = Map.empty-  , stPreHaskellImports       = Set.empty-  , stPreHaskellImportsUHC    = Set.empty-  , stPreHaskellCode          = []+  , stPreForeignCode          = Map.empty   , stPreFreshInteractionId   = 0   } @@ -292,7 +291,6 @@   , stPostDisambiguatedNames   = IntMap.empty   , stPostMetaStore            = Map.empty   , stPostInteractionPoints    = Map.empty-  , stPostSolvedInteractionPoints = Map.empty   , stPostAwakeConstraints     = []   , stPostSleepingConstraints  = []   , stPostDirty                = False@@ -374,26 +372,21 @@   f (stPreImportedBuiltins (stPreScopeState s)) <&>   \x -> s {stPreScopeState = (stPreScopeState s) {stPreImportedBuiltins = x}} -stHaskellImports :: Lens' (Set String) TCState-stHaskellImports f s =-  f (stPreHaskellImports (stPreScopeState s)) <&>-  \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellImports = x}}--stHaskellImportsUHC :: Lens' (Set String) TCState-stHaskellImportsUHC f s =-  f (stPreHaskellImportsUHC (stPreScopeState s)) <&>-  \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellImportsUHC = x}}--stHaskellCode :: Lens' [String] TCState-stHaskellCode f s =-  f (stPreHaskellCode (stPreScopeState s)) <&>-  \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellCode = x}}+stForeignCode :: Lens' (Map BackendName [ForeignCode]) TCState+stForeignCode f s =+  f (stPreForeignCode (stPreScopeState s)) <&>+  \x -> s {stPreScopeState = (stPreScopeState s) {stPreForeignCode = x}}  stFreshInteractionId :: Lens' InteractionId TCState stFreshInteractionId f s =   f (stPreFreshInteractionId (stPreScopeState s)) <&>   \x -> s {stPreScopeState = (stPreScopeState s) {stPreFreshInteractionId = x}} +stBackends :: Lens' [Backend] TCState+stBackends f s =+  f (stPersistBackends (stPersistentState s)) <&>+  \x -> s {stPersistentState = (stPersistentState s) {stPersistBackends = x}}+ stFreshNameId :: Lens' NameId TCState stFreshNameId f s =   f (stPostFreshNameId (stPostScopeState s)) <&>@@ -419,12 +412,6 @@   f (stPostInteractionPoints (stPostScopeState s)) <&>   \x -> s {stPostScopeState = (stPostScopeState s) {stPostInteractionPoints = x}} -stSolvedInteractionPoints :: Lens' InteractionPoints TCState-stSolvedInteractionPoints f s =-  f (stPostSolvedInteractionPoints (stPostScopeState s)) <&>-  \ x -> s {stPostScopeState = (stPostScopeState s)-             {stPostSolvedInteractionPoints = x}}- stAwakeConstraints :: Lens' Constraints TCState stAwakeConstraints f s =   f (stPostAwakeConstraints (stPostScopeState s)) <&>@@ -570,7 +557,7 @@   freshLens = stFreshInt  newtype ProblemId = ProblemId Nat-  deriving (Typeable, Eq, Ord, Enum, Real, Integral, Num)+  deriving (Typeable, Data, Eq, Ord, Enum, Real, Integral, Num)  -- TODO: 'Show' should output Haskell-parseable representations. -- The following instance is deprecated, and Pretty[TCM] should be used@@ -579,6 +566,7 @@ -- ASR (28 December 2014). This instance is not used anymore (module -- the test suite) when reporting errors. See Issue 1293. +-- This particular Show instance is ok because of the Num instance. instance Show ProblemId where   show (ProblemId n) = show n @@ -588,22 +576,22 @@ instance HasFresh ProblemId where   freshLens = stFreshProblemId -freshName :: (MonadState TCState m, HasFresh NameId) => Range -> String -> m Name+freshName :: MonadState TCState m => Range -> String -> m Name freshName r s = do   i <- fresh   return $ mkName r i s -freshNoName :: (MonadState TCState m, HasFresh NameId) => Range -> m Name+freshNoName :: MonadState TCState m => Range -> m Name freshNoName r =     do  i <- fresh         return $ Name i (C.NoName noRange i) r noFixity' -freshNoName_ :: (MonadState TCState m, HasFresh NameId) => m Name+freshNoName_ :: MonadState TCState m => m Name freshNoName_ = freshNoName noRange  -- | Create a fresh name from @a@. class FreshName a where-  freshName_ :: (MonadState TCState m, HasFresh NameId) => a -> m Name+  freshName_ :: MonadState TCState m => a -> m Name  instance FreshName (Range, String) where   freshName_ = uncurry freshName@@ -671,6 +659,9 @@ type VisitedModules = Map C.TopLevelModuleName ModuleInfo type DecodedModules = Map C.TopLevelModuleName Interface +data ForeignCode = ForeignCode Range String+  deriving (Show, Typeable)+ data Interface = Interface   { iSourceHash      :: Hash     -- ^ Hash of the source code.@@ -680,37 +671,31 @@     -- ^ Module name of this interface.   , iScope           :: Map ModuleName Scope     -- ^ Scope defined by this module.+    --+    --   Andreas, AIM XX: Too avoid duplicate serialization, this field is+    --   not serialized, so if you deserialize an interface, @iScope@+    --   will be empty.+    --   But 'constructIScope' constructs 'iScope' from 'iInsideScope'.   , iInsideScope     :: ScopeInfo     -- ^ Scope after we loaded this interface.     --   Used in 'Agda.Interaction.BasicOps.AtTopLevel'     --   and     'Agda.Interaction.CommandLine.interactionLoop'.-    ---    --   Andreas, AIM XX: For performance reason, this field is-    --   not serialized, so if you deserialize an interface, @iInsideScope@-    --   will be empty.  You need to type-check the file to get @iInsideScope@.   , iSignature       :: Signature   , iDisplayForms    :: DisplayForms     -- ^ Display forms added for imported identifiers.   , iBuiltin         :: BuiltinThings (String, QName)-  , iHaskellImports  :: Set String-                        -- ^ Haskell imports listed in-                        -- (transitively) imported modules are-                        -- not included here.-  , iHaskellImportsUHC :: Set String-                        -- ^ Haskell imports listed in-                        -- (transitively) imported modules are-                        -- not included here.-  , iHaskellCode     :: [String] -- ^ Inline Haskell code+  , iForeignCode     :: Map BackendName [ForeignCode]   , iHighlighting    :: HighlightingInfo   , iPragmaOptions   :: [OptionsPragma]                         -- ^ Pragma options set in the file.   , iPatternSyns     :: A.PatternSynDefns+  , iWarnings        :: [TCWarning]   }   deriving (Typeable, Show)  instance Pretty Interface where   pretty (Interface sourceH importedM moduleN scope insideS signature display builtin-                    haskellI haskellIUHC haskellCode highlighting pragmaO patternS) =+                    foreignCode highlighting pragmaO patternS warnings) =     hang (text "Interface") 2 $ vcat       [ text "source hash:"         <+> (pretty . show) sourceH       , text "imported modules:"    <+> (pretty . show) importedM@@ -720,12 +705,11 @@       , text "signature:"           <+> (pretty . show) signature       , text "display:"             <+> (pretty . show) display       , text "builtin:"             <+> (pretty . show) builtin-      , text "Haskell imports:"     <+> (pretty . show) haskellI-      , text "Haskell imports UHC:" <+> (pretty . show) haskellIUHC-      , text "Haskell code:"        <+> (vcat $ map (vcat . map text . lines) $ reverse haskellCode)+      , text "Foreign code:"        <+> (pretty . show) foreignCode       , text "highlighting:"        <+> (pretty . show) highlighting       , text "pragma options:"      <+> (pretty . show) pragmaO       , text "pattern syns:"        <+> (pretty . show) patternS+      , text "warnings:"            <+> (pretty . show) warnings       ]  -- | Combines the source hash and the (full) hashes of the imported modules.@@ -747,10 +731,10 @@       --   a substitution @Γ ⊢ ρ_M : Γ_M@ from the current context @Γ = envContext (clEnv)@.   , clValue            :: a   }-    deriving (Typeable, Functor, Foldable)+    deriving (Typeable, Data, Functor, Foldable)  instance Show a => Show (Closure a) where-  show cl = "Closure " ++ show (clValue cl)+  show cl = "Closure { clValue = " ++ show (clValue cl) ++ " }"  instance HasRange a => HasRange (Closure a) where     getRange = getRange . clValue@@ -770,10 +754,10 @@ type Constraints = [ProblemConstraint]  data ProblemConstraint = PConstr-  { constraintProblems :: [ProblemId]+  { constraintProblems :: Set ProblemId   , theConstraint      :: Closure Constraint   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  instance HasRange ProblemConstraint where   getRange = getRange . theConstraint@@ -798,7 +782,7 @@     --   on which the constraint may be blocked on and the third one is the list     --   of candidates (or Nothing if we haven’t determined the list of     --   candidates yet)-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  instance HasRange Constraint where   getRange (IsEmpty r t) = r@@ -815,7 +799,7 @@   getRange (FindInScope x cands) = getRange x -} -instance Free' Constraint c where+instance Free Constraint where   freeVars' c =     case c of       ValueCmp _ t u v      -> freeVars' (t, (u, v))@@ -843,22 +827,11 @@       UnBlock _              -> __IMPOSSIBLE__  -- mempty     -- Not yet implemented       Guarded c _            -> __IMPOSSIBLE__  -- foldTerm c -- Not yet implemented       FindInScope _ _ cs     -> __IMPOSSIBLE__  -- Not yet implemented-  traverseTerm f c  = __IMPOSSIBLE__ -- Not yet implemented   traverseTermM f c = __IMPOSSIBLE__ -- Not yet implemented   data Comparison = CmpEq | CmpLeq-  deriving (Eq, Typeable)---- TODO: 'Show' should output Haskell-parseable representations.--- The following instance is deprecated, and Pretty[TCM] should be used--- instead. Later, simply derive Show for this type.---- ASR (27 December 2014). This instance is not used anymore (module--- the test suite) when reporting errors. See Issue 1293.-instance Show Comparison where-  show CmpEq  = "="-  show CmpLeq = "=<"+  deriving (Eq, Typeable, Data, Show)  instance Pretty Comparison where   pretty CmpEq  = text "="@@ -866,12 +839,13 @@  -- | An extension of 'Comparison' to @>=@. data CompareDirection = DirEq | DirLeq | DirGeq-  deriving (Eq, Typeable)+  deriving (Eq, Typeable, Show) -instance Show CompareDirection where-  show DirEq  = "="-  show DirLeq = "=<"-  show DirGeq = ">="+instance Pretty CompareDirection where+  pretty = text . \case+    DirEq  -> "="+    DirLeq -> "=<"+    DirGeq -> ">="  -- | Embed 'Comparison' into 'CompareDirection'. fromCmp :: Comparison -> CompareDirection@@ -898,7 +872,7 @@  -- | A thing tagged with the context it came from. data Open a = OpenThing { openThingCtxIds :: [CtxId], openThing :: a }-    deriving (Typeable, Show, Functor)+    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  instance Decoration Open where   traverseF f (OpenThing cxt x) = OpenThing cxt <$> f x@@ -906,7 +880,7 @@ data Local a = Local ModuleName a   -- ^ Local to a given module, the value                                     -- should have module parameters as free variables.              | Global a             -- ^ Global value, should be closed.-    deriving (Typeable, Show, Functor, Foldable, Traversable)+    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  isGlobal :: Local a -> Bool isGlobal Global{} = True@@ -1009,12 +983,24 @@ -- --   Higher value means higher priority to be instantiated. newtype MetaPriority = MetaPriority Int-    deriving (Eq, Ord, Show)+    deriving ( Eq+             , Ord+             , Show+#if __GLASGOW_HASKELL__ <= 708+             , Typeable+#endif+             )  data RunMetaOccursCheck   = RunMetaOccursCheck   | DontRunMetaOccursCheck-  deriving (Eq, Ord, Show)+  deriving (Eq+           , Ord+           , Show+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  -- | @MetaInfo@ is cloned from one meta to the next during pruning. data MetaInfo = MetaInfo@@ -1025,6 +1011,9 @@     -- ^ Used for printing.     --   @Just x@ if meta-variable comes from omitted argument with name @x@.   }+#if __GLASGOW_HASKELL__ <= 708+  deriving Typeable+#endif  -- | Name suggestion for meta variable.  Empty string means no suggestion. type MetaNameSuggestion = String@@ -1037,6 +1026,7 @@  instance Pretty NamedMeta where   pretty (NamedMeta "" x) = pretty x+  pretty (NamedMeta "_" x) = pretty x   pretty (NamedMeta s  x) = text $ "_" ++ s ++ prettyShow x  type MetaStore = Map MetaId MetaVariable@@ -1087,14 +1077,21 @@ data InteractionPoint = InteractionPoint   { ipRange :: Range        -- ^ The position of the interaction point.   , ipMeta  :: Maybe MetaId -- ^ The meta variable, if any, holding the type etc.+  , ipSolved:: Bool         -- ^ Has this interaction point already been solved?   , ipClause:: IPClause       -- ^ The clause of the interaction point (if any).       --   Used for case splitting.   }+#if __GLASGOW_HASKELL__ <= 708+  deriving Typeable+#endif  instance Eq InteractionPoint where (==) = (==) `on` ipMeta  -- | Data structure managing the interaction points.+--+--   We never remove interaction points from this map, only set their+--   'ipSolved' to @True@.  (Issue #2368) type InteractionPoints = Map InteractionId InteractionPoint  -- | Which clause is an interaction point located in?@@ -1104,6 +1101,7 @@   , ipcClause   :: A.RHS  -- ^ The original AST clause rhs.   }   | IPNoClause -- ^ The interaction point is not in the rhs of a clause.+  deriving (Typeable, Data)  instance Eq IPClause where   IPNoClause     == IPNoClause       = True@@ -1119,7 +1117,7 @@       , _sigDefinitions :: Definitions       , _sigRewriteRules:: RewriteRuleMap  -- ^ The rewrite rules defined in this file.       }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  sigSections :: Lens' Sections Signature sigSections f s =@@ -1141,9 +1139,12 @@ type RewriteRuleMap = HashMap QName RewriteRules type DisplayForms = HashMap QName [LocalDisplayForm] -data Section = Section { _secTelescope :: Telescope }-  deriving (Typeable, Show)+newtype Section = Section { _secTelescope :: Telescope }+  deriving (Typeable, Data, Show) +instance Pretty Section where+  pretty = pretty . _secTelescope+ secTelescope :: Lens' Telescope Section secTelescope f s =   f (_secTelescope s) <&>@@ -1176,7 +1177,7 @@   , dfRHS      :: DisplayTerm     -- ^ Right hand side, with @n@ free variables.   }-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show)  type LocalDisplayForm = Local DisplayForm @@ -1198,18 +1199,34 @@     -- ^ @.v@.   | DTerm Term     -- ^ @v@.-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show) -instance Free' DisplayForm c where+instance Free DisplayForm where   freeVars' (Display n ps t) = bind (freeVars' ps) `mappend` bind' n (freeVars' t) -instance Free' DisplayTerm c where+instance Free DisplayTerm where   freeVars' (DWithApp t ws es) = freeVars' (t, (ws, es))   freeVars' (DCon _ _ vs)      = freeVars' vs   freeVars' (DDef _ es)        = freeVars' es   freeVars' (DDot v)           = freeVars' v   freeVars' (DTerm v)          = freeVars' v +instance Pretty DisplayTerm where+  prettyPrec p v =+    case v of+      DTerm v          -> prettyPrec p v+      DDot v           -> text "." P.<> prettyPrec 10 v+      DDef f es        -> pretty f `pApp` es+      DCon c _ vs      -> pretty (conName c) `pApp` map Apply vs+      DWithApp h ws es ->+        mparens (p > 0)+          (sep [ pretty h+              , nest 2 $ fsep [ text "|" <+> pretty w | w <- ws ] ])+        `pApp` es+    where+      pApp d els = mparens (not (null els) && p > 9) $+                   sep [d, nest 2 $ fsep (map (prettyPrec 10) els)]+ -- | By default, we have no display form. defaultDisplayForm :: QName -> [LocalDisplayForm] defaultDisplayForm c = []@@ -1219,7 +1236,7 @@  -- | Non-linear (non-constructor) first-order pattern. data NLPat-  = PVar (Maybe CtxId) !Int [Arg Int]+  = PVar !Int [Arg Int]     -- ^ Matches anything (modulo non-linearity) that only contains bound     --   variables that occur in the given arguments.   | PWild@@ -1234,13 +1251,13 @@     -- ^ Matches @x es@ where x is a lambda-bound variable   | PTerm Term     -- ^ Matches the term modulo β (ideally βη).-  deriving (Typeable, Show)+  deriving (Typeable, Data, Show) type PElims = [Elim' NLPat]  data NLPType = NLPType   { nlpTypeLevel :: NLPat  -- always PWild or PVar (with all bound variables in scope)   , nlpTypeUnEl  :: NLPat-  } deriving (Typeable, Show)+  } deriving (Typeable, Data, Show)  type RewriteRules = [RewriteRule] @@ -1250,11 +1267,11 @@                              --   where @≡@ is the rewrite relation.   , rewContext :: Telescope  -- ^ @Γ@.   , rewHead    :: QName      -- ^ @f@.-  , rewPats    :: PElims     -- ^ @Γ ⊢ ps  : t@.+  , rewPats    :: PElims     -- ^ @Γ ⊢ f ps : t@.   , rewRHS     :: Term       -- ^ @Γ ⊢ rhs : t@.   , rewType    :: Type       -- ^ @Γ ⊢ t@.   }-    deriving (Typeable, Show)+    deriving (Typeable, Data, Show)  data Definition = Defn   { defArgInfo        :: ArgInfo -- ^ Hiding should not be used.@@ -1316,9 +1333,11 @@                          -- instantiation?   , defMatchable      :: Bool     -- ^ Is the def matched against in a rewrite rule?+  , defInjective      :: Bool+    -- ^ Should the def be treated as injective by the pattern matching unifier?   , theDef            :: Defn   }-    deriving (Typeable, Show)+    deriving (Typeable, Data, Show)  theDefLens :: Lens' Defn Definition theDefLens f d = f (theDef d) <&> \ df -> d { theDef = df }@@ -1337,63 +1356,65 @@   , defInstance       = Nothing   , defCopy           = False   , defMatchable      = False+  , defInjective      = False   , theDef            = def   } -type HaskellCode = String-type HaskellType = String-type EpicCode    = String-type JSCode      = String--data HaskellRepresentation-      = HsDefn HaskellType HaskellCode-      | HsType HaskellType-  deriving (Typeable, Show)--data HaskellExport = HsExport HaskellType String deriving (Show, Typeable)--data CoreRepresentation-      = CrDefn CR.CoreExpr -- ^ Core code for functions.-      | CrType CR.CoreType -- ^ Core type for agda type.-      | CrConstr CR.CoreConstr  -- ^ Core constructor for agda constructor.-    deriving (Typeable, Show)- -- | Polarity for equality and subtype checking. data Polarity   = Covariant      -- ^ monotone   | Contravariant  -- ^ antitone   | Invariant      -- ^ no information (mixed variance)   | Nonvariant     -- ^ constant-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq) -data CompiledRepresentation = CompiledRep-  { compiledHaskell :: Maybe HaskellRepresentation-  , exportHaskell   :: Maybe HaskellExport-  , compiledEpic    :: Maybe EpicCode-  , compiledJS      :: Maybe JSCode-  , compiledCore    :: Maybe CoreRepresentation-  }-  deriving (Typeable, Show)+instance Pretty Polarity where+  pretty = text . \case+    Covariant     -> "+"+    Contravariant -> "-"+    Invariant     -> "*"+    Nonvariant    -> "_" +-- | The backends are responsible for parsing their own pragmas.+data CompilerPragma = CompilerPragma Range String+  deriving (Typeable, Data, Show, Eq)++instance HasRange CompilerPragma where+  getRange (CompilerPragma r _) = r++type BackendName    = String++-- Temporary: while we still parse the old pragmas we need to know the names of+-- the corresponding backends.+jsBackendName, ghcBackendName, uhcBackendName :: BackendName+jsBackendName  = "JS"+ghcBackendName = "GHC"+uhcBackendName = "UHC"++type CompiledRepresentation = Map BackendName [CompilerPragma]+ noCompiledRep :: CompiledRepresentation-noCompiledRep = CompiledRep Nothing Nothing Nothing Nothing Nothing+noCompiledRep = Map.empty  -- | 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)+  } deriving (Typeable, Data, Eq, Ord, Show)  -- | Additional information for projection 'Function's. data Projection = Projection-  { projProper    :: Bool-    -- ^ @False@ if only projection-like, @True@ if record projection.+  { projProper    :: Maybe QName+    -- ^ @Nothing@ if only projection-like, @Just r@ if record projection.+    --   The @r@ is the name of the record type projected from.+    --   This field is updated by module application.   , projOrig      :: QName     -- ^ The original projection name     --   (current name could be from module application).   , projFromType  :: Arg QName-    -- ^ Type projected from. Record type if @projProper = Just{}@. Also-    -- stores @ArgInfo@ of the principal argument.+    -- ^ Type projected from. Original record type if @projProper = Just{}@.+    --   Also stores @ArgInfo@ of the principal argument.+    --   This field is unchanged by module application.   , projIndex     :: Int     -- ^ Index of the record argument.     --   Start counting with 1, because 0 means that@@ -1408,24 +1429,24 @@     --   (Invariant: the number of abstractions equals 'projIndex'.)     --   In case of a projection-like function, just the function symbol     --   is returned as 'Def':  @t = \ pars -> f@.-  } deriving (Typeable, Show)+  } deriving (Typeable, Data, Show)  -- | Abstractions to build projection function (dropping parameters). newtype ProjLams = ProjLams { getProjLams :: [Arg ArgName] }-  deriving (Typeable, Show, Null)+  deriving (Typeable, Data, Show, Null)  -- | Building the projection function (which drops the parameters). projDropPars :: Projection -> ProjOrigin -> Term -- Proper projections:-projDropPars (Projection True d _ _ lams) o =+projDropPars (Projection Just{} d _ _ lams) o =   case initLast $ getProjLams lams of     Nothing -> Def d []     Just (pars, Arg i y) ->       let core = Lam i $ Abs y $ Var 0 [Proj o d] in       List.foldr (\ (Arg ai x) -> Lam ai . NoAbs x) core pars -- Projection-like functions:-projDropPars (Projection False _ _ _ lams) o | null lams = __IMPOSSIBLE__-projDropPars (Projection False d _ _ lams) o =+projDropPars (Projection Nothing _ _ _ lams) o | null lams = __IMPOSSIBLE__+projDropPars (Projection Nothing d _ _ lams) o =   List.foldr (\ (Arg ai x) -> Lam ai . NoAbs x) (Def d []) $ init $ getProjLams lams  -- | The info of the principal (record) argument.@@ -1435,9 +1456,9 @@  -- | Should a record type admit eta-equality? data EtaEquality-  = Specified !Bool  -- ^ User specifed 'eta-equality' or 'no-eta-equality'-  | Inferred !Bool   -- ^ Positivity checker inferred whether eta is safe/-  deriving (Typeable, Show, Eq)+  = Specified !Bool  -- ^ User specifed 'eta-equality' or 'no-eta-equality'.+  | Inferred !Bool   -- ^ Positivity checker inferred whether eta is safe.+  deriving (Typeable, Data, Show, Eq)  etaEqualityToBool :: EtaEquality -> Bool etaEqualityToBool (Specified b) = b@@ -1452,11 +1473,11 @@   = FunStatic  -- ^ Should calls to this function be normalised at compile-time?   | FunInline  -- ^ Should calls to this function be inlined by the compiler?   | FunMacro   -- ^ Is this function a macro?-  deriving (Typeable, Eq, Ord, Enum, Show)+  deriving (Typeable, Data, Eq, Ord, Enum, Show)  data Defn = Axiom             -- ^ Postulate.-          | AbstractDefn+          | AbstractDefn Defn             -- ^ Returned by 'getConstInfo' if definition is abstract.           | Function             { funClauses        :: [Clause]@@ -1467,9 +1488,11 @@             , funTreeless       :: Maybe Compiled               -- ^ Intermediate representation for compiler backends.             , funInv            :: FunctionInverse-            , funMutual         :: [QName]+            , funMutual         :: Maybe [QName]               -- ^ Mutually recursive functions, @data@s and @record@s.-              --   Does not include this function.+              --   Does include this function.+              --   Empty list if not recursive.+              --   @Nothing@ if not yet computed (by positivity checker).             , funAbstr          :: IsAbstract             , funDelayed        :: Delayed               -- ^ Are the clauses of this definition delayed?@@ -1501,29 +1524,47 @@             , dataClause         :: (Maybe Clause) -- ^ This might be in an instantiated module.             , dataCons           :: [QName]        -- ^ Constructor names.             , dataSort           :: Sort-            , dataMutual         :: [QName]        -- ^ Mutually recursive functions, @data@s and @record@s.  Does not include this data type.+            , dataMutual         :: Maybe [QName]+              -- ^ Mutually recursive functions, @data@s and @record@s.+              --   Does include this data type.+              --   Empty if not recursive.+              --   @Nothing@ if not yet computed (by positivity checker).             , dataAbstr          :: IsAbstract             }           | Record-            { recPars           :: Nat                  -- ^ Number of parameters.+            { recPars           :: Nat+              -- ^ Number of parameters.             , recClause         :: Maybe Clause-            , recConHead        :: ConHead              -- ^ Constructor name and fields.+              -- ^ Was this record type created by a module application?+              --   If yes, the clause is its definition (linking back to the original record type).+            , recConHead        :: ConHead+              -- ^ Constructor name and fields.             , recNamedCon       :: Bool+              -- ^ Does this record have a @constructor@?             , recFields         :: [Arg QName]-            , recTel            :: Telescope            -- ^ The record field telescope. (Includes record parameters.)-                                                        --   Note: @TelV recTel _ == telView' recConType@.-                                                        --   Thus, @recTel@ is redundant.-            , recMutual         :: [QName]              -- ^ Mutually recursive functions, @data@s and @record@s.  Does not include this record.-            , recEtaEquality'    :: EtaEquality          -- ^ Eta-expand at this record type.  @False@ for unguarded recursive records and coinductive records unless the user specifies otherwise.+              -- ^ The record field names.+            , recTel            :: Telescope+              -- ^ The record field telescope. (Includes record parameters.)+              --   Note: @TelV recTel _ == telView' recConType@.+              --   Thus, @recTel@ is redundant.+            , recMutual         :: Maybe [QName]+              -- ^ Mutually recursive functions, @data@s and @record@s.+              --   Does include this record.+              --   Empty if not recursive.+              --   @Nothing@ if not yet computed (by positivity checker).+            , recEtaEquality'    :: EtaEquality+              -- ^ Eta-expand at this record type?+              --   @False@ for unguarded recursive records and coinductive records+              --   unless the user specifies otherwise.             , recInduction      :: Maybe Induction               -- ^ 'Inductive' or 'CoInductive'?  Matters only for recursive records.               --   'Nothing' means that the user did not specify it, which is an error               --   for recursive records.-            , recRecursive      :: Bool                 -- ^ Recursive record.  Infers @recEtaEquality = False@.  Projections are not size-preserving.             , recAbstr          :: IsAbstract             }           | Constructor-            { conPars   :: Nat         -- ^ Number of parameters.+            { conPars   :: Int         -- ^ Number of parameters.+            , conArity  :: Int         -- ^ Number of arguments (excluding parameters).             , conSrcCon :: ConHead     -- ^ Name of (original) constructor and fields. (This might be in a module instance.)             , conData   :: QName       -- ^ Name of datatype or record type.             , conAbstr  :: IsAbstract@@ -1540,8 +1581,88 @@               --   @'Just' something@ for builtin functions.             }             -- ^ Primitive or builtin functions.-    deriving (Typeable, Show)+    deriving (Typeable, Data, Show) +instance Pretty Definition where+  pretty Defn{..} =+    text "Defn {" <?> vcat+      [ text "defArgInfo        =" <?> pshow defArgInfo+      , text "defName           =" <?> pretty defName+      , text "defType           =" <?> pretty defType+      , text "defPolarity       =" <?> pshow defPolarity+      , text "defArgOccurrences =" <?> pshow defArgOccurrences+      , text "defDisplay        =" <?> pshow defDisplay -- TODO: pretty DisplayForm+      , text "defMutual         =" <?> pshow defMutual+      , text "defCompiledRep    =" <?> pshow defCompiledRep+      , text "defInstance       =" <?> pshow defInstance+      , text "defCopy           =" <?> pshow defCopy+      , text "defMatchable      =" <?> pshow defMatchable+      , text "defInjective      =" <?> pshow defInjective+      , text "theDef            =" <?> pretty theDef ] <+> text "}"++instance Pretty Defn where+  pretty Axiom = text "Axiom"+  pretty (AbstractDefn def) = text "AbstractDefn" <?> parens (pretty def)+  pretty Function{..} =+    text "Function {" <?> vcat+      [ text "funClauses      =" <?> vcat (map pretty funClauses)+      , text "funCompiled     =" <?> pshow funCompiled+      , text "funTreeless     =" <?> pshow funTreeless+      , text "funInv          =" <?> pshow funInv+      , text "funMutual       =" <?> pshow funMutual+      , text "funAbstr        =" <?> pshow funAbstr+      , text "funDelayed      =" <?> pshow funDelayed+      , text "funProjection   =" <?> pshow funProjection+      , text "funFlags        =" <?> pshow funFlags+      , text "funTerminates   =" <?> pshow funTerminates+      , text "funWith         =" <?> pshow funWith+      , text "funCopatternLHS =" <?> pshow funCopatternLHS ] <?> text "}"+  pretty Datatype{..} =+    text "Datatype {" <?> vcat+      [ text "dataPars       =" <?> pshow dataPars+      , text "dataSmallPars  =" <?> pshow dataSmallPars+      , text "dataNonLinPars =" <?> pshow dataNonLinPars+      , text "dataIxs        =" <?> pshow dataIxs+      , text "dataInduction  =" <?> pshow dataInduction+      , text "dataClause     =" <?> pretty dataClause+      , text "dataCons       =" <?> pshow dataCons+      , text "dataSort       =" <?> pretty dataSort+      , text "dataMutual     =" <?> pshow dataMutual+      , text "dataAbstr      =" <?> pshow dataAbstr ] <?> text "}"+  pretty Record{..} =+    text "Record {" <?> vcat+      [ text "recPars         =" <?> pshow recPars+      , text "recClause       =" <?> pretty recClause+      , text "recConHead      =" <?> pshow recConHead+      , text "recNamedCon     =" <?> pshow recNamedCon+      , text "recFields       =" <?> pshow recFields+      , text "recTel          =" <?> pretty recTel+      , text "recMutual       =" <?> pshow recMutual+      , text "recEtaEquality' =" <?> pshow recEtaEquality'+      , text "recInduction    =" <?> pshow recInduction+      , text "recAbstr        =" <?> pshow recAbstr ] <?> text "}"+  pretty Constructor{..} =+    text "Constructor {" <?> vcat+      [ text "conPars   =" <?> pshow conPars+      , text "conArity  =" <?> pshow conArity+      , text "conSrcCon =" <?> pshow conSrcCon+      , text "conData   =" <?> pshow conData+      , text "conAbstr  =" <?> pshow conAbstr+      , text "conInd    =" <?> pshow conInd+      , text "conErased =" <?> pshow conErased ] <?> text "}"+  pretty Primitive{..} =+    text "Primitive {" <?> vcat+      [ text "primAbstr    =" <?> pshow primAbstr+      , text "primName     =" <?> pshow primName+      , text "primClauses  =" <?> pshow primClauses+      , text "primCompiled =" <?> pshow primCompiled ] <?> text "}"+++-- | Is the record type recursive?+recRecursive :: Defn -> Bool+recRecursive (Record { recMutual = Just qs }) = not $ null qs+recRecursive _ = __IMPOSSIBLE__+ recEtaEquality :: Defn -> Bool recEtaEquality = etaEqualityToBool . recEtaEquality' @@ -1552,7 +1673,7 @@   , funCompiled    = Nothing   , funTreeless    = Nothing   , funInv         = NotInjective-  , funMutual      = []+  , funMutual      = Nothing   , funAbstr       = ConcreteDef   , funDelayed     = NotDelayed   , funProjection  = Nothing@@ -1600,6 +1721,11 @@ defIsDataOrRecord Datatype{} = True defIsDataOrRecord _          = False +defConstructors :: Defn -> [QName]+defConstructors Datatype{dataCons = cs} = cs+defConstructors Record{recConHead = c} = [conName c]+defConstructors _ = __IMPOSSIBLE__+ newtype Fields = Fields [(C.Name, Type)]   deriving (Typeable, Null) @@ -1611,7 +1737,7 @@ --   (unfolding of definitions) does not count as simplifying?  data Simplification = YesSimplification | NoSimplification-  deriving (Typeable, Eq, Show)+  deriving (Typeable, Data, Eq, Show)  instance Null Simplification where   empty = NoSimplification@@ -1660,10 +1786,12 @@   = ProjectionReductions     -- ^ (Projection and) projection-like functions may be reduced.   | InlineReductions         -- ^ Functions marked INLINE may be reduced.   | CopatternReductions      -- ^ Copattern definitions may be reduced.-  | FunctionReductions       -- ^ Functions which are not projections may be reduced.+  | FunctionReductions       -- ^ Non-recursive functions and primitives may be reduced.+  | RecursiveReductions      -- ^ Even recursive functions may be reduced.   | LevelReductions          -- ^ Reduce @'Level'@ terms.-  | NonTerminatingReductions -- ^ Functions that have not passed termination checking.-  deriving (Show, Eq, Ord, Enum, Bounded)+  | UnconfirmedReductions    -- ^ Functions whose termination has not (yet) been confirmed.+  | NonTerminatingReductions -- ^ Functions that have failed termination checking.+  deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data)  type AllowedReductions = [AllowedReduction] @@ -1695,14 +1823,9 @@ defParameters Defn{theDef = Record  {recPars  = n}} = Just n defParameters _                                     = Nothing -defJSDef :: Definition -> Maybe JSCode-defJSDef = compiledJS . defCompiledRep--defEpicDef :: Definition -> Maybe EpicCode-defEpicDef = compiledEpic . defCompiledRep--defCoreDef :: Definition -> Maybe CoreRepresentation-defCoreDef = compiledCore . defCompiledRep+defCompilerPragmas :: BackendName -> Definition -> [CompilerPragma]+defCompilerPragmas b = reverse . fromMaybe [] . Map.lookup b . defCompiledRep+  -- reversed because we add new pragmas to the front of the list  -- | Are the clauses of this definition delayed? defDelayed :: Definition -> Delayed@@ -1714,6 +1837,12 @@ defNonterminating Defn{theDef = Function{funTerminates = Just False}} = True defNonterminating _                                                   = False +-- | Has the definition not termination checked or did the check fail?+defTerminationUnconfirmed :: Definition -> Bool+defTerminationUnconfirmed Defn{theDef = Function{funTerminates = Just True}} = False+defTerminationUnconfirmed Defn{theDef = Function{funTerminates = _        }} = True+defTerminationUnconfirmed _ = False+ defAbstract :: Definition -> IsAbstract defAbstract d = case theDef d of     Axiom{}                   -> ConcreteDef@@ -1733,19 +1862,25 @@ data FunctionInverse' c   = NotInjective   | Inverse (Map TermHead c)-  deriving (Typeable, Show, Functor)+  deriving (Typeable, Data, Show, Functor)  data TermHead = SortHead               | PiHead               | ConsHead QName-  deriving (Typeable, Eq, Ord, Show)+  deriving (Typeable, Data, Eq, Ord, Show) +instance Pretty TermHead where+  pretty = \case+    SortHead  -> text "SortHead"+    PiHead    -> text "PiHead"+    ConsHead q-> text "ConsHead" <+> pretty q+ --------------------------------------------------------------------------- -- ** Mutual blocks ---------------------------------------------------------------------------  newtype MutualId = MutId Int32-  deriving (Typeable, Eq, Ord, Show, Num, Enum)+  deriving (Typeable, Data, Eq, Ord, Show, Num, Enum)  --------------------------------------------------------------------------- -- ** Statistics@@ -1780,12 +1915,12 @@           | CheckWithFunctionType A.Expr           | CheckSectionApplication Range ModuleName A.ModuleApplication           | ScopeCheckExpr C.Expr-          | ScopeCheckDeclaration D.NiceDeclaration+          | ScopeCheckDeclaration NiceDeclaration           | ScopeCheckLHS C.QName C.Pattern           | NoHighlighting           | ModuleContents  -- ^ Interaction command: show module contents.           | SetRange Range  -- ^ used by 'setCurrentRange'-    deriving (Typeable)+    deriving (Typeable, Data)  instance Pretty Call where     pretty CheckClause{}             = text "CheckClause"@@ -1903,7 +2038,7 @@     -- ^ This includes both non-interactive highlighting and     -- interactive highlighting of the expression that is currently     -- being type-checked.-    deriving (Eq, Ord, Show, Read)+    deriving (Eq, Ord, Show, Read, Typeable, Data)  -- | How should highlighting be sent to the user interface? @@ -1912,19 +2047,28 @@     -- ^ Via stdout.   | Indirect     -- ^ Both via files and via stdout.-    deriving (Eq, Show, Read)+    deriving (Eq, Show, Read, Typeable, Data) +-- | @ifTopLevelAndHighlightingLevelIs l b m@ runs @m@ when we're+-- type-checking the top-level module and either the highlighting+-- level is /at least/ @l@ or @b@ is 'True'.++ifTopLevelAndHighlightingLevelIsOr ::+  MonadTCM tcm => HighlightingLevel -> Bool -> tcm () -> tcm ()+ifTopLevelAndHighlightingLevelIsOr l b m = do+  e <- ask+  when (envModuleNestingLevel e == 0 &&+        (envHighlightingLevel e >= l || b))+       m+ -- | @ifTopLevelAndHighlightingLevelIs l m@ runs @m@ when we're -- type-checking the top-level module and the highlighting level is -- /at least/ @l@.  ifTopLevelAndHighlightingLevelIs ::   MonadTCM tcm => HighlightingLevel -> tcm () -> tcm ()-ifTopLevelAndHighlightingLevelIs l m = do-  e <- ask-  when (envModuleNestingLevel e == 0 &&-        envHighlightingLevel e >= l)-       m+ifTopLevelAndHighlightingLevelIs l =+  ifTopLevelAndHighlightingLevelIsOr l False  --------------------------------------------------------------------------- -- * Type checking environment@@ -1933,7 +2077,7 @@ data ModuleParameters = ModuleParams   { mpSubstitution :: Substitution       -- ^ @Δ ⊢ σ : Γ@ for a @module M Γ@ where @Δ@ is the current context @envContext@.-  } deriving (Typeable, Show)+  } deriving (Typeable, Data, Show)  defaultModuleParameters :: ModuleParameters defaultModuleParameters = ModuleParams IdS@@ -1961,7 +2105,7 @@                 --   Everything under a @where@ will be checked with this flag on.           , envAssignMetas         :: Bool             -- ^ Are we allowed to assign metas?-          , envActiveProblems      :: [ProblemId]+          , envActiveProblems      :: Set ProblemId           , envAbstractMode        :: AbstractMode                 -- ^ When checking the typesignature of a public definition                 --   or the body of a non-abstract definition this is true.@@ -2031,7 +2175,7 @@                 -- ^ Until we get a termination checker for instance search (#1743) we                 --   limit the search depth to ensure termination.           }-    deriving (Typeable)+    deriving (Typeable, Data)  initEnv :: TCEnv initEnv = TCEnv { envContext             = []@@ -2044,7 +2188,7 @@                 , envTerminationCheck    = TerminationCheck                 , envSolvingConstraints  = False                 , envCheckingWhere       = False-                , envActiveProblems      = [0]+                , envActiveProblems      = Set.empty                 , envAssignMetas         = True                 , envAbstractMode        = ConcreteMode   -- Andreas, 2013-02-21:  This was 'AbstractMode' until now.@@ -2082,7 +2226,7 @@  data UnquoteFlags = UnquoteFlags   { _unquoteNormalise :: Bool }-  deriving (Typeable)+  deriving (Typeable, Data)  defaultUnquoteFlags :: UnquoteFlags defaultUnquoteFlags = UnquoteFlags@@ -2130,7 +2274,7 @@ eAssignMetas :: Lens' Bool TCEnv eAssignMetas f e = f (envAssignMetas e) <&> \ x -> e { envAssignMetas = x } -eActiveProblems :: Lens' [ProblemId] TCEnv+eActiveProblems :: Lens' (Set ProblemId) TCEnv eActiveProblems f e = f (envActiveProblems e) <&> \ x -> e { envActiveProblems = x }  eAbstractMode :: Lens' AbstractMode TCEnv@@ -2199,10 +2343,10 @@ data ContextEntry = Ctx { ctxId    :: CtxId                         , ctxEntry :: Dom (Name, Type)                         }-  deriving (Typeable)+  deriving (Typeable, Data)  newtype CtxId     = CtxId Nat-  deriving (Typeable, Eq, Ord, Show, Enum, Real, Integral, Num)+  deriving (Typeable, Data, Eq, Ord, Show, Enum, Real, Integral, Num)  --------------------------------------------------------------------------- -- ** Let bindings@@ -2218,7 +2362,7 @@   = AbstractMode        -- ^ Abstract things in the current module can be accessed.   | ConcreteMode        -- ^ No abstract things can be accessed.   | IgnoreAbstractMode  -- ^ All abstract things can be accessed.-  deriving (Typeable, Show, Eq)+  deriving (Typeable, Data, Show, Eq)  aDefToMode :: IsAbstract -> AbstractMode aDefToMode AbstractDef = AbstractMode@@ -2236,12 +2380,12 @@ data ExpandHidden   = ExpandLast      -- ^ Add implicit arguments in the end until type is no longer hidden 'Pi'.   | DontExpandLast  -- ^ Do not append implicit arguments.-  deriving (Eq)+  deriving (Eq, Typeable, Data)  data ExplicitToInstance   = ExplicitToInstance    -- ^ Explicit arguments are considered as instance arguments   | ExplicitStayExplicit-    deriving (Eq, Show)+    deriving (Eq, Show, Typeable, Data)  -- | A candidate solution for an instance meta is a term with its type. --   It may be the case that the candidate is not fully applied yet or@@ -2251,9 +2395,9 @@                             , candidateEti  :: ExplicitToInstance                             , candidateOverlappable :: Bool                             }-  deriving (Show)+  deriving (Show, Typeable, Data) -instance Free' Candidate c where+instance Free Candidate where   freeVars' (Candidate t u _ _) = freeVars' (t, u)  ---------------------------------------------------------------------------@@ -2263,11 +2407,13 @@ -- | A non-fatal error is an error which does not prevent us from -- checking the document further and interacting with the user. --- We keep the state for termination issues, positivity issues and--- unsolved constraints from when we encountered the warning so that--- we can print it later-data Warning =-    TerminationIssue         [TerminationError]+data Warning+  = NicifierIssue            [DeclarationWarning]+  | TerminationIssue         [TerminationError]+  | UnreachableClauses       QName [[NamedArg DeBruijnPattern]]+  | CoverageIssue            QName [(Telescope, [NamedArg DeBruijnPattern])]+  -- ^ `CoverageIssue f pss` means that `pss` are not covered in `f`+  | CoverageNoExactSplit     QName [Clause]   | NotStrictlyPositive      QName OccursWhere   | UnsolvedMetaVariables    [Range]  -- ^ Do not use directly with 'warning'   | UnsolvedInteractionMetas [Range]  -- ^ Do not use directly with 'warning'@@ -2277,21 +2423,73 @@     -- ^ In `OldBuiltin old new`, the BUILTIN old has been replaced by new   | EmptyRewritePragma     -- ^ If the user wrote just @{-# REWRITE #-}@.+  | UselessPublic+    -- ^ If the user opens a module public before the module header.+    --   (See issue #2377.)+  | UselessInline            QName+  -- Generic warnings for one-off things+  | GenericWarning           Doc+    -- ^ Harmless generic warning (not an error)+  | GenericNonFatalError     Doc+    -- ^ Generic error which doesn't abort proceedings (not a warning)+  -- Safe flag errors+  | SafeFlagPostulate C.Name+  | SafeFlagPragma [String]+  | SafeFlagNonTerminating+  | SafeFlagTerminating+  | SafeFlagPrimTrustMe+  | SafeFlagNoPositivityCheck+  | SafeFlagPolarity   | ParseWarning             ParseWarning-  deriving Show+  | DeprecationWarning String String String+    -- ^ `DeprecationWarning old new version`:+    --   `old` is deprecated, use `new` instead. This will be an error in Agda `version`.+  deriving ( Show+           , Data+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  data TCWarning   = TCWarning-    { tcWarningState   :: TCState-        -- ^ The state in which the warning was raised.-    , tcWarningClosure :: Closure Warning-        -- ^ The warning and the environment in which it was raised.+    { tcWarningRange :: Range+        -- ^ Range where the warning was raised+    , tcWarning   :: Warning+        -- ^ The warning itself+    , tcWarningPrintedWarning :: Doc+        -- ^ The warning printed in the state and environment where it was raised     }-  deriving Show+  deriving ( Show+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           ) -tcWarning :: TCWarning -> Warning-tcWarning = clValue . tcWarningClosure+tcWarningOrigin :: TCWarning -> SrcFile+tcWarningOrigin = rangeFile . tcWarningRange +instance HasRange TCWarning where+  getRange = tcWarningRange++-- used for merging lists of warnings+instance Eq TCWarning where+  x == y = equalHeadConstructors (tcWarning x) (tcWarning y)+            && getRange x == getRange y++equalHeadConstructors :: Warning -> Warning -> Bool+equalHeadConstructors = (==) `on` toConstr++getPartialDefs :: ReadTCState tcm => tcm [QName]+getPartialDefs = do+  tcst <- getTCState+  return $ catMaybes . fmap (extractQName . tcWarning)+         $ tcst ^. stTCWarnings where++    extractQName :: Warning -> Maybe QName+    extractQName (CoverageIssue f _) = Just f+    extractQName _                   = Nothing+ --------------------------------------------------------------------------- -- * Type checking errors ---------------------------------------------------------------------------@@ -2305,13 +2503,12 @@     -- ^ Range of the target function.   , callInfoCall :: Closure Term     -- ^ To be formatted representation of the call.-  } deriving Typeable+  } deriving (Typeable, Data, Show)  -- no Eq, Ord instances: too expensive! (see issues 851, 852)  -- | We only 'show' the name of the callee.-instance Show   CallInfo where show   = show . callInfoTarget-instance Pretty CallInfo where pretty = text . show+instance Pretty CallInfo where pretty = pretty . callInfoTarget instance AllNames CallInfo where allNames = singleton . callInfoTarget  -- UNUSED, but keep!@@ -2339,7 +2536,7 @@     -- automatically generated functions.)   , termErrCalls :: [CallInfo]     -- ^ The problematic call sites.-  } deriving (Typeable, Show)+  } deriving (Typeable, Data, Show)  -- | Error when splitting a pattern variable into possible constructor patterns. data SplitError@@ -2348,18 +2545,27 @@   | CoinductiveDatatype (Closure Type)  -- ^ Split on codata not allowed.   -- UNUSED, but keep!   -- -- | NoRecordConstructor Type  -- ^ record type, but no constructor-  | CantSplit+  | UnificationStuck     { cantSplitConName  :: QName        -- ^ Constructor.     , cantSplitTel      :: Telescope    -- ^ Context for indices.     , cantSplitConIdx   :: Args         -- ^ Inferred indices (from type of constructor).     , cantSplitGivenIdx :: Args         -- ^ Expected indices (from checking pattern).+    , cantSplitFailures :: [UnificationFailure] -- ^ Reason(s) why unification got stuck.     }   | GenericSplitError String   deriving (Show) -instance Error SplitError where-  strMsg = GenericSplitError+data NegativeUnification+  = UnifyConflict Telescope Term Term+  | UnifyCycle Telescope Int Term+  deriving (Show) +data UnificationFailure+  = UnifyIndicesNotVars Telescope Type Term Term Args -- ^ Failed to apply injectivity to constructor of indexed datatype+  | UnifyRecursiveEq Telescope Type Int Term          -- ^ Can't solve equation because variable occurs in (type of) lhs+  | UnifyReflexiveEq Telescope Type Term              -- ^ Can't solve reflexive equation because --without-K is enabled+  deriving (Show)+ data UnquoteError   = BadVisibility String (Arg I.Term)   | ConInsteadOfDef QName String String@@ -2369,9 +2575,6 @@   | UnquotePanic String   deriving (Show) -instance Error UnquoteError where-  strMsg msg = UnquotePanic msg- data TypeError         = InternalError String         | NotImplemented String@@ -2395,12 +2598,6 @@         | ShouldBeApplicationOf Type QName             -- ^ Expected a type to be an application of a particular datatype.         | ConstructorPatternInWrongDatatype QName QName -- ^ constructor, datatype-        | IndicesNotConstructorApplications [Arg Term] -- ^ Indices.-        | IndexVariablesNotDistinct [Nat] [Arg Term] -- ^ Variables, indices.-        | IndicesFreeInParameters [Nat] [Arg Term] [Arg Term]-          -- ^ Indices (variables), index expressions (with-          -- constructors applied to reconstructed parameters),-          -- parameters.         | CantResolveOverloadedConstructorsTargetingSameDatatype QName [QName]           -- ^ Datatype, constructors.         | DoesNotConstructAnElementOf QName Type -- ^ constructor, type@@ -2415,16 +2612,14 @@             -- ^ A function is applied to a hidden argument where a non-hidden was expected.         | WrongNamedArgument (NamedArg A.Expr)             -- ^ A function is applied to a hidden named argument it does not have.-        | WrongIrrelevanceInLambda Type-            -- ^ Expected a relevant function and found an irrelevant lambda.+        | WrongIrrelevanceInLambda+            -- ^ Wrong user-given relevance annotation in lambda.         | WrongInstanceDeclaration             -- ^ A term is declared as an instance but it’s not allowed         | HidingMismatch Hiding Hiding             -- ^ The given hiding does not correspond to the expected hiding.         | RelevanceMismatch Relevance Relevance             -- ^ The given relevance does not correspond to the expected relevane.-        | NotInductive Term-          -- ^ The term does not correspond to an inductive data type.         | UninstantiatedDotPattern A.Expr         | IlltypedPattern A.Pattern Type         | IllformedProjectionPattern A.Pattern@@ -2461,9 +2656,6 @@             -- ^ The two function types have different hiding.         | UnequalSorts Sort Sort         | UnequalBecauseOfUniverseConflict Comparison Term Term-        | HeterogeneousEquality Term Type Term Type-            -- ^ We ended up with an equality constraint where the terms-            --   have different types.  This is not supported.         | NotLeqSort Sort Sort         | MetaCannotDependOn MetaId [Nat] Nat             -- ^ The arguments are the meta variable, the parameters it can@@ -2487,28 +2679,15 @@         | DuplicateConstructors [C.Name]         | WithOnFreeVariable A.Expr Term         | UnexpectedWithPatterns [A.Pattern]-        | WithClausePatternMismatch A.Pattern Pattern+        | WithClausePatternMismatch A.Pattern (NamedArg DeBruijnPattern)         | FieldOutsideRecord         | ModuleArityMismatch A.ModuleName Telescope [NamedArg A.Expr]     -- Coverage errors-    -- TODO: Remove some of the constructors in this section, now that-    -- the SplitError constructor has been added?-        | IncompletePatternMatching Term [Elim] -- can only happen if coverage checking is switched off-        | CoverageFailure QName [[NamedArg DeBruijnPattern]]-        | UnreachableClauses QName [[NamedArg DeBruijnPattern]]-        | CoverageCantSplitOn QName Telescope Args Args-        | CoverageCantSplitIrrelevantType Type-        | CoverageCantSplitType Type-        | CoverageNoExactSplit QName Clause-        | WithoutKError Type Term Term-        | UnifyConflict ConHead ConHead-        | UnifyCycle Int Term-        | UnifyIndicesNotVars Type Term Term Args-        | UnificationRecursiveEq Type Int Term-        | UnificationStuck Telescope [Term] [Term]+-- UNUSED:        | IncompletePatternMatching Term [Elim] -- can only happen if coverage checking is switched off         | SplitError SplitError+        | ImpossibleConstructor QName NegativeUnification     -- Positivity errors-        | TooManyPolarities QName Integer+        | TooManyPolarities QName Int     -- Import errors         | LocalVsImportedModuleClash ModuleName         | SolvedButOpenHoles@@ -2529,6 +2708,7 @@           -- the include path says contains the module.     -- Scope errors         | BothWithAndRHS+        | AbstractConstructorNotInScope A.QName         | NotInScope [C.QName]         | NoSuchModule C.QName         | AmbiguousName C.QName [A.QName]@@ -2548,8 +2728,8 @@             -- ^ The expr was used in the right hand side of an implicit module             --   definition, but it wasn't of the form @m Delta@.         | NotAnExpression C.Expr-        | NotAValidLetBinding D.NiceDeclaration-        | NotValidBeforeField D.NiceDeclaration+        | NotAValidLetBinding NiceDeclaration+        | NotValidBeforeField NiceDeclaration         | NothingAppliedToHiddenArg C.Expr         | NothingAppliedToInstanceArg C.Expr     -- Pattern synonym errors@@ -2562,7 +2742,6 @@         | NoParseForLHS LHSOrPatSyn C.Pattern         | AmbiguousParseForLHS LHSOrPatSyn C.Pattern [C.Pattern]         | OperatorInformation [NotationSection] TypeError-        | OperatorChangeMessage TypeError {- UNUSED         | NoParseForPatternSynonym C.Pattern         | AmbiguousParseForPatternSynonym C.Pattern [C.Pattern]@@ -2573,14 +2752,6 @@     -- Reflection errors         | UnquoteFailed UnquoteError         | DeBruijnIndexOutOfScope Nat Telescope [Name]-    -- Safe flag errors-        | SafeFlagPostulate C.Name-        | SafeFlagPragma [String]-        | SafeFlagNonTerminating-        | SafeFlagTerminating-        | SafeFlagPrimTrustMe-        | SafeFlagNoPositivityCheck-        | SafeFlagPolarity     -- Language option errors         | NeedOptionCopatterns         | NeedOptionRewriting@@ -2593,14 +2764,6 @@ -- | Distinguish error message when parsing lhs or pattern synonym, resp. data LHSOrPatSyn = IsLHS | IsPatSyn deriving (Eq, Show) --- instance Show TypeError where---   show _ = "<TypeError>" -- TODO: more info?--#if !MIN_VERSION_transformers(0,4,1)-instance Error TypeError where-  strMsg = GenericError-#endif- -- | Type-checking errors.  data TCErr@@ -2611,7 +2774,9 @@         -- ^ The environment in which the error as raised plus the error.     }   | Exception Range Doc-  | IOException Range E.IOException+  | IOException TCState Range E.IOException+    -- ^ The first argument is the state in which the error was+    -- raised.   | PatternErr       -- ^ The exception which is usually caught.       --   Raised for pattern violations during unification ('assignV')@@ -2622,20 +2787,62 @@   strMsg = Exception noRange . text . strMsg  instance Show TCErr where-    show (TypeError _ e) = show (envRange $ clEnv e) ++ ": " ++ show (clValue e)-    show (Exception r d) = show r ++ ": " ++ render d-    show (IOException r e) = show r ++ ": " ++ show e-    show PatternErr{}  = "Pattern violation (you shouldn't see this)"+  show (TypeError _ e)     = show (envRange $ clEnv e) ++ ": " ++ show (clValue e)+  show (Exception r d)     = show r ++ ": " ++ render d+  show (IOException _ r e) = show r ++ ": " ++ show e+  show PatternErr{}        = "Pattern violation (you shouldn't see this)"  instance HasRange TCErr where-    getRange (TypeError _ cl)  = envRange $ clEnv cl-    getRange (Exception r _)   = r-    getRange (IOException r _) = r-    getRange PatternErr{}      = noRange+  getRange (TypeError _ cl)    = envRange $ clEnv cl+  getRange (Exception r _)     = r+  getRange (IOException s r _) = r+  getRange PatternErr{}        = noRange  instance E.Exception TCErr  -----------------------------------------------------------------------------+-- * Accessing options+-----------------------------------------------------------------------------++class (Functor m, Applicative m, Monad m) => HasOptions m where+  -- | Returns the pragma options which are currently in effect.+  pragmaOptions      :: m PragmaOptions+  -- | Returns the command line options which are currently in effect.+  commandLineOptions :: m CommandLineOptions++instance MonadIO m => HasOptions (TCMT m) where+  pragmaOptions = use stPragmaOptions++  commandLineOptions = do+    p  <- use stPragmaOptions+    cl <- stPersistentOptions . stPersistentState <$> get+    return $ cl { optPragmaOptions = p }++instance HasOptions m => HasOptions (ExceptT e m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++instance HasOptions m => HasOptions (ListT m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++instance HasOptions m => HasOptions (MaybeT m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++instance HasOptions m => HasOptions (ReaderT r m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++instance HasOptions m => HasOptions (StateT s m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++instance (HasOptions m, Monoid w) => HasOptions (WriterT w m) where+  pragmaOptions      = lift pragmaOptions+  commandLineOptions = lift commandLineOptions++----------------------------------------------------------------------------- -- * The reduce monad ----------------------------------------------------------------------------- @@ -2722,6 +2929,7 @@ class ( Applicative tcm, MonadIO tcm       , MonadReader TCEnv tcm       , MonadState TCState tcm+      , HasOptions tcm       ) => MonadTCM tcm where     liftTCM :: TCM a -> tcm a @@ -2743,16 +2951,6 @@             writeIORef r $ oldState { stPersistentState = stPersistentState newState }       unTCM (h err) r e --- | Parse monad--runPM :: PM a -> TCM a-runPM m = do-  (res, ws) <- runPMIO m-  mapM_ (warning . ParseWarning) ws-  case res of-    Left  e -> throwError (Exception (getRange e) (pretty e))-    Right a -> return a- -- | Interaction monad.  type IM = TCMT (Haskeline.InputT IO)@@ -2799,13 +2997,7 @@ instance MonadTCM tcm => MonadTCM (ListT tcm) where   liftTCM = lift . liftTCM -instance-#if !MIN_VERSION_transformers(0,4,1)-  (Error err, MonadTCM tcm)-#else-  MonadTCM tcm-#endif-  => MonadTCM (ExceptT err tcm) where+instance MonadTCM tcm => MonadTCM (ExceptT err tcm) where   liftTCM = lift . liftTCM  instance (Monoid w, MonadTCM tcm) => MonadTCM (WriterT w tcm) where@@ -2871,13 +3063,13 @@ instance MonadIO m => MonadIO (TCMT m) where   liftIO m = TCM $ \s e -> do                let r = envRange e-               liftIO $ wrap r $ do+               liftIO $ wrap s r $ do                  x <- m                  x `seq` return x     where-      wrap r m = E.catch m (handleIOException r)--      handleIOException r e = E.throwIO $ IOException r e+      wrap s r m = E.catch m $ \e -> do+        s <- readIORef s+        E.throwIO $ IOException s r e  -- | We store benchmark statistics in an IORef. --   This enables benchmarking pure computation, see@@ -2920,16 +3112,6 @@ typeError_ :: MonadTCM tcm => TypeError -> tcm TCErr typeError_ err = liftTCM $ TypeError <$> get <*> buildClosure err -{-# SPECIALIZE warning_ :: Warning -> TCM TCWarning #-}-warning_ :: MonadTCM tcm => Warning -> tcm TCWarning-warning_ w = liftTCM $ TCWarning <$> get <*> buildClosure w--{-# SPECIALIZE warning :: Warning -> TCM () #-}-warning :: MonadTCM tcm => Warning -> tcm ()-warning w = do-  tcwarn <- warning_ w-  stTCWarnings %= (tcwarn :)- -- | Running the type checking monad (most general form). {-# SPECIALIZE runTCM :: TCEnv -> TCState -> TCM a -> IO (a, TCState) #-} runTCM :: MonadIO m => TCEnv -> TCState -> TCMT m a -> m (a, TCState)@@ -3013,15 +3195,15 @@   killRange (Section tel) = killRange1 Section tel  instance KillRange Definition where-  killRange (Defn ai name t pols occs displ mut compiled inst copy ma def) =-    killRange11 Defn ai name t pols occs displ mut compiled inst copy ma def+  killRange (Defn ai name t pols occs displ mut compiled inst copy ma inj def) =+    killRange12 Defn ai name t pols occs displ mut compiled inst copy ma inj def     -- TODO clarify: Keep the range in the defName field?  instance KillRange CtxId where   killRange (CtxId x) = killRange1 CtxId x  instance KillRange NLPat where-  killRange (PVar x y z) = killRange3 PVar x y z+  killRange (PVar x y) = killRange2 PVar x y   killRange (PWild)    = PWild   killRange (PDef x y) = killRange2 PDef x y   killRange (PLam x y) = killRange2 PLam x y@@ -3053,12 +3235,12 @@   killRange def =     case def of       Axiom -> Axiom-      AbstractDefn -> __IMPOSSIBLE__ -- only returned by 'getConstInfo'!+      AbstractDefn{} -> __IMPOSSIBLE__ -- only returned by 'getConstInfo'!       Function cls comp tt inv mut isAbs delayed proj flags term extlam with copat ->         killRange13 Function cls comp tt inv mut isAbs delayed proj flags term extlam with copat       Datatype a b c d e f g h i j   -> killRange10 Datatype a b c d e f g h i j-      Record a b c d e f g h i j k   -> killRange11 Record a b c d e f g h i j k-      Constructor a b c d e f        -> killRange6 Constructor a b c d e f+      Record a b c d e f g h i j     -> killRange10 Record a b c d e f g h i j+      Constructor a b c d e f g      -> killRange7 Constructor a b c d e f g       Primitive a b c d              -> killRange4 Primitive a b c d  instance KillRange MutualId where
src/full/Agda/TypeChecking/Monad/Base.hs-boot view
@@ -8,6 +8,7 @@ import Agda.Syntax.Concrete.Name (TopLevelModuleName) import Agda.Utils.FileName (AbsolutePath) +data HighlightingMethod data TCEnv data TCState newtype TCMT m a = TCM { unTCM :: IORef TCState -> TCEnv -> m a }
src/full/Agda/TypeChecking/Monad/Benchmark.hs view
@@ -15,6 +15,7 @@ import Agda.Benchmarking  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import{-# SOURCE #-} Agda.TypeChecking.Monad.Options  import qualified Agda.Utils.Benchmark as B@@ -28,23 +29,50 @@ benchmarkLevel :: Int benchmarkLevel = 7 +benchmarkModulesKey :: String+benchmarkModulesKey = "profile.modules"++benchmarkModulesLevel :: Int+benchmarkModulesLevel = 10++benchmarkDefsKey :: String+benchmarkDefsKey = "profile.definitions"++benchmarkDefsLevel :: Int+benchmarkDefsLevel = 10+ -- | When verbosity is set or changes, we need to turn benchmarking on or off. updateBenchmarkingStatus :: TCM () -- {-# SPECIALIZE updateBenchmarkingStatus :: TCM () #-} -- updateBenchmarkingStatus :: (HasOptions m, MonadBench a m) => m () updateBenchmarkingStatus =-  B.setBenchmarking =<< hasVerbosity benchmarkKey benchmarkLevel+  B.setBenchmarking =<< benchmarking  -- | Check whether benchmarking is activated.-{-# SPECIALIZE benchmarking :: TCM Bool #-}-benchmarking :: MonadTCM tcm => tcm Bool-benchmarking = liftTCM $ hasVerbosity benchmarkKey benchmarkLevel+{-# SPECIALIZE benchmarking :: TCM (B.BenchmarkOn Phase) #-}+benchmarking :: MonadTCM tcm => tcm (B.BenchmarkOn Phase)+benchmarking = liftTCM $ do+  -- Ulf, 2016-12-13: Using verbosity levels to control the type of+  -- benchmarking isn't ideal, but let's stick with it for now.+  internal <- hasVerbosity benchmarkKey benchmarkLevel+  defs     <- hasVerbosity benchmarkDefsKey benchmarkDefsLevel+  modules  <- hasVerbosity benchmarkModulesKey benchmarkModulesLevel+  return $ case (internal, defs, modules) of+    (True, _, _) -> B.BenchmarkSome isInternalAccount+    (_, True, _) -> B.BenchmarkSome isDefAccount+    (_, _, True) -> B.BenchmarkSome isModuleAccount+    _            -> B.BenchmarkOff  -- | Prints the accumulated benchmark results. Does nothing if -- profiling is not activated at level 7. print :: MonadTCM tcm => tcm ()-print = liftTCM $ whenM benchmarking $ do+print = liftTCM $ whenM (B.isBenchmarkOn [] <$> benchmarking) $ do   b <- B.getBenchmark+  -- Andreas, 2017-07-29, issue #2602:+  -- The following line messes up the AgdaInfo buffer,+  -- thus, as Fredrik Forsberg suggest, I restore the original+  -- line for release 2.5.3 until a fix is found.+  -- reportSLn "" 0 $ prettyShow b   reportSLn benchmarkKey benchmarkLevel $ prettyShow b  -- -- | Bill a computation to a specific account.
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -13,6 +13,7 @@ import Agda.Syntax.Literal import Agda.Syntax.Internal as I import Agda.TypeChecking.Monad.Base+-- import Agda.TypeChecking.Functions  -- LEADS TO IMPORT CYCLE import Agda.TypeChecking.Substitute  import Agda.Utils.Except ( MonadError(catchError) )@@ -34,7 +35,7 @@ litType l = case l of   LitNat _ n    -> do     _ <- primZero-    when_ (n > 0) $ primSuc+    when (n > 0) $ void $ primSuc     el <$> primNat   LitFloat _ _  -> el <$> primFloat   LitChar _ _   -> el <$> primChar@@ -140,7 +141,7 @@     primAgdaTCMGetType, primAgdaTCMGetDefinition,     primAgdaTCMQuoteTerm, primAgdaTCMUnquoteTerm,     primAgdaTCMBlockOnMeta, primAgdaTCMCommit, primAgdaTCMIsMacro,-    primAgdaTCMWithNormalisation+    primAgdaTCMWithNormalisation, primAgdaTCMDebugPrint     :: TCM Term  primInteger      = getBuiltin builtinInteger@@ -278,6 +279,7 @@ primAgdaTCMCommit             = getBuiltin builtinAgdaTCMCommit primAgdaTCMIsMacro            = getBuiltin builtinAgdaTCMIsMacro primAgdaTCMWithNormalisation  = getBuiltin builtinAgdaTCMWithNormalisation+primAgdaTCMDebugPrint         = getBuiltin builtinAgdaTCMDebugPrint  builtinNat, builtinSuc, builtinZero, builtinNatPlus, builtinNatMinus,   builtinNatTimes, builtinNatDivSucAux, builtinNatModSucAux, builtinNatEquals,@@ -323,7 +325,7 @@   builtinAgdaTCMGetType, builtinAgdaTCMGetDefinition,   builtinAgdaTCMQuoteTerm, builtinAgdaTCMUnquoteTerm,   builtinAgdaTCMBlockOnMeta, builtinAgdaTCMCommit, builtinAgdaTCMIsMacro,-  builtinAgdaTCMWithNormalisation+  builtinAgdaTCMWithNormalisation, builtinAgdaTCMDebugPrint   :: String  builtinNat                           = "NATURAL"@@ -461,6 +463,7 @@ builtinAgdaTCMUnquoteTerm   = "AGDATCMUNQUOTETERM" builtinAgdaTCMIsMacro       = "AGDATCMISMACRO" builtinAgdaTCMWithNormalisation = "AGDATCMWITHNORMALISATION"+builtinAgdaTCMDebugPrint = "AGDATCMDEBUGPRINT"  -- | Builtins that come without a definition in Agda syntax. --   These are giving names to Agda internal concepts which@@ -513,6 +516,7 @@  -- | Get the name of the equality type. primEqualityName :: TCM QName+-- primEqualityName = getDef =<< primEquality  -- LEADS TO IMPORT CYCLE primEqualityName = do   eq <- primEquality   -- Andreas, 2014-05-17 moved this here from TC.Rules.Def@@ -527,9 +531,11 @@       lamV (Shared p) = lamV (derefPtr p)       lamV v          = ([], v)   return $ case lamV eq of-    ([Hidden, Hidden], Def equality _) -> equality-    ([Hidden],         Def equality _) -> equality-    ([],               Def equality _) -> equality+    (_, Def equality _) -> equality+  -- OLD:+  --   ([Hidden, Hidden], Def equality _) -> equality+  --   ([Hidden],         Def equality _) -> equality+  --   ([],               Def equality _) -> equality     _                                  -> __IMPOSSIBLE__  -- | Check whether the type is actually an equality (lhs ≡ rhs)@@ -541,8 +547,12 @@ equalityView t0@(El s t) = do   equality <- primEqualityName   case ignoreSharing t of-    Def equality' [ Apply level , Apply typ , Apply lhs , Apply rhs ]-      | equality' == equality -> return $ EqualityType s equality level typ lhs rhs+    Def equality' es | equality' == equality -> do+      let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+      let n = length vs+      unless (n >= 3) __IMPOSSIBLE__+      let (pars, [ typ , lhs, rhs ]) = splitAt (n-3) vs+      return $ EqualityType s equality pars typ lhs rhs     _ -> return $ OtherType t0  -- | Revert the 'EqualityView'.@@ -552,4 +562,4 @@ equalityUnview :: EqualityView -> Type equalityUnview (OtherType t) = t equalityUnview (EqualityType s equality l t lhs rhs) =-  El s $ Def equality $ map Apply [l, t, lhs, rhs]+  El s $ Def equality $ map Apply (l ++ [t, lhs, rhs])
src/full/Agda/TypeChecking/Monad/Caching.hs view
@@ -8,9 +8,10 @@   , cleanCachedLog   , cacheCurrentLog -    -- * Activating+    -- * Activating/deactivating   , activateLoadedFileCache   , cachingStarts+  , noCacheForImportedModule      -- * Restoring the 'PostScopeState'   , restorePostScopeState@@ -22,9 +23,11 @@ import Agda.Syntax.Common  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options  import Agda.Utils.Lens+import Agda.Utils.Monad  #include "undefined.h" import Agda.Utils.Impossible@@ -69,6 +72,16 @@  putCache :: Maybe LoadedFileCache -> TCM () putCache cs = modifyCache $ const cs++-- | The cache should not be used for an imported module, and it+-- should be restored after the module has been type-checked. This+-- combinator takes care of that.++noCacheForImportedModule :: TCM a -> TCM a+noCacheForImportedModule m =+  bracket_ getCache putCache $ do+    modifyCache (const Nothing)+    m  -- | Reads the next entry in the cached type check log, if present. readFromCachedLog :: TCM (Maybe (TypeCheckAction, PostScopeState))
src/full/Agda/TypeChecking/Monad/Constraints.hs view
@@ -7,10 +7,13 @@ import Control.Monad.State import Control.Monad.Reader -import Data.List as List+import qualified Data.List as List+import Data.Set (Set)+import qualified Data.Set as Set  import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Closure+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options  import Agda.Utils.Lens@@ -21,36 +24,32 @@ #include "undefined.h" import Agda.Utils.Impossible --- | Get the current problem-currentProblem :: TCM ProblemId-currentProblem = headWithDefault 0 <$> asks envActiveProblems---- | Steal all constraints belonging to the given problem and add them to the current problem.+-- | Add all constraints belonging to the given problem to the current problem(s). stealConstraints :: ProblemId -> TCM () stealConstraints pid = do-  current <- currentProblem-  reportSLn "tc.constr.steal" 50 $ "problem " ++ show current ++ " is stealing problem " ++ show pid ++ "'s constraints!"-  -- Rename @pid@ to @current@ in all constraints.-  let rename pc@(PConstr pids c) | elem pid pids = PConstr (current : pids) c-                                 | otherwise     = pc+  current <- asks envActiveProblems+  reportSLn "tc.constr.steal" 50 $ "problem " ++ show (Set.toList current) ++ " is stealing problem " ++ show pid ++ "'s constraints!"+  -- Add current to any constraint in pid.+  let rename pc@(PConstr pids c) | Set.member pid pids = PConstr (Set.union current pids) c+                                 | otherwise           = pc   -- We should never steal from an active problem.-  whenM (elem pid <$> asks envActiveProblems) __IMPOSSIBLE__+  whenM (Set.member pid <$> asks envActiveProblems) __IMPOSSIBLE__   modifyAwakeConstraints    $ List.map rename   modifySleepingConstraints $ List.map rename  solvingProblem :: ProblemId -> TCM a -> TCM a-solvingProblem pid = solvingProblems [pid]+solvingProblem pid = solvingProblems (Set.singleton pid) -solvingProblems :: [ProblemId] -> TCM a -> TCM a-solvingProblems pids m = verboseBracket "tc.constr.solve" 50 ("working on problems " ++ show pids) $ do-  x <- local (\e -> e { envActiveProblems = pids ++ envActiveProblems e }) m+solvingProblems :: Set ProblemId -> TCM a -> TCM a+solvingProblems pids m = verboseBracket "tc.constr.solve" 50 ("working on problems " ++ show (Set.toList pids)) $ do+  x <- local (\e -> e { envActiveProblems = pids `Set.union` envActiveProblems e }) m   sequence_     [ ifNotM (isProblemSolved pid)         (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.")       $ {- else -} do         reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"         wakeConstraints (return . blockedOn pid . clValue . theConstraint)-    | pid <- pids ]+    | pid <- Set.toList pids ]   return x   where     blockedOn pid (Guarded _ pid') = pid == pid'@@ -58,11 +57,11 @@  isProblemSolved :: ProblemId -> TCM Bool isProblemSolved pid =-  and2M (notElem pid <$> asks envActiveProblems)-        (all (notElem pid . constraintProblems) <$> getAllConstraints)+  and2M (not . Set.member pid <$> asks envActiveProblems)+        (all (not . Set.member pid . constraintProblems) <$> getAllConstraints)  getConstraintsForProblem :: ProblemId -> TCM Constraints-getConstraintsForProblem pid = List.filter (elem pid . constraintProblems) <$> getAllConstraints+getConstraintsForProblem pid = List.filter (Set.member pid . constraintProblems) <$> getAllConstraints  -- | Get the awake constraints getAwakeConstraints :: TCM Constraints@@ -73,8 +72,8 @@   c <- use stSleepingConstraints   (wakeup, sleepin) <- partitionM wake c   reportSLn "tc.constr.wake" 50 $-    "waking up         " ++ show (List.map constraintProblems wakeup) ++ "\n" ++-    "  still sleeping: " ++ show (List.map constraintProblems sleepin)+    "waking up         " ++ show (List.map (Set.toList . constraintProblems) wakeup) ++ "\n" +++    "  still sleeping: " ++ show (List.map (Set.toList . constraintProblems) sleepin)   modifySleepingConstraints $ const sleepin   modifyAwakeConstraints (++ wakeup) @@ -88,7 +87,7 @@ putConstraintsToSleep :: (ProblemConstraint -> Bool) -> TCM () putConstraintsToSleep sleepy = do   awakeOnes <- use stAwakeConstraints-  let (gotoSleep, stayAwake) = partition sleepy awakeOnes+  let (gotoSleep, stayAwake) = List.partition sleepy awakeOnes   modifySleepingConstraints $ (++ gotoSleep)   modifyAwakeConstraints    $ const stayAwake @@ -103,8 +102,8 @@ --   by events that would normally trigger a wakeup call. holdConstraints :: (ConstraintStatus -> ProblemConstraint -> Bool) -> TCM a -> TCM a holdConstraints p m = do-  (holdAwake, stillAwake)   <- partition (p AwakeConstraint)    <$> use stAwakeConstraints-  (holdAsleep, stillAsleep) <- partition (p SleepingConstraint) <$> use stSleepingConstraints+  (holdAwake, stillAwake)   <- List.partition (p AwakeConstraint)    <$> use stAwakeConstraints+  (holdAsleep, stillAsleep) <- List.partition (p SleepingConstraint) <$> use stSleepingConstraints   stAwakeConstraints    .= stillAwake   stSleepingConstraints .= stillAsleep   let restore = do@@ -132,21 +131,27 @@     local (\e -> e { envActiveProblems = pids', envSolvingConstraints = isSolving }) $     solvingProblems pids (f c) -buildProblemConstraint :: [ProblemId] -> Constraint -> TCM ProblemConstraint+buildProblemConstraint :: Set ProblemId -> Constraint -> TCM ProblemConstraint buildProblemConstraint pids c = PConstr pids <$> buildClosure c  buildProblemConstraint_ :: Constraint -> TCM ProblemConstraint-buildProblemConstraint_ = buildProblemConstraint []+buildProblemConstraint_ = buildProblemConstraint Set.empty  buildConstraint :: Constraint -> TCM ProblemConstraint-buildConstraint c = flip buildProblemConstraint c . nub . filter (> 0) =<< asks envActiveProblems+buildConstraint c = flip buildProblemConstraint c =<< asks envActiveProblems  -- | Add new a constraint addConstraint' :: Constraint -> TCM ()-addConstraint' c = do+addConstraint' = addConstraintTo stSleepingConstraints++addAwakeConstraint' :: Constraint -> TCM ()+addAwakeConstraint' = addConstraintTo stAwakeConstraints++addConstraintTo :: Lens' Constraints TCState -> Constraint -> TCM ()+addConstraintTo bucket c = do     pc <- build     stDirty .= True-    stSleepingConstraints %= (pc :)+    bucket %= (pc :)   where     build | isBlocking c = buildConstraint c           | otherwise    = buildProblemConstraint_ c
src/full/Agda/TypeChecking/Monad/Context.hs view
@@ -10,7 +10,7 @@ import Control.Monad.Reader import Control.Monad.State -import Data.List hiding (sort)+import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid@@ -21,15 +21,17 @@ import Agda.Syntax.Scope.Monad (getLocalVars, setLocalVars)  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Substitute import Agda.TypeChecking.Monad.Open import Agda.TypeChecking.Monad.Options  import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Functor+import Agda.Utils.Lens import Agda.Utils.List ((!!!), downFrom)+import Agda.Utils.Pretty import Agda.Utils.Size-import Agda.Utils.Lens  -- * Modifying the context @@ -85,35 +87,38 @@  -- | Apply a substitution to all module parameters. -updateModuleParameters :: MonadTCM tcm => Substitution -> tcm a -> tcm a+updateModuleParameters :: (MonadTCM tcm, MonadDebug tcm)+                       => Substitution -> tcm a -> tcm a updateModuleParameters sub ret = do   pm <- use stModuleParameters-  let showMP pref mps = intercalate "\n" $+  let showMP pref mps = List.intercalate "\n" $         [ p ++ show m ++ " : " ++ show (mpSubstitution mp)         | (p, (m, mp)) <- zip (pref : repeat (map (const ' ') pref))                               (Map.toList mps)         ]-  cxt <- reverse <$> getContext-  reportSLn "tc.cxt.param" 90 $ unlines $-    [ "updatingModuleParameters"-    , "  sub = " ++ show sub-    , "  cxt = " ++ unwords (map (show . fst . unDom) cxt)-    , showMP "  old = " pm-    ]+  verboseS "tc.cxt.param" 105 $ do+    cxt <- reverse <$> getContext+    reportSLn "tc.cxt.param" 105 $ unlines $+      [ "updatingModuleParameters"+      , "  sub = " ++ show sub+      , "  cxt (last added last in list) = " ++ unwords (map (show . fst . unDom) cxt)+      , showMP "  old = " pm+      ]   let pm' = applySubst sub pm-  reportSLn "tc.cxt.param" 90 $ showMP "  new = " pm'+  reportSLn "tc.cxt.param" 105 $ showMP "  new = " pm'   stModuleParameters .= pm'   x <- ret              -- We need to keep introduced modules around   pm1 <- use stModuleParameters   let pm'' = Map.union pm (defaultModuleParameters <$ Map.difference pm1 pm)   stModuleParameters .= pm''-  reportSLn "tc.cxt.param" 90 $ showMP "  restored = " pm''+  reportSLn "tc.cxt.param" 105 $ showMP "  restored = " pm''   return x  -- | Since the @ModuleParamDict@ is relative to the current context, --   this function should be called everytime the context is extended. ---weakenModuleParameters :: MonadTCM tcm => Nat -> tcm a -> tcm a+weakenModuleParameters :: (MonadTCM tcm, MonadDebug tcm)+                       => Nat -> tcm a -> tcm a weakenModuleParameters n = updateModuleParameters (raiseS n)  -- | Get substitution @Γ ⊢ ρ : Γm@ where @Γ@ is the current context@@ -124,9 +129,9 @@ --   This is ok for instance if we are outside module @m@ --   (in which case we have to supply all module parameters to any --   symbol defined within @m@ we want to refer).-getModuleParameterSub :: MonadTCM tcm => ModuleName -> tcm Substitution+getModuleParameterSub :: (Functor m, ReadTCState m) => ModuleName -> m Substitution getModuleParameterSub m = do-  r <- use stModuleParameters+  r <- (^. stModuleParameters) <$> getTCState   case Map.lookup m r of     Nothing -> return IdS     Just mp -> return $ mpSubstitution mp@@ -164,9 +169,14 @@ --   the current context, we need to weaken it when we --   extend the context.  This function takes care of that. ---addContext' :: (MonadTCM tcm, AddContext b) => b -> tcm a -> tcm a+addContext' :: (MonadTCM tcm, MonadDebug tcm, AddContext b)+            => b -> tcm a -> tcm a addContext' cxt = addContext cxt . weakenModuleParameters (contextSize cxt) +-- | Wrapper to tell 'addContext' not to 'unshadowName's. Used when adding a+--   user-provided, but already type checked, telescope to the context.+newtype KeepNames a = KeepNames a+ #if __GLASGOW_HASKELL__ >= 710 instance {-# OVERLAPPABLE #-} AddContext a => AddContext [a] where #else@@ -181,9 +191,12 @@  instance AddContext (Dom (Name, Type)) where   addContext = addContext . distributeF-  -- addContext dom = addCtx (fst $ unDom dom) (snd <$> dom)   contextSize _ = 1 +instance AddContext (Dom (String, Type)) where+  addContext = addContext . distributeF+  contextSize _ = 1+ instance AddContext ([Name], Dom Type) where   addContext (xs, dom) = addContext (bindsToTel' id xs dom)   contextSize (xs, _) = length xs@@ -201,9 +214,10 @@     addCtx x dom ret   contextSize _ = 1 -instance AddContext (Dom (String, Type)) where-  addContext = addContext . distributeF-  -- addContext dom = addContext (fst $ unDom dom, snd <$> dom)+instance AddContext (KeepNames String, Dom Type) where+  addContext (KeepNames s, dom) ret = do+    x <- freshName_ s+    addCtx x dom ret   contextSize _ = 1  instance AddContext (Dom Type) where@@ -222,6 +236,12 @@   addContext s = addContext (s, dummyDom)   contextSize _ = 1 +instance AddContext (KeepNames Telescope) where+  addContext (KeepNames tel) ret = loop tel where+    loop EmptyTel          = ret+    loop (ExtendTel t tel) = underAbstraction' KeepNames t tel loop+  contextSize (KeepNames tel) = size tel+ instance AddContext Telescope where   addContext tel ret = loop tel where     loop EmptyTel          = ret@@ -235,10 +255,12 @@ -- | Go under an abstraction. {-# SPECIALIZE underAbstraction :: Subst t a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-} underAbstraction :: (Subst t a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b-underAbstraction _ (NoAbs _ v) k = k v-underAbstraction t a           k = do-    x <- unshadowName =<< freshName_ (realName $ absName a)-    addContext (x, t) $ k $ absBody a+underAbstraction = underAbstraction' id++underAbstraction' :: (Subst t a, MonadTCM tcm, AddContext (name, Dom Type)) =>+                     (String -> name) -> Dom Type -> Abs a -> (a -> tcm b) -> tcm b+underAbstraction' _ _ (NoAbs _ v) k = k v+underAbstraction' wrap t a        k = addContext (wrap $ realName $ absName a, t) $ k $ absBody a   where     realName s = if isNoName s then "x" else argNameToString s @@ -266,7 +288,7 @@ -- | Get the size of the current context. {-# SPECIALIZE getContextSize :: TCM Nat #-} getContextSize :: (Applicative m, MonadReader TCEnv m) => m Nat-getContextSize = genericLength <$> asks envContext+getContextSize = length <$> asks envContext  -- | Generate @[var (n - 1), ..., var 0]@ for all declarations in the context. {-# SPECIALIZE getContextArgs :: TCM Args #-}@@ -301,7 +323,7 @@ lookupBV n = do   ctx <- getContext   let failure = fail $ "de Bruijn index out of scope: " ++ show n ++-                       " in context " ++ show (map (fst . unDom) ctx)+                       " in context " ++ prettyShow (map (fst . unDom) ctx)   maybe failure (return . fmap (raise $ n + 1)) $ ctx !!! n  {-# SPECIALIZE typeOfBV' :: Nat -> TCM (Dom Type) #-}@@ -330,11 +352,11 @@ getVarInfo x =     do  ctx <- getContext         def <- asks envLetBindings-        case findIndex ((==x) . fst . unDom) ctx of+        case List.findIndex ((==x) . fst . unDom) ctx of             Just n -> do                 t <- typeOfBV' n                 return (var n, t)             _       ->                 case Map.lookup x def of                     Just vt -> getOpen vt-                    _       -> fail $ "unbound variable " ++ show (nameConcrete x)+                    _       -> fail $ "unbound variable " ++ prettyShow (nameConcrete x)
+ src/full/Agda/TypeChecking/Monad/Debug.hs view
@@ -0,0 +1,118 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Monad.Debug where++import Control.Applicative+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Trans.Maybe+import Control.Monad.Writer++import Data.Maybe+import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))+import Data.Traversable++import {-# SOURCE #-} Agda.TypeChecking.Errors+import Agda.TypeChecking.Monad.Base+import {-# SOURCE #-} Agda.TypeChecking.Monad.Options++import Agda.Interaction.Response++import Agda.Utils.Except+import Agda.Utils.Lens+import Agda.Utils.List+import Agda.Utils.ListT+import Agda.Utils.Maybe+import Agda.Utils.Monad+import Agda.Utils.Pretty++#include "undefined.h"+import Agda.Utils.Impossible++class (Functor m, Applicative m, Monad m) => MonadDebug m where+  displayDebugMessage :: Int -> String -> m ()+  displayDebugMessage n s = traceDebugMessage n s $ return ()++  traceDebugMessage :: Int -> String -> m a -> m a+  traceDebugMessage n s cont = displayDebugMessage n s >> cont++  formatDebugMessage  :: VerboseKey -> Int -> TCM Doc -> m String++instance (MonadIO m) => MonadDebug (TCMT m) where++  displayDebugMessage n s = liftTCM $ do+    cb <- gets $ stInteractionOutputCallback . stPersistentState+    liftIO $ cb (Resp_RunningInfo n s)++  formatDebugMessage k n d = liftTCM $+    show <$> d `catchError` \ err ->+      (\ s -> (sep $ map text+                 [ "Printing debug message"+                 , k  ++ ":" ++show n+                 , "failed due to error:" ]) $$+              (nest 2 $ text s)) <$> prettyError err++instance MonadDebug m => MonadDebug (ExceptT e m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++instance MonadDebug m => MonadDebug (ListT m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++instance MonadDebug m => MonadDebug (MaybeT m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++instance MonadDebug m => MonadDebug (ReaderT r m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++instance MonadDebug m => MonadDebug (StateT s m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++instance (MonadDebug m, Monoid w) => MonadDebug (WriterT w m) where+  displayDebugMessage n s = lift $ displayDebugMessage n s+  formatDebugMessage k n d = lift $ formatDebugMessage k n d++-- | Conditionally print debug string.+{-# SPECIALIZE reportS :: VerboseKey -> Int -> String -> TCM () #-}+reportS :: (HasOptions m, MonadDebug m)+        => VerboseKey -> Int -> String -> m ()+reportS k n s = verboseS k n $ displayDebugMessage n s++-- | Conditionally println debug string.+{-# SPECIALIZE reportSLn :: VerboseKey -> Int -> String -> TCM () #-}+reportSLn :: (HasOptions m, MonadDebug m)+          => VerboseKey -> Int -> String -> m ()+reportSLn k n s = verboseS k n $+  displayDebugMessage n (s ++ "\n")++-- | Conditionally render debug 'Doc' and print it.+{-# SPECIALIZE reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM () #-}+reportSDoc :: (HasOptions m, MonadDebug m)+           => VerboseKey -> Int -> TCM Doc -> m ()+reportSDoc k n d = verboseS k n $ do+  displayDebugMessage n . (++ "\n") =<< formatDebugMessage k n d++traceSLn :: (HasOptions m, MonadDebug m)+         => VerboseKey -> Int -> String -> m a -> m a+traceSLn k n s cont = ifNotM (hasVerbosity k n) cont $ {- else -} do+  traceDebugMessage n (s ++ "\n") cont++-- | Conditionally render debug 'Doc', print it, and then continue.+traceSDoc :: (HasOptions m, MonadDebug m)+          => VerboseKey -> Int -> TCM Doc -> m a -> m a+traceSDoc k n d cont = ifNotM (hasVerbosity k n) cont $ {- else -} do+  s <- formatDebugMessage k n d+  traceDebugMessage n (s ++ "\n") cont++-- | Print brackets around debug messages issued by a computation.+{-# SPECIALIZE verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a #-}+verboseBracket :: (HasOptions m, MonadDebug m, MonadError err m)+               => VerboseKey -> Int -> String -> m a -> m a+verboseBracket k n s m = ifNotM (hasVerbosity k n) m $ {- else -} do+  displayDebugMessage n $ "{ " ++ s ++ "\n"+  m `finally` displayDebugMessage n "}\n"
+ src/full/Agda/TypeChecking/Monad/Debug.hs-boot view
@@ -0,0 +1,28 @@+module Agda.TypeChecking.Monad.Debug where++import Control.Applicative+import Control.Monad.IO.Class (MonadIO)++import Agda.TypeChecking.Monad.Base+import {-# SOURCE #-} Agda.TypeChecking.Monad.Options++import Agda.Utils.Pretty++class (Functor m, Applicative m, Monad m) => MonadDebug m where+  displayDebugMessage :: Int -> String -> m ()+  displayDebugMessage n s = traceDebugMessage n s $ return ()++  traceDebugMessage :: Int -> String -> m a -> m a+  traceDebugMessage n s cont = displayDebugMessage n s >> cont++  formatDebugMessage  :: VerboseKey -> Int -> TCM Doc -> m String++instance (MonadIO m) => MonadDebug (TCMT m)++reportS :: (HasOptions m, MonadDebug m)+        => VerboseKey -> Int -> String -> m ()+reportSLn :: (HasOptions m, MonadDebug m)+          => VerboseKey -> Int -> String -> m ()+reportSDoc :: (HasOptions m, MonadDebug m)+           => VerboseKey -> Int -> TCM Doc -> m ()+
src/full/Agda/TypeChecking/Monad/Env.hs view
@@ -2,7 +2,7 @@ module Agda.TypeChecking.Monad.Env where  import Control.Monad.Reader-import Data.List+import qualified Data.List as List import Data.Monoid  import Agda.Syntax.Common@@ -27,7 +27,7 @@ getAnonymousVariables :: MonadReader TCEnv m => ModuleName -> m Nat getAnonymousVariables m = do   ms <- asks envAnonymousModules-  return $ sum [ n | (m', n) <- ms, mnameToList m' `isPrefixOf` mnameToList m ]+  return $ sum [ n | (m', n) <- ms, mnameToList m' `List.isPrefixOf` mnameToList m ]  -- | Add variables bound by an anonymous module. withAnonymousModule :: ModuleName -> Nat -> TCM a -> TCM a@@ -101,6 +101,8 @@ -- | Allow all reductions including non-terminating functions. allowNonTerminatingReductions :: TCM a -> TCM a allowNonTerminatingReductions = putAllowedReductions $ [NonTerminatingReductions] ++ allReductions++-- * Concerning 'envInsideDotPattern'  insideDotPattern :: TCM a -> TCM a insideDotPattern = local $ \e -> e { envInsideDotPattern = True }
− src/full/Agda/TypeChecking/Monad/Exception.hs
@@ -1,115 +0,0 @@-{-# LANGUAGE CPP                    #-}-{-# LANGUAGE UndecidableInstances   #-}---- | Basically a copy of the ErrorT monad transformer. It's handy to slap---   onto TCM and still be a MonadTCM (which isn't possible with ErrorT).---- Andreas, 2012-03-30: the following command seems to be STALE.---   Also, it does not require the silly Error instance for the err type.--- The silly Error instance is back. ;-)--module Agda.TypeChecking.Monad.Exception where--import Control.Applicative-import Control.Monad.State-import Control.Monad.Reader-import Control.Monad.Writer--import Agda.TypeChecking.Monad.Base-import Agda.Utils.Except ( Error(strMsg), MonadError(catchError, throwError) )--newtype ExceptionT err m a = ExceptionT { runExceptionT :: m (Either err a) }--class Error err => MonadException err m | m -> err where-  throwException :: err -> m a-  catchException :: m a -> (err -> m a) -> m a--instance-#if __GLASGOW_HASKELL__ <= 708-  (Applicative m, Monad m, Error err)-#else-  (Monad m, Error err)-#endif-  => Monad (ExceptionT err m) where-  return = pure-  ExceptionT m >>= k = ExceptionT $ do-    r <- m-    case r of-      Left err -> return $ Left err-      Right x  -> runExceptionT $ k x-  fail = ExceptionT . return . Left . strMsg--instance (Monad m, Error err) => MonadException err (ExceptionT err m) where-  throwException = ExceptionT . return . Left-  catchException m h = ExceptionT $ do-    r <- runExceptionT m-    case r of-      Left err  -> runExceptionT $ h err-      Right x   -> return $ Right x--instance (Monad m, MonadException err m) => MonadException err (ReaderT r m) where-  throwException = lift . throwException-  catchException m h = ReaderT $ \ r ->-    catchException (m `runReaderT` r) (\ err -> h err `runReaderT` r)--instance (Monad m, MonadException err m, Monoid w) => MonadException err (WriterT w m) where-  throwException = lift . throwException-  catchException m h = WriterT $-    catchException (runWriterT m) (\ err -> runWriterT $ h err)--instance (Monad m, MonadException err m) => MonadException err (StateT s m) where-  throwException = lift . throwException-  catchException m h = StateT $ \ s ->-    catchException (runStateT m s) (\ err -> runStateT (h err) s)--instance MonadTrans (ExceptionT err) where-  lift = ExceptionT . liftM Right--instance Functor f => Functor (ExceptionT err f) where-  fmap f = ExceptionT . fmap (fmap f) . runExceptionT--instance (Error err, Applicative m, Monad m) => Applicative (ExceptionT err m) where-  pure  = ExceptionT . return . Right-  (<*>) = ap--instance-#if __GLASGOW_HASKELL__ <= 708-  (Error err, Applicative m, MonadState s m)-#else-  (Error err, MonadState s m)-#endif-  => MonadState s (ExceptionT err m) where-  get   = ExceptionT $ Right `liftM` get-  put x = ExceptionT $ Right `liftM` put x--instance-#if __GLASGOW_HASKELL__ <= 708-  (Error err, Applicative m, MonadReader r m)-#else-  (Error err, MonadReader r m)-#endif-  => MonadReader r (ExceptionT err m) where-  ask     = ExceptionT $ Right `liftM` ask-  local f = ExceptionT . local f . runExceptionT--instance-#if __GLASGOW_HASKELL__ <= 708-  (Error err, Applicative m, MonadError err' m)-#else-  (Error err, MonadError err' m)-#endif-  => MonadError err' (ExceptionT err m) where-  throwError err = ExceptionT $ Right `liftM` throwError err-  catchError m h = ExceptionT $ runExceptionT m `catchError` (runExceptionT . h)--instance-#if __GLASGOW_HASKELL__ <= 708-  (Error err, Applicative m, MonadIO m)-#else-  (Error err, MonadIO m)-#endif-  => MonadIO (ExceptionT err m) where-  liftIO m = ExceptionT $ Right `liftM` liftIO m--instance (Error err, MonadTCM tcm) => MonadTCM (ExceptionT err tcm) where-  liftTCM m = ExceptionT $ Right `liftM` liftTCM m
src/full/Agda/TypeChecking/Monad/Local.hs view
@@ -9,6 +9,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Context+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Env import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Free@@ -20,13 +21,13 @@  -- | Precondition: must not be called if the module parameter of the current --   module have been refined or (touched at all).-makeLocal :: Free' a All => a -> TCM (Local a)+makeLocal :: Free a => a -> TCM (Local a) makeLocal x | closed x = return $ Global x             | otherwise = inFreshModuleIfFreeParams $ do   m <- currentModule   return (Local m x) -makeGlobal :: Free' a All => a -> TCM (Local a)+makeGlobal :: Free a => a -> TCM (Local a) makeGlobal x | closed x  = return $ Global x              | otherwise = __IMPOSSIBLE__ 
src/full/Agda/TypeChecking/Monad/MetaVars.hs view
@@ -25,7 +25,7 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Trace import Agda.TypeChecking.Monad.Closure-import Agda.TypeChecking.Monad.Options (reportSLn)+import Agda.TypeChecking.Monad.Debug (reportSLn) import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Substitute import {-# SOURCE #-} Agda.TypeChecking.Telescope@@ -47,7 +47,9 @@  -- | Switch off assignment of metas. dontAssignMetas :: TCM a -> TCM a-dontAssignMetas = local $ \ env -> env { envAssignMetas = False }+dontAssignMetas cont = do+  reportSLn "tc.meta" 45 $ "don't assign metas"+  local (\ env -> env { envAssignMetas = False }) cont  -- | Get the meta store. getMetaStore :: TCM MetaStore@@ -209,6 +211,10 @@ updateMetaVarRange :: MetaId -> Range -> TCM () updateMetaVarRange mi r = updateMetaVar mi (setRange r) +setMetaOccursCheck :: MetaId -> RunMetaOccursCheck -> TCM ()+setMetaOccursCheck mi b = updateMetaVar mi $ \ mvar ->+  mvar { mvInfo = (mvInfo mvar) { miMetaOccursCheck = b } }+ -- * Query and manipulate interaction points.  modifyInteractionPoints :: (InteractionPoints -> InteractionPoints) -> TCM ()@@ -232,7 +238,7 @@   ii <- case maybeId of     Just i  -> return $ InteractionId i     Nothing -> fresh-  let ip = InteractionPoint { ipRange = r, ipMeta = Nothing, ipClause = IPNoClause }+  let ip = InteractionPoint { ipRange = r, ipMeta = Nothing, ipSolved = False, ipClause = IPNoClause }   case Map.insertLookupWithKey (\ key new old -> old) ii ip m of     -- If the interaction point is already present, we keep the old ip.     -- However, it needs to be at the same range as the new one.@@ -253,7 +259,7 @@   headMaybe $ mapMaybe sameRange $ Map.toList m   where     sameRange :: (InteractionId, InteractionPoint) -> Maybe InteractionId-    sameRange (ii, InteractionPoint r' _ _) | r == r' = Just ii+    sameRange (ii, InteractionPoint r' _ _ _) | r == r' = Just ii     sameRange _ = Nothing  -- | Hook up meta variable to interaction point.@@ -261,32 +267,30 @@ connectInteractionPoint ii mi = do   ipCl <- asks envClause   m <- use stInteractionPoints-  let ip = InteractionPoint { ipRange = __IMPOSSIBLE__, ipMeta = Just mi, ipClause = ipCl }+  let ip = InteractionPoint { ipRange = __IMPOSSIBLE__, ipMeta = Just mi, ipSolved = False, ipClause = ipCl }   -- The interaction point needs to be present already, we just set the meta.   case Map.insertLookupWithKey (\ key new old -> new { ipRange = ipRange old }) ii ip m of     (Nothing, _) -> __IMPOSSIBLE__     (Just _, m') -> modifyInteractionPoints $ const m' --- | Move an interaction point from the current ones to the old ones.+-- | Mark an interaction point as solved. removeInteractionPoint :: InteractionId -> TCM () removeInteractionPoint ii = do-  ip <- stInteractionPoints %%= \ m -> do-    let (mip, m') = Map.updateLookupWithKey (\ _ _ -> Nothing) ii m-    return (m',-      fromMaybe __IMPOSSIBLE__ mip)-  stSolvedInteractionPoints %= Map.insert ii ip+  stInteractionPoints %= Map.update (\ ip -> Just ip{ ipSolved = True }) ii  -- | Get a list of interaction ids. getInteractionPoints :: TCM [InteractionId] getInteractionPoints = Map.keys <$> use stInteractionPoints --- | Get all metas that correspond to interaction ids.+-- | Get all metas that correspond to unsolved interaction ids. getInteractionMetas :: TCM [MetaId]-getInteractionMetas = mapMaybe ipMeta . Map.elems <$> use stInteractionPoints+getInteractionMetas =+  mapMaybe ipMeta . filter (not . ipSolved) . Map.elems <$> use stInteractionPoints --- | Get all metas that correspond to interaction ids.+-- | Get all metas that correspond to unsolved interaction ids. getInteractionIdsAndMetas :: TCM [(InteractionId,MetaId)]-getInteractionIdsAndMetas = mapMaybe f . Map.toList <$> use stInteractionPoints+getInteractionIdsAndMetas =+  mapMaybe f . filter (not . ipSolved . snd) . Map.toList <$> use stInteractionPoints   where f (ii, ip) = (ii,) <$> ipMeta ip  -- | Does the meta variable correspond to an interaction point?
src/full/Agda/TypeChecking/Monad/Mutual.hs view
@@ -18,6 +18,7 @@  import Agda.Utils.Lens import Agda.Utils.Null+import Agda.Utils.Pretty ( prettyShow )  noMutualBlock :: TCM a -> TCM a noMutualBlock = local $ \e -> e { envMutualBlock = Nothing }@@ -81,4 +82,4 @@   mb <- Map.toList <$> use stMutualBlocks   case filter (Set.member x . mutualNames . snd) mb of     (i, _) : _ -> return i-    _          -> fail $ "No mutual block for " ++ show x+    _          -> fail $ "No mutual block for " ++ prettyShow x
src/full/Agda/TypeChecking/Monad/Open.hs view
@@ -10,7 +10,7 @@ import Control.Applicative import Control.Monad import Control.Monad.Reader-import Data.List+import qualified Data.List as List  import Agda.TypeChecking.Substitute import Agda.TypeChecking.Monad.Base@@ -39,8 +39,8 @@ getOpen (OpenThing []  x) = return x getOpen (OpenThing ctx x) = do   ctx' <- getContextId-  unless (ctx `isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"-  return $ raise (genericLength ctx' - genericLength ctx) x+  unless (ctx `List.isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"+  return $ raise (length ctx' - length ctx) x  -- | Try to use an 'Open' the current context. --   Returns 'Nothing' if current context is not an extension of the@@ -49,6 +49,6 @@ tryOpen (OpenThing []  x) = return $ Just x tryOpen (OpenThing ctx x) = do   ctx' <- getContextId-  if (ctx `isSuffixOf` ctx')-    then return $ Just $ raise (genericLength ctx' - genericLength ctx) x+  if (ctx `List.isSuffixOf` ctx')+    then return $ Just $ raise (length ctx' - length ctx) x     else return Nothing
src/full/Agda/TypeChecking/Monad/Options.hs view
@@ -11,14 +11,15 @@ import Data.Maybe import Data.Traversable -import Text.PrettyPrint import System.Directory import System.FilePath  import Agda.Syntax.Internal import Agda.Syntax.Common import Agda.Syntax.Concrete+import {-# SOURCE #-} Agda.TypeChecking.Monad.Debug import {-# SOURCE #-} Agda.TypeChecking.Errors+import Agda.TypeChecking.Warnings import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Benchmark@@ -34,6 +35,7 @@ import Agda.Utils.Monad import Agda.Utils.Lens import Agda.Utils.List+import Agda.Utils.Pretty import Agda.Utils.Trie (Trie) import qualified Agda.Utils.Trie as Trie import Agda.Utils.Except@@ -46,9 +48,10 @@  setPragmaOptions :: PragmaOptions -> TCM () setPragmaOptions opts = do+  stPragmaOptions %= Lens.mapSafeMode (Lens.getSafeMode opts ||)   clo <- commandLineOptions   let unsafe = unsafePragmaOptions opts-  when (optSafe clo && not (null unsafe)) $ typeError (SafeFlagPragma unsafe)+  when (Lens.getSafeMode clo && not (null unsafe)) $ warning $ SafeFlagPragma unsafe   ok <- liftIO $ runOptM $ checkOpts (clo { optPragmaOptions = opts })   case ok of     Left err   -> __IMPOSSIBLE__@@ -113,20 +116,6 @@   (libs, incs) <- libToTCM $ getDefaultLibraries (filePath root) (optDefaultLibs o)   return o{ optIncludePaths = incs ++ optIncludePaths o, optLibraries = libs } -class (Functor m, Applicative m, Monad m) => HasOptions m where-  -- | Returns the pragma options which are currently in effect.-  pragmaOptions      :: m PragmaOptions-  -- | Returns the command line options which are currently in effect.-  commandLineOptions :: m CommandLineOptions--instance MonadIO m => HasOptions (TCMT m) where-  pragmaOptions = use stPragmaOptions--  commandLineOptions = do-    p  <- use stPragmaOptions-    cl <- stPersistentOptions . stPersistentState <$> get-    return $ cl { optPragmaOptions = p }- setOptionsFromPragma :: OptionsPragma -> TCM () setOptionsFromPragma ps = do     opts <- commandLineOptions@@ -174,7 +163,7 @@ getProjectRoot :: RelativeTo -> TCM AbsolutePath getProjectRoot CurrentDir = liftIO (absolute =<< getCurrentDirectory) getProjectRoot (ProjectRoot f) = do-  Ranged _ m <- moduleName' f+  m <- moduleName' f   return (projectRoot f m)  -- | Makes the given directories absolute and stores them as include@@ -209,12 +198,26 @@       -- Might also be useful to overwrite default imports...   incs <- return $ incs ++ [primdir] +  reportSDoc "setIncludeDirs" 10 $ return $ vcat+    [ text "Old include directories:"+    , nest 2 $ vcat $ map pretty oldIncs+    , text "New include directories:"+    , nest 2 $ vcat $ map pretty incs+    ]+   -- Check whether the include dirs have changed.  If yes, reset state.   -- Andreas, 2013-10-30 comments:   -- The logic, namely using the include-dirs variable as a driver   -- for the interaction, qualifies for a code-obfuscation contest.   -- I guess one Boolean more in the state cost 10.000 EUR at the time   -- of this implementation...+  --+  -- Andreas, perhaps you have misunderstood something: If the include+  -- directories have changed and we do not reset the decoded modules,+  -- then we might (depending on how the rest of the code works) end+  -- up in a situation in which we use the contents of the file+  -- "old-path/M.agda", when the user actually meant+  -- "new-path/M.agda".   when (oldIncs /= incs) $ do     ho <- getInteractionOutputCallback     resetAllState@@ -236,7 +239,7 @@     ProjectRoot f -> void $ moduleName f      -- Andreas, 2016-07-12 WAS:      -- do-     --  Ranged _ m <- moduleName' f+     --  m <- moduleName' f      --  checkModuleName m f Nothing  @@ -291,32 +294,29 @@  -- | Switch on printing of implicit and irrelevant arguments. --   E.g. for reification in with-function generation.+--+--   Restores all 'PragmaOptions' after completion.+--   Thus, do not attempt to make persistent 'PragmaOptions'+--   changes in a `withShowAllArguments` bracket.+ withShowAllArguments :: TCM a -> TCM a withShowAllArguments = withShowAllArguments' True  withShowAllArguments' :: Bool -> TCM a -> TCM a-withShowAllArguments' yes ret = do-  opts <- pragmaOptions-  let imp = optShowImplicit opts-      irr = optShowIrrelevant opts-  setPragmaOptions $ opts { optShowImplicit = yes, optShowIrrelevant = yes }-  x <- ret-  opts <- pragmaOptions-  setPragmaOptions $ opts { optShowImplicit = imp, optShowIrrelevant = irr }-  return x+withShowAllArguments' yes = withPragmaOptions $ \ opts ->+  opts { optShowImplicit = yes, optShowIrrelevant = yes } -{- RETIRED, Andreas, 2012-04-30-setShowImplicitArguments :: Bool -> TCM a -> TCM a-setShowImplicitArguments showImp ret = do-  opts <- pragmaOptions-  let imp = optShowImplicit opts-  setPragmaOptions $ opts { optShowImplicit = showImp }-  x <- ret+-- | Change 'PragmaOptions' for a computation and restore afterwards.++withPragmaOptions :: (PragmaOptions -> PragmaOptions) -> TCM a -> TCM a+withPragmaOptions f cont = do   opts <- pragmaOptions-  setPragmaOptions $ opts { optShowImplicit = imp }+  setPragmaOptions $ f opts+  x <- cont+  setPragmaOptions opts   return x--} + ignoreInterfaces :: TCM Bool ignoreInterfaces = optIgnoreInterfaces <$> commandLineOptions @@ -362,48 +362,24 @@         m  = last $ 0 : Trie.lookupPath ks t     return (n <= m) --- | Displays a debug message in a suitable way.-{-# SPECIALIZE displayDebugMessage :: Int -> String -> TCM () #-}-displayDebugMessage :: MonadTCM tcm-  => Int     -- ^ The message's debug level.-  -> String  -- ^ Message.-  -> tcm ()-displayDebugMessage n s = liftTCM $-  appInteractionOutputCallback (Resp_RunningInfo n s)+-- | Check whether a certain verbosity level is activated (exact match). +{-# SPECIALIZE hasExactVerbosity :: VerboseKey -> Int -> TCM Bool #-}+hasExactVerbosity :: HasOptions m => VerboseKey -> Int -> m Bool+hasExactVerbosity k n =+  (Just n ==) . Trie.lookup (wordsBy (`elem` ".:") k) <$> getVerbosity++-- | Run a computation if a certain verbosity level is activated (exact match).++{-# SPECIALIZE whenExactVerbosity :: VerboseKey -> Int -> TCM () -> TCM () #-}+whenExactVerbosity :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()+whenExactVerbosity k n = whenM $ liftTCM $ hasExactVerbosity k n+ -- | Run a computation if a certain verbosity level is activated. -- --   Precondition: The level must be non-negative. {-# SPECIALIZE verboseS :: VerboseKey -> Int -> TCM () -> TCM () #-}-verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()-verboseS k n action = whenM (liftTCM $ hasVerbosity k n) action---- | Conditionally print debug string.-{-# SPECIALIZE reportS :: VerboseKey -> Int -> String -> TCM () #-}-reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()-reportS k n s = liftTCM $ verboseS k n $ displayDebugMessage n s---- | Conditionally println debug string.-{-# SPECIALIZE reportSLn :: VerboseKey -> Int -> String -> TCM () #-}-reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()-reportSLn k n s = verboseS k n $-  displayDebugMessage n (s ++ "\n")---- | Conditionally render debug 'Doc' and print it.-{-# SPECIALIZE reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM () #-}-reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> TCM Doc -> tcm ()-reportSDoc k n d = liftTCM $ verboseS k n $ do-  displayDebugMessage n . (++ "\n") . show =<< do-    d `catchError` \ err ->-      (\ s -> (sep $ map text-                 [ "Printing debug message"-                 , k  ++ ":" ++show n-                 , "failed due to error:" ]) $$-              (nest 2 $ text s)) <$> prettyError err---- | Print brackets around debug messages issued by a computation.-{-# SPECIALIZE verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a #-}-verboseBracket :: MonadTCM tcm => VerboseKey -> Int -> String -> TCM a -> tcm a-verboseBracket k n s m = liftTCM $ ifNotM (hasVerbosity k n) m $ {- else -} do-  displayDebugMessage n $ "{ " ++ s ++ "\n"-  m `finally` displayDebugMessage n "}\n"+-- {-# SPECIALIZE verboseS :: MonadIO m => VerboseKey -> Int -> TCMT m () -> TCMT m () #-} -- RULE left-hand side too complicated to desugar+{-# SPECIALIZE verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm () #-}+verboseS :: HasOptions m => VerboseKey -> Int -> m () -> m ()+verboseS k n action = whenM (hasVerbosity k n) action
src/full/Agda/TypeChecking/Monad/Options.hs-boot view
@@ -12,15 +12,5 @@  type VerboseKey = String -class (Functor m, Applicative m, Monad m) => HasOptions m where-  -- | Returns the pragma options which are currently in effect.-  pragmaOptions      :: m PragmaOptions-  -- | Returns the command line options which are currently in effect.-  commandLineOptions :: m CommandLineOptions--instance MonadIO m => HasOptions (TCMT m)- hasVerbosity :: HasOptions m => VerboseKey -> Int -> m Bool-verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()-reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()-reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> TCM Doc -> tcm ()+verboseS :: HasOptions m => VerboseKey -> Int -> m () -> m ()
src/full/Agda/TypeChecking/Monad/Sharing.hs view
@@ -4,12 +4,13 @@  import Control.Applicative import Control.Monad.Reader-import Data.List+import qualified Data.List as List import Data.Function import Data.Traversable  import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options import Agda.Utils.Monad @@ -43,7 +44,7 @@ forceEqualTerms :: Term -> Term -> TCM () forceEqualTerms u v =   whenM (asks envAllowDestructiveUpdate) $-  when (null $ (intersect `on` pointerChain) u v) $+  when (null $ (List.intersect `on` pointerChain) u v) $   case (u, v) of     (Shared p, Shared q) | p > q -> update u v     (_, Shared{})                -> update v u@@ -56,5 +57,4 @@         setPtr v p `seq` compressPointerChain u `seq` return ()       where p = last $ pointerChain u     update _ _ = __IMPOSSIBLE__-    report x y = reportSLn "tc.ptr" 50 $ "setting " ++ show x ++ "\n     to " ++ show y-+    report u v = reportSLn "tc.ptr" 50 $ "setting " ++ show u ++ "\n     to " ++ show v
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -11,7 +11,7 @@ import Control.Monad.Reader import Control.Monad.Trans.Maybe -import Data.List hiding (null)+import qualified Data.List as List import Data.Set (Set) import qualified Data.Set as Set import Data.Map (Map)@@ -27,17 +27,17 @@ import Agda.Syntax.Position import Agda.Syntax.Treeless (Compiled(..), TTerm) -import qualified Agda.Compiler.UHC.Pragmas.Base as CR- import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Env-import Agda.TypeChecking.Monad.Exception ( ExceptionT ) import Agda.TypeChecking.Monad.Mutual import Agda.TypeChecking.Monad.Open import Agda.TypeChecking.Monad.Local import Agda.TypeChecking.Monad.State+import Agda.TypeChecking.Monad.Trace+import Agda.TypeChecking.Warnings import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.Substitute import {-# SOURCE #-} Agda.TypeChecking.Telescope@@ -45,7 +45,7 @@ import {-# SOURCE #-} Agda.TypeChecking.Polarity import {-# SOURCE #-} Agda.TypeChecking.ProjectionLike -import Agda.Utils.Except ( Error )+import Agda.Utils.Except ( ExceptT ) import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List@@ -64,11 +64,11 @@ -- | Add a constant to the signature. Lifts the definition to top level. addConstant :: QName -> Definition -> TCM () addConstant q d = do-  reportSLn "tc.signature" 20 $ "adding constant " ++ show q ++ " to signature"+  reportSLn "tc.signature" 20 $ "adding constant " ++ prettyShow q ++ " to signature"   tel <- getContextTelescope   let tel' = replaceEmptyName "r" $ killRange $ case theDef d of               Constructor{} -> fmap hideOrKeepInstance tel-              Function{ funProjection = Just Projection{ projProper = True, projIndex = n } } ->+              Function{ funProjection = Just Projection{ projProper = Just{}, projIndex = n } } ->                 let fallback = fmap hideOrKeepInstance tel in                 if n > 0 then fallback else                 -- if the record value is part of the telescope, its hiding should left unchanged@@ -77,7 +77,7 @@                     Just (doms, dom) -> telFromList $ fmap hideOrKeepInstance doms ++ [dom]               _ -> tel   let d' = abstract tel' $ d { defName = q }-  reportSLn "tc.signature" 30 $ "lambda-lifted definition = " ++ show d'+  reportSDoc "tc.signature" 60 $ return $ text "lambda-lifted definition =" <?> pretty d'   modifySignature $ updateDefinitions $ HMap.insertWith (+++) q d'   i <- currentOrFreshMutualBlock   setMutualBlock i q@@ -87,10 +87,9 @@  -- | Set termination info of a defined function symbol. setTerminates :: QName -> Bool -> TCM ()-setTerminates q b = modifySignature $ updateDefinition q $ updateTheDef $ setT-  where-    setT def@Function{} = def { funTerminates = Just b }-    setT def            = def+setTerminates q b = modifySignature $ updateDefinition q $ updateTheDef $ \case+    def@Function{} -> def { funTerminates = Just b }+    def -> def  -- | Modify the clauses of a function. modifyFunClauses :: QName -> ([Clause] -> [Clause]) -> TCM ()@@ -98,66 +97,74 @@   modifySignature $ updateDefinition q $ updateTheDef $ updateFunClauses f  -- | Lifts clauses to the top-level and adds them to definition.+--   Also adjusts the 'funCopatternLHS' field if necessary. addClauses :: QName -> [Clause] -> TCM () addClauses q cls = do   tel <- getContextTelescope-  modifyFunClauses q (++ abstract tel cls)+  modifySignature $ updateDefinition q $ updateTheDef+    $ updateFunClauses      (++ abstract tel cls)+    . updateFunCopatternLHS (|| isCopatternLHS cls) -ensureNoCompiledHaskell :: QName -> TCM ()-ensureNoCompiledHaskell q =-  whenM (isJust . compiledHaskell . defCompiledRep <$> getConstInfo q) $-    typeError $ GenericError $ "Multiple Haskell bindings for " ++ show q ++ ". " ++-                               "Note that builtin numbers, booleans, chars and strings don't need " ++-                               "COMPILED pragmas."+mkPragma :: String -> TCM CompilerPragma+mkPragma s = CompilerPragma <$> getCurrentRange <*> pure s -addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()-addHaskellCode q hsTy hsDef = do-  ensureNoCompiledHaskell q-  modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs-  where-    addHs crep = crep { compiledHaskell = Just $ HsDefn hsTy hsDef }+-- | Add a compiler pragma `{-# COMPILE <backend> <name> <text> #-}`+addPragma :: BackendName -> QName -> String -> TCM ()+addPragma b q s = modifySignature . updateDefinition q . addCompilerPragma b =<< mkPragma s -addHaskellExport :: QName -> HaskellType -> String -> TCM ()-addHaskellExport q hsTy hsName = do-  ensureNoCompiledHaskell q-  modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs-  where-    addHs crep = crep { exportHaskell = Just (HsExport hsTy hsName)}+-- ** Temporary **+--  The functions below are only needed while we still parse the old COMPILED+--  pragmas. +type HaskellCode = String+type HaskellType = String+type JSCode = String+type CoreCode = String++addDeprecatedPragma :: String -> BackendName -> QName -> String -> TCM ()+addDeprecatedPragma old b q s = do+  let pq = prettyShow $ nameConcrete $ qnameName q+  warning $ DeprecationWarning (unwords ["The", old, "pragma"])+                               (unwords ["{-# COMPILE", b, pq, s, "#-}"]) "2.6"+  addPragma b q s++dataFormat :: String -> [String] -> String+dataFormat ty cons = "= data " ++ ty ++ " (" ++ List.intercalate " | " cons ++ ")"++addHaskellCode :: QName -> HaskellCode -> TCM ()+addHaskellCode q hsCode = addDeprecatedPragma "COMPILED" ghcBackendName q $ "= " ++ hsCode++addHaskellExport :: QName -> String -> TCM ()+addHaskellExport q hsName = addDeprecatedPragma "COMPILED_EXPORT" ghcBackendName q $ "as " ++ hsName+ addHaskellType :: QName -> HaskellType -> TCM ()-addHaskellType q hsTy = do-  ensureNoCompiledHaskell q-  modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs-  where-    addHs crep = crep { compiledHaskell = Just $ HsType hsTy }+addHaskellType q hsTy = addDeprecatedPragma "COMPILED_TYPE" ghcBackendName q $ "= type " ++ hsTy -addEpicCode :: QName -> EpicCode -> TCM ()-addEpicCode q epDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addEp-  -- TODO: sanity checking-  where-    addEp crep = crep { compiledEpic = Just epDef }+addHaskellData :: QName -> HaskellType -> [HaskellCode] -> TCM ()+addHaskellData q hsTy hsCons = addDeprecatedPragma "COMPILED_DATA" ghcBackendName q $ dataFormat hsTy hsCons -addJSCode :: QName -> String -> TCM ()-addJSCode q jsDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addJS-  where-    addJS crep = crep { compiledJS = Just jsDef }+addJSCode :: QName -> JSCode -> TCM ()+addJSCode q jsDef = addDeprecatedPragma "COMPILED_JS" jsBackendName q ("= " ++ jsDef) -addCoreCode :: QName -> CR.CoreExpr -> TCM ()-addCoreCode q crDef =  modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCore crDef-  where-    addCore e crep = crep { compiledCore = Just $ CrDefn e }+addCoreCode :: QName -> CoreCode -> TCM ()+addCoreCode q crDef = addDeprecatedPragma "COMPILED_UHC" uhcBackendName q $ "= " ++ crDef -addCoreConstr :: QName -> CR.CoreConstr -> TCM ()-addCoreConstr q con = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCore-  where-    addCore crep = crep {compiledCore = Just $ CrConstr con }+addCoreType :: QName -> CoreCode -> [CoreCode] -> TCM ()+addCoreType q crTy crCons = addDeprecatedPragma "COMPILED_DATA_UHC" uhcBackendName q $ dataFormat crTy crCons -addCoreType :: QName -> CR.CoreType -> TCM ()-addCoreType q crTy = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCr-  -- TODO: sanity checking-  where-    addCr crep = crep { compiledCore = Just $ CrType crTy }+-- ** End of temporary functions ** +getUniqueCompilerPragma :: BackendName -> QName -> TCM (Maybe CompilerPragma)+getUniqueCompilerPragma backend q = do+  ps <- defCompilerPragmas backend <$> getConstInfo q+  case ps of+    []  -> return Nothing+    [p] -> return $ Just p+    _   -> setCurrentRange (ps !! 1) $+            genericDocError $+                  hang (text ("Conflicting " ++ backend ++ " pragmas for") <+> pretty q <+> text "at") 2 $+                       vcat [ text "-" <+> pretty (getRange p) | p <- ps ]+ setFunctionFlag :: FunctionFlag -> Bool -> QName -> TCM () setFunctionFlag flag val q = modifyGlobalDefinition q $ set (theDefLens . funFlag flag) val @@ -167,6 +174,9 @@ markInline :: QName -> TCM () markInline = setFunctionFlag FunInline True +markInjective :: QName -> TCM ()+markInjective q = modifyGlobalDefinition q $ \def -> def { defInjective = True }+ unionSignatures :: [Signature] -> Signature unionSignatures ss = foldr unionSignature emptySignature ss   where@@ -189,12 +199,12 @@     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+      reportSLn "tc.section" 10 $ "warning: redundantly adding existing section " ++ prettyShow m+      reportSLn "tc.section" 60 $ "with content " ++ prettyShow 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+      reportSLn "impossible" 10 $ "overwriting existing section " ++ prettyShow m+      reportSLn "impossible" 60 $ "of content   " ++ prettyShow sec'+      reportSLn "impossible" 60 $ "with content " ++ prettyShow sec       __IMPOSSIBLE__   -- Add the new section.   setDefaultModuleParameters m@@ -258,8 +268,10 @@           case unSpine <$> body of             Just (Def y es) -> do               let df = Display m es $ DTerm $ Def top $ map Apply args-              reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top-                                                ++ "\n  " ++ show df+              reportSLn "tc.display.section" 20 $ unlines+                [ "adding display form " ++ prettyShow y ++ " --> " ++ prettyShow top+                , show df+                ]               addDisplayForm y df               add args top y es             Just v          -> noDispForm x $ "not a def body, but " ++ show v@@ -267,14 +279,16 @@         [] | Constructor{ conSrcCon = h } <- theDef def -> do               let y  = conName h                   df = Display 0 [] $ DTerm $ Con (h {conName = top }) ConOSystem []-              reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top-                                                ++ "\n  " ++ show df+              reportSLn "tc.display.section" 20 $ unlines+                [ "adding display form " ++ prettyShow y ++ " --> " ++ prettyShow top+                , show df+                ]               addDisplayForm y df         [] -> noDispForm x "no clauses"         (_:_:_) -> noDispForm x "many clauses"      noDispForm x reason = reportSLn "tc.display.section" 30 $-      "no display form from " ++ show x ++ " because " ++ reason+      "no display form from " ++ prettyShow x ++ " because " ++ reason      isVar VarP{} = True     isVar _      = False@@ -293,47 +307,49 @@   where     -- If a datatype is being copied, all its constructors need to be copied,     -- and if a constructor is copied its datatype needs to be.+    closeConstructors :: Ren QName -> TCM (Ren QName)     closeConstructors rd = do-        ds <- nub . concat <$> mapM (constructorData . fst) rd-        cs <- nub . concat <$> mapM (dataConstructors . fst) rd+        ds <- List.nub . concat <$> mapM (constructorData . fst) rd+        cs <- List.nub . concat <$> mapM (dataConstructors . fst) rd         new <- concat <$> mapM rename (ds ++ cs)         reportSLn "tc.mod.apply.complete" 30 $-          "also copying: " ++ show new+          "also copying: " ++ prettyShow new         return $ new ++ rd       where+        rename :: QName -> TCM (Ren QName)         rename x =           case lookup x rd of-            Nothing -> do y <- freshName_ (show x)+            Nothing -> do y <- freshName_ (prettyShow x)                           return [(x, qnameFromList [y])]             Just{}  -> return [] +        constructorData :: QName -> TCM [QName]         constructorData x = do           def <- theDef <$> getConstInfo x           return $ case def of             Constructor{ conData = d } -> [d]             _                          -> []++        dataConstructors :: QName -> TCM [QName]         dataConstructors x = do           def <- theDef <$> getConstInfo x           return $ case def of             Datatype{ dataCons = cs } -> cs-            Record{ recConHead = h }      -> [conName h]+            Record{ recConHead = h }  -> [conName h]             _                         -> []  applySection' :: ModuleName -> Telescope -> ModuleName -> Args -> ScopeCopyInfo -> TCM () applySection' new ptel old ts ScopeCopyInfo{ renNames = rd, renModules = rm } = do   reportSLn "tc.mod.apply" 10 $ render $ vcat     [ text "applySection"-    , text "new  =" <+> text (show new)-    , text "ptel =" <+> text (show ptel)-    , text "old  =" <+> text (show old)-    , text "ts   =" <+> text (show ts)-    ]-  reportSLn "tc.mod.apply" 80 $ render $ vcat-    [ text "arguments:  " <+> text (show ts)+    , text "new  =" <+> pretty new+    , text "ptel =" <+> pretty ptel+    , text "old  =" <+> pretty old+    , text "ts   =" <+> pretty ts     ]   mapM_ (copyDef ts) rd   mapM_ (copySec ts) rm-  mapM_ computePolarity (map snd rd)+  computePolarity (map snd rd)   where     -- Andreas, 2013-10-29     -- Here, if the name x is not imported, it persists as@@ -347,7 +363,7 @@      argsToUse x = do       let m = commonParentModule old x-      reportSLn "tc.mod.apply" 80 $ "Common prefix: " ++ show m+      reportSLn "tc.mod.apply" 80 $ "Common prefix: " ++ prettyShow m       size <$> lookupSection m      copyDef :: Args -> (QName, QName) -> TCM ()@@ -357,7 +373,7 @@       copyDef' np def       where         copyDef' np d = do-          reportSLn "tc.mod.apply" 60 $ "making new def for " ++ show y ++ " from " ++ show x ++ " with " ++ show np ++ " args " ++ show (defAbstract d)+          reportSLn "tc.mod.apply" 60 $ "making new def for " ++ prettyShow y ++ " from " ++ prettyShow x ++ " with " ++ show np ++ " args " ++ show (defAbstract d)           reportSLn "tc.mod.apply" 80 $             "args = " ++ show ts' ++ "\n" ++             "old type = " ++ prettyShow (defType d)@@ -400,10 +416,11 @@                     , defInstance       = inst                     , defCopy           = True                     , defMatchable      = False+                    , defInjective      = False                     , theDef            = df }             oldDef = theDef d             isCon  = case oldDef of { Constructor{} -> True ; _ -> False }-            mutual = case oldDef of { Function{funMutual = m} -> m              ; _ -> [] }+            mutual = case oldDef of { Function{funMutual = m} -> m              ; _ -> Nothing }             extlam = case oldDef of { Function{funExtLam = e} -> e              ; _ -> Nothing }             with   = case oldDef of { Function{funWith = w}   -> copyName <$> w ; _ -> Nothing }             -- Andreas, 2015-05-11, to fix issue 1413:@@ -416,6 +433,7 @@                 | size ts' < n || (size ts' == n && maybe True isVar0 (lastMaybe ts'))                 -> Just $ p { projIndex = n - size ts'                             , projLams  = projLams p `apply` ts'+                            , projProper= fmap copyName $ projProper p                             }               _ -> Nothing             def =@@ -450,10 +468,11 @@                         , funWith           = with                         , funCopatternLHS   = isCopatternLHS [cl]                         }-                  reportSLn "tc.mod.apply" 80 $ "new def for " ++ show x ++ "\n  " ++ show newDef+                  reportSDoc "tc.mod.apply" 80 $ return $ (text "new def for" <+> pretty x) <?> pretty newDef                   return newDef -            cl = Clause { clauseRange     = getRange $ defClauses d+            cl = Clause { clauseLHSRange  = getRange $ defClauses d+                        , clauseFullRange = getRange $ defClauses d                         , clauseTel       = EmptyTel                         , namedClausePats = []                         , clauseBody      = Just $ case oldDef of@@ -461,6 +480,7 @@                             _ -> Def x $ map Apply ts'                         , clauseType      = Just $ defaultArg t                         , clauseCatchall  = False+                        , clauseUnreachable = Just False -- definitely not unreachable                         }      {- Example@@ -498,11 +518,11 @@       totalArgs <- argsToUse x       tel       <- lookupSection x       let sectionTel =  apply tel $ take totalArgs ts-      reportSLn "tc.mod.apply" 80 $ "Copying section " ++ show x ++ " to " ++ show y-      reportSLn "tc.mod.apply" 80 $ "  ts           = " ++ intercalate "; " (map prettyShow ts)+      reportSLn "tc.mod.apply" 80 $ "Copying section " ++ prettyShow x ++ " to " ++ prettyShow y+      reportSLn "tc.mod.apply" 80 $ "  ts           = " ++ List.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+      reportSLn "tc.mod.apply" 80 $ "  tel          = " ++ List.intercalate " " (map (fst . unDom) $ telToList tel)  -- only names+      reportSLn "tc.mod.apply" 80 $ "  sectionTel   = " ++ List.intercalate " " (map (fst . unDom) $ telToList ptel) -- only names       addContext sectionTel $ addSection y  -- | Add a display form to a definition (could be in this or imported signature).@@ -517,13 +537,13 @@     typeError . GenericDocError $ text "Cannot add recursive display form for" <+> pretty x  isLocal :: QName -> TCM Bool-isLocal x = isJust . HMap.lookup x <$> use (stSignature . sigDefinitions)+isLocal x = HMap.member x <$> use (stSignature . sigDefinitions)  getDisplayForms :: QName -> TCM [LocalDisplayForm] getDisplayForms q = do-  ds  <- defDisplay <$> getConstInfo q-  ds1 <- maybe [] id . HMap.lookup q <$> use stImportsDisplayForms-  ds2 <- maybe [] id . HMap.lookup q <$> use stImportedDisplayForms+  ds  <- either (const []) defDisplay <$> getConstInfo' q+  ds1 <- HMap.lookupDefault [] q <$> use stImportsDisplayForms+  ds2 <- HMap.lookupDefault [] q <$> use stImportedDisplayForms   ifM (isLocal q) (return $ ds ++ ds1 ++ ds2)                   (return $ ds1 ++ ds ++ ds2) @@ -564,12 +584,12 @@  -- | Can be called on either a (co)datatype, a record type or a --   (co)constructor.-whatInduction :: QName -> TCM Induction-whatInduction c = do+whatInduction :: MonadTCM tcm => QName -> tcm Induction+whatInduction c = liftTCM $ do   def <- theDef <$> getConstInfo c   case def of     Datatype{ dataInduction = i } -> return i-    Record{ recRecursive = False} -> return Inductive+    Record{} | not (recRecursive def) -> return Inductive     Record{ recInduction = i    } -> return $ fromMaybe Inductive i     Constructor{ conInd = i }     -> return i     _                             -> __IMPOSSIBLE__@@ -590,10 +610,31 @@         _                          -> __IMPOSSIBLE__     _ -> __IMPOSSIBLE__ -class (Functor m, Applicative m, Monad m) => HasConstInfo m where+-- | Signature lookup errors.+data SigError+  = SigUnknown String -- ^ The name is not in the signature; default error message.+  | SigAbstract       -- ^ The name is not available, since it is abstract.++-- | Standard eliminator for 'SigError'.+sigError :: (String -> a) -> a -> SigError -> a+sigError f a = \case+  SigUnknown s -> f s+  SigAbstract  -> a++class (Functor m, Applicative m, Monad m, HasOptions m, MonadDebug m) => HasConstInfo m where   -- | Lookup the definition of a name. The result is a closed thing, all free   --   variables have been abstracted over.   getConstInfo :: QName -> m Definition+  getConstInfo q = getConstInfo' q >>= \case+      Right d -> return d+      Left (SigUnknown err) -> __IMPOSSIBLE_VERBOSE__ err+      Left SigAbstract      -> __IMPOSSIBLE_VERBOSE__ $+        "Abstract, thus, not in scope: " ++ prettyShow q++  -- | Version that reports exceptions:+  getConstInfo' :: QName -> m (Either SigError Definition)+  getConstInfo' q = Right <$> getConstInfo q+   -- | Lookup the rewrite rules with the given head symbol.   getRewriteRulesFor :: QName -> m RewriteRules @@ -614,21 +655,33 @@  instance HasConstInfo (TCMT IO) where   getRewriteRulesFor = defaultGetRewriteRulesFor get-  getConstInfo q = join $ pureTCM $ \st env ->+  getConstInfo' q = do+    st  <- get+    env <- ask+    defaultGetConstInfo st env q+  getConstInfo q = getConstInfo' q >>= \case+      Right d -> return d+      Left (SigUnknown err) -> fail err+      Left SigAbstract      -> notInScope $ qnameToConcrete q++defaultGetConstInfo+  :: (HasOptions m, MonadDebug m)+  => TCState -> TCEnv -> QName -> m (Either SigError Definition)+defaultGetConstInfo st env q = do     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+    case catMaybes [HMap.lookup q defs, HMap.lookup q idefs] of+        []  -> return $ Left $ SigUnknown $ "Unbound name: " ++ prettyShow q ++ " " ++ showQNameId q         [d] -> mkAbs env d-        ds  -> fail $ "Ambiguous name: " ++ show q+        ds  -> __IMPOSSIBLE_VERBOSE__ $ "Ambiguous name: " ++ prettyShow q     where       mkAbs env d         | treatAbstractly' q' env =           case makeAbstract d of-            Just d      -> return d-            Nothing     -> notInScope $ qnameToConcrete q+            Just d      -> return $ Right d+            Nothing     -> return $ Left SigAbstract               -- the above can happen since the scope checker is a bit sloppy with 'abstract'-        | otherwise = return d+        | otherwise = return $ Right d         where           q' = case theDef d of             -- Hack to make abstract constructors work properly. The constructors@@ -640,12 +693,12 @@           dropLastModule q@QName{ qnameModule = m } =             q{ qnameModule = mnameFromList $ ifNull (mnameToList m) __IMPOSSIBLE__ init } -instance (HasConstInfo m) => HasConstInfo (MaybeT m) where-  getConstInfo = lift . getConstInfo+instance HasConstInfo m => HasConstInfo (MaybeT m) where+  getConstInfo' = lift . getConstInfo'   getRewriteRulesFor = lift . getRewriteRulesFor -instance (HasConstInfo m, Error err) => HasConstInfo (ExceptionT err m) where-  getConstInfo = lift . getConstInfo+instance HasConstInfo m => HasConstInfo (ExceptT err m) where+  getConstInfo' = lift . getConstInfo'   getRewriteRulesFor = lift . getRewriteRulesFor  {-# INLINE getConInfo #-}@@ -666,7 +719,7 @@ setPolarity :: QName -> [Polarity] -> TCM () setPolarity q pol = do   reportSLn "tc.polarity.set" 20 $-    "Setting polarity of " ++ show q ++ " to " ++ show pol ++ "."+    "Setting polarity of " ++ prettyShow q ++ " to " ++ prettyShow pol ++ "."   modifySignature $ updateDefinition q $ updateDefPolarity $ const pol  -- | Get argument occurrence info for argument @i@ of definition @d@ (never fails).@@ -687,23 +740,21 @@   modifySignature $ updateDefinition d $ updateDefArgOccurrences f  setTreeless :: QName -> TTerm -> TCM ()-setTreeless q t = modifyGlobalDefinition q $ setTT-  where-    setTT def@Defn{theDef = fun@Function{}} =-      def{theDef = fun{funTreeless = Just (Compiled t [])}}-    setTT def = __IMPOSSIBLE__+setTreeless q t =+  modifyGlobalDefinition q $ updateTheDef $ \case+    fun@Function{} -> fun{ funTreeless = Just $ Compiled t [] }+    _ -> __IMPOSSIBLE__  setCompiledArgUse :: QName -> [Bool] -> TCM ()-setCompiledArgUse q use = modifyGlobalDefinition q $ setTT-  where-    setTT def@Defn{theDef = fun@Function{}} =-      def{theDef = fun{funTreeless = for (funTreeless fun) $ \ c -> c { cArgUsage = use }}}-    setTT def = __IMPOSSIBLE__+setCompiledArgUse q use =+  modifyGlobalDefinition q $ updateTheDef $ \case+    fun@Function{} ->+      fun{ funTreeless = for (funTreeless fun) $ \ c -> c { cArgUsage = use } }+    _ -> __IMPOSSIBLE__  getCompiled :: QName -> TCM (Maybe Compiled) getCompiled q = do-  def <- theDef <$> getConstInfo q-  return $ case def of+  (theDef <$> getConstInfo q) <&> \case     Function{ funTreeless = t } -> t     _                           -> Nothing @@ -711,22 +762,13 @@ getErasedConArgs q = do   def <- getConstInfo q   case theDef def of-    Constructor{ conData = d, conPars = np, conErased = es } -> do-      ddef <- getConstInfo d-      case compiledHaskell $ defCompiledRep ddef of-        Nothing -> return es-        Just _  -> do-          -- Can't erase arguments of COMPILED_DATA constructors yet-          TelV tel _ <- telView $ defType def-          return $ replicate (size tel - np) False+    Constructor{ conData = d, conPars = np, conErased = es } -> return es     _ -> __IMPOSSIBLE__  setErasedConArgs :: QName -> [Bool] -> TCM ()-setErasedConArgs q args = modifyGlobalDefinition q setArgs-  where-    setArgs def@Defn{theDef = con@Constructor{}} =-      def{ theDef = con{ conErased = args } }-    setArgs def = def   -- no-op for non-constructors+setErasedConArgs q args = modifyGlobalDefinition q $ updateTheDef $ \case+    def@Constructor{} -> def{ conErased = args }+    def -> def   -- no-op for non-constructors  getTreeless :: QName -> TCM (Maybe TTerm) getTreeless q = fmap cTreeless <$> getCompiled q@@ -734,29 +776,36 @@ getCompiledArgUse :: QName -> TCM [Bool] getCompiledArgUse q = maybe [] cArgUsage <$> getCompiled q --- | Get the mutually recursive identifiers.-getMutual :: QName -> TCM [QName]-getMutual d = do-  def <- theDef <$> getConstInfo d-  return $ case def of+-- | Get the mutually recursive identifiers of a symbol from the signature.+getMutual :: QName -> TCM (Maybe [QName])+getMutual d = getMutual_ . theDef <$> getConstInfo d++-- | Get the mutually recursive identifiers from a `Definition`.+getMutual_ :: Defn -> Maybe [QName]+getMutual_ = \case     Function {  funMutual = m } -> m     Datatype { dataMutual = m } -> m     Record   {  recMutual = m } -> m-    _ -> []+    _ -> Nothing  -- | Set the mutually recursive identifiers. setMutual :: QName -> [QName] -> TCM () setMutual d m = modifySignature $ updateDefinition d $ updateTheDef $ \ def ->   case def of-    Function{} -> def { funMutual = m }-    Datatype{} -> def {dataMutual = m }-    Record{}   -> def { recMutual = m }-    _          -> __IMPOSSIBLE__+    Function{} -> def { funMutual = Just m }+    Datatype{} -> def {dataMutual = Just m }+    Record{}   -> def { recMutual = Just m }+    _          -> if null m then def else __IMPOSSIBLE__ -- nothing to do  -- | Check whether two definitions are mutually recursive. mutuallyRecursive :: QName -> QName -> TCM Bool-mutuallyRecursive d d' = (d `elem`) <$> getMutual d'+mutuallyRecursive d d1 = (d `elem`) . fromMaybe __IMPOSSIBLE__ <$> getMutual d1 +-- | A function/data/record definition is nonRecursive if it is not even mutually+--   recursive with itself.+definitelyNonRecursive_ :: Defn -> Bool+definitelyNonRecursive_ = maybe False null . getMutual_+ -- | Get the number of parameters to the current module. getCurrentModuleFreeVars :: TCM Nat getCurrentModuleFreeVars = size <$> (lookupSection =<< currentModule)@@ -767,12 +816,20 @@ getDefFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadReader TCEnv m) => QName -> m Nat getDefFreeVars = getModuleFreeVars . qnameModule -freeVarsToApply :: QName -> TCM Args-freeVarsToApply = moduleParamsToApply . qnameModule+freeVarsToApply :: (Functor m, HasConstInfo m, HasOptions m,+                    ReadTCState m, MonadReader TCEnv m, MonadDebug m)+                => QName -> m Args+freeVarsToApply q = do+  vs <- moduleParamsToApply $ qnameModule q+  t <- defType <$> getConstInfo q+  let TelV tel _ = telView'UpTo (size vs) t+  unless (size tel == size vs) __IMPOSSIBLE__+  return $ zipWith (\ (Arg _ v) (Dom ai _) -> Arg ai v) vs $ telToList tel  {-# SPECIALIZE getModuleFreeVars :: ModuleName -> TCM Nat #-} {-# SPECIALIZE getModuleFreeVars :: ModuleName -> ReduceM Nat #-}-getModuleFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadReader TCEnv m) => ModuleName -> m Nat+getModuleFreeVars :: (Functor m, Applicative m, MonadReader TCEnv m, ReadTCState m)+                  => ModuleName -> m Nat getModuleFreeVars m = do   m0   <- commonParentModule m <$> currentModule   (+) <$> getAnonymousVariables m <*> (size <$> lookupSection m0)@@ -782,7 +839,7 @@ --   We have to insert the module telescope of the common prefix --   of the current module and the module where the definition comes from. --   (Properly raised to the current context.)---+--y --   Example: --   @ --      module M₁ Γ where@@ -791,20 +848,23 @@ --        module M₃ Θ where --          ... M₁.M₂.f [insert Γ raised by Θ] --   @-moduleParamsToApply :: ModuleName -> TCM Args+moduleParamsToApply :: (Functor m, Applicative m, HasOptions m,+                        MonadReader TCEnv m, ReadTCState m, MonadDebug m)+                    => ModuleName -> m Args moduleParamsToApply m = do   -- Get the correct number of free variables (correctly raised) of @m@. -  reportSLn "tc.sig.param" 90 $ "computing module parameters of " ++ show m-  cxt <- getContext+  reportSLn "tc.sig.param" 90 $ "computing module parameters of " ++ prettyShow m   n   <- getModuleFreeVars m   tel <- take n . telToList <$> lookupSection m   sub <- getModuleParameterSub m-  reportSLn "tc.sig.param" 60 $ unlines $-    [ "  n    = " ++ show n-    , "  cxt  = " ++ show (map (fmap fst) cxt)-    , "  sub  = " ++ show sub-    ]+  verboseS "tc.sig.param" 60 $ do+    cxt <- getContext+    reportSLn "tc.sig.param" 60 $ unlines $+      [ "  n    = " ++ show n+      , "  cxt  = " ++ show (map (fmap fst) cxt)+      , "  sub  = " ++ show sub+      ]   unless (size tel == n) __IMPOSSIBLE__   let args = applySubst sub $ zipWith (\ i a -> var i <$ argFromDom a) (downFrom n) tel   reportSLn "tc.sig.param" 60 $ "  args = " ++ show args@@ -850,10 +910,26 @@     ctx <- getContext     m   <- currentModule     reportSLn "tc.sig.inst" 30 $-      "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " +++      "instDef in " ++ prettyShow m ++ ": " ++ prettyShow (defName d) ++ " " ++       unwords (map show $ zipWith (<$) (reverse $ map (fst . unDom) ctx) vs)   return $ d `apply` vs +instantiateRewriteRule :: (Functor m, HasConstInfo m, HasOptions m,+                           ReadTCState m, MonadReader TCEnv m, MonadDebug m)+                       => RewriteRule -> m RewriteRule+instantiateRewriteRule rew = do+  traceSLn "rewriting" 60 ("instantiating rewrite rule " ++ show (rewName rew) ++ " to the local context.") $ do+  vs  <- freeVarsToApply $ rewName rew+  let rew' = rew `apply` vs+  traceSLn "rewriting" 60 ("instantiated rewrite rule: ") $ do+  traceSLn "rewriting" 60 (show rew') $ do+  return rew'++instantiateRewriteRules :: (Functor m, HasConstInfo m, HasOptions m,+                            ReadTCState m, MonadReader TCEnv m, MonadDebug m)+                        => RewriteRules -> m RewriteRules+instantiateRewriteRules = mapM instantiateRewriteRule+ -- | Give the abstract view of a definition. makeAbstract :: Definition -> Maybe Definition makeAbstract d =@@ -867,13 +943,16 @@                }   where     makeAbs Axiom         = Just Axiom-    makeAbs Datatype   {} = Just AbstractDefn-    makeAbs Function   {} = Just AbstractDefn+    makeAbs d@Datatype {} = Just $ AbstractDefn d+    makeAbs d@Function {} = Just $ AbstractDefn d     makeAbs Constructor{} = Nothing     -- Andreas, 2012-11-18:  Make record constructor and projections abstract.-    makeAbs d@Record{}    = Just AbstractDefn+    -- Andreas, 2017-08-14:  Projections are actually not abstract (issue #2682).+    -- Return the Defn under a wrapper to allow e.g. eligibleForProjectionLike+    -- to see whether the abstract thing is a record type or not.+    makeAbs d@Record{}    = Just $ AbstractDefn d     makeAbs Primitive{}   = __IMPOSSIBLE__-    makeAbs AbstractDefn  = __IMPOSSIBLE__+    makeAbs AbstractDefn{}= __IMPOSSIBLE__  -- | Enter abstract mode. Abstract definition in the current module are transparent. {-# SPECIALIZE inAbstractMode :: TCM a -> TCM a #-}@@ -942,14 +1021,6 @@ relOfConst :: QName -> TCM Relevance relOfConst q = defRelevance <$> getConstInfo q --- | The name must be a datatype.-sortOfConst :: QName -> TCM Sort-sortOfConst q =-    do  d <- theDef <$> getConstInfo q-        case d of-            Datatype{dataSort = s} -> return s-            _                      -> fail $ "Expected " ++ show q ++ " to be a datatype."- -- | The number of dropped parameters for a definition. --   0 except for projection(-like) functions and constructors. droppedPars :: Definition -> Int@@ -960,7 +1031,7 @@     Record     {recPars = _} -> 0  -- not dropped     Constructor{conPars = n} -> n     Primitive{}              -> 0-    AbstractDefn             -> __IMPOSSIBLE__+    AbstractDefn{}           -> __IMPOSSIBLE__  -- | Is it the name of a record projection? {-# SPECIALIZE isProjection :: QName -> TCM (Maybe Projection) #-}@@ -986,7 +1057,7 @@ --   (projection applied to argument). isProperProjection :: Defn -> Bool isProperProjection d = caseMaybe (isProjection_ d) False $ \ isP ->-  if projIndex isP <= 0 then False else projProper isP+  if projIndex isP <= 0 then False else isJust $ projProper isP  -- | Number of dropped initial arguments of a projection(-like) function. projectionArgs :: Defn -> Int@@ -1008,5 +1079,5 @@   caseMaybeM (isProjection f) fallback $ \ isP -> do     if projIndex isP <= 0 then fallback else do       -- Get the original projection, if existing.-      if not (projProper isP) then fallback else do+      if isNothing (projProper isP) then fallback else do         return $ unArg a `applyE` [Proj o $ projOrig isP]
src/full/Agda/TypeChecking/Monad/SizedTypes.hs view
@@ -14,6 +14,7 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.State@@ -42,6 +43,12 @@ class IsSizeType a where   isSizeType :: a -> TCM (Maybe BoundedSize) +instance IsSizeType a => IsSizeType (Dom a) where+  isSizeType = isSizeType . unDom++instance IsSizeType a => IsSizeType (b,a) where+  isSizeType = isSizeType . snd+ instance IsSizeType a => IsSizeType (Type' a) where   isSizeType = isSizeType . unEl @@ -163,6 +170,7 @@ -- | A useful view on sizes. data SizeView = SizeInf | SizeSuc Term | OtherSize Term +-- | Expects argument to be 'reduce'd. sizeView :: Term -> TCM SizeView sizeView v = do   Def inf [] <- ignoreSharing <$> primSizeInf
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -8,9 +8,11 @@ import Control.Arrow (first) import Control.Applicative import qualified Control.Exception as E-import Control.Monad.State (put, get, gets, modify)+import Control.Monad.Reader (asks)+import Control.Monad.State (put, get, gets, modify, modify') import Control.Monad.Trans (liftIO) +import Data.Maybe import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid@@ -31,6 +33,8 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Warnings+import {-# SOURCE #-} Agda.TypeChecking.Monad.Debug import {-# SOURCE #-} Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.CompiledClause@@ -38,7 +42,7 @@ import Agda.Utils.Hash import qualified Agda.Utils.HashMap as HMap import Agda.Utils.Lens-import Agda.Utils.Monad (bracket_, modify')+import Agda.Utils.Monad (bracket_) import Agda.Utils.Pretty import Agda.Utils.Tuple @@ -54,12 +58,14 @@  -- | Resets all of the type checking state. -----   Keep only 'Benchmark' information.+--   Keep only 'Benchmark' and backend information.  resetAllState :: TCM () resetAllState = do     b <- getBenchmark+    backends <- use stBackends     put $ updatePersistentState (\ s -> s { stBenchmark = b }) initState+    stBackends .= backends -- resetAllState = put initState  -- | Restore 'TCState' after performing subcomputation.@@ -85,7 +91,32 @@     modifyBenchmark $ const b   return (result, newState) +-- | A fresh TCM instance.+--+-- The computation is run in a fresh state, with the exception that+-- the persistent state is preserved. If the computation changes the+-- state, then these changes are ignored, except for changes to the+-- persistent state. (Changes to the persistent state are also ignored+-- if errors other than type errors or IO exceptions are encountered.) +freshTCM :: TCM a -> TCM (Either TCErr a)+freshTCM m = do+  ps <- use lensPersistentState+  let s = set lensPersistentState ps initState+  r <- liftIO $ (Right <$> runTCM initEnv s m) `E.catch` (return . Left)+  case r of+    Right (a, s) -> do+      lensPersistentState .= s ^. lensPersistentState+      return $ Right a+    Left err -> do+      case err of+        TypeError { tcErrState = s } ->+          lensPersistentState .= s ^. lensPersistentState+        IOException s _ _ ->+          lensPersistentState .= s ^. lensPersistentState+        _ -> return ()+      return $ Left err+ --------------------------------------------------------------------------- -- * Lens for persistent states and its fields ---------------------------------------------------------------------------@@ -162,7 +193,7 @@ printScope :: String -> Int -> String -> TCM () printScope tag v s = verboseS ("scope." ++ tag) v $ do   scope <- getScope-  reportSDoc ("scope." ++ tag) v $ return $ vcat [ text s, text $ show scope ]+  reportSDoc ("scope." ++ tag) v $ return $ vcat [ text s, pretty scope ]  --------------------------------------------------------------------------- -- * Signature@@ -184,8 +215,9 @@ --   module. This function is currently used to update the compiled --   representation of a function during compilation. modifyGlobalDefinition :: QName -> (Definition -> Definition) -> TCM ()-modifyGlobalDefinition q f = modifySignature (updateDefinition q f) >>-                             modifyImportedSignature (updateDefinition q f)+modifyGlobalDefinition q f = do+  modifySignature         $ updateDefinition q f+  modifyImportedSignature $ updateDefinition q f  setSignature :: Signature -> TCM () setSignature sig = modifySignature $ const sig@@ -237,6 +269,9 @@ updateDefCompiledRep :: (CompiledRepresentation -> CompiledRepresentation) -> (Definition -> Definition) updateDefCompiledRep f def = def { defCompiledRep = f (defCompiledRep def) } +addCompilerPragma :: BackendName -> CompilerPragma -> Definition -> Definition+addCompilerPragma backend pragma = updateDefCompiledRep $ Map.insertWith (++) backend [pragma]+ updateFunClauses :: ([Clause] -> [Clause]) -> (Defn -> Defn) updateFunClauses f def@Function{ funClauses = cs} = def { funClauses = f cs } updateFunClauses f _                              = __IMPOSSIBLE__@@ -245,6 +280,10 @@ updateCompiledClauses f def@Function{ funCompiled = cc} = def { funCompiled = f cc } updateCompiledClauses f _                              = __IMPOSSIBLE__ +updateFunCopatternLHS :: (Bool -> Bool) -> Defn -> Defn+updateFunCopatternLHS f def@Function{ funCopatternLHS = b } = def { funCopatternLHS = f b }+updateFunCopatternLHS f _ = __IMPOSSIBLE__+ --------------------------------------------------------------------------- -- * Top level module ---------------------------------------------------------------------------@@ -256,7 +295,7 @@ -- implementation of 'setTopLevelModule' should be changed.  setTopLevelModule :: C.QName -> TCM ()-setTopLevelModule x = stFreshNameId .= NameId 0 (hashString (show x))+setTopLevelModule x = stFreshNameId .= NameId 0 (hashString $ prettyShow x)  -- | Use a different top-level module for a computation. Used when generating --   names for imported modules.@@ -269,27 +308,41 @@   return y  ------------------------------------------------------------------------------ * Haskell imports+-- * Foreign code --------------------------------------------------------------------------- +addForeignCode :: BackendName -> String -> TCM ()+addForeignCode backend code = do+  r <- asks envRange  -- can't use TypeChecking.Monad.Trace.getCurrentRange without cycle+  stForeignCode . key backend %= Just . (ForeignCode r code :) . fromMaybe []++---------------------------------------------------------------------------+-- * Temporary: Haskell imports+--   These will go away when we remove the IMPORT and HASKELL pragmas in+--   favour of the FOREIGN pragma.+---------------------------------------------------------------------------++addDeprecatedForeignCode :: String -> BackendName -> String -> TCM ()+addDeprecatedForeignCode old backend code = do+  warning $ DeprecationWarning (unwords ["The", old, "pragma"])+                               foreignPragma "2.6"+  addForeignCode backend code+  where+    spc | length (lines code) > 1 = "\n"+        | otherwise               = " "+    foreignPragma =+      "{-# FOREIGN " ++ backend ++ spc ++ code ++ spc ++ "#-}"+ -- | Tell the compiler to import the given Haskell module. addHaskellImport :: String -> TCM ()-addHaskellImport i = stHaskellImports %= Set.insert i---- | Get the Haskell imports.-getHaskellImports :: TCM (Set String)-getHaskellImports = use stHaskellImports+addHaskellImport i = addDeprecatedForeignCode "IMPORT" ghcBackendName $ "import qualified " ++ i  -- | Tell the compiler to import the given Haskell module. addHaskellImportUHC :: String -> TCM ()-addHaskellImportUHC i = stHaskellImportsUHC %= Set.insert i---- | Get the Haskell imports.-getHaskellImportsUHC :: TCM (Set String)-getHaskellImportsUHC = use stHaskellImportsUHC+addHaskellImportUHC i = addDeprecatedForeignCode "IMPORT_UHC" ghcBackendName $ "__IMPORT__ " ++ i  addInlineHaskell :: String -> TCM ()-addInlineHaskell s = stHaskellCode %= (s :)+addInlineHaskell s = addDeprecatedForeignCode "HASKELL" ghcBackendName s  --------------------------------------------------------------------------- -- * Interaction output callback@@ -301,7 +354,7 @@  appInteractionOutputCallback :: Response -> TCM () appInteractionOutputCallback r-  = getInteractionOutputCallback >>= \ cb -> cb r+  = getInteractionOutputCallback >>= \ cb -> liftIO $ cb r  setInteractionOutputCallback :: InteractionOutputCallback -> TCM () setInteractionOutputCallback cb@@ -355,30 +408,6 @@ modifyBenchmark :: (Benchmark -> Benchmark) -> TCM () modifyBenchmark = modify' . updateBenchmark --- | Run a fresh instance of the TCM (with initial state).---   'Benchmark' info is preserved.-freshTCM :: TCM a -> TCM (Either TCErr a)-freshTCM m = do-  -- Prepare an initial state with current benchmark info.-  b <- getBenchmark-  a <- use lensAccumStatistics-  let s = updateBenchmark (const b)-        . set lensAccumStatistics a-        $ initState-  -- Run subcomputation in initial state.-  -- If we encounter an exception, we lose the state and the-  -- benchmark info.-  -- We could retrieve i from a type error, which carries the state,-  -- but we do not care for benchmarking in the presence of errors.-  r <- liftIO $ (Right <$> runTCM initEnv s m) `E.catch` (return . Left)-  case r of-    Left err     -> return $ Left err-    Right (a, s) -> do-      -- Keep only the benchmark info from the final state of the subcomp.-      modifyBenchmark $ const $ theBenchmark s-      lensAccumStatistics .= (s^.lensAccumStatistics)-      return $ Right a- --------------------------------------------------------------------------- -- * Instance definitions ---------------------------------------------------------------------------@@ -415,7 +444,9 @@ -- | Add an instance whose type is still unresolved. addUnknownInstance :: QName -> TCM () addUnknownInstance x = do-  reportSLn "tc.decl.instance" 10 $ "adding definition " ++ show x ++ " to the instance table (the type is not yet known)"+  reportSLn "tc.decl.instance" 10 $+    "adding definition " ++ prettyShow x +++    " to the instance table (the type is not yet known)"   modifyInstanceDefs $ mapSnd $ Set.insert x  -- | Add instance to some ``class''.@@ -424,7 +455,8 @@   -> QName  -- ^ Name of the class.   -> TCM () addNamedInstance x n = do-  reportSLn "tc.decl.instance" 10 $ ("adding definition " ++ show x ++ " to instance table for " ++ show n)+  reportSLn "tc.decl.instance" 10 $+    "adding definition " ++ prettyShow x ++ " to instance table for " ++ prettyShow n   -- Mark x as instance for n.   modifySignature $ updateDefinition x $ \ d -> d { defInstance = Just n }   -- Add x to n's instances.
src/full/Agda/TypeChecking/Monad/Statistics.hs view
@@ -11,6 +11,7 @@ import Agda.Syntax.Concrete.Name as C  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options  import Agda.Utils.Lens
src/full/Agda/TypeChecking/Monad/Trace.hs view
@@ -11,6 +11,7 @@  import Agda.Syntax.Position import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Debug import Agda.TypeChecking.Monad.Options  import Agda.Utils.Function@@ -36,12 +37,14 @@     NoHighlighting{}        -> False     _                       -> True -traceCallM :: MonadTCM tcm => tcm Call -> tcm a -> tcm a+traceCallM :: (MonadTCM tcm, MonadDebug tcm) => tcm Call -> tcm a -> tcm a traceCallM mkCall m = flip traceCall m =<< mkCall  -- | Record a function call in the trace.-{-# SPECIALIZE traceCall :: Call -> TCM a -> TCM a #-}-traceCall :: MonadTCM tcm => Call -> tcm a -> tcm a++-- RULE left-hand side too complicated to desugar+-- {-# SPECIALIZE traceCall :: Call -> TCM a -> TCM a #-}+traceCall :: (MonadTCM tcm, MonadDebug tcm) => Call -> tcm a -> tcm a traceCall mkCall m = do   let call      = mkCall       callRange = getRange call@@ -107,12 +110,16 @@   isNoHighlighting NoHighlighting{} = True   isNoHighlighting _                = False -{-# SPECIALIZE traceCallCPS :: Call -> (r -> TCM a) -> ((r -> TCM a) -> TCM b) -> TCM b #-}-traceCallCPS :: MonadTCM tcm => Call -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b+-- RULE left-hand side too complicated to desugar+-- {-# SPECIALIZE traceCallCPS :: Call -> (r -> TCM a) -> ((r -> TCM a) -> TCM b) -> TCM b #-}+traceCallCPS :: (MonadTCM tcm, MonadDebug tcm)+             => Call -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b traceCallCPS mkCall ret cc = traceCall mkCall (cc ret) -{-# SPECIALIZE traceCallCPS_ :: Call -> TCM a -> (TCM a -> TCM b) -> TCM b #-}-traceCallCPS_ :: MonadTCM tcm => Call -> tcm a -> (tcm a -> tcm b) -> tcm b+-- RULE left-hand side too complicated to desugar+-- {-# SPECIALIZE traceCallCPS_ :: Call -> TCM a -> (TCM a -> TCM b) -> TCM b #-}+traceCallCPS_ :: (MonadTCM tcm, MonadDebug tcm)+              => Call -> tcm a -> (tcm a -> tcm b) -> tcm b traceCallCPS_ mkCall ret cc =     traceCallCPS mkCall (const ret) (\k -> cc $ k ()) 
src/full/Agda/TypeChecking/Patterns/Abstract.hs view
@@ -1,16 +1,17 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP          #-}+{-# LANGUAGE TypeFamilies #-}  -- | Tools to manipulate patterns in abstract syntax --   in the TCM (type checking monad).  module Agda.TypeChecking.Patterns.Abstract where -import Data.List+import qualified Data.List as List import Data.Traversable hiding (mapM, sequence) import Data.Void  import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Pattern import Agda.Syntax.Abstract.Views import Agda.Syntax.Concrete (FieldAssignment') import Agda.Syntax.Common@@ -34,7 +35,7 @@   where     expand p = case asView p of       (xs, A.LitP (LitNat r n))-        | n < 0     -> __IMPOSSIBLE__+        | n < 0     -> negLit -- Andreas, issue #2365, negative literals not yet supported.         | n > 20    -> tooBig         | otherwise -> do           Con z _ _ <- ignoreSharing <$> primZero@@ -43,58 +44,64 @@               suc p = A.ConP cinfo (A.AmbQ [setRange r $ conName s]) [defaultNamedArg p]               info  = A.PatRange r               cinfo = A.ConPatInfo ConOCon info-              p'    = foldr ($) zero $ genericReplicate n suc+              p'    = foldr ($) zero $ List.genericReplicate n suc           return $ foldr (A.AsP info) p' xs       _ -> return p     tooBig = typeError $ GenericError $       "Matching on natural number literals is done by expanding " ++       "the literal to the corresponding constructor pattern, so " ++       "you probably don't want to do it this way."+    negLit = typeError $ GenericError $+      "Negative literals are not supported in patterns"   -- | Expand away (deeply) all pattern synonyms in a pattern.-class ExpandPatternSynonyms a where-  expandPatternSynonyms :: a -> TCM a -instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Maybe a) where-  expandPatternSynonyms = traverse expandPatternSynonyms+-- Unfortunately, the more general type signature+--+--   expandPatternSynonyms :: forall a p . APatternLike a p => p -> TCM p+--+-- is rejected by GHC 7.10+--+--   Could not deduce (APatternLike A.Expr p)+--     arising from a use of ‘postTraverseAPatternM’+--+-- I am mystified (Andreas, 2017-07-27) -instance ExpandPatternSynonyms a => ExpandPatternSynonyms [a] where-  expandPatternSynonyms = traverse expandPatternSynonyms+-- expandPatternSynonyms :: forall a p . APatternLike a p => p -> TCM p -instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Arg a) where-  expandPatternSynonyms = traverse expandPatternSynonyms+-- As a workaround, we define this function only for a = A.Exp, p = A.Pattern'+-- and keep the type class ExpandPatternSynonyms (which would otherwise be superfluous). -instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Named n a) where+expandPatternSynonyms' :: A.Pattern -> TCM A.Pattern+expandPatternSynonyms' = postTraverseAPatternM $ \case++  A.PatternSynP i x as -> setCurrentRange i $ do+    (ns, p) <- killRange <$> lookupPatternSyn x++    -- Must expand arguments before instantiating otherwise pattern+    -- synonyms could get into dot patterns (which is __IMPOSSIBLE__).+    p :: A.Pattern <- expandPatternSynonyms' (vacuous p :: A.Pattern)++    case A.insertImplicitPatSynArgs (A.WildP . PatRange) (getRange x) ns as of+      Nothing       -> typeError $ BadArgumentsToPatternSynonym x+      Just (_, _:_) -> typeError $ TooFewArgumentsToPatternSynonym x+      Just (s, [])  -> return $ setRange (getRange i) $ A.substPattern s p++  p -> return p++class ExpandPatternSynonyms a where+  expandPatternSynonyms :: a -> TCM a++  default expandPatternSynonyms+    :: (Traversable f, ExpandPatternSynonyms b, f b ~ a) => a -> TCM a   expandPatternSynonyms = traverse expandPatternSynonyms +instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Maybe a)            where+instance ExpandPatternSynonyms a => ExpandPatternSynonyms [a]                  where+instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Arg a)              where+instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Named n a)          where instance ExpandPatternSynonyms a => ExpandPatternSynonyms (FieldAssignment' a) where-  expandPatternSynonyms = traverse expandPatternSynonyms  instance ExpandPatternSynonyms A.Pattern where- expandPatternSynonyms p =-  case p of-    A.VarP{}             -> return p-    A.WildP{}            -> return p-    A.DotP{}             -> return p-    A.LitP{}             -> return p-    A.AbsurdP{}          -> return p-    A.ProjP{}            -> return p-    A.ConP i ds as       -> A.ConP i ds <$> expandPatternSynonyms as-    A.DefP i q as        -> A.DefP i q <$> expandPatternSynonyms as-    A.AsP i x p          -> A.AsP i x <$> expandPatternSynonyms p-    A.RecP i as          -> A.RecP i <$> expandPatternSynonyms as-    A.PatternSynP i x as -> setCurrentRange i $ do-      p <- killRange <$> lookupPatternSyn x-        -- Must expand arguments before instantiating otherwise pattern-        -- synonyms could get into dot patterns (which is __IMPOSSIBLE__)-      instPatternSyn p =<< expandPatternSynonyms as--      where-        instPatternSyn :: A.PatternSynDefn -> [NamedArg A.Pattern] -> TCM A.Pattern-        instPatternSyn (ns, p) as = do-          p <- expandPatternSynonyms (vacuous p)-          case A.insertImplicitPatSynArgs (A.WildP . PatRange) (getRange x) ns as of-            Nothing       -> typeError $ BadArgumentsToPatternSynonym x-            Just (_, _:_) -> typeError $ TooFewArgumentsToPatternSynonym x-            Just (s, [])  -> return $ setRange (getRange i) $ A.substPattern s p+  expandPatternSynonyms = expandPatternSynonyms'
src/full/Agda/TypeChecking/Patterns/Match.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP                      #-} {-# LANGUAGE NondecreasingIndentation #-}  -- | Pattern matcher used in the reducer for clauses that@@ -20,7 +19,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Monad hiding (reportSDoc)+import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Records import Agda.TypeChecking.Datatypes@@ -142,9 +141,9 @@           , nest 2 $ text "ps =" <+> fsep (punctuate comma $ map (prettyTCM . namedArg) ps)           , nest 2 $ text "vs =" <+> fsep (punctuate comma $ map prettyTCM vs)           ]) $ do-     -- Buggy, see issue 1124:-     -- mapFst mconcat . unzip <$> zipWithM' (matchCopattern . namedArg) ps vs-     foldMatch (matchCopattern . namedArg) ps vs+  -- Buggy, see issue 1124:+  -- mapFst mconcat . unzip <$> zipWithM' (matchCopattern . namedArg) ps vs+  foldMatch (matchCopattern . namedArg) ps vs  -- | Match a single copattern. matchCopattern :: DeBruijnPattern@@ -168,10 +167,10 @@           , nest 2 $ text "ps =" <+> fsep (punctuate comma $ map (text . show) ps)           , nest 2 $ text "vs =" <+> fsep (punctuate comma $ map prettyTCM vs)           ]) $ do-     -- Buggy, see issue 1124:-     -- (ms,vs) <- unzip <$> zipWithM' (matchPattern . namedArg) ps vs-     -- return (mconcat ms, vs)-     foldMatch (matchPattern . namedArg) ps vs+  -- Buggy, see issue 1124:+  -- (ms,vs) <- unzip <$> zipWithM' (matchPattern . namedArg) ps vs+  -- return (mconcat ms, vs)+  foldMatch (matchPattern . namedArg) ps vs  -- | Match a single pattern. matchPattern :: DeBruijnPattern@@ -182,6 +181,7 @@   (VarP x , arg          ) -> return (Yes NoSimplification entry, arg)     where entry = singleton (dbPatVarIndex x, arg)   (DotP _ , arg@(Arg _ v)) -> return (Yes NoSimplification empty, arg)+  (AbsurdP _ , arg@(Arg _ v)) -> return (Yes NoSimplification empty, arg)   (LitP l , arg@(Arg _ v)) -> do     w <- reduceB' v     let arg' = arg $> ignoreBlocking w
src/full/Agda/TypeChecking/Polarity.hs view
@@ -5,7 +5,6 @@ import Control.Applicative import Control.Monad.State -import Data.List import Data.Maybe import Data.Traversable (traverse) @@ -16,6 +15,7 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty+import Agda.TypeChecking.SizedTypes import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Reduce@@ -28,6 +28,7 @@ import Agda.Utils.Maybe ( whenNothingM ) import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty ( prettyShow ) import Agda.Utils.Size  #include "undefined.h"@@ -84,31 +85,53 @@ purgeNonvariant :: [Polarity] -> [Polarity] purgeNonvariant = map (\ p -> if p == Nonvariant then Covariant else p) ++-- | A quick transliterations of occurrences to polarities.+polarityFromPositivity :: QName -> TCM ()+polarityFromPositivity x = inConcreteOrAbstractMode x $ \ def -> do++  -- Get basic polarity from positivity analysis.+  let npars = droppedPars def+  let pol0 = replicate npars Nonvariant ++ map polFromOcc (defArgOccurrences def)+  reportSLn "tc.polarity.set" 15 $+    "Polarity of " ++ prettyShow x ++ " from positivity: " ++ prettyShow pol0++  -- set the polarity in the signature (not the final polarity, though)+  setPolarity x $ drop npars pol0+ ------------------------------------------------------------------------ -- * Computing the polarity of a symbol. ------------------------------------------------------------------------  -- | Main function of this module.-computePolarity :: QName -> TCM ()-computePolarity x = inConcreteOrAbstractMode x $ \ def -> do-  reportSLn "tc.polarity.set" 25 $ "Computing polarity of " ++ show x+computePolarity :: [QName] -> TCM ()+computePolarity xs = do -  -- get basic polarity from positivity analysis+ -- Andreas, 2017-04-26, issue #2554+ -- First, for mutual definitions, obtain a crude polarity from positivity.+ when (length xs >= 2) $ mapM_ polarityFromPositivity xs++ -- Then, refine it.+ forM_ xs $ \ x -> inConcreteOrAbstractMode x $ \ def -> do+  reportSLn "tc.polarity.set" 25 $ "Refining polarity of " ++ prettyShow x++  -- Again: get basic polarity from positivity analysis.   let npars = droppedPars def   let pol0 = replicate npars Nonvariant ++ map polFromOcc (defArgOccurrences def)-  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0+  reportSLn "tc.polarity.set" 15 $+    "Polarity of " ++ prettyShow x ++ " from positivity: " ++ prettyShow pol0  {-   -- get basic polarity from shape of def (arguments matched on or not?)   def      <- getConstInfo x   let usagePol = usagePolarity $ theDef def-  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from definition form: " ++ show usagePol+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ prettyShow x ++ " from definition form: " ++ prettyShow usagePol   let n = genericLength usagePol  -- n <- getArity x   reportSLn "tc.polarity.set" 20 $ "  arity = " ++ show n    -- refine polarity by positivity information   pol0 <- zipWith (/\) usagePol <$> mapM getPol [0..n - 1]-  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ prettyShow x ++ " from positivity: " ++ prettyShow pol0 -}    -- compute polarity of sized types@@ -119,29 +142,17 @@   -- Instantiation takes place in Rules.Decl.instantiateDefinitionType   -- t <- instantiateFull t -- Andreas, 2014-04-11 Issue 1099: needed for   --                        -- variable occurrence test in  dependentPolarity.-  reportSDoc "tc.polarity.set" 15 $ text "Refining polarity with type " <+> prettyTCM t+  reportSDoc "tc.polarity.set" 15 $+    text "Refining polarity with type " <+> prettyTCM t+  reportSDoc "tc.polarity.set" 60 $+    text "Refining polarity with type (raw): " <+> (text .show) t+   pol <- dependentPolarity t (enablePhantomTypes (theDef def) pol1) pol1-  reportSLn "tc.polarity.set" 10 $ "Polarity of " ++ show x ++ ": " ++ show pol+  reportSLn "tc.polarity.set" 10 $ "Polarity of " ++ prettyShow x ++ ": " ++ prettyShow pol    -- set the polarity in the signature   setPolarity x $ drop npars pol -- purgeNonvariant pol -- temporarily disable non-variance -  -- make 'Nonvariant' args 'UnusedArg' in type and clause telescope-  -- Andreas 2012-11-18: skip this for abstract definitions (fixing issue 755).-  -- This means that the most precise type for abstract definitions-  -- is not available, even to other abstract definitions.-  -- A proper fix would be to introduce a second type for use within abstract.-  ---  -- Andreas, 2015-07-01: I thought one should do this for-  -- abstract local definitions in @where@ blocks to fix Issue 1366b,-  --but it is not necessary.-  -- t <- if (defAbstract def == AbstractDef) && not (isAnonymousModuleName $ qnameModule x)-  t <- if (defAbstract def == AbstractDef)-         then return t-         else nonvariantToUnusedArg pol t-  modifySignature $ updateDefinition x $-   updateTheDef (nonvariantToUnusedArgInDef pol) . updateDefType (const t)- -- | Data and record parameters are used as phantom arguments all over --   the test suite (and possibly in user developments). --   @enablePhantomTypes@ turns 'Nonvariant' parameters to 'Covariant'@@ -151,7 +162,7 @@   Datatype{ dataPars = np } -> enable np   Record  { recPars  = np } -> enable np   _                         -> pol-  where enable np = let (pars, rest) = genericSplitAt np pol+  where enable np = let (pars, rest) = splitAt np pol                     in  purgeNonvariant pars ++ rest  {- UNUSED@@ -186,20 +197,21 @@ dependentPolarity t []     (_ : _)     = __IMPOSSIBLE__ dependentPolarity t (q:qs) pols@(p:ps) = do   t <- reduce $ unEl t+  reportSDoc "tc.polarity.dep" 20 $ text "dependentPolarity t = " <+> prettyTCM t+  reportSDoc "tc.polarity.dep" 70 $ text "dependentPolarity t = " <+> (text . show) t   case ignoreSharing t of     Pi dom b -> do-      let c = absBody b-      ps <- dependentPolarity c qs ps-      let mp = ifM (isJust <$> isSizeType (unDom dom)) (return p) (return q)-      p  <- case b of-              Abs{} | p /= Invariant  ->-                -- Andreas, 2014-04-11 see Issue 1099-                -- Free variable analysis is not in the monad,-                -- hence metas must have been instantiated before!-                ifM (relevantInIgnoringNonvariant 0 c ps)-                  (return Invariant)-                  mp-              _ -> mp+      ps <- underAbstraction dom b $ \ c -> dependentPolarity c qs ps+      let fallback = ifM (isJust <$> isSizeType (unDom dom)) (return p) (return q)+      p <- case b of+        Abs{} | p /= Invariant  ->+          -- Andreas, 2014-04-11 see Issue 1099+          -- Free variable analysis is not in the monad,+          -- hence metas must have been instantiated before!+          ifM (relevantInIgnoringNonvariant 0 (absBody b) ps)+            {- then -} (return Invariant)+            {- else -} fallback+        _ -> fallback       return $ p : ps     _ -> return pols @@ -214,55 +226,6 @@               else relevantInIgnoringNonvariant (i + 1) (absBody b) ps     _ -> return $ i `relevantInIgnoringSortAnn` t --- * Turn polarity 'Nonvariant' into relevance 'UnusedArg'---- | Record information that an argument is unused in 'Relevance'.-mkUnused :: Relevance -> Relevance-mkUnused Relevant = UnusedArg   -- commenting out this line switches off 'UnusedArg' polarity machinery-mkUnused r        = r  -- 'Irrelevant' is more informative than 'UnusedArg'.---- | Improve 'Relevance' information in a type by polarity information.---   'Nonvariant' becomes 'UnusedArg'.-nonvariantToUnusedArg :: [Polarity] -> Type -> TCM Type-nonvariantToUnusedArg []     t = return t-nonvariantToUnusedArg (p:ps) t = do-  t <- reduce t-  case ignoreSharingType t of-    El s (Pi a b) -> do-      let a' = if p == Nonvariant then mapRelevance mkUnused a else a-      El s . Pi a' <$> traverse (nonvariantToUnusedArg ps) b-        -- we do not lift properly but bound variables do not matter for reduce-        -- also, we do not maintain the context-    _ -> return t---- | Propagate 'Nonvariant' 'Polarity' to 'Relevance' information in---   'Arg's of a defined symbol.-nonvariantToUnusedArgInDef :: [Polarity] -> Defn -> Defn-nonvariantToUnusedArgInDef pol def = case def of-  Function { funClauses = cl } ->-       def { funClauses = map (nonvariantToUnusedArgInClause pol) cl }-  _ -> def--nonvariantToUnusedArgInClause :: [Polarity] -> Clause -> Clause-nonvariantToUnusedArgInClause pol cl@Clause{clauseTel = tel, namedClausePats = ps} =-  let adjPat p Nonvariant-        | properlyMatching (namedArg p) = __IMPOSSIBLE__ -- if we match, we cannot be Nonvariant (sanity check)-        | otherwise                     = mapRelevance mkUnused p-      adjPat p _    = p-      -- change relevance of 'Nonvariant' arguments to 'UnusedArg'-      -- note that the associated patterns cannot be 'ConP' or 'LitP'-      ps'   = zipWith adjPat ps (pol ++ repeat Invariant)-      -- get a list of 'Relevance's for the variables bound in the pattern-      rels0 = getRelevance <$> (concatMap (patternVars . fmap namedThing) ps')-      -- this is the order the variables appear in the telescope-      perm  = fromMaybe __IMPOSSIBLE__ $ clausePerm cl-      rels  = permute perm rels0-      -- now improve 'Relevance' in 'Telescope' by pattern relevance-      updateDom UnusedArg = mapRelevance mkUnused-      updateDom r          = id-      tel' = telFromList $ zipWith updateDom rels $ telToList tel-   in cl { namedClausePats = ps', clauseTel = tel'}- ------------------------------------------------------------------------ -- * Sized types ------------------------------------------------------------------------@@ -278,12 +241,12 @@     case theDef def of       Datatype{ dataPars = np, dataCons = cons } -> do         let TelV tel _      = telView' $ defType def-            (parTel, ixTel) = genericSplitAt np $ telToList tel+            (parTel, ixTel) = splitAt np $ telToList tel         case ixTel of           []                 -> exit  -- No size index           Dom _ (_, a) : _ -> ifM ((/= Just BoundedNo) <$> isSizeType a) exit $ do             -- we assume the size index to be 'Covariant' ...-            let pol   = genericTake np pol0+            let pol   = take np pol0                 polCo = pol ++ [Covariant]                 polIn = pol ++ [Invariant]             setPolarity d $ polCo@@ -303,7 +266,7 @@                           let isPos = underAbstraction arg tel $ \ tel -> do                                 pols <- zipWithM polarity [0..] $ map (snd . unDom) $ telToList tel                                 reportSDoc "tc.polarity.size" 25 $-                                  text $ "to pass size polarity check, the following polarities need all to be covariant: " ++ show pols+                                  text $ "to pass size polarity check, the following polarities need all to be covariant: " ++ prettyShow pols                                 return $ all (`elem` [Nonvariant, Covariant]) pols                            -- check that the size argument appears in the@@ -329,25 +292,26 @@       _ -> exit  -- | @checkSizeIndex d np i a@ checks that constructor target type @a@---   has form @d ps (↑ i) idxs@ where @|ps| = np@.+--   has form @d ps (↑ⁿ i) idxs@ where @|ps| = np@. -- --   Precondition: @a@ is reduced and of form @d ps idxs0@. checkSizeIndex :: QName -> Nat -> Nat -> Type -> TCM Bool checkSizeIndex d np i a = do-  reportSDoc "tc.polarity.size" 15 $ withShowAllArguments $-    text "checking that constructor target type " <+> prettyTCM a <+>-    text "is data type " <+> prettyTCM d <+>-    text "has size index successor of " <+> prettyTCM (var i)+  reportSDoc "tc.polarity.size" 15 $ withShowAllArguments $ vcat+    [ text "checking that constructor target type " <+> prettyTCM a+    , text "  is data type " <+> prettyTCM d+    , text "  and has size index (successor(s) of) " <+> prettyTCM (var i)+    ]   case ignoreSharing $ unEl a of     Def d0 es -> do       whenNothingM (sameDef d d0) __IMPOSSIBLE__-      s <- sizeView $ unArg ix+      s <- deepSizeView $ unArg ix       case s of-        SizeSuc v | Var j [] <- ignoreSharing v, i == j+        DSizeVar j _ | i == j           -> return $ not $ freeIn i (pars ++ ixs)         _ -> return False       where-        (pars, Apply ix : ixs) = genericSplitAt np es+        (pars, Apply ix : ixs) = splitAt np es     _ -> __IMPOSSIBLE__  -- | @polarities i a@ computes the list of polarities of de Bruijn index @i@
src/full/Agda/TypeChecking/Polarity.hs-boot view
@@ -4,5 +4,5 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base -computePolarity :: QName -> TCM ()+computePolarity :: [QName] -> TCM () composePol      :: Polarity -> Polarity -> Polarity
src/full/Agda/TypeChecking/Positivity.hs view
@@ -18,7 +18,7 @@ import Data.Graph (SCC(..), flattenSCC) import Data.IntMap (IntMap) import qualified Data.IntMap as IntMap-import Data.List as List hiding (null)+import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid (mconcat)@@ -30,26 +30,31 @@  import Agda.Syntax.Common import qualified Agda.Syntax.Info as Info-import Agda.Syntax.Position (fuseRange, Range, HasRange(..), noRange) import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern-import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..))-import Agda.TypeChecking.Records+import Agda.Syntax.Position (fuseRange, Range, HasRange(..), noRange)+import Agda.TypeChecking.Datatypes ( isDataOrRecordType )+import Agda.TypeChecking.Functions import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin (primInf, CoinductionKit(..), coinductionKit)-import Agda.TypeChecking.Reduce import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Records+import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Warnings  import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph+import Agda.Utils.Function (applyUnless) import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import qualified Agda.Utils.Permutation as Perm+import qualified Agda.Utils.Pretty as P+import Agda.Utils.Pretty (Pretty, prettyShow) import Agda.Utils.SemiRing import Agda.Utils.Singleton import Agda.Utils.Size@@ -70,7 +75,7 @@   let qs = Set.toList qset   reportSDoc "tc.pos.tick" 100 $ text "positivity of" <+> prettyTCM qs   g <- buildOccurrenceGraph qset-  let (gstar, sccs') =+  let (gstar, sccs) =         Graph.gaussJordanFloydWarshallMcNaughtonYamada $ fmap occ g   reportSDoc "tc.pos.tick" 100 $ text "constructed graph"   reportSLn "tc.pos.graph" 5 $ "Positivity graph: N=" ++ show (size $ Graph.nodes g) ++@@ -92,18 +97,27 @@   reportSDoc "tc.pos.tick" 100 $ text "set args"    -- check positivity for all strongly connected components of the graph for qs-  let sccs = map flattenSCC sccs'   reportSDoc "tc.pos.graph.sccs" 10 $ do-    let (triv, others) = partitionEithers $ for sccs' $ \ scc -> case scc of+    let (triv, others) = partitionEithers $ for sccs $ \case           AcyclicSCC v -> Left v           CyclicSCC vs -> Right vs     sep [ text $ show (length triv) ++ " trivial sccs"         , text $ show (length others) ++ " non-trivial sccs with lengths " ++             show (map length others)         ]-  reportSDoc "tc.pos.graph.sccs" 15 $ text $ "  sccs = " ++ show sccs-  forM_ sccs $ \ scc -> setMut [ q | DefNode q <- scc ]-  mapM_ (checkPos g gstar) $ qs+  reportSLn "tc.pos.graph.sccs" 15 $+    "  sccs = " ++ prettyShow [ scc | CyclicSCC scc <- sccs ]+  forM_ sccs $ \case+    -- If the mutuality information has never been set, we set it to []+    AcyclicSCC (DefNode q) -> whenM (isNothing <$> getMutual q) $ do+      reportSLn "tc.pos.mutual" 10 $ "setting " ++ prettyShow q ++ " to non-recursive"+      -- Andreas, 2017-04-26, issue #2555+      -- We should not have @DefNode@s pointing outside our formal mutual block.+      unless (Set.member q qset) __IMPOSSIBLE__+      setMutual q []+    AcyclicSCC (ArgNode{}) -> return ()+    CyclicSCC scc          -> setMut [ q | DefNode q <- scc ]+  mapM_ (checkPos g gstar) qs   reportSDoc "tc.pos.tick" 100 $ text "checked positivity"    where@@ -195,12 +209,12 @@      -- Set the mutually recursive identifiers for a SCC.     setMut :: [QName] -> TCM ()-    setMut []  = return ()  -- nothing to do-    setMut [q] = return ()  -- no mutual recursion-    setMut qs  = forM_ qs $ \ q -> setMutual q (delete q qs)-      -- TODO: The previous line is at least quadratic in the length-      -- of qs (assuming that the expression "delete q qs" is always-      -- forced, for instance due to serialisation). Presumably qs is+    setMut [] = return ()  -- nothing to do+    setMut qs = forM_ qs $ \ q -> do+      reportSLn "tc.pos.mutual" 10 $ "setting " ++ prettyShow q ++ " to (mutually) recursive"+      setMutual q qs+      -- TODO: The previous line produces data of quadratic size+      -- (which has to be processed upon serialization).  Presumably qs is       -- usually short, but in some cases (for instance for generated       -- code) it may be long. Wouldn't it be better to assign a       -- unique identifier to each SCC, and avoid storing lists?@@ -221,7 +235,7 @@               map findOcc [0 .. max m (n - 1)]         reportSDoc "tc.pos.args" 10 $ sep           [ text "args of" <+> prettyTCM q <+> text "="-          , nest 2 $ prettyList $ map (text . show) args+          , nest 2 $ prettyList $ map prettyTCM args           ]         -- The list args can take a long time to compute, but contains         -- small elements, and is stored in the interface (right?), so@@ -258,7 +272,7 @@       nth n = pwords $ show (n + 1) ++ "th"        -- remove consecutive duplicates-      uniq = map head . group+      uniq = map head . List.group        prettyOs [] = __IMPOSSIBLE__       prettyOs [o] = prettyO o <> text "."@@ -564,63 +578,44 @@       <+> prettyTCM cur   OccursAs (InDefOf q) <$> case theDef def of     Function{funClauses = cs} -> do-      n  <- getDefArity def-      cs <- map (etaExpandClause n) <$> instantiateFull cs+      cs <- mapM etaExpandClause =<< instantiateFull cs       Concat . zipWith (OccursAs . InClause) [0..] <$>         mapM (getOccurrences []) cs     Datatype{dataClause = Just c} -> getOccurrences [] =<< instantiateFull c-    Datatype{dataPars = np, dataCons = cs}       -> do+    Datatype{dataPars = np0, dataCons = cs}       -> do       -- Andreas, 2013-02-27: first, each data index occurs as matched on.       TelV tel t <- telView $ defType def-      let xs  = [np .. size tel - 1] -- argument positions corresponding to indices-          ioccs = Concat $ map (OccursAs Matched . OccursHere . AnArg) xs+      -- Andreas, 2017-04-26, issue #2554: count first index as parameter if it has type Size.+      -- We compute sizeIndex=1 if first first index has type Size, otherwise sizeIndex==0+      sizeIndex <- caseMaybe (headMaybe $ drop np0 $ telToList tel) (return 0) $ \ dom -> do+        caseMaybeM (isSizeType dom) (return 0) $ \ _ -> return 1+      let np = np0 + sizeIndex+      let xs = [np .. size tel - 1] -- argument positions corresponding to indices+          ioccs = Concat $ map (OccursHere . AnArg) [np0 .. np - 1]+                        ++ map (OccursAs Matched . OccursHere . AnArg) xs       -- Then, we compute the occurrences in the constructor types.       let conOcc c = do             a <- defType <$> getConstInfo c             TelV tel t <- telView' <$> normalise a -- normalization needed e.g. for test/succeed/Bush.agda             let indices = case unEl t of-                            Def _ vs -> genericDrop np vs+                            Def _ vs -> drop np vs                             _        -> __IMPOSSIBLE__-            let tel'    = telFromList $ genericDrop np $ telToList tel+            let tel'    = telFromList $ drop np $ telToList tel                 vars np = map (Just . AnArg) $ downFrom np             (>+<) <$> (OccursAs (ConArgType c) <$> getOccurrences (vars np) tel')                   <*> (OccursAs (IndArgType c) . OnlyVarsUpTo np <$> getOccurrences (vars $ size tel) indices)       (>+<) ioccs <$> (Concat <$> mapM conOcc cs)     Record{recClause = Just c} -> getOccurrences [] =<< instantiateFull c     Record{recPars = np, recTel = tel} -> do-      let tel' = telFromList $ genericDrop np $ telToList tel+      let tel' = telFromList $ drop np $ telToList tel           vars = map (Just . AnArg) $ downFrom np-      getOccurrences vars =<< instantiateFull tel'+      getOccurrences vars =<< normalise tel' -- Andreas, 2017-01-01, issue #1899, treat like data types      -- Arguments to other kinds of definitions are hard-wired.     Constructor{} -> return emptyOB     Axiom{}       -> return emptyOB     Primitive{}   -> return emptyOB-    AbstractDefn  -> __IMPOSSIBLE__---- | Eta expand a clause to have the given number of variables.---   Warning: doesn't put correct types in telescope!---   This is used instead of special treatment of lambdas---   (which was unsound: issue 121)-etaExpandClause :: Nat -> Clause -> Clause-etaExpandClause n c-  | m <= 0    = c-  | otherwise = c-      { namedClausePats = raise m (namedClausePats c) ++-                          map (\i -> defaultArg $ namedDBVarP i underscore) (downFrom m)-      , clauseBody      = liftBody m $ clauseBody c-      , clauseTel       = telFromList $-          telToList (clauseTel c) ++ (replicate m $ (underscore,) <$> dummyDom)-          -- dummyDom, not __IMPOSSIBLE__, because of debug printing.-      }-  where-    m = n - genericLength (namedClausePats c)--    vars = map (defaultArg . var) $ downFrom m---    vars = reverse [ defaultArg $ var i | i <- [0..m - 1] ]--    liftBody m (Just v) = Just $ raise m v `apply` vars-    liftBody m Nothing  = Nothing+    AbstractDefn{}-> __IMPOSSIBLE__  -- Building the occurrence graph ------------------------------------------ @@ -628,17 +623,19 @@           | ArgNode !QName !Nat   deriving (Eq, Ord) -instance Show Node where-  show (DefNode q)   = show q-  show (ArgNode q i) = show q ++ "." ++ show i+instance Pretty Node where+  pretty = \case+    DefNode q   -> P.pretty q+    ArgNode q i -> P.pretty q P.<> P.text ("." ++ show i)  instance PrettyTCM Node where-  prettyTCM (DefNode q)   = prettyTCM q-  prettyTCM (ArgNode q i) = prettyTCM q <> text ("." ++ show i)+  prettyTCM = return . P.pretty  instance PrettyTCM n => PrettyTCM (WithNode n Edge) where-  prettyTCM (WithNode n (Edge o w)) =-    prettyTCM o <+> prettyTCM n <+> fsep (pwords $ show w)+  prettyTCM (WithNode n (Edge o w)) = vcat+    [ prettyTCM o <+> prettyTCM n+    , nest 2 $ return $ P.pretty w+    ]  -- | Edge labels for the positivity graph. data Edge = Edge !Occurrence OccursWhere@@ -698,7 +695,7 @@                    text (show i) <> text ":" <+> text (show n) <+>                    text "occurrences, of total size" <+>                    text (show s)) $-           sortBy (compare `on` fst . snd) $+           List.sortBy (compare `on` fst . snd) $            map (\(i, os) -> (i, (length os, sum $ map size os))) $            Map.toList (flatten occs))       reportSDoc "tc.pos.occs" 50 $@@ -706,7 +703,7 @@            map (\(i, os) ->                    (text (show i) <> text ":")                      $+$-                   (nest 2 $ vcat $ map (text . show) os))+                   (nest 2 $ vcat $ map (return . P.pretty) os))                (Map.toList (flatten occs)))        -- Placing this line before the reportSDoc lines above creates a@@ -720,8 +717,8 @@            map (\e ->                    let Edge o w = Graph.label e in                    prettyTCM (Graph.source e) <+>-                   text "-[" <+> text (show o) <> text "," <+>-                                 text (show w) <+> text "]->" <+>+                   text "-[" <+> return (P.pretty o) <> text "," <+>+                                 return (P.pretty w) <+> text "]->" <+>                    prettyTCM (Graph.target e))                es) @@ -762,16 +759,20 @@                          [ mkEdge to pol ob | ob <- obs ]     OccursAs' w ob  -> do (to, pol) <- mkEdge' to pol w                           mkEdge to pol ob-    OccursHere' i o -> return $-                         if null pol-                         then id-                         else (Graph.Edge-                                 { Graph.source = case i of-                                                    AnArg i -> ArgNode q i-                                                    ADef q  -> DefNode q-                                 , Graph.target = to-                                 , Graph.label  = Edge pol o-                                 } :)+    OccursHere' (AnArg i) o ->+      return $ applyUnless (null pol) (Graph.Edge+        { Graph.source = ArgNode q i+        , Graph.target = to+        , Graph.label  = Edge pol o+        } :)+    OccursHere' (ADef q') o ->+      -- Andreas, 2017-04-26, issue #2555+      -- Skip nodes pointing outside the mutual block.+      return $ applyUnless (null pol || Set.notMember q' muts) (Graph.Edge+        { Graph.source = DefNode q'+        , Graph.target = to+        , Graph.label  = Edge pol o+        } :)    mkEdge' to !pol w = case w of     VarArg         -> mixed
src/full/Agda/TypeChecking/Positivity/Occurrence.hs view
@@ -15,20 +15,26 @@ import Control.Applicative import Control.DeepSeq import Control.Monad++import Data.Data (Data) import Data.Either+import Data.Foldable (toList) import Data.Maybe-import Data.Typeable (Typeable) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map-import qualified Data.Sequence as DS+import Data.Sequence (Seq)+import qualified Data.Sequence as Seq+import Data.Typeable (Typeable)  import Agda.Syntax.Common import Agda.Syntax.Abstract.Name import Agda.Syntax.Position+ import Agda.Utils.Graph.AdjacencyMap.Unidirectional (Graph) import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph import Agda.Utils.List import Agda.Utils.Null+import Agda.Utils.Pretty import Agda.Utils.SemiRing  #include "undefined.h"@@ -42,10 +48,10 @@ data OccursWhere   = Unknown     -- ^ an unknown position (treated as negative)-  | Known Range (DS.Seq Where)+  | Known Range (Seq Where)     -- ^ The elements of the sequence, from left to right, explain how     -- to get to the occurrence.-  deriving (Show, Eq, Ord)+  deriving (Show, Eq, Ord, Typeable, Data)  -- | One part of the description of an occurrence. data Where@@ -59,7 +65,7 @@   | InClause Nat     -- ^ in the nth clause of a defined function   | Matched          -- ^ matched against in a clause of a defined function   | InDefOf QName    -- ^ in the definition of a constant-  deriving (Show, Eq, Ord)+  deriving (Show, Eq, Ord, Typeable, Data)  -- | Subterm occurrences for positivity checking. --   The constructors are listed in increasing information they provide:@@ -72,8 +78,39 @@   | StrictPos -- ^ Strictly positive occurrence.   | GuardPos  -- ^ Guarded strictly positive occurrence (i.e., under ∞).  For checking recursive records.   | Unused    --  ^ No occurrence.-  deriving (Typeable, Show, Eq, Ord, Enum, Bounded)+  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded) +-- * Pretty instances++instance Pretty Occurrence where+  pretty = text . \case+    Unused    -> "_"+    Mixed     -> "*"+    JustNeg   -> "-"+    JustPos   -> "+"+    StrictPos -> "++"+    GuardPos  -> "g+"++instance Pretty Where where+  pretty = \case+    LeftOfArrow  -> text "LeftOfArrow"+    DefArg q i   -> text "DefArg"     <+> pretty q <+> pretty i+    UnderInf     -> text "UnderInf"+    VarArg       -> text "VarArg"+    MetaArg      -> text "MetaArg"+    ConArgType q -> text "ConArgType" <+> pretty q+    IndArgType q -> text "IndArgType" <+> pretty q+    InClause i   -> text "InClause"   <+> pretty i+    Matched      -> text "Matched"+    InDefOf q    -> text "InDefOf"    <+> pretty q++instance Pretty OccursWhere where+  pretty = \case+    Unknown     -> text "Unknown"+    Known _r ws -> text "Known _" <+> pretty (toList ws)++-- * Instances for 'Occurrence'+ instance NFData Occurrence where rnf x = seq x ()  instance KillRange Occurrence where@@ -129,7 +166,7 @@ instance Null Occurrence where   empty = Unused --- | The map contains bindings of the form @bound |-> es@, satisfying+-- | The map contains bindings of the form @bound |-> ess@, satisfying -- the following property: for every non-empty list @w@, -- @'foldr1' 'otimes' w '<=' bound@ iff -- @'or' [ 'all' every w '&&' 'any' some w | (every, some) <- ess ]@.
src/full/Agda/TypeChecking/Pretty.hs view
@@ -7,11 +7,11 @@ #if __GLASGOW_HASKELL__ >= 800 {-# OPTIONS_GHC -Wno-semigroup    #-} #endif+ #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-} #endif - module Agda.TypeChecking.Pretty where  import Prelude hiding (null)@@ -21,6 +21,8 @@  import Data.Map (Map) import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set import Data.Maybe  import Agda.Syntax.Position@@ -50,6 +52,7 @@ import Agda.Utils.Maybe import Agda.Utils.Null import Agda.Utils.Permutation (Permutation)+import Agda.Utils.Pretty (Pretty, prettyShow) import qualified Agda.Utils.Pretty as P  #include "undefined.h"@@ -97,11 +100,15 @@ hang :: TCM Doc -> Int -> TCM Doc -> TCM Doc hang p n q = P.hang <$> p <*> pure n <*> q -($$), ($+$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc+infixl 6 <>, <+>, <?>+infixl 5 $$, $+$++($$), ($+$), (<>), (<+>), (<?>) :: TCM Doc -> TCM Doc -> TCM Doc d1 $$ d2  = (P.$$) <$> d1 <*> d2 d1 $+$ d2 = (P.$+$) <$> d1 <*> d2 d1 <> d2  = (P.<>) <$> d1 <*> d2 d1 <+> d2 = (P.<+>) <$> d1 <*> d2+d1 <?> d2 = (P.<?>) <$> d1 <*> d2  nest :: Int -> TCM Doc -> TCM Doc nest n d   = P.nest n <$> d@@ -112,9 +119,12 @@ brackets d = P.brackets <$> d parens d   = P.parens <$> d +pshow :: Show a => a -> TCM Doc+pshow = pure . P.pshow+ -- | Comma-separated list in brackets. prettyList :: [TCM Doc] -> TCM Doc-prettyList ds = brackets $ fsep $ punctuate comma ds+prettyList ds = P.pretty <$> sequence ds  -- | 'prettyList' without the brackets. prettyList_ :: [TCM Doc] -> TCM Doc@@ -147,11 +157,7 @@ instance PrettyTCM a => PrettyTCM (Closure a) where   prettyTCM cl = enterClosure cl prettyTCM -#if __GLASGOW_HASKELL__ >= 710-instance {-# OVERLAPPABLE #-} PrettyTCM a => PrettyTCM [a] where-#else instance PrettyTCM a => PrettyTCM [a] where-#endif   prettyTCM = prettyList . map prettyTCM  instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (a,b) where@@ -172,10 +178,10 @@ instance PrettyTCM Polarity     where prettyTCM = text . show instance PrettyTCM R.Term       where prettyTCM = prettyA <=< toAbstractWithoutImplicit -instance (Show a, PrettyTCM a, Subst a a) => PrettyTCM (Substitution' a) where+instance (Pretty a, PrettyTCM a, Subst a a) => PrettyTCM (Substitution' a) where   prettyTCM IdS        = text "idS"   prettyTCM (Wk m IdS) = text "wkS" <+> pretty m-  prettyTCM EmptyS     = text "emptyS"+  prettyTCM (EmptyS _) = text "emptyS"   prettyTCM rho = prettyTCM u <+> comma <+> prettyTCM rho1     where       (rho1, rho2) = splitS 1 rho@@ -199,7 +205,7 @@     pretty $ NamedMeta mn x  instance PrettyTCM a => PrettyTCM (Blocked a) where-  prettyTCM (Blocked x a) = text "[" <+> prettyTCM a <+> text "]" <> text (show x)+  prettyTCM (Blocked x a) = text "[" <+> prettyTCM a <+> text "]" <> text (P.prettyShow x)   prettyTCM (NotBlocked _ x) = prettyTCM x  instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Named_ a) where@@ -220,7 +226,7 @@ #else instance PrettyTCM ArgName where #endif-  prettyTCM = text . show+  prettyTCM = text . P.prettyShow  -- instance (Reify a e, ToConcrete e c, P.Pretty c, PrettyTCM a) => PrettyTCM (Elim' a) where instance PrettyTCM Elim where@@ -244,11 +250,11 @@   prettyTCM NonStrict  = text ".."   prettyTCM Relevant   = empty   prettyTCM Forced{}   = empty-  prettyTCM UnusedArg  = empty  instance PrettyTCM ProblemConstraint where-  prettyTCM (PConstr []   c) = prettyTCM c-  prettyTCM (PConstr pids c) = prettyList (map prettyTCM pids) <+> prettyTCM c+  prettyTCM (PConstr pids c)+    | Set.null pids = prettyTCM c+    | otherwise     = prettyList (map prettyTCM $ Set.toList pids) <+> prettyTCM c  instance PrettyTCM Constraint where     prettyTCM c = case c of@@ -296,7 +302,18 @@                     , nest 2 $ prettyTCM p ]               Open{}  -> __IMPOSSIBLE__               OpenIFS{}  -> __IMPOSSIBLE__-              InstV{} -> __IMPOSSIBLE__+              InstV{} -> empty+              -- Andreas, 2017-01-11, issue #2637:+              -- The size solver instantiates some metas with infinity+              -- without cleaning up the UnBlock constraints.+              -- Thus, this case is not IMPOSSIBLE.+              --+              -- InstV args t -> do+              --   reportSLn "impossible" 10 $ unlines+              --     [ "UnBlock meta " ++ show m ++ " surprisingly has InstV instantiation:"+              --     , show m ++ show args ++ " := " ++ show t+              --     ]+              --   __IMPOSSIBLE__         FindInScope m mb mcands -> do             t <- getMetaType m             sep [ hang (text "Resolve instance argument" <+> blk) 2 $@@ -384,6 +401,7 @@ instance PrettyTCM a => PrettyTCM (Pattern' a) where   prettyTCM (VarP x)      = prettyTCM x   prettyTCM (DotP t)      = text ".(" <> prettyTCM t <> text ")"+  prettyTCM (AbsurdP _)   = text absurdPatternName   prettyTCM (ConP c i ps) = (if b then braces else parens) $ prTy $         prettyTCM c <+> fsep (map (prettyTCM . namedArg) ps)         where@@ -397,10 +415,13 @@           sep [ prettyTCM (A.qnameName x) <+> text "=" , nest 2 $ prettyTCM $ namedArg p ]         showCon = parens $ prTy $ prettyTCM c <+> fsep (map (prettyTCM . namedArg) ps)         prTy d = d -- caseMaybe (conPType i) d $ \ t -> d  <+> text ":" <+> prettyTCM t-  prettyTCM (LitP l)      = text (show l)-  prettyTCM (ProjP _ q)   = text ("." ++ show q)+  prettyTCM (LitP l)      = text (P.prettyShow l)+  prettyTCM (ProjP _ q)   = text ("." ++ P.prettyShow q)  -- | Proper pretty printing of patterns:+prettyTCMPatterns :: [NamedArg DeBruijnPattern] -> TCM [Doc]+prettyTCMPatterns = mapM prettyA <=< reifyPatterns+ prettyTCMPatternList :: [NamedArg DeBruijnPattern] -> TCM Doc prettyTCMPatternList = prettyList . map prettyA <=< reifyPatterns @@ -408,31 +429,17 @@   prettyTCM (Apply v) = text "$" <+> prettyTCM (unArg v)   prettyTCM (Proj _ f)= text "." <> prettyTCM f -raisePatVars :: Int -> NLPat -> NLPat-raisePatVars k (PVar id x bvs) = PVar id (k+x) bvs-raisePatVars k (PWild)     = PWild-raisePatVars k (PDef f es) = PDef f $ (fmap . fmap) (raisePatVars k) es-raisePatVars k (PLam i u)  = PLam i $ fmap (raisePatVars k) u-raisePatVars k (PPi a b)   =-  PPi (fmap (raisePatVarsInType k) a) (fmap (raisePatVarsInType k) b)-raisePatVars k (PBoundVar i es) = PBoundVar i $ (fmap . fmap) (raisePatVars k) es-raisePatVars k (PTerm t)   = PTerm t--raisePatVarsInType :: Int -> NLPType -> NLPType-raisePatVarsInType k (NLPType l a) =-  NLPType (raisePatVars k l) (raisePatVars k a)- instance PrettyTCM NLPat where-  prettyTCM (PVar id x bvs) = prettyTCM (Var x (map (Apply . fmap var) bvs))+  prettyTCM (PVar x bvs) = prettyTCM (Var x (map (Apply . fmap var) bvs))   prettyTCM (PWild)     = text $ "_"   prettyTCM (PDef f es) = parens $     prettyTCM f <+> fsep (map prettyTCM es)   prettyTCM (PLam i u)  = parens $     text ("λ " ++ absName u ++ " →") <+>-    (addContext (absName u) $ prettyTCM (raisePatVars 1 $ absBody u))+    (addContext (absName u) $ prettyTCM $ absBody u)   prettyTCM (PPi a b)   = parens $     text ("(" ++ absName b ++ " :") <+> prettyTCM (unDom a) <> text ") →" <+>-    (addContext (absName b) $ prettyTCM (raisePatVarsInType 1 $ unAbs b))+    (addContext (absName b) $ prettyTCM $ unAbs b)   prettyTCM (PBoundVar i []) = prettyTCM (var i)   prettyTCM (PBoundVar i es) = parens $ prettyTCM (var i) <+> fsep (map prettyTCM es)   prettyTCM (PTerm t)   = text "." <> parens (prettyTCM t)@@ -462,12 +469,7 @@     ]  instance PrettyTCM Occurrence where-  prettyTCM GuardPos  = text "-[g+]->"-  prettyTCM StrictPos = text "-[++]->"-  prettyTCM JustPos   = text "-[+]->"-  prettyTCM JustNeg   = text "-[-]->"-  prettyTCM Mixed     = text "-[*]->"-  prettyTCM Unused    = text "-[ ]->"+  prettyTCM occ  = text $ "-[" ++ prettyShow occ ++ "]->"  -- | Pairing something with a node (for printing only). data WithNode n a = WithNode n a
src/full/Agda/TypeChecking/Pretty.hs-boot view
@@ -6,7 +6,7 @@ import Agda.Syntax.Internal -- import Agda.Syntax.Literal -import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Base import Agda.Utils.Pretty (Doc) -- import qualified Agda.Utils.Pretty as P 
src/full/Agda/TypeChecking/Primitive.hs view
@@ -1,8 +1,13 @@ {-# LANGUAGE CPP                        #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ScopedTypeVariables        #-} {-# LANGUAGE UndecidableInstances       #-} +-- ASR (2017-04-10). TODO: Is this option required by the final+-- version of GHC 8.2.1 (it was required by the RC 1)?+#if __GLASGOW_HASKELL__ >= 802+{-# OPTIONS -Wno-simplifiable-class-constraints #-}+#endif+ {-| Primitive functions, such as addition on builtin integers. -} module Agda.TypeChecking.Primitive where@@ -21,6 +26,7 @@ import Numeric.IEEE ( IEEE(identicalIEEE) )  import Agda.Interaction.Options+import qualified Agda.Interaction.Options.Lenses as Lens  import Agda.Syntax.Position import Agda.Syntax.Common hiding (Nat)@@ -36,15 +42,21 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Errors+import Agda.TypeChecking.Functions import Agda.TypeChecking.Level import Agda.TypeChecking.Quote (QuotingKit, quoteTermWithKit, quoteTypeWithKit, quoteClauseWithKit, quotingKit) import Agda.TypeChecking.Pretty ()  -- instances only+import Agda.TypeChecking.Warnings +import Agda.Utils.Functor+import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad-import Agda.Utils.Pretty (pretty)+import Agda.Utils.Pretty (pretty, prettyShow)+import Agda.Utils.Size import Agda.Utils.String ( Str(Str), unStr )-import Agda.Utils.Maybe  #include "undefined.h" import Agda.Utils.Impossible@@ -69,7 +81,6 @@     where (q, r) = quotRem a b  instance TermLike Nat where-  traverseTerm  _ = id   traverseTermM _ = pure   foldTerm _      = mempty @@ -164,15 +175,14 @@     irr  <- primIrrelevant     return $ \ i -> info `applys`       [ case getHiding i of-          NotHidden -> vis-          Hidden    -> hid-          Instance  -> ins+          NotHidden  -> vis+          Hidden     -> hid+          Instance{} -> ins       , case getRelevance i of           Relevant   -> rel           Irrelevant -> irr           NonStrict  -> rel           Forced{}   -> irr-          UnusedArg  -> irr       ]  instance ToTerm Fixity' where@@ -358,47 +368,69 @@     Lit lit -> f lit     _       -> Nothing --- trustMe : {a : Level} {A : Set a} {x y : A} -> x ≡ y+-- | @trustMe : {a : Level} {A : Set a} {x y : A} -> x ≡ y@ primTrustMe :: TCM PrimitiveImpl primTrustMe = do-  clo <- commandLineOptions-  when (optSafe clo) (typeError SafeFlagPrimTrustMe)-  t    <- hPi "a" (el primLevel) $-          hPi "A" (return $ sort $ varSort 0) $-          hPi "x" (El (varSort 1) <$> varM 0) $-          hPi "y" (El (varSort 2) <$> varM 1) $-          El (varSort 3) <$>-            primEquality <#> varM 3 <#> varM 2 <@> varM 1 <@> varM 0-  Con rf ci [] <- ignoreSharing <$> primRefl-  n         <- conPars . theDef <$> getConInfo rf-  -- Andreas, 2015-02-27  Forced Big vs. Forced Small should not matter here-  let refl x | n == 2    = Con rf ci [setRelevance (Forced Small) $ hide $ defaultArg x]-             | n == 3    = Con rf ci []-             | otherwise = __IMPOSSIBLE__-  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 4 $ \ts ->-      case ts of-        [a, t, u, v] -> do-            -- Andreas, 2013-07-22.-            -- Note that we cannot call the conversion checker here,-            -- because 'reduce' might be called in a context where-            -- some bound variables do not have a type (just 'Prop),-            -- and the conversion checker for eliminations does not-            -- like this.-            -- We can only do untyped equality, e.g., by normalisation.-            (u', v') <- normalise' (u, v)-            if u' == v' then redReturn (refl $ unArg u) else-              return (NoReduction $ map notReduced [a, t, u, v])-{- OLD:+  -- primTrustMe is not --safe+  whenM (Lens.getSafeMode <$> commandLineOptions) $ warning SafeFlagPrimTrustMe -              -- BAD:-              noConstraints $-                equalTerm (El (Type $ lvlView $ unArg a) (unArg t)) (unArg u) (unArg v)-              redReturn (refl $ unArg u)-            `catchError` \_ -> return (NoReduction $ map notReduced [a, t, u, v])--}-        _ -> __IMPOSSIBLE__+  -- Get the name and type of BUILTIN EQUALITY+  eq   <- primEqualityName+  eqTy <- defType <$> getConstInfo eq+  -- E.g. @eqTy = eqTel → Set a@ where @eqTel = {a : Level} {A : Set a} (x y : A)@.+  TelV eqTel eqCore <- telView eqTy+  let eqSort = case ignoreSharing $ unEl eqCore of+        Sort s -> s+        _      -> __IMPOSSIBLE__ --- Used for both primForce and primForceLemma.+  -- Construct the type of primTrustMe.+  -- E.g., type of @trustMe : {a : Level} {A : Set a} {x y : A} → eq {a} {A} x y@.+  let t = telePi_ (fmap hide eqTel) $ El eqSort $ Def eq $ map Apply $ teleArgs eqTel++  -- BUILTIN REFL maybe a constructor with one (the principal) argument or only parameters.+  -- Get the ArgInfo of the principal argument of refl.+  con@(Con rf ci []) <- ignoreSharing <$> primRefl+  minfo <- fmap (setOrigin Inserted) <$> getReflArgInfo rf+  let (refl :: Arg Term -> Term) = case minfo of+        Just ai -> Con rf ci . (:[]) . setArgInfo ai+        Nothing -> const con++  -- The implementation of primTrustMe:+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ (size eqTel) $ \ ts -> do+    let (u, v) = fromMaybe __IMPOSSIBLE__ $ last2 ts+    -- Andreas, 2013-07-22.+    -- Note that we cannot call the conversion checker here,+    -- because 'reduce' might be called in a context where+    -- some bound variables do not have a type (just 'Prop),+    -- and the conversion checker for eliminations does not+    -- like this.+    -- We can only do untyped equality, e.g., by normalisation.+    (u', v') <- normalise' (u, v)+    if u' == v' then redReturn $ refl u else+      return $ NoReduction $ map notReduced ts++-- | Get the 'ArgInfo' of the principal argument of BUILTIN REFL.+--+--   Returns @Nothing@ for e.g.+--   @+--     data Eq {a} {A : Set a} (x : A) : A → Set a where+--       refl : Eq x x+--   @+--+--   Returns @Just ...@ for e.g.+--   @+--     data Eq {a} {A : Set a} : (x y : A) → Set a where+--       refl : ∀ x → Eq x x+--   @++getReflArgInfo :: ConHead -> TCM (Maybe ArgInfo)+getReflArgInfo rf = do+  def <- getConInfo rf+  TelV reflTel _ <- telView $ defType def+  return $ fmap getArgInfo $ headMaybe $ drop (conPars $ theDef def) $ telToList reflTel+++-- | Used for both @primForce@ and @primForceLemma@. genPrimForce :: TCM Type -> (Term -> Arg Term -> Term) -> TCM PrimitiveImpl genPrimForce b ret = do   let varEl s a = El (varSort s) <$> a@@ -589,7 +621,7 @@ gpi :: ArgInfo -> String -> TCM Type -> TCM Type -> TCM Type gpi info name a b = do   a <- a-  b <- addContext (name, Dom info a) b+  b <- addContext' (name, Dom info a) b   let y = stringToArgName name   return $ El (getSort a `dLub` Abs y (getSort b))               (Pi (Dom info a) (Abs y b))@@ -800,19 +832,22 @@ lookupPrimitiveFunctionQ :: QName -> TCM (String, PrimitiveImpl) lookupPrimitiveFunctionQ q = do   let s = case qnameName q of-            Name _ x _ _ -> show x+            Name _ x _ _ -> prettyShow x   PrimImpl t pf <- lookupPrimitiveFunction s   return (s, PrimImpl t $ pf { primFunName = q })  getBuiltinName :: String -> TCM (Maybe QName) getBuiltinName b = do-  caseMaybeM (getBuiltin' b) (return Nothing) $ \v -> do-    v <- normalise v-    let getName (Def x _) = x-        getName (Con x _ _) = conName x-        getName (Lam _ b) = getName $ ignoreSharing $ unAbs b-        getName _         = __IMPOSSIBLE__-    return $ Just $ getName (ignoreSharing v)+  caseMaybeM (getBuiltin' b) (return Nothing) (Just <.> getName)+  where+  getName v = do+    v <- reduce v+    case unSpine $ ignoreSharing v of+      Def x _   -> return x+      Con x _ _ -> return $ conName x+      Lam _ b   -> getName $ unAbs b+      _ -> __IMPOSSIBLE__+  isBuiltin :: QName -> String -> TCM Bool isBuiltin q b = (Just q ==) <$> getBuiltinName b
src/full/Agda/TypeChecking/ProjectionLike.hs view
@@ -1,5 +1,61 @@ {-# LANGUAGE CPP               #-} +-- | Dropping initial arguments (``parameters'') from a function which can be+--   easily reconstructed from its principal argument.+--+--   A function which has such parameters is called ``projection-like''.+--+--   The motivation for this optimization comes from the use of nested records.+--+--   First, let us look why proper projections need not store the parameters:+--   The type of a projection @f@ is of the form+--   @+--      f : Γ → R Γ → C+--   @+--   where @R@ is the record type and @C@ is the type of the field @f@.+--   Given a projection application+--   @+--      p pars u+--   @+--   we know that the type of the principal argument @u@ is+--   @+--      u : R pars+--   @+--   thus, the parameters @pars@ are redundant in the projection application+--   if we can always infer the type of @u@.+--   For projections, this is case, because the principal argument @u@ must be+--   neutral; otherwise, if it was a record value, we would have a redex,+--   yet Agda maintains a β-normal form.+--+--   The situation for projections can be generalized to ``projection-like''+--   functions @f@.  Conditions:+--+--     1. The type of @f@ is of the form @f : Γ → D Γ → ...@ for some+--        type constructor @D@ which can never reduce.+--+--     2. For every reduced welltyped application @f pars u ...@,+--        the type of @u@ is inferable.+--+--   This then allows @pars@ to be dropped always.+--+--   Condition 2 is approximated by a bunch of criteria, for details see function+--   'makeProjection'.+--+--   Typical projection-like functions are compositions of projections+--   which arise from nested records.+--+--   Notes:+--+--     1. This analysis could be dualized to ``constructor-like'' functions+--        whose parameters are reconstructable from the target type.+--        But such functions would need to be fully applied.+--+--     2. A more general analysis of which arguments are reconstructible+--        can be found in+--+--          Jason C. Reed, Redundancy elimination for LF+--          LFTMP 2004.+ module Agda.TypeChecking.ProjectionLike where  import Control.Monad@@ -21,10 +77,12 @@  import Agda.TypeChecking.DropArgs +import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad-import Agda.Utils.Size import Agda.Utils.Permutation+import Agda.Utils.Pretty ( prettyShow )+import Agda.Utils.Size  #include "undefined.h" import Agda.Utils.Impossible@@ -113,25 +171,59 @@ -- | Which @Def@types are eligible for the principle argument --   of a projection-like function? eligibleForProjectionLike :: QName -> TCM Bool-eligibleForProjectionLike d = do-  defn <- theDef <$> getConstInfo d-  return $ case defn of+eligibleForProjectionLike d = eligible . theDef <$> getConstInfo d+  where+  eligible = \case     Datatype{} -> True     Record{}   -> True     Axiom{}    -> True     Function{}    -> False     Primitive{}   -> False     Constructor{} -> __IMPOSSIBLE__-    AbstractDefn  -> False+    AbstractDefn d -> eligible d+      -- Andreas, 2017-08-14, issue #2682:+      -- Abstract records still export the projections.       -- Andreas, 2016-10-11 AIM XXIV       -- Projection-like at abstract types violates the parameter reconstructibility property.       -- See test/Fail/AbstractTypeProjectionLike.  -- | Turn a definition into a projection if it looks like a projection.+--+-- Conditions for projection-likeness of @f@:+--+--   1. The type of @f@ must be of the shape @Γ → D Γ → C@ for @D@+--      a name (@Def@) which is 'eligibleForProjectionLike':+--      @data@ / @record@ / @postulate@.+--+--   2. The application of f should only get stuck if the principal argument+--      is inferable (neutral).  Thus:+--+--      a. @f@ cannot have absurd clauses (which are stuck even if the principal+--         argument is a constructor)+--+--      b. @f@ cannot be abstract as it does not reduce outside abstract blocks+--         (always stuck).+--+--      c. @f@ cannot match on other arguments than the principal argument.+--+--      d. @f@ cannot match deeply.+--+--      e. @f@s body may not mention the paramters.+--+-- For internal reasons:+--+--   3. @f@ cannot be constructor headed+--+--   4. @f@ cannot be recursive, since we have not implemented a function+--      which goes through the bodies of the @f@ and the mutually recursive+--      functions and drops the parameters from all applications of @f@.+--+-- Examples for these reasons: see test/Succeed/NotProjectionLike.agda+ makeProjection :: QName -> TCM () makeProjection x = -- if True then return () else do  inTopContext $ do-  -- reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"+  reportSLn "tc.proj.like" 70 $ "Considering " ++ prettyShow x ++ " for projection likeness"   defn <- getConstInfo x   let t = defType defn   reportSDoc "tc.proj.like" 20 $ sep@@ -148,7 +240,7 @@     -- Nor can abstract definitions be projection-like since they won't reduce     -- outside the abstract block.     def@Function{funProjection = Nothing, funClauses = cls, funCompiled = cc0, funInv = NotInjective,-                 funMutual = [], -- Andreas, 2012-09-28: only consider non-mutual funs (or those whose recursion status has not yet been determined)+                 funMutual = Just [], -- Andreas, 2012-09-28: only consider non-mutual funs (or those whose recursion status has not yet been determined)                  funAbstr = ConcreteDef} -> do       ps0 <- filterM validProj $ candidateArgs [] t       reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"@@ -157,25 +249,20 @@         -- Andreas 2012-09-26: only consider non-recursive functions for proj.like.         -- Issue 700: problems with recursive funs. in term.checker and reduction         ifM recursive (reportSLn "tc.proj.like" 30 $ "  recursive functions are not considered for projection-likeness") $ do-          ps <- return $ filter (checkOccurs cls . snd) ps0-          when (null ps) $-            reportSLn "tc.proj.like" 50 $+          {- else -}+          case lastMaybe (filter (checkOccurs cls . snd) ps0) of+            Nothing -> reportSLn "tc.proj.like" 50 $               "  occurs check failed\n    clauses = " ++ show cls-          case reverse ps of-            []         -> return ()-            (d, n) : _ -> do+            Just (d, n) -> do+              -- Yes, we are projection-like!               reportSDoc "tc.proj.like" 10 $ sep                 [ prettyTCM x <+> text " : " <+> prettyTCM t                 , text $ " is projection like in argument " ++ show n ++ " for type " ++ show d                 ]-{--              reportSLn "tc.proj.like" 10 $-                show (defName defn) ++ " is projection like in argument " ++-                show n ++ " for type " ++ show d--}+              __CRASH_WHEN__ "tc.proj.like.crash" 1000+               let cls' = map (dropArgs n) cls                   cc   = dropArgs n cc0-              -- cc <- compileClauses (Just (x, __IMPOSSIBLE__)) cls'               reportSLn "tc.proj.like" 60 $ "  rewrote clauses to\n    " ++ show cc                -- Andreas, 2013-10-20 build parameter dropping function@@ -183,7 +270,7 @@                   tel = take pIndex $ telToList $ theTel $ telView' t               unless (length tel == pIndex) __IMPOSSIBLE__               let projection = Projection-                    { projProper   = False+                    { projProper   = Nothing                     , projOrig     = x                     , projFromType = d                     , projIndex    = pIndex@@ -235,8 +322,9 @@       where         Perm _ p = fromMaybe __IMPOSSIBLE__ $ clausePerm cl         ps       = namedClausePats cl-        b        = compiledClauseBody cl-        m        = size $ concatMap patternVars $ clausePats cl+        b        = compiledClauseBody cl  -- Renumbers variables to match order in patterns+                                          -- and includes dot patterns as variables.+        m        = size $ concatMap patternVars ps  -- This also counts dot patterns!       onlyMatch n ps = all (shallowMatch . namedArg) (take 1 ps1) &&@@ -251,9 +339,11 @@         noMatch ProjP{}= False         noMatch VarP{} = True         noMatch DotP{} = True+        noMatch AbsurdP{} = True +    -- Make sure non of the parameters occurs in the body of the function.     checkBody m n b = not . getAny $ runFree badVar IgnoreNot b-      where badVar (x,_) = Any $ m-1-n < x && x < m+      where badVar x = Any $ m - n <= x && x < m      -- @candidateArgs [var 0,...,var(n-1)] t@ adds @(n,d)@ to the output,     -- if @t@ is a function-type with domain @t 0 .. (n-1)@
src/full/Agda/TypeChecking/Quote.hs view
@@ -3,6 +3,8 @@ module Agda.TypeChecking.Quote where  import Control.Applicative+import Control.Arrow ((&&&))+import Control.Monad import Control.Monad.State (runState, get, put) import Control.Monad.Reader (asks) import Control.Monad.Writer (execWriterT, tell)@@ -20,13 +22,11 @@ import Agda.Syntax.Translation.InternalToAbstract  import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Datatypes ( getConHead ) import Agda.TypeChecking.DropArgs import Agda.TypeChecking.Free import Agda.TypeChecking.Level import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Monad.Exception import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad@@ -116,19 +116,18 @@       t !@! u = pure t @@ pure u        quoteHiding :: Hiding -> ReduceM Term-      quoteHiding Hidden    = pure hidden-      quoteHiding Instance  = pure instanceH-      quoteHiding NotHidden = pure visible+      quoteHiding Hidden     = pure hidden+      quoteHiding Instance{} = pure instanceH+      quoteHiding NotHidden  = pure visible        quoteRelevance :: Relevance -> ReduceM Term       quoteRelevance Relevant   = pure relevant       quoteRelevance Irrelevant = pure irrelevant       quoteRelevance NonStrict  = pure relevant       quoteRelevance Forced{}   = pure relevant-      quoteRelevance UnusedArg  = pure relevant        quoteArgInfo :: ArgInfo -> ReduceM Term-      quoteArgInfo (ArgInfo h r _ _) = arginfo !@ quoteHiding h @@ quoteRelevance r+      quoteArgInfo (ArgInfo h r _) = arginfo !@ quoteHiding h @@ quoteRelevance r        quoteLit :: Literal -> ReduceM Term       quoteLit l@LitNat{}    = litNat    !@! Lit l@@ -162,7 +161,7 @@       quotePats ps = list $ map (quoteArg quotePat . fmap namedThing) ps        quotePat :: DeBruijnPattern -> ReduceM Term-      quotePat (VarP x) | isAbsurdPatternName (dbPatVarName x) = pure absurdP+      quotePat (AbsurdP x)       = pure absurdP       quotePat (VarP x)          = varP !@! quoteString (dbPatVarName x)       quotePat (DotP _)          = pure dotP       quotePat (ConP c _ ps)     = conP !@ quoteQName (conName c) @@ quotePats ps@@ -206,18 +205,26 @@              in  var !@! Lit (LitNat noRange $ fromIntegral n) @@ quoteArgs ts           Lam info t -> lam !@ quoteHiding (getHiding info) @@ quoteAbs quoteTerm t           Def x es   -> do-            def <- getConstInfo x-            let d = theDef def+            defn <- getConstInfo x             n <- getDefFreeVars x             -- #2220: remember to restore dropped parameters-            qx d @@ list (drop n $ defParameters def ++ map (quoteArg quoteTerm) ts)-            where+            let+              conOrProjPars = defParameters defn               ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-              qx Function{ funExtLam = Just (ExtLamInfo h nh), funClauses = cs } =-                    extlam !@ list (map (quoteClause . dropArgs (h + nh)) cs)+              qx Function{ funExtLam = Just (ExtLamInfo h nh), funClauses = cs } = do+                    -- An extended lambda should not have any extra parameters!+                    unless (null conOrProjPars) __IMPOSSIBLE__+                    -- Andreas, 2017-01-23 quoting Ulf+                    -- "One would hope that @n@ includes the @h + nh@ parameters of the ext.lam."+                    -- Let's see!+                    -- unless (n >= h + nh) __IMPOSSIBLE__+                    -- Actually, no, it does not!  ExtLam is not touched by module application.+                    -- TODO: fixe me!  See #2404.+                    extlam !@ list (map (quoteClause . (`apply` (take (h + nh) ts))) cs)               qx Function{ funCompiled = Just Fail, funClauses = [cl] } =                     extlam !@ list [quoteClause $ dropArgs (length (namedClausePats cl) - 1) cl]               qx _ = def !@! quoteName x+            qx (theDef defn) @@ list (drop n $ conOrProjPars ++ map (quoteArg quoteTerm) ts)           Con x ci ts -> do             cDef <- getConstInfo (conName x)             n    <- getDefFreeVars (conName x)@@ -241,8 +248,8 @@                  Function{ funProjection = Just p } -> projIndex p - 1                  _                                  -> 0           TelV tel _ = telView' (defType def)-          hiding     = map getHiding $ take np $ telToList tel-          par h      = arg !@ (arginfo !@ quoteHiding h @@ pure relevant) @@ pure unsupported+          hiding     = map (getHiding &&& getRelevance) $ take np $ telToList tel+          par (h, r) = arg !@ (arginfo !@ quoteHiding h @@ quoteRelevance r) @@ pure unsupported        quoteDefn :: Definition -> ReduceM Term       quoteDefn def =@@ -251,8 +258,10 @@             agdaDefinitionFunDef !@ quoteList quoteClause cs           Datatype{dataPars = np, dataCons = cs} ->             agdaDefinitionDataDef !@! quoteNat (fromIntegral np) @@ quoteList (pure . quoteName) cs-          Record{recConHead = c} ->-            agdaDefinitionRecordDef !@! quoteName (conName c)+          Record{recConHead = c, recFields = fs} ->+            agdaDefinitionRecordDef+              !@! quoteName (conName c)+              @@ quoteList (quoteArg (pure . quoteName)) fs           Axiom{}       -> pure agdaDefinitionPostulate           AbstractDefn{}-> pure agdaDefinitionPostulate           Primitive{primClauses = cs} | not $ null cs ->
src/full/Agda/TypeChecking/ReconstructParameters.hs view
@@ -1,8 +1,10 @@ {-# LANGUAGE CPP #-}+ -- | Reconstruct dropped parameters from constructors.  Used by --   with-abstraction to avoid ill-typed abstractions (#745). Note that the---   term in invalid after parameter reconstruction. Parameters need to be+--   term is invalid after parameter reconstruction. Parameters need to be --   dropped again before using it.+ module Agda.TypeChecking.ReconstructParameters where  import Control.Applicative
src/full/Agda/TypeChecking/RecordPatterns.hs view
@@ -17,7 +17,7 @@ import Control.Monad.Reader import Control.Monad.State -import Data.List+import qualified Data.List as List import Data.Maybe import qualified Data.Map as Map import qualified Data.Traversable as Trav@@ -27,6 +27,7 @@ import Agda.Syntax.Internal.Pattern as I import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Coverage.SplitTree+import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Datatypes import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty hiding (pretty)@@ -64,6 +65,7 @@     VarP{}       -> return [ \ x -> x ]     LitP{}       -> typeError $ ShouldBeRecordPattern p     DotP{}       -> typeError $ ShouldBeRecordPattern p+    AbsurdP{}    -> typeError $ ShouldBeRecordPattern p     ConP c ci ps -> do       whenNothing (conPRecord ci) $         typeError $ ShouldBeRecordPattern p@@ -114,13 +116,22 @@  getEtaAndArity :: QName -> TCM (Bool, Nat) getEtaAndArity c =-  for (getConstructorInfo c) $ \i ->-  case i of+  for (getConstructorInfo c) $ \case     DataCon n        -> (False, n)     RecordCon eta fs -> (eta == YesEta, size fs)  translateCompiledClauses :: CompiledClauses -> TCM CompiledClauses-translateCompiledClauses cc = snd <$> loop cc+translateCompiledClauses cc = do+  reportSDoc "tc.cc.record" 20 $ vcat+    [ text "translate record patterns in compiled clauses"+    , nest 2 $ return $ pretty cc+    ]+  cc <- snd <$> loop cc+  reportSDoc "tc.cc.record" 20 $ vcat+    [ text "translated compiled clauses (no eta record patterns):"+    , nest 2 $ return $ pretty cc+    ]+  return cc   where      loop :: CompiledClauses -> TCM ([Bool], CompiledClauses)@@ -139,7 +150,7 @@        -- recurse on and compute variable status of catch-all clause       (xssa, catchAll) <- unzipMaybe <$> Trav.mapM loop catchAll-      let xsa = maybe (repeat True) id xssa+      let xsa = fromMaybe (repeat True) xssa        -- recurse on compute variable status of literal clauses       (xssl, litMap)   <- Map.unzip <$> Trav.mapM loop litMap@@ -160,8 +171,8 @@                   RecordCon YesEta fs -> return $ Right fs               Just{}  -> return $ Left 0           let (isRC, n)   = either (False,) ((True,) . size) dataOrRecCon-              (xs0, rest) = genericSplitAt (unArg i) xs-              (xs1, xs2 ) = genericSplitAt n rest+              (xs0, rest) = splitAt (unArg i) xs+              (xs1, xs2 ) = splitAt n rest               -- if all dropped variables (xs1) are virgins and we are record cons.               -- then new variable x is also virgin               -- and we can translate away the split@@ -171,7 +182,8 @@               -- get the record fields               fs          = either __IMPOSSIBLE__ id dataOrRecCon               -- if x we can translate-              mcc = if x then [replaceByProjections i (map unArg fs) cc] else []+          mcc <- if x then etaContract [replaceByProjections i (map unArg fs) cc]+                      else return []            when (n /= ar) __IMPOSSIBLE__           return (mcc, xs', WithArity ar cc)@@ -317,8 +329,8 @@         forM ts $ \ (c, t) -> do           (xs, t) <- loop t           (isRC, n) <- getEtaAndArity c-          let (xs0, rest) = genericSplitAt i xs-              (xs1, xs2)  = genericSplitAt n rest+          let (xs0, rest) = splitAt i xs+              (xs1, xs2)  = splitAt n rest               x           = isRC && and xs1               xs'         = xs0 ++ x : xs2           return (xs, (RecordSplitNode c n x, t))@@ -360,8 +372,8 @@           (xs, t) <- loop t           (isRC, n) <- getEtaAndArity c           -- now drop variables from i to i+n-1-          let (xs0, rest) = genericSplitAt i xs-              (xs1, xs2)  = genericSplitAt n rest+          let (xs0, rest) = splitAt i xs+              (xs1, xs2)  = splitAt n rest               -- if all dropped variables are virgins and we are record cons.               -- then new variable x is also virgin               -- and we can translate away the split@@ -484,7 +496,7 @@         -- It is important that dummyDom does not mention any variable         -- (see the definition of reorderTel).         where-        isDotP n = case genericIndex cs n of+        isDotP n = case List.genericIndex cs n of                      Left DotP{} -> True                      _           -> False @@ -523,8 +535,8 @@       , text "Intermediate results:"       , nest 2 $ vcat         [ text "ps        =" <+> text (show ps)-        , text "s         =" <+> prettyList (map prettyTCM s)-        , text "cs        =" <+> prettyList (map prettyTCM cs)+        , text "s         =" <+> prettyTCM s+        , text "cs        =" <+> prettyTCM cs         , text "flattenedOldTel =" <+> (text . show) flattenedOldTel         , text "newTel'   =" <+> (text . show) newTel'         , text "newPerm   =" <+> prettyTCM newPerm@@ -562,7 +574,7 @@  newtype RecPatM a = RecPatM (TCMT (ReaderT Nat (StateT Nat IO)) a)   deriving (Functor, Applicative, Monad,-            MonadIO, MonadTCM,+            MonadIO, MonadTCM, HasOptions, MonadDebug,             MonadReader TCEnv, MonadState TCState)  -- | Runs a computation in the 'RecPatM' monad.@@ -652,7 +664,7 @@   let ps = projections tree       s  = map (\(p, _) -> p x) ps -      count k = genericLength $ filter ((== k) . snd) ps+      count k = length $ filter ((== k) . snd) ps    return $ case tree of     Leaf p     -> (p,   s, [Left p])@@ -697,6 +709,7 @@       return (ConP c ci ps, s, cs) translatePattern p@VarP{} = removeTree (Leaf p) translatePattern p@DotP{} = removeTree (Leaf p)+translatePattern p@AbsurdP{} = removeTree (Leaf p) translatePattern p@LitP{} = return (p, [], []) translatePattern p@ProjP{}= return (p, [], []) @@ -741,6 +754,7 @@ recordTree p@(ConP _ ci _) = return $ Left $ translatePattern p recordTree p@VarP{} = return (Right (Leaf p)) recordTree p@DotP{} = return (Right (Leaf p))+recordTree p@AbsurdP{} = return (Right (Leaf p)) recordTree p@LitP{} = return $ Left $ translatePattern p recordTree p@ProjP{}= return $ Left $ translatePattern p @@ -762,7 +776,7 @@ translateTel (Left (DotP{}) : rest)   tel = Nothing : translateTel rest tel translateTel (Right (n, x, t) : rest) tel = Just (x, t) :                                               translateTel rest-                                                (genericDrop (n VarPat) tel)+                                                (drop (n VarPat) tel) translateTel (Left _ : rest) (t : tel)    = Just t : translateTel rest tel translateTel []              []           = [] translateTel (Left _ : _)    []           = __IMPOSSIBLE__
src/full/Agda/TypeChecking/Records.hs view
@@ -7,7 +7,7 @@ import Control.Monad  import Data.Function-import Data.List+import qualified Data.List as List import Data.Maybe import qualified Data.Set as Set import Data.Traversable (traverse)@@ -46,9 +46,9 @@ --   Use the second argument for missing fields. orderFields :: QName -> a -> [C.Name] -> [(C.Name, a)] -> TCM [a] orderFields r def xs fs = do-  unlessNull (ys \\ nub ys) $ typeError . DuplicateFields . nub-  unlessNull (ys \\ xs)     $ typeError . TooManyFields r-  -- shouldBeNull (xs \\ ys)     $ TooFewFields r+  unlessNull (ys List.\\ List.nub ys) $ typeError . DuplicateFields . List.nub+  unlessNull (ys List.\\ xs)          $ typeError . TooManyFields r+  -- shouldBeNull (xs List.\\ ys)     $ TooFewFields r   return $ order xs fs   where     ys = map fst fs@@ -73,18 +73,16 @@   -> [Arg C.Name]         -- ^ All record field names with 'ArgInfo'.   -> TCM [NamedArg a]     -- ^ Given fields enriched by placeholders for missing explicit fields. insertMissingFields r placeholder fs axs = do-  let -- Just field names.-      xs   = map unArg axs   -- Compute the list of given fields, decorated with the ArgInfo from the record def.   let arg x e =         case [ a | a <- axs, unArg a == x ] of-          [a] -> unnamed e <$ a+          [a] -> nameIfHidden a e <$ a           _   -> defaultNamedArg e -- we only end up here if the field names are bad       givenFields = [ (x, Just $ arg x e) | FieldAssignment x e <- fs ]   -- Compute a list of p[aceholders for the missing visible fields.   let missingExplicits =-       [ (x, Just $ setOrigin Inserted $ unnamed . placeholder <$> a)-       | a <- filter notHidden axs+       [ (x, Just $ setOrigin Inserted $ nameIfHidden a . placeholder <$> a)+       | a <- filter visible axs        , let x = unArg a        , x `notElem` map (view nameFieldA) fs        ]@@ -94,8 +92,15 @@   catMaybes <$> do     -- 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-+    orderFields r Nothing (map unArg axs) $ givenFields ++ missingExplicits+  where+    -- Andreas, 2017-04-13, issue #2494+    -- We need to put the field names as argument names for hidden arguments.+    -- Otherwise, insertImplicit does not do the right thing.+    nameIfHidden :: Arg C.Name -> c -> Named_ c+    nameIfHidden ax+      | visible ax = unnamed+      | otherwise  = named (Ranged (getRange ax) $ prettyShow $ unArg ax)  -- | The name of the module corresponding to a record. recordModule :: QName -> ModuleName@@ -111,7 +116,7 @@ getRecordOfField :: QName -> TCM (Maybe QName) getRecordOfField d = caseMaybeM (isProjection d) (return Nothing) $   \ Projection{ projProper = proper, projFromType = r} ->-    return $ if proper then Just (unArg r) else Nothing+    return $ unArg r <$ proper -- if proper then Just (unArg r) else Nothing  -- | Get the field names of a record. getRecordFieldNames :: QName -> TCM [Arg C.Name]@@ -196,7 +201,7 @@       fallback = return (f, def, proj)   caseMaybe proj fallback $     \ p@Projection{ projProper = proper, projOrig = f' } ->-      if not proper || f == f' then fallback else do+      if isNothing proper || f == f' then fallback else do         def <- getConstInfo f'         return (f', def, isProjection_ $ theDef def) @@ -222,7 +227,7 @@   -- if @f@ is not a projection (like) function, @a@ is the correct type       fallback = return $ Just a   reportSDoc "tc.deftype" 20 $ vcat-    [ text "definition f = " <> prettyTCM f <+> text ("raw: " ++ show f)+    [ text "definition f = " <> prettyTCM f <+> text ("  -- raw: " ++ prettyShow f)     , text "has type   a = " <> prettyTCM a     , text "principal  t = " <> prettyTCM t     ]@@ -244,7 +249,7 @@             -- now we know it is reduced, we can safely take the parameters             let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take npars es             reportSDoc "tc.deftype" 20 $ vcat-              [ text $ "head d     = " ++ show d+              [ text $ "head d     = " ++ prettyShow d               , text "parameters =" <+> sep (map prettyTCM pars)               ]             reportSLn "tc.deftype" 60 $ "parameters = " ++ show pars@@ -271,12 +276,46 @@ --   In this case, the first result is not a record type. -- --   Precondition: @t@ is reduced.-projectTyped :: Term -> Type -> ProjOrigin -> QName -> TCM (Maybe (Dom Type, Term, Type))+--+projectTyped+  :: Term        -- ^ Head (record value).+  -> Type        -- ^ Its type.+  -> ProjOrigin+  -> QName       -- ^ Projection.+  -> TCM (Maybe (Dom Type, Term, Type)) projectTyped v t o f = caseMaybeM (getDefType f t) (return Nothing) $ \ tf -> do   ifNotPiType tf (const $ return Nothing) {- else -} $ \ dom b -> do   u <- applyDef o f (argFromDom dom $> v)   return $ Just (dom, u, b `absApp` v) +-- | Typing of an elimination.++data ElimType+  = ArgT (Dom Type)           -- ^ Type of the argument.+  | ProjT+    { projTRec   :: Dom Type  -- ^ The type of the record which is eliminated.+    , projTField :: Type      -- ^ The type of the field.+    }++instance PrettyTCM ElimType where+  prettyTCM (ArgT a)    = prettyTCM a+  prettyTCM (ProjT a b) =+    text "." <> parens (prettyTCM a <+> text "->" <+> prettyTCM b)++-- | Given a head and its type, compute the types of the eliminations.++typeElims :: Type -> Term -> Elims -> TCM [ElimType]+typeElims a _ [] = return []+typeElims a self (e : es) = do+  case e of+    Apply v -> ifNotPiType a __IMPOSSIBLE__ {- else -} $ \ a b -> do+      (ArgT a :) <$> typeElims (absApp b $ unArg v) (self `applyE` [e]) es+    Proj o f -> do+      a <- reduce a+      (dom, self, a) <- fromMaybe __IMPOSSIBLE__ <$> projectTyped self a o f+      (ProjT dom a :) <$> typeElims a self es++ -- | Check if a name refers to an eta expandable record. {-# SPECIALIZE isEtaRecord :: QName -> TCM Bool #-} {-# SPECIALIZE isEtaRecord :: QName -> ReduceM Bool #-}@@ -284,9 +323,10 @@ isEtaRecord r = maybe False recEtaEquality <$> isRecord r  isEtaCon :: HasConstInfo m => QName -> m Bool-isEtaCon c = do-  cdef <- theDef <$> getConstInfo c-  case cdef of+isEtaCon c = getConstInfo' c >>= \case+  Left (SigUnknown err) -> __IMPOSSIBLE__+  Left SigAbstract -> return False+  Right def -> case theDef def of     Constructor {conData = r} -> isEtaRecord r     _ -> return False @@ -305,39 +345,39 @@ -- | Check if a name refers to a record constructor. --   If yes, return record definition. isRecordConstructor :: HasConstInfo m => QName -> m (Maybe (QName, Defn))-isRecordConstructor c = do-  def <- theDef <$> getConstInfo c-  case def of+isRecordConstructor c = getConstInfo' c >>= \case+  Left (SigUnknown err)        -> __IMPOSSIBLE__+  Left SigAbstract             -> return Nothing+  Right def -> case theDef $ def of     Constructor{ conData = r } -> fmap (r,) <$> isRecord r     _                          -> return Nothing  -- | Check if a constructor name is the internally generated record constructor.+--+--   Works also for abstract constructors. isGeneratedRecordConstructor :: QName -> TCM Bool-isGeneratedRecordConstructor c = do-  def <- theDef <$> getConstInfo c-  case def of-    Constructor{ conData = r } -> do-      def <- theDef <$> getConstInfo r-      case def of-        Record{ recNamedCon = False } -> return True-        _                             -> return False-    _ -> return False+isGeneratedRecordConstructor c = ignoreAbstractMode $ do+  caseMaybeM (isRecordConstructor c) (return False) $ \ (_, def) ->+    case def of+      Record{ recNamedCon = False } -> return True+      _ -> return False --- | Mark record type as unguarded.---   No eta-expansion.  Projections do not preserve guardedness.++-- | Turn off eta for unguarded recursive records.+--   Projections do not preserve guardedness. unguardedRecord :: QName -> TCM () unguardedRecord q = modifySignature $ updateDefinition q $ updateTheDef $ \case-  r@Record{} -> r { recEtaEquality' = setEtaEquality (recEtaEquality' r) False, recRecursive = True }+  r@Record{} -> r { recEtaEquality' = setEtaEquality (recEtaEquality' r) False }   _ -> __IMPOSSIBLE__ --- | Mark record type as recursive.+-- | Turn on eta for inductive guarded recursive records. --   Projections do not preserve guardedness. recursiveRecord :: QName -> TCM () recursiveRecord q = do   ok <- etaEnabled   modifySignature $ updateDefinition q $ updateTheDef $ \case     r@Record{ recInduction = ind, recEtaEquality' = eta } ->-      r { recRecursive = True, recEtaEquality' = eta' }+      r { recEtaEquality' = eta' }       where       eta' | ok, eta == Inferred False, ind /= Just CoInductive = Inferred True            | otherwise = eta@@ -359,12 +399,7 @@ -- --   Precondition: record type identifier exists in signature. isRecursiveRecord :: QName -> TCM Bool-isRecursiveRecord q = recRecursive_ . theDef . fromMaybe __IMPOSSIBLE__ . lookupDefinition q <$> getSignature---- | Version of @recRecursive@ with proper internal error.-recRecursive_ :: Defn -> Bool-recRecursive_ (Record { recRecursive = b }) = b-recRecursive_ _ = __IMPOSSIBLE__+isRecursiveRecord q = recRecursive . theDef . fromMaybe __IMPOSSIBLE__ . lookupDefinition q <$> getSignature  {- | @etaExpandBoundVar i = (Δ, σ, τ)@ @@ -431,7 +466,11 @@           -- Use "f(x)" as variable name for the projection f(x).           s     = prettyShow x           tel'  = mapAbsNames (\ f -> stringToArgName $ argNameToString f ++ "(" ++ s ++ ")") tel-          delta = telFromList $ gamma1 ++ telToList tel' ++ applySubst tau0 gamma2+          delta = telFromList $ gamma1 ++ telToList tel' +++                    telToList (applySubst tau0 $ telFromList gamma2)+                    -- Andreas, 2017-07-29, issue #2644+                    -- We cannot substitute directly into a ListTel like gamma2,+                    -- we have to convert it to a telescope first, otherwise we get garbage.        return (delta, sigma, tau, tel) @@ -533,8 +572,8 @@       when (con /= con_) $ do         reportSDoc "impossible" 10 $ vcat           [ text "etaExpandRecord_: the following two constructors should be identical"-          , nest 2 $ text $ "con  = " ++ show con-          , nest 2 $ text $ "con_ = " ++ show con_+          , nest 2 $ text $ "con  = " ++ prettyShow con+          , nest 2 $ text $ "con_ = " ++ prettyShow con_           ]         __IMPOSSIBLE__       return (tel', con, ci, args)@@ -614,7 +653,7 @@ --   contains garbage. isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId (Maybe Term)) isSingletonRecord' regardIrrelevance r ps = do-  reportSLn "tc.meta.eta" 30 $ "Is " ++ show r ++ " a singleton record type?"+  reportSLn "tc.meta.eta" 30 $ "Is " ++ prettyShow r ++ " a singleton record type?"   def <- getRecordDef r   emap (Con (recConHead def) ConOSystem) <$> check (recTel def `apply` ps)   where@@ -663,6 +702,8 @@ emap :: (a -> b) -> Either c (Maybe a) -> Either c (Maybe b) emap = mapRight . fmap +-- | Replace projection patterns by the original projections.+-- class NormaliseProjP a where   normaliseProjP :: HasConstInfo m => a -> m a @@ -683,6 +724,7 @@ instance NormaliseProjP (Pattern' x) where   normaliseProjP p@VarP{}        = return p   normaliseProjP p@DotP{}        = return p+  normaliseProjP p@AbsurdP{}     = return p   normaliseProjP (ConP c cpi ps) = ConP c cpi <$> normaliseProjP ps   normaliseProjP p@LitP{}        = return p   normaliseProjP (ProjP o d0)    = ProjP o <$> getOriginalProjection d0
src/full/Agda/TypeChecking/Reduce.hs view
@@ -8,7 +8,7 @@ import Control.Monad.Reader hiding (mapM) import Control.Applicative -import Data.List as List hiding (sort)+import qualified Data.List as List import Data.Maybe import Data.Map (Map) import Data.Traversable@@ -73,7 +73,7 @@ isFullyInstantiatedMeta m = do   mv <- TCM.lookupMeta m   case mvInstantiation mv of-    InstV sub v -> null . allMetas <$> instantiateFull (sub, v)+    InstV _tel v -> null . allMetas <$> instantiateFull v     _ -> return False  -- | Instantiate something.@@ -207,7 +207,7 @@   instantiate' (EqualityType s eq l t a b) = EqualityType     <$> instantiate' s     <*> return eq-    <*> instantiate' l+    <*> mapM instantiate' l     <*> instantiate' t     <*> instantiate' a     <*> instantiate' b@@ -327,7 +327,7 @@                  else do     s <- optSharing   <$> commandLineOptions     allowed <- asks envAllowedReductions-    let notAll = delete NonTerminatingReductions allowed /= allReductions+    let notAll = List.delete NonTerminatingReductions allowed /= allReductions     if s || notAll then slowReduceTerm v else fastReduce (elem NonTerminatingReductions allowed) v  slowReduceTerm :: Term -> ReduceM (Blocked Term)@@ -363,7 +363,7 @@         case v of           _ | Just v == mz  -> return $ Lit $ LitNat (getRange c) 0           _                 -> return v-      reduceNat v@(Con c ci [a]) | notHidden a && isRelevant a = do+      reduceNat v@(Con c ci [a]) | visible a && isRelevant a = do         ms  <- fmap ignoreSharing <$> getBuiltin' builtinSuc         case v of           _ | Just (Con c ci []) == ms -> inc <$> reduce' (unArg a)@@ -422,7 +422,7 @@ unfoldDefinitionStep unfoldDelayed v0 f es =   {-# SCC "reduceDef" #-} do   info <- getConstInfo f-  rewr <- getRewriteRulesFor f+  rewr <- instantiateRewriteRules =<< getRewriteRulesFor f   allowed <- asks envAllowedReductions   let def = theDef info       v   = v0 `applyE` es@@ -432,6 +432,7 @@       -- are not unfolded unless explicitely permitted.       dontUnfold =         (defNonterminating info && notElem NonTerminatingReductions allowed)+        || (defTerminationUnconfirmed info && notElem UnconfirmedReductions allowed)         || (defDelayed info == Delayed && not unfoldDelayed)       copatterns =         case def of@@ -447,10 +448,11 @@                              cls (defCompiled info) rewr         else noReduction $ notBlocked v     _  -> do-      if FunctionReductions `elem` allowed ||+      if (RecursiveReductions `elem` allowed) ||          (isJust (isProjection_ def) && ProjectionReductions `elem` allowed) || -- includes projection-like          (isInlineFun def && InlineReductions `elem` allowed) ||-         (copatterns && CopatternReductions `elem` allowed)+         (definitelyNonRecursive_ def && copatterns && CopatternReductions `elem` allowed) ||+         (definitelyNonRecursive_ def && FunctionReductions `elem` allowed)         then           reduceNormalE v0 f (map notReduced es) dontUnfold                        (defClauses info) (defCompiled info) rewr@@ -460,10 +462,10 @@     noReduction    = return . NoReduction     yesReduction s = return . YesReduction s     reducePrimitive x v0 f es pf dontUnfold cls mcc rewr-      | genericLength es < ar+      | length es < ar                   = noReduction $ NotBlocked Underapplied $ v0 `applyE` es -- not fully applied       | otherwise = {-# SCC "reducePrimitive" #-} do-          let (es1,es2) = genericSplitAt ar es+          let (es1,es2) = splitAt ar es               args1     = fromMaybe __IMPOSSIBLE__ $ mapM isApplyElim es1           r <- primFunImplementation pf args1           case r of@@ -487,15 +489,32 @@       case (def,rewr) of         _ | dontUnfold -> defaultResult -- non-terminating or delayed         ([],[])        -> defaultResult -- no definition for head-        (cls,rewr)     -> appDefE_ f v0 cls mcc rewr es-      where defaultResult = noReduction $ NotBlocked AbsurdMatch vfull-            vfull         = v0 `applyE` map ignoreReduced es+        (cls,rewr)     -> do+          ev <- appDefE_ f v0 cls mcc rewr es+          debugReduce ev+          return ev+      where+      defaultResult = noReduction $ NotBlocked AbsurdMatch vfull+      vfull         = v0 `applyE` map ignoreReduced es+      debugReduce ev = verboseS "tc.reduce" 90 $ do+        case ev of+          NoReduction v -> do+            reportSDoc "tc.reduce" 90 $ vcat+              [ text "*** tried to reduce " <+> prettyTCM f+              , text "    es =  " <+> sep (map (prettyTCM . ignoreReduced) es)+              -- , text "*** tried to reduce " <+> prettyTCM vfull+              , text "    stuck on" <+> prettyTCM (ignoreBlocking v)+              ]+          YesReduction _simpl v -> do+            reportSDoc "tc.reduce"  90 $ text "*** reduced definition: " <+> prettyTCM f+            reportSDoc "tc.reduce"  95 $ text "    result" <+> prettyTCM v+            reportSDoc "tc.reduce" 100 $ text "    raw   " <+> text (show v)  -- | Reduce a non-primitive definition if it is a copy linking to another def. reduceDefCopy :: QName -> Elims -> TCM (Reduced () Term) reduceDefCopy f es = do   info <- TCM.getConstInfo f-  rewr <- TCM.getRewriteRulesFor f+  rewr <- instantiateRewriteRules =<< TCM.getRewriteRulesFor f   if (defCopy info) then reduceDef_ info rewr f es else return $ NoReduction ()   where     reduceDef_ :: Definition -> RewriteRules -> QName -> Elims -> TCM (Reduced () Term)@@ -649,7 +668,7 @@   reduce' (EqualityType s eq l t a b) = EqualityType     <$> reduce' s     <*> return eq-    <*> reduce' l+    <*> mapM reduce' l     <*> reduce' t     <*> reduce' a     <*> reduce' b@@ -809,7 +828,7 @@   simplify' (EqualityType s eq l t a b) = EqualityType     <$> simplify' s     <*> return eq-    <*> simplify' l+    <*> mapM simplify' l     <*> simplify' t     <*> simplify' a     <*> simplify' b@@ -945,6 +964,7 @@     LitP _       -> return p     ConP c mt ps -> ConP c <$> normalise' mt <*> normalise' ps     DotP v       -> DotP <$> normalise' v+    AbsurdP x    -> AbsurdP <$> normalise' x     ProjP{}      -> return p  instance Normalise DisplayForm where@@ -965,7 +985,7 @@   normalise' (EqualityType s eq l t a b) = EqualityType     <$> normalise' s     <*> return eq-    <*> normalise' l+    <*> mapM normalise' l     <*> normalise' t     <*> normalise' a     <*> normalise' b@@ -974,9 +994,6 @@ -- * Full instantiation --------------------------------------------------------------------------- --- STALE: Full instantiatiation = normalisation [ instantiate' / reduce' ]--- How can we express this? We need higher order classes!- -- | @instantiateFull'@ 'instantiate's metas everywhere (and recursively) --   but does not 'reduce'. class InstantiateFull t where@@ -1041,7 +1058,7 @@   instantiateFull' sigma =     case sigma of       IdS                  -> return IdS-      EmptyS               -> return EmptyS+      EmptyS err           -> return $ EmptyS err       Wk   n sigma         -> Wk   n         <$> instantiateFull' sigma       Lift n sigma         -> Lift n         <$> instantiateFull' sigma       Strengthen bot sigma -> Strengthen bot <$> instantiateFull' sigma@@ -1063,6 +1080,7 @@ instance InstantiateFull a => InstantiateFull (Pattern' a) where     instantiateFull' (VarP x)       = VarP <$> instantiateFull' x     instantiateFull' (DotP t)       = DotP <$> instantiateFull' t+    instantiateFull' (AbsurdP p)    = AbsurdP <$> instantiateFull' p     instantiateFull' (ConP n mt ps) = ConP n <$> instantiateFull' mt <*> instantiateFull' ps     instantiateFull' l@LitP{}       = return l     instantiateFull' p@ProjP{}      = return p@@ -1146,12 +1164,12 @@     instantiateFull' = return  instance InstantiateFull Definition where-    instantiateFull' (Defn rel x t pol occ df i c inst copy ma d) = do+    instantiateFull' (Defn rel x t pol occ df i c inst copy ma inj d) = do       (t, df, d) <- instantiateFull' (t, df, d)-      return $ Defn rel x t pol occ df i c inst copy ma d+      return $ Defn rel x t pol occ df i c inst copy ma inj d  instance InstantiateFull NLPat where-  instantiateFull' (PVar x y z) = return $ PVar x y z+  instantiateFull' (PVar x y) = return $ PVar x y   instantiateFull' (PWild)    = return PWild   instantiateFull' (PDef x y) = PDef <$> instantiateFull' x <*> instantiateFull' y   instantiateFull' (PLam x y) = PLam x <$> instantiateFull' y@@ -1192,7 +1210,7 @@ instance InstantiateFull Defn where     instantiateFull' d = case d of       Axiom{} -> return d-      AbstractDefn -> return d+      AbstractDefn d -> AbstractDefn <$> instantiateFull' d       Function{ funClauses = cs, funCompiled = cc, funInv = inv } -> do         (cs, cc, inv) <- instantiateFull' (cs, cc, inv)         return $ d { funClauses = cs, funCompiled = cc, funInv = inv }@@ -1229,26 +1247,27 @@   instantiateFull' (Case n bs) = Case n <$> instantiateFull' bs  instance InstantiateFull Clause where-    instantiateFull' (Clause r tel ps b t catchall) =-       Clause r <$> instantiateFull' tel+    instantiateFull' (Clause rl rf tel ps b t catchall unreachable) =+       Clause rl rf <$> instantiateFull' tel        <*> instantiateFull' ps        <*> instantiateFull' b        <*> instantiateFull' t        <*> return catchall+       <*> return unreachable  instance InstantiateFull Interface where     instantiateFull' (Interface h ms mod scope inside-                               sig display b hsImports hsImportsUHC hsCode highlighting pragmas patsyns) =+                               sig display b foreignCode+                               highlighting pragmas patsyns warnings) =         Interface h ms mod scope inside             <$> instantiateFull' sig             <*> instantiateFull' display             <*> instantiateFull' b-            <*> return hsImports-            <*> return hsImportsUHC-            <*> return hsCode+            <*> return foreignCode             <*> return highlighting             <*> return pragmas             <*> return patsyns+            <*> return warnings  instance InstantiateFull a => InstantiateFull (Builtin a) where     instantiateFull' (Builtin t) = Builtin <$> instantiateFull' t@@ -1270,7 +1289,7 @@   instantiateFull' (EqualityType s eq l t a b) = EqualityType     <$> instantiateFull' s     <*> return eq-    <*> instantiateFull' l+    <*> mapM instantiateFull' l     <*> instantiateFull' t     <*> instantiateFull' a     <*> instantiateFull' b
src/full/Agda/TypeChecking/Reduce/Fast.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE PatternGuards       #-}-{-# LANGUAGE BangPatterns        #-}+{-# LANGUAGE CPP           #-}+{-# LANGUAGE BangPatterns  #-}+{-# LANGUAGE PatternGuards #-} + {-|  This module contains an optimised implementation of the reduction algorithm@@ -67,7 +67,6 @@ import Control.Applicative import Control.Monad.Reader -import Data.List import Data.Map (Map) import qualified Data.Map as Map import Data.Traversable (traverse)@@ -261,7 +260,7 @@   rwr <- optRewriting <$> pragmaOptions   constInfo <- unKleisli $ \f -> do     info <- getConstInfo f-    rewr <- getRewriteRulesFor f+    rewr <- instantiateRewriteRules =<< getRewriteRulesFor f     compactDef z s pf info rewr   ReduceM $ \ env -> reduceTm env (memoQName constInfo) allowNonTerminating rwr z s v @@ -527,8 +526,11 @@           -- If we reach the empty stack, then pattern matching was incomplete-        match' _ f [] = {- new line here since __IMPOSSIBLE__ does not like the ' in match' -}-          runReduce $+        match' _ f [] = runReduce $ do+          pds <- getPartialDefs+          if f `elem` pds+          then return (NoReduction $ NotBlocked MissingClauses es)+          else do             traceSLn "impossible" 10               ("Incomplete pattern matching when applying " ++ show f)               __IMPOSSIBLE__
src/full/Agda/TypeChecking/Reduce/Monad.hs view
@@ -9,7 +9,6 @@   , getConstInfo   , isInstantiatedMeta   , lookupMeta-  , traceSLn, traceSDoc   , askR, applyWhenVerboseS   ) where @@ -31,7 +30,7 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad hiding   ( enterClosure, underAbstraction_, underAbstraction, addCtx, mkContextEntry,-    isInstantiatedMeta, verboseS, reportSDoc, reportSLn, typeOfConst, lookupMeta )+    isInstantiatedMeta, verboseS, typeOfConst, lookupMeta ) import Agda.TypeChecking.Monad.Builtin hiding ( constructorForm ) import Agda.TypeChecking.Substitute import Agda.Interaction.Options@@ -127,12 +126,6 @@     InstV{} -> True     _       -> False --- | Run a computation if a certain verbosity level is activated.------   Precondition: The level must be non-negative.-verboseS :: VerboseKey -> Int -> ReduceM () -> ReduceM ()-verboseS k n action = whenM (hasVerbosity k n) action- -- | Apply a function if a certain verbosity level is activated. -- --   Precondition: The level must be non-negative.@@ -140,43 +133,22 @@ applyWhenVerboseS :: HasOptions m => VerboseKey -> Int -> (m a -> m a) -> m a -> m a applyWhenVerboseS k n f a = ifM (hasVerbosity k n) (f a) a -traceSDoc :: VerboseKey -> Int -> TCM Doc -> ReduceM a -> ReduceM a-traceSDoc k n doc = applyWhenVerboseS k n $ \ cont -> do-  ReduceEnv env st <- askR-  -- return $! unsafePerformIO $ do print . fst =<< runTCM env st doc-  trace (show $ fst $ unsafePerformIO $ runTCM env st doc) cont+instance MonadDebug ReduceM where --- traceSDoc :: VerboseKey -> Int -> TCM Doc -> ReduceM a -> ReduceM a--- traceSDoc k n doc = verboseS k n $ ReduceM $ do---   ReduceEnv env st <- ask---   -- return $! unsafePerformIO $ do print . fst =<< runTCM env st doc---   trace (show $ fst $ unsafePerformIO $ runTCM env st doc) $ return ()+  traceDebugMessage n s cont = do+    ReduceEnv env st <- askR+    unsafePerformIO $ do+      _ <- runTCM env st $ displayDebugMessage n s+      return $ cont -{-# SPECIALIZE traceSLn :: VerboseKey -> Int -> String -> ReduceM a -> ReduceM a #-}-traceSLn :: HasOptions m => VerboseKey -> Int -> String -> m a -> m a-traceSLn k n s = applyWhenVerboseS k n (trace s)+  formatDebugMessage k n d = do+    ReduceEnv env st <- askR+    unsafePerformIO $ do+      (s , _) <- runTCM env st $ formatDebugMessage k n d+      return $ return s  instance HasConstInfo ReduceM where   getRewriteRulesFor = defaultGetRewriteRulesFor (gets id)-  getConstInfo q = ReduceM $ \(ReduceEnv env st) ->-    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-        ds  -> trace ("Ambiguous name: " ++ show q) __IMPOSSIBLE__-    where-      mkAbs env d-        | treatAbstractly' q' env = fromMaybe err $ makeAbstract d-        | otherwise               = d-        where-          err = trace ("Not in scope: " ++ show q) __IMPOSSIBLE__-          q' = case theDef d of-            -- Hack to make abstract constructors work properly. The constructors-            -- live in a module with the same name as the datatype, but for 'abstract'-            -- purposes they're considered to be in the same module as the datatype.-            Constructor{} -> dropLastModule q-            _                 -> q--          dropLastModule q@QName{ qnameModule = m } =-            q{ qnameModule = mnameFromList $ ifNull (mnameToList m) __IMPOSSIBLE__ init }+  getConstInfo' q = do+    ReduceEnv env st <- askR+    defaultGetConstInfo st env q
src/full/Agda/TypeChecking/Rewriting.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP               #-}+{-# LANGUAGE NondecreasingIndentation #-}  {-# OPTIONS_GHC -fno-warn-orphans #-} @@ -62,12 +63,15 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Monad.Env import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Free import Agda.TypeChecking.Free.Lazy import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Conversion+import qualified Agda.TypeChecking.Positivity.Occurrence as Pos import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Primitive ( getBuiltinName ) import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope@@ -148,7 +152,9 @@ addRewriteRule :: QName -> TCM () addRewriteRule q = do   requireOptionRewriting-  Def rel _ <- primRewrite+  let failNoBuiltin = typeError $ GenericError $+        "Cannot add rewrite rule without prior BUILTIN REWRITE"+  rel <- fromMaybeM failNoBuiltin $ getBuiltinName builtinRewrite   def <- instantiateDef =<< getConstInfo q   -- Issue 1651: Check that we are not adding a rewrite rule   -- for a type signature whose body has not been type-checked yet.@@ -202,6 +208,11 @@         reportSDoc "rewriting" 30 $ text "metas in gamma1: " <+> text (show $ allMetas $ telToList gamma1)         failureMetas +      -- 2017-06-18, Jesper: Unfold inlined definitions on the LHS.+      -- This is necessary to replace copies created by imports by their+      -- original definition.+      lhs <- modifyAllowedReductions (const [InlineReductions]) $ normalise lhs+       -- Find head symbol f of the lhs and its arguments.       (f , hd , es) <- case ignoreSharing lhs of         Def f es -> return (f , Def f , es)@@ -227,7 +238,7 @@           text "Pattern generated from lhs: " <+> prettyTCM (PDef f ps)          -- check that FV(rhs) ⊆ nlPatVars(lhs)-        let freeVars  = usedArgs gamma1 `IntSet.union` allFreeVars (ps,rhs)+        let freeVars  = usedArgs (defArgOccurrences def) `IntSet.union` allFreeVars (ps,rhs)             boundVars = nlPatVars ps         reportSDoc "rewriting" 40 $           text "variables bound by the pattern: " <+> text (show boundVars)@@ -277,14 +288,13 @@         typeError . GenericDocError =<< do           text "Rewrite rule " <+> prettyTCM q <+> text " has already been added" -    usedArgs :: Telescope -> IntSet-    usedArgs tel = IntSet.fromList $ map unDom $ usedIxs+    usedArgs :: [Pos.Occurrence] -> IntSet+    usedArgs occs = IntSet.fromList $ map snd $ usedIxs       where-        n = size tel-        allIxs = zipWith ($>) (flattenTel tel) (downFrom n)-        usedIxs = filter (not . unused . getRelevance) allIxs-        unused UnusedArg{} = True-        unused _           = False+        allIxs = zip occs $ downFrom $ size occs+        usedIxs = filter (used . fst) allIxs+        used Pos.Unused = False+        used _          = True  -- | Append rewrite rules to a definition. addRewriteRules :: QName -> RewriteRules -> TCM ()@@ -299,19 +309,6 @@   --  , vcat (map prettyTCM rules)   --  ] --- | Sledgehammer approach to local rewrite rules. Rebind them after each---   left-hand side (which scrambles the context).-rebindLocalRewriteRules :: TCM ()-rebindLocalRewriteRules = do-  current <- currentModule-  ruleMap <- use $ stSignature . sigRewriteRules-  let isLocal r = m == current || m `isSubModuleOf` current-        where m = qnameModule $ rewName r-      ruleMap' = HMap.map (filter (not . isLocal)) ruleMap-      locals = map rewName $ filter isLocal $ concat $ map reverse $ HMap.elems ruleMap-  stSignature . sigRewriteRules .= ruleMap'-  mapM_ addRewriteRule locals- -- | @rewriteWith t f es rew@ --   tries to rewrite @f es : t@ with @rew@, returning the reduct if successful. rewriteWith :: Maybe Type@@ -320,19 +317,20 @@             -> Elims             -> ReduceM (Either (Blocked Term) Term) rewriteWith mt v rew@(RewriteRule q gamma _ ps rhs b) es = do-  Red.traceSDoc "rewriting" 75 (sep+  traceSDoc "rewriting" 75 (sep     [ text "attempting to rewrite term " <+> prettyTCM (v `applyE` es)     , text " with rule " <+> prettyTCM rew     ]) $ do-    result <- nonLinMatch gamma ps es-    case result of-      Left block -> return $ Left $ block $> v `applyE` es -- TODO: remember reductions-      Right sub  -> do-        let v' = applySubst sub rhs-        Red.traceSDoc "rewriting" 70 (sep-          [ text "rewrote " <+> prettyTCM (v `applyE` es)-          , text " to " <+> prettyTCM v'-          ]) $ return $ Right v'+  result <- nonLinMatch gamma ps es+  case result of+    Left block -> return $ Left $ block $> v `applyE` es -- TODO: remember reductions+    Right sub  -> do+      let v' = applySubst sub rhs+      traceSDoc "rewriting" 70 (sep+        [ text "rewrote " <+> prettyTCM (v `applyE` es)+        , text " to " <+> prettyTCM v'+        ]) $ do+      return $ Right v'      {- OLD CODE:     -- Freeze all metas, remember which one where not frozen before.@@ -388,51 +386,31 @@ ------------------------------------------------------------------------  class NLPatVars a where+  nlPatVarsUnder :: Int -> a -> IntSet+   nlPatVars :: a -> IntSet+  nlPatVars = nlPatVarsUnder 0  instance (Foldable f, NLPatVars a) => NLPatVars (f a) where-  nlPatVars = foldMap nlPatVars+  nlPatVarsUnder k = foldMap $ nlPatVarsUnder k  instance NLPatVars NLPType where-  nlPatVars (NLPType l a) = nlPatVars l `IntSet.union` nlPatVars a+  nlPatVarsUnder k (NLPType l a) = nlPatVarsUnder k l `IntSet.union` nlPatVarsUnder k a  instance NLPatVars NLPat where-  nlPatVars p =+  nlPatVarsUnder k p =     case p of-      PVar _ i _ -> singleton i-      PDef _ es -> nlPatVars es+      PVar i _  -> singleton $ i - k+      PDef _ es -> nlPatVarsUnder k es       PWild     -> empty-      PLam _ p' -> nlPatVars $ unAbs p'-      PPi a b   -> nlPatVars a `IntSet.union` nlPatVars (unAbs b)-      PBoundVar _ es -> nlPatVars es+      PLam _ p' -> nlPatVarsUnder (k+1) $ unAbs p'+      PPi a b   -> nlPatVarsUnder k a `IntSet.union` nlPatVarsUnder (k+1) (unAbs b)+      PBoundVar _ es -> nlPatVarsUnder k es       PTerm{}   -> empty  rewArity :: RewriteRule -> Int rewArity = length . rewPats --- | Erase the CtxId's of rewrite rules-class KillCtxId a where-  killCtxId :: a -> a--instance (Functor f, KillCtxId a) => KillCtxId (f a) where-  killCtxId = fmap killCtxId--instance KillCtxId RewriteRule where-  killCtxId rule@RewriteRule{ rewPats = ps } = rule{ rewPats = killCtxId ps }--instance KillCtxId NLPType where-  killCtxId (NLPType l a) = NLPType (killCtxId l) (killCtxId a)--instance KillCtxId NLPat where-  killCtxId p = case p of-    PVar _ i bvs   -> PVar Nothing i bvs-    PWild          -> p-    PDef f es      -> PDef f $ killCtxId es-    PLam i x       -> PLam i $ killCtxId x-    PPi a b        -> PPi (killCtxId a) (killCtxId b)-    PBoundVar i es -> PBoundVar i $ killCtxId es-    PTerm _        -> p- -- | Get all symbols that a rewrite rule matches against class GetMatchables a where   getMatchables :: a -> [QName]@@ -443,7 +421,7 @@ instance GetMatchables NLPat where   getMatchables p =     case p of-      PVar _ _ _     -> empty+      PVar _ _       -> empty       PWild          -> empty       PDef f _       -> singleton f       PLam _ x       -> empty@@ -455,9 +433,9 @@   getMatchables = getMatchables . rewPats  -- Only computes free variables that are not bound (i.e. those in a PTerm)-instance Free' NLPat c where+instance Free NLPat where   freeVars' p = case p of-    PVar _ _ _ -> mempty+    PVar _ _ -> mempty     PWild -> mempty     PDef _ es -> freeVars' es     PLam _ u -> freeVars' u@@ -465,7 +443,7 @@     PBoundVar _ es -> freeVars' es     PTerm t -> freeVars' t -instance Free' NLPType c where+instance Free NLPType where   freeVars' (NLPType l a) =     ifM ((IgnoreNot ==) <$> asks feIgnoreSorts)       {- then -} (freeVars' (l, a))
src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs view
@@ -137,11 +137,7 @@                  allBoundVars = IntSet.fromList (downFrom k)                  ok = not (isIrrelevant r) ||                       IntSet.fromList (map unArg bvs) == allBoundVars-             -- Pattern variables are labeled with their context id, because they-             -- can only be instantiated once they're no longer bound by the-             -- context (see Issue 1652).-             id <- (!! i') <$> getContextId-             if ok then return (PVar (Just id) i' bvs) else done+             if ok then return (PVar i bvs) else done            Nothing -> done       Lam i t  -> PLam i <$> patternFrom r k t       Lit{}    -> done@@ -193,10 +189,6 @@ liftRed :: ReduceM a -> NLM a liftRed = lift . lift -instance HasOptions NLM where-  pragmaOptions      = liftRed pragmaOptions-  commandLineOptions = liftRed commandLineOptions- runNLM :: NLM () -> ReduceM (Either Blocked_ NLMState) runNLM nlm = do   (ok,out) <- runStateT (runExceptT nlm) empty@@ -204,11 +196,6 @@     Left block -> return $ Left block     Right _    -> return $ Right out -traceSDocNLM :: VerboseKey -> Int -> TCM Doc -> NLM a -> NLM a-traceSDocNLM k n doc = applyWhenVerboseS k n $ \ cont -> do-  ReduceEnv env st <- liftRed askR-  trace (show $ fst $ unsafePerformIO $ runTCM env st doc) cont- matchingBlocked :: Blocked_ -> NLM () matchingBlocked = throwError @@ -224,8 +211,8 @@       | otherwise       -> whenJustM (liftRed $ equal v v') matchingBlocked  tellEq :: Telescope -> Telescope -> Term -> Term -> NLM ()-tellEq gamma k u v =-  traceSDocNLM "rewriting" 60 (sep+tellEq gamma k u v = do+  traceSDoc "rewriting" 60 (sep                [ text "adding equality between" <+> addContext (gamma `abstract` k) (prettyTCM u)                , text " and " <+> addContext k (prettyTCM v) ]) $ do   nlmEqs %= (PostponedEquation k u v:)@@ -268,7 +255,7 @@      (Apply p, Apply v) -> let r' = r `composeRelevance` getRelevance p                            in  match r' gamma k p v      (Proj _ x, Proj _ y) -> if x == y then return () else-                             traceSDocNLM "rewriting" 80 (sep+                             traceSDoc "rewriting" 80 (sep                                [ text "mismatch between projections " <+> prettyTCM x                                , text " and " <+> prettyTCM y ]) mzero      (Apply{}, Proj{} ) -> __IMPOSSIBLE__@@ -286,10 +273,10 @@     (p     , Type l) -> match Irrelevant gamma k p l     _                -> matchingBlocked $ NotBlocked ReallyNotBlocked () -instance (Match a b, RaiseNLP a, Subst t2 b) => Match (Abs a) (Abs b) where+instance (Match a b, Subst t1 a, Subst t2 b) => Match (Abs a) (Abs b) where   match r gamma k (Abs n p) (Abs _ v) = match r gamma (ExtendTel dummyDom (Abs n k)) p v   match r gamma k (Abs n p) (NoAbs _ v) = match r gamma (ExtendTel dummyDom (Abs n k)) p (raise 1 v)-  match r gamma k (NoAbs n p) (Abs _ v) = match r gamma (ExtendTel dummyDom (Abs n k)) (raiseNLP 1 p) v+  match r gamma k (NoAbs n p) (Abs _ v) = match r gamma (ExtendTel dummyDom (Abs n k)) (raise 1 p) v   match r gamma k (NoAbs _ p) (NoAbs _ v) = match r gamma k p v  instance Match NLPat Level where@@ -301,47 +288,39 @@     let n = size k         b = void vb         v = ignoreBlocking vb-        prettyPat  = addContext (gamma `abstract` k) (prettyTCM (raisePatVars n p))+        prettyPat  = addContext (gamma `abstract` k) (prettyTCM p)         prettyTerm = addContext k (prettyTCM v)-    traceSDocNLM "rewriting" 100 (sep+    traceSDoc "rewriting" 100 (sep       [ text "matching" <+> prettyPat       , text "with" <+> prettyTerm]) $ do     let yes = return ()-        no msg =-          traceSDocNLM "rewriting" 80 (sep+        no msg = do+          traceSDoc "rewriting" 80 (sep             [ text "mismatch between" <+> prettyPat             , text " and " <+> prettyTerm-            , msg ]) $ matchingBlocked b-        block b' =-          traceSDocNLM "rewriting" 80 (sep+            , msg ]) $ do+          matchingBlocked b+        block b' = do+          traceSDoc "rewriting" 80 (sep             [ text "matching blocked on meta"-            , text (show b) ]) $ matchingBlocked (b `mappend` b')+            , text (show b) ]) $ do+          matchingBlocked (b `mappend` b')     case p of       PWild  -> yes-      PVar id i bvs -> do-        -- If the variable is still bound by the current context, we cannot-        -- instantiate it so it has to match on the nose (see Issue 1652).-        ctx <- zip <$> getContextNames <*> getContextId-        traceSDocNLM "rewriting" 90 (text "Current context:" <+> (prettyTCM ctx)) $ do-        cid <- getContextId-        case (maybe Nothing (\i -> elemIndex i cid) id) of-          Just j -> if v == var (j+n)-                    then tellSub r i (var j)-                    else no (text $ "(CtxId = " ++ show id ++ ")")-          Nothing -> do-            let allowedVars :: IntSet-                allowedVars = IntSet.fromList (map unArg bvs)-                isBadVar :: Int -> Bool-                isBadVar i = i < n && not (i `IntSet.member` allowedVars)-                perm :: Permutation-                perm = Perm n $ reverse $ map unArg $ bvs-                tel :: Telescope-                tel = permuteTel perm k-            ok <- liftRed $ reallyFree isBadVar v-            case ok of-              Left b         -> block b-              Right Nothing  -> no (text "")-              Right (Just v) -> tellSub r i $ teleLam tel $ renameP __IMPOSSIBLE__ perm v+      PVar i bvs -> do+        let allowedVars :: IntSet+            allowedVars = IntSet.fromList (map unArg bvs)+            isBadVar :: Int -> Bool+            isBadVar i = i < n && not (i `IntSet.member` allowedVars)+            perm :: Permutation+            perm = Perm n $ reverse $ map unArg $ bvs+            tel :: Telescope+            tel = permuteTel perm k+        ok <- liftRed $ reallyFree isBadVar v+        case ok of+          Left b         -> block b+          Right Nothing  -> no (text "")+          Right (Just v) -> tellSub r (i-n) $ teleLam tel $ renameP __IMPOSSIBLE__ perm v       PDef f ps -> do         v <- liftRed $ constructorForm =<< unLevel v         case ignoreSharing v of@@ -358,7 +337,7 @@                     match r gamma k qs vs                   _ -> no (text "")           Lam i u -> do-            let pbody = PDef f (raiseNLP 1 ps ++ [Apply $ Arg i $ PTerm (var 0)])+            let pbody = PDef f (raise 1 ps ++ [Apply $ Arg i $ PTerm (var 0)])                 body  = absBody u             match r gamma (ExtendTel dummyDom (Abs (absName u) k)) pbody body           MetaV m es -> do@@ -390,7 +369,7 @@               match r gamma k qs vs             _ -> no (text "")         Lam info u -> do-          let pbody = PBoundVar i (raiseNLP 1 ps ++ [Apply $ Arg info $ PTerm (var 0)])+          let pbody = PBoundVar i (raise 1 ps ++ [Apply $ Arg info $ PTerm (var 0)])               body  = absBody u           match r gamma (ExtendTel dummyDom (Abs (absName u) k)) pbody body         MetaV m es -> matchingBlocked $ Blocked m ()@@ -402,7 +381,7 @@ -- Returns `Right Nothing` if there are such variables, `Right (Just v')` -- if there are none (where v' is the possibly normalized version of the given -- term) or `Left b` if the problem is blocked on a meta.-reallyFree :: (Reduce a, Normalise a, Free' a FreeVars)+reallyFree :: (Reduce a, Normalise a, Free a)            => (Int -> Bool) -> a -> ReduceM (Either Blocked_ (Maybe a)) reallyFree f v = do     let xs = getVars v@@ -425,11 +404,11 @@         else return $ Right Nothing     else return $ Right Nothing   where-    getVars v = runFree (\var@(i,_) -> if f i then singleton var else empty) IgnoreNot v+    getVars v = runFree (\ i -> if f i then singleton i else empty) IgnoreNot v  makeSubstitution :: Telescope -> Sub -> Substitution makeSubstitution gamma sub =-  prependS __IMPOSSIBLE__ (map val [0 .. size gamma-1]) EmptyS+  prependS __IMPOSSIBLE__ (map val [0 .. size gamma-1]) IdS     where       val i = case IntMap.lookup i sub of                 Just (Irrelevant, v) -> Just $ dontCare v@@ -438,7 +417,12 @@  checkPostponedEquations :: Substitution -> PostponedEquations -> ReduceM (Maybe Blocked_) checkPostponedEquations sub eqs = forM' eqs $-  \ (PostponedEquation k lhs rhs) -> equal (applySubst (liftS (size k) sub) lhs) rhs+  \ (PostponedEquation k lhs rhs) -> do+      let lhs' = applySubst (liftS (size k) sub) lhs+      traceSDoc "rewriting" 60 (sep+        [ text "checking postponed equality between" , addContext k (prettyTCM lhs')+        , text " and " , addContext k (prettyTCM rhs) ]) $ do+      equal lhs' rhs  -- main function nonLinMatch :: (Match a b) => Telescope -> a -> b -> ReduceM (Either Blocked_ Substitution)@@ -450,10 +434,10 @@     let sub = makeSubstitution gamma $ s^.nlmSub         eqs = s^.nlmEqs     traceSDoc "rewriting" 90 (text $ "sub = " ++ show sub) $ do-      ok <- checkPostponedEquations sub eqs-      case ok of-        Nothing -> return $ Right sub-        Just b  -> no "checking of postponed equations" b+    ok <- checkPostponedEquations sub eqs+    case ok of+      Nothing -> return $ Right sub+      Just b  -> no "checking of postponed equations" b  -- | Untyped βη-equality, does not handle things like empty record types. --   Returns `Nothing` if the terms are equal, or `Just b` if the terms are not@@ -468,56 +452,14 @@       block = caseMaybe (headMaybe metas)                 (NotBlocked ReallyNotBlocked ())                 (\m -> Blocked m ())-  if ok then return Nothing else+  if ok then return Nothing else do     traceSDoc "rewriting" 80 (sep       [ text "mismatch between " <+> prettyTCM u       , text " and " <+> prettyTCM v-      ]) $ return $ Just block+      ]) $ do+    return $ Just block  -- | Normalise the given term but also preserve blocking tags --   TODO: implement a more efficient version of this. normaliseB' :: (Reduce t, Normalise t) => t -> ReduceM (Blocked t) normaliseB' = normalise' >=> reduceB'---- | Raise (bound) variables in a NLPat--class RaiseNLP a where-  raiseNLPFrom :: Int -> Int -> a -> a--  raiseNLP :: Int -> a -> a-  raiseNLP = raiseNLPFrom 0--instance RaiseNLP a => RaiseNLP [a] where-  raiseNLPFrom c k = fmap $ raiseNLPFrom c k--instance RaiseNLP a => RaiseNLP (Maybe a) where-  raiseNLPFrom c k = fmap $ raiseNLPFrom c k--instance RaiseNLP a => RaiseNLP (Arg a) where-  raiseNLPFrom c k = fmap $ raiseNLPFrom c k--instance RaiseNLP a => RaiseNLP (Elim' a) where-  raiseNLPFrom c k = fmap $ raiseNLPFrom c k--instance RaiseNLP a => RaiseNLP (Dom a) where-  raiseNLPFrom c k = fmap $ raiseNLPFrom c k--instance RaiseNLP NLPType where-  raiseNLPFrom c k (NLPType l a) =-    NLPType (raiseNLPFrom c k l) (raiseNLPFrom c k a)--instance RaiseNLP a => RaiseNLP (Abs a) where-  raiseNLPFrom c k (Abs i p)   = Abs i   $ raiseNLPFrom (c+1) k p-  raiseNLPFrom c k (NoAbs i p) = NoAbs i $ raiseNLPFrom c     k p--instance RaiseNLP NLPat where-  raiseNLPFrom c k p = case p of-    PVar id i bvs -> let raise j = if j < c then j else j + k-                     in PVar id i $ map (fmap raise) bvs-    PWild  -> p-    PDef f ps -> PDef f $ raiseNLPFrom c k ps-    PLam i q -> PLam i $ raiseNLPFrom c k q-    PPi a b -> PPi (raiseNLPFrom c k a) (raiseNLPFrom c k b)-    PBoundVar i ps -> let j = if i < c then i else i + k-                      in PBoundVar j $ raiseNLPFrom c k ps-    PTerm u -> PTerm $ raiseFrom c k u
src/full/Agda/TypeChecking/Rules/Builtin.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  module Agda.TypeChecking.Rules.Builtin   ( bindBuiltin@@ -29,16 +28,20 @@ import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Functions import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Primitive import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Rules.Term ( checkExpr , inferExpr )+import Agda.TypeChecking.Warnings  import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction import {-# SOURCE #-} Agda.TypeChecking.Rewriting  import Agda.Utils.Except ( MonadError(catchError) )+import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null@@ -55,7 +58,7 @@ builtinPostulate = BuiltinPostulate Relevant  coreBuiltins :: [BuiltinInfo]-coreBuiltins = map (\ (x, z) -> BuiltinInfo x z)+coreBuiltins =   [ (builtinList               |-> BuiltinData (tset --> tset) [builtinNil, builtinCons])   , (builtinArg                |-> BuiltinData (tset --> tset) [builtinArgArg])   , (builtinAbs                |-> BuiltinData (tset --> tset) [builtinAbsAbs])@@ -95,12 +98,13 @@   , builtinAgdaErrorPartString |-> BuiltinDataCons (tstring --> terrorpart)   , builtinAgdaErrorPartTerm   |-> BuiltinDataCons (tterm --> terrorpart)   , builtinAgdaErrorPartName   |-> BuiltinDataCons (tqname --> terrorpart)-  , (builtinEquality           |-> BuiltinData (hPi "a" (el primLevel) $-                                                hPi "A" (return $ sort $ varSort 0) $-                                                (El (varSort 1) <$> varM 0) -->-                                                (El (varSort 1) <$> varM 0) -->-                                                return (sort $ varSort 1))-                                               [builtinRefl])+  -- Andreas, 2017-01-12, issue #2386: special handling of builtinEquality+  -- , (builtinEquality           |-> BuiltinData (hPi "a" (el primLevel) $+  --                                               hPi "A" (return $ sort $ varSort 0) $+  --                                               (El (varSort 1) <$> varM 0) -->+  --                                               (El (varSort 1) <$> varM 0) -->+  --                                               return (sort $ varSort 1))+  --                                              [builtinRefl])   , (builtinHiding             |-> BuiltinData tset [builtinHidden, builtinInstance, builtinVisible])     -- Relevance   , (builtinRelevance          |-> BuiltinData tset [builtinRelevant, builtinIrrelevant])@@ -118,10 +122,11 @@     -- Fixity   , builtinFixity              |-> BuiltinData tset [builtinFixityFixity]   , builtinFixityFixity        |-> BuiltinDataCons (tassoc --> tprec --> tfixity)-  , (builtinRefl               |-> BuiltinDataCons (hPi "a" (el primLevel) $-                                                    hPi "A" (return $ sort $ varSort 0) $-                                                    hPi "x" (El (varSort 1) <$> varM 0) $-                                                    El (varSort 2) <$> primEquality <#> varM 2 <#> varM 1 <@> varM 0 <@> varM 0))+  -- Andreas, 2017-01-12, issue #2386: special handling of builtinEquality+  -- , (builtinRefl               |-> BuiltinDataCons (hPi "a" (el primLevel) $+  --                                                   hPi "A" (return $ sort $ varSort 0) $+  --                                                   hPi "x" (El (varSort 1) <$> varM 0) $+  --                                                   El (varSort 2) <$> primEquality <#> varM 2 <#> varM 1 <@> varM 0 <@> varM 0))   , (builtinRewrite           |-> BuiltinUnknown Nothing verifyBuiltinRewrite)   , (builtinNil                |-> BuiltinDataCons (hPi "A" tset (el (list v0))))   , (builtinCons               |-> BuiltinDataCons (hPi "A" tset (tv0 --> el (list v0) --> el (list v0))))@@ -186,7 +191,7 @@   , (builtinAgdaDefinitionFunDef          |-> BuiltinDataCons (tlist tclause --> tdefn))   , (builtinAgdaDefinitionDataDef         |-> BuiltinDataCons (tnat --> tlist tqname --> tdefn))   , (builtinAgdaDefinitionDataConstructor |-> BuiltinDataCons (tqname --> tdefn))-  , (builtinAgdaDefinitionRecordDef       |-> BuiltinDataCons (tqname --> tdefn))+  , (builtinAgdaDefinitionRecordDef       |-> BuiltinDataCons (tqname --> tlist (targ tqname) --> tdefn))   , (builtinAgdaDefinitionPostulate       |-> BuiltinDataCons tdefn)   , (builtinAgdaDefinitionPrimitive       |-> BuiltinDataCons tdefn)   , builtinAgdaTCM       |-> builtinPostulate (hPi "a" tlevel $ tsetL 0 --> tsetL 0)@@ -217,9 +222,10 @@   , builtinAgdaTCMCommit             |-> builtinPostulate (tTCM_ primUnit)   , builtinAgdaTCMIsMacro            |-> builtinPostulate (tqname --> tTCM_ primBool)   , builtinAgdaTCMWithNormalisation  |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tbool --> tTCM 1 (varM 0) --> tTCM 1 (varM 0))+  , builtinAgdaTCMDebugPrint         |-> builtinPostulate (tstring --> tnat --> tlist terrorpart --> tTCM_ primUnit)   ]   where-        (|->) = (,)+        (|->) = BuiltinInfo          v0 = varM 0         v1 = varM 1@@ -387,27 +393,35 @@             xs <- mapM freshName_ xs             addContext (xs, domFromArg $ defaultArg nat) $ f apply1 zero suc (==) (===) choice --inductiveCheck :: String -> Int -> Term -> TCM ()+-- | Checks that builtin with name @b : String@ of type @t : Term@+--   is a data type or inductive record with @n : Int@ constructors.+--   Returns the name of the data/record type.+inductiveCheck :: String -> Int -> Term -> TCM (QName, Definition) inductiveCheck b n t = do-    t <- etaContract =<< normalise t-    let err = typeError (NotInductive t)-    case ignoreSharing t of-      Def t _ -> do-        t <- theDef <$> getConstInfo t-        case t of-          Datatype { dataInduction = Inductive-                   , dataCons      = cs-                   }-            | length cs == n -> return ()-            | otherwise ->-              typeError $ GenericError $ unwords-                          [ "The builtin", b-                          , "must be a datatype with", show n-                          , "constructors" ]-          Record { recInduction = ind } | n == 1 && ind /= Just CoInductive -> return ()-          _ -> err-      _ -> err+  t <- etaContract =<< normalise t+  case ignoreSharing t of+    Def q _ -> do+      def <- getConstInfo q+      let yes = return (q, def)+      case theDef def of+        Datatype { dataInduction = Inductive, dataCons = cs }+          | length cs == n -> yes+          | otherwise      -> no+        Record { recInduction = ind } | n == 1 && ind /= Just CoInductive -> yes+        _ -> no+    _ -> no+  where+  no+    | n == 1 = typeError $ GenericError $ unwords+        [ "The builtin", b+        , "must be a datatype with a single constructor"+        , "or an (inductive) record type"+        ]+    | otherwise = typeError $ GenericError $ unwords+        [ "The builtin", b+        , "must be a datatype with", show n+        , "constructors"+        ]  -- | @bindPostulatedName builtin e m@ checks that @e@ is a postulated -- name @q@, and binds the builtin @builtin@ to the term @m q def@,@@ -430,28 +444,32 @@   getName (A.ScopedExpr _ e) = getName e   getName _                  = err -getDef :: Term -> TCM QName-getDef t = do-  t <- etaContract =<< normalise t-  case ignoreSharing t of-    Def d _ -> return d-    _ -> __IMPOSSIBLE__+-- REPLACED by TC.Functions.getDef+-- getDef :: Term -> TCM QName+-- getDef t = do+--   t <- etaContract =<< normalise t+--   case ignoreSharing t of+--     Def d _ -> return d+--     _ -> __IMPOSSIBLE__ -bindAndSetHaskellType :: String -> String -> Term -> TCM ()-bindAndSetHaskellType b hs t = do-  d <- getDef t-  addHaskellType d hs+addHaskellPragma :: QName -> String -> TCM ()+addHaskellPragma = addPragma ghcBackendName++bindAndSetHaskellCode :: String -> String -> Term -> TCM ()+bindAndSetHaskellCode b hs t = do+  d <- fromMaybe __IMPOSSIBLE__ <$> getDef t+  addHaskellPragma d hs   bindBuiltinName b t  bindBuiltinBool :: Term -> TCM ()-bindBuiltinBool = bindAndSetHaskellType builtinBool "Bool"+bindBuiltinBool = bindAndSetHaskellCode builtinBool "= type Bool"  bindBuiltinInt :: Term -> TCM ()-bindBuiltinInt = bindAndSetHaskellType builtinInteger "Integer"+bindBuiltinInt = bindAndSetHaskellCode builtinInteger "= type Integer"  bindBuiltinNat :: Term -> TCM () bindBuiltinNat t = do-  nat <- getDef t+  nat <- fromMaybe __IMPOSSIBLE__ <$> getDef t   def <- theDef <$> getConstInfo nat   case def of     Datatype { dataCons = [c1, c2] } -> do@@ -462,7 +480,7 @@                       | otherwise = (c2, c1)           tnat = el primNat           rerange = setRange (getRange nat)-      addHaskellType nat "Integer"+      addHaskellPragma nat "= type Integer"       bindBuiltinInfo (BuiltinInfo builtinZero $ BuiltinDataCons tnat)                       (A.Con $ AmbQ [rerange zero])       bindBuiltinInfo (BuiltinInfo builtinSuc  $ BuiltinDataCons (tnat --> tnat))@@ -471,7 +489,7 @@  bindBuiltinUnit :: Term -> TCM () bindBuiltinUnit t = do-  unit <- getDef t+  unit <- fromMaybe __IMPOSSIBLE__ <$> getDef t   def <- theDef <$> getConstInfo unit   case def of     Record { recFields = [], recConHead = con } -> do@@ -479,20 +497,75 @@       bindBuiltinName builtinUnitUnit (Con con ConOSystem [])     _ -> genericError "Builtin UNIT must be a singleton record type" +-- | Bind BUILTIN EQUALITY and BUILTIN REFL.+bindBuiltinEquality :: A.Expr -> TCM ()+bindBuiltinEquality (A.ScopedExpr scope e) = do+  setScope scope+  bindBuiltinEquality e+bindBuiltinEquality e = do+  (v, _t) <- inferExpr e++  -- Equality needs to be a data type with 1 constructor+  (eq, def) <- inductiveCheck builtinEquality 1 v++  -- Check that the type is the type of a polymorphic relation, i.e.,+  -- Γ → (A : Set _) → A → A → Set _+  TelV eqTel eqCore <- telView $ defType def+  let no = genericError "The type of BUILTIN EQUALITY must be a polymorphic relation"++  -- The target is a sort since eq is a data type.+  unless (isJust $ isSort $ unEl eqCore) __IMPOSSIBLE__++  -- The types of the last two arguments must be the third-last argument+  unless (size eqTel >= 3) no+  let (a, b) = fromMaybe __IMPOSSIBLE__ $ last2 $ telToList eqTel+  [a,b] <- reduce $ map (unEl . snd . unDom) [a,b]+  unless (deBruijnView a == Just 0) no+  unless (deBruijnView b == Just 1) no++  -- Get the single constructor.+  case theDef def of+    Datatype { dataCons = [c] } -> do+      bindBuiltinName builtinEquality v++      -- Check type of REFL.  It has to be of the form+      -- pars → (x : A) → Eq ... x x++      -- Check the arguments+      cdef <- getConstInfo c+      TelV conTel conCore <- telView $ defType cdef+      ts <- reduce $ map (unEl . snd . unDom) $ drop (conPars $ theDef cdef) $ telToList conTel+      -- After dropping the parameters, there should be maximally one argument.+      unless (length ts <= 1) wrongRefl+      unless (all ((Just 0 ==) . deBruijnView) ts) wrongRefl++      -- Check the target+      case ignoreSharing $ unEl conCore of+        Def _ es -> do+          let vs = map unArg $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es+          (a,b) <- reduce $ fromMaybe __IMPOSSIBLE__ $ last2 vs+          unless (deBruijnView a == Just 0) wrongRefl+          unless (deBruijnView b == Just 0) wrongRefl+          bindBuiltinName builtinRefl (Con (ConHead c Inductive []) ConOSystem [])+        _ -> __IMPOSSIBLE__+    _ -> genericError "Builtin EQUALITY must be a data type with a single constructor"+  where+  wrongRefl = genericError "Wrong type of constructor of BUILTIN EQUALITY"+ bindBuiltinInfo :: BuiltinInfo -> A.Expr -> TCM () bindBuiltinInfo i (A.ScopedExpr scope e) = setScope scope >> bindBuiltinInfo i e bindBuiltinInfo (BuiltinInfo s d) e = do     case d of       BuiltinData t cs -> do-        e' <- checkExpr e =<< t-        let n = length cs-        inductiveCheck s n e'-        case () of-          _ | s == builtinBool    -> bindBuiltinBool e'-            | s == builtinNat     -> bindBuiltinNat e'-            | s == builtinInteger -> bindBuiltinInt e'-            | s == builtinUnit    -> bindBuiltinUnit e'-            | otherwise           -> bindBuiltinName s e'+        v <- checkExpr e =<< t+        unless (s == builtinUnit) $ do+          void $ inductiveCheck s (length cs) v+        if | s == builtinEquality -> __IMPOSSIBLE__ -- bindBuiltinEquality v+           | s == builtinBool     -> bindBuiltinBool     v+           | s == builtinNat      -> bindBuiltinNat      v+           | s == builtinInteger  -> bindBuiltinInt      v+           | s == builtinUnit     -> bindBuiltinUnit     v+           | otherwise            -> bindBuiltinName s   v        BuiltinDataCons t -> do @@ -501,16 +574,14 @@             name (Shared p) = name $ ignoreSharing (derefPtr p)             name _          = __IMPOSSIBLE__ -        e' <- checkExpr e =<< t+        v0 <- checkExpr e =<< t          case e of           A.Con{} -> return ()           _       -> typeError $ BuiltinMustBeConstructor s e -        let v@(Con h _ []) = name e'+        let v@(Con h _ []) = name v0             c = conName h-        when (s == builtinTrue)  $ addHaskellCode c "Bool" "True"-        when (s == builtinFalse) $ addHaskellCode c "Bool" "False"         bindBuiltinName s v        BuiltinPrim pfname axioms -> do@@ -536,7 +607,7 @@        BuiltinPostulate rel t -> do         t' <- t-        e' <- applyRelevanceToContext rel $ checkExpr e t'+        v <- applyRelevanceToContext rel $ checkExpr e t'         let err = typeError $ GenericError $                     "The argument to BUILTIN " ++ s ++ " must be a postulated name"         case e of@@ -545,10 +616,10 @@             case theDef def of               Axiom {} -> do                 builtinSizeHook s q t'-                when (s == builtinChar)   $ addHaskellType q "Char"-                when (s == builtinString) $ addHaskellType q "Data.Text.Text"-                when (s == builtinFloat)  $ addHaskellType q "Double"-                bindBuiltinName s e'+                when (s == builtinChar)   $ addHaskellPragma q "= type Char"+                when (s == builtinString) $ addHaskellPragma q "= type Data.Text.Text"+                when (s == builtinFloat)  $ addHaskellPragma q "= type Double"+                bindBuiltinName s v               _        -> err           _ -> err @@ -563,14 +634,15 @@ bindBuiltin :: String -> A.Expr -> TCM () bindBuiltin b e = do   unlessM ((0 ==) <$> getContextSize) $ typeError $ BuiltinInParameterisedModule b-  case b of-    _ | b == builtinZero  -> nowNat b-    _ | b == builtinSuc   -> nowNat b-    _ | b == builtinInf   -> bindBuiltinInf e-    _ | b == builtinSharp -> bindBuiltinSharp e-    _ | b == builtinFlat  -> bindBuiltinFlat e-    _ | Just i <- find ((b ==) . builtinName) coreBuiltins -> bindBuiltinInfo i e-    _ -> typeError $ NoSuchBuiltinName b+  if | b == builtinRefl  -> warning $ OldBuiltin b builtinEquality+     | b == builtinZero  -> nowNat b+     | b == builtinSuc   -> nowNat b+     | b == builtinInf   -> bindBuiltinInf e+     | b == builtinSharp -> bindBuiltinSharp e+     | b == builtinFlat  -> bindBuiltinFlat e+     | b == builtinEquality -> bindBuiltinEquality e+     | Just i <- find ((b ==) . builtinName) coreBuiltins -> bindBuiltinInfo i e+     | otherwise -> typeError $ NoSuchBuiltinName b   where     nowNat b = warning $ OldBuiltin b builtinNat 
src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs view
@@ -86,15 +86,15 @@                   , recNamedCon       = True                   , recFields         = []  -- flat is added later                   , recTel            = fieldTel-                  , recRecursive      = False                   , recEtaEquality'   = Inferred False-                  , recMutual         = []+                  , recMutual         = Just []                   , recAbstr          = ConcreteDef                   }               }     addConstant sharp $       sharpDefn { theDef = Constructor                     { conPars   = 2+                    , conArity  = 1                     , conSrcCon = ConHead sharp CoInductive [] -- flat is added as field later                     , conData   = defName infDefn                     , conAbstr  = ConcreteDef@@ -128,13 +128,15 @@         infA     = El (varSort 2) $ Def inf [ Apply $ defaultArg $ var 1 ]         cpi      = ConPatternInfo Nothing $ Just $ defaultArg infA     let clause   = Clause-          { clauseRange     = noRange+          { clauseLHSRange  = noRange+          , clauseFullRange = noRange           , clauseTel       = tel           , namedClausePats = [ argN $ Named Nothing $               ConP sharpCon cpi [ argN $ Named Nothing $ debruijnNamedVar "x" 0 ] ]           , clauseBody      = Just $ var 0           , clauseType      = Just $ defaultArg $ El (varSort 2) $ var 1           , clauseCatchall  = False+          , clauseUnreachable = Just False           }         cc = Case (defaultArg 0) $ Branches False                                (Map.singleton sharp@@ -142,7 +144,7 @@                                Map.empty                                Nothing         projection = Projection-          { projProper   = True+          { projProper   = Just inf           , projOrig     = flat           , projFromType = defaultArg inf           , projIndex    = 3
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE MultiWayIf #-}  module Agda.TypeChecking.Rules.Data where @@ -10,6 +11,7 @@ import qualified Data.Set as Set  import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Views (deepUnscope) import Agda.Syntax.Internal import Agda.Syntax.Common import Agda.Syntax.Position@@ -35,6 +37,7 @@ import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Permutation+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size import Agda.Utils.Tuple import qualified Agda.Utils.VarSet as VarSet@@ -51,11 +54,6 @@ checkDataDef :: Info.DefInfo -> QName -> [A.LamBinding] -> [A.Constructor] -> TCM () checkDataDef i name ps cs =     traceCall (CheckDataDef (getRange name) (qnameName name) ps cs) $ do -- TODO!! (qnameName)-        let countPars A.DomainFree{} = 1-            countPars (A.DomainFull (A.TypedBindings _ (Arg _ b))) = case b of-              A.TLet{}       -> 0-              A.TBind _ xs _ -> size xs-            npars = sum $ map countPars ps          -- Add the datatype module         addSection (qnameToMName name)@@ -68,7 +66,7 @@         t <- unTelV <$> telView t          -- Top level free vars-        freeVars <- getContextArgs+        freeVars <- getContextSize          -- The parameters are in scope when checking the constructors.         dataDef <- bindParameters ps t $ \tel t0 -> do@@ -111,10 +109,11 @@                 , text "type (full):   " <+> prettyTCM t                 , text "sort:   " <+> prettyTCM s                 , text "indices:" <+> text (show nofIxs)-                , text "params:"  <+> text (show ps)+                , text "params:"  <+> text (show $ deepUnscope ps)                 , text "small params:" <+> text (show smallPars)                 ]               ]+            let npars = size tel              -- Change the datatype from an axiom to a datatype with no constructors.             let dataDef = Datatype@@ -127,10 +126,10 @@                   , dataCons       = []     -- Constructors are added later                   , dataSort       = s                   , dataAbstr      = Info.defAbstract i-                  , dataMutual     = []+                  , dataMutual     = Nothing                   } -            escapeContext (size tel) $ do+            escapeContext npars $ do               addConstant name $                 defaultDefn defaultArgInfo name t dataDef                 -- polarity and argOcc.s determined by the positivity checker@@ -145,7 +144,7 @@                 -- so we apply to the free module variables.                 -- Unfortunately, we lose precision here, since 'abstract', which                 -- is then performed by addConstant, cannot restore the linearity info.-                nonLinPars  = Drop (size freeVars) $ Perm (npars + size freeVars) nonLinPars0+                nonLinPars  = Drop freeVars $ Perm (npars + freeVars) nonLinPars0              -- Return the data definition             return dataDef{ dataNonLinPars = nonLinPars }@@ -167,8 +166,6 @@           defaultDefn defaultArgInfo name t $             dataDef{ dataCons = cons } -        -- Andreas 2012-02-13: postpone polarity computation until after positivity check-        -- computePolarity name  -- | Ensure that the type is a sort. --   If it is not directly a sort, compare it to a 'newSortMetaBelowInf'.@@ -230,7 +227,6 @@         t <- isType_ e         -- check that the type of the constructor ends in the data type         n <- getContextSize-        -- OLD: n <- size <$> getContextTelescope         debugEndsIn t d n         nonLinPars <- constructs n t d         debugNonLinPars nonLinPars@@ -240,15 +236,22 @@         -- is contained in the sort of the data type         -- (to avoid impredicative existential types)         debugFitsIn s-        t' `fitsIn` s+        arity <- t' `fitsIn` s         debugAdd c t'          -- add parameters to constructor type and put into signature         let con = ConHead c Inductive [] -- data constructors have no projectable fields and are always inductive         escapeContext (size tel) $           addConstant c $-            defaultDefn defaultArgInfo c (telePi tel t') $-              Constructor (size tel) con d (Info.defAbstract i) Inductive []+            defaultDefn defaultArgInfo c (telePi tel t') $ Constructor+              { conPars   = size tel+              , conArity  = arity+              , conSrcCon = con+              , conData   = d+              , conAbstr  = Info.defAbstract i+              , conInd    = Inductive+              , conErased = []  -- computed during compilation to treeless+              }          -- Add the constructor to the instance table, if needed         when (Info.defInstance i == InstanceDef) $ do@@ -268,8 +271,9 @@               ]         , nest 2 $ text "nofPars =" <+> text (show n)         ]-    debugNonLinPars xs =-      reportSDoc "tc.data.con" 15 $ text $ "these constructor parameters are non-linear: " ++ show xs+    debugNonLinPars ks =+      reportSDoc "tc.data.con" 15 $+        text "these constructor parameters are non-linear:" <+> text (show ks)     debugFitsIn s =       reportSDoc "tc.data.con" 15 $ sep         [ text "checking that the type fits in"@@ -283,30 +287,71 @@   -- | Bind the parameters of a datatype.+--+--   We allow omission of hidden parameters at the definition site.+--   Example:+--   @+--     data D {a} (A : Set a) : Set a+--     data D A where+--       c : A -> D A+--   @+ bindParameters :: [A.LamBinding] -> Type -> (Telescope -> Type -> TCM a) -> TCM a-bindParameters [] a ret = ret EmptyTel a-bindParameters (A.DomainFull (A.TypedBindings _ (Arg info (A.TBind _ xs _))) : bs) a ret =-  bindParameters (map (mergeHiding . fmap (A.DomainFree info)) xs ++ bs) a ret-bindParameters (A.DomainFull (A.TypedBindings _ (Arg info (A.TLet _ lbs))) : bs) a ret =+bindParameters = bindParameters' []++-- | Auxiliary function for 'bindParameters'.+bindParameters'+  :: [Type]         -- ^ @n@ replicas of type if @LamBinding@s are @DomainFree@s+                    --   that came from a @DomainFull@ of @n@ binders.+                    --   Should be comsumed whenever a @DomainFree@s are consumed.+  -> [A.LamBinding] -- ^ Bindings from definition site.+  -> Type           -- ^ Pi-type of bindings coming from signature site.+  -> (Telescope -> Type -> TCM a)+     -- ^ Continuation, accepting parameter telescope and rest of type.+     --   The parameters are part of the context when the continutation is invoked.+  -> TCM a++bindParameters' _ [] a ret = ret EmptyTel a++bindParameters' ts (A.DomainFull (A.TypedBindings _ (Arg info (A.TBind _ xs e))) : bs) a ret = do+  unless (null ts) __IMPOSSIBLE__+  t <- workOnTypes $ isType_ e+  bindParameters' (t <$ xs) (map (mergeHiding . fmap (A.DomainFree info)) xs ++ bs) a ret++bindParameters' _ (A.DomainFull (A.TypedBindings _ (Arg _ A.TLet{})) : _) _ _ =  -- line break!   __IMPOSSIBLE__-bindParameters ps0@(A.DomainFree info x : ps) (El _ (Pi arg@(Dom info' a) b)) ret-  -- Andreas, 2011-04-07 ignore relevance information in binding?!-    | argInfoHiding info /= argInfoHiding info' =-        __IMPOSSIBLE__-    | otherwise = addContext' (x, arg) $ bindParameters ps (absBody b) $ \tel s ->-                    ret (ExtendTel arg $ Abs (nameToArgName x) tel) s-bindParameters bs (El s (Shared p)) ret = bindParameters bs (El s $ derefPtr p) ret-bindParameters (b : bs) t _ = __IMPOSSIBLE__-{- Andreas, 2012-01-17 Concrete.Definitions ensures number and hiding of parameters to be correct--- Andreas, 2012-01-13 due to separation of data declaration/definition, the user--- could give more parameters than declared.-bindParameters (b : bs) t _ = typeError $ DataTooManyParameters--} +bindParameters' ts0 ps0@(A.DomainFree info x : ps) t ret = do+  case ignoreSharing $ unEl t of+    -- Andreas, 2011-04-07 ignore relevance information in binding?!+    Pi arg@(Dom info' a) b -> do+      if | info == info'                  -> do+            -- Andreas, 2016-12-30, issue #1886:+            -- If type for binding is present, check its correctness.+            ts <- caseList ts0 (return []) $ \ t0 ts -> do+              equalType t0 a+              return ts+            continue ts ps x +         | visible info, notVisible info' ->+            continue ts0 ps0 =<< freshName_ (absName b)++         | otherwise                      -> __IMPOSSIBLE__+             -- Andreas, 2016-12-30 Concrete.Definition excludes this case+      where+      continue ts ps x = do+        addContext' (x, arg) $+          bindParameters' (raise 1 ts) ps (absBody b) $ \ tel s ->+            ret (ExtendTel arg $ Abs (nameToArgName x) tel) s+    _ -> __IMPOSSIBLE__++ -- | Check that the arguments to a constructor fits inside the sort of the datatype. --   The first argument is the type of the constructor.-fitsIn :: Type -> Sort -> TCM ()+--+--   As a side effect, return the arity of the constructor.++fitsIn :: Type -> Sort -> TCM Int fitsIn t s = do   reportSDoc "tc.data.fits" 10 $     sep [ text "does" <+> prettyTCM t@@ -325,8 +370,9 @@       when (withoutK || notForced (getRelevance dom)) $ do         sa <- reduce $ getSort dom         unless (sa == SizeUniv) $ sa `leqSort` s-      addContext (absName b, dom) $ fitsIn (absBody b) (raise 1 s)-    _ -> return () -- getSort t `leqSort` s  -- Andreas, 2013-04-13 not necessary since constructor type ends in data type+      addContext (absName b, dom) $ do+        succ <$> fitsIn (absBody b) (raise 1 s)+    _ -> return 0 -- getSort t `leqSort` s  -- Andreas, 2013-04-13 not necessary since constructor type ends in data type   where     notForced Forced{} = False     notForced _        = True@@ -346,23 +392,6 @@ constructs :: Int -> Type -> QName -> TCM [Int] constructs nofPars t q = constrT 0 t     where-{- OLD-        constrT :: Nat -> Type -> TCM ()-        constrT n (El s v) = constr n s v--        constr :: Nat -> Sort -> Term -> TCM ()-        constr n s v = do-            v <- reduce v-            case ignoreSharing v of-                Pi _ (NoAbs _ b) -> constrT n b-                Pi a b           -> underAbstraction a b $ constrT (n + 1)-                Def d vs-                    | d == q -> checkParams n =<< reduce (take nofPars vs)-                                                    -- we only check the parameters-                _ -> bad $ El s v--        bad t = typeError $ ShouldEndInApplicationOfTheDatatype t--}         constrT :: Nat -> Type -> TCM [Int]         constrT n t = do             t <- reduce t@@ -382,6 +411,12 @@                   when (any (< 0) nl) __IMPOSSIBLE__                   when (any (>= nofPars) nl) __IMPOSSIBLE__                   return nl+                MetaV{} -> do+                  def <- getConstInfo q+                  xs <- newArgsMeta $ defType def+                  let t' = El (dataSort $ theDef def) $ Def q $ map Apply xs+                  equalType t t'+                  constrT n t'                 _ -> typeError $ ShouldEndInApplicationOfTheDatatype t          checkParams n vs = zipWithM_ sameVar vs ps
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -12,15 +12,13 @@  import Data.Either (partitionEithers) import qualified Data.Foldable as Fold-import Data.List (genericLength)+import qualified Data.List as List import Data.Maybe import Data.Map (Map) import qualified Data.Sequence as Seq import qualified Data.Set as Set import Data.Set (Set) -import Agda.Compiler.HaskellTypes-import Agda.Compiler.UHC.Pragmas.Parse import Agda.Interaction.Options import Agda.Interaction.Highlighting.Generate @@ -60,6 +58,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Unquote+import Agda.TypeChecking.Warnings  import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Rules.Data    ( checkDataDef )@@ -186,7 +185,7 @@                                       current <- asks envMutualBlock                                       unless (Just blockId == current) $ do                                         reportSLn "" 0 $ unlines-                                          [ "mutual block id discrepancy for " ++ show x+                                          [ "mutual block id discrepancy for " ++ prettyShow x                                           , "  current    mut. bl. = " ++ show current                                           , "  calculated mut. bl. = " ++ show blockId                                           ]@@ -216,9 +215,12 @@        -- Post-typing checks.       whenJust finalChecks $ \ theMutualChecks -> do+        reportSLn "tc.decl" 20 $ "Attempting to solve constraints before freezing."+        wakeupConstraints_   -- solve emptiness and instance constraints         checkingWhere <- asks envCheckingWhere         solveSizeConstraints $ if checkingWhere then DontDefaultToInfty else DefaultToInfty-        wakeupConstraints_   -- solve emptiness constraints+        wakeupConstraints_   -- Size solver might have unblocked some constraints+        reportSLn "tc.decl" 20 $ "Freezing all metas."         _ <- freezeMetas         theMutualChecks @@ -229,7 +231,7 @@       A.Axiom A.NoFunSig i defaultArgInfo Nothing x               (A.Pi (Info.ExprRange (fuseRange ps t)) ps t) -    check x i m = do+    check x i m = Bench.billTo [Bench.Definition x] $ do       reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."       reportSLn "tc.decl.abstract" 25 $ show (Info.defAbstract i)       r <- abstract (Info.defAbstract i) m@@ -250,10 +252,14 @@   -- Andreas, 2014-04-11: instantiate metas in definition types   let nameList = Set.toList names   mapM_ instantiateDefinitionType nameList+  -- Andreas, 2017-03-23: check positivity before termination.+  -- This allows us to reuse the information about SCCs+  -- to skip termination of non-recursive functions.+  modifyAllowedReductions (List.delete UnconfirmedReductions) $+    checkPositivity_ mi names   -- Andreas, 2013-02-27: check termination before injectivity,   -- to avoid making the injectivity checker loop.   local (\ e -> e { envMutualBlock = Just mid }) $ checkTermination_ d-  checkPositivity_         mi names   revisitRecordPatternTranslation nameList -- Andreas, 2016-11-19 issue #2308   -- Andreas, 2015-03-26 Issue 1470:   -- Restricting coinduction to recursive does not solve the@@ -292,7 +298,12 @@   classify q = inConcreteOrAbstractMode q $ \ def -> do     case theDef def of       Record{ recEtaEquality' = Inferred True } -> return $ Just $ Left q-      Function{ funCompiled = Just cc } -> return $ Just $ Right (q, cc)+      Function+        { funProjection = Nothing+            -- Andreas, 2017-08-10, issue #2664:+            -- Do not record pattern translate record projection definitions!+        , funCompiled   = Just cc+        } -> return $ Just $ Right (q, cc)       _ -> return Nothing  type FinalChecks = Maybe (TCM ())@@ -329,11 +340,14 @@ --   Precondition: name has been added to signature already. instantiateDefinitionType :: QName -> TCM () instantiateDefinitionType q = do-  reportSLn "tc.decl.inst" 20 $ "instantiating type of " ++ show q-  sig <- getSignature-  let t = defType $ fromMaybe __IMPOSSIBLE__ $ lookupDefinition q sig-  t <- instantiateFull t-  modifySignature $ updateDefinition q $ \ def -> def { defType = t }+  reportSLn "tc.decl.inst" 20 $ "instantiating type of " ++ prettyShow q+  t  <- defType . fromMaybe __IMPOSSIBLE__ . lookupDefinition q <$> getSignature+  t' <- instantiateFull t+  modifySignature $ updateDefinition q $ updateDefType $ const t'+  reportSDoc "tc.decl.inst" 30 $ vcat+    [ text "  t  = " <+> prettyTCM t+    , text "  t' = " <+> prettyTCM t'+    ]  -- Andreas, 2014-04-11 -- UNUSED, costs a couple of sec on the std-lib@@ -345,7 +359,7 @@ -- --   Precondition: name has been added to signature already. -- instantiateDefinition :: QName -> TCM () -- instantiateDefinition q = do---   reportSLn "tc.decl.inst" 20 $ "instantiating " ++ show q+--   reportSLn "tc.decl.inst" 20 $ "instantiating " ++ prettyShow q --   sig <- getSignature --   let def = fromMaybe __IMPOSSIBLE__ $ lookupDefinition q sig --   def <- instantiateFull def@@ -354,7 +368,7 @@ -- | Highlight a declaration. highlight_ :: A.Declaration -> TCM () highlight_ d = do-  let highlight d = generateAndPrintSyntaxInfo d Full+  let highlight d = generateAndPrintSyntaxInfo d Full True   Bench.billTo [Bench.Highlighting] $ case d of     A.Axiom{}                -> highlight d     A.Field{}                -> __IMPOSSIBLE__@@ -421,7 +435,7 @@   -- Andreas, 2012-02-13: Polarity computation uses info from   -- positivity check, so it needs happen after positivity   -- check.-  mapM_ computePolarity $ Set.toList names+  computePolarity $ Set.toList names  -- | Check that all coinductive records are actually recursive. --   (Otherwise, one can implement invalid recursion schemes just like@@ -457,15 +471,15 @@         case term of           Just True -> do             inv <- checkInjectivity q cs-            modifySignature $ updateDefinition q $ const $-              def { theDef = d { funInv = inv }}+            modifySignature $ updateDefinition q $ updateTheDef $ const $+              d { funInv = inv }           _ -> reportSLn "tc.inj.check" 20 $-             show q ++ " is not verified as terminating, thus, not considered for injectivity"+             prettyShow q ++ " is not verified as terminating, thus, not considered for injectivity"       _ -> do         abstr <- asks envAbstractMode         reportSLn "tc.inj.check" 20 $           "we are in " ++ show abstr ++ " and " ++-             show q ++ " is abstract or not a function, thus, not considered for injectivity"+             prettyShow q ++ " is abstract or not a function, thus, not considered for injectivity"  -- | Check a set of mutual names for projection likeness. --@@ -479,7 +493,7 @@       -- Non-mutual definitions can be considered for       -- projection likeness       let ds = Set.toList names-      reportSLn "tc.proj.like" 20 $ "checkDecl: checking projection-likeness of " ++ show ds+      reportSLn "tc.proj.like" 20 $ "checkDecl: checking projection-likeness of " ++ prettyShow ds       case ds of         [d] -> do           def <- getConstInfo d@@ -488,7 +502,7 @@           case theDef def of             Function{} -> makeProjection (defName def)             _          -> reportSLn "tc.proj.like" 25 $-              show d ++ " is abstract or not a function, thus, not considered for projection-likeness"+              prettyShow d ++ " is abstract or not a function, thus, not considered for projection-likeness"         _ -> reportSLn "tc.proj.like" 25 $                "mutual definitions are not considered for projection-likeness" @@ -537,13 +551,13 @@     Nothing   -> return ([], [])     Just occs -> do       TelV tel _ <- telView t-      let n = genericLength (telToList tel)-      when (n < genericLength occs) $+      let n = length (telToList tel)+      when (n < length occs) $         typeError $ TooManyPolarities x n       let pols = map polFromOcc occs       reportSLn "tc.polarity.pragma" 10 $-        "Setting occurrences and polarity for " ++ show x ++ ":\n  " ++-        show occs ++ "\n  " ++ show pols+        "Setting occurrences and polarity for " ++ prettyShow x ++ ":\n  " +++        prettyShow occs ++ "\n  " ++ prettyShow pols       return (occs, pols)    -- Not safe. See Issue 330@@ -595,7 +609,7 @@   do def <- getConstInfo x      m <- currentModule      let m' = qnameModule $ defName def-     unless (m == m') $ typeError $ GenericError err+     unless (m == m' || isSubModuleOf m' m) $ typeError $ GenericError err  -- | Check a pragma. checkPragma :: Range -> A.Pragma -> TCM ()@@ -604,17 +618,6 @@         A.BuiltinPragma x e -> bindBuiltin x e         A.BuiltinNoDefPragma b x -> bindBuiltinNoDef b x         A.RewritePragma q   -> addRewriteRule q-        A.CompiledDeclareDataPragma x hs -> do-          def <- getConstInfo x-          assertCurrentModule x $-              "COMPILED_DECLARE_DATA directives must appear in the same module " ++-              "as their corresponding datatype definition,"-          case theDef def of-            Datatype{} -> addHaskellType x hs-            Axiom{}    -> -- possible when the data type has only been declared yet-              addHaskellType x hs-            _          -> typeError $ GenericError-                          "COMPILED_DECLARE_DATA directive only works on data types"         A.CompiledTypePragma x hs -> do           def <- getConstInfo x           case theDef def of@@ -628,83 +631,38 @@           assertCurrentModule x $               "COMPILED_DATA directives must appear in the same module " ++               "as their corresponding datatype definition,"-          let addCompiledData cs = do-                addHaskellType x hs-                let computeHaskellType c = do-                      def <- getConstInfo c-                      let Constructor{ conPars = np } = theDef def-                          underPars 0 a = haskellType a-                          underPars n a = do-                            a <- reduce a-                            case unEl a of-                              Pi a (NoAbs _ b) -> underPars (n - 1) b-                              Pi a b  -> underAbstraction a b $ \b -> hsForall <$> getHsVar 0 <*> underPars (n - 1) b-                              _       -> __IMPOSSIBLE__-                      ty <- underPars np $ defType def-                      reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show c ++ ": " ++ ty-                      return ty-                hts <- mapM computeHaskellType cs-                sequence_ $ zipWith3 addHaskellCode cs hts hcs           case theDef def of-            Datatype{dataCons = cs}-              | length cs /= length hcs -> do-                  let n_forms_are = case length hcs of-                        1 -> "1 compiled form is"-                        n -> show n ++ " compiled forms are"-                      only | null hcs               = ""-                           | length hcs < length cs = "only "-                           | otherwise              = ""--                  err <- fsep $ [prettyTCM x] ++ pwords ("has " ++ show (length cs) ++-                                " constructors, but " ++ only ++ n_forms_are ++ " given [" ++ unwords hcs ++ "]")-                  typeError $ GenericError $ show err-              | otherwise -> addCompiledData cs-            Record{recConHead = ch}-              | length hcs == 1 -> addCompiledData [conName ch]-              | otherwise -> do-                  err <- fsep $ [prettyTCM x] ++ pwords ("has 1 constructor, but " ++-                                show (length hcs) ++ " Haskell constructors are given [" ++ unwords hcs ++ "]")-                  typeError $ GenericError $ show err+            Datatype{dataCons = cs} -> addHaskellData x hs hcs+            Record{recConHead = ch} -> addHaskellData x hs hcs             _ -> typeError $ GenericError "COMPILED_DATA on non datatype"+        A.CompilePragma b x s -> do+          assertCurrentModule x $+              "COMPILE pragmas must appear in the same module " +++              "as their corresponding definitions,"+          addPragma b x s         A.CompiledPragma x hs -> do           def <- getConstInfo x+          let addCompiled = addHaskellCode x hs           case theDef def of-            Axiom{} -> do-              ty <- haskellType $ defType def-              reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show x ++ ": " ++ ty-              addHaskellCode x ty hs-            _   -> typeError $ GenericError "COMPILED directive only works on postulates"+            Axiom{} -> addCompiled+            Function{} -> addCompiled+            _   -> typeError $ GenericError "COMPILED directive only works on postulates and functions"+         A.CompiledExportPragma x hs -> do           def <- getConstInfo x           let correct = case theDef def of-                            -- Axiom{} -> do-                            --   ty <- haskellType $ defType def-                            --   reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show x ++ ": " ++ ty-                            --   addHaskellCode x ty hs                             Function{} -> True                             Constructor{} -> False                             _   -> False           if not correct             then typeError $ GenericError "COMPILED_EXPORT directive only works on functions"-            else do-              ty <- haskellType $ defType def-              addHaskellExport x ty hs-        A.CompiledEpicPragma x ep -> do-          def <- getConstInfo x-          case theDef def of-            Axiom{} -> do-              --ty <- haskellType $ defType def-              --reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show x ++ ": " ++ ty-              addEpicCode x ep-            _   -> typeError $ GenericError "COMPILED_EPIC directive only works on postulates"+            else addHaskellExport x hs         A.CompiledJSPragma x ep ->           addJSCode x ep         A.CompiledUHCPragma x cr -> do           def <- getConstInfo x           case theDef def of-            Axiom{} -> case parseCoreExpr cr of-                    Left msg -> typeError $ GenericError $ "Could not parse COMPILED_UHC pragma: " ++ msg-                    Right cr -> addCoreCode x cr+            Axiom{} -> addCoreCode x cr             _ -> typeError $ GenericError "COMPILED_UHC directive only works on postulates" -- only allow postulates for the time being         A.CompiledDataUHCPragma x crd crcs -> do           -- TODO mostly copy-paste from the CompiledDataPragma, should be refactored into a seperate function@@ -717,30 +675,14 @@               "COMPILED_DATA_UHC directives must appear in the same module " ++               "as their corresponding datatype definition,"           case theDef def of-            Datatype{dataCons = cs}-              | length cs /= length crcs -> do-                  let n_forms_are = case length crcs of-                        1 -> "1 compiled form is"-                        n -> show n ++ " compiled forms are"-                      only | null crcs               = ""-                           | length crcs < length cs = "only "-                           | otherwise               = ""--                  err <- fsep $ [prettyTCM x] ++ pwords ("has " ++ show (length cs) ++-                                " constructors, but " ++ only ++ n_forms_are ++ " given [" ++ unwords crcs ++ "]")-                  typeError $ GenericError $ show err-              | otherwise -> do-                -- Remark: core pragmas are not type-checked-                dt' <- parseCoreData crd-                cons' <- parseCoreConstrs dt' crcs-                addCoreType x dt'-                sequence_ $ zipWith addCoreConstr cs cons'+            Datatype{dataCons = cs} -> addCoreType x crd crcs             _ -> typeError $ GenericError "COMPILED_DATA_UHC on non datatype"         A.StaticPragma x -> do           def <- getConstInfo x           case theDef def of             Function{} -> markStatic x             _          -> typeError $ GenericError "STATIC directive only works on functions"+        A.InjectivePragma x -> markInjective x         A.InlinePragma x -> do           def <- getConstInfo x           case theDef def of@@ -748,6 +690,18 @@             _          -> typeError $ GenericError "INLINE directive only works on functions"         A.OptionsPragma{} -> typeError $ GenericError $ "OPTIONS pragma only allowed at beginning of file, before top module declaration"         A.DisplayPragma f ps e -> checkDisplayPragma f ps e+        A.EtaPragma r -> do+          let noRecord = typeError $ GenericError $+                "ETA pragma is only applicable to coinductive records"+          caseMaybeM (isRecord r) noRecord $ \case+            Record{ recInduction = ind, recEtaEquality' = eta } -> do+              unless (ind == Just CoInductive) $ noRecord+              when (eta == Specified False) $ typeError $ GenericError $+                "ETA pragram conflicts with no-eta-equality declaration"+            _ -> __IMPOSSIBLE__+          modifySignature $ updateDefinition r $ updateTheDef $ \case+            def@Record{} -> def { recEtaEquality' = Specified True }+            _ -> __IMPOSSIBLE__  -- | Type check a bunch of mutual inductive recursive definitions. --@@ -773,6 +727,7 @@   setScope scope   mapM_ checkTypeSignature ds checkTypeSignature (A.Axiom funSig i info mp x e) =+  Bench.billTo [Bench.Definition x] $   Bench.billTo [Bench.Typing, Bench.TypeSig] $     let abstr = case Info.defAccess i of           PrivateAccess{}@@ -815,21 +770,21 @@           y    = absName btel           tel  = absBody btel in       case (argInfoHiding info, argInfoHiding info', name) of-        (Instance, NotHidden, _) -> check tel args0-        (Instance, Hidden, _)    -> check tel args0-        (Instance, Instance, Nothing) -> check tel args-        (Instance, Instance, Just x)-          | x == y                -> check tel args-          | otherwise             -> check tel args0-        (Hidden, NotHidden, _)    -> check tel args0-        (Hidden, Instance, _)     -> check tel args0-        (Hidden, Hidden, Nothing) -> check tel args+        (Instance{}, NotHidden, _)        -> check tel args0+        (Instance{}, Hidden, _)           -> check tel args0+        (Instance{}, Instance{}, Nothing) -> check tel args+        (Instance{}, Instance{}, Just x)+          | x == y                        -> check tel args+          | otherwise                     -> check tel args0+        (Hidden, NotHidden, _)            -> check tel args0+        (Hidden, Instance{}, _)           -> check tel args0+        (Hidden, Hidden, Nothing)         -> check tel args         (Hidden, Hidden, Just x)-          | x == y                -> check tel args-          | otherwise             -> check tel args0-        (NotHidden, NotHidden, _) -> check tel args-        (NotHidden, Hidden, _)    -> bad-        (NotHidden, Instance, _)    -> bad+          | x == y                        -> check tel args+          | otherwise                     -> check tel args0+        (NotHidden, NotHidden, _)         -> check tel args+        (NotHidden, Hidden, _)            -> bad+        (NotHidden, Instance{}, _)        -> bad  -- | Check an application of a section (top-level function, includes @'traceCall'@). checkSectionApplication@@ -854,15 +809,25 @@   -- lambda-bound variables as additional parameters to the module.   extraParams <- do     mfv <- getCurrentModuleFreeVars-    fv  <- size <$> getContextTelescope+    fv  <- getContextSize     return (fv - mfv)-  when (extraParams > 0) $ reportSLn "tc.mod.apply" 30 $ "Extra parameters to " ++ show m1 ++ ": " ++ show extraParams+  when (extraParams > 0) $ reportSLn "tc.mod.apply" 30 $ "Extra parameters to " ++ prettyShow m1 ++ ": " ++ show extraParams   -- Type-check the LHS (ptel) of the module macro.   checkTelescope ptel $ \ ptel -> do     -- We are now in the context @ptel@.-    -- Get the correct parameter telescope of @m2@.+    -- Get the correct parameter telescope of @m2@. This is the fully lifted+    -- telescope obtained by `lookupSection` instantiated with the module+    -- parameters of `m2` currently in scope. For instance+    -- ```+    --  module _ (A : Set) where+    --    module M (B : Set) where ...+    --    module M' = M B+    -- ```+    -- In the application `M' = M B`, `tel = (A B : Set)` and+    -- `moduleParamsToApply M = [A]`, so the resulting parameter telescope is+    -- `tel' = (B : Set)`.     tel <- lookupSection m2-    vs  <- freeVarsToApply $ mnameToQName m2+    vs  <- moduleParamsToApply m2     let tel'  = apply tel vs     -- Compute the remaining parameter telescope after stripping of     -- the initial parameters that are determined by the @args@.@@ -891,7 +856,7 @@       ]     -- Andreas, 2014-04-06, Issue 1094:     -- Add the section with well-formed telescope.-    addContext aTel $ do+    addContext (KeepNames aTel) $ do       reportSDoc "tc.mod.apply" 80 $         text "addSection" <+> prettyTCM m1 <+> (getContextTelescope >>= \ tel -> inTopContext (prettyTCM tel))       addSection m1@@ -903,13 +868,13 @@     args <- instantiateFull $ vs ++ ts     let n = size aTel     etaArgs <- inTopContext $ addContext aTel getContextArgs-    addContext' aTel $+    addContext' (KeepNames aTel) $       applySection m1 (ptel `abstract` aTel) m2 (raise n args ++ etaArgs) copyInfo  checkSectionApplication' i m1 (A.RecordModuleIFS x) copyInfo = do   let name = mnameToQName x   tel' <- lookupSection x-  vs   <- freeVarsToApply name+  vs   <- moduleParamsToApply x   let tel = tel' `apply` vs       args = teleArgs tel @@ -923,7 +888,7 @@       -- Found last parameter: switch it to @Instance@.       instFinal (ExtendTel (Dom info t) (Abs n EmptyTel)) =                  ExtendTel (Dom ifo' t) (Abs n EmptyTel)-        where ifo' = setHiding Instance info+        where ifo' = makeInstance info       -- Otherwise, keep searching for last parameter:       instFinal (ExtendTel arg (Abs n tel)) =                  ExtendTel arg (Abs n (instFinal tel))@@ -944,10 +909,10 @@     -- , nest 2 $ text "args    =" <+> text (show args)     ]   when (tel == EmptyTel) $-    typeError $ GenericError $ show (qnameToConcrete name) ++ " is not a parameterised section"+    typeError $ GenericError $ prettyShow (qnameToConcrete name) ++ " is not a parameterised section"    addContext' telInst $ do-    vs <- freeVarsToApply name+    vs <- moduleParamsToApply $ qnameModule name     reportSDoc "tc.mod.apply" 20 $ vcat       [ nest 2 $ text "vs      =" <+> sep (map prettyTCM vs)       , nest 2 $ text "args    =" <+> sep (map (parens . prettyTCM) args)@@ -1000,7 +965,7 @@       case d of         A.Section info mname tel ds -> do           reportSLn "tc.decl" 45 $-            "section " ++ show mname ++ " has "+            "section " ++ prettyShow mname ++ " has "               ++ show (length tel) ++ " parameters and "               ++ show (length ds) ++ " declarations"           reportSDoc "tc.decl" 45 $ prettyA $ A.Section info mname tel []
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -10,7 +10,6 @@ import Control.Monad.Reader hiding (forM, mapM)  import Data.Function-import Data.List hiding (sort) import Data.Maybe import Data.Traversable import qualified Data.Set as Set@@ -19,6 +18,7 @@ import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Concrete (exprFieldA) import Agda.Syntax.Position+import Agda.Syntax.Abstract.Pattern ( containsAbsurdPattern ) import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Abstract.Views as A import Agda.Syntax.Internal as I@@ -40,14 +40,14 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free-import Agda.TypeChecking.CheckInternal (checkType)+import Agda.TypeChecking.CheckInternal (checkType, inferSort) import Agda.TypeChecking.With import Agda.TypeChecking.Telescope import Agda.TypeChecking.Injectivity import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.SizedTypes.Solve import Agda.TypeChecking.RecordPatterns-import Agda.TypeChecking.CompiledClause (CompiledClauses(..))+import Agda.TypeChecking.CompiledClause (CompiledClauses'(..)) import Agda.TypeChecking.CompiledClause.Compile import Agda.TypeChecking.Primitive hiding (Nat) @@ -57,12 +57,14 @@ import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls )  import Agda.Utils.Except ( MonadError(catchError, throwError) )+import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.Maybe ( whenNothing ) import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty ( prettyShow )+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size-import Agda.Utils.Functor  #include "undefined.h" import Agda.Utils.Impossible@@ -114,15 +116,15 @@   where     isMeta (MetaV x _) = Just x     isMeta _           = Nothing-    trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) _ (A.RHS e mc) [] _] = Just (e, mc)+    trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) _ _ (A.RHS e mc) [] _] = Just (e, mc)     trivialClause _ = Nothing  -- | Check a trivial definition of the form @f = e@ checkAlias :: Type -> ArgInfo -> Delayed -> Info.DefInfo -> QName -> A.Expr -> Maybe C.Expr -> TCM () checkAlias t' ai delayed i name e mc = atClause name 0 (A.RHS e mc) $ do   reportSDoc "tc.def.alias" 10 $ text "checkAlias" <+> vcat-    [ text (show name) <+> colon  <+> prettyTCM t'-    , text (show name) <+> equals <+> prettyTCM e+    [ text (prettyShow name) <+> colon  <+> prettyTCM t'+    , text (prettyShow name) <+> equals <+> prettyTCM e     ]  {-@@ -155,17 +157,25 @@                    $ set funMacro (Info.defMacro i == MacroDef) $                      emptyFunction                       { funClauses = [ Clause  -- trivial clause @name = v@-                          { clauseRange     = getRange i+                          { clauseLHSRange  = getRange i+                          , clauseFullRange = getRange i                           , clauseTel       = EmptyTel                           , namedClausePats = []                           , clauseBody      = Just $ bodyMod v                           , clauseType      = Just $ Arg ai t                           , clauseCatchall  = False+                          , clauseUnreachable = Just False                           } ]                       , funCompiled = Just $ Done [] $ bodyMod v                       , funDelayed  = delayed                       , funAbstr    = Info.defAbstract i                       }++  -- Andreas, 2017-01-01, issue #2372:+  -- Add the definition to the instance table, if needed, to update its type.+  when (Info.defInstance i == InstanceDef) $ do+    addTypedInstance name t+   reportSDoc "tc.def.alias" 20 $ text "checkAlias: leaving"  @@ -195,7 +205,7 @@              -> Maybe Substitution -- ^ substitution (from with abstraction) that needs to be applied to module parameters              -> [A.Clause]       -- ^ the clauses to check              -> TCM ()-checkFunDefS t ai delayed extlam with i name withSub cs =+checkFunDefS t ai delayed extlam with i name withSub cs = do      traceCall (CheckFunDef (getRange i) (qnameName name) cs) $ do   -- TODO!! (qnameName)         reportSDoc "tc.def.fun" 10 $@@ -236,18 +246,18 @@               inTopContext $ addClauses name [c]               return c -        reportSDoc "tc.def.fun" 70 $+        reportSDoc "tc.def.fun" 70 $ inTopContext $ do           sep $ [ text "checked clauses:" ] ++ map (nest 2 . text . show) cs          -- After checking, remove the clauses again.         -- (Otherwise, @checkInjectivity@ loops for issue 801).         modifyFunClauses name (const []) -        reportSDoc "tc.cc" 25 $ do+        reportSDoc "tc.cc" 25 $ inTopContext $ do           sep [ text "clauses before injectivity test"               , nest 2 $ prettyTCM $ map (QNamed name) cs  -- broken, reify (QNamed n cl) expect cl to live at top level               ]-        reportSDoc "tc.cc" 60 $ do+        reportSDoc "tc.cc" 60 $ inTopContext $ do           sep [ text "raw clauses: "               , nest 2 $ sep $ map (text . show . QNamed name) cs               ]@@ -268,7 +278,7 @@         inv <- Bench.billTo [Bench.Injectivity] $           checkInjectivity name cs -        reportSDoc "tc.cc" 15 $ do+        reportSDoc "tc.cc" 15 $ inTopContext $ do           sep [ text "clauses before compilation"               , nest 2 $ sep $ map (prettyTCM . QNamed name) cs               ]@@ -282,7 +292,7 @@         cc <- Bench.billTo [Bench.Coverage] $           inTopContext $ compileClauses (Just (name, fullType)) cs -        reportSDoc "tc.cc" 10 $ do+        reportSDoc "tc.cc" 60 $ inTopContext $ do           sep [ text "compiled clauses of" <+> prettyTCM name               , nest 2 $ text (show cc)               ]@@ -307,9 +317,6 @@              , funCopatternLHS   = isCopatternLHS cs              } -        -- Andreas 2012-02-13: postpone polarity computation until after positivity check-        -- computePolarity name-         reportSDoc "tc.def.fun" 10 $ do           sep [ text "added " <+> prettyTCM name <+> text ":"               , nest 2 $ prettyTCM . defType =<< getConstInfo name@@ -325,7 +332,7 @@         Terminating    -> Just True         _              -> Nothing   reportSLn "tc.fundef" 30 $ unlines $-    [ "funTerminates of " ++ show name ++ " set to " ++ show terminates+    [ "funTerminates of " ++ prettyShow name ++ " set to " ++ show terminates     , "  tc = " ++ show tc     ]   return $ def { theDef = fun { funTerminates = terminates }}@@ -335,8 +342,8 @@ -- | Insert some patterns in the in with-clauses LHS of the given RHS insertPatterns :: [A.Pattern] -> A.RHS -> A.RHS insertPatterns pats (A.WithRHS aux es cs) = A.WithRHS aux es (map insertToClause cs)-    where insertToClause (A.Clause (A.LHS i lhscore ps) dots rhs ds catchall)-              = A.Clause (A.LHS i lhscore (pats ++ ps)) dots (insertPatterns pats rhs) ds catchall+    where insertToClause (A.Clause (A.LHS i lhscore ps) dots sdots rhs ds catchall)+              = A.Clause (A.LHS i lhscore (pats ++ ps)) dots sdots (insertPatterns pats rhs) ds catchall insertPatterns pats (A.RewriteRHS qes rhs wh) = A.RewriteRHS qes (insertPatterns pats rhs) wh insertPatterns pats rhs = rhs @@ -347,6 +354,7 @@     { wfParentName :: QName                -- ^ Parent function name.     , wfName       :: QName                -- ^ With function name.     , wfParentType :: Type                 -- ^ Type of the parent function.+    , wfParentTel  :: Telescope            -- ^ Context of the parent patterns.     , wfBeforeTel  :: Telescope            -- ^ Types of arguments to the with function before the with expressions (needed vars).     , wfAfterTel   :: Telescope            -- ^ Types of arguments to the with function after the with expressions (unneeded vars).     , wfExprs      :: [Term]               -- ^ With and rewrite expressions.@@ -368,7 +376,7 @@   -> A.SpineClause -- ^ Clause.   -> TCM Clause    -- ^ Type-checked clause. -checkClause t withSub c@(A.Clause (A.SpineLHS i x aps withPats) namedDots rhs0 wh catchall) = do+checkClause t withSub c@(A.Clause (A.SpineLHS i x aps withPats) namedDots strippedDots rhs0 wh catchall) = do     reportSDoc "tc.lhs.top" 30 $ text "Checking clause" $$ prettyA c     unless (null withPats) $       typeError $ UnexpectedWithPatterns withPats@@ -379,7 +387,7 @@         text "namedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.NamedDot x v a <- namedDots ]       -- Not really an as-pattern, but this does the right thing.       bindAsPatterns [ AsB x v a | A.NamedDot x v a <- namedDots ] $-        checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t withSub $ \ lhsResult@(LHSResult npars delta ps trhs patSubst asb) -> do+        checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t withSub strippedDots $ \ lhsResult@(LHSResult npars delta ps trhs patSubst asb) -> do         -- Note that we might now be in irrelevant context,         -- in case checkLeftHandSide walked over an irrelevant projection pattern. @@ -404,7 +412,8 @@             updateRHS (A.WithRHS q es cs)       = A.WithRHS q es (map updateClause cs)             updateRHS (A.RewriteRHS qes rhs wh) = A.RewriteRHS qes (updateRHS rhs) wh -            updateClause (A.Clause f dots rhs wh ca) = A.Clause f (applySubst patSubst dots) (updateRHS rhs) wh ca+            updateClause (A.Clause f dots sdots rhs wh ca) =+              A.Clause f (applySubst patSubst dots) (applySubst patSubst sdots) (updateRHS rhs) wh ca          (body, with) <- bindAsPatterns asb $ checkWhere wh $ checkRHS i x aps t' lhsResult rhs @@ -413,29 +422,42 @@         -- to child).         inTopContext $ Bench.billTo [Bench.Typing, Bench.With] $ checkWithFunction cxtNames with -        reportSDoc "tc.lhs.top" 10 $ escapeContext (size delta) $ vcat+        reportSDoc "tc.lhs.top" 10 $ vcat           [ text "Clause before translation:"           , nest 2 $ vcat-            [ text "delta =" <+> prettyTCM delta-            , text "ps    =" <+> text (show ps)-            , text "body  =" <+> text (show body)+            [ text "delta =" <+> do escapeContext (size delta) $ prettyTCM delta+            , text "ps    =" <+> do P.fsep <$> prettyTCMPatterns ps             , text "body  =" <+> maybe (text "_|_") prettyTCM body             ]           ] +        reportSDoc "tc.lhs.top" 60 $ escapeContext (size delta) $ vcat+          [ text "Clause before translation (raw):"+          , nest 2 $ vcat+            [ text "ps    =" <+> text (show ps)+            , text "body  =" <+> text (show body)+            ]+          ]+         -- compute body modification for irrelevant definitions, see issue 610         rel <- asks envRelevance         let bodyMod body = case rel of               Irrelevant -> dontCare <$> body               _          -> body +        -- absurd clauses don't define computational behaviour, so it's fine to+        -- treat them as catchalls.+        let catchall' = catchall || isNothing body+         return $-          Clause { clauseRange     = getRange i+          Clause { clauseLHSRange  = getRange i+                 , clauseFullRange = getRange c                  , clauseTel       = killRange delta                  , namedClausePats = ps                  , clauseBody      = bodyMod body                  , clauseType      = Just trhs-                 , clauseCatchall  = catchall+                 , clauseCatchall  = catchall'+                 , clauseUnreachable = Nothing -- we don't know yet                  }  -- | Type check the @with@ and @rewrite@ lhss and/or the rhs.@@ -451,7 +473,7 @@                                               -- Note: the as-bindings are already bound (in checkClause) checkRHS i x aps t lhsResult@(LHSResult _ delta ps trhs _ _asb) rhs0 = handleRHS rhs0   where-  absurdPat = any (containsAbsurdPattern . namedArg) aps+  absurdPat = containsAbsurdPattern aps   handleRHS rhs =     case rhs of @@ -504,31 +526,37 @@          t' <- reduce =<< instantiateFull eqt         (eqt,rewriteType,rewriteFrom,rewriteTo) <- equalityView t' >>= \case-          eqt@(EqualityType s _eq _level dom a b) -> return (eqt, El s (unArg dom), unArg a, unArg b)+          eqt@(EqualityType _s _eq _params (Arg _ dom) a b) -> do+            s <- inferSort dom+            return (eqt, El s dom, unArg a, unArg b)+            -- Note: the sort _s of the equality need not be the sort of the type @dom@!           OtherType{} -> typeError . GenericDocError =<< do             text "Cannot rewrite by equation of type" <+> prettyTCM t'          -- Get the name of builtin REFL.          Con reflCon _ [] <- ignoreSharing <$> primRefl--        -- Andreas, 2014-05-17  Issue 1110:-        -- Rewriting with @refl@ has no effect, but gives an-        -- incomprehensible error message about the generated-        -- with clause. Thus, we rather do simply nothing if-        -- rewriting with @refl@ is attempted.--        let isReflProof = do-             v <- reduce proof-             case ignoreSharing v of-               Con c _ [] | c == reflCon -> return True-               _ -> return False+        reflInfo <- fmap (setOrigin Inserted) <$> getReflArgInfo reflCon -        ifM isReflProof recurse $ {- else -} do+        -- Andreas, 2017-01-11:+        -- The test for refl is obsolete after fixes of #520 and #1740.+        -- -- Andreas, 2014-05-17  Issue 1110:+        -- -- Rewriting with @refl@ has no effect, but gives an+        -- -- incomprehensible error message about the generated+        -- -- with clause. Thus, we rather do simply nothing if+        -- -- rewriting with @refl@ is attempted.+        -- let isReflProof = do+        --      v <- reduce proof+        --      case ignoreSharing v of+        --        Con c _ [] | c == reflCon -> return True+        --        _ -> return False+        -- ifM isReflProof recurse $ {- else -} do          -- Process 'rewrite' clause like a suitable 'with' clause. -        let reflPat  = A.ConP (ConPatInfo ConOCon patNoRange) (AmbQ [conName reflCon]) []+        -- The REFL constructor might have an argument+        let reflPat  = A.ConP (ConPatInfo ConOCon patNoRange) (AmbQ [conName reflCon]) $+              maybeToList $ fmap (\ ai -> Arg ai $ unnamed $ A.WildP patNoRange) reflInfo          -- Andreas, 2015-12-25  Issue #1740:         -- After the fix of #520, rewriting with a reflexive equation@@ -547,7 +575,7 @@               | otherwise = (A.RewriteRHS qes rhs' wh, [])             -- Andreas, 2014-03-05 kill range of copied patterns             -- since they really do not have a source location.-            cs       = [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats) [] rhs'' outerWhere False]+            cs       = [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats) [] [] rhs'' outerWhere False]          checkWithRHS x qname t lhsResult [withExpr] [withType] cs @@ -627,9 +655,9 @@         let n = size us             m = size delta             -- First the variables bound outside this definition-            (us0, us1') = genericSplitAt (n - m) us+            (us0, us1') = splitAt (n - m) us             -- Then permute the rest and grab those needed to for the with arguments-            (us1, us2)  = genericSplitAt (size delta1) $ permute perm' us1'+            (us1, us2)  = splitAt (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 withArgs ++ us2         -- Andreas, 2013-02-26 add with-name to signature for printing purposes@@ -654,11 +682,12 @@         reportSDoc "tc.with.top" 20 $           text "              body" <+> prettyTCM v -        return (Just v, WithFunction x aux t delta1 delta2 vs as t' ps npars perm' perm finalPerm cs)+        return (Just v, WithFunction x aux t delta delta1 delta2 vs as t' ps npars perm' perm finalPerm cs) +-- | Invoked in empty context. checkWithFunction :: [Name] -> WithFunctionProblem -> TCM () checkWithFunction _ NoWithFunction = return ()-checkWithFunction cxtNames (WithFunction f aux t delta1 delta2 vs as b qs npars perm' perm finalPerm cs) = do+checkWithFunction cxtNames (WithFunction f aux t delta delta1 delta2 vs as b qs npars perm' perm finalPerm cs) = do    let -- Δ₁ ws Δ₂ ⊢ withSub : Δ′    (where Δ′ is the context of the parent lhs)       withSub :: Substitution@@ -673,7 +702,7 @@       , text "as     =" <+> addContext delta1 (prettyTCM as)       , text "vs     =" <+> do addContext delta1 $ prettyTCM vs       , text "b      =" <+> do addContext delta1 $ addContext delta2 $ prettyTCM b-      , text "qs     =" <+> prettyList (map pretty qs)+      , text "qs     =" <+> do addContext delta $ prettyTCMPatternList qs       , text "perm'  =" <+> text (show perm')       , text "perm   =" <+> text (show perm)       , text "fperm  =" <+> text (show finalPerm)@@ -735,7 +764,7 @@    -- Construct the body for the with function   cs <- return $ map (A.lhsToSpine) cs-  cs <- buildWithFunction cxtNames f aux t qs npars withSub finalPerm (size delta1) n cs+  cs <- buildWithFunction cxtNames f aux t delta qs npars withSub finalPerm (size delta1) n cs   cs <- return $ map (A.spineToLhs) cs    -- Check the with function@@ -777,22 +806,6 @@       nest 4 $ text "actual tele:" <+> do prettyTCM =<< lookupSection m      withCurrentModule m cont----- | Check if a pattern contains an absurd pattern. For instance, @suc ()@-containsAbsurdPattern :: A.Pattern -> Bool-containsAbsurdPattern p = case p of-    A.AbsurdP _   -> True-    A.VarP _      -> False-    A.WildP _     -> False-    A.DotP _ _ _  -> False-    A.LitP _      -> False-    A.AsP _ _ p   -> containsAbsurdPattern p-    A.ConP _ _ ps -> any (containsAbsurdPattern . namedArg) ps-    A.RecP _ fs   -> any (containsAbsurdPattern . (^. exprFieldA)) fs-    A.ProjP{}     -> False-    A.DefP _ _ ps -> any (containsAbsurdPattern . namedArg) ps-    A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- False  -- | Set the current clause number. atClause :: QName -> Int -> A.RHS -> TCM a -> TCM a
src/full/Agda/TypeChecking/Rules/Display.hs view
@@ -3,7 +3,7 @@  import Control.Applicative import Data.Maybe-import Data.List+import qualified Data.List as List  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Views@@ -35,8 +35,8 @@   patternToTerm (namedArg p) $ \n v ->   patternsToTerms EmptyTel ps     $ \m vs -> ret (n + m) (inheritHiding p v : vs) patternsToTerms (ExtendTel a tel) (p : ps) ret = do-  let isMatch = getHiding p == getHiding a &&-                (notHidden p || isNothing (nameOf (unArg p)) ||+  let isMatch = sameHiding p a &&+                (visible p || isNothing (nameOf (unArg p)) ||                  Just (absName tel) == (rangedThing <$> nameOf (unArg p)))   case isMatch of     True ->@@ -67,11 +67,11 @@   case p of     A.VarP x               -> bindVar x $ ret 1 (Var 0 [])     A.ConP _ (AmbQ [c]) ps -> pappToTerm c (Con (ConHead c Inductive []) ConOCon) ps ret-    A.ConP _ (AmbQ cs) _   -> genericError $ "Ambiguous constructor: " ++ intercalate ", " (map show cs)+    A.ConP _ (AmbQ cs) _   -> genericError $ "Ambiguous constructor: " ++ List.intercalate ", " (map show cs)     A.ProjP _ _ (AmbQ [d]) -> ret 0 (Def d [])-    A.ProjP _ _ (AmbQ ds)    -> genericError $ "Ambiguous projection: " ++ intercalate ", " (map show ds)+    A.ProjP _ _ (AmbQ ds)    -> genericError $ "Ambiguous projection: " ++ List.intercalate ", " (map show ds)     A.DefP _ (AmbQ [f]) ps -> pappToTerm f (Def f . map Apply) ps ret-    A.DefP _ (AmbQ ds) _   -> genericError $ "Ambiguous DefP: " ++ intercalate ", " (map show ds)+    A.DefP _ (AmbQ ds) _   -> genericError $ "Ambiguous DefP: " ++ List.intercalate ", " (map show ds)     A.LitP l               -> ret 0 (Lit l)     A.WildP _              -> bindWild $ ret 1 (Var 0 [])     _ -> do
src/full/Agda/TypeChecking/Rules/LHS.hs view
@@ -29,7 +29,7 @@ import Agda.Syntax.Internal.Pattern import Agda.Syntax.Abstract (IsProjP(..)) import qualified Agda.Syntax.Abstract as A-import Agda.Syntax.Abstract.Views (asView)+import Agda.Syntax.Abstract.Views (asView, deepUnscope) import Agda.Syntax.Common as Common import Agda.Syntax.Info as A import Agda.Syntax.Position@@ -69,6 +69,7 @@ import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size  #include "undefined.h"@@ -79,7 +80,7 @@ flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars flexiblePatterns nps = do   forMaybeM (zip (downFrom $ length nps) nps) $ \ (i, Arg ai p) -> do-    runMaybeT $ (\ f -> FlexibleVar (getHiding ai) f (Just i) i) <$> maybeFlexiblePattern p+    runMaybeT $ (\ f -> FlexibleVar (getHiding ai) (getOrigin ai) f (Just i) i) <$> maybeFlexiblePattern p  -- | A pattern is flexible if it is dotted or implicit, or a record pattern --   with only flexible subpatterns.@@ -87,18 +88,28 @@   maybeFlexiblePattern :: a -> MaybeT TCM FlexibleVarKind    isFlexiblePattern :: a -> TCM Bool-  isFlexiblePattern p = isJust <$> runMaybeT (maybeFlexiblePattern p)+  isFlexiblePattern p =+    maybe False notOtherFlex <$> runMaybeT (maybeFlexiblePattern p)+    where+    notOtherFlex = \case+      RecordFlex fls -> all notOtherFlex fls+      ImplicitFlex   -> True+      DotFlex        -> True+      OtherFlex      -> False  instance IsFlexiblePattern A.Pattern where-  maybeFlexiblePattern p =+  maybeFlexiblePattern p = do+    reportSDoc "tc.lhs.flex" 30 $ text "maybeFlexiblePattern" <+> prettyA p+    reportSDoc "tc.lhs.flex" 60 $ text "maybeFlexiblePattern (raw) " <+> (text . show . deepUnscope) p     case p of       A.DotP{}  -> return DotFlex       A.VarP{}  -> return ImplicitFlex       A.WildP{} -> return ImplicitFlex       A.AsP _ _ p -> maybeFlexiblePattern p       A.ConP _ (A.AmbQ [c]) qs-        -> ifM (isNothing <$> isRecordConstructor c) mzero {-else-}+        -> ifM (isNothing <$> isRecordConstructor c) (return OtherFlex) {-else-}              (maybeFlexiblePattern qs)+      A.LitP{}  -> return OtherFlex       _ -> mzero  instance IsFlexiblePattern (I.Pattern' a) where@@ -110,6 +121,7 @@         | Just _            <- conPRecord i -> maybeFlexiblePattern ps         | otherwise -> mzero       I.VarP{}  -> mzero+      I.AbsurdP{} -> mzero       I.LitP{}  -> mzero       I.ProjP{} -> mzero @@ -137,7 +149,7 @@   reportSDoc "tc.lhs.top" 20 $ text "updateInPatterns" <+> nest 2 (vcat     [ text "as      =" <+> prettyList (map prettyTCM as)     , text "ps      =" <+> prettyList (map prettyA ps)-    , text "qs      =" <+> prettyList (map (text . show) qs)+    , text "qs      =" <+> prettyList (map pretty qs)     ])   first (map snd . IntMap.toDescList) <$> updates as ps qs   where@@ -155,28 +167,34 @@         A.DotP _ _ e -> return (IntMap.empty, [DPI Nothing  (Just e) u a])         A.WildP _  -> return (IntMap.empty, [DPI Nothing  Nothing  u a])         A.VarP x   -> return (IntMap.empty, [DPI (Just x) Nothing  u a])-        A.ConP _ (A.AmbQ [c]) qs -> do-          Def r es  <- ignoreSharing <$> reduce (unEl $ unDom a)-          let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-          (ftel, us) <- etaExpandRecord r vs u-          qs <- insertImplicitPatterns ExpandLast qs ftel-          let instTel EmptyTel _                   = []-              instTel (ExtendTel arg tel) (u : us) = arg : instTel (absApp tel u) us-              instTel ExtendTel{} []               = __IMPOSSIBLE__-              bs0 = instTel ftel (map unArg us)-              -- Andreas, 2012-09-19 propagate relevance info to dot patterns-              bs  = map (mapRelevance (composeRelevance (getRelevance a))) bs0-          updates bs qs (map (DotP . unArg) us `withArgsFrom` teleArgNames ftel)+        p@(A.ConP _ (A.AmbQ [c]) qs) -> ifM (isNothing <$> isRecordConstructor c)+          (return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a]))+          (do+            Def r es  <- ignoreSharing <$> reduce (unEl $ unDom a)+            let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+            (ftel, us) <- etaExpandRecord r vs u++            qs <- insertImplicitPatterns ExpandLast qs ftel+            reportSDoc "tc.lhs.imp" 20 $+              text "insertImplicitPatternsT returned" <+> fsep (map prettyA qs)++            let instTel EmptyTel _                   = []+                instTel (ExtendTel arg tel) (u : us) = arg : instTel (absApp tel u) us+                instTel ExtendTel{} []               = __IMPOSSIBLE__+                bs0 = instTel ftel (map unArg us)+                -- Andreas, 2012-09-19 propagate relevance info to dot patterns+                bs  = map (mapRelevance (composeRelevance (getRelevance a))) bs0+            updates bs qs (map (DotP . unArg) us `withArgsFrom` teleArgNames ftel))+        p@A.ConP{} -> return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a])+        p@A.LitP{} -> return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a])         A.AsP         _ _ _ -> __IMPOSSIBLE__-        A.ConP        _ _ _ -> __IMPOSSIBLE__         A.RecP        _ _   -> __IMPOSSIBLE__         A.ProjP       _ _ _ -> __IMPOSSIBLE__         A.DefP        _ _ _ -> __IMPOSSIBLE__         A.AbsurdP     _     -> __IMPOSSIBLE__-        A.LitP        _     -> __IMPOSSIBLE__         A.PatternSynP _ _ _ -> __IMPOSSIBLE__       -- Case: the unifier eta-expanded the variable-      ConP c cpi qs -> do+      ConP _c _cpi qs -> do         Def r es <- ignoreSharing <$> reduce (unEl $ unDom a)         def      <- theDef <$> getConstInfo r         let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims es@@ -194,15 +212,16 @@                   _            -> []         second (dpi++) <$>           updates as (projectInPat p fs) (map (fmap namedThing) qs)+      AbsurdP{}  -> __IMPOSSIBLE__       LitP _     -> __IMPOSSIBLE__       ProjP{}    -> __IMPOSSIBLE__      projectInPat :: NamedArg A.Pattern -> [Arg QName] -> [NamedArg A.Pattern]     projectInPat p fs = case namedThing (unArg p) of-      A.VarP x            -> map (makeDotField (PatRange $ getRange x)) fs-      A.ConP cpi _ nps    -> nps+      A.VarP x            -> map (makeWildField (PatRange $ getRange x)) fs+      A.ConP _ _ nps      -> nps       A.WildP pi          -> map (makeWildField pi) fs-      A.DotP pi _ e       -> map (makeDotField pi) fs+      A.DotP pi o e       -> map (makeDotField pi o) fs       A.ProjP _ _ _       -> __IMPOSSIBLE__       A.DefP _ _ _        -> __IMPOSSIBLE__       A.AsP _ _ _         -> __IMPOSSIBLE__@@ -212,32 +231,41 @@       A.RecP _ _          -> __IMPOSSIBLE__       where         makeWildField pi (Arg fi f) = Arg fi $ unnamed $ A.WildP pi-        makeDotField pi (Arg fi f) = Arg fi $ unnamed $-          A.DotP pi Inserted $ A.Underscore underscoreInfo+        makeDotField pi o (Arg fi f) = Arg fi $ unnamed $+          A.DotP pi o $ A.Underscore underscoreInfo           where             underscoreInfo = A.MetaInfo               { A.metaRange          = getRange pi               , A.metaScope          = emptyScopeInfo               , A.metaNumber         = Nothing-              , A.metaNameSuggestion = show $ A.nameConcrete $ qnameName f+              , A.metaNameSuggestion = prettyShow $ qnameName f               }  --- | Check if a problem is solved. That is, if the patterns are all variables.+-- | Check if a problem is solved.+--   That is, if the patterns are all variables,+--   and there is no 'problemRest'. isSolvedProblem :: Problem -> Bool isSolvedProblem problem = null (restPats $ problemRest problem) &&-    all (isSolved . snd . asView . namedArg) (problemInPat problem)+  problemAllVariables problem++-- | Check if a problem consists only of variable patterns.+--   (Includes the 'problemRest').+problemAllVariables :: Problem -> Bool+problemAllVariables problem =+    all (isSolved . snd . asView . namedArg) $+      restPats (problemRest problem) ++ problemInPat problem   where     -- need further splitting:     isSolved A.ConP{}        = False     isSolved A.LitP{}        = False     isSolved A.ProjP{}       = False     isSolved A.RecP{}        = False  -- record pattern+    isSolved A.AbsurdP{}     = False     -- solved:     isSolved A.VarP{}        = True     isSolved A.WildP{}       = True     isSolved A.DotP{}        = True-    isSolved A.AbsurdP{}     = True     -- impossible:     isSolved A.DefP{}        = __IMPOSSIBLE__     isSolved A.AsP{}         = __IMPOSSIBLE__  -- removed by asView@@ -268,15 +296,15 @@   noShadowing (A.ProjP     {}) t = return ()  -- projection pattern   noShadowing (A.DefP      {}) t = __IMPOSSIBLE__   noShadowing (A.DotP      {}) t = return ()-  noShadowing (A.AsP       {}) t = __IMPOSSIBLE__+  noShadowing (A.AsP       {}) t = __IMPOSSIBLE__ -- removed by asView   noShadowing (A.LitP      {}) t = __IMPOSSIBLE__   noShadowing (A.PatternSynP {}) t = __IMPOSSIBLE__   noShadowing (A.VarP x)       t = do     reportSDoc "tc.lhs.shadow" 30 $ vcat-      [ text $ "checking whether pattern variable " ++ show x ++ " shadows a constructor"+      [ text $ "checking whether pattern variable " ++ prettyShow x ++ " shadows a constructor"       , nest 2 $ text "type of variable =" <+> prettyTCM t       ]-    reportSLn "tc.lhs.shadow" 70 $ "  t = " ++ show t+    reportSDoc "tc.lhs.shadow" 70 $ nest 2 $ text "t =" <+> pretty t     t <- reduce t     case t of       Def t _ -> do@@ -327,11 +355,11 @@         ]   applyRelevanceToContext (argInfoRelevance info) $ do     u <- checkExpr e a-    reportSDoc "tc.lhs.dot" 30 $+    reportSDoc "tc.lhs.dot" 50 $       sep [ text "equalTerm"-          , nest 2 $ text $ show a-          , nest 2 $ text $ show u-          , nest 2 $ text $ show v+          , nest 2 $ pretty a+          , nest 2 $ pretty u+          , nest 2 $ pretty v           ]     -- Should be ok to do noConstraints here     noConstraints $ equalTerm a u v@@ -397,12 +425,13 @@       A.VarP _     -> return idv       A.WildP _    -> return idv       A.AbsurdP _  -> return idv+      -- Andreas, 2017-01-18, issue #2413, AsP is not __IMPOSSIBLE__+      A.AsP _ _ p0 -> checkUserDot (setNamedArg p p0) v a idv       A.ConP _ _ _ -> __IMPOSSIBLE__       A.LitP _     -> __IMPOSSIBLE__       A.ProjP _ _ _-> __IMPOSSIBLE__       A.DefP _ _ _ -> __IMPOSSIBLE__       A.RecP _ _   -> __IMPOSSIBLE__-      A.AsP  _ _ _ -> __IMPOSSIBLE__       A.PatternSynP _ _ _ -> __IMPOSSIBLE__      gatherImplicitDotVars :: DotPatternInst -> TCM [(Int,Projectns)]@@ -431,11 +460,11 @@      reportSDoc "tc.lhs.dot" 40 $ vcat        [ text "undotImplicitVar"        , nest 2 $ vcat-         [ text $ "i  =  " ++ show i-         , text   "fs = " <+> sep (map (prettyTCM . snd) fs)-         , text   "a  = " <+> prettyTCM a-         , text $ "raw=  "  ++ show a-         , text $ "idv=  "  ++ show idv+         [ text "i  =" <+> pshow i+         , text "fs =" <+> sep (map (prettyTCM . snd) fs)+         , text "a  =" <+> prettyTCM a+         , text "raw=" <+> pretty a+         , text "idv=" <+> pshow idv          ]        ]      case lookupImplicitDotVar (i,fs) idv of@@ -473,9 +502,9 @@   __IMPOSSIBLE__ bindLHSVars (_ : _)   EmptyTel         _   = __IMPOSSIBLE__ bindLHSVars []        EmptyTel         ret = ret-bindLHSVars (p : ps) (ExtendTel a tel) ret = do+bindLHSVars (p : ps) tel0@(ExtendTel a tel) ret = do   -- see test/Fail/WronHidingInLHS:-  unless (getHiding p == getHiding a) $ typeError WrongHidingInLHS+  unless (sameHiding p a) $ typeError WrongHidingInLHS    case namedArg p of     A.VarP x      -> addContext (x, a) $ bindLHSVars ps (absBody tel) ret@@ -484,16 +513,14 @@                  -- introduces unwanted underscores in error messages                  -- (Andreas, 2015-05-28)     A.DotP _ _ _  -> bindDummy (absName tel)-    A.AbsurdP pi  -> do-      -- Andreas, 2012-03-15: allow postponement of emptyness check-      isEmptyType (getRange pi) $ unDom a-      -- OLD CODE: isReallyEmptyType $ unArg a-      bindDummy (absName tel)+    A.AbsurdP pi  -> __IMPOSSIBLE__+    -- Andreas, 2017-01-18, issue #2413+    -- A.AsP is not __IMPOSSIBLE__+    A.AsP _ _ p0    -> bindLHSVars (setNamedArg p p0 : ps) tel0 ret     A.ConP{}        -> __IMPOSSIBLE__     A.RecP{}        -> __IMPOSSIBLE__     A.ProjP{}       -> __IMPOSSIBLE__     A.DefP{}        -> __IMPOSSIBLE__-    A.AsP{}         -> __IMPOSSIBLE__     A.LitP{}        -> __IMPOSSIBLE__     A.PatternSynP{} -> __IMPOSSIBLE__     where@@ -560,16 +587,18 @@      -- ^ The expected type @a = Γ → b@.   -> Maybe Substitution      -- ^ Module parameter substitution from with-abstraction.+  -> [A.StrippedDotPattern]+     -- ^ Dot patterns that have been stripped away by with-desugaring.   -> (LHSResult -> TCM a)      -- ^ Continuation.   -> TCM a-checkLeftHandSide c f ps a withSub' = Bench.billToCPS [Bench.Typing, Bench.CheckLHS] $ \ ret -> do+checkLeftHandSide c f ps a withSub' strippedDots = Bench.billToCPS [Bench.Typing, Bench.CheckLHS] $ \ ret -> do    -- To allow module parameters to be refined by matching, we're adding the   -- context arguments as wildcard patterns and extending the type with the   -- context telescope.   cxt <- reverse <$> getContext-  let tel = telFromList' show cxt+  let tel = telFromList' prettyShow cxt       cps = [ unnamed . A.VarP . fst <$> setOrigin Inserted (argFromDom d)             | d <- cxt ]   problem0 <- problemFromPats (cps ++ ps) (telePi tel a)@@ -593,8 +622,8 @@    -- doing the splits:   inTopContext $ do-    LHSState problem@(Problem pxs qs delta rest) dpi-      <- checkLHS f $ LHSState problem0 []+    LHSState problem@(Problem pxs qs delta rest) dpi sbe+      <- checkLHS f $ LHSState problem0 [] []      unless (null $ restPats rest) $ typeError $ TooManyArgumentsInLHS a @@ -627,9 +656,9 @@       reportSDoc "tc.lhs.top" 10 $ text "asb' = " <+> (brackets $ fsep $ punctuate comma $ map prettyTCM asb')        reportSDoc "tc.lhs.top" 10 $ text "bound pattern variables"-      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "context = " <+> ((text . show) =<< getContext)+      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "context = " <+> (pretty =<< getContextTelescope)       reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type  = " <+> prettyTCM b'-      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "type  = " <+> text (show b')+      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "type  = " <+> pretty b'        let notProj ProjP{} = False           notProj _       = True@@ -643,12 +672,12 @@           withSub = fromMaybe (wkS (numPats - length cxt) idS) withSub'           -- At this point we need to update the module parameters for all           -- parent modules.-          patSub   = (map (patternToTerm . namedArg) $ reverse $ take numPats qs) ++# EmptyS+          patSub   = (map (patternToTerm . namedArg) $ reverse $ take numPats qs) ++# (EmptyS __IMPOSSIBLE__)           paramSub = composeS patSub withSub           lhsResult = LHSResult (length cxt) delta qs b' patSub asb'-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "patSub   = " <+> text (show patSub)-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "withSub  = " <+> text (show withSub)-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "paramSub = " <+> text (show paramSub)+      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "patSub   = " <+> pretty patSub+      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "withSub  = " <+> pretty withSub+      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "paramSub = " <+> pretty paramSub        let newLets = [ AsB x (applySubst paramSub v) (applySubst paramSub $ unDom a) | (x, (v, a)) <- oldLets ]       reportSDoc "tc.lhs.top" 50 $ text "old let-bindings:" <+> text (show oldLets)@@ -658,12 +687,16 @@         applyRelevanceToContext (getRelevance b') $ updateModuleParameters paramSub $ do         bindAsPatterns asb' $ do -          rebindLocalRewriteRules-           -- Check dot patterns           mapM_ checkDotPattern dpi+          mapM_ (uncurry isEmptyType) sbe           checkLeftoverDotPatterns pxs (downFrom $ size delta) (flattenTel delta) dpi +          -- Type check dot patterns that have been thrown away by+          -- with-desugaring.+          mapM_ checkStrippedDotPattern $ applySubst paramSub strippedDots++         -- Issue2303: don't bind asb' for the continuation (return in lhsResult instead)         ret lhsResult @@ -672,7 +705,7 @@   :: Maybe QName       -- ^ The name of the definition we are checking.   -> LHSState          -- ^ The current state.   -> TCM LHSState      -- ^ The final state after all splitting is completed-checkLHS f st@(LHSState problem dpi) = do+checkLHS f st@(LHSState problem dpi sbe) = do    problem <- insertImplicitProblem problem   -- Note: inserting implicits no longer preserve solvedness,@@ -680,17 +713,18 @@   if isSolvedProblem problem then return $ st { lhsProblem = problem } else do      unlessM (optPatternMatching <$> gets getPragmaOptions) $-      typeError $ GenericError $ "Pattern matching is disabled"+      unless (problemAllVariables problem) $+        typeError $ GenericError $ "Pattern matching is disabled"      foldListT trySplit nothingToSplit $ splitProblem f problem   where-+    nothingToSplit :: TCM LHSState     nothingToSplit = do       reportSLn "tc.lhs.split" 50 $ "checkLHS: nothing to split in problem " ++ show problem       nothingToSplitError problem      -- Split problem rest (projection pattern, does not fail as there is no call to unifier)-+    trySplit :: SplitProblem -> TCM LHSState -> TCM LHSState     trySplit (SplitRest projPat o projType) _ = do        -- Compute the new problem@@ -701,7 +735,7 @@           ip'      = ip ++ [fmap (Named Nothing . ProjP o) projPat]           problem' = Problem ps' ip' delta rest       -- Jump the trampolin-      st' <- updateProblemRest (LHSState problem' dpi)+      st' <- updateProblemRest (LHSState problem' dpi sbe)       -- If the field is irrelevant, we need to continue in irr. cxt.       -- (see Issue 939).       applyRelevanceToContext (getRelevance projPat) $ do@@ -721,6 +755,7 @@           --       ++ [ raise (size delta2) $ Lit lit ]           --       ++ [ var i | i <- [size delta2 ..] ]           dpi'     = applyPatSubst rho dpi+          sbe'     = map (second $ applyPatSubst rho) sbe           ip'      = applySubst rho ip           rest'    = applyPatSubst rho (problemRest problem) @@ -728,47 +763,42 @@       let ps'      = problemInPat p0 ++ problemInPat (absBody p1)           delta'   = abstract delta1 delta2           problem' = Problem ps' ip' delta' rest'-      st' <- updateProblemRest (LHSState problem' dpi')+      st' <- updateProblemRest (LHSState problem' dpi' sbe')       checkLHS f st' -    -- Split on constructor pattern (unifier might fail)--    trySplit (Split p0 focus@(Arg info Focus{}) p1) tryNextSplit = do-      res <- trySplitConstructor p0 focus p1-      case res of-        -- Success.  Continue checking LHS.-        Unifies st'    -> checkLHS f st'-        -- Mismatch.  Report and abort.-        NoUnify  tcerr -> throwError tcerr-        -- Unclear situation.  Try next split.-        -- If no split works, give error from first split.-        -- This is conservative, but might not be the best behavior.-        -- It might be better to collect all the errors and print all of them.-        DontKnow tcerr -> tryNextSplit `catchError` \ _ -> throwError tcerr--    whenUnifies-      :: UnificationResult' a-      -> (a -> TCM (UnificationResult' b))-      -> TCM (UnificationResult' b)-    whenUnifies res cont = do-      case res of-        Unifies a      -> cont a-        NoUnify  tcerr -> return $ NoUnify  tcerr-        DontKnow tcerr -> return $ DontKnow tcerr+    -- Split on absurd pattern (adding type to list of types that should be empty)+    trySplit (Split p0 (Arg info (AbsurdFocus pi i a)) p1) _ = do+      let tel = problemTel problem+      reportSDoc "tc.lhs.split.absurd" 10 $ sep+        [ text "splitting on absurd pattern"+        , nest 2 $ text "tel  =" <+> prettyTCM tel+        , nest 2 $ text "var  =" <+> addContext tel (prettyTCM $ var i)+        , nest 2 $ text "type =" <+> addContext tel (prettyTCM a)+        ]+      let rho = liftS i $ consS (AbsurdP $ VarP $ DBPatVar "()" 0) $ raiseS 1+      checkLHS f $ st+            { lhsProblem = problem+              { problemInPat  = (problemInPat p0) +++                                [Arg info $ unnamed $ A.WildP pi] +++                                problemInPat (absBody p1)+              , problemOutPat = applySubst rho $ problemOutPat problem+              }+            , lhsShouldBeEmptyTypes = (getRange pi , a) : lhsShouldBeEmptyTypes st+            } -    trySplitConstructor p0 (Arg info LitFocus{}) p1 = __IMPOSSIBLE__-    trySplitConstructor p0 (Arg info-             (Focus { focusCon      = c-                    , focusPatOrigin= porigin-                    , focusConArgs  = qs-                    , focusRange    = r-                    , focusOutPat   = ip-                    , focusDatatype = d-                    , focusParams   = vs-                    , focusIndices  = ws-                    , focusType     = a-                    }-             )) p1 = do+    -- Split on constructor pattern (unifier might fail)+    trySplit (Split p0 (Arg info+               (Focus { focusCon      = c+                      , focusPatOrigin= porigin+                      , focusConArgs  = qs+                      , focusRange    = r+                      , focusOutPat   = ip+                      , focusDatatype = d+                      , focusParams   = vs+                      , focusIndices  = ws+                      , focusType     = a+                      }+               )) p1) tryNextSplit = do       traceCall (CheckPattern (A.ConP (ConPatInfo porigin $ PatRange r) (A.AmbQ [c]) qs)                                        (problemTel p0)                                        (El Prop $ Def d $ map Apply $ vs ++ ws)) $ do@@ -788,12 +818,15 @@           , nest 2 $ vcat             [ text "delta1 = " <+> prettyTCM delta1             , text "typeOfSplitVar =" <+> addContext delta1 (prettyTCM typeOfSplitVar)-            , text "focusOutPat =" <+> (text . show) ip+            , text "focusOutPat =" <+> pretty ip             , text "delta2 = " <+> addContext delta1 (addContext ("x",domFromArg typeOfSplitVar) (prettyTCM delta2))             ]           ] -        c <- (`withRangeOf` c) <$> getConForm c+        c <- either+               (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c))+               (return . (`withRangeOf` c))+               =<< getConForm c         ca <- defType <$> getConInfo c          reportSDoc "tc.lhs.split" 20 $ nest 2 $ vcat@@ -824,6 +857,8 @@          -- Insert implicit patterns         qs' <- insertImplicitPatterns ExpandLast qs gamma'+        reportSDoc "tc.lhs.imp" 20 $+          text "insertImplicitPatternsT returned" <+> fsep (map prettyA qs')          unless ((size qs' :: Int) == size gamma') $           typeError $ WrongNumberOfConstructorArguments (conName c) (size gamma') (size qs')@@ -832,13 +867,18 @@          -- Get the type of the datatype.         da <- (`piApply` vs) . defType <$> getConstInfo d+        reportSDoc "tc.lhs.split" 30 $ text "  da = " <+> prettyTCM da          -- Compute the flexible variables         flex <- flexiblePatterns (problemInPat p0 ++ qs')+        reportSDoc "tc.lhs.split" 30 $ text "computed flexible variables"          -- Compute the constructor indices by dropping the parameters         let us' = drop (size vs) us +        -- Raise given indices over constructor telescope+        let ws' = raise (size gamma) ws+         reportSDoc "tc.lhs.top" 15 $ addContext delta1 $           sep [ text "preparing to unify"               , nest 2 $ vcat@@ -884,9 +924,23 @@                  flex                  (raise (size gamma) da)                  us'-                 (raise (size gamma) ws)-        whenUnifies res $ \ (delta1',rho0,es) -> do+                 ws'+        case res of +         -- Mismatch.  Report and abort.+         NoUnify neg -> typeError $ ImpossibleConstructor (conName c) neg++         -- Unclear situation.  Try next split.+         -- If no split works, give error from first split.+         -- This is conservative, but might not be the best behavior.+         -- It might be better to collect all the errors and print all of them.+         DontKnow errs -> tryNextSplit+           `catchError` \ _ -> typeError $ SplitError $+             UnificationStuck (conName c) (delta1 `abstract` gamma) us' ws' errs++         -- Success.+         Unifies (delta1',rho0,es) -> do+           reportSDoc "tc.lhs.top" 15 $ text "unification successful"           reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat             [ text "delta1' =" <+> prettyTCM delta1'@@ -910,7 +964,7 @@                             newPats            reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat-            [ text "p0'     =" <+> text (show p0')+            [ text "p0'     =" <+> text (show $ deepUnscope p0')             , text "newDpi  =" <+> brackets (fsep $ punctuate comma $ map prettyTCM newDpi)             ] @@ -944,9 +998,9 @@             ]            reportSDoc "tc.lhs.top" 70 $ addContext delta1' $ nest 2 $ vcat-            [ text "crho2   =" <+> text (show crho2)-            , text "rho3    =" <+> text (show rho3)-            , text "delta2' =" <+> text (show delta2')+            [ text "crho2   =" <+> pretty crho2+            , text "rho3    =" <+> pretty rho3+            , text "delta2' =" <+> pretty delta2'             ]            reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat@@ -964,10 +1018,12 @@            -- The final dpis are the new ones plus the old ones substituted by ρ           let dpi' = applyPatSubst rho dpi ++ raise (size delta2') newDpi+              sbe' = map (second $ applyPatSubst rho) sbe            reportSDoc "tc.lhs.top" 15 $ addContext delta' $             nest 2 $ vcat               [ text "dpi'    =" <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')+              , text "sbe'    =" <+> brackets (fsep $ punctuate comma $ map prettyTCM sbe')               ]            -- Apply the substitution@@ -976,25 +1032,25 @@            reportSDoc "tc.lhs.top" 15 $ addContext delta' $             nest 2 $ vcat-              [ text "ip' =" <+> text (show ip) ]+              [ text "ip' =" <+> pretty ip ]            -- Construct the new problem           let problem' = Problem ps' ip' delta' rest'            -- if rest type reduces,           -- extend the split problem by previously not considered patterns-          st'@(LHSState problem'@(Problem ps' ip' delta' rest') dpi')-            <- updateProblemRest $ LHSState problem' dpi'+          st'@(LHSState problem'@(Problem ps' ip' delta' rest') dpi' sbe')+            <- updateProblemRest $ LHSState problem' dpi' sbe'            reportSDoc "tc.lhs.top" 12 $ sep             [ text "new problem from rest"             , nest 2 $ vcat               [ text "ps'     =" <+> fsep (map prettyA ps')               , text "delta'  =" <+> prettyTCM delta'-              , text "ip'     =" <+> text (show ip')+              , text "ip'     =" <+> pretty ip'               ]             ]-          return $ Unifies st'+          checkLHS f st'   -- | Ensures that we are not performing pattern matching on codata.@@ -1004,6 +1060,7 @@   where   check (VarP {})   = return ()   check (DotP {})   = return ()+  check (AbsurdP{}) = return ()   check (ProjP{})   = return ()   check (LitP {})   = return ()  -- Literals are assumed not to be coinductive.   check (ConP con _ ps) = do@@ -1014,3 +1071,15 @@       Just False -> mapM_ (check . namedArg) ps       Just True  -> typeError $         GenericError "Pattern matching on coinductive types is not allowed"++-- | Type check dot pattern stripped from a with function.+checkStrippedDotPattern :: A.StrippedDotPattern -> TCM ()+checkStrippedDotPattern (A.StrippedDot e v a) = do+  reportSDoc "tc.with.dot" 30 $ vcat+    [ text "Checking stripped dot pattern"+    , nest 2 $ vcat [ text "e =" <+> prettyTCM e+                    , text "v =" <+> prettyTCM v+                    , text "a =" <+> prettyTCM a+                    , text "Γ =" <+> (inTopContext . prettyTCM =<< getContextTelescope) ] ]+  u <- checkExpr e a+  equalTerm a u v
src/full/Agda/TypeChecking/Rules/LHS/AsPatterns.hs view
@@ -8,9 +8,10 @@ import qualified Data.Foldable as Fold  import Agda.Syntax.Common+import Agda.Syntax.Concrete () import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern-import Agda.Syntax.Concrete ()+import Agda.Syntax.Abstract.Pattern ( containsAsPattern ) import qualified Agda.Syntax.Abstract as A  import Agda.TypeChecking.Monad@@ -23,6 +24,7 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce +import Agda.Utils.Functor import Agda.Utils.Maybe import Agda.Utils.Size import Agda.Utils.Impossible@@ -31,7 +33,7 @@ recoverAsPatterns :: Telescope -> Type -> Term -> [NamedArg A.Pattern] -> [NamedArg DeBruijnPattern] -> TCM [AsBinding] recoverAsPatterns delta a self ps qs = do   let es = patternsToElims qs-  as <- smashType (raise (size delta) a) self es+  as <- typeElims (raise (size delta) a) self es   ps <- insertImplicitPatternsT DontExpandLast ps a   reportSDoc "tc.lhs.as" 30 $ vcat     [ text "recovering as patterns"@@ -41,43 +43,20 @@     ]   execWriterT $ asPatterns as ps es --- ProjT stores the type of the projected field.-data ElimType = ProjT Type | ArgT Type--instance PrettyTCM ElimType where-  prettyTCM (ProjT a) = text "." <> prettyTCM a-  prettyTCM (ArgT a)  = prettyTCM a--smashType :: Type -> Term -> Elims -> TCM [ElimType]-smashType a _ [] = return []-smashType a self (e : es) =-  case e of-    Apply v -> do-      Pi a b <- ignoreSharing <$> reduce (unEl a)-      (ArgT (unDom a) :) <$> smashType (absApp b $ unArg v) (self `applyE` [e]) es-    Proj o f -> do-      a <- reduce a-      Just (_, self, a) <- projectTyped self a o f-      (ProjT a :) <$> smashType a self es--smashTel :: Telescope -> [Term] -> [Type]-smashTel _ []                       = []-smashTel (ExtendTel a tel) (v : vs) = unDom a : smashTel (absApp tel v) vs-smashTel EmptyTel{} (_:_)           = __IMPOSSIBLE__- asPatterns :: [ElimType] -> [NamedArg A.Pattern] -> [Elim] -> WriterT [AsBinding] TCM () asPatterns _ [] _ = return ()-asPatterns (ProjT a : as) (p : ps) (Proj{} : vs) = do+asPatterns (ProjT _ a : as) (p : ps) (Proj{} : vs) = do   unless (isJust $ A.maybePostfixProjP p) __IMPOSSIBLE__  -- sanity check   ps <- lift $ insertImplicitPatternsT DontExpandLast ps a   asPatterns as ps vs-asPatterns (ArgT a : as) (p : ps) (Apply v : vs)-  | noAsPatterns (namedArg p) = asPatterns as ps vs-  | otherwise =+asPatterns (ArgT dom : as) (p : ps) (Apply v : vs)+  | not $ containsAsPattern p = asPatterns as ps vs+  | otherwise = do+    let a = unDom dom     case namedArg p of       A.AsP _ x p' -> do         tell [AsB x (unArg v) a]-        asPatterns (ArgT a : as) (fmap (p' <$) p : ps) (Apply v : vs)+        asPatterns (ArgT dom : as) (fmap (p' <$) p : ps) (Apply v : vs)       A.ConP _ _ ps' -> do         (_, _, tel, as', args) <- lift $ conPattern a (unArg v)         ps' <- lift $ insertImplicitPatterns ExpandLast ps' tel@@ -91,27 +70,21 @@       _ -> __IMPOSSIBLE__ asPatterns _ _ _ = __IMPOSSIBLE__ -conPattern :: Type -> Term -> TCM (QName, ConHead, Telescope, [Type], Args)+-- | Given a fully applied constructor term and its type,+--   deconstruct it and return, amongst others, the types of its arguments.+conPattern+  :: Type  -- ^ Type need not be reduced.+  -> Term  -- ^ Fully applied constructor.+  -> TCM (QName, ConHead, Telescope, [Dom Type], Args)+       -- ^ Data/record type name,+       --   constructor name,+       --   argument telescope,+       --   types of arguments.+       --   arguments. conPattern a (Con c ci args) = do-  Just ca <- getConType c =<< reduce a-  TelV tel (El _ (Def d _)) <- telView ca-  let as = smashTel tel (map unArg args)+  -- @getFullyAppliedConType@ works since @c@ is fully applied.+  ((d, _, _), ca) <- fromMaybe __IMPOSSIBLE__ <.> getFullyAppliedConType c =<< reduce a+  TelV tel _ <- telView ca+  let as = fromMaybe __IMPOSSIBLE__ $ typeArgsWithTel tel $ map unArg args   return (d, c, tel, as, args) conPattern _ _ = __IMPOSSIBLE__--noAsPatterns :: A.Pattern -> Bool-noAsPatterns p =-  case p of-    A.AsP{}         -> False-    A.ConP _ _ ps   -> noArgAsPats ps-    A.DefP _ _ ps   -> noArgAsPats ps-    A.RecP _ fs     -> all (Fold.all noAsPatterns) fs-    A.VarP{}        -> True-    A.ProjP{}       -> True-    A.WildP{}       -> True-    A.DotP{}        -> True-    A.AbsurdP{}     -> True-    A.LitP{}        -> True-    A.PatternSynP{} -> __IMPOSSIBLE__-  where-    noArgAsPats = all (noAsPatterns . namedArg)
src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs view
@@ -58,7 +58,7 @@ --   (record constructor applied to as many implicit patterns as there are fields). expandImplicitPattern' :: Type -> NamedArg A.Pattern -> TCM (Maybe (NamedArg A.Pattern)) expandImplicitPattern' a p-  | A.WildP{} <- namedArg p, getHiding p /= Instance = do+  | A.WildP{} <- namedArg p, not (isInstance p) = do      -- Eta expand implicit patterns of record type (issue 473),      -- but not instance arguments since then they won't be found      -- by the instance search
src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs view
@@ -32,8 +32,7 @@   reportSDoc "tc.lhs.inst" 10 $ vcat     [ text "instantiateTel "     , nest 2 $ text "s    =" <+> do-        addContext tel $-          fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s+        addContext tel $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s     , nest 2 $ text "tel  =" <+> prettyTCM tel --    , nest 2 $ text "tel  =" <+> text (show tel)     ]
src/full/Agda/TypeChecking/Rules/LHS/Problem.hs view
@@ -11,6 +11,7 @@ import Data.Traversable  import Agda.Syntax.Common+import Agda.Syntax.Info import Agda.Syntax.Literal import Agda.Syntax.Position import Agda.Syntax.Internal@@ -40,12 +41,14 @@       --   Saves the 'FlexibleVarKind' of its subpatterns.   | ImplicitFlex -- ^ From a hidden formal argument or underscore ('WildP').   | DotFlex      -- ^ From a dot pattern ('DotP').+  | OtherFlex    -- ^ From a non-record constructor or literal ('ConP' or 'LitP').   deriving (Eq, Show)  -- | Flexible variables are equipped with information where they come from, --   in order to make a choice which one to assign when two flexibles are unified. data FlexibleVar a = FlexibleVar   { flexHiding :: Hiding+  , flexOrigin :: Origin   , flexKind   :: FlexibleVarKind   , flexPos    :: Maybe Int   , flexVar    :: a@@ -55,16 +58,22 @@   getHiding     = flexHiding   mapHiding f x = x { flexHiding = f (flexHiding x) } -defaultFlexibleVar :: a -> FlexibleVar a-defaultFlexibleVar a = FlexibleVar Hidden ImplicitFlex Nothing a+instance LensOrigin (FlexibleVar a) where+  getOrigin     = flexOrigin+  mapOrigin f x = x { flexOrigin = f (flexOrigin x) } -flexibleVarFromHiding :: Hiding -> a -> FlexibleVar a-flexibleVarFromHiding h a = FlexibleVar h ImplicitFlex Nothing a+-- UNUSED+-- defaultFlexibleVar :: a -> FlexibleVar a+-- defaultFlexibleVar a = FlexibleVar Hidden Inserted ImplicitFlex Nothing a +-- UNUSED+-- flexibleVarFromHiding :: Hiding -> a -> FlexibleVar a+-- flexibleVarFromHiding h a = FlexibleVar h ImplicitFlex Nothing a+ allFlexVars :: Telescope -> FlexibleVars allFlexVars tel = zipWith makeFlex (downFrom $ size tel) $ telToList tel   where-    makeFlex i d = FlexibleVar (getHiding d) ImplicitFlex (Just i) i+    makeFlex i d = FlexibleVar (getHiding d) (getOrigin d) ImplicitFlex (Just i) i  data FlexChoice = ChooseLeft | ChooseRight | ChooseEither | ExpandBoth   deriving (Eq, Show)@@ -80,7 +89,7 @@   ChooseRight  <> ChooseRight  = ChooseRight  instance Monoid FlexChoice where-  mempty = ChooseEither+  mempty  = ChooseEither   mappend = (<>)  class ChooseFlex a where@@ -94,6 +103,9 @@   chooseFlex (RecordFlex xs) y               = chooseFlex xs (repeat y)   chooseFlex x               (RecordFlex ys) = chooseFlex (repeat x) ys   chooseFlex ImplicitFlex    ImplicitFlex    = ChooseEither+  chooseFlex ImplicitFlex    _               = ChooseLeft+  chooseFlex _               ImplicitFlex    = ChooseRight+  chooseFlex OtherFlex       OtherFlex       = ChooseEither  instance ChooseFlex a => ChooseFlex [a] where   chooseFlex xs ys = mconcat $ zipWith chooseFlex xs ys@@ -105,14 +117,23 @@   chooseFlex (Just x) (Just y) = chooseFlex x y  instance ChooseFlex Hiding where-  chooseFlex Hidden   Hidden   = ChooseEither-  chooseFlex Hidden   _        = ChooseLeft-  chooseFlex _        Hidden   = ChooseRight-  chooseFlex Instance Instance = ChooseEither-  chooseFlex Instance _        = ChooseLeft-  chooseFlex _        Instance = ChooseRight-  chooseFlex _        _        = ChooseEither+  chooseFlex Hidden     Hidden     = ChooseEither+  chooseFlex Hidden     _          = ChooseLeft+  chooseFlex _          Hidden     = ChooseRight+  chooseFlex Instance{} Instance{} = ChooseEither+  chooseFlex Instance{} _          = ChooseLeft+  chooseFlex _          Instance{} = ChooseRight+  chooseFlex _          _          = ChooseEither +instance ChooseFlex Origin where+  chooseFlex Inserted  Inserted  = ChooseEither+  chooseFlex Inserted  _         = ChooseLeft+  chooseFlex _         Inserted  = ChooseRight+  chooseFlex Reflected Reflected = ChooseEither+  chooseFlex Reflected _         = ChooseLeft+  chooseFlex _         Reflected = ChooseRight+  chooseFlex _         _         = ChooseEither+ instance ChooseFlex Int where   chooseFlex x y = case compare x y of     LT -> ChooseLeft@@ -120,8 +141,8 @@     GT -> ChooseRight  instance (ChooseFlex a) => ChooseFlex (FlexibleVar a) where-  chooseFlex (FlexibleVar h1 f1 p1 i1) (FlexibleVar h2 f2 p2 i2) =-    firstChoice [ chooseFlex f1 f2, chooseFlex h1 h2+  chooseFlex (FlexibleVar h1 o1 f1 p1 i1) (FlexibleVar h2 o2 f2 p2 i2) =+    firstChoice [ chooseFlex f1 f2, chooseFlex o1 o2, chooseFlex h1 h2                 , chooseFlex p1 p2, chooseFlex i1 i2]       where         firstChoice :: [FlexChoice] -> FlexChoice@@ -193,6 +214,11 @@     , focusType     :: Type -- ^ Type of variable we are splitting, kept for record patterns.     }   | LitFocus Literal [NamedArg DeBruijnPattern] Type+  | AbsurdFocus+    { absurdFocusRange :: PatInfo+    , absurdFocusVar   :: Int+    , absurdFocusType  :: Type+    }  -- | Result of 'splitProblem':  Determines position for the next split. data SplitProblem@@ -244,6 +270,7 @@ data LHSState = LHSState   { lhsProblem :: Problem   , lhsDPI     :: [DotPatternInst]+  , lhsShouldBeEmptyTypes :: [(Range,Type)]   }  instance Subst Term ProblemRest where@@ -276,8 +303,8 @@  instance PP.Pretty AsBinding where   pretty (AsB x v a) =-    PP.text (show x ++ " =") PP.<+> PP.hang (PP.pretty v PP.<+> PP.text ":") 2-                                            (PP.pretty a)+    PP.pretty x PP.<+> PP.text "=" PP.<+>+      PP.hang (PP.pretty v PP.<+> PP.text ":") 2 (PP.pretty a)  instance InstantiateFull AsBinding where   instantiateFull' (AsB x v a) = AsB x <$> instantiateFull' v <*> instantiateFull' a
src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs view
@@ -2,10 +2,13 @@  module Agda.TypeChecking.Rules.LHS.ProblemRest where +import Control.Arrow (first, second)+ import Data.Functor ((<$))  import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Abstract.Pattern import qualified Agda.Syntax.Abstract as A  import Agda.TypeChecking.Monad@@ -29,16 +32,15 @@ useNamesFromPattern ps = telFromList . zipWith ren (map namedArg ps ++ repeat dummy) . telToList   where     dummy = A.WildP __IMPOSSIBLE__-    ren (A.VarP x) (Dom info (_, a)) | notHidden info && not (isNoName x) =+    ren (A.VarP x) (Dom info (_, a)) | visible info && not (isNoName x) =       Dom info (nameToArgName x, a)-    ren A.AbsurdP{} (Dom info (_, a)) | notHidden info = Dom info ("()", a)     -- Andreas, 2013-03-13: inserted the following line in the hope to fix issue 819     -- but it does not do the job, instead, it puts a lot of "_"s     -- instead of more sensible names into error messages.-    -- ren A.WildP{}  (Dom info (_, a)) | notHidden info = Dom info ("_", a)+    -- ren A.WildP{}  (Dom info (_, a)) | visible info = Dom info ("_", a)     ren A.PatternSynP{} _ = __IMPOSSIBLE__  -- ensure there are no syns left     -- Andreas, 2016-05-10, issue 1848: if context variable has no name, call it "x"-    ren _ (Dom info (x, a)) | notHidden info && isNoName x =+    ren _ (Dom info (x, a)) | visible info && isNoName x =       Dom info (stringToArgName "x", a)     ren _ a = a @@ -76,14 +78,20 @@ problemFromPats :: [NamedArg A.Pattern] -- ^ The user patterns.   -> Type            -- ^ The type the user patterns eliminate.   -> TCM Problem     -- ^ The initial problem constructed from the user patterns.-problemFromPats ps a = do+problemFromPats ps0 a = do+  -- Andreas, 2017-01-18, issue #819: We set all A.WildP origins to Inserted+  -- in order to guide the pattern printer to discard variable names it made up.+  let ps = (`mapNamedArgPattern` ps0) $ \case+        p | A.WildP{} <- namedArg p -> setOrigin Inserted p+        p -> p   -- For the initial problem, do not insert trailing implicits.   -- This has the effect of not including trailing hidden domains in the problem telescope.   -- In all later call to insertImplicitPatterns, we can then use ExpandLast.   -- Ulf, 2016-04-25: Actually we do need to ExpandLast because where blocks   -- need the implicits.   ps <- insertImplicitPatternsT ExpandLast ps a-  -- unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS a+  reportSDoc "tc.lhs.imp" 20 $+    text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)    -- Redo the telView, in order to *not* normalize the clause type further than necessary.   -- (See issue 734.)@@ -119,6 +127,8 @@ updateProblemRest_ :: Problem -> TCM (Nat, Problem) updateProblemRest_ p@(Problem ps0 qs0 tel0 (ProblemRest ps a)) = do       ps <- insertImplicitPatternsT ExpandLast ps $ unArg a+      reportSDoc "tc.lhs.imp" 20 $+        text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)       -- (Issue 734: Do only the necessary telView to preserve clause types as much as possible.)       TelV tel b   <- telViewUpTo (length ps) $ unArg a       let gamma     = useNamesFromPattern ps tel@@ -150,4 +160,5 @@     return $ LHSState       { lhsProblem = p'       , lhsDPI     = applyPatSubst tau (lhsDPI st)+      , lhsShouldBeEmptyTypes = map (second $ applyPatSubst tau) (lhsShouldBeEmptyTypes st)       }
src/full/Agda/TypeChecking/Rules/LHS/Split.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  module Agda.TypeChecking.Rules.LHS.Split   ( splitProblem@@ -11,8 +10,9 @@ import Control.Monad.Trans ( lift ) import Control.Monad.Trans.Maybe +import Data.Either import Data.Maybe (fromMaybe)-import Data.List hiding (null)+import qualified Data.List as List import Data.Traversable hiding (mapM, sequence) import Data.Foldable (msum) @@ -36,6 +36,7 @@ import Agda.TypeChecking.Constraints import Agda.TypeChecking.Conversion import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.Errors (dropTopLevelModule) import Agda.TypeChecking.Free import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.MetaVars@@ -48,6 +49,7 @@  import Agda.TypeChecking.Rules.LHS.Problem +import Agda.Utils.Either import Agda.Utils.Except (catchError) import Agda.Utils.Functor ((<.>)) import Agda.Utils.Lens@@ -57,8 +59,10 @@ import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Permutation-import Agda.Utils.Tuple+import Agda.Utils.Pretty (prettyShow) import qualified Agda.Utils.Pretty as P+import Agda.Utils.Size+import Agda.Utils.Tuple  #include "undefined.h" import Agda.Utils.Impossible@@ -79,12 +83,17 @@ splitProblem mf (Problem ps qs tel pr) = do   lift $ do     reportSLn "tc.lhs.split" 20 $ "initiating splitting"-      ++ maybe "" ((" for definition " ++) . show) mf+      ++ maybe "" ((" for definition " ++) . prettyShow) mf     reportSDoc "tc.lhs.split" 30 $ sep       [ nest 2 $ text "ps   =" <+> sep (map (P.parens <.> prettyA) ps)       , nest 2 $ text "qs   =" <+> sep (map (P.parens <.> prettyTCM . namedArg) qs)       , nest 2 $ text "tel  =" <+> prettyTCM tel       ]+    reportSDoc "tc.lhs.split" 60 $ sep+      [ nest 2 $ text "ps  (raw) =" <+> sep (map (P.parens <.> text . show) ps)+      , nest 2 $ text "qs  (raw) =" <+> sep (map (P.parens <.> text . show . namedArg) qs)+      , nest 2 $ text "tel (raw) =" <+> (text . show) tel+      ]   splitP ps tel   where     -- Result splitting@@ -109,17 +118,20 @@         caseMaybeM (lift $ isRecordType $ unArg b) notRecord $ \(r, vs, def) -> case def of           Record{ recFields = fs } -> do             lift $ reportSDoc "tc.lhs.split" 20 $ sep-              [ text $ "we are of record type r  = " ++ show r+              [ text $ "we are of record type r  = " ++ prettyShow r               , text   "applied to parameters vs = " <+> prettyTCM vs-              , text $ "and have fields       fs = " ++ show fs+              , text $ "and have fields       fs = " ++ prettyShow fs               ]             -- The record "self" is the definition f applied to the patterns             let es = patternsToElims qs             -- Note: the module parameters are already part of qs             let self = defaultArg $ Def f [] `applyE` es                 ai   = getArgInfo p-            -- Try the projection candidates-            msum $ map (tryProj o ai self fs vs (length projs >= 2)) projs+            -- Try the projection candidates.+            -- Fail hard for the last candidate.+            msum $ mapAwareLast (tryProj o ai self fs r vs $ length ds >= 2) projs+            -- -- This fails softly on all (if more than one) candidates.+            -- msum $ map (tryProj o ai self fs r vs (length projs >= 2)) projs            _ -> __IMPOSSIBLE__       where@@ -129,16 +141,46 @@       wrongHiding :: MonadTCM tcm => QName -> tcm a       wrongHiding d = typeError . GenericDocError =<< do         liftTCM $ text "Wrong hiding used for projection " <+> prettyTCM d+      -- Issue #2423: error which reports the disambiguation+      wrongProj :: MonadTCM tcm => QName -> Bool -> tcm a+      wrongProj d amb = typeError . GenericDocError =<< do+        liftTCM $ sep+          [ text "Cannot eliminate type "+          , prettyTCM (unArg b)+          , text " with projection "+          , if amb then text . prettyShow =<< dropTopLevelModule d else prettyTCM d+          ] -      tryProj :: ProjOrigin -> ArgInfo -> Arg Term -> [Arg QName] -> Args -> Bool -> (QName, Projection) -> ListT TCM SplitProblem-      tryProj o ai self fs vs amb (d0, proj) = do+      -- | Pass 'True' unless last element of the list.+      mapAwareLast :: forall a b. (Bool -> a -> b) -> [a] -> [b]+      mapAwareLast f []     = []+      mapAwareLast f [a]    = [f False a]+      mapAwareLast f (a:as) = f True a : mapAwareLast f as++      tryProj+        :: ProjOrigin           -- ^ Origin of projection pattern.+        -> ArgInfo              -- ^ ArgInfo of projection pattern.+        -> Arg Term             -- ^ Self: value we are eliminating.+        -> [Arg QName]          -- ^ Fields of record type under consideration.+        -> QName                -- ^ Name of record type we are eliminating.+        -> Args                 -- ^ Parameters of record type we are eliminating.+        -> Bool                 -- ^ Did we start out with an ambiguous projection in the beginning?+        -> Bool                 -- ^ More than 1 candidates?  If yes, fail softly.+        -> (QName, Projection)  -- ^ Current candidate.+        -> ListT TCM SplitProblem+      tryProj o ai self fs r vs amb soft (d0, proj) = do         -- Recoverable errors are those coming from the projection.-        -- If we have several projections (amb) we just try the next one.-        let ambErr err = if amb then mzero else err+        -- If we have several projections we fail @soft@ly and just try the next one.+        let ambErr err = if soft then mzero else err+            ambTry m+             | soft = unlessM (liftTCM $ tryConversion m) mzero -- succeed without constraints+             -- This would leave constraints:+             -- -- | amb = whenNothingM (liftTCM $ tryMaybe $ disableDestructiveUpdate m) mzero+             | otherwise = liftTCM $ noConstraints m         case proj of           -- Andreas, 2015-05-06 issue 1413 projProper=Nothing is not impossible-          Projection{projProper = False} -> ambErr notProjP-          Projection{projProper = True, projOrig = d, projLams = lams} -> do+          Projection{projProper = Nothing} -> ambErr notProjP+          Projection{projProper = Just qr, projOrig = d, projLams = lams} -> do             let ai = projArgInfo proj             -- If projIndex==0, then the projection is already applied             -- to the record value (like in @open R r@), and then it@@ -148,19 +190,26 @@             -- If the target is not a record type, that's an error.             -- It could be a meta, but since we cannot postpone lhs checking, we crash here.             lift $ reportSDoc "tc.lhs.split" 20 $ sep-              [ text $ "proj                  d0 = " ++ show d0-              , text $ "original proj         d  = " ++ show d+              [ text $ "proj                  d0 = " ++ prettyShow d0+              , text $ "original proj         d  = " ++ prettyShow d               ]             -- Get the field decoration.             -- If the projection pattern name @d@ is not a field name,             -- we have to try the next projection name.             -- If this was not an ambiguous projection, that's an error.-            argd <- maybe (ambErr failure) return $ find ((d ==) . unArg) fs+            argd <- maybe (ambErr $ wrongProj d amb) return $ List.find ((d ==) . unArg) fs             let ai' = setRelevance (getRelevance argd) ai +            -- Andreas, 2016-12-31, issue #2374:+            -- We can also disambiguate by hiding info.+            unless (sameHiding p ai) $ ambErr $ wrongHiding d++            -- Andreas, 2016-12-31, issue #1976:+            -- Check parameters.+            ambTry $ checkParameters qr r vs+             -- From here, we have the correctly disambiguated projection.             -- Thus, we no longer catch errors.-            unless (getHiding p == getHiding ai) $ wrongHiding d              -- For highlighting, we remember which name we disambiguated to.             -- This is safe here (fingers crossed) as we won't decide on a@@ -205,7 +254,7 @@         ]        -- Andreas, 2016-06-30, issue #2075: need test here!-      unless (getHiding p == getHiding ai) $ typeError WrongHidingInLHS+      unless (sameHiding p ai) $ typeError WrongHidingInLHS        -- Possible reinvokations:       let -- 1. Redo this argument (after meta instantiation).@@ -256,7 +305,7 @@             -- Subcase: a record type (d vs)             Right (d, vs, def) -> do               let np = recPars def-              let (pars, ixs) = genericSplitAt np vs+              let (pars, ixs) = splitAt np vs               lift $ reportSDoc "tc.lhs.split" 10 $ vcat                 [ sep [ text "splitting on"                       , nest 2 $ fsep [ prettyA p, text ":", prettyTCM dom ]@@ -278,6 +327,16 @@                 , splitRPats   = Abs x  $ Problem ps () tel __IMPOSSIBLE__                 }) `mplus` keepGoing +        -- Case: absurd pattern.+        p@(A.AbsurdP info) -> do+          lift $ reportSDoc "tc.lhs.split.absurd" 30 $ text "split AbsurdP: type is " <+> prettyTCM a+          let i = size tel+          (return Split+            { splitLPats = empty+            , splitFocus = Arg ai $ AbsurdFocus info i $ raise (i+1) a+            , splitRPats = Abs x  $ Problem ps () tel __IMPOSSIBLE__+            }) `mplus` keepGoing+         -- Case: constructor pattern.         p@(A.ConP ci (A.AmbQ cs) args) -> do           let tryInstantiate a'@@ -303,12 +362,18 @@             case ignoreSharing $ unEl a' of                -- Subcase: split type is a Def.-              Def d es    -> do+              Def d es    -> (liftTCM $ theDef <$> getConstInfo d) >>= \case -                def <- liftTCM $ theDef <$> getConstInfo d+               -- Issue #2253: the data type could be abstract.+               AbstractDefn{} -> liftTCM $ traceCall (CheckPattern p EmptyTel a) $ do+                 typeError . GenericDocError =<< do+                   text "Cannot split on abstract data type" <+> prettyTCM d +               def -> do+                 -- We cannot split on (shape-)irrelevant non-records.                 -- Andreas, 2011-10-04 unless allowed by option+                lift $ reportSLn "tc.lhs.split" 30 $ "split ConP: relevance is " ++ show ai                 unless (defIsRecord def) $                   when (unusableRelevance $ getRelevance ai) $                   unlessM (liftTCM $ optExperimentalIrrelevance <$> pragmaOptions) $@@ -327,24 +392,26 @@                     traceCall (CheckPattern p EmptyTel a) $ do  -- TODO: wrong telescope                       -- Check that we construct something in the right datatype                       c <- lift $ do-                          cs' <- mapM canonicalName cs+                          -- Andreas, 2017-08-13, issue #2686: ignore abstract constructors+                          (cs1, cs') <- unzip . snd . partitionEithers <$> do+                            forM cs $ \ c -> mapRight ((c,) . conName) <$> getConHead c+                          when (null cs1) $ typeError $ AbstractConstructorNotInScope $ head cs                           d'  <- canonicalName d-                          let cons def = case theDef def of-                                Datatype{dataCons = cs} -> cs-                                Record{recConHead = c}      -> [conName c]-                                _                       -> __IMPOSSIBLE__-                          cs0 <- cons <$> getConstInfo d'-                          case [ c | (c, c') <- zip cs cs', elem c' cs0 ] of+                          cs0 <- (theDef <$> getConstInfo d') <&> \case+                                Datatype{dataCons = cs0} -> cs0+                                Record{recConHead = c0}  -> [conName c0]+                                _ -> __IMPOSSIBLE__+                          case [ c | (c, c') <- zip cs1 cs', elem c' cs0 ] of                             [c]   -> do                               -- If constructor pattern was ambiguous,                               -- remember our choice for highlighting info.                               when (length cs >= 2) $ storeDisambiguatedName c                               return c-                            []    -> typeError $ ConstructorPatternInWrongDatatype (head cs) d-                            cs    -> -- if there are more than one we give up (they might have different types)-                              typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d cs+                            []    -> typeError $ ConstructorPatternInWrongDatatype (head cs1) d+                            cs3   -> -- if there are more than one we give up (they might have different types)+                              typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d cs3 -                      let (pars, ixs) = genericSplitAt np vs+                      let (pars, ixs) = splitAt np vs                       lift $ reportSDoc "tc.lhs.split" 10 $ vcat                         [ sep [ text "splitting on"                               , nest 2 $ fsep [ prettyA p, text ":", prettyTCM dom ]@@ -363,7 +430,9 @@                       -- so we add a check here.                       -- I guess this issue could be solved more systematically,                       -- but the extra check here is non-invasive to the existing code.-                      checkParsIfUnambiguous cs d pars+                      -- Andreas, 2016-12-31 fixing issue #1975+                      -- Do this also for constructors which were originally ambiguous.+                      checkConstructorParameters c d pars                        (return Split                         { splitLPats   = empty@@ -377,23 +446,34 @@         _ -> keepGoing  --- | @checkParsIfUnambiguous [c] d pars@ checks that the data/record type+-- | @checkConstructorParameters c d pars@ checks that the data/record type --   behind @c@ is has initial parameters (coming e.g. from a module instantiation) --   that coincide with an prefix of @pars@.-checkParsIfUnambiguous :: MonadTCM tcm => [QName] -> QName -> Args -> tcm ()-checkParsIfUnambiguous [c] d pars = liftTCM $ do-  dc <- getConstructorData c+checkConstructorParameters :: MonadTCM tcm => QName -> QName -> Args -> tcm ()+checkConstructorParameters c d pars = do+  dc <- liftTCM $ getConstructorData c+  checkParameters dc d pars++-- | Check that given parameters match the parameters of the inferred+--   constructor/projection.+checkParameters+  :: MonadTCM tcm+  => QName  -- ^ The record/data type name of the chosen constructor/projection.+  -> QName  -- ^ The record/data type name as supplied by the type signature.+  -> Args   -- ^ The parameters.+  -> tcm ()+checkParameters dc d pars = liftTCM $ do   a  <- reduce (Def dc [])   case ignoreSharing a of     Def d0 es -> do -- compare parameters       let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es       reportSDoc "tc.lhs.split" 40 $-        vcat [ nest 2 $ text "d                   =" <+> prettyTCM d-             , nest 2 $ text "d0 (should be == d) =" <+> prettyTCM d0-             , nest 2 $ text "dc                  =" <+> prettyTCM dc+        vcat [ nest 2 $ text "d                   =" <+> (text . prettyShow) d+             , nest 2 $ text "d0 (should be == d) =" <+> (text . prettyShow) d0+             , nest 2 $ text "dc                  =" <+> (text . prettyShow) dc+             , nest 2 $ text "vs                  =" <+> prettyTCM vs              ]       -- when (d0 /= d) __IMPOSSIBLE__ -- d could have extra qualification       t <- typeOfConst d       compareArgs [] t (Def d []) vs (take (length vs) pars)     _ -> __IMPOSSIBLE__-checkParsIfUnambiguous _ _ _ = return ()
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -2,7 +2,6 @@ {-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NondecreasingIndentation   #-}-{-# LANGUAGE ScopedTypeVariables        #-} {-# LANGUAGE UndecidableInstances       #-} {-# LANGUAGE ViewPatterns               #-} @@ -105,8 +104,7 @@ module Agda.TypeChecking.Rules.LHS.Unify   ( UnificationResult   , UnificationResult'(..)-  , unifyIndices-  , unifyIndices_ ) where+  , unifyIndices ) where  import Prelude hiding (null) @@ -122,7 +120,7 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Semigroup hiding (Arg)-import Data.List hiding (null, sort)+import qualified Data.List as List  import Data.Typeable (Typeable) import Data.Foldable (Foldable)@@ -139,7 +137,6 @@  import Agda.TypeChecking.Monad import qualified Agda.TypeChecking.Monad.Benchmark as Bench-import Agda.TypeChecking.Monad.Exception import Agda.TypeChecking.Monad.Builtin (constructorForm) import Agda.TypeChecking.Conversion -- equalTerm import Agda.TypeChecking.Constraints@@ -161,10 +158,7 @@ import Agda.TypeChecking.Rules.LHS.Problem hiding (Substitution) -- import Agda.TypeChecking.SyntacticEquality -import Agda.Utils.Except-  ( Error(noMsg, strMsg)-  , MonadError(catchError, throwError)-  )+import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.Either import Agda.Utils.Functor import Agda.Utils.List@@ -186,38 +180,22 @@   )  data UnificationResult' a-  = Unifies  a      -- ^ Unification succeeded.-  | NoUnify  TCErr  -- ^ Terms are not unifiable.-  | DontKnow TCErr  -- ^ Some other error happened, unification got stuck.+  = Unifies  a                    -- ^ Unification succeeded.+  | NoUnify  NegativeUnification  -- ^ Terms are not unifiable.+  | DontKnow [UnificationFailure] -- ^ Some other error happened, unification got stuck.   deriving (Typeable, Show, Functor, Foldable, Traversable)  -- | Unify indices. -----   In @unifyIndices_ flex a us vs@,------   @a@ is the type eliminated by @us@ and @vs@---     (usally the type of a constructor),---     need not be reduced,+--   In @unifyIndices gamma flex us vs@, -- --   @us@ and @vs@ are the argument lists to unify, --+--   @gamma@ is the telescope of free variables in @us@ and @vs@.+-- --   @flex@ is the set of flexible (instantiable) variabes in @us@ and @vs@. -- --   The result is the most general unifier of @us@ and @vs@.-unifyIndices_ :: MonadTCM tcm-              => Telescope-              -> FlexibleVars-              -> Type-              -> Args-              -> Args-              -> tcm (Telescope, PatternSubstitution, [NamedArg DeBruijnPattern])-unifyIndices_ tel flex a us vs = liftTCM $ do-  r <- unifyIndices tel flex a us vs-  case r of-    Unifies sub   -> return sub-    DontKnow err  -> throwError err-    NoUnify  err  -> throwError err- unifyIndices :: MonadTCM tcm              => Telescope              -> FlexibleVars@@ -397,8 +375,8 @@   where     permuteFlex :: Permutation -> FlexibleVars -> FlexibleVars     permuteFlex perm =-      mapMaybe $ \(FlexibleVar h k p x) ->-        FlexibleVar h k p <$> findIndex (x==) (permPicks perm)+      mapMaybe $ \(FlexibleVar h o k p x) ->+        FlexibleVar h o k p <$> List.findIndex (x==) (permPicks perm)  applyUnder :: Int -> Telescope -> Term -> Telescope applyUnder k tel u@@ -471,8 +449,8 @@     { conflictAt         :: Int     , conflictDatatype   :: QName     , conflictParameters :: Args-    , conflictConLeft    :: ConHead-    , conflictConRight   :: ConHead+    , conflictLeft       :: Term+    , conflictRight      :: Term     }   | Cycle     { cycleAt            :: Int@@ -516,67 +494,67 @@   prettyTCM step = case step of     Deletion k a u v -> text "Deletion" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "type:       " <+> text (show a)-      , text "lhs:        " <+> text (show u)-      , text "rhs:        " <+> text (show v)+      , text "type:       " <+> prettyTCM a+      , text "lhs:        " <+> prettyTCM u+      , text "rhs:        " <+> prettyTCM v       ])     Solution k a i u -> text "Solution" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "type:       " <+> text (show a)+      , text "type:       " <+> prettyTCM a       , text "variable:   " <+> text (show i)-      , text "term:       " <+> text (show u)+      , text "term:       " <+> prettyTCM u       ])     Injectivity k a d pars ixs c -> text "Injectivity" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "type:       " <+> text (show a)-      , text "datatype:   " <+> text (show d)-      , text "parameters: " <+> text (show pars)-      , text "indices:    " <+> text (show ixs)-      , text "constructor:" <+> text (show c)+      , text "type:       " <+> prettyTCM a+      , text "datatype:   " <+> prettyTCM d+      , text "parameters: " <+> prettyList_ (map prettyTCM pars)+      , text "indices:    " <+> prettyList_ (map prettyTCM ixs)+      , text "constructor:" <+> prettyTCM c       ])-    Conflict k d pars c1 c2 -> text "Conflict" $$ nest 2 (vcat $+    Conflict k d pars u v -> text "Conflict" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "datatype:   " <+> text (show d)-      , text "parameters: " <+> text (show pars)-      , text "con1:       " <+> text (show c1)-      , text "con2:       " <+> text (show c2)+      , text "datatype:   " <+> prettyTCM d+      , text "parameters: " <+> prettyList_ (map prettyTCM pars)+      , text "lhs:        " <+> prettyTCM u+      , text "rhs:        " <+> prettyTCM v       ])     Cycle k d pars i u -> text "Cycle" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "datatype:   " <+> text (show d)-      , text "parameters: " <+> text (show pars)+      , text "datatype:   " <+> prettyTCM d+      , text "parameters: " <+> prettyList_ (map prettyTCM pars)       , text "variable:   " <+> text (show i)-      , text "term:       " <+> text (show u)+      , text "term:       " <+> prettyTCM u       ])     EtaExpandVar fi r pars -> text "EtaExpandVar" $$ nest 2 (vcat $       [ text "variable:   " <+> text (show fi)-      , text "record type:" <+> text (show r)-      , text "parameters: " <+> text (show pars)+      , text "record type:" <+> prettyTCM r+      , text "parameters: " <+> prettyTCM pars       ])     EtaExpandEquation k r pars -> text "EtaExpandVar" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "record type:" <+> text (show r)-      , text "parameters: " <+> text (show pars)+      , text "record type:" <+> prettyTCM r+      , text "parameters: " <+> prettyTCM pars       ])     LitConflict k a u v -> text "LitConflict" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "type:       " <+> text (show a)-      , text "lhs:        " <+> text (show u)-      , text "rhs:        " <+> text (show v)+      , text "type:       " <+> prettyTCM a+      , text "lhs:        " <+> prettyTCM u+      , text "rhs:        " <+> prettyTCM v       ])     StripSizeSuc k u v -> text "StripSizeSuc" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "lhs:        " <+> text (show u)-      , text "rhs:        " <+> text (show v)+      , text "lhs:        " <+> prettyTCM u+      , text "rhs:        " <+> prettyTCM v       ])     SkipIrrelevantEquation k -> text "SkipIrrelevantEquation" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)       ])     TypeConInjectivity k d us vs -> text "TypeConInjectivity" $$ nest 2 (vcat $       [ text "position:   " <+> text (show k)-      , text "datatype:   " <+> text (show d)-      , text "lhs:        " <+> text (show us)-      , text "rhs:        " <+> text (show vs)+      , text "datatype:   " <+> prettyTCM d+      , text "lhs:        " <+> prettyList_ (map prettyTCM us)+      , text "rhs:        " <+> prettyList_ (map prettyTCM vs)       ])  type UnifyStrategy = UnifyState -> ListT TCM UnifyStep@@ -600,14 +578,15 @@     , etaExpandVarStrategy     , etaExpandEquationStrategy     , injectiveTypeConStrategy+    , injectivePragmaStrategy     , simplifySizesStrategy     , checkEqualityStrategy     ]  -- | Returns true if the variables 0..k-1 don't occur in x-isHom :: (Free' a All, Subst Term a) => Int -> a -> Maybe a+isHom :: (Free a, Subst Term a) => Int -> a -> Maybe a isHom n x = do-  guard $ getAll $ runFree (\ (i,_) -> All (i >= n)) IgnoreNot x+  guard $ getAll $ runFree (All . (>= n)) IgnoreNot x   return $ raise (-n) x  -- | Checks whether the given term (of the given type) is beta-eta-equivalent@@ -680,7 +659,7 @@ findFlexible i flex =   let flex'      = map flexVar flex       flexible i = i `elem` flex'-  in find ((i ==) . flexVar) flex+  in List.find ((i ==) . flexVar) flex  basicUnifyStrategy :: Int -> UnifyStrategy basicUnifyStrategy k s = do@@ -690,19 +669,23 @@   liftTCM $ reportSDoc "tc.lhs.unify" 30 $ text "isEtaVar results: " <+> text (show [mi,mj])   case (mi, mj) of     (Just i, Just j)-     | i == j -> return $ Deletion k ha (var i) (var i)+     | i == j -> mzero -- Taken care of by checkEqualityStrategy     (Just i, Just j)      | Just fi <- findFlexible i flex      , Just fj <- findFlexible j flex -> do        let choice = chooseFlex fi fj+           firstTryLeft  = msum [ return (Solution k ha i v)+                                , return (Solution k ha j u)]+           firstTryRight = msum [ return (Solution k ha j u)+                                , return (Solution k ha i v)]        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fi = " <+> text (show fi)        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fj = " <+> text (show fj)        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "chooseFlex: " <+> text (show choice)        case choice of-         ChooseLeft   -> return $ Solution k ha i v-         ChooseRight  -> return $ Solution k ha j u+         ChooseLeft   -> firstTryLeft+         ChooseRight  -> firstTryRight          ExpandBoth   -> mzero -- This should be taken care of by etaExpandEquationStrategy-         ChooseEither -> return $ Solution k ha j u+         ChooseEither -> firstTryRight     (Just i, _)      | Just _ <- findFlexible i flex -> return $ Solution k ha i v     (_, Just j)@@ -720,18 +703,12 @@       npars <- mcatMaybes $ liftTCM $ getNumberOfParameters d       let (pars,ixs) = splitAt npars $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es       hpars <- mfromMaybe $ isHom k pars-      liftTCM $ reportSDoc "tc.lhs.unify" 40 $ addContext (varTel s `abstract` eqTel s) $+      liftTCM $ reportSDoc "tc.lhs.unify" 40 $ addContext (varTel s) $         text "Found equation at datatype " <+> prettyTCM d          <+> text " with (homogeneous) parameters " <+> prettyTCM hpars       case (ignoreSharing u, ignoreSharing v) of-        (MetaV m es, Con c ci _   ) -> do-          us <- mcatMaybes $ liftTCM $ addContext (varTel s) $ instMetaCon m es d hpars c ci-          return $ Injectivity k a d hpars ixs c-        (Con c ci _   , MetaV m es) -> do-          vs <- mcatMaybes $ liftTCM $ addContext (varTel s) $ instMetaCon m es d hpars c ci-          return $ Injectivity k a d hpars ixs c         (Con c _ _   , Con c' _ _  ) | c == c' -> return $ Injectivity k a d hpars ixs c-        (Con c _ _   , Con c' _ _  ) -> return $ Conflict k d hpars c c'+        (Con c _ _   , Con c' _ _  ) -> return $ Conflict k d hpars u v         (Var i []  , v         ) -> ifOccursStronglyRigid i v $ return $ Cycle k d hpars i v         (u         , Var j []  ) -> ifOccursStronglyRigid j u $ return $ Cycle k d hpars j u         _ -> mzero@@ -746,47 +723,6 @@           StronglyRigid -> ret           _ -> mzero -    -- Instantiate the meta with a constructor applied to fresh metas-    -- Returns the fresh metas if successful-    instMetaCon :: MetaId -> Elims -> QName -> Args -> ConHead -> ConInfo -> TCM (Maybe Args)-    instMetaCon m es d pars c ci = do-      caseMaybe (allApplyElims es) (return Nothing) $ \ us -> do-        ifNotM (asks envAssignMetas) (return Nothing) $ {-else-} tryMaybe $ do-          reportSDoc "tc.lhs.unify" 60 $-            text "Trying to instantiate the meta" <+> prettyTCM (MetaV m es) <+>-            text "with the constructor" <+> prettyTCM c <+> text "applied to fresh metas"-          margs <- do-            -- The new metas should have the same dependencies as the original meta-            mv <- lookupMeta m--            ctype <- (`piApply` pars) . defType <$> liftTCM (getConstInfo $ conName c)-            reportSDoc "tc.lhs.unify" 80 $ text "Type of constructor: " <+> prettyTCM ctype-            withMetaInfo' mv $ do-              let perm = mvPermutation mv-              reportSDoc "tc.lhs.unify" 100 $ vcat-                [ text "Permutation of meta: " <+> prettyTCM perm-                ]-              cxt <- instantiateFull =<< getContextTelescope-              reportSDoc "tc.lhs.unify" 100 $ do-                let flat = flattenTel cxt-                let badRen  :: Substitution = renaming __IMPOSSIBLE__ perm-                let goodRen :: Substitution = renaming __IMPOSSIBLE__ $ flipP perm-                vcat-                  [ text "Context of meta: " <+> (inTopContext $ prettyTCM cxt)-                  , text "Flattened:       " <+> prettyTCM flat-                  , text "Flattened (raw): " <+> text (show flat)-                  , text "Bad renaming:    " <+> text (show badRen)-                  , text "Good renaming:   " <+> text (show goodRen)-                  , text "Raw permutation: " <+> prettyTCM (permute perm flat)-                  ]-              let tel = permuteTel perm cxt-              reportSDoc "tc.lhs.unify" 100 $ text "Context tel (for new metas): " <+> prettyTCM tel-              -- important: create the meta in the same environment as the original meta-              newArgsMetaCtx ctype tel perm us-          reportSDoc "tc.lhs.unify" 80 $ text "Generated meta args: " <+> prettyTCM margs-          noConstraints $ assignV DirEq m us (Con c ci margs)-          return margs- checkEqualityStrategy :: Int -> UnifyStrategy checkEqualityStrategy k s = do   let Equal a u v = getEquality k s@@ -796,11 +732,13 @@  literalStrategy :: Int -> UnifyStrategy literalStrategy k s = do-  eq <- liftTCM $ eqUnLevel $ getEquality k s-  case eq of-    Equal a u@(Lit l1) v@(Lit l2)-     | l1 == l2  -> return $ Deletion k a u u -- TODO: wrong context of a, but does it matter?-     | otherwise -> return $ LitConflict k a l1 l2 -- same problem here+  let n = eqCount s+  Equal a u v <- liftTCM $ eqUnLevel $ getEquality k s+  ha <- mfromMaybe $ isHom n a+  case (u , v) of+    (Lit l1 , Lit l2)+     | l1 == l2  -> return $ Deletion k ha u v+     | otherwise -> return $ LitConflict k ha l1 l2     _ -> mzero  etaExpandVarStrategy :: Int -> UnifyStrategy@@ -881,7 +819,7 @@                 Datatype{} -> True                 Record{}   -> True                 Axiom{}    -> True-                AbstractDefn -> False -- True triggers issue #2250+                AbstractDefn{} -> False -- True triggers issue #2250                 Function{}   -> False                 Primitive{}  -> False                 Constructor{}-> __IMPOSSIBLE__  -- Never a type!@@ -890,6 +828,19 @@       return $ TypeConInjectivity k d us vs     _ -> mzero +injectivePragmaStrategy :: Int -> UnifyStrategy+injectivePragmaStrategy k s = do+  eq <- liftTCM $ eqUnLevel $ getEquality k s+  case eq of+    Equal a u@(ignoreSharing -> Def d es) v@(ignoreSharing -> Def d' es') | d == d' -> do+      -- d must have an injective pragma+      def <- liftTCM $ getConstInfo d+      guard $ defInjective def+      let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+          vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es'+      return $ TypeConInjectivity k d us vs+    _ -> mzero+ skipIrrelevantStrategy :: Int -> UnifyStrategy skipIrrelevantStrategy k s = do   let i = getEqInfo k s@@ -941,24 +892,43 @@ unifyStep :: UnifyState -> UnifyStep -> UnifyM (UnificationResult' UnifyState)  unifyStep s Deletion{ deleteAt = k , deleteType = a , deleteLeft = u , deleteRight = v } = do-    liftTCM $ addContext (varTel s) $ noConstraints $ dontAssignMetas $ equalTerm a u v-    ifM (liftTCM $ optWithoutK <$> pragmaOptions)-    {-then-} (DontKnow <$> liftTCM withoutKErr)-    {-else-} (do-      let (s', sigma) = solveEq k u s-      tellUnifyProof sigma-      Unifies <$> liftTCM (reduceEqTel s'))-  `catchError` \err -> return $ DontKnow err-  where-    withoutKErr = addContext (varTel s) $ typeError_ $ WithoutKError a u u+    -- Check definitional equality of u and v+    isReflexive <- liftTCM $ addContext (varTel s) $ do+      dontAssignMetas $ disableDestructiveUpdate $ noConstraints $+        equalTerm a u v+      return Nothing+      `catchError` \err -> return $ Just err+    withoutK <- liftTCM $ optWithoutK <$> pragmaOptions+    case isReflexive of+      Just err     -> return $ DontKnow []+      _ | withoutK -> return $ DontKnow [UnifyReflexiveEq (varTel s) a u]+      _            -> do+        let (s', sigma) = solveEq k u s+        tellUnifyProof sigma+        Unifies <$> liftTCM (reduceEqTel s')  unifyStep s Solution{ solutionAt = k , solutionType = a , solutionVar = i , solutionTerm = u } = do   let m = varCount s-  caseMaybeM (trySolveVar (m-1-i) u s) (DontKnow <$> err) $ \(s',sub) -> do-    tellUnifySubst sub-    let (s'', sigma) = solveEq k (applyPatSubst sub u) s'-    tellUnifyProof sigma-    Unifies <$> liftTCM (reduce s'')++  -- Check that the type of the variable is equal to the type of the equation+  -- (not just a subtype), otherwise we cannot instantiate (see Issue 2407).+  let a' = getVarType (m-1-i) s+  equalTypes <- liftTCM $ addContext (varTel s) $ do+    reportSDoc "tc.lhs.unify" 45 $ text "Equation type: " <+> prettyTCM a+    reportSDoc "tc.lhs.unify" 45 $ text "Variable type: " <+> prettyTCM a'+    dontAssignMetas $ disableDestructiveUpdate $ noConstraints $+      equalType a a'+    return Nothing+    `catchError` \err -> return $ Just err+  case equalTypes of+    Just err -> return $ DontKnow []+    Nothing  -> caseMaybeM (trySolveVar (m-1-i) u s)+      (return $ DontKnow [UnifyRecursiveEq (varTel s) a i u])+      (\(s',sub) -> do+        tellUnifySubst sub+        let (s'', sigma) = solveEq k (applyPatSubst sub u) s'+        tellUnifyProof sigma+        Unifies <$> liftTCM (reduce s''))   where     trySolveVar i u s = case solveVar i u s of       Just x  -> return $ Just x@@ -966,7 +936,6 @@         u <- liftTCM $ normalise u         s <- liftTCM $ normaliseVarTel s         return $ solveVar i u s-    err = addContext (varTel s) $ typeError_ $ UnificationRecursiveEq a i u  unifyStep s (Injectivity k a d pars ixs c) = do   withoutK <- liftTCM $ optWithoutK <$> pragmaOptions@@ -974,7 +943,8 @@    -- Get constructor telescope and target indices   ctype <- (`piApply` pars) . defType <$> liftTCM (getConInfo c)-  reportSDoc "tc.lhs.unify" 40 $ text "Constructor type: " <+> prettyTCM ctype+  addContext (varTel s) $ reportSDoc "tc.lhs.unify" 40 $+    text "Constructor type: " <+> prettyTCM ctype   TelV ctel ctarget <- liftTCM $ telView ctype   let cixs = case ignoreSharing $ unEl ctarget of                Def d' es | d == d' ->@@ -984,10 +954,11 @@    -- Get index telescope of the datatype   dtype    <- (`piApply` pars) . defType <$> liftTCM (getConstInfo d)-  reportSDoc "tc.lhs.unify" 40 $ text "Datatype type: " <+> prettyTCM dtype+  addContext (varTel s) $ reportSDoc "tc.lhs.unify" 40 $+    text "Datatype type: " <+> prettyTCM dtype    -- Split equation telescope into parts before and after current equation-  let (eqListTel1, _ : eqListTel2) = genericSplitAt k $ telToList $ eqTel s+  let (eqListTel1, _ : eqListTel2) = splitAt k $ telToList $ eqTel s       (eqTel1, eqTel2) = (telFromList eqListTel1, telFromList eqListTel2)    -- This is where the magic of higher-dimensional unification happens@@ -996,10 +967,11 @@   -- recursively (this doesn't get stuck in a loop because a type should   -- never be indexed over itself). Note the similarity with the   -- computeNeighbourhood function in Agda.TypeChecking.Coverage.+  let hduTel = eqTel1 `abstract` raise (size eqTel1) ctel   res <- liftTCM $ addContext (varTel s) $ unifyIndices-           (eqTel1 `abstract` ctel)-           (allFlexVars $ eqTel1 `abstract` ctel)-           dtype+           hduTel+           (allFlexVars hduTel)+           (raise (size hduTel) dtype)            (raise (size ctel) ixs)            (raiseFrom (size ctel) (size eqTel1) cixs)   case res of@@ -1010,7 +982,11 @@      -- TODO: we could still make progress here if not --without-K,     -- but I'm not sure if it's necessary.-    DontKnow _ -> liftTCM $ DontKnow <$> err+    DontKnow _ -> let n           = eqCount s+                      Equal a u v = getEquality k s+                  in return $ DontKnow [UnifyIndicesNotVars+                       (varTel s `abstract` eqTel s) a+                       (raise n u) (raise n v) (raise (n-k) ixs)]      Unifies (eqTel1', rho0, _) -> do       -- Split ps0 into parts for eqTel1 and ctel@@ -1040,31 +1016,22 @@        return $ Unifies $ s { eqTel = eqTel' , eqLHS = lhs' , eqRHS = rhs' } -  where-    err :: TCM TCErr-    err = let n           = eqCount s-              Equal a u v = getEquality k s-          in addContext (varTel s `abstract` eqTel s) $ typeError_-               (UnifyIndicesNotVars a (raise n u) (raise n v) (raise (n-k) ixs))- unifyStep s Conflict-  { conflictConLeft    = c-  , conflictConRight   = c'-  } = NoUnify <$> addContext (varTel s)-        (typeError_ $ UnifyConflict c c')+  { conflictLeft  = u+  , conflictRight = v+  } = return $ NoUnify $ UnifyConflict (varTel s) u v  unifyStep s Cycle   { cycleVar        = i   , cycleOccursIn   = u-  } = NoUnify <$> addContext (varTel s)-        (typeError_ $ UnifyCycle i u)+  } = return $ NoUnify $ UnifyCycle (varTel s) i u  unifyStep s EtaExpandVar{ expandVar = fi, expandVarRecordType = d , expandVarParameters = pars } = do   delta   <- liftTCM $ (`apply` pars) <$> getRecordFieldTypes d   c       <- liftTCM $ getRecordConstructor d   let nfields         = size delta       (varTel', rho)  = expandTelescopeVar (varTel s) (m-1-i) delta c-      projectFlexible = [ FlexibleVar (flexHiding fi) (projFlexKind j) (flexPos fi) (i+j) | j <- [0..nfields-1] ]+      projectFlexible = [ FlexibleVar (flexHiding fi) (flexOrigin fi) (projFlexKind j) (flexPos fi) (i+j) | j <- [0..nfields-1] ]   tellUnifySubst $ rho   Unifies <$> liftTCM (reduce $ UState     { varTel   = varTel'@@ -1083,6 +1050,7 @@       RecordFlex ks -> fromMaybe ImplicitFlex $ ks !!! j       ImplicitFlex  -> ImplicitFlex       DotFlex       -> DotFlex+      OtherFlex     -> OtherFlex      liftFlexible :: Int -> Int -> Maybe Int     liftFlexible n j = if j == i then Nothing else Just (if j > i then j + (n-1) else j)@@ -1113,8 +1081,7 @@   { litType          = a   , litConflictLeft  = l   , litConflictRight = l'-  } = NoUnify <$> addContext (varTel s)-        (typeError_ $ UnequalTerms CmpEq (Lit l) (Lit l') a)+  } = return $ NoUnify $ UnifyConflict (varTel s) (Lit l) (Lit l')  unifyStep s (StripSizeSuc k u v) = do   sizeTy <- liftTCM sizeType@@ -1169,7 +1136,8 @@                  -> UnifyM (UnificationResult' UnifyState)                  -> UnifyM (UnificationResult' UnifyState)     tryUnifyStep step fallback = do-      reportSDoc "tc.lhs.unify" 20 $ text "trying unifyStep" <+> prettyTCM step+      addContext (varTel s) $+        reportSDoc "tc.lhs.unify" 20 $ text "trying unifyStep" <+> prettyTCM step       x <- unifyStep s step       case x of         Unifies s'   -> do@@ -1177,15 +1145,12 @@           reportSDoc "tc.lhs.unify" 20 $ text "new unifyState:" <+> prettyTCM s'           writeUnifyLog $ UnificationStep s step           return x-        NoUnify{}    -> return x-        DontKnow err -> do+        NoUnify{}     -> return x+        DontKnow err1 -> do           y <- fallback           case y of-            DontKnow{} -> return x-            _          -> return y+            DontKnow err2 -> return $ DontKnow $ err1 ++ err2+            _             -> return y      failure :: UnifyM (UnificationResult' a)-    failure = do-      err <- addContext (varTel s) $ typeError_ $-               UnificationStuck (eqTel s) (map unArg $ eqLHS s) (map unArg $ eqRHS s)-      return $ DontKnow err+    failure = return $ DontKnow []
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -35,6 +35,7 @@ import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Permutation+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size  #include "undefined.h"@@ -93,11 +94,6 @@       -- compute the field telescope (does not include record parameters)       let TelV ftel _ = telView' contype -          -- A record is irrelevant if all of its fields are.-          -- In this case, the associated module parameter will be irrelevant.-          -- See issue 392.-          recordRelevance = minimum $ Irrelevant : (map getRelevance $ telToList ftel)-       -- Compute correct type of constructor        -- t = tel -> t0 where t0 must be a sort s@@ -149,8 +145,25 @@           -- haveEta      = maybe (Inferred $ conInduction == Inductive && etaenabled) Specified eta           con = ConHead conName conInduction $ map unArg fs -      reportSDoc "tc.rec" 30 $ text "record constructor is " <+> text (show con)+          -- A record is irrelevant if all of its fields are.+          -- In this case, the associated module parameter will be irrelevant.+          -- See issue 392.+          -- Unless it's been declared coinductive or no-eta-equality (#2607).+          recordRelevance+            | eta          == Just False  = Relevant+            | conInduction == CoInductive = Relevant+            | otherwise                   = minimum $ Irrelevant : (map getRelevance $ telToList ftel) +      -- Andreas, 2017-01-26, issue #2436+      -- Disallow coinductive records with eta-equality+      when (conInduction == CoInductive && etaEqualityToBool haveEta == True) $ do+        typeError . GenericDocError =<< do+          sep [ text "Agda doesn't like coinductive records with eta-equality."+              , text "If you must, use pragma"+              , text "{-# ETA" <+> prettyTCM name <+> text "#-}"+              ]+      reportSDoc "tc.rec" 30 $ text "record constructor is " <+> prettyTCM con+       -- Add the record definition.        -- Andreas, 2016-06-17, Issue #2018:@@ -176,8 +189,7 @@                   -- We retain the original user declaration [(co)inductive]                   -- in case the record turns out to be recursive.               -- Determined by positivity checker:-              , recRecursive      = False-              , recMutual         = []+              , recMutual         = Nothing               }          -- Add record constructor to signature@@ -185,6 +197,7 @@           defaultDefn defaultArgInfo conName (telh `abstract` contype) $             Constructor               { conPars   = npars+              , conArity  = size fs               , conSrcCon = con               , conData   = name               , conAbstr  = Info.defAbstract conInfo@@ -197,7 +210,7 @@         addNamedInstance conName name        -- Check that the fields fit inside the sort-      contype `fitsIn` s+      _ <- contype `fitsIn` s        {- Andreas, 2011-04-27 WRONG because field types are checked again          and then non-stricts should not yet be irrelevant@@ -251,7 +264,7 @@           [ text "record section:"           , nest 2 $ sep             [ prettyTCM m <+> (inTopContext . prettyTCM =<< getContextTelescope)-            , fsep $ punctuate comma $ map (text . show . getName) fields+            , fsep $ punctuate comma $ map (return . P.pretty . getName) fields             ]           ]         reportSDoc "tc.rec.def" 15 $ nest 2 $ vcat@@ -276,9 +289,6 @@           setDefaultModuleParameters m           checkRecordProjections m name hasNamedCon con tel' (raise 1 ftel) fields -        -- Andreas 2012-02-13: postpone polarity computation until after positivity check-        -- computePolarity name-       return ()  {-| @checkRecordProjections m r q tel ftel fs@.@@ -316,13 +326,14 @@       -- because then meta variables are created again.       -- Instead, we take the field type t from the field telescope.       reportSDoc "tc.rec.proj" 5 $ sep-        [ text "checking projection" <+> text (show x)+        [ text "checking projection" <+> prettyTCM x         , nest 2 $ vcat           [ text "top   =" <+> (inTopContext . prettyTCM =<< getContextTelescope)           , text "tel   =" <+> (inTopContext . prettyTCM $ tel)           , text "ftel1 =" <+> prettyTCM ftel1           , text "t     =" <+> prettyTCM t           , text "ftel2 =" <+> addContext ftel1 (underAbstraction_ ftel2 prettyTCM)+          , text "abstr =" <+> (text . show) (Info.defAbstract info)           ]         ] @@ -391,19 +402,21 @@             cpo    = if hasNamedCon then ConOCon else ConORec             cpi    = ConPatternInfo (Just cpo) (Just $ argFromDom $ fmap snd rt)             conp   = defaultArg $ ConP con cpi $-                     [ Arg info $ unnamed $ varP "x" | Dom info _ <- telToList ftel ]+                     [ Arg ai' $ unnamed $ varP "x" | Dom ai' _ <- telToList ftel ]             body   = Just $ bodyMod $ var (size ftel2)             cltel  = ftel-            clause = Clause { clauseRange = getRange info+            clause = Clause { clauseLHSRange  = getRange info+                            , clauseFullRange = getRange info                             , clauseTel       = killRange cltel                             , namedClausePats = [Named Nothing <$> numberPatVars __IMPOSSIBLE__ (idP $ size ftel) conp]                             , clauseBody      = body                             , clauseType      = Just $ Arg ai t                             , clauseCatchall  = False+                            , clauseUnreachable = Just False                             }          let projection = Projection-              { projProper   = True+              { projProper   = Just r               , projOrig     = projname               -- name of the record type:               , projFromType = defaultArg r@@ -433,7 +446,7 @@               -- functions.         cc <- compileClauses Nothing [clause] -        reportSDoc "tc.cc" 10 $ do+        reportSDoc "tc.cc" 60 $ do           sep [ text "compiled clauses of " <+> prettyTCM projname               , nest 2 $ text (show cc)               ]@@ -449,7 +462,7 @@                 , funCopatternLHS   = isCopatternLHS [clause]                 })               { defArgOccurrences = [StrictPos] }-          computePolarity projname+          computePolarity [projname]           when (Info.defInstance info == InstanceDef) $             addTypedInstance projname finalt 
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE CPP                      #-} {-# LANGUAGE NondecreasingIndentation #-}-{-# LANGUAGE ScopedTypeVariables      #-}  module Agda.TypeChecking.Rules.Term where @@ -16,7 +15,7 @@ import Data.Maybe import Data.Either (partitionEithers) import Data.Monoid (mappend)-import Data.List hiding (sort, null)+import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Set as Set import Data.Traversable (sequenceA)@@ -76,20 +75,21 @@ import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication) import {-# SOURCE #-} Agda.TypeChecking.Rules.Def (checkFunDef, checkFunDef', useTerPragma) +import Agda.Utils.Either import Agda.Utils.Except-  ( Error(noMsg, strMsg)-  , ExceptT+  ( ExceptT   , MonadError(catchError, throwError)   , runExceptT   )- import Agda.Utils.Functor import Agda.Utils.Lens-import Agda.Utils.List (groupOn)+import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Permutation+import Agda.Utils.Pretty ( prettyShow )+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size import Agda.Utils.Tuple @@ -131,7 +131,7 @@     A.Set _ n    -> do       return $ sort (mkType n)     A.App i s arg-      | getHiding arg == NotHidden,+      | visible arg,         A.Set _ 0 <- unScope s ->       ifNotM hasUniversePolymorphism           (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")@@ -207,30 +207,6 @@ leqType_ :: Type -> Type -> TCM () leqType_ t t' = workOnTypes $ leqType t t' -{- UNUSED--- | Force a type to be a Pi. Instantiates if necessary. The 'Hiding' is only---   used when instantiating a meta variable.--forcePi :: Hiding -> String -> Type -> TCM Type-forcePi h name (El s t) =-    do  t' <- reduce t-        case t' of-            Pi _ _      -> return $ El s t'-            _           -> do-                sa <- newSortMeta-                sb <- newSortMeta-                let s' = sLub sa sb--                a <- newTypeMeta sa-                x <- freshName_ name-                let arg = setHiding h $ defaultDom a-                b <- addContext (x, arg) $ newTypeMeta sb-                let ty = El s' $ Pi arg (Abs (show x) b)-                equalType (El s t') ty-                ty' <- reduce ty-                return ty'--}- --------------------------------------------------------------------------- -- * Telescopes ---------------------------------------------------------------------------@@ -292,7 +268,7 @@         -- modify the new context entries         modEnv LamNotPi = workOnTypes         modEnv _        = id-        modRel PiNotLam xp = if xp then irrToNonStrict else nonStrictToRel+        modRel PiNotLam xp = if xp then irrToNonStrict . nonStrictToRel else nonStrictToRel         modRel _        _  = id checkTypedBinding lamOrPi info (A.TLet _ lbs) ret = do     checkLetBindings lbs (ret [])@@ -306,7 +282,7 @@ checkLambda (Arg _ (A.TLet _ lbs)) body target =   checkLetBindings lbs (checkExpr body target) checkLambda (Arg info (A.TBind _ xs typ)) body target = do-  reportSLn "tc.term.lambda" 60 $ "checkLambda   xs = " ++ show xs+  reportSLn "tc.term.lambda" 60 $ "checkLambda   xs = " ++ prettyShow xs    let numbinds = length xs   TelV tel btyp <- telViewUpTo numbinds target@@ -349,36 +325,60 @@         -- Block on the type comparison         coerce (teleLam tel v) (telePi tel t1) target -    useTargetType tel@(ExtendTel arg (Abs y EmptyTel)) btyp = do+    useTargetType tel@(ExtendTel dom (Abs y EmptyTel)) btyp = do         verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"-        reportSLn "tc.term.lambda" 60 $ "useTargetType y  = " ++ show y+        reportSLn "tc.term.lambda" 60 $ "useTargetType y  = " ++ y          -- merge in the hiding info of the TBind+        let [WithHiding h x] = xs         info <- return $ mapHiding (mappend h) info-        unless (getHiding arg == getHiding info) $ typeError $ WrongHidingInLambda target+        unless (sameHiding dom info) $ typeError $ WrongHidingInLambda target         -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given-        let r  = getRelevance info-            r' = getRelevance arg -- relevance of function type-        when (r == Irrelevant && r' /= r) $ typeError $ WrongIrrelevanceInLambda target+        info <- lambdaIrrelevanceCheck info dom         -- Andreas, 2015-05-28 Issue 1523         -- Ensure we are not stepping under a possibly non-existing size.         -- TODO: do we need to block checkExpr?-        let a = unDom arg+        let a = unDom dom         checkSizeLtSat $ unEl a         -- We only need to block the final term on the argument type         -- comparison. The body will be blocked if necessary. We still want to         -- compare the argument types first, so we spawn a new problem for that         -- check.         (pid, argT) <- newProblem $ isTypeEqualTo typ a-        v <- add (notInScopeName y) (Dom (setRelevance r' info) argT) $ checkExpr body btyp-        blockTermOnProblem target (Lam info $ Abs (nameToArgName x) v) pid-      where-        [WithHiding h x] = xs         -- Andreas, Issue 630: take name from function type if lambda name is "_"-        add y dom | isNoName x = addContext' (y, dom)-                  | otherwise  = addContext' (x, dom)+        v <- lambdaAddContext x y (Dom info argT) $ checkExpr body btyp+        blockTermOnProblem target (Lam info $ Abs (nameToArgName x) v) pid+     useTargetType _ _ = __IMPOSSIBLE__ +-- | Check that irrelevance info in lambda is compatible with irrelevance+--   coming from the function type.+--   If lambda has no user-given relevance, copy that of function type.+lambdaIrrelevanceCheck :: LensRelevance dom => ArgInfo -> dom -> TCM ArgInfo+lambdaIrrelevanceCheck info dom+    -- Case: no specific user annotation: use relevance of function type+  | isRelevant info = return $ setRelevance (getRelevance dom) info+    -- Case: explicit user annotation is taken seriously+  | otherwise = do+      let rPi  = getRelevance dom  -- relevance of function type+      let rLam = getRelevance info -- relevance of lambda+        -- Andreas, 2017-01-24, issue #2429+        -- we should report an error if we try to check a relevant function+        -- against an irrelevant function type (subtyping violation)+      unless (moreRelevant rPi rLam) $ do+        -- @rLam == Relevant@ is impossible here+        -- @rLam == Irrelevant@ is impossible here (least relevant)+        -- this error can only happen if @rLam == NonStrict@ and @rPi == Irrelevant@+        unless (rLam == NonStrict) __IMPOSSIBLE__  -- separate tests for separate line nums+        unless (rPi == Irrelevant) __IMPOSSIBLE__+        typeError WrongIrrelevanceInLambda+      return info++lambdaAddContext :: Name -> ArgName -> Dom Type -> TCM a -> TCM a+lambdaAddContext x y dom+  | isNoName x = addContext' (notInScopeName y, dom)  -- Note: String instance+  | otherwise  = addContext' (x, dom)                 -- Name instance of addContext'+ -- | Checking a lambda whose domain type has already been checked. checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term checkPostponedLambda args@(Arg _    ([]    , _ )) body target = do@@ -388,11 +388,7 @@       lamHiding = mappend h $ getHiding info   insertHiddenLambdas lamHiding target postpone $ \ t@(El _ (Pi dom b)) -> do     -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given-    let r     = getRelevance info -- relevance of lambda-        r'    = getRelevance dom  -- relevance of function type-        info' = setHiding lamHiding $ setRelevance r' info-    when (r == Irrelevant && r' /= r) $-      typeError $ WrongIrrelevanceInLambda target+    info' <- setHiding lamHiding <$> lambdaIrrelevanceCheck info dom     -- We only need to block the final term on the argument type     -- comparison. The body will be blocked if necessary. We still want to     -- compare the argument types first, so we spawn a new problem for that@@ -403,9 +399,9 @@     -- to get better error messages.     -- Using the type dom from the usage context would be more precise,     -- though.-    let add dom | isNoName x = addContext (absName b, dom)-                | otherwise  = addContext (x, dom)-    v <- add (maybe dom (dom $>) mt) $+    let dom' = setRelevance (getRelevance info') . setHiding lamHiding $+          maybe dom (dom $>) mt+    v <- lambdaAddContext x (absName b) dom'  $       checkPostponedLambda (Arg info (xs, mt)) body $ absBody b     let v' = Lam info' $ Abs (nameToArgName x) v     maybe (return v') (blockTermOnProblem t v') mpid@@ -432,7 +428,7 @@       Pi dom b -> do         let h' = getHiding dom         -- Found expected hiding: return function type.-        if h == h' then ret t else do+        if sameHiding h h' then ret t else do           -- Found a visible argument but expected a hidden one:           -- That's an error, as we cannot insert a visible lambda.           if visible h' then typeError $ WrongHidingInLambda target else do@@ -446,13 +442,13 @@  -- | @checkAbsurdLambda i h e t@ checks absurd lambda against type @t@. --   Precondition: @e = AbsurdLam i h@-checkAbsurdLambda :: A.ExprInfo -> Hiding -> A.Expr -> Type -> TCM Term+checkAbsurdLambda :: A.LamInfo -> Hiding -> A.Expr -> Type -> TCM Term checkAbsurdLambda i h e t = do   t <- instantiateFull t   ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ $ CheckExpr e t') $ \ t' -> do     case ignoreSharing $ unEl t' of       Pi dom@(Dom info' a) b-        | h /= getHiding info' -> typeError $ WrongHidingInLambda t'+        | not (sameHiding h info') -> typeError $ WrongHidingInLambda t'         | not (null $ allMetas a) ->             postponeTypeCheckingProblem (CheckExpr e t') $               null . allMetas <$> instantiateFull a@@ -474,13 +470,15 @@                     , defArgOccurrences = [Unused] })             $ emptyFunction               { funClauses        =-                  [Clause-                    { clauseRange     = getRange e+                  [ Clause+                    { clauseLHSRange  = getRange e+                    , clauseFullRange = getRange e                     , clauseTel       = telFromList [fmap ("()",) dom]-                    , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ debruijnNamedVar "()" 0]+                    , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ AbsurdP $ debruijnNamedVar absurdPatternName 0]                     , clauseBody      = Nothing                     , clauseType      = Just $ setRelevance rel $ defaultArg $ absBody b                     , clauseCatchall  = False+                    , clauseUnreachable = Just True -- absurd clauses are unreachable                     }                   ]               , funCompiled       = Just Fail@@ -494,7 +492,7 @@  -- | @checkExtendedLambda i di qname cs e t@ check pattern matching lambda. -- Precondition: @e = ExtendedLam i di qname cs@-checkExtendedLambda :: A.ExprInfo -> A.DefInfo -> QName -> [A.Clause] ->+checkExtendedLambda :: A.LamInfo -> A.DefInfo -> QName -> [A.Clause] ->                        A.Expr -> Type -> TCM Term checkExtendedLambda i di qname cs e t = do    -- Andreas, 2016-06-16 issue #2045@@ -520,8 +518,8 @@        text "\" has type: " $$ prettyTCM t -- <+> text " where clauses: " <+> text (show cs)      args     <- getContextArgs      freevars <- getCurrentModuleFreeVars-     let argsNoParam = genericDrop freevars args -- don't count module parameters-     let (hid, notHid) = partition notVisible argsNoParam+     let argsNoParam = drop freevars args -- don't count module parameters+     let (hid, notHid) = List.partition notVisible argsNoParam      reportSDoc "tc.term.exlam" 30 $ vcat $        [ text "dropped args: " <+> prettyTCM (take freevars args)        , text "hidden  args: " <+> prettyTCM hid@@ -538,6 +536,8 @@        -- Case: we could not check the extended lambda because we are blocked on a meta.        -- In this case, we want to postpone.        Just (err, x) -> do+         reportSDoc "tc.term.exlam" 50 $ vcat $+           [ text "checking extended lambda got stuck on meta: " <+> text (show x) ]          -- Note that we messed up the state a bit.  We might want to unroll these state changes.          -- However, they are mostly harmless:          -- 1. We created a new mutual block id.@@ -550,19 +550,27 @@          -- The meta might not be known in the reset state, as it could have been created          -- somewhere on the way to the type error.          mm <- Map.lookup x <$> getMetaStore-         case mvInstantiation <$> mm of+         x' <- case mvInstantiation <$> mm of            -- Case: we do not know the meta+           -- We mine the type of the extended lambda for a (possibly) blocking meta.            Nothing -> do-             -- TODO: mine for a meta in t-             -- For now, we fail.-             throwError err+             reportSDoc "tc.term.exlam" 50 $ vcat $+               [ text "meta was not found in reset state"+               , text "trying to find meta in type of extlam..." ]+             case allMetas t of+               []    -> do+                 reportSDoc "tc.term.exlam" 50 $ text "no meta found, giving up."+                 throwError err+               (x:_) -> do+                 reportSDoc "tc.term.exlam" 50 $ text $ "found meta: " ++ show x+                 return x            -- Case: we know the meta here.            Just InstV{} -> __IMPOSSIBLE__  -- It cannot be instantiated yet.-           Just{} -> do-             -- It has to be blocked on some meta, so we can postpone,-             -- being sure it will be retired when a meta is solved-             -- (which might be the blocking meta in which case we actually make progress).-             postponeTypeCheckingProblem (CheckExpr e t) $ isInstantiatedMeta x+           Just{} -> return x+         -- It has to be blocked on some meta, so we can postpone,+         -- being sure it will be retired when a meta is solved+         -- (which might be the blocking meta in which case we actually make progress).+         postponeTypeCheckingProblem (CheckExpr e t) $ isInstantiatedMeta x'   where     -- Concrete definitions cannot use information about abstract things.     abstract ConcreteDef = inConcreteMode@@ -573,11 +581,16 @@ --   * If successful, return Nothing. -- --   * If @IlltypedPattern p a@ is thrown and type @a@ is blocked on some meta @x@---     return @Just x@.  Note that the returned meta might only exists in the state---     where the error was thrown, thus, be an invalid 'MetaId' in the current state.+--     return @Just x@. --+--   * If @SplitError (UnificationStuck c tel us vs _)@ is thrown and the unification+--     problem @us =?= vs : tel@ is blocked on some meta @x@ return @Just x@.+-- --   * If another error was thrown or the type @a@ is not blocked, reraise the error. --+--   Note that the returned meta might only exists in the state where the error was+--   thrown, thus, be an invalid 'MetaId' in the current state.+-- catchIlltypedPatternBlockedOnMeta :: TCM () -> TCM (Maybe (TCErr, MetaId)) catchIlltypedPatternBlockedOnMeta m = (Nothing <$ do disableDestructiveUpdate m)   `catchError` \ err -> do@@ -589,6 +602,14 @@         enterClosure cl $ \ _ -> do           ifBlockedType a (\ x _ -> return $ Just x) $ {- else -} \ _ -> return Nothing       caseMaybe mx reraise $ \ x -> return $ Just (err, x)+    TypeError s cl@Closure{ clValue = SplitError (UnificationStuck c tel us vs _) } -> do+      mx <- localState $ do+        put s+        enterClosure cl $ \ _ -> do+          problem <- reduce =<< instantiateFull (flattenTel tel, us, vs)+          -- over-approximating the set of metas actually blocking unification+          return $ listToMaybe $ allMetas problem+      caseMaybe mx reraise $ \ x -> return $ Just (err, x)     _ -> reraise  ---------------------------------------------------------------------------@@ -598,7 +619,7 @@ expandModuleAssigns :: [Either A.Assign A.ModuleName] -> [C.Name] -> TCM A.Assigns expandModuleAssigns mfs exs = do   let (fs , ms) = partitionEithers mfs-      exs' = exs \\ map (view nameFieldA) fs+      exs' = exs List.\\ map (view nameFieldA) fs   fs' <- forM exs' $ \ f -> do     pms <- forM ms $ \ m -> do        modScope <- getNamedScope m@@ -612,7 +633,11 @@     case catMaybes pms of       []        -> return Nothing       [(_, fa)] -> return (Just fa)-      mfas      -> typeError $ GenericError $ "Ambiguity: the field " ++ show f ++ " appears in the following modules " ++ show (map fst mfas)+      mfas      -> typeError . GenericDocError =<< do+        vcat $+          [ text "Ambiguity: the field" <+> prettyTCM f+            <+> text "appears in the following modules: " ]+          ++ map (prettyTCM . fst) mfas   return (fs ++ catMaybes fs')  -- | @checkRecordExpression fs e t@ checks record construction against type @t@.@@ -628,27 +653,27 @@     -- Case: We know the type of the record already.     Def r es  -> do       let ~(Just vs) = allApplyElims es-      reportSDoc "tc.term.rec" 20 $ text $ "  r   = " ++ show r+      reportSDoc "tc.term.rec" 20 $ text $ "  r   = " ++ prettyShow r        reportSDoc "tc.term.rec" 30 $ text "  xs  = " <> do-        text =<< show . map unArg <$> getRecordFieldNames r+        text =<< prettyShow . map unArg <$> getRecordFieldNames r       reportSDoc "tc.term.rec" 30 $ text "  ftel= " <> do         prettyTCM =<< getRecordFieldTypes r       reportSDoc "tc.term.rec" 30 $ text "  con = " <> do-        text =<< show <$> getRecordConstructor r+        text =<< prettyShow <$> getRecordConstructor r        def <- getRecordDef r       let -- Field names with ArgInfo.           axs  = recordFieldNames def-          exs  = filter notHidden axs+          exs  = filter visible axs           -- Just field names.           xs   = map unArg axs           -- Record constructor.           con  = killRange $ recConHead def       reportSDoc "tc.term.rec" 20 $ vcat-        [ text $ "  xs  = " ++ show xs-        , text   "  ftel= " <> prettyTCM (recTel def)-        , text $ "  con = " ++ show con+        [ text "  xs  = " <> return (P.pretty xs)+        , text "  ftel= " <> prettyTCM (recTel def)+        , text "  con = " <> return (P.pretty con)         ]        -- Compute the list of given fields, decorated with the ArgInfo from the record def.@@ -657,7 +682,7 @@       -- Compute a list of metas for the missing visible fields.       scope <- getScope       let re = getRange e-          meta x = A.Underscore $ A.MetaInfo re scope Nothing (show x)+          meta x = A.Underscore $ A.MetaInfo re scope Nothing (prettyShow x)       -- In @es@ omitted explicit fields are replaced by underscores.       -- Omitted implicit or instance fields       -- are still left out and inserted later by checkArguments_.@@ -679,8 +704,8 @@           -- If there are no records with the right fields we might as well fail right away.         [] -> case fields of           []  -> typeError $ GenericError "There are no records in scope"-          [f] -> typeError $ GenericError $ "There is no known record with the field " ++ show f-          _   -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map show fields)+          [f] -> typeError $ GenericError $ "There is no known record with the field " ++ prettyShow f+          _   -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map prettyShow fields)           -- If there's only one record with the appropriate fields, go with that.         [r] -> do           def <- getConstInfo r@@ -740,7 +765,7 @@     _         -> typeError $ ShouldBeRecordType t   where     replaceFields :: Name -> A.ExprInfo -> Arg A.QName -> Maybe A.Expr -> Maybe A.Expr-    replaceFields n ei a@(Arg _ p) Nothing | notHidden a =+    replaceFields n ei a@(Arg _ p) Nothing | visible a =         Just $ A.App ei (A.Def p) $ defaultNamedArg $ A.Var n     replaceFields _ _  (Arg _ _) Nothing  = Nothing     replaceFields _ _  _         (Just e) = Just $ e@@ -802,7 +827,7 @@     reportSDoc "tc.term.expr.top" 15 $         text "Checking" <+> sep           [ fsep [ prettyTCM e, text ":", prettyTCM t0 ]-          , nest 2 $ text "at " <+> (text . show =<< getCurrentRange)+          , nest 2 $ text "at " <+> (text . prettyShow =<< getCurrentRange)           ]     reportSDoc "tc.term.expr.top.detailed" 80 $       text "Checking" <+> fsep [ prettyTCM e, text ":", text (show t0) ]@@ -812,37 +837,12 @@      e <- scopedExpr e -    case e of+    tryInsertHiddenLambda e t $ case e of          A.ScopedExpr scope e -> __IMPOSSIBLE__ -- setScope scope >> checkExpr e t -        -- Insert hidden lambda if all of the following conditions are met:-            -- type is a hidden function type, {x : A} -> B or {{x : A} -> B-        _   | Pi (Dom info _) b <- ignoreSharing $ unEl t-            , let h = getHiding info-            , notVisible h-            -- expression is not a matching hidden lambda or question mark-            , not (hiddenLambdaOrHole h e)-            -> do-                x <- unshadowName <=< freshName rx $ notInScopeName $ absName b-                reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda"-                checkExpr (A.Lam (A.ExprRange re) (domainFree info x) e) t-            where-                re = getRange e-                rx = caseMaybe (rStart re) noRange $ \ pos -> posToRange pos pos--                hiddenLambdaOrHole h e = case e of-                  A.AbsurdLam _ h'        -> h == h'-                  A.ExtendedLam _ _ _ cls -> any hiddenLHS cls-                  A.Lam _ bind _          -> h == getHiding bind-                  A.QuestionMark{}        -> True-                  _                       -> False--                hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _ _ _) = notVisible a-                hiddenLHS _ = False-         -- a meta variable without arguments: type check directly for efficiency-        A.QuestionMark i ii -> checkQuestionMark (newValueMeta' DontRunMetaOccursCheck) t0 i ii+        A.QuestionMark i ii -> checkQuestionMark (newValueMeta' RunMetaOccursCheck) t0 i ii         A.Underscore i -> checkUnderscore t0 i          A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application"@@ -870,11 +870,14 @@           let quoted (A.Def x) = return x               quoted (A.Macro x) = return x               quoted (A.Proj o (AmbQ [x])) = return x-              quoted (A.Proj o (AmbQ xs))  = typeError $ GenericError $ "quote: Ambigous name: " ++ show xs+              quoted (A.Proj o (AmbQ xs))  =+                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow xs               quoted (A.Con (AmbQ [x])) = return x-              quoted (A.Con (AmbQ xs))  = typeError $ GenericError $ "quote: Ambigous name: " ++ show xs+              quoted (A.Con (AmbQ xs))  =+                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow xs               quoted (A.ScopedExpr _ e) = quoted e-              quoted _                  = typeError $ GenericError $ "quote: not a defined name"+              quoted _                  =+                typeError $ GenericError $ "quote: not a defined name"           x <- quoted (namedThing e)           ty <- qNameType           coerce (quoteName x) ty t@@ -977,6 +980,67 @@         -- Application         _   | Application hd args <- appView e -> checkApplication hd args e t +  where+  -- | Call checkExpr with an hidden lambda inserted if appropriate,+  --   else fallback.+  tryInsertHiddenLambda :: A.Expr -> Type -> TCM Term -> TCM Term+  tryInsertHiddenLambda e t fallback+    -- Insert hidden lambda if all of the following conditions are met:+        -- type is a hidden function type, {x : A} -> B or {{x : A}} -> B+    | Pi (Dom info a) b <- ignoreSharing $ unEl t+        , let h = getHiding info+        , notVisible h+        -- expression is not a matching hidden lambda or question mark+        , not (hiddenLambdaOrHole h e)+        = do+      let proceed = doInsert info $ absName b+      -- If we skip the lambda insertion for an introduction,+      -- we will hit a dead end, so proceed no matter what.+      if definitelyIntroduction then proceed else do+        -- Andreas, 2017-01-19, issue #2412:+        -- We do not want to insert a hidden lambda if A is+        -- possibly empty type of sizes, as this will produce an error.+        reduce a >>= isSizeType >>= \case+          Just (BoundedLt u) -> ifBlocked u (\ _ _ -> fallback) $ \ v -> do+            ifM (checkSizeNeverZero v) proceed fallback+          _ -> proceed++    | otherwise = fallback++    where+    re = getRange e+    rx = caseMaybe (rStart re) noRange $ \ pos -> posToRange pos pos++    doInsert info y = do+      x <- unshadowName <=< freshName rx $ notInScopeName y+      reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda"+      checkExpr (A.Lam (A.defaultLamInfo re) (domainFree info x) e) t++    hiddenLambdaOrHole h e = case e of+      A.AbsurdLam _ h'        -> sameHiding h h'+      A.ExtendedLam _ _ _ cls -> any hiddenLHS cls+      A.Lam _ bind _          -> sameHiding h bind+      A.QuestionMark{}        -> True+      _                       -> False++    hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _ _ _ _) = notVisible a+    hiddenLHS _ = False++    -- Things with are definitely introductions,+    -- thus, cannot be of hidden Pi-type, unless they are hidden lambdas.+    definitelyIntroduction = case e of+      A.Lam{}        -> True+      A.AbsurdLam{}  -> True+      A.Lit{}        -> True+      A.Pi{}         -> True+      A.Fun{}        -> True+      A.Set{}        -> True+      A.Prop{}       -> True+      A.Rec{}        -> True+      A.RecUpdate{}  -> True+      A.ScopedExpr{} -> __IMPOSSIBLE__+      A.ETel{}       -> __IMPOSSIBLE__+      _ -> False --------------------------------------------------------------------------- -- * Reflection ---------------------------------------------------------------------------@@ -1069,7 +1133,7 @@ inferOrCheckProjApp e o ds args mt = do   reportSDoc "tc.proj.amb" 20 $ vcat     [ text "checking ambiguous projection"-    , text $ "  ds   = " ++ show ds+    , text $ "  ds   = " ++ prettyShow ds     , text   "  args = " <+> sep (map prettyTCM args)     , text   "  t    = " <+> caseMaybe mt (text "Nothing") prettyTCM     ]@@ -1077,7 +1141,7 @@   let refuse :: String -> TCM (Term, Type)       refuse reason = typeError $ GenericError $         "Cannot resolve overloaded projection "-        ++ show (A.nameConcrete $ A.qnameName $ head ds)+        ++ prettyShow (A.nameConcrete $ A.qnameName $ fromMaybe __IMPOSSIBLE__ $ headMaybe ds)         ++ " because " ++ reason       refuseNotApplied = refuse "it is not applied to a visible argument"       refuseNoMatching = refuse "no matching candidate found"@@ -1099,7 +1163,7 @@   -- For now, we only allow ambiguous projections if the first visible   -- argument is the record value. -  case filter (visible . getHiding . snd) $ zip [0..] args of+  case filter (visible . snd) $ zip [0..] args of      -- Case: we have no visible argument to the projection.     -- In inference mode, we really need the visible argument, postponing does not help@@ -1113,7 +1177,7 @@       caseMaybeM (isRecordType ta) refuseNotRecordType $ \ (_q, _pars, defn) -> do       case defn of         Record { recFields = fs } -> do-          case catMaybes $ for fs $ \ (Arg _ f) -> find (f ==) ds of+          case catMaybes $ for fs $ \ (Arg _ f) -> List.find (f ==) ds of             [] -> refuseNoMatching             [d] -> do               storeDisambiguatedName d@@ -1137,12 +1201,31 @@           -- try to project it with all of the possible projections           let try d = do               reportSDoc "tc.proj.amb" 30 $ vcat-                [ text $ "trying projection " ++ show d+                [ text $ "trying projection " ++ prettyShow d                 , text "  td  = " <+> caseMaybeM (getDefType d ta) (text "Nothing") prettyTCM                 ]+               -- get the original projection name-              Projection{ projProper = proper, projOrig = orig } <- MaybeT $ isProjection d-              guard proper+              isP <- isProjection d+              reportSDoc "tc.proj.amb" 40 $ vcat $+                [ text $ "  isProjection = " ++ caseMaybe isP "no" (const "yes")+                ] ++ caseMaybe isP [] (\ Projection{ projProper = proper, projOrig = orig } ->+                [ text $ "  proper       = " ++ show proper+                , text $ "  orig         = " ++ prettyShow orig+                ])++              -- Andreas, 2017-01-21, issue #2422+              -- The scope checker considers inherited projections (from nested records)+              -- as projections and allows overloading.  However, since they are defined+              -- as *composition* of projections, the type checker does *not* recognize them,+              -- and @isP@ will be @Nothing@.+              -- However, we can ignore this, as we only need the @orig@inal projection name+              -- for removing false ambiguity.  Thus, we skip these checks:++              -- Projection{ projProper = proper, projOrig = orig } <- MaybeT $ return isP+              -- guard $ isJust proper+              let orig = caseMaybe isP d projOrig+               -- try to eliminate               (dom, u, tb) <- MaybeT (projectTyped v ta o d `catchError` \ _ -> return Nothing)               reportSDoc "tc.proj.amb" 30 $ vcat@@ -1174,7 +1257,7 @@             [] -> refuseNoMatching             [[]] -> refuseNoMatching             (_:_:_) -> refuse $ "several matching candidates found: "-                 ++ show (map (fst . snd) $ concat cands)+                 ++ prettyShow (map (fst . snd) $ concat cands)             -- case: just one matching projection d             -- the term u = d v             -- the type tb is the type of this application@@ -1235,49 +1318,62 @@     A.Proj o (AmbQ ds@(_:_:_)) -> checkProjApp e o ds args t      -- Subcase: ambiguous constructor-    A.Con (AmbQ cs@(_:_:_)) -> do+    A.Con (AmbQ cs0@(_:_:_)) -> do       -- First we should figure out which constructor we want.-      reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ show cs+      reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ prettyShow cs0        -- Get the datatypes of the various constructors       let getData Constructor{conData = d} = d           getData _                        = __IMPOSSIBLE__-      reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs)+      reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs0)       -- We use the reduced constructor when disambiguating, but       -- the original constructor for type checking. This is important       -- since they may have different types (different parameters).       -- See issue 279.-      cons  <- mapM getConForm cs-      reportSLn "tc.check.term" 40 $ "  reduced: " ++ show cons-      dcs <- zipWithM (\ c con -> (, setConName c con) . getData . theDef <$> getConInfo con) cs cons-      -- Type error-      let badCon t = typeError $ DoesNotConstructAnElementOf (head cs) t-      -- Lets look at the target type at this point-      let getCon :: TCM (Maybe ConHead)-          getCon = do-            TelV tel t1 <- telView t-            addContext tel $ do-             reportSDoc "tc.check.term.con" 40 $ nest 2 $-               text "target type: " <+> prettyTCM t1-             ifBlockedType t1 (\ m t -> return Nothing) $ \ t' ->-               caseMaybeM (isDataOrRecord $ unEl t') (badCon t') $ \ d ->-                 case [ c | (d', c) <- dcs, d == d' ] of-                   [c] -> do-                     reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c-                     storeDisambiguatedName $ conName c-                     return $ Just c-                   []  -> badCon $ t' $> Def d []-                   cs  -> typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d $ map conName cs-      let unblock = isJust <$> getCon -- to unblock, call getCon later again-      mc <- getCon-      case mc of-        Just c  -> checkConstructorApplication e t c args-        Nothing -> postponeTypeCheckingProblem (CheckExpr e t) unblock+      -- Andreas, 2017-08-13, issue #2686: ignore abstract constructors+      (cs, cons)  <- unzip . snd . partitionEithers <$> do+         forM cs0 $ \ c -> mapRight (c,) <$> getConForm c+      reportSLn "tc.check.term" 40 $ "  reduced: " ++ prettyShow cons+      case cons of+        []  -> typeError $ AbstractConstructorNotInScope $+                 fromMaybe __IMPOSSIBLE__ $ headMaybe cs0+        [con] -> do+          let c = setConName (fromMaybe __IMPOSSIBLE__ $ headMaybe cs) con+          reportSLn "tc.check.term" 40 $ "  only one non-abstract constructor: " ++ prettyShow c+          storeDisambiguatedName $ conName c+          checkConstructorApplication e t c args+        _   -> do+          dcs <- zipWithM (\ c con -> (, setConName c con) . getData . theDef <$> getConInfo con) cs cons+          -- Type error+          let badCon t = typeError $ flip DoesNotConstructAnElementOf t $+                fromMaybe __IMPOSSIBLE__ $ headMaybe cs+          -- Lets look at the target type at this point+          let getCon :: TCM (Maybe ConHead)+              getCon = do+                TelV tel t1 <- telView t+                addContext tel $ do+                 reportSDoc "tc.check.term.con" 40 $ nest 2 $+                   text "target type: " <+> prettyTCM t1+                 ifBlockedType t1 (\ m t -> return Nothing) $ \ t' ->+                   caseMaybeM (isDataOrRecord $ unEl t') (badCon t') $ \ d ->+                     case [ c | (d', c) <- dcs, d == d' ] of+                       [c] -> do+                         reportSLn "tc.check.term" 40 $ "  decided on: " ++ prettyShow c+                         storeDisambiguatedName $ conName c+                         return $ Just c+                       []  -> badCon $ t' $> Def d []+                       cs  -> typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d $ map conName cs+          let unblock = isJust <$> getCon -- to unblock, call getCon later again+          mc <- getCon+          case mc of+            Just c  -> checkConstructorApplication e t c args+            Nothing -> postponeTypeCheckingProblem (CheckExpr e t) unblock      -- Subcase: non-ambiguous constructor     A.Con (AmbQ [c]) -> do       -- augment c with record fields, but do not revert to original name-      con <- getOrigConHead c+      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) =<<+        getOrigConHead c       checkConstructorApplication e t con args      -- Subcase: pattern synonym@@ -1344,7 +1440,7 @@           --  Unify Z a b == A           --  Run the tactic on H           tel    <- metaTel args                    -- (x : X) (y : Y x)-          target <- addContext tel newTypeMeta_      -- Z x y+          target <- addContext' tel newTypeMeta_      -- Z x y           let holeType = telePi_ tel target         -- (x : X) (y : Y x) → Z x y           (vs, EmptyTel) <- checkArguments_ ExpandLast (getRange args) args tel                                                     -- a b : (x : X) (y : Y x)@@ -1358,10 +1454,16 @@         metaTel (arg : args) = do           a <- newTypeMeta_           let dom = a <$ domFromArg arg-          ExtendTel dom . Abs "x" <$> addContext ("x", dom) (metaTel args)+          ExtendTel dom . Abs "x" <$> addContext' ("x", dom) (metaTel args)      -- Subcase: defined symbol or variable.-    _ -> checkHeadApplication e t hd args+    _ -> do+      v <- checkHeadApplication e t hd args+      reportSDoc "tc.term.app" 30 $ vcat+        [ text "checkApplication: checkHeadApplication returned"+        , nest 2 $ text "v = " <+> prettyTCM v+        ]+      return v  --------------------------------------------------------------------------- -- * Meta variables@@ -1411,7 +1513,11 @@     -- Rechecking an existing metavariable     Just x -> do       let v = MetaV x []+      reportSDoc "tc.meta.check" 20 $+        text "checking existing meta " <+> prettyTCM v       t' <- jMetaType . mvJudgement <$> lookupMeta x+      reportSDoc "tc.meta.check" 20 $+        nest 2 $ text "of type " <+> prettyTCM t'       case mt of         Nothing -> return (v, t')         Just t  -> (,t) <$> coerce v t' t@@ -1427,7 +1533,7 @@       { A.metaRange          = r       , A.metaScope          = emptyScopeInfo       , A.metaNumber         = Nothing-      , A.metaNameSuggestion = show $ A.nameConcrete x+      , A.metaNameSuggestion = prettyShow $ A.nameConcrete x       }  ---------------------------------------------------------------------------@@ -1452,9 +1558,9 @@     (A.Var x) -> do -- traceCall (InferVar x) $ do       (u, a) <- getVarInfo x       reportSDoc "tc.term.var" 20 $ hsep-        [ text "variable" , text (show x)+        [ text "variable" , prettyTCM x         , text "(" , text (show u) , text ")"-        , text "has type:" , text (show a)+        , text "has type:" , prettyTCM a         ]       when (unusableRelevance $ getRelevance a) $         typeError $ VariableIsIrrelevant x@@ -1470,16 +1576,17 @@        -- First, inferDef will try to apply the constructor       -- to the free parameters of the current context. We ignore that.-      con <- getOrigConHead c+      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) =<<+        getOrigConHead c       (u, a) <- inferDef (\ _ -> Con con ConOCon []) c        -- Next get the number of parameters in the current context.       Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c) -      reportSLn "tc.term.con" 7 $ unwords [show c, "has", show n, "parameters."]+      reportSLn "tc.term.con" 7 $ unwords [prettyShow c, "has", show n, "parameters."]        -- So when applying the constructor throw away the parameters.-      return (apply u . genericDrop n, a)+      return (apply u . drop n, a)     (A.Con _) -> __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors     (A.QuestionMark i ii) -> inferMeta (newQuestionMark ii) i     (A.Underscore i)   -> inferMeta (newValueMeta RunMetaOccursCheck) i@@ -1505,6 +1612,8 @@     -- since x is considered living in the top-level, we have to     -- apply it to the current context     vs <- freeVarsToApply x+    reportSDoc "tc.term.def" 60 $ do+      text "freeVarsToApply to def " <+> hsep (map (text . show) vs)     reportSDoc "tc.term.def" 10 $ do       text "inferred def " <+> prettyTCM x <+> hsep (map prettyTCM vs)     let t = defType d@@ -1552,7 +1661,7 @@            reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n'   = " ++ show n'            when (n > n')  -- preprocessor does not like ', so put on next line              __IMPOSSIBLE__-           let ps    = genericTake n $ genericDrop (n' - n) vs+           let ps    = take n $ drop (n' - n) vs                ctype = defType cdef            reportSDoc "tc.term.con" 20 $ vcat              [ text "special checking of constructor application of" <+> prettyTCM c@@ -1603,7 +1712,7 @@         h    = getHiding arg          namedPar   x = dropPar ((x ==) . unDom)-        unnamedPar h = dropPar ((h ==) . getHiding)+        unnamedPar h = dropPar (sameHiding h)          dropPar this (p : ps) | this p    = Just ps                               | otherwise = dropPar this ps@@ -1676,17 +1785,17 @@             prettyTCM fType <+> text "?<=" <+> prettyTCM eType           ]         blockTerm t $ f vs <$ workOnTypes (do-          addContext eTel $ leqType fType eType+          addContext' eTel $ leqType fType eType           compareTel t t1 CmpLeq eTel fTel)      (A.Def c) | Just c == (nameOfSharp <$> kit) -> do       arg <- case args of-               [a] | getHiding a == NotHidden -> return $ namedArg a-               _ -> typeError $ GenericError $ show c ++ " must be applied to exactly one argument."+               [a] | visible a -> return $ namedArg a+               _ -> typeError $ GenericError $ prettyShow c ++ " must be applied to exactly one argument."        -- The name of the fresh function.       i <- fresh :: TCM Int-      let name = filter (/= '_') (show $ A.nameConcrete $ A.qnameName c) ++ "-" ++ show i+      let name = filter (/= '_') (prettyShow $ A.nameConcrete $ A.qnameName c) ++ "-" ++ show i        kit <- coinductionKit'       let flat = nameOfFlat kit@@ -1717,7 +1826,7 @@             core   = A.LHSProj { A.lhsDestructor = AmbQ [flat]                                , A.lhsFocus      = defaultNamedArg $ A.LHSHead c' []                                , A.lhsPatsRight  = [] }-            clause = A.Clause (A.LHS (A.LHSRange noRange) core []) []+            clause = A.Clause (A.LHS (A.LHSRange noRange) core []) [] []                               (A.RHS arg Nothing)                               [] False @@ -1766,11 +1875,7 @@     checkArguments' expandLast (getRange hd) args t0 t $ \vs t1 -> do       coerce (f vs) t1 t -traceCallE ::-#if !MIN_VERSION_transformers(0,4,1)-  Error e =>-#endif-  Call -> ExceptT e TCM r -> ExceptT e TCM r+traceCallE :: Call -> ExceptT e TCM r -> ExceptT e TCM r traceCallE call m = do   z <- lift $ traceCall call $ runExceptT m   case z of@@ -1806,8 +1911,8 @@ checkKnownArgument arg@(Arg info e) (Arg _infov v : vs) t = do   (Dom info' a, b) <- mustBePi t   -- Skip the arguments from vs that do not correspond to e-  if not (getHiding info == getHiding info'-          && (notHidden info || maybe True ((absName b ==) . rangedThing) (nameOf e)))+  if not (sameHiding info info'+          && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)))     -- Continue with the next one     then checkKnownArgument arg vs (b `absApp` v)     -- Found the right argument@@ -1828,8 +1933,10 @@           [ fsep [ prettyTCM arg, text ":", prettyTCM t0 ]           ]     reportSLn "tc.term.args.named" 75 $ "  arg = " ++ show (deepUnscope arg)-    let checkU = checkMeta (newMetaArg info x) t0-    let checkQ = checkQuestionMark (newInteractionMetaArg info x) t0+    -- Ulf, 2017-03-24: (#2172) Always treat explicit _ and ? as implicit+    -- argument (i.e. solve with unification).+    let checkU = checkMeta (newMetaArg (setHiding Hidden info) x) t0+    let checkQ = checkQuestionMark (newInteractionMetaArg (setHiding Hidden info) x) t0     if not $ isHole e then checkExpr e t0 else localScope $ do       -- Note: we need localScope here,       -- as scopedExpr manipulates the scope in the state.@@ -1865,11 +1972,11 @@       t1' <- unEl <$> reduce t1       implicitArgs (-1) (expand t1') t0     where-      expand (Pi (Dom info _) _)   Hidden = getHiding info /= Hidden &&+      expand (Pi (Dom info _) _)   Hidden = not (hidden info) &&                                             exh == ExpandLast       expand _                     Hidden = exh == ExpandLast-      expand (Pi (Dom info _) _) Instance = getHiding info /= Instance-      expand _                   Instance = True+      expand (Pi (Dom info _) _) Instance{} = not $ isInstance info+      expand _                   Instance{} = True       expand _                  NotHidden = False  -- Case: argument given.@@ -1891,7 +1998,7 @@           expand NotHidden y = False           -- insert a hidden argument if arg is not hidden or has different name           -- insert an instance argument if arg is not instance  or has different name-          expand hy        y = hy /= hx || maybe False (y /=) mx+          expand hy        y = not (sameHiding hy hx) || maybe False (y /=) mx       (nargs, t) <- lift $ implicitNamedArgs (-1) expand t0       -- Separate names from args.       let (mxs, us) = unzip $ map (\ (Arg ai (Named mx u)) -> (mx, Arg ai u)) nargs@@ -1904,7 +2011,7 @@         -- 1. We ran out of function types.         let shouldBePi               -- a) It is an explicit argument, but we ran out of function types.-              | notHidden info = lift $ typeError $ ShouldBePi t0'+              | visible info = lift $ typeError $ ShouldBePi t0'               -- b) It is an implicit argument, and we did not insert any implicits.               --    Thus, the type was not a function type to start with.               | null xs        = lift $ typeError $ ShouldBePi t0'@@ -1924,8 +2031,8 @@         -- t0' <- lift $ forcePi (getHiding info) (maybe "_" rangedThing $ nameOf e) t0'         case ignoreSharing $ unEl t0' of           Pi (Dom info' a) b-            | getHiding info == getHiding info'-              && (notHidden info || maybe True ((absName b ==) . rangedThing) (nameOf e)) -> do+            | sameHiding info info'+              && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)) -> do                 u <- lift $ applyRelevanceToContext (getRelevance info') $ do                  -- Andreas, 2014-05-30 experiment to check non-dependent arguments                  -- after the spine has been processed.  Allows to propagate type info@@ -1949,7 +2056,7 @@                 reportSDoc "error" 10 $ nest 2 $ vcat                   [ text $ "info      = " ++ show info                   , text $ "info'     = " ++ show info'-                  , text $ "absName b = " ++ show (absName b)+                  , text $ "absName b = " ++ absName b                   , text $ "nameOf e  = " ++ show (nameOf e)                   ]                 wrongPi@@ -1987,9 +2094,18 @@ inferExpr = inferExpr' DontExpandLast  inferExpr' :: ExpandHidden -> A.Expr -> TCM (Term, Type)-inferExpr' exh e = case e of-  _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do-    case hd of+inferExpr' exh e = do+  let Application hd args = appView e+  reportSDoc "tc.infer" 30 $ vcat+    [ text "inferExpr': appView of " <+> prettyA e+    , text "  hd   = " <+> prettyA hd+    , text "  args = " <+> prettyAs args+    ]+  reportSDoc "tc.infer" 60 $ vcat+    [ text $ "  hd (raw) = " ++ show hd+    ]+  if not $ defOrVar hd then fallback else traceCall (InferExpr e) $ do+    case unScope $ hd of       A.Proj o (AmbQ ds@(_:_:_)) -> inferProjApp e o ds args       _ -> do         (f, t0) <- inferHead hd@@ -1997,7 +2113,6 @@         case res of           Right (vs, t1) -> return (f vs, t1)           Left t1 -> fallback -- blocked on type t1-  _ -> fallback   where     fallback = do       t <- workOnTypes $ newTypeMeta_@@ -2027,7 +2142,7 @@     (f, t0) <- inferHead hd     res <- runErrorT $ checkArguments DontExpandLast                                       (getRange hd) args t0 $-                                      maybe (sort Prop) id mt+                                      fromMaybe (sort Prop) mt     case res of       Right (vs, t1) -> maybe (return (f vs, t1))                               (\ t -> (,t) <$> coerce (f vs) t1 t)@@ -2072,14 +2187,14 @@         typeError $ WithOnFreeVariable e v0       _        -> return ()     -- Possibly insert hidden arguments.-    TelV tel t0 <- telViewUpTo' (-1) ((NotHidden /=) . getHiding) t+    TelV tel t0 <- telViewUpTo' (-1) (not . visible) t     case ignoreSharing $ unEl t0 of       Def d vs -> do         res <- isDataOrRecordType d         case res of           Nothing -> return (v, t)           Just{}  -> do-            (args, t1) <- implicitArgs (-1) (NotHidden /=) t+            (args, t1) <- implicitArgs (-1) notVisible t             return (v `apply` args, t1)       _ -> return (v, t) @@ -2113,7 +2228,7 @@         ]       ]     fvs <- getContextSize-    checkLeftHandSide (CheckPattern p EmptyTel t) Nothing [p0] t0 Nothing $ \ (LHSResult _ delta0 ps _t _ asb) -> bindAsPatterns asb $ do+    checkLeftHandSide (CheckPattern p EmptyTel t) Nothing [p0] t0 Nothing [] $ \ (LHSResult _ delta0 ps _t _ asb) -> bindAsPatterns asb $ do           -- After dropping the free variable patterns there should be a single pattern left.       let p = case drop fvs ps of [p] -> namedArg p; _ -> __IMPOSSIBLE__           -- Also strip the context variables from the telescope@@ -2167,7 +2282,7 @@         -- We get list of names of the let-bound vars from the context.         let xs   = map (fst . unDom) (reverse binds)         -- We add all the bindings to the context.-        foldr (uncurry4 addLetBinding) ret $ zip4 infos xs sigma ts+        foldr (uncurry4 addLetBinding) ret $ List.zip4 infos xs sigma ts  checkLetBinding (A.LetApply i x modapp copyInfo _adir) ret = do   -- Any variables in the context that doesn't belong to the current
src/full/Agda/TypeChecking/Serialise.hs view
@@ -61,7 +61,7 @@ -- 32-bit machines). Word64 does not have these problems.  currentInterfaceVersion :: Word64-currentInterfaceVersion = 20161119 * 10 + 0+currentInterfaceVersion = 20170907 * 10 + 0  -- | Encodes something. To ensure relocatability file paths in -- positions are replaced with module names.@@ -78,7 +78,7 @@       qnameC       stats _ _) <- liftIO $ emptyDict collectStats     root <- liftIO $ (`runReaderT` newD) $ do-       icodeFileMod fileMod+       icodeFileMod fileMod  -- Only fills absPathD from fileMod        icode a     nL <- benchSort $ l nD     sL <- benchSort $ l sD
src/full/Agda/TypeChecking/Serialise/Base.hs view
@@ -1,6 +1,13 @@-{-# LANGUAGE CPP                       #-}-{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE UndecidableInstances #-} +#if __GLASGOW_HASKELL__ <= 708+{-# OPTIONS_GHC -fcontext-stack=30 #-}+#endif+ module Agda.TypeChecking.Serialise.Base where  import Control.Applicative@@ -8,6 +15,8 @@ import Control.Monad.Reader import Control.Monad.State.Strict (StateT, gets) +import Data.Proxy+ import Data.Array.IArray import qualified Data.ByteString.Lazy as L import Data.Hashable@@ -28,6 +37,7 @@ import Agda.Utils.Monad import Agda.Utils.Pointer import Agda.Utils.Except (ExceptT, throwError)+import Agda.Utils.TypeLevel  -- | Constructor tag (maybe omitted) and argument indices. @@ -284,8 +294,8 @@         H.insert d key fresh         return fresh -icodeN :: Node -> S Int32-icodeN key = do+icodeNode :: Node -> S Int32+icodeNode key = do   d <- asks nodeD   c <- asks nodeC   liftIO $ do@@ -346,316 +356,87 @@           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+-- | @icodeArgs proxy (a1, ..., an)@ maps @icode@ over @a1@, ..., @an@+--   and returns the corresponding list of @Int32@. -icode4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>-          Int32 -> a -> b -> c -> d ->-          S Int32+class ICODE t b where+  icodeArgs :: IsBase t ~ b => All EmbPrj (Domains t) =>+               Proxy t -> Products (Domains t) -> S [Int32] -icode5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>-          Int32 -> a -> b -> c -> d -> e ->-          S Int32+instance IsBase t ~ 'True => ICODE t 'True where+  icodeArgs _ _  = return [] -icode6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>-          Int32 -> a -> b -> c -> d -> e -> f ->-          S Int32+instance ICODE t (IsBase t) => ICODE (a -> t) 'False where+  icodeArgs _ (a , as) = icode a >>= \ hd -> (hd :) <$> icodeArgs (Proxy :: Proxy t) as -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+-- | @icodeN tag t a1 ... an@ serialises the arguments @a1@, ..., @an@ of the+--   constructor @t@ together with a tag @tag@ picked to disambiguate between+--   different constructors.+--   It corresponds to @icodeNode . (tag :) =<< mapM icode [a1, ..., an]@ -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+{-# INLINE icodeN #-}+icodeN :: forall t. ICODE t (IsBase t) => Currying (Domains t) (S Int32) =>+          All EmbPrj (Domains t) =>+          Int32 -> t -> Arrows (Domains t) (S Int32)+icodeN tag _ =+  currys (Proxy :: Proxy (Domains t)) (Proxy :: Proxy (S Int32)) $ \ args ->+  icodeNode . (tag :) =<< icodeArgs (Proxy :: Proxy t) args -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+-- | @icodeN'@ is the same as @icodeN@ except that there is no tag+{-# INLINE icodeN' #-}+icodeN' :: forall t. ICODE t (IsBase t) => Currying (Domains t) (S Int32) =>+           All EmbPrj (Domains t) =>+           t -> Arrows (Domains t) (S Int32)+icodeN' _ =+  currys (Proxy :: Proxy (Domains t)) (Proxy :: Proxy (S Int32)) $ \ args ->+  icodeNode =<< icodeArgs (Proxy :: Proxy t) args -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+-- Instead of having up to 25 versions of @valu N@, we define+-- the class VALU which generates them by typeclass resolution.+-- All of these should get inlined at compile time. -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+class VALU t b where -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+  valuN' :: b ~ IsBase t =>+            All EmbPrj (Domains t) =>+            t -> Products (Constant Int32 (Domains t)) -> R (CoDomain t) -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+  valueArgs :: b ~ IsBase t =>+               All EmbPrj (CoDomain t ': Domains t) =>+               Proxy t -> Node -> Maybe (Products (Constant Int32 (Domains t))) -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+instance VALU t 'True where -icode15 :: ( 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, EmbPrj o ) =>-           Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o ->-           S Int32+  valuN' c () = return c -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]-icode15 tag a b c d e f g h i j k l m n o = 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, icode o]+  valueArgs _ xs = case xs of+    [] -> Just ()+    _  -> Nothing  --- 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+instance VALU t (IsBase t) => VALU (a -> t) 'False where -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+  valuN' c (a, as) = value a >>= \ v -> valuN' (c v) as +  valueArgs _ xs = case xs of+    (x : xs') -> (x,) <$> valueArgs (Proxy :: Proxy t) xs'+    _         -> Nothing -valu15 :: ( 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, EmbPrj o ) =>-          (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> p) ->-          Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->-          R p+{-# INLINE valuN #-}+valuN :: forall t. VALU t (IsBase t) =>+         Currying (Constant Int32 (Domains t)) (R (CoDomain t)) =>+         All EmbPrj (Domains t) =>+         t -> Arrows (Constant Int32 (Domains t)) (R (CoDomain t))+valuN f = currys (Proxy :: Proxy (Constant Int32 (Domains t)))+                 (Proxy :: Proxy (R (CoDomain t)))+                 (valuN' f) -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-valu15 z a b c d e f g h i j k l m n o = valu14 z a b c d e f g h i j k l m n `ap` value o+{-# INLINE valueN #-}+valueN :: forall t. VALU t (IsBase t) =>+          All EmbPrj (CoDomain t ': Domains t) =>+          t -> Int32 -> R (CoDomain t)+valueN t = vcase valu where+  valu int32s = case valueArgs (Proxy :: Proxy t) int32s of+                  Nothing -> malformed+                  Just vs -> valuN' t vs
src/full/Agda/TypeChecking/Serialise/Instances.hs view
@@ -10,10 +10,11 @@ import Agda.TypeChecking.Serialise.Instances.Compilers () import Agda.TypeChecking.Serialise.Instances.Highlighting () import Agda.TypeChecking.Serialise.Instances.Internal ()+import Agda.TypeChecking.Serialise.Instances.Errors ()  instance EmbPrj Interface where-  icod_ (Interface a b c d e f g h i j k l m n) = icode14' a b c d e f g h i j k l m n+  icod_ (Interface a b c d e f g h i j k l m) = icodeN' Interface a b c d e f g h i j k l m    value = vcase valu where-    valu [a, b, c, d, e, f, g, h, i, j, k, l, m, n] = valu14 Interface a b c d e f g h i j k l m n-    valu _                                          = malformed+    valu [a, b, c, d, e, f, g, h, i, j, k, l, m] = valuN Interface a b c d e f g h i j k l m+    valu _                                       = malformed
src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs view
@@ -26,95 +26,83 @@ import Agda.Utils.Impossible  instance EmbPrj Scope where-  icod_ (Scope a b c d e) = icode5' a b c d e+  icod_ (Scope a b c d e) = icodeN' Scope a b c d e -  value = vcase valu where-    valu [a, b, c, d, e] = valu5 Scope a b c d e-    valu _               = malformed+  value = valueN Scope  instance EmbPrj NameSpaceId where-  icod_ PublicNS        = icode0'-  icod_ PrivateNS       = icode0 1-  icod_ ImportedNS      = icode0 2-  icod_ OnlyQualifiedNS = icode0 3+  icod_ PublicNS        = icodeN' PublicNS+  icod_ PrivateNS       = icodeN 1 PrivateNS+  icod_ ImportedNS      = icodeN 2 ImportedNS+  icod_ OnlyQualifiedNS = icodeN 3 OnlyQualifiedNS    value = vcase valu where-    valu []  = valu0 PublicNS-    valu [1] = valu0 PrivateNS-    valu [2] = valu0 ImportedNS-    valu [3] = valu0 OnlyQualifiedNS+    valu []  = valuN PublicNS+    valu [1] = valuN PrivateNS+    valu [2] = valuN ImportedNS+    valu [3] = valuN OnlyQualifiedNS     valu _   = malformed  instance EmbPrj Access where-  icod_ (PrivateAccess UserWritten) = icode0 0-  icod_ PrivateAccess{} = icode0 1-  icod_ PublicAccess  = icode0'-  icod_ OnlyQualified = icode0 2+  icod_ (PrivateAccess UserWritten) = icodeN 0 ()+  icod_ PrivateAccess{}             = icodeN 1 ()+  icod_ PublicAccess                = icodeN' PublicAccess+  icod_ OnlyQualified               = icodeN 2 ()    value = vcase valu where-    valu [0] = valu0 $ PrivateAccess UserWritten-    valu [1] = valu0 $ PrivateAccess Inserted-    valu []  = valu0 PublicAccess-    valu [2] = valu0 OnlyQualified+    valu [0] = valuN $ PrivateAccess UserWritten+    valu [1] = valuN $ PrivateAccess Inserted+    valu []  = valuN PublicAccess+    valu [2] = valuN OnlyQualified     valu _   = malformed  instance EmbPrj NameSpace where-  icod_ (NameSpace a b c) = icode3' a b c+  icod_ (NameSpace a b c) = icodeN' NameSpace a b c -  value = vcase valu where-    valu [a, b, c] = valu3 NameSpace a b c-    valu _         = malformed+  value = valueN NameSpace  instance EmbPrj WhyInScope where-  icod_ Defined       = icode0'-  icod_ (Opened a b)  = icode2 0 a b-  icod_ (Applied a b) = icode2 1 a b+  icod_ Defined       = icodeN' Defined+  icod_ (Opened a b)  = icodeN 0 Opened a b+  icod_ (Applied a b) = icodeN 1 Applied 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 []        = valuN Defined+    valu [0, a, b] = valuN Opened a b+    valu [1, a, b] = valuN Applied a b     valu _         = malformed  instance EmbPrj AbstractName where-  icod_ (AbsName a b c) = icode3' a b c+  icod_ (AbsName a b c) = icodeN' AbsName a b c -  value = vcase valu where-    valu [a, b, c] = valu3 AbsName a b c-    valu _         = malformed+  value = valueN AbsName  instance EmbPrj AbstractModule where-  icod_ (AbsModule a b) = icode2' a b+  icod_ (AbsModule a b) = icodeN' AbsModule a b -  value = vcase valu where-    valu [a, b] = valu2 AbsModule a b-    valu _      = malformed+  value = valueN AbsModule  instance EmbPrj KindOfName where-  icod_ DefName        = icode0'-  icod_ ConName        = icode0 1-  icod_ FldName        = icode0 2-  icod_ PatternSynName = icode0 3-  icod_ QuotableName   = icode0 4-  icod_ MacroName      = icode0 5+  icod_ DefName        = icodeN' DefName+  icod_ ConName        = icodeN 1 ConName+  icod_ FldName        = icodeN 2 FldName+  icod_ PatternSynName = icodeN 3 PatternSynName+  icod_ QuotableName   = icodeN 4 QuotableName+  icod_ MacroName      = icodeN 5 MacroName    value = vcase valu where-    valu []  = valu0 DefName-    valu [1] = valu0 ConName-    valu [2] = valu0 FldName-    valu [3] = valu0 PatternSynName-    valu [4] = valu0 QuotableName-    valu [5] = valu0 MacroName+    valu []  = valuN DefName+    valu [1] = valuN ConName+    valu [2] = valuN FldName+    valu [3] = valuN PatternSynName+    valu [4] = valuN QuotableName+    valu [5] = valuN MacroName     valu _   = malformed  instance EmbPrj LocalVar where-  icod_ (LocalVar a)      = icode1' a-  icod_ (ShadowedVar a b) = icode2' a b+  icod_ (LocalVar a b c)  = icodeN' LocalVar a b c -  value = vcase valu where-    valu [a]    = valu1 LocalVar a-    valu [a, b] = valu2 ShadowedVar a b-    valu _      = malformed+  value = valueN LocalVar  instance EmbPrj ConPatInfo where   icod_ (ConPatInfo a _) = icod_ a@@ -122,62 +110,60 @@  -- Only for pattern synonyms (where a is Void) instance EmbPrj a => EmbPrj (A.Pattern' a) 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 b)        = icode2 5 a b-  icod_ (A.AbsurdP _)         = icode0 6-  icod_ (A.LitP a)            = icode1 7 a-  icod_ (A.ProjP _ a b)       = icode2 8 a b-  icod_ (A.PatternSynP _ a b) = icode2 9 a b-  icod_ (A.RecP _ a)          = icode1 10 a+  icod_ (A.VarP a)            = icodeN 0 A.VarP a+  icod_ (A.ConP a b c)        = icodeN 1 A.ConP a b c+  icod_ (A.DefP p a b)        = icodeN 2 (A.DefP p) a b+  icod_ t@(A.WildP p)         = icodeN 3 t+  icod_ (A.AsP p a b)         = icodeN 4 (A.AsP p) a b+  icod_ (A.DotP p a b)        = icodeN 5 (A.DotP p) a b+  icod_ t@(A.AbsurdP _)       = icodeN 6 t+  icod_ (A.LitP a)            = icodeN 7 A.LitP a+  icod_ (A.ProjP p a b)       = icodeN 8 (A.ProjP p) a b+  icod_ (A.PatternSynP p a b) = icodeN 9 (A.PatternSynP p) a b+  icod_ (A.RecP p a)          = icodeN 10 (A.RecP p) a    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, b]    = valu2 (A.DotP i) a b-    valu [6]          = valu0 (A.AbsurdP i)-    valu [7, a]       = valu1 (A.LitP) a-    valu [8, a, b]    = valu2 (A.ProjP i) a b-    valu [9, a, b]    = valu2 (A.PatternSynP i) a b-    valu [10, a]      = valu1 (A.RecP i) a+    valu [0, a]       = valuN A.VarP a+    valu [1, a, b, c] = valuN A.ConP a b c+    valu [2, a, b]    = valuN (A.DefP i) a b+    valu [3]          = valuN (A.WildP i)+    valu [4, a, b]    = valuN (A.AsP i) a b+    valu [5, a, b]    = valuN (A.DotP i) a b+    valu [6]          = valuN (A.AbsurdP i)+    valu [7, a]       = valuN (A.LitP) a+    valu [8, a, b]    = valuN (A.ProjP i) a b+    valu [9, a, b]    = valuN (A.PatternSynP i) a b+    valu [10, a]      = valuN (A.RecP i) a     valu _            = malformed      i = patNoRange  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+  icod_ TopCtx                 = icodeN' TopCtx+  icod_ FunctionSpaceDomainCtx = icodeN 1 FunctionSpaceDomainCtx+  icod_ (LeftOperandCtx a)     = icodeN 2 LeftOperandCtx a+  icod_ (RightOperandCtx a)    = icodeN 3 RightOperandCtx a+  icod_ FunctionCtx            = icodeN 4 FunctionCtx+  icod_ ArgumentCtx            = icodeN 5 ArgumentCtx+  icod_ InsideOperandCtx       = icodeN 6 InsideOperandCtx+  icod_ WithFunCtx             = icodeN 7 WithFunCtx+  icod_ WithArgCtx             = icodeN 8 WithArgCtx+  icod_ DotPatternCtx          = icodeN 9 DotPatternCtx    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 []     = valuN TopCtx+    valu [1]    = valuN FunctionSpaceDomainCtx+    valu [2, a] = valuN LeftOperandCtx a+    valu [3, a] = valuN RightOperandCtx a+    valu [4]    = valuN FunctionCtx+    valu [5]    = valuN ArgumentCtx+    valu [6]    = valuN InsideOperandCtx+    valu [7]    = valuN WithFunCtx+    valu [8]    = valuN WithArgCtx+    valu [9]    = valuN DotPatternCtx     valu _      = malformed  instance EmbPrj ScopeInfo where-  icod_ (ScopeInfo a b c d _ _ _) = icode4' a b c d+  icod_ (ScopeInfo a b c d e f g) = icodeN' (\ a b c d -> ScopeInfo a b c d e f g) a b c d -  value = vcase valu where      -- reverse maps will be recomputed-    valu [a, b, c, d] = valu4 (\ a b c d -> ScopeInfo a b c d Map.empty Map.empty Set.empty) a b c d-    valu _            = malformed+  value = valueN (\ a b c d -> ScopeInfo a b c d Map.empty Map.empty Set.empty)
src/full/Agda/TypeChecking/Serialise/Instances/Common.hs view
@@ -1,6 +1,5 @@-{-# LANGUAGE CPP                       #-}-{-# LANGUAGE DeriveDataTypeable        #-}-{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveDataTypeable #-}  #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -9,11 +8,14 @@  {-# OPTIONS_GHC -fno-warn-orphans #-} -module Agda.TypeChecking.Serialise.Instances.Common () where+module Agda.TypeChecking.Serialise.Instances.Common (SerialisedRange(..)) where +import Prelude hiding (mapM)+ import Control.Applicative-import Control.Monad.Reader+import Control.Monad.Reader hiding (mapM) import Control.Monad.State.Strict (gets, modify)+import Control.Exception  import Data.Array.IArray import Data.Word@@ -29,9 +31,12 @@ import qualified Data.Set as Set import Data.Sequence (Seq) import qualified Data.Sequence as Seq+import Data.Traversable ( mapM )+ #if __GLASGOW_HASKELL__ <= 708-import Data.Typeable (Typeable)+import Data.Typeable ( Typeable ) #endif+ import Data.Void  import Agda.Syntax.Common@@ -51,10 +56,15 @@ import Agda.Utils.HashMap (HashMap) import qualified Agda.Utils.HashMap as HMap import Agda.Utils.FileName+import Agda.Utils.Maybe import qualified Agda.Utils.Maybe.Strict as Strict+import Agda.Utils.Trie  import Agda.Utils.Except +import Agda.Utils.Empty (Empty)+import qualified Agda.Utils.Empty as Empty+ #include "undefined.h" import Agda.Utils.Impossible @@ -75,7 +85,7 @@   value i = (! i) `fmap` gets integerE  instance EmbPrj Word64 where-  icod_ i = icode2' (int32 q) (int32 r)+  icod_ i = icodeN' (undefined :: Int32 -> Int32 -> Int32) (int32 q) (int32 r)     where (q, r) = quotRem i (2^32)           int32 :: Word64 -> Int32           int32 = fromIntegral@@ -106,42 +116,38 @@   value = vcase valu where valu _ = malformed  instance EmbPrj () where-  icod_ () = icode0'+  icod_ () = icodeN' ()    value = vcase valu where-    valu [] = valu0 ()+    valu [] = valuN ()     valu _  = malformed  instance (EmbPrj a, EmbPrj b) => EmbPrj (a, b) where-  icod_ (a, b) = icode2' a b+  icod_ (a, b) = icodeN' (,) a b -  value = vcase valu where-    valu [a, b] = valu2 (,) a b-    valu _      = malformed+  value = valueN (,)  instance (EmbPrj a, EmbPrj b, EmbPrj c) => EmbPrj (a, b, c) where-  icod_ (a, b, c) = icode3' a b c+  icod_ (a, b, c) = icodeN' (,,) a b c -  value = vcase valu where-    valu [a, b, c] = valu3 (,,) a b c-    valu _         = malformed+  value = valueN (,,)  instance (EmbPrj a, EmbPrj b) => EmbPrj (Either a b) where-  icod_ (Left  x) = icode1 0 x-  icod_ (Right x) = icode1 1 x+  icod_ (Left  x) = icodeN 0 Left x+  icod_ (Right x) = icodeN 1 Right x    value = vcase valu where-    valu [0, x] = valu1 Left  x-    valu [1, x] = valu1 Right x+    valu [0, x] = valuN Left  x+    valu [1, x] = valuN Right x     valu _   = malformed  instance EmbPrj a => EmbPrj (Maybe a) where-  icod_ Nothing  = icode0'-  icod_ (Just x) = icode1' x+  icod_ Nothing  = icodeN' Nothing+  icod_ (Just x) = icodeN' Just x    value = vcase valu where-    valu []  = valu0 Nothing-    valu [x] = valu1 Just x+    valu []  = valuN Nothing+    valu [x] = valuN Just x     valu _   = malformed  instance EmbPrj a => EmbPrj (Strict.Maybe a) where@@ -149,18 +155,37 @@   value m = Strict.toStrict `fmap` value m  instance EmbPrj Bool where-  icod_ True  = icode0'-  icod_ False = icode0 0+  icod_ True  = icodeN' True+  icod_ False = icodeN 0 False    value = vcase valu where-    valu []  = valu0 True-    valu [0] = valu0 False+    valu []  = valuN True+    valu [0] = valuN False     valu _   = malformed +instance EmbPrj DataOrRecord where+  icod_ IsData   = icodeN' IsData+  icod_ IsRecord = icodeN 0 IsRecord++  value = vcase $ \case+    []  -> valuN IsData+    [0] -> valuN IsRecord+    _   -> malformed+ instance EmbPrj AbsolutePath where   icod_ file = do-    d <-  asks absPathD-    liftIO $ fromMaybe __IMPOSSIBLE__ <$> H.lookup d file+    d <- asks absPathD+    liftIO $ flip fromMaybeM (H.lookup d file) $ do+      -- The path @file@ should be cached in the dictionary @d@.+      -- This seems not to be the case, thus, crash here.+      -- But leave some hints for the posterity why things could go so wrong.+      -- reportSLn "impossible" 10 -- does not work here+      putStrLn $ unlines $+        [ "Panic while serializing absolute path: " ++ show file+        , "The path could not be found in the dictionary:"+        ]+      putStrLn . show =<< H.toList d+      __IMPOSSIBLE__    value m = do     m :: TopLevelModuleName@@ -174,25 +199,21 @@       Right f  -> return f  instance EmbPrj a => EmbPrj (Position' a) where-  icod_ (P.Pn file pos line col) = icode4' file pos line col+  icod_ (P.Pn file pos line col) = icodeN' P.Pn file pos line col -  value = vcase valu where-    valu [f, p, l, c] = valu4 P.Pn f p l c-    valu _            = malformed+  value = valueN P.Pn  instance EmbPrj TopLevelModuleName where-  icod_ (TopLevelModuleName a) = icode1' a+  icod_ (TopLevelModuleName a b) = icodeN' TopLevelModuleName a b -  value = vcase valu where-    valu [a] = valu1 TopLevelModuleName a-    valu _   = malformed+  value = valueN TopLevelModuleName  #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+  icod_ xs = icodeNode =<< mapM icode xs   value    = vcase (mapM value) --   icode []       = icode0' --   icode (x : xs) = icode2' x xs@@ -212,21 +233,24 @@   icod_ s = icode (Set.toList s)   value s = Set.fromList `fmap` value s +instance (Ord a, EmbPrj a, EmbPrj b) => EmbPrj (Trie a b) where+  icod_ (Trie a b)= icodeN' Trie a b++  value = valueN Trie+ instance EmbPrj a => EmbPrj (Seq a) where   icod_ s = icode (Fold.toList s)   value s = Seq.fromList `fmap` value s  instance EmbPrj a => EmbPrj (P.Interval' a) where-  icod_ (P.Interval p q) = icode2' p q+  icod_ (P.Interval p q) = icodeN' P.Interval p q -  value = vcase valu where-    valu [p, q] = valu2 P.Interval p q-    valu _      = malformed+  value = valueN P.Interval  -- | Ranges are always deserialised as 'noRange'.  instance EmbPrj Range where-  icod_ _ = icode0'+  icod_ _ = icodeN' ()   value _ = return noRange  -- | Ranges that should be serialised properly.@@ -238,84 +262,81 @@  instance EmbPrj SerialisedRange where   icod_ (SerialisedRange r) =-    icode2' (P.rangeFile r) (P.rangeIntervals r)+    icodeN' (undefined :: SrcFile -> [IntervalWithoutFile] -> SerialisedRange)+            (P.rangeFile r) (P.rangeIntervals r)    value = vcase valu where-    valu [a, b] = SerialisedRange <$> valu2 P.intervalsToRange a b+    valu [a, b] = SerialisedRange <$> valuN P.intervalsToRange 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+  icod_ (C.NoName a b) = icodeN 0 C.NoName a b+  icod_ (C.Name r xs)  = icodeN' C.Name r xs    value = vcase valu where-    valu [0, a, b] = valu2 C.NoName a b-    valu [r, xs]   = valu2 C.Name   r xs+    valu [0, a, b] = valuN C.NoName a b+    valu [r, xs]   = valuN C.Name   r xs     valu _         = malformed  instance EmbPrj NamePart where-  icod_ Hole   = icode0'-  icod_ (Id a) = icode1' a+  icod_ Hole   = icodeN' Hole+  icod_ (Id a) = icodeN' Id a    value = vcase valu where-    valu []  = valu0 Hole-    valu [a] = valu1 Id a+    valu []  = valuN Hole+    valu [a] = valuN Id a     valu _   = malformed  instance EmbPrj C.QName where-  icod_ (Qual    a b) = icode2' a b-  icod_ (C.QName a  ) = icode1' a+  icod_ (Qual    a b) = icodeN' Qual a b+  icod_ (C.QName a  ) = icodeN' C.QName a    value = vcase valu where-    valu [a, b] = valu2 Qual    a b-    valu [a]    = valu1 C.QName a+    valu [a, b] = valuN Qual    a b+    valu [a]    = valuN C.QName a     valu _      = malformed  instance EmbPrj Agda.Syntax.Fixity.Associativity where-  icod_ LeftAssoc  = icode0'-  icod_ RightAssoc = icode0 1-  icod_ NonAssoc   = icode0 2+  icod_ LeftAssoc  = icodeN' LeftAssoc+  icod_ RightAssoc = icodeN 1 RightAssoc+  icod_ NonAssoc   = icodeN 2 NonAssoc    value = vcase valu where-    valu []  = valu0 LeftAssoc-    valu [1] = valu0 RightAssoc-    valu [2] = valu0 NonAssoc+    valu []  = valuN LeftAssoc+    valu [1] = valuN RightAssoc+    valu [2] = valuN NonAssoc     valu _   = malformed  instance EmbPrj Agda.Syntax.Fixity.PrecedenceLevel where-  icod_ Unrelated   = icode0'-  icod_ (Related a) = icode1' a+  icod_ Unrelated   = icodeN' Unrelated+  icod_ (Related a) = icodeN' Related a    value = vcase valu where-    valu []  = valu0 Unrelated-    valu [a] = valu1 Related a+    valu []  = valuN Unrelated+    valu [a] = valuN Related a     valu _   = malformed  instance EmbPrj Agda.Syntax.Fixity.Fixity where-  icod_ (Fixity a b c) = icode3' a b c+  icod_ (Fixity a b c) = icodeN' Fixity a b c -  value = vcase valu where-    valu [a, b, c] = valu3 Fixity a b c-    valu _         = malformed+  value = valueN Fixity  instance EmbPrj Agda.Syntax.Fixity.Fixity' where-  icod_ (Fixity' a b _) = icode2' a b  -- discard theNameRange+  icod_ (Fixity' a b r) = icodeN' (\ a b -> Fixity' a b r) a b  -- discard theNameRange -  value = vcase valu where-    valu [a, b] = valu2 (\ f n -> Fixity' f n noRange) a b-    valu _      = malformed+  value = valueN (\ f n -> Fixity' f n noRange)  instance EmbPrj GenPart where-  icod_ (BindHole a)   = icode1 0 a-  icod_ (NormalHole a) = icode1 1 a-  icod_ (WildHole a)   = icode1 2 a-  icod_ (IdPart a)     = icode1' a+  icod_ (BindHole a)   = icodeN 0 BindHole a+  icod_ (NormalHole a) = icodeN 1 NormalHole a+  icod_ (WildHole a)   = icodeN 2 WildHole a+  icod_ (IdPart a)     = icodeN' IdPart a    value = vcase valu where-    valu [0, a] = valu1 BindHole a-    valu [1, a] = valu1 NormalHole a-    valu [2, a] = valu1 WildHole a-    valu [a]    = valu1 IdPart a+    valu [0, a] = valuN BindHole a+    valu [1, a] = valuN NormalHole a+    valu [2, a] = valuN WildHole a+    valu [a]    = valuN IdPart a     valu _      = malformed  instance EmbPrj MetaId where@@ -323,11 +344,9 @@   value i = MetaId <$> value i  instance EmbPrj A.QName where-  icod_ n@(A.QName a b) = icodeMemo qnameD qnameC (qnameId n) $ icode2' a b+  icod_ n@(A.QName a b) = icodeMemo qnameD qnameC (qnameId n) $ icodeN' A.QName a b -  value = vcase valu where-    valu [a, b] = valu2 A.QName a b-    valu _      = malformed+  value = valueN A.QName  instance EmbPrj A.AmbiguousQName where   icod_ (A.AmbQ a) = icode a@@ -339,90 +358,73 @@  instance EmbPrj A.Name where   icod_ (A.Name a b c d) = icodeMemo nameD nameC a $-    icode4' a b (SerialisedRange c) d+    icodeN' (\ a b -> A.Name a b . underlyingRange) a b (SerialisedRange c) d -  value = vcase valu where-    valu [a, b, c, d] = valu4 (\a b c -> A.Name a b (underlyingRange c))-                              a b c d-    valu _            = malformed+  value = valueN (\a b c -> A.Name a b (underlyingRange c))  instance EmbPrj a => EmbPrj (C.FieldAssignment' a) where-  icod_ (C.FieldAssignment a b) = icode2' a b+  icod_ (C.FieldAssignment a b) = icodeN' C.FieldAssignment a b -  value = vcase valu where-    valu [a, b] = valu2 C.FieldAssignment a b-    valu _      = malformed+  value = valueN C.FieldAssignment  instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where-  icod_ (Named a b) = icode2' a b+  icod_ (Named a b) = icodeN' Named a b -  value = vcase valu where-    valu [a, b] = valu2 Named a b-    valu _      = malformed+  value = valueN Named  instance EmbPrj a => EmbPrj (Ranged a) where-  icod_ (Ranged r x) = icode2' r x+  icod_ (Ranged r x) = icodeN' Ranged r x -  value = vcase valu where-    valu [r, x] = valu2 Ranged r x-    valu _      = malformed+  value = valueN Ranged  instance EmbPrj ArgInfo where-  icod_ (ArgInfo h r o v) = icode4' h r o v+  icod_ (ArgInfo h r o) = icodeN' ArgInfo h r o -  value = vcase valu where-    valu [h, r, o, v] = valu4 ArgInfo h r o v-    valu _            = malformed+  value = valueN ArgInfo  instance EmbPrj NameId where-  icod_ (NameId a b) = icode2' a b+  icod_ (NameId a b) = icodeN' NameId a b -  value = vcase valu where-    valu [a, b] = valu2 NameId a b-    valu _      = malformed+  value = valueN NameId  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+  icod_ (WithHiding a b) = icodeN' WithHiding a b -  value = vcase valu where-    valu [a, b] = valu2 WithHiding a b-    valu _      = malformed+  value = valueN WithHiding  instance EmbPrj a => EmbPrj (Arg a) where-  icod_ (Arg i e) = icode2' i e+  icod_ (Arg i e) = icodeN' Arg i e -  value = vcase valu where-    valu [i, e] = valu2 Arg i e-    valu _      = malformed+  value = valueN Arg  instance EmbPrj a => EmbPrj (Dom a) where-  icod_ (Dom i e) = icode2' i e+  icod_ (Dom i e) = icodeN' Dom i e -  value = vcase valu where-    valu [i, e] = valu2 Dom i e-    valu _      = malformed+  value = valueN Dom  instance EmbPrj Induction where-  icod_ Inductive   = icode0'-  icod_ CoInductive = icode0 1+  icod_ Inductive   = icodeN' Inductive+  icod_ CoInductive = icodeN 1 CoInductive    value = vcase valu where-    valu []  = valu0 Inductive-    valu [1] = valu0 CoInductive+    valu []  = valuN Inductive+    valu [1] = valuN CoInductive     valu _   = malformed  instance EmbPrj Hiding where-  icod_ Hidden    = return 0-  icod_ NotHidden = return 1-  icod_ Instance  = return 2+  icod_ Hidden                = return 0+  icod_ NotHidden             = return 1+  icod_ (Instance NoOverlap)  = return 2+  icod_ (Instance YesOverlap) = return 3    value 0 = return Hidden   value 1 = return NotHidden-  value 2 = return Instance+  value 2 = return (Instance NoOverlap)+  value 3 = return (Instance YesOverlap)   value _ = malformed  instance EmbPrj Relevance where@@ -431,34 +433,36 @@   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 Origin where   icod_ UserWritten = return 0   icod_ Inserted    = return 1   icod_ Reflected   = return 2+  icod_ CaseSplit   = return 3    value 0 = return UserWritten   value 1 = return Inserted   value 2 = return Reflected+  value 3 = return CaseSplit   value _ = malformed  instance EmbPrj ConOrigin where   icod_ ConOSystem = return 0   icod_ ConOCon    = return 1   icod_ ConORec    = return 2+  icod_ ConOSplit  = return 3    value 0 = return ConOSystem   value 1 = return ConOCon   value 2 = return ConORec+  value 3 = return ConOSplit   value _ = malformed  instance EmbPrj ProjOrigin where@@ -472,36 +476,50 @@   value _ = malformed  instance EmbPrj Agda.Syntax.Literal.Literal where-  icod_ (LitNat    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-  icod_ (LitMeta   a b c) = icode3 6 a b c+  icod_ (LitNat    a b)   = icodeN' LitNat a b+  icod_ (LitFloat  a b)   = icodeN 1 LitFloat a b+  icod_ (LitString a b)   = icodeN 2 LitString a b+  icod_ (LitChar   a b)   = icodeN 3 LitChar a b+  icod_ (LitQName  a b)   = icodeN 5 LitQName a b+  icod_ (LitMeta   a b c) = icodeN 6 LitMeta a b c    value = vcase valu where-    valu [a, b]       = valu2 LitNat    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 [6, a, b, c] = valu3 LitMeta   a b c+    valu [a, b]       = valuN LitNat    a b+    valu [1, a, b]    = valuN LitFloat  a b+    valu [2, a, b]    = valuN LitString a b+    valu [3, a, b]    = valuN LitChar   a b+    valu [5, a, b]    = valuN LitQName  a b+    valu [6, a, b, c] = valuN LitMeta   a b c     valu _            = malformed  instance EmbPrj IsAbstract where-  icod_ AbstractDef = icode0 0-  icod_ ConcreteDef = icode0'+  icod_ AbstractDef = icodeN 0 AbstractDef+  icod_ ConcreteDef = icodeN' ConcreteDef    value = vcase valu where-    valu [0] = valu0 AbstractDef-    valu []  = valu0 ConcreteDef+    valu [0] = valuN AbstractDef+    valu []  = valuN ConcreteDef     valu _   = malformed  instance EmbPrj Delayed where-  icod_ Delayed    = icode0 0-  icod_ NotDelayed = icode0'+  icod_ Delayed    = icodeN 0 Delayed+  icod_ NotDelayed = icodeN' NotDelayed    value = vcase valu where-    valu [0] = valu0 Delayed-    valu []  = valu0 NotDelayed+    valu [0] = valuN Delayed+    valu []  = valuN NotDelayed     valu _   = malformed++instance EmbPrj Impossible where+  icod_ (Impossible a b)  = icodeN 0 Impossible a b+  icod_ (Unreachable a b) = icodeN 1 Unreachable a b++  value = vcase valu where+    valu [0, a, b] = valuN Impossible  a b+    valu [1, a, b] = valuN Unreachable a b+    valu _         = malformed++instance EmbPrj Empty where+  icod_ a = icod_ =<< lift (Empty.toImpossible a)++  value = fmap throwImpossible . value
src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs view
@@ -3,164 +3,20 @@  module Agda.TypeChecking.Serialise.Instances.Compilers where -import qualified Data.Binary.Get as B-import qualified Data.Binary.Put as B--import qualified Agda.Compiler.Epic.Interface as Epic-import qualified Agda.Compiler.UHC.Pragmas.Base as CR-import qualified Agda.Compiler.UHC.Bridge as UHCB-import qualified Agda.Compiler.JS.Syntax as JS- import Agda.TypeChecking.Serialise.Base-import Agda.TypeChecking.Serialise.Instances.Common ()+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 e) = icode5' a b c d e--  value = vcase valu where-    valu [a, b, c, d, e] = valu5 CompiledRep a b c d e-    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-  icod_ (JS.PlainJS a)    = icode1 16 a--  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 [16, a]       = valu1 JS.PlainJS 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 CoreRepresentation where-  icod_ (CrDefn a)   = icode1 1 a-  icod_ (CrType a)   = icode1 2 a-  icod_ (CrConstr a) = icode1 3 a--  value = vcase valu where-    valu [1, a] = valu1 CrDefn a-    valu [2, a] = valu1 CrType a-    valu [3, a] = valu1 CrConstr a-    valu _      = malformed--instance EmbPrj CR.CoreType where-  icod_ (CR.CTMagic a) = icode1 1 a-  icod_ (CR.CTNormal a)  = icode1 2 a--  value = vcase valu where-    valu [1, a]    = valu1 CR.CTMagic a-    valu [2, a]    = valu1 CR.CTNormal a-    valu _         = malformed--instance EmbPrj CR.CoreConstr where-  icod_ (CR.CCMagic a b)    = icode2 1 a b-  icod_ (CR.CCNormal a b c) = icode3 2 a b c--  value = vcase valu where-    valu [1, a, b]    = valu2 CR.CCMagic a b-    valu [2, a, b, c] = valu3 CR.CCNormal a b c-    valu _            = malformed--instance EmbPrj CR.HsName where-  icod_   = icode . B.runPut . UHCB.serialize-  value n = value n >>= return . (B.runGet UHCB.unserialize)---- 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 CompilerPragma where+  icod_ (CompilerPragma a b) =+    icodeN' (CompilerPragma . underlyingRange) (SerialisedRange a) b -instance EmbPrj Epic.Forced where-  icod_ Epic.Forced    = icode0 0-  icod_ Epic.NotForced = icode0 1+  value = valueN (CompilerPragma . underlyingRange) -  value = vcase valu where-    valu [0] = valu0 Epic.Forced-    valu [1] = valu0 Epic.NotForced-    valu _   = malformed+instance EmbPrj ForeignCode where+  icod_ (ForeignCode r a) =+    icodeN' (ForeignCode . underlyingRange) (SerialisedRange r) a -instance EmbPrj Epic.Tag where-  icod_ (Epic.Tag a)     = icode1 0 a-  icod_ (Epic.PrimTag a) = icode1 1 a+  value = valueN (ForeignCode . underlyingRange) -  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/Errors.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE RecordWildCards          #-}+{-# LANGUAGE CPP                      #-}+{-# OPTIONS_GHC -fno-warn-orphans     #-}++#if __GLASGOW_HASKELL__ <= 708+{-# OPTIONS_GHC -fcontext-stack=30 #-}+#endif++module Agda.TypeChecking.Serialise.Instances.Errors where++#if __GLASGOW_HASKELL__ <= 708+import Agda.TypeChecking.Pretty ()+#endif++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Common+import Agda.TypeChecking.Serialise.Instances.Internal ()+import Agda.TypeChecking.Serialise.Instances.Abstract ()++import Agda.Syntax.Common+import Agda.Syntax.Concrete.Definitions (DeclarationWarning(..))+import Agda.Syntax.Abstract.Name (ModuleName)+import Agda.TypeChecking.Monad.Base+import Agda.Interaction.Options+import Agda.Termination.CutOff+import Agda.TypeChecking.Positivity.Occurrence ()+import Agda.Syntax.Parser.Monad (ParseWarning( OverlappingTokensWarning ))+import Agda.Utils.Pretty+import Agda.Utils.FileName ()++import Agda.Utils.Lens++#include "undefined.h"+import Agda.Utils.Impossible++instance EmbPrj TCWarning where+  icod_ (TCWarning a b c) = icodeN' TCWarning a b c++  value = valueN TCWarning++-- We don't need to serialise warnings that turn into errors+instance EmbPrj Warning where+  icod_ (TerminationIssue a)         = __IMPOSSIBLE__+  icod_ (UnreachableClauses a b)     = icodeN 0 UnreachableClauses a b+  icod_ (CoverageIssue a b)          = __IMPOSSIBLE__+  icod_ (CoverageNoExactSplit a b)   = __IMPOSSIBLE__+  icod_ (NotStrictlyPositive a b)    = __IMPOSSIBLE__+  icod_ (UnsolvedMetaVariables a)    = __IMPOSSIBLE__+  icod_ (UnsolvedInteractionMetas a) = __IMPOSSIBLE__+  icod_ (UnsolvedConstraints a)      = __IMPOSSIBLE__+  icod_ (OldBuiltin a b)             = icodeN 1 OldBuiltin a b+  icod_ EmptyRewritePragma           = icodeN 2 EmptyRewritePragma+  icod_ UselessPublic                = icodeN 3 UselessPublic+  icod_ (UselessInline a)            = icodeN 4 UselessInline a+  icod_ (GenericWarning a)           = icodeN 5 GenericWarning a+  icod_ (GenericNonFatalError a)     = __IMPOSSIBLE__+  icod_ (SafeFlagPostulate a)        = __IMPOSSIBLE__+  icod_ (SafeFlagPragma a)           = __IMPOSSIBLE__+  icod_ SafeFlagNonTerminating       = __IMPOSSIBLE__+  icod_ SafeFlagTerminating          = __IMPOSSIBLE__+  icod_ SafeFlagPrimTrustMe          = __IMPOSSIBLE__+  icod_ SafeFlagNoPositivityCheck    = __IMPOSSIBLE__+  icod_ SafeFlagPolarity             = __IMPOSSIBLE__+  icod_ (ParseWarning a)             = __IMPOSSIBLE__+  icod_ (DeprecationWarning a b c)   = icodeN 6 DeprecationWarning a b c+  icod_ (NicifierIssue a)            = icodeN 7 NicifierIssue a++  value = vcase valu where+      valu [0, a, b]    = valuN UnreachableClauses a b+      valu [1, a, b]    = valuN OldBuiltin a b+      valu [2]          = valuN EmptyRewritePragma+      valu [3]          = valuN UselessPublic+      valu [4, a]       = valuN UselessInline a+      valu [5, a]       = valuN GenericWarning a+      valu [6, a, b, c] = valuN DeprecationWarning a b c+      valu [7, a]       = valuN NicifierIssue a+      valu _ = malformed++instance EmbPrj DeclarationWarning where+  icod_ = \case+    UnknownNamesInFixityDecl a        -> icodeN 0 UnknownNamesInFixityDecl a+    UnknownNamesInPolarityPragmas a   -> icodeN 1 UnknownNamesInPolarityPragmas a+    PolarityPragmasButNotPostulates a -> icodeN 2 PolarityPragmasButNotPostulates a+    UselessPrivate a                  -> icodeN 3 UselessPrivate a+    UselessAbstract a                 -> icodeN 4 UselessAbstract a+    UselessInstance a                 -> icodeN 5 UselessInstance a++  value = vcase $ \case+    [0, a] -> valueN UnknownNamesInFixityDecl a+    [1, a] -> valueN UnknownNamesInPolarityPragmas a+    [2, a] -> valueN PolarityPragmasButNotPostulates a+    [3, a] -> valueN UselessPrivate a+    [4, a] -> valueN UselessAbstract a+    [5, a] -> valueN UselessInstance a+    _ -> malformed++instance EmbPrj Doc where+  icod_ d = icodeN' (undefined :: String -> Doc) (render d)++  value = valueN text+
src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs view
@@ -9,89 +9,96 @@ import Agda.TypeChecking.Serialise.Instances.Common ()  instance EmbPrj HR.Range where-  icod_ (HR.Range a b) = icode2' a b+  icod_ (HR.Range a b) = icodeN' HR.Range a b -  value = vcase valu where-    valu [a, b] = valu2 HR.Range a b-    valu _      = malformed+  value = valueN HR.Range  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-  icod_ HP.Macro           = icode0 10+  icod_ HP.Bound           = icodeN' HP.Bound+  icod_ (HP.Constructor a) = icodeN 1 HP.Constructor a+  icod_ HP.Datatype        = icodeN 2 ()+  icod_ HP.Field           = icodeN 3 ()+  icod_ HP.Function        = icodeN 4 ()+  icod_ HP.Module          = icodeN 5 ()+  icod_ HP.Postulate       = icodeN 6 ()+  icod_ HP.Primitive       = icodeN 7 ()+  icod_ HP.Record          = icodeN 8 ()+  icod_ HP.Argument        = icodeN 9 ()+  icod_ HP.Macro           = icodeN 10 ()    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 [10]    = valu0 HP.Macro+    valu []      = valuN HP.Bound+    valu [1 , a] = valuN HP.Constructor a+    valu [2]     = valuN HP.Datatype+    valu [3]     = valuN HP.Field+    valu [4]     = valuN HP.Function+    valu [5]     = valuN HP.Module+    valu [6]     = valuN HP.Postulate+    valu [7]     = valuN HP.Primitive+    valu [8]     = valuN HP.Record+    valu [9]     = valuN HP.Argument+    valu [10]    = valuN HP.Macro     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+  icod_ HP.Comment       = icodeN 0 ()+  icod_ HP.Option        = icodeN 1 ()+  icod_ HP.Keyword       = icodeN 2 ()+  icod_ HP.String        = icodeN 3 ()+  icod_ HP.Number        = icodeN 4 ()+  icod_ HP.Symbol        = icodeN' HP.Symbol+  icod_ HP.PrimitiveType = icodeN 6 ()+  icod_ (HP.Name mk b)   = icodeN 7 HP.Name 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 [0]        = valuN HP.Comment+    valu [1]        = valuN HP.Option+    valu [2]        = valuN HP.Keyword+    valu [3]        = valuN HP.String+    valu [4]        = valuN HP.Number+    valu []         = valuN HP.Symbol+    valu [6]        = valuN HP.PrimitiveType+    valu [7, mk, b] = valuN 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-  icod_ HP.PositivityProblem  = icode0 7+  icod_ HP.Error               = icodeN 0 ()+  icod_ HP.DottedPattern       = icodeN' HP.DottedPattern+  icod_ HP.UnsolvedMeta        = icodeN 2 ()+  icod_ HP.TerminationProblem  = icodeN 3 ()+  icod_ HP.IncompletePattern   = icodeN 4 ()+  icod_ HP.TypeChecks          = icodeN 5 ()+  icod_ HP.UnsolvedConstraint  = icodeN 6 ()+  icod_ HP.PositivityProblem   = icodeN 7 ()+  icod_ HP.ReachabilityProblem = icodeN 8 ()+  icod_ HP.CoverageProblem     = icodeN 9 ()+  icod_ HP.CatchallClause      = icodeN 10 ()    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 [7] = valu0 HP.PositivityProblem+    valu [0] = valuN HP.Error+    valu []  = valuN HP.DottedPattern+    valu [2] = valuN HP.UnsolvedMeta+    valu [3] = valuN HP.TerminationProblem+    valu [4] = valuN HP.IncompletePattern+    valu [5] = valuN HP.TypeChecks+    valu [6] = valuN HP.UnsolvedConstraint+    valu [7] = valuN HP.PositivityProblem+    valu [8] = valuN HP.ReachabilityProblem+    valu [9] = valuN HP.CoverageProblem+    valu [10] = valuN HP.CatchallClause     valu _   = malformed  instance EmbPrj HP.Aspects where-  icod_ (HP.Aspects a b c d) = icode4' a b c d+  icod_ (HP.Aspects a b c d) = icodeN' HP.Aspects a b c d -  value = vcase valu where-    valu [a, b, c, d] = valu4 HP.Aspects a b c d-    valu _            = malformed+  value = valueN HP.Aspects +instance EmbPrj HP.DefinitionSite where+  icod_ (HP.DefinitionSite a b c d) = icodeN' HP.DefinitionSite a b c d++  value = valueN HP.DefinitionSite+ instance EmbPrj HP.CompressedFile where-  icod_ (HP.CompressedFile f) = icode1' f+  icod_ (HP.CompressedFile f) = icodeN' HP.CompressedFile f -  value = vcase valu where-    valu [f] = valu1 HP.CompressedFile f-    valu _   = malformed+  value = valueN HP.CompressedFile
src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs view
@@ -24,166 +24,149 @@ import Agda.Utils.Impossible  instance EmbPrj Signature where-  icod_ (Sig a b c) = icode3' a b c+  icod_ (Sig a b c) = icodeN' Sig a b c -  value = vcase valu where-    valu [a, b, c] = valu3 Sig a b c-    valu _         = malformed+  value = valueN Sig  instance EmbPrj Section where-  icod_ (Section a) = icode1' a+  icod_ (Section a) = icodeN' Section a -  value = vcase valu where-    valu [a] = valu1 Section a-    valu _   = malformed+  value = valueN Section  instance EmbPrj a => EmbPrj (Tele a) where-  icod_ EmptyTel        = icode0'-  icod_ (ExtendTel a b) = icode2' a b+  icod_ EmptyTel        = icodeN' EmptyTel+  icod_ (ExtendTel a b) = icodeN' ExtendTel a b    value = vcase valu where-    valu []     = valu0 EmptyTel-    valu [a, b] = valu2 ExtendTel a b+    valu []     = valuN EmptyTel+    valu [a, b] = valuN ExtendTel a b     valu _      = malformed  instance EmbPrj Permutation where-  icod_ (Perm a b) = icode2' a b+  icod_ (Perm a b) = icodeN' Perm a b -  value = vcase valu where-    valu [a, b] = valu2 Perm a b-    valu _      = malformed+  value = valueN Perm  instance EmbPrj a => EmbPrj (Drop a) where-  icod_ (Drop a b) = icode2' a b+  icod_ (Drop a b) = icodeN' Drop a b -  value = vcase valu where-    valu [a, b] = valu2 Drop a b-    valu _      = malformed+  value = valueN Drop  instance EmbPrj a => EmbPrj (Elim' a) where-  icod_ (Apply a)  = icode1' a-  icod_ (Proj a b) = icode2 0 a b+  icod_ (Apply a)  = icodeN' Apply a+  icod_ (Proj a b) = icodeN 0 Proj a b    value = vcase valu where-    valu [a]       = valu1 Apply a-    valu [0, a, b] = valu2 Proj a b+    valu [a]       = valuN Apply a+    valu [0, a, b] = valuN Proj a b     valu _         = malformed  instance EmbPrj I.ConHead where-  icod_ (ConHead a b c) = icode3' a b c+  icod_ (ConHead a b c) = icodeN' ConHead a b c -  value = vcase valu where-    valu [a, b, c] = valu3 ConHead a b c-    valu _         = malformed+  value = valueN ConHead  instance (EmbPrj a) => EmbPrj (I.Type' a) where-  icod_ (El a b) = icode2' a b+  icod_ (El a b) = icodeN' El a b -  value = vcase valu where-    valu [a, b] = valu2 El a b-    valu _      = malformed+  value = valueN El -instance (EmbPrj a) => EmbPrj (I.Abs a) where-  icod_ (NoAbs a b) = icode2 0 a b-  icod_ (Abs a b)   = icode2' a b+instance EmbPrj a => EmbPrj (I.Abs a) where+  icod_ (NoAbs a b) = icodeN 0 NoAbs a b+  icod_ (Abs a b)   = icodeN' Abs a b    value = vcase valu where-    valu [a, b]    = valu2 Abs a b-    valu [0, a, b] = valu2 NoAbs a b+    valu [a, b]    = valuN Abs a b+    valu [0, a, b] = valuN 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 c) = icode3 4 a b c-  icod_ (Pi       a b) = icode2 5 a b-  icod_ (Sort     a  ) = icode1 7 a+  icod_ (Var     a []) = icodeN' (\ a -> Var a []) a+  icod_ (Var      a b) = icodeN 0 Var a b+  icod_ (Lam      a b) = icodeN 1 Lam a b+  icod_ (Lit      a  ) = icodeN 2 Lit a+  icod_ (Def      a b) = icodeN 3 Def a b+  icod_ (Con    a b c) = icodeN 4 Con a b c+  icod_ (Pi       a b) = icodeN 5 Pi a b+  icod_ (Sort     a  ) = icodeN 7 Sort a   icod_ (MetaV    a b) = __IMPOSSIBLE__-  icod_ (DontCare a  ) = icode1 8 a-  icod_ (Level    a  ) = icode1 9 a+  icod_ (DontCare a  ) = icodeN 8 DontCare a+  icod_ (Level    a  ) = icodeN 9 Level a   icod_ (Shared p)     = icodeMemo termD termC p $ icode (derefPtr p)    value r = vcase valu' r where     valu' xs       = gets mkShared <*> 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, c] = valu3 Con a b c-    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 [a]       = valuN var   a+    valu [0, a, b] = valuN Var   a b+    valu [1, a, b] = valuN Lam   a b+    valu [2, a]    = valuN Lit   a+    valu [3, a, b] = valuN Def   a b+    valu [4, a, b, c] = valuN Con a b c+    valu [5, a, b] = valuN Pi    a b+    valu [7, a]    = valuN Sort  a+    valu [8, a]    = valuN DontCare a+    valu [9, a]    = valuN Level a     valu _         = malformed  instance EmbPrj Level where-  icod_ (Max a) = icode1' a+  icod_ (Max a) = icodeN' Max a -  value = vcase valu where-    valu [a] = valu1 Max a-    valu _   = malformed+  value = valueN Max  instance EmbPrj PlusLevel where-  icod_ (ClosedLevel a) = icode1' a-  icod_ (Plus a b)      = icode2' a b+  icod_ (ClosedLevel a) = icodeN' ClosedLevel a+  icod_ (Plus a b)      = icodeN' Plus a b    value = vcase valu where-    valu [a]    = valu1 ClosedLevel a-    valu [a, b] = valu2 Plus a b+    valu [a]    = valuN ClosedLevel a+    valu [a, b] = valuN Plus a b     valu _      = malformed  instance EmbPrj LevelAtom where-  icod_ (NeutralLevel _ a) = icode1' a-  icod_ (UnreducedLevel a) = icode1 1 a-  icod_ MetaLevel{}        = __IMPOSSIBLE__+  icod_ (NeutralLevel r a) = icodeN' (NeutralLevel r) a+  icod_ (UnreducedLevel a) = icodeN 1 UnreducedLevel a+  icod_ (MetaLevel a b)    = __IMPOSSIBLE__   icod_ BlockedLevel{}     = __IMPOSSIBLE__    value = vcase valu where-    valu [a]    = valu1 UnreducedLevel a -- we forget that we are a NeutralLevel,+    valu [a]    = valuN 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 [1, a] = valuN 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__+  icod_ (Type  a  ) = icodeN 0 Type a+  icod_ Prop        = icodeN' Prop+  icod_ SizeUniv    = icodeN 1 SizeUniv+  icod_ Inf         = icodeN 2 Inf+  icod_ (DLub a b)  = icodeN 3 DLub a b -- Andreas, 2017-01-18: not __IMPOSSIBLE__ see #2408    value = vcase valu where-    valu [a]    = valu1 Type  a-    valu [1, _] = valu0 Prop-    valu [3, _] = valu0 SizeUniv-    valu [4, _] = valu0 Inf-    valu _      = malformed+    valu []        = valuN Prop+    valu [0, a]    = valuN Type  a+    valu [1]       = valuN SizeUniv+    valu [2]       = valuN Inf+    valu [3, a, b] = valuN DLub a b+    valu _         = malformed  instance EmbPrj DisplayForm where-  icod_ (Display a b c) = icode3' a b c+  icod_ (Display a b c) = icodeN' Display a b c -  value = vcase valu where-    valu [a, b, c] = valu3 Display a b c-    valu _         = malformed+  value = valueN Display  instance EmbPrj a => EmbPrj (Open a) where-  icod_ (OpenThing a b) = icode2' a b+  icod_ (OpenThing a b) = icodeN' OpenThing a b -  value = vcase valu where-    valu [a, b] = valu2 OpenThing a b-    valu _      = malformed+  value = valueN OpenThing  instance EmbPrj a => EmbPrj (Local a) where-  icod_ (Local a b) = icode2' a b-  icod_ (Global a)  = icode1' a+  icod_ (Local a b) = icodeN' Local a b+  icod_ (Global a)  = icodeN' Global a    value = vcase valu where-    valu [a, b] = valu2 Local a b-    valu [a]    = valu1 Global a+    valu [a, b] = valuN Local a b+    valu [a]    = valuN Global a     valu _      = malformed  instance EmbPrj CtxId where@@ -191,18 +174,18 @@   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 c) = icode3 2 a b c-  icod_ (DDef     a b)   = icode2 3 a b-  icod_ (DWithApp a b c) = icode3 4 a b c+  icod_ (DTerm    a  )   = icodeN' DTerm a+  icod_ (DDot     a  )   = icodeN 1 DDot a+  icod_ (DCon     a b c) = icodeN 2 DCon a b c+  icod_ (DDef     a b)   = icodeN 3 DDef a b+  icod_ (DWithApp a b c) = icodeN 4 DWithApp a b c    value = vcase valu where-    valu [a]          = valu1 DTerm a-    valu [1, a]       = valu1 DDot a-    valu [2, a, b, c] = valu3 DCon a b c-    valu [3, a, b]    = valu2 DDef a b-    valu [4, a, b, c] = valu3 DWithApp a b c+    valu [a]          = valuN DTerm a+    valu [1, a]       = valuN DDot a+    valu [2, a, b, c] = valuN DCon a b c+    valu [3, a, b]    = valuN DDef a b+    valu [4, a, b, c] = valuN DWithApp a b c     valu _            = malformed  instance EmbPrj MutualId where@@ -210,65 +193,54 @@   value n         = MutId `fmap` value n  instance EmbPrj Definition where-  icod_ (Defn a b c d e f g h i j k l) = icode12' a b (P.killRange c) d e f g h i j k l+  icod_ (Defn a b c d e f g h i j k l m) =+    icodeN' Defn a b (P.killRange c) d e f g h i j k l m -  value = vcase valu where-    valu [a, b, c, d, e, f, g, h, i, j, k, l] = valu12 Defn a b c d e f g h i j k l-    valu _                                    = malformed+  value = valueN Defn  instance EmbPrj NLPat where-  icod_ (PVar a b c)    = icode3 0 a b c-  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+  icod_ (PVar a b)      = icodeN 0 PVar a b+  icod_ (PWild)         = icodeN 1 PWild+  icod_ (PDef a b)      = icodeN 2 PDef a b+  icod_ (PLam a b)      = icodeN 3 PLam a b+  icod_ (PPi a b)       = icodeN 4 PPi a b+  icod_ (PBoundVar a b) = icodeN 5 PBoundVar a b+  icod_ (PTerm a)       = icodeN 6 PTerm a    value = vcase valu where-    valu [0, a, b, c] = valu3 PVar a b c-    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 [0, a, b]    = valuN PVar a b+    valu [1]          = valuN PWild+    valu [2, a, b]    = valuN PDef a b+    valu [3, a, b]    = valuN PLam a b+    valu [4, a, b]    = valuN PPi a b+    valu [5, a, b]    = valuN PBoundVar a b+    valu [6, a]       = valuN PTerm a     valu _            = malformed  instance EmbPrj NLPType where-  icod_ (NLPType a b) = icode2' a b+  icod_ (NLPType a b) = icodeN' NLPType a b -  value = vcase valu where-    valu [a, b] = valu2 NLPType a b-    valu _      = malformed+  value = valueN NLPType  instance EmbPrj RewriteRule where-  icod_ (RewriteRule a b c d e f) = icode6' a b c d e f+  icod_ (RewriteRule a b c d e f) = icodeN' RewriteRule a b c d e f -  value = vcase valu where-    valu [a, b, c, d, e, f] = valu6 RewriteRule a b c d e f-    valu _                  = malformed+  value = valueN RewriteRule  instance EmbPrj Projection where-  icod_ (Projection a b c d e) = icode5' a b c d e+  icod_ (Projection a b c d e) = icodeN' Projection a b c d e -  value = vcase valu where-    valu [a, b, c, d, e] = valu5 Projection a b c d e-    valu _ = malformed+  value = valueN Projection  instance EmbPrj ProjLams where-  icod_ (ProjLams a) = icode1' a+  icod_ (ProjLams a) = icodeN' ProjLams a -  value = vcase valu where-    valu [a] = valu1 ProjLams a-    valu _   = malformed+  value = valueN ProjLams  instance EmbPrj ExtLamInfo where-  icod_ (ExtLamInfo a b) = icode2' a b+  icod_ (ExtLamInfo a b) = icodeN' ExtLamInfo a b -  value = vcase valu where-    valu [a, b] = valu2 ExtLamInfo a b-    valu _      = malformed+  value = valueN ExtLamInfo  instance EmbPrj Polarity where   icod_ Covariant     = return 0@@ -299,129 +271,139 @@   value _ = malformed  instance EmbPrj EtaEquality where-  icod_ (Specified a) = icode1 0 a-  icod_ (Inferred a)  = icode1 1 a+  icod_ (Specified a) = icodeN 0 Specified a+  icod_ (Inferred a)  = icodeN 1 Inferred a    value = vcase valu where-    valu [0,a] = valu1 Specified a-    valu [1,a] = valu1 Inferred a+    valu [0,a] = valuN Specified a+    valu [1,a] = valuN Inferred a     valu _     = malformed  instance EmbPrj Defn where-  icod_ Axiom                                   = icode0 0-  icod_ (Function    a b _ c d e f g h i j k m) = icode12 1 a b c d e f g h i j k 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)     = icode11 3 a b c d e f g h i j k-  icod_ (Constructor a b c d e f)               = icode6 4 a b c d e f-  icod_ (Primitive   a b c d)                   = icode4 5 a b c d-  icod_ AbstractDefn                            = __IMPOSSIBLE__+  icod_ Axiom                                   = icodeN 0 Axiom+  icod_ (Function    a b t c d e f g h i j k m) =+    icodeN 1 (\ a b -> Function a b t) a b c d e f g h i j k m+  icod_ (Datatype    a b c d e f g h i j)       = icodeN 2 Datatype a b c d e f g h i j+  icod_ (Record      a b c d e f g h i j)       = icodeN 3 Record a b c d e f g h i j+  icod_ (Constructor a b c d e f g)             = icodeN 4 Constructor a b c d e f g+  icod_ (Primitive   a b c d)                   = icodeN 5 Primitive a b c d+  icod_ AbstractDefn{}                          = __IMPOSSIBLE__    value = vcase valu where-    valu [0]                                     = valu0 Axiom-    valu [1, a, b, c, d, e, f, g, h, i, j, k, m] = valu12 (\ a b -> Function a b Nothing) a b c d e f g h i j k 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]    = valu11 Record  a b c d e f g h i j k-    valu [4, a, b, c, d, e, f]                   = valu6 Constructor a b c d e f-    valu [5, a, b, c, d]                         = valu4 Primitive   a b c d+    valu [0]                                     = valuN Axiom+    valu [1, a, b, c, d, e, f, g, h, i, j, k, m] = valuN (\ a b -> Function a b Nothing) a b c d e f g h i j k m+    valu [2, a, b, c, d, e, f, g, h, i, j]       = valuN Datatype a b c d e f g h i j+    valu [3, a, b, c, d, e, f, g, h, i, j]       = valuN Record  a b c d e f g h i j+    valu [4, a, b, c, d, e, f, g]                = valuN Constructor a b c d e f g+    valu [5, a, b, c, d]                         = valuN Primitive   a b c d     valu _                                       = malformed  instance EmbPrj FunctionFlag where-  icod_ FunStatic       = icode0 0-  icod_ FunInline       = icode0 1-  icod_ FunMacro        = icode0 2+  icod_ FunStatic       = icodeN 0 FunStatic+  icod_ FunInline       = icodeN 1 FunInline+  icod_ FunMacro        = icodeN 2 FunMacro    value = vcase valu where-    valu [0] = valu0 FunStatic-    valu [1] = valu0 FunInline-    valu [2] = valu0 FunMacro+    valu [0] = valuN FunStatic+    valu [1] = valuN FunInline+    valu [2] = valuN FunMacro     valu _   = malformed  instance EmbPrj a => EmbPrj (WithArity a) where-  icod_ (WithArity a b) = icode2' a b+  icod_ (WithArity a b) = icodeN' WithArity a b -  value = vcase valu where-    valu [a, b] = valu2 WithArity a b-    valu _      = malformed+  value = valueN WithArity  instance EmbPrj a => EmbPrj (Case a) where-  icod_ (Branches a b c d) = icode4' a b c d+  icod_ (Branches a b c d) = icodeN' Branches a b c d -  value = vcase valu where-    valu [a, b, c, d] = valu4 Branches a b c d-    valu _            = malformed+  value = valueN Branches  instance EmbPrj CompiledClauses where-  icod_ Fail       = icode0'-  icod_ (Done a b) = icode2' a (P.killRange b)-  icod_ (Case a b) = icode2 2 a b+  icod_ Fail       = icodeN' Fail+  icod_ (Done a b) = icodeN' Done a (P.killRange b)+  icod_ (Case a b) = icodeN 2 Case 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 []        = valuN Fail+    valu [a, b]    = valuN Done a b+    valu [2, a, b] = valuN Case a b     valu _         = malformed  instance EmbPrj a => EmbPrj (FunctionInverse' a) where-  icod_ NotInjective = icode0'-  icod_ (Inverse a)  = icode1' a+  icod_ NotInjective = icodeN' NotInjective+  icod_ (Inverse a)  = icodeN' Inverse a    value = vcase valu where-    valu []  = valu0 NotInjective-    valu [a] = valu1 Inverse a+    valu []  = valuN NotInjective+    valu [a] = valuN Inverse a     valu _   = malformed  instance EmbPrj TermHead where-  icod_ SortHead     = icode0'-  icod_ PiHead       = icode0 1-  icod_ (ConsHead a) = icode1 2 a+  icod_ SortHead     = icodeN' SortHead+  icod_ PiHead       = icodeN 1 PiHead+  icod_ (ConsHead a) = icodeN 2 ConsHead a    value = vcase valu where-    valu []     = valu0 SortHead-    valu [1]    = valu0 PiHead-    valu [2, a] = valu1 ConsHead a+    valu []     = valuN SortHead+    valu [1]    = valuN PiHead+    valu [2, a] = valuN ConsHead a     valu _      = malformed  instance EmbPrj I.Clause where-  icod_ (Clause a b c d e f) = icode6' a b c d e f+  icod_ (Clause a b c d e f g h) = icodeN' Clause a b c d e f g h -  value = vcase valu where-    valu [a, b, c, d, e, f] = valu6 Clause a b c d e f-    valu _                  = malformed+  value = valueN Clause  instance EmbPrj I.ConPatternInfo where-  icod_ (ConPatternInfo a b) = icode2' a b+  icod_ (ConPatternInfo a b) = icodeN' ConPatternInfo a b -  value = vcase valu where-    valu [a, b] = valu2 ConPatternInfo a b-    valu _      = malformed+  value = valueN ConPatternInfo  instance EmbPrj I.DBPatVar where-  icod_ (DBPatVar a b) = icode2' a b+  icod_ (DBPatVar a b) = icodeN' DBPatVar a b -  value = vcase valu where-    valu [a, b] = valu2 DBPatVar a b-    valu _      = malformed+  value = valueN DBPatVar  instance EmbPrj a => EmbPrj (I.Pattern' a) where-  icod_ (VarP a    ) = icode1' a-  icod_ (ConP a b c) = icode3 1 a b c-  icod_ (LitP a    ) = icode1 2 a-  icod_ (DotP a    ) = icode1 3 a-  icod_ (ProjP a b ) = icode2 4 a b+  icod_ (VarP a    ) = icodeN' VarP a+  icod_ (ConP a b c) = icodeN 1 ConP a b c+  icod_ (LitP a    ) = icodeN 2 LitP a+  icod_ (DotP a    ) = icodeN 3 DotP a+  icod_ (ProjP a b ) = icodeN 4 ProjP a b+  icod_ (AbsurdP a ) = icodeN 5 AbsurdP a    value = vcase valu where-    valu [a]       = valu1 VarP a-    valu [1, a, b, c] = valu3 ConP a b c-    valu [2, a]    = valu1 LitP a-    valu [3, a]    = valu1 DotP a-    valu [4, a, b] = valu2 ProjP a b+    valu [a]       = valuN VarP a+    valu [1, a, b, c] = valuN ConP a b c+    valu [2, a]    = valuN LitP a+    valu [3, a]    = valuN DotP a+    valu [4, a, b] = valuN ProjP a b+    valu [5, a]    = valuN AbsurdP a     valu _         = malformed  instance EmbPrj a => EmbPrj (Builtin a) where-  icod_ (Prim    a) = icode1' a-  icod_ (Builtin a) = icode1 1 a+  icod_ (Prim    a) = icodeN' Prim a+  icod_ (Builtin a) = icodeN 1 Builtin a    value = vcase valu where-    valu [a]    = valu1 Prim    a-    valu [1, a] = valu1 Builtin a+    valu [a]    = valuN Prim    a+    valu [1, a] = valuN Builtin a     valu _      = malformed++instance EmbPrj a => EmbPrj (Substitution' a) where+  icod_ IdS              = icodeN' IdS+  icod_ (EmptyS a)       = icodeN 1 EmptyS a+  icod_ (a :# b)         = icodeN 2 (:#) a b+  icod_ (Strengthen a b) = icodeN 3 Strengthen a b+  icod_ (Wk a b)         = icodeN 4 Wk a b+  icod_ (Lift a b)       = icodeN 5 Lift a b++  value = vcase valu where+    valu []        = valuN IdS+    valu [1, a]    = valuN EmptyS a+    valu [2, a, b] = valuN (:#) a b+    valu [3, a, b]    = valuN Strengthen a b+    valu [4, a, b] = valuN Wk a b+    valu [5, a, b] = valuN Lift a b+    valu _         = malformed
src/full/Agda/TypeChecking/SizedTypes.hs view
@@ -7,7 +7,7 @@  import Control.Monad.Writer -import Data.List hiding (null)+import qualified Data.List as List import qualified Data.Map as Map  import Agda.Syntax.Common@@ -43,18 +43,31 @@ -- | Check whether a type is either not a SIZELT or a SIZELT that is non-empty. checkSizeLtSat :: Term -> TCM () checkSizeLtSat t = do-  reportSDoc "tc.size" 10 $ sep-    [ text "checking that " <+> prettyTCM t <+> text " is not an empty type of sizes"-    , text "in context " <+> do inTopContext . prettyTCM =<< getContextTelescope-    ]+  reportSDoc "tc.size" 10 $ do+    tel <- getContextTelescope+    sep+      [ text "checking that " <+> prettyTCM t <+> text " is not an empty type of sizes"+      , if null tel then empty else do+        text "in context " <+> inTopContext (prettyTCM tel)+      ]+  reportSLn "tc.size" 60 $ "- raw type = " ++ show t   let postpone :: Term -> TCM ()-      postpone t = addConstraint $ CheckSizeLtSat t+      postpone t = do+        reportSDoc "tc.size.lt" 20 $ sep+          [ text "- postponing `not empty type of sizes' check for " <+> prettyTCM t ]+        addConstraint $ CheckSizeLtSat t+  let ok :: TCM ()+      ok = reportSLn "tc.size.lt" 20 $ "- succeeded: not an empty type of sizes"   ifBlocked t (const postpone) $ \ t -> do-    caseMaybeM (isSizeType t) (return ()) $ \ b -> do+    reportSLn "tc.size.lt" 20 $ "- type is not blocked"+    caseMaybeM (isSizeType t) ok $ \ b -> do+      reportSLn "tc.size.lt" 20 $ " - type is a size type"       case b of-        BoundedNo -> return ()+        BoundedNo -> ok         BoundedLt b -> do+          reportSDoc "tc.size.lt" 20 $ text " - type is SIZELT" <+> prettyTCM b           ifBlocked b (\ _ _ -> postpone t) $ \ b -> do+            reportSLn "tc.size.lt" 20 $ " - size bound is not blocked"             catchConstraint (CheckSizeLtSat t) $ do               unlessM (checkSizeNeverZero b) $ do                 typeError . GenericDocError =<< do@@ -177,9 +190,9 @@   case res of     Just (BoundedLt u) -> do       n <- getContextSize-      let tel | n > 0     = telFromList $ genericDrop n $ telToList tel0+      let tel | n > 0     = telFromList $ drop n $ telToList tel0               | otherwise = tel0-      addContext tel $ do+      addContext' tel $ do         v <- sizeSuc 1 $ raise (size tel) v `apply` teleArgs tel         -- compareSizes CmpLeq v u         size <- sizeType@@ -286,8 +299,14 @@  -- | @compareBelowMax u vs@ checks @u <= max vs@.  Precondition: @size vs >= 2@ compareBelowMax :: DeepSizeView -> SizeMaxView -> TCM ()-compareBelowMax u vs =+compareBelowMax u vs = do+  reportSDoc "tc.conv.size" 45 $ vcat+    [ text "compareBelowMax"+    ]   alt (dontAssignMetas $ alts $ map (compareSizeViews CmpLeq u) vs) $ do+    reportSDoc "tc.conv.size" 45 $ vcat+      [ text "compareBelowMax: giving up"+      ]     u <- unDeepSizeView u     v <- unMaxView vs     size <- sizeType@@ -299,6 +318,12 @@  compareSizeViews :: Comparison -> DeepSizeView -> DeepSizeView -> TCM () compareSizeViews cmp s1' s2' = do+  reportSDoc "tc.conv.size" 45 $ hsep+    [ text "compareSizeViews"+    , text (show s1')+    , text (show cmp)+    , text (show s2')+    ]   size <- sizeType   let (s1, s2) = removeSucs (s1', s2')       withUnView cont = do@@ -359,14 +384,27 @@ isSizeConstraint Closure{ clValue = ValueCmp _ s _ _ } = isJust <$> isSizeType s isSizeConstraint _ = return False +-- | Take out all size constraints (DANGER!).+takeSizeConstraints :: TCM [Closure Constraint]+takeSizeConstraints = do+  test <- isSizeTypeTest+  let sizeConstraint :: Closure Constraint -> Bool+      sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }+              | isJust (test $ unEl s) = True+      sizeConstraint _ = False+  cs <- filter sizeConstraint . map theConstraint <$> getAllConstraints+  dropConstraints $ sizeConstraint . theConstraint+  return cs+ -- | Find the size constraints. getSizeConstraints :: TCM [Closure Constraint] getSizeConstraints = do   test <- isSizeTypeTest-  let sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }-              | isJust (test $ unEl s) = Just cl-      sizeConstraint _ = Nothing-  mapMaybe (sizeConstraint . theConstraint) <$> getAllConstraints+  let sizeConstraint :: Closure Constraint -> Bool+      sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }+              | isJust (test $ unEl s) = True+      sizeConstraint _ = False+  filter sizeConstraint . map theConstraint <$> getAllConstraints  -- | Return a list of size metas and their context. getSizeMetas :: Bool -> TCM [(MetaId, Type, Telescope)]@@ -524,17 +562,17 @@   case (a,b) of     (Rigid{}, Rigid{})       -> return c     (SizeMeta m xs, Rigid i) -> do-      j <- findIndex (==i) xs+      j <- List.findIndex (==i) xs       return $ Leq (SizeMeta m [0..size xs-1]) n (Rigid j)     (Rigid i, SizeMeta m xs) -> do-      j <- findIndex (==i) xs+      j <- List.findIndex (==i) xs       return $ Leq (Rigid j) n (SizeMeta m [0..size xs-1])     (SizeMeta m xs, SizeMeta l ys)          -- try to invert xs on ys-       | Just ys' <- mapM (\ y -> findIndex (==y) xs) ys ->+       | Just ys' <- mapM (\ y -> List.findIndex (==y) xs) ys ->            return $ Leq (SizeMeta m [0..size xs-1]) n (SizeMeta l ys')          -- try to invert ys on xs-       | Just xs' <- mapM (\ x -> findIndex (==x) ys) xs ->+       | Just xs' <- mapM (\ x -> List.findIndex (==x) ys) xs ->            return $ Leq (SizeMeta m xs') n (SizeMeta l [0..size ys-1])          -- give up        | otherwise -> Nothing@@ -562,7 +600,7 @@          -- Size metas in constraints.         metas0 :: [(MetaId, Int)]  -- meta id + arity-        metas0 = nub $ map (mapSnd length) $ concatMap flexibleVariables cs+        metas0 = List.nub $ map (mapSnd length) $ concatMap flexibleVariables cs          -- Unconstrained size metas that do not occur in constraints.         metas1 :: [(MetaId, Int)]
src/full/Agda/TypeChecking/SizedTypes/Solve.hs view
@@ -1,6 +1,5 @@-{-# LANGUAGE CPP                   #-}+{-# LANGUAGE CPP                      #-} {-# LANGUAGE NondecreasingIndentation #-}-{-# LANGUAGE ScopedTypeVariables   #-}  -- | Solving size constraints under hypotheses. --@@ -103,12 +102,12 @@ import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null+import Agda.Utils.Pretty (Pretty, prettyShow)+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size import Agda.Utils.Tuple import qualified Agda.Utils.VarSet as VarSet -import qualified Agda.Utils.Either as Either- #include "undefined.h" import Agda.Utils.Impossible @@ -125,9 +124,10 @@ solveSizeConstraints :: DefaultToInfty -> TCM () solveSizeConstraints flag =  do -  -- 1. Get the constraints normalised.+  -- 1. Take out the size constraints normalised. -  cs0 <- mapM (mapClosure normalise) =<< S.getSizeConstraints+  cs0 <- mapM (mapClosure normalise) =<< S.takeSizeConstraints+    -- NOTE: this deletes the size constraints from the constraint set!   unless (null cs0) $     reportSDoc "tc.size.solve" 40 $ vcat $       [ text $ "Solving constraints (" ++ show flag ++ ")"@@ -215,6 +215,8 @@   --       forM_ cs0 $ \ cl -> enterClosure cl solveConstraint    -- 5. Make sure we did not lose any constraints.++  -- This is necessary since we have removed the size constraints.   forM_ cs0 $ \ cl -> enterClosure cl solveConstraint  @@ -341,7 +343,7 @@   -- Check that all the free variables of the constraint are contained in   -- coveredVars.   -- We ignore the free variables occurring in sorts.-  guard $ getAll $ runFree (\ (i, _) -> All $ i `VarSet.member` coveredVars) IgnoreAll c+  guard $ getAll $ runFree (All . (`VarSet.member` coveredVars)) IgnoreAll c   -- Turn cand into a substitution.   -- Since we ignored the free variables in sorts, we better patch up   -- the substitution with some dummy term (Sort Prop) rather than __IMPOSSIBLE__.@@ -493,10 +495,10 @@   -- Running the solver once might result in unsolvable left-over constraints.   -- We need to iterate the solver to detect this.   sol :: Solution NamedRigid Int <- either err return $-    iterateSolver Map.empty hg csF Map.empty+    iterateSolver Map.empty hg csF emptySolution    -- Convert solution to meta instantiation.-  forM_ (Map.assocs sol) $ \ (m, a) -> do+  forM_ (Map.assocs $ theSolution sol) $ \ (m, a) -> do     unless (validOffset a) __IMPOSSIBLE__     -- Solution does not contain metas     u <- unSizeExpr $ fmap __IMPOSSIBLE__ a@@ -516,7 +518,8 @@       [ text $ "  xs = " ++ show xs       , text $ "  u  = " ++ show u       ]-    assignMeta n x t xs u+    unlessM (isFrozen x) $+      assignMeta n x t xs u     -- WRONG:     -- let partialSubst = List.sort $ zip xs $ map var $ downFrom n     -- assignMeta' n x t (length xs) partialSubst u@@ -529,7 +532,7 @@    --  ms = unsolved size metas from cluster   let ms = Set.fromList (map sizeMetaId metas) Set.\\  -- Some CPP or ghc does not like trailing backslash, thus, this comment!-             Set.mapMonotonic MetaId (Map.keysSet sol)+             Set.mapMonotonic MetaId (Map.keysSet $ theSolution sol)   --  Make sure they do not contain an interaction point   let noIP = Set.null $ Set.intersection ims ms @@ -552,7 +555,7 @@               reportSDoc "tc.size.solve" 30 $                 prettyTCM (MetaV m []) <+> text "is frozen, cannot set it to ∞"               return False-        ifM (isFrozen m) no $ {-else-} do+        ifM (isFrozen m `or2M` do not <$> asks envAssignMetas) no $ {-else-} do           reportSDoc "tc.size.solve" 20 $             text "solution " <+> prettyTCM (MetaV m []) <+>             text " := "      <+> prettyTCM inf@@ -582,7 +585,7 @@       forM (zip [0..] gamma) $ \ (i, ce) -> do         -- Get name and type of variable i.         let xt = unDom $ ctxEntry ce-            x  = show $ fst xt+            x  = prettyShow $ fst xt         t <- reduce . raise (1 + i) . unEl . snd $ xt         case ignoreSharing t of           Def d [Apply u] | d == sizelt -> do@@ -656,11 +659,11 @@ data NamedRigid = NamedRigid   { rigidName  :: String   -- ^ Name for printing in debug messages.   , rigidIndex :: Int      -- ^ De Bruijn index.-  }+  } deriving (Show)  instance Eq NamedRigid where (==) = (==) `on` rigidIndex instance Ord NamedRigid where compare = compare `on` rigidIndex-instance Show NamedRigid where show = rigidName+instance Pretty NamedRigid where pretty = P.text . rigidName instance Plus NamedRigid Int NamedRigid where   plus (NamedRigid x i) j = NamedRigid x (i + j) @@ -671,14 +674,14 @@   -- , sizeMetaPerm :: Permutation -- ^ Permutation from the current context   --                               --   to the context of the meta.   , sizeMetaArgs :: [Int]       -- ^ De Bruijn indices.-  }+  } deriving (Show)  -- | An equality which ignores the meta arguments. instance Eq  SizeMeta where (==)    = (==)    `on` sizeMetaId -- | An order which ignores the meta arguments. instance Ord SizeMeta where compare = compare `on` sizeMetaId -instance Show SizeMeta where show = show . sizeMetaId+instance Pretty SizeMeta where pretty = P.pretty . sizeMetaId  instance PrettyTCM SizeMeta where   prettyTCM (SizeMeta x es) = prettyTCM (MetaV x $ map (Apply . defaultArg . var) es)@@ -721,7 +724,7 @@   prettyTCM (Constraint a cmp b) = do     u <- unSizeExpr a     v <- unSizeExpr b-    prettyTCM u <+> text (show cmp) <+> prettyTCM v+    prettyTCM u <+> pretty cmp <+> prettyTCM v  -- | Size constraint with de Bruijn indices. data HypSizeConstraint = HypSizeConstraint@@ -778,7 +781,7 @@     SizeInf     -> return $ Just Infty     SizeSuc u   -> fmap (`plus` (1 :: Offset)) <$> sizeExpr u     OtherSize u -> case ignoreSharing u of-      Var i []    -> (\ x -> Just $ Rigid (NamedRigid x i) 0) . show <$> nameOfBV i+      Var i []    -> (\ x -> Just $ Rigid (NamedRigid x i) 0) . prettyShow <$> nameOfBV i --      MetaV m es  -> return $ Just $ Flex (SizeMeta m es) 0       MetaV m es | Just xs <- mapM isVar es, List.fastDistinct xs                   -> return $ Just $ Flex (SizeMeta m xs) 0
src/full/Agda/TypeChecking/SizedTypes/Syntax.hs view
@@ -6,6 +6,9 @@  module Agda.TypeChecking.SizedTypes.Syntax where +import Prelude hiding (null)++import Data.Maybe import Data.Foldable (Foldable) import Data.Map (Map) import qualified Data.Map as Map@@ -15,15 +18,23 @@  import Agda.TypeChecking.SizedTypes.Utils +import Agda.Utils.Functor+import Agda.Utils.Null+import Agda.Utils.Pretty+ -- * Syntax  -- | Constant finite sizes @n >= 0@. newtype Offset = O Int   deriving (Eq, Ord, Num, Enum) +-- This Show instance is ok because of the Enum constraint. instance Show Offset where   show (O n) = show n +instance Pretty Offset where+  pretty (O n) = pretty n+ instance MeetSemiLattice Offset where   meet = min @@ -34,21 +45,29 @@ newtype Rigid  = RigidId { rigidId :: String }   deriving (Eq, Ord) -instance Show Rigid where show = rigidId+instance Show Rigid where+  show (RigidId s) = "RigidId " ++ show s +instance Pretty Rigid where+  pretty = text . rigidId+ -- | Size meta variables @X@ to solve for. newtype Flex   = FlexId { flexId :: String }   deriving (Eq, Ord) -instance Show Flex where show = flexId+instance Show Flex where+  show (FlexId s) = "FlexId " ++ show s +instance Pretty Flex where+  pretty = text . flexId+ -- | Size expressions appearing in constraints. data SizeExpr' rigid flex   = Const { offset :: Offset }                   -- ^ Constant number @n@.   | Rigid { rigid  :: rigid, offset :: Offset }  -- ^ Variable plus offset @i + n@.   | Infty                                        -- ^ Infinity @∞@.   | Flex  { flex   :: flex, offset :: Offset }   -- ^ Meta variable @X + n@.-    deriving (Eq, Ord, Functor, Foldable, Traversable)+    deriving (Show, Eq, Ord, Functor, Foldable, Traversable)  type SizeExpr = SizeExpr' Rigid Flex @@ -56,7 +75,7 @@ data Cmp   = Lt  -- ^ @<@.   | Le  -- ^ @≤@.-  deriving (Eq, Bounded, Enum)+  deriving (Show, Eq, Bounded, Enum)  instance Dioid Cmp where   compose     = min@@ -81,7 +100,7 @@   , cmp       :: Cmp   , rightExpr :: SizeExpr' rigid flex   }-  deriving (Functor, Foldable, Traversable)+  deriving (Show, Functor, Foldable, Traversable)  type Constraint = Constraint' Rigid Flex @@ -112,18 +131,24 @@ ------------------------------------------------------------------------  -- | Partial substitution from flexible variables to size expression.-type Solution rigid flex = Map flex (SizeExpr' rigid flex)+newtype Solution rigid flex = Solution { theSolution :: Map flex (SizeExpr' rigid flex) }+  deriving (Show, Null) --- emptySolution = Map.empty+instance (Pretty r, Pretty f) => Pretty (Solution r f) where+  pretty (Solution sol) = prettyList $ for (Map.toList sol) $ \ (x, e) ->+    pretty x <+> text ":=" <+> pretty e +emptySolution :: Solution r f+emptySolution = Solution Map.empty+ -- | Executing a substitution. class Substitute r f a where   subst :: Solution r f -> a -> a  instance Ord f => Substitute r f (SizeExpr' r f) where-  subst sol e =+  subst (Solution sol) e =     case e of-      Flex x n -> Map.findWithDefault e x sol `plus` n+      Flex x n -> maybe e (`plus` n) $ Map.lookup x sol       _        -> e  instance Ord f => Substitute r f (Constraint' r f) where@@ -135,6 +160,9 @@ instance Substitute r f a => Substitute r f (Map k a) where   subst = fmap . subst +instance Ord f => Substitute r f (Solution r f) where+  subst s = Solution . subst s . theSolution+ -- | Add offset to size expression. instance Plus (SizeExpr' r f) Offset (SizeExpr' r f) where   plus e m =@@ -149,9 +177,9 @@ type CTrans r f = Constraint' r f -> Either String [Constraint' r f]  -- | Returns an error message if we have a contradictory constraint.-simplify1 :: (Show f, Show r, Eq r) => CTrans r f -> CTrans r f+simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f simplify1 test c = do-  let err = Left $ "size constraint " ++ show c ++ " is inconsistent"+  let err = Left $ "size constraint " ++ prettyShow c ++ " is inconsistent"   case c of     -- rhs is Infty     Constraint a           Le  Infty -> return []@@ -212,27 +240,27 @@  -- * Printing -instance (Show r, Show f) => Show (SizeExpr' r f) where-  show (Const n)   = show n-  show (Infty)     = "∞"-  show (Rigid i 0) = show i-  show (Rigid i n) = show i ++ "+" ++ show n-  show (Flex  x 0) = show x-  show (Flex  x n) = show x ++ "+" ++ show n+instance (Pretty r, Pretty f) => Pretty (SizeExpr' r f) where+  pretty (Const n)   = pretty n+  pretty (Infty)     = text "∞"+  pretty (Rigid i 0) = pretty i+  pretty (Rigid i n) = pretty i <> text ("+" ++ show n)+  pretty (Flex  x 0) = pretty x+  pretty (Flex  x n) = pretty x <> text ("+" ++ show n) -instance Show Polarity where-  show Least    = "-"-  show Greatest = "+"+instance Pretty Polarity where+  pretty Least    = text "-"+  pretty Greatest = text "+" -instance Show flex => Show (PolarityAssignment flex) where-  show (PolarityAssignment pol flex) = show pol ++ show flex+instance Pretty flex => Pretty (PolarityAssignment flex) where+  pretty (PolarityAssignment pol flex) = pretty pol <> pretty flex -instance Show Cmp where-  show Le = "≤"-  show Lt = "<"+instance Pretty Cmp where+  pretty Le = text "≤"+  pretty Lt = text "<" -instance (Show r, Show f) => Show (Constraint' r f) where-  show (Constraint a cmp b) = show a ++ " " ++ show cmp ++ " " ++ show b+instance (Pretty r, Pretty f) => Pretty (Constraint' r f) where+  pretty (Constraint a cmp b) = pretty a <+> pretty cmp <+> pretty b  -- * Wellformedness 
src/full/Agda/TypeChecking/SizedTypes/Utils.hs view
@@ -2,14 +2,21 @@ module Agda.TypeChecking.SizedTypes.Utils where  import Control.Applicative+import Data.IORef import qualified Debug.Trace as Debug+import System.IO.Unsafe+ import Agda.Utils.Function -debug :: Bool-debug = False+{-# NOINLINE debug #-}+debug :: IORef Bool+debug = unsafePerformIO $ newIORef False +setDebugging :: Bool -> IO ()+setDebugging = writeIORef debug+ trace :: String -> a -> a-trace  s = applyWhen debug $ Debug.trace s+trace s = applyWhen (unsafePerformIO $ readIORef debug) $ Debug.trace s  traceM :: Applicative f => String -> f () traceM s = trace s $ pure ()
src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs view
@@ -1,22 +1,20 @@ {-# LANGUAGE CPP                       #-} {-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE ScopedTypeVariables       #-}  module Agda.TypeChecking.SizedTypes.WarshallSolver where -import Prelude hiding (truncate)+import Prelude hiding (null, truncate) -import Control.Applicative hiding (Const)+import Control.Applicative hiding (Const, empty) import Control.Monad  import Data.Function (on)-import Data.List as List+import qualified Data.List as List import Data.Maybe import Data.Set (Set) import qualified Data.Set as Set import Data.Map (Map) import qualified Data.Map as Map-import Data.Traversable (for)  import Agda.TypeChecking.SizedTypes.Syntax import Agda.TypeChecking.SizedTypes.Utils@@ -26,6 +24,10 @@ -- (Edge'(..), allNodes, emptyGraph, insertEdge, graphToList, graphFromList, nodes, lookupEdge, outgoing, incoming, diagonal, transClos) import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph +import Agda.Utils.Functor+import Agda.Utils.Null+import Agda.Utils.Pretty+ #include "undefined.h" import Agda.Utils.Impossible @@ -93,11 +95,11 @@ data Weight   = Offset Offset   | Infinity-  deriving (Eq)+  deriving (Eq, Show) -instance Show Weight where-  show (Offset x) = show x-  show Infinity   = "∞"+instance Pretty Weight where+  pretty (Offset x) = pretty x+  pretty Infinity   = text "∞"  instance Ord Weight where   x        <= Infinity = True@@ -167,6 +169,7 @@ data Label   = Label { lcmp :: Cmp, loffset :: Offset }   | LInf  -- ^ Nodes not connected.+  deriving (Show)   -- | Convert a label to a weight, decrementing in case of 'Lt'.@@ -191,9 +194,9 @@   _           <= LInf        = True   LInf{}      <= Label{}     = False -instance Show Label where-  show (Label cmp w) = show cmp ++ show w-  show LInf          = "∞"+instance Pretty Label where+  pretty (Label cmp w) = pretty cmp <> pretty w+  pretty LInf          = text "∞"  instance MeetSemiLattice Label where   -- one label is neutral@@ -232,13 +235,13 @@   | NodeInfty   | NodeRigid rigid   | NodeFlex  flex-  deriving (Eq, Ord)+  deriving (Show, Eq, Ord) -instance (Show rigid, Show flex) => Show (Node rigid flex) where-  show NodeZero      = "0"-  show NodeInfty     = "∞"-  show (NodeRigid x) = show x-  show (NodeFlex  x) = show x+instance (Pretty rigid, Pretty flex) => Pretty (Node rigid flex) where+  pretty NodeZero      = text "0"+  pretty NodeInfty     = text "∞"+  pretty (NodeRigid x) = pretty x+  pretty (NodeFlex  x) = pretty x  isFlexNode :: Node rigid flex -> Maybe flex isFlexNode (NodeFlex x) = Just x@@ -300,7 +303,7 @@ mentions NodeZero    gs = ([], gs) mentions NodeInfty   gs = ([], gs) mentions NodeRigid{} gs = ([], gs)-mentions n           gs = partition (Set.member n . nodes) gs+mentions n           gs = List.partition (Set.member n . nodes) gs  -- | Add an edge to a graph forest. --   Graphs that share a node with the edge are joined.@@ -327,7 +330,7 @@  -- UNUSED -- -- | Reflexive-transitive closure.--- complete :: (Show a, Dioid a) => Graph r f a -> Graph r f a+-- complete :: (Pretty a, Dioid a) => Graph r f a -> Graph r f a -- complete = transClos . reflClos  -- | A graph is 'negative' if it contains a negative loop (diagonal edge).@@ -344,7 +347,7 @@ -- --   Application: Constraint implication: Constraints are compatible --   with hypotheses.-implies :: (Ord r, Ord f, Show r, Show f, Show a, Top a, Ord a, Negative a)+implies :: (Ord r, Ord f, Pretty r, Pretty f, Pretty a, Top a, Ord a, Negative a)   => Graph r f a -> Graph r f a -> Bool -- iterate 'test' over all edges in g implies h g = and $ map test $ graphToList g@@ -361,7 +364,7 @@       | otherwise = case lookupEdge h src dest of         Nothing -> False         Just l' -> if l' <= l then True else-          trace ("edge " ++ show (l <$ k) ++ " not implied by " ++ show (l' <$ k)) $+          trace ("edge " ++ prettyShow (l <$ k) ++ " not implied by " ++ prettyShow (l' <$ k)) $             False -- implies h g = Map.foldlWithKey (\ b k l -> test k l && b) True g --   -- NB: doing the @test k l@ before the recursive @b@ gives@@ -410,7 +413,7 @@       -- get all the flexibles mentioned in constraints       xs    = Set.toList $ flexs cs       -- for each flexible X, add edges 0 <= X and X <= oo-      fedges = concat $ for xs $ \ x ->+      fedges = concat $ forM xs $ \ x ->         [ Edge NodeZero (NodeFlex x) (Label Le 0)         , Edge (NodeFlex x) NodeInfty (Label Le 0)         ]@@ -424,7 +427,7 @@ type Hyp' = Constraint' type HypGraph r f = Graph r f Label -hypGraph :: (Ord rigid, Ord flex, Show rigid, Show flex) =>+hypGraph :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) =>   Set rigid -> [Hyp' rigid flex] -> Either String (HypGraph rigid flex) hypGraph is hyps0 = do   -- get a list of hypothesis from a list of constraints@@ -443,7 +446,7 @@   | Just l <- lookupEdge hg n1 n2 = l   | otherwise                               = top -simplifyWithHypotheses :: (Ord rigid, Ord flex, Show rigid, Show flex) =>+simplifyWithHypotheses :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) =>   HypGraph rigid flex -> [Constraint' rigid flex] -> Either String [Constraint' rigid flex] simplifyWithHypotheses hg cons = concat <$> mapM (simplify1 test) cons   where@@ -455,7 +458,7 @@           l' = hypConn hg n1 n2       -- l' <- lookupEdge hg n1 n2       unless (l' <= l) $ Left $-        "size constraint " ++ show c ++ " not consistent with size hypotheses"+        "size constraint " ++ prettyShow c ++ " not consistent with size hypotheses"       return [c]       -- if (l' <= l) then Just [c] else Nothing @@ -464,13 +467,16 @@  type ConGraph r f = Graph r f Label -constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f)+constraintGraph :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f) constraintGraph cons0 hg = do+  traceM $ "original constraints cons0 = " ++ prettyShow cons0   -- Simplify constraints, ensure they are locally consistent with   -- hypotheses.   cons <- simplifyWithHypotheses hg cons0+  traceM $ "simplified constraints cons = " ++ prettyShow cons   -- Build a transitive graph from constraints.   let g = transClos $ graphFromConstraints cons+  traceM $ "transitive graph g = " ++ prettyShow (graphToList g)   -- Ensure it has no negative loops.   when (negative g) $ Left $     "size constraint graph has negative loops"@@ -481,24 +487,24 @@  type ConGraphs r f = Graphs r f Label -constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f)+constraintGraphs :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f) constraintGraphs cons0 hg = do-  traceM $ "original constraints cons0 = " ++ show cons0+  traceM $ "original constraints cons0 = " ++ prettyShow cons0   -- Simplify constraints, ensure they are locally consistent with   -- hypotheses.   cons <- simplifyWithHypotheses hg cons0-  traceM $ "simplified constraints cons = " ++ show cons+  traceM $ "simplified constraints cons = " ++ prettyShow cons   -- Build a transitive graph forest from constraints.   let gs0 = graphsFromConstraints cons-  traceM $ "constraint forest gs0 = " ++ show (map graphToList gs0)+  traceM $ "constraint forest gs0 = " ++ prettyShow (map graphToList gs0)   let gs1 = map transClos gs0-  traceM $ "transitive forest gs1 = " ++ show (map graphToList gs1)+  traceM $ "transitive forest gs1 = " ++ prettyShow (map graphToList gs1)   -- Check for flexibles to be set to infinity   let (xss,gs) = unzip $ map infinityFlexs gs1       xs       = concat xss   unless (null xs) $ do-    traceM $ "flexibles to set to oo = " ++ show xs-    traceM $ "forest after oo-subst  = " ++ show (map graphToList gs)+    traceM $ "flexibles to set to oo = " ++ prettyShow xs+    traceM $ "forest after oo-subst  = " ++ prettyShow (map graphToList gs)   -- Ensure none has negative loops.   when (negative gs) $ Left $ "size constraint graph has negative loop"   traceM $ "we are free of negative loops"@@ -664,24 +670,33 @@    intersectAll (m:ms) = foldl (Map.intersectionWith (++)) m ms  -- | Compute the sup of two different rigids or a rigid and a constant.-lub' :: forall r f . (Ord r, Ord f, Show r, Show f) =>-        HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)+lub'+  :: forall r f . (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => HypGraph r f+  -> (Node r f, Offset)+  -> (Node r f, Offset)+  -> Maybe (SizeExpr' r f) lub' hg (node1, n) (node2, m) = do   let sucs     = commonSuccs hg [node1, node2]       sucNodes = smallest hg $ Map.keys sucs-  traceM ("lub': sucs = " ++ show sucs)+  traceM ("lub': sucs = " ++ show sucs) -- FIXME: prettyShow   case sucNodes of     -- there is a unique smallest common successor n0 of node1 and node2-    [n0] ->+    [n0] -> do       -- then there are exactly two edges node1 --l1--> n0 and node2 --l2--> n0-      -- with non-positive weigths l1, l2-      case Map.lookup n0 sucs of-        Just [ Edge node1' n1 l1-             , Edge node2' n2 l2-             ] | node1 == node1', node2 == node2'-               , n0 == n1, n0 == n2-               , toWeight l1 <= 0-               , toWeight l2 <= 0 -> do+      -- Andreas, 2017-04-28, issue #2558: The following invariant does not hold always+      -- -- with non-positive weights l1, l2+      let es = fromMaybe __IMPOSSIBLE__ $ Map.lookup n0 sucs+      case es of+        [ Edge node1x n1 l1 ,+          Edge node2x n2 l2 ] -> do+          unless (n0 == n1)         __IMPOSSIBLE__+          unless (n0 == n2)         __IMPOSSIBLE__+          unless (node1 == node1x)  __IMPOSSIBLE__+          unless (node2 == node2x)  __IMPOSSIBLE__+          -- Andreas, 2017-04-28, issue #2558: The following invariant does not hold always+          -- unless (toWeight l1 <= 0) __IMPOSSIBLE__+          -- unless (toWeight l2 <= 0) __IMPOSSIBLE__           let o :: Weight               o = max (n `plus` toWeight l1) (m `plus` toWeight l2)           return $ nodeToSizeExpr n0 `plus` o@@ -690,27 +705,37 @@     _ -> do       let a1 :: SizeExpr' r f = nodeToSizeExpr node1 `plus` n       let a2 :: SizeExpr' r f = nodeToSizeExpr node2 `plus` m-      traceM ("cannot compute lub of " ++ show a1 ++ " and " ++ show a2 ++ " because sucNodes = " ++ show sucNodes)+      traceM ("cannot compute lub of " ++ prettyShow a1 ++ " and " ++ prettyShow a2 ++ " because sucNodes = " ++ prettyShow sucNodes)       Nothing  -- | Compute the inf of two different rigids or a rigid and a constant.-glb' :: forall r f . (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)+glb'+  :: forall r f . (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => HypGraph r f+  -> (Node r f, Offset)+  -> (Node r f, Offset)+  -> Maybe (SizeExpr' r f) glb' hg (node1, n) (node2, m) = do   let preds     = commonPreds hg [node1, node2]       predNodes = largest hg $ Map.keys preds-  traceM ("glb': preds = " ++ show preds)+  traceM ("glb': preds = " ++ show preds) -- FIXME: prettyShow   case predNodes of     -- there is a unique greatest common predecessor n0 of node1 and node2-    [n0] ->+    [n0] -> do       -- then there are exactly two edges n0 --l1--> node1 and n0 --l2--> node2-      -- with non-positive weigths l1, l2-      case Map.lookup n0 preds of-        Just [ Edge n1 node1' l1-             , Edge n2 node2' l2-             ] | node1 == node1', node2 == node2'-               , n0 == n1, n0 == n2-               , toWeight l1 <= 0-               , toWeight l2 <= 0 -> do+      -- Andreas, 2017-04-28, issue #2558: The following invariant may not hold always+      -- -- with non-positive weigths l1, l2+      let es = fromMaybe __IMPOSSIBLE__ $ Map.lookup n0 preds+      case es of+        [ Edge n1 node1x l1 ,+          Edge n2 node2x l2] -> do+          unless (n0 == n1)         __IMPOSSIBLE__+          unless (n0 == n2)         __IMPOSSIBLE__+          unless (node1 == node1x)  __IMPOSSIBLE__+          unless (node2 == node2x)  __IMPOSSIBLE__+          -- Andreas, 2017-04-28, issue #2558: The following invariant may not hold always+          -- unless (toWeight l1 <= 0) __IMPOSSIBLE__+          -- unless (toWeight l2 <= 0) __IMPOSSIBLE__           let o :: Weight               o = max (n `plus` toWeight l1) (m `plus` toWeight l2)           return $ nodeToSizeExpr n0 `plus` o@@ -719,11 +744,16 @@     _ -> do       let a1 :: SizeExpr' r f = nodeToSizeExpr node1 `plus` n       let a2 :: SizeExpr' r f = nodeToSizeExpr node2 `plus` m-      traceM ("cannot compute glb of " ++ show a1 ++ " and " ++ show a2 ++ " because predNodes = " ++ show predNodes)+      traceM ("cannot compute glb of " ++ prettyShow a1 ++ " and " ++ prettyShow a2 ++ " because predNodes = " ++ prettyShow predNodes)       Nothing  -- | Compute the least upper bound (sup).-lub :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)+lub+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => HypGraph r f+  -> SizeExpr' r f+  -> SizeExpr' r f+  -> Maybe (SizeExpr' r f) lub hg a1 a2 =   case (a1, a2) of     (Flex{}, _)   -> __IMPOSSIBLE__@@ -754,7 +784,12 @@  -- | Compute the greatest lower bound (inf) of size expressions relative --   to a hypotheses graph.-glb :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)+glb+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => HypGraph r f+  -> SizeExpr' r f+  -> SizeExpr' r f+  -> Maybe (SizeExpr' r f) glb hg a1 a2 =   case (a1, a2) of     (Flex{}, _) -> __IMPOSSIBLE__@@ -791,7 +826,7 @@           srcj = Set.fromList $ map src lbj           srcs =  Set.intersection srci srcj -}-    _ -> trace ("cannot compute glb of " ++ show a1 ++ " and " ++ show a2) $+    _ -> trace ("cannot compute glb of " ++ prettyShow a1 ++ " and " ++ prettyShow a2) $       Nothing -- TODO! -} @@ -805,23 +840,28 @@             Infinity -> Nothing             Offset o -> if o <= m then Just (n, o) else Nothing         | otherwise = __IMPOSSIBLE__-            -- error $ "findRigidBelow: impossible: " ++ show e+            -- error $ "findRigidBelow: impossible: " ++ prettyShow e       cands = mapMaybe filt preds   (n, o) <- do     case cands of       []  -> Nothing       [c] -> return c       _   -> return $-               maximumBy (compare `on` snd) $+               List.maximumBy (compare `on` snd) $                  filter ((NodeZero /=) . fst) cands   let offset = m - o   unless (offset >= 0) __IMPOSSIBLE__   return $ nodeToSizeExpr n `plus` offset findRigidBelow hg e = __IMPOSSIBLE__-  -- error $ "findRigidBelow: impossible: " ++ show e+  -- error $ "findRigidBelow: impossible: " ++ prettyShow e  -solveGraph :: (Ord r, Ord f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraph r f -> Either String (Solution r f)+solveGraph+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => Polarities f+  -> HypGraph r f+  -> ConGraph r f+  -> Either String (Solution r f) solveGraph pols hg g = do   let (Bounds lbs ubs fs) = bounds g       -- flexibles to solve for@@ -832,15 +872,15 @@       -- get lower and upper bounds for flexible x       let lx = Set.toList $ Map.findWithDefault Set.empty x lbs           ux = Set.toList $ Map.findWithDefault Set.empty x ubs-      traceM ("lower bounds for " ++ show x ++ ": " ++ show lx)-      traceM ("upper bounds for " ++ show x ++ ": " ++ show ux)+      traceM ("lower bounds for " ++ prettyShow x ++ ": " ++ prettyShow lx)+      traceM ("upper bounds for " ++ prettyShow x ++ ": " ++ prettyShow ux)       -- compute maximum of lower bounds       lb <- do         case lx of           []     -> return $ Nothing           (a:as) -> do             case foldM (lub hg) a as of-              Nothing -> Left $ "inconsistent lower bound for " ++ show x+              Nothing -> Left $ "inconsistent lower bound for " ++ prettyShow x               Just l  -> return $ Just $ truncateOffset l       -- compute minimum of upper bounds       ub <- do@@ -850,35 +890,46 @@             case foldM (glb hg) a as of               Just l | validOffset l                  -> return $ Just l                      | Just l' <- findRigidBelow hg l -> return $ Just l'-              _ -> Left $ "inconsistent upper bound for " ++ show x+              _ -> Left $ "inconsistent upper bound for " ++ prettyShow x       case (lb, ub) of         (Just l, Nothing) -> return $ Just (x, l)  -- solve x = lower bound         (Nothing, Just u) -> return $ Just (x, u)  -- solve x = upper bound         (Just l,  Just u) -> do-          traceM ("lower bound for " ++ show x ++ ": " ++ show l)-          traceM ("upper bound for " ++ show x ++ ": " ++ show u)+          traceM ("lower bound for " ++ prettyShow x ++ ": " ++ prettyShow l)+          traceM ("upper bound for " ++ prettyShow x ++ ": " ++ prettyShow u)           case getPolarity pols x of             Least    -> return $ Just (x, l)             Greatest -> return $ Just (x, u)         _ -> return Nothing-  return $ Map.fromList xas+  return $ Solution $ Map.fromList xas  -- | Solve a forest of constraint graphs relative to a hypotheses graph. --   Concatenate individual solutions.-solveGraphs :: (Ord r, Ord f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraphs r f -> Either String (Solution r f)-solveGraphs pols hg gs = Map.unions <$> mapM (solveGraph pols hg) gs+solveGraphs+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => Polarities f+  -> HypGraph r f+  -> ConGraphs r f+  -> Either String (Solution r f)+solveGraphs pols hg gs =+  Solution . Map.unions <$> mapM (theSolution <.> solveGraph pols hg) gs  -- * Verify solution  -- | Check that after substitution of the solution, --   constraints are implied by hypotheses.-verifySolution :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> [Constraint' r f] -> Solution r f -> Either String ()+verifySolution+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)+  => HypGraph r f+  -> [Constraint' r f]+  -> Solution r f+  -> Either String () verifySolution hg cs sol = do   cs <- return $ subst sol cs-  traceM $ "substituted constraints " ++ show cs+  traceM $ "substituted constraints " ++ prettyShow cs   cs <- -- maybe (Left "solution produces inconsistency") Right $           concat <$> mapM (simplify1 $ \ c -> return [c]) cs-  traceM $ "simplified substituted constraints " ++ show cs+  traceM $ "simplified substituted constraints " ++ prettyShow cs   -- cs <- maybe (Left "solution produces inconsistency") Right $   --         simplifyWithHypotheses hg cs   let g = graphFromConstraints cs@@ -888,7 +939,7 @@   case simplifyWithHypotheses hg $ subst sol cs of     Nothing -> Left "solution produces inconsistency"     Just [] -> Right ()-    Just cs -> Left $ "solution leaves constraints " ++ show cs+    Just cs -> Left $ "solution leaves constraints " ++ prettyShow cs -}  -- | Iterate solver until no more metas can be solved.@@ -897,7 +948,7 @@ --   which would otherwise go unnoticed.  iterateSolver-  :: (Ord r, Ord f, Show r, Show f)+  :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f)   => Polarities f      -- ^ Meta variable polarities (prefer lower or upper solution?).   -> HypGraph r f@@ -912,8 +963,11 @@ iterateSolver pols hg cs sol0 = do   g <- constraintGraph cs hg   sol <- solveGraph pols hg g-  if Map.null sol then return sol0 else-    iterateSolver pols hg (subst sol cs) (Map.unionWith __IMPOSSIBLE__ sol $ subst sol sol0)+  traceM $ "(partial) solution " ++ prettyShow sol+  if null sol then return sol0 else+    iterateSolver pols hg (subst sol cs) $ Solution $+      Map.unionWith __IMPOSSIBLE__ (theSolution sol) $+        theSolution $ subst sol sol0  -- * Tests @@ -935,7 +989,7 @@          ]  -- testLub = smallest hg $ Map.keys $ commonSuccs hg [n1,n2] ---testLub :: (Show f, Ord f) => Maybe (SizeExpr' [Char] f)+testLub :: (Pretty f, Ord f, Show f) => Maybe (SizeExpr' [Char] f) testLub = lub hg (Rigid "i" 0) (Rigid "j" 2)   where     n1 = NodeRigid "i"
src/full/Agda/TypeChecking/Substitute.hs view
@@ -1,7 +1,6 @@-{-# LANGUAGE CPP                #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE ScopedTypeVariables    #-}-{-# LANGUAGE UndecidableInstances   #-}+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE DeriveDataTypeable   #-}+{-# LANGUAGE UndecidableInstances #-}  #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -9,6 +8,13 @@  {-# OPTIONS_GHC -fno-warn-orphans #-} +-- | This module contains the definition of hereditary substitution+-- and application operating on internal syntax which is in β-normal+-- form (β including projection reductions).+--+-- Further, it contains auxiliary functions which rely on substitution+-- but not on reduction.+ module Agda.TypeChecking.Substitute   ( module Agda.TypeChecking.Substitute   , module Agda.TypeChecking.Substitute.Class@@ -19,7 +25,6 @@ import Control.Applicative import Data.Function import Data.Functor-import Data.List hiding (sort, drop) import qualified Data.List as List import Data.Map (Map) import Data.Maybe@@ -78,7 +83,7 @@ canProject f v =   case ignoreSharing v of     (Con (ConHead _ _ fs) _ vs) -> do-      i <- elemIndex f fs+      i <- List.elemIndex f fs       headMaybe (drop i vs)     _ -> Nothing @@ -91,7 +96,7 @@         "conApp: constructor " ++ show c ++         " with fields " ++ show fs ++         " projected by " ++ show f-      i = maybe failure id            $ elemIndex f fs+      i = maybe failure id            $ List.elemIndex f fs       v = maybe failure argToDontCare $ headMaybe $ drop i args   in  applyE v es @@ -178,19 +183,22 @@   apply (ExtendTel _ tel) (t : ts) = lazyAbsApp tel (unArg t) `apply` ts  instance Apply Definition where-  apply (Defn info x t pol occ df m c inst copy ma d) args =-    Defn info x (piApply t args) (apply pol args) (apply occ args) df m c inst copy ma (apply d args)+  apply (Defn info x t pol occ df m c inst copy ma inj d) args =+    Defn info x (piApply t args) (apply pol args) (apply occ args) df m c inst copy ma inj (apply d args)  instance Apply RewriteRule where-  apply r args = RewriteRule-    { rewName    = rewName r-    , rewContext = apply (rewContext r) args-    , rewHead    = rewHead r-    , rewPats    = applySubst sub (rewPats r)-    , rewRHS     = applySubst sub (rewRHS r)-    , rewType    = applySubst sub (rewType r)-    }-    where sub = parallelS (map unArg args)+  apply r args =+    let newContext = apply (rewContext r) args+        sub        = liftS (size newContext) $ parallelS $+                       reverse $ map (PTerm . unArg) args+    in RewriteRule+       { rewName    = rewName r+       , rewContext = newContext+       , rewHead    = rewHead r+       , rewPats    = applySubst sub (rewPats r)+       , rewRHS     = applyNLPatSubst sub (rewRHS r)+       , rewType    = applyNLPatSubst sub (rewType r)+       }  #if __GLASGOW_HASKELL__ >= 710 instance {-# OVERLAPPING #-} Apply [Occ.Occurrence] where@@ -221,6 +229,7 @@       in  case namedArg p of             VarP{}  -> recurse             DotP{}  -> __IMPOSSIBLE__+            AbsurdP{} -> __IMPOSSIBLE__             LitP{}  -> __IMPOSSIBLE__             ConP{}  -> __IMPOSSIBLE__             ProjP{} -> __IMPOSSIBLE__@@ -238,7 +247,7 @@   apply d [] = d   apply d args = case d of     Axiom{} -> d-    AbstractDefn -> d+    AbstractDefn d -> AbstractDefn $ apply d args     Function{ funClauses = cs, funCompiled = cc, funInv = inv             , funProjection = Nothing } ->       d { funClauses    = apply cs args@@ -305,15 +314,16 @@     -- It is assumed that we only apply a clause to "parameters", i.e.     -- arguments introduced by lambda lifting. The problem is that these aren't     -- necessarily the first elements of the clause telescope.-    apply cls@(Clause r tel ps b t catchall) args+    apply cls@(Clause rl rf tel ps b t catchall unreachable) args       | length args > length ps = __IMPOSSIBLE__       | otherwise =-      Clause r+      Clause rl rf              tel'              (applySubst rhoP $ drop (length args) ps)              (applySubst rho b)              (applySubst rho t)              catchall+             unreachable       where         -- We have         --  Γ ⊢ args, for some outer context Γ@@ -354,29 +364,35 @@             VarP (DBPatVar _ i) -> mkSub tm (n - 1) (substP i v' ps) vs `composeS` singletonS i (tm v')               where v' = raise (n - 1) v             DotP{}  -> mkSub tm n ps vs+            AbsurdP p' -> mkSub tm n (setNamedArg p p' : ps) (v : vs)+            ConP c _ ps' -> mkSub tm n (ps' ++ ps) (projections c v ++ vs)             LitP{}  -> __IMPOSSIBLE__-            ConP{}  -> __IMPOSSIBLE__             ProjP{} -> __IMPOSSIBLE__         mkSub _ _ _ _ = __IMPOSSIBLE__ -        -- The parameter patterns 'ps' are all variables or dot patterns. If they-        -- are variables they can appear anywhere in the clause telescope. This-        -- function constructs the new telescope with 'vs' substituted for 'ps'.+        -- The parameter patterns 'ps' are all variables or dot patterns, or eta+        -- expanded record patterns (issue #2550). If they are variables they+        -- can appear anywhere in the clause telescope. This function+        -- constructs the new telescope with 'vs' substituted for 'ps'.         -- Example:         --    tel = (x : A) (y : B) (z : C) (w : D)         --    ps  = y@3 w@0         --    vs  = u v         --    newTel tel ps vs = (x : A) (z : C[u/y])+        newTel :: Nat -> Telescope -> [NamedArg DeBruijnPattern] -> [Term] -> Telescope         newTel n tel [] [] = tel         newTel n tel (p : ps) (v : vs) =           case namedArg p of             VarP (DBPatVar _ i) -> newTel (n - 1) (subTel (size tel - 1 - i) v tel) (substP i (raise (n - 1) v) ps) vs             DotP{}              -> newTel n tel ps vs+            AbsurdP{}           -> __IMPOSSIBLE__+            ConP c _ ps'        -> newTel n tel (ps' ++ ps) (projections c v ++ vs)             LitP{}              -> __IMPOSSIBLE__-            ConP{}              -> __IMPOSSIBLE__             ProjP{}             -> __IMPOSSIBLE__         newTel _ tel _ _ = __IMPOSSIBLE__ +        projections c v = [ applyE v [Proj ProjSystem f] | f <- conFields c ]+         -- subTel i v (Δ₁ (xᵢ : A) Δ₂) = Δ₁ Δ₂[xᵢ = v]         subTel i v EmptyTel = __IMPOSSIBLE__         subTel 0 v (ExtendTel _ tel) = absApp tel v@@ -465,7 +481,7 @@ instance Apply Permutation where   -- The permutation must start with [0..m - 1]   -- NB: section (- m) not possible (unary minus), hence (flip (-) m)-  apply (Perm n xs) args = Perm (n - m) $ map (flip (-) m) $ genericDrop m xs+  apply (Perm n xs) args = Perm (n - m) $ map (flip (-) m) $ drop m xs     where       m = size args @@ -506,8 +522,8 @@   ExtendTel arg xtel `abstract` tel = ExtendTel arg $ xtel <&> (`abstract` tel)  instance Abstract Definition where-  abstract tel (Defn info x t pol occ df m c inst copy ma d) =-    Defn info x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c inst copy ma (abstract tel d)+  abstract tel (Defn info x t pol occ df m c inst copy ma inj d) =+    Defn info x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c inst copy ma inj (abstract tel d)  -- | @tel ⊢ (Γ ⊢ lhs ↦ rhs : t)@ becomes @tel, Γ ⊢ lhs ↦ rhs : t)@ --   we do not need to change lhs, rhs, and t since they live in Γ.@@ -545,7 +561,7 @@ instance Abstract Defn where   abstract tel d = case d of     Axiom{} -> d-    AbstractDefn -> d+    AbstractDefn d -> AbstractDefn $ abstract tel d     Function{ funClauses = cs, funCompiled = cc, funInv = inv             , funProjection = Nothing  } ->       d { funClauses  = abstract tel cs@@ -582,23 +598,24 @@       d { primClauses = abstract tel cs }  instance Abstract PrimFun where-    abstract tel (PrimFun x ar def) = PrimFun x (ar + n) $ \ts -> def $ genericDrop n ts+    abstract tel (PrimFun x ar def) = PrimFun x (ar + n) $ \ts -> def $ drop n ts         where n = size tel  instance Abstract Clause where-  abstract tel (Clause r tel' ps b t catchall) =-    Clause r (abstract tel tel')+  abstract tel (Clause rl rf tel' ps b t catchall unreachable) =+    Clause rl rf (abstract tel tel')            (namedTelVars m tel ++ ps)            b            t -- nothing to do for t, since it lives under the telescope            catchall+           unreachable       where m = size tel + size tel'  instance Abstract CompiledClauses where   abstract tel Fail = Fail   abstract tel (Done xs t) = Done (map (argFromDom . fmap fst) (telToList tel) ++ xs) t   abstract tel (Case n bs) =-    Case (n <&> \ i -> i + fromIntegral (size tel)) (abstract tel bs)+    Case (n <&> \ i -> i + size tel) (abstract tel bs)  instance Abstract a => Abstract (WithArity a) where   abstract tel (WithArity n a) = WithArity n $ abstract tel a@@ -728,28 +745,65 @@     ConP c mt ps -> ConP c (applySubst rho mt) $ applySubst rho ps     DotP t       -> DotP $ applySubst rho t     VarP s       -> p+    AbsurdP p    -> AbsurdP $ applySubst rho p     LitP l       -> p     ProjP{}      -> p -instance Subst Term NLPat where+instance DeBruijn NLPat where+  deBruijnVar i = PVar i []+  deBruijnView p = case p of+    PVar i []   -> Just i+    PVar{}      -> Nothing+    PWild{}     -> Nothing+    PDef{}      -> Nothing+    PLam{}      -> Nothing+    PPi{}       -> Nothing+    PBoundVar{} -> Nothing -- or... ?+    PTerm{}     -> Nothing -- or... ?++applyNLPatSubst :: (Subst Term a) => Substitution' NLPat -> a -> a+applyNLPatSubst = applySubst . fmap nlPatToTerm+  where+    nlPatToTerm :: NLPat -> Term+    nlPatToTerm p = case p of+      PVar i xs      -> Var i $ map (Apply . fmap var) xs+      PTerm u        -> u+      PWild          -> __IMPOSSIBLE__+      PDef f es      -> __IMPOSSIBLE__+      PLam i u       -> __IMPOSSIBLE__+      PPi a b        -> __IMPOSSIBLE__+      PBoundVar i es -> __IMPOSSIBLE__++instance Subst NLPat NLPat where   applySubst rho p = case p of-    PVar id i bvs -> p+    PVar i bvs -> lookupS rho i `applyBV` bvs     PWild  -> p     PDef f es -> PDef f $ applySubst rho es     PLam i u -> PLam i $ applySubst rho u     PPi a b -> PPi (applySubst rho a) (applySubst rho b)     PBoundVar i es -> PBoundVar i $ applySubst rho es-    PTerm u -> PTerm $ applySubst rho u+    PTerm u -> PTerm $ applyNLPatSubst rho u -instance Subst Term NLPType where+    where+      applyBV :: NLPat -> [Arg Int] -> NLPat+      applyBV p ys = case p of+        PVar i xs      -> PVar i (xs ++ ys)+        PTerm u        -> PTerm $ u `apply` map (fmap var) ys+        PWild          -> __IMPOSSIBLE__+        PDef f es      -> __IMPOSSIBLE__+        PLam i u       -> __IMPOSSIBLE__+        PPi a b        -> __IMPOSSIBLE__+        PBoundVar i es -> __IMPOSSIBLE__++instance Subst NLPat NLPType where   applySubst rho (NLPType s a) = NLPType (applySubst rho s) (applySubst rho a) -instance Subst Term RewriteRule where+instance Subst NLPat RewriteRule where   applySubst rho (RewriteRule q gamma f ps rhs t) =-    RewriteRule q (applySubst rho gamma)+    RewriteRule q (applyNLPatSubst rho gamma)                 f (applySubst (liftS n rho) ps)-                  (applySubst (liftS n rho) rhs)-                  (applySubst (liftS n rho) t)+                  (applyNLPatSubst (liftS n rho) rhs)+                  (applyNLPatSubst (liftS n rho) t)     where n = size gamma  instance Subst t a => Subst t (Blocked a) where@@ -793,6 +847,9 @@ instance Subst Term A.NamedDotPattern where   applySubst rho (A.NamedDot x v a) = A.NamedDot x (applySubst rho v) (applySubst rho a) +instance Subst Term A.StrippedDotPattern where+  applySubst rho (A.StrippedDot e v a) = A.StrippedDot e (applySubst rho v) (applySubst rho a)+ instance Subst t a => Subst t (Elim' a) where   applySubst rho e = case e of     Apply v -> Apply $ applySubst rho v@@ -841,7 +898,7 @@   applySubst rho (EqualityType s eq l t a b) = EqualityType     (applySubst rho s)     eq-    (applySubst rho l)+    (map (applySubst rho) l)     (applySubst rho t)     (applySubst rho a)     (applySubst rho b)@@ -863,6 +920,7 @@     VarP x       -> useName (dbPatVarName x) $ lookupS rho $ dbPatVarIndex x     DotP u       -> DotP $ applyPatSubst rho u     ConP c ci ps -> ConP c ci $ applySubst rho ps+    AbsurdP p    -> AbsurdP $ applySubst rho p     LitP x       -> p     ProjP{}      -> p     where@@ -879,7 +937,7 @@ --   This function is an optimization, saving us from construction lambdas we --   immediately remove through application. projDropParsApply :: Projection -> ProjOrigin -> Args -> Term-projDropParsApply (Projection proper d r _ lams) o args =+projDropParsApply (Projection prop d r _ lams) o args =   case initLast $ getProjLams lams of     -- If we have no more abstractions, we must be a record field     -- (projection applied already to record value).@@ -892,11 +950,14 @@       -- We only have to abstract over the parameters that exceed the arguments.       -- We only have to apply to the arguments that exceed the parameters.       in List.foldr (\ (Arg ai x) -> Lam ai . NoAbs x) (core `apply` args') pars'+  where proper = isJust prop  --------------------------------------------------------------------------- -- * Telescopes --------------------------------------------------------------------------- +-- ** Telescope view of a type+ type TelView = TelV Type data TelV a  = TelV { theTel :: Tele (Dom a), theCore :: a }   deriving (Typeable, Show, Functor)@@ -904,25 +965,23 @@ deriving instance (Subst t a, Eq  a) => Eq  (TelV a) deriving instance (Subst t a, Ord a) => Ord (TelV a) -type ListTel' a = [Dom (a, Type)]-type ListTel = ListTel' ArgName+-- | 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' = telView'UpTo (-1) -telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope-telFromList' f = foldr extTel EmptyTel+-- | @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-    extTel (Dom info (x, a)) = ExtendTel (Dom info a) . Abs (f x)+    absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t -telFromList :: ListTel -> Telescope-telFromList = telFromList' id -telToList :: Telescope -> ListTel-telToList EmptyTel            = []-telToList (ExtendTel arg tel) = fmap (absName tel,) arg : telToList (absBody tel)-  -- Andreas, 2013-12-14: This would work also for 'NoAbs',-  -- since 'absBody' raises.--telToArgs :: Telescope -> [Arg ArgName]-telToArgs tel = [ Arg (domInfo d) (fst $ unDom d) | d <- telToList tel ]+-- ** Creating telescopes from lists of types  -- | Turn a typed binding @(x1 .. xn : A)@ into a telescope. bindsToTel' :: (Name -> a) -> [Name] -> Dom Type -> ListTel' a@@ -941,20 +1000,8 @@ 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' = 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+-- ** Abstracting in terms and types  -- | @mkPi dom t = telePi (telFromList [dom]) t@ mkPi :: Dom (ArgName, Type) -> Type -> Type@@ -975,11 +1022,11 @@       s2 = getSort <$> b       el = El $ dLub s1 s2 --- | Uses free variable analysis to introduce 'noAbs' bindings.+-- | Uses free variable analysis to introduce 'NoAbs' bindings. telePi :: Telescope -> Type -> Type telePi = telePi' reAbs --- | Everything will be a 'Abs'.+-- | Everything will be an 'Abs'. telePi_ :: Telescope -> Type -> Type telePi_ = telePi' id @@ -994,6 +1041,10 @@     s2 = fmap getSort b -} +-- | Abstract over a telescope in a term, producing lambdas.+--   Dumb abstraction: Always produces 'Abs', never 'NoAbs'.+--+--   The implementation is sound because 'Telescope' does not use 'NoAbs'. teleLam :: Telescope -> Term -> Term teleLam  EmptyTel         t = t teleLam (ExtendTel u tel) t = Lam (domInfo u) $ flip teleLam t <$> tel@@ -1008,6 +1059,21 @@ instance TeleNoAbs Telescope where   teleNoAbs tel = teleNoAbs $ telToList tel ++-- ** Telescope typing++-- | Given arguments @vs : tel@ (vector typing), extract their individual types.+--   Returns @Nothing@ is @tel@ is not long enough.++typeArgsWithTel :: Telescope -> [Term] -> Maybe [Dom Type]+typeArgsWithTel _ []                         = return []+typeArgsWithTel (ExtendTel dom tel) (v : vs) = (dom :) <$> typeArgsWithTel (absApp tel v) vs+typeArgsWithTel EmptyTel{} (_:_)             = Nothing++---------------------------------------------------------------------------+-- * Clauses+---------------------------------------------------------------------------+ -- | In compiled clauses, the variables in the clause body are relative to the --   pattern variables (including dot patterns) instead of the clause telescope. compiledClauseBody :: Clause -> Maybe Term@@ -1016,6 +1082,8 @@  --------------------------------------------------------------------------- -- * Syntactic equality and order+--+-- Needs weakening. ---------------------------------------------------------------------------  deriving instance Eq Substitution@@ -1106,6 +1174,9 @@   _          `compare` MetaV{}    = GT   DontCare{} `compare` DontCare{} = EQ +-- | Equality of binders relies on weakening+--   which is a specical case of renaming+--   which is a specical case of substitution. instance (Subst t a, Eq a) => Eq (Abs a) where   NoAbs _ a == NoAbs _ b = a == b   Abs   _ a == Abs   _ b = a == b@@ -1163,6 +1234,19 @@ dLub s1 (NoAbs _ s2) = sLub s1 s2 dLub s1 b@(Abs _ s2) = case occurrence 0 s2 of   Flexible _    -> DLub s1 b+  -- Andreas, 2017-01-18, issue #2408:+  -- The sort of @.(a : A) → Set (f a)@ in context @f : .A → Level@+  -- is @dLub Set λ a → Set (lsuc (f a))@, but @DLub@s are not serialized.+  -- Alternatives:+  -- 1. -- Irrelevantly -> sLub s1 (absApp b $ DontCare $ Sort Prop)+  --    We cheat here by simplifying the sort to @Set (lsuc (f *))@+  --    where * is a dummy value.  The rationale is that @f * = f a@ (irrelevance!)+  --    and that if we already have a neutral level @f a@+  --    it should not hurt to have @f *@ even if type @A@ is empty.+  --    However: sorts are printed in error messages when sorts do not match.+  --    Also, sorts with a dummy like Prop would be ill-typed.+  -- 2. We keep the DLub, and serialize it.+  --    That's clean and principled, even though DLubs make level solving harder.   Irrelevantly  -> DLub s1 b   NoOccurrence  -> sLub s1 (noabsApp __IMPOSSIBLE__ b) --  Free.Unused   -> sLub s1 (absApp b __IMPOSSIBLE__) -- triggers Issue784
src/full/Agda/TypeChecking/Substitute/Class.hs view
@@ -54,9 +54,9 @@ -- For terms: -- --  Γ ⊢ ρ : Δ---  Δ ⊢ t : σ+--  Δ ⊢ t : A -- -------------- Γ ⊢ tρ : σρ+-- Γ ⊢ tρ : Aρ  class DeBruijn t => Subst t a | a -> t where   applySubst :: Substitution' t -> a -> a@@ -79,6 +79,11 @@ substUnder :: Subst t a => Nat -> t -> a -> a substUnder n u = applySubst (liftS n (singletonS 0 u)) +-- ** Identity instances++instance Subst Term QName where+  applySubst _ q = q+ --------------------------------------------------------------------------- -- * Explicit substitutions ---------------------------------------------------------------------------@@ -91,7 +96,7 @@ wkS :: Int -> Substitution' a -> Substitution' a wkS 0 rho        = rho wkS n (Wk m rho) = Wk (n + m) rho-wkS n EmptyS     = EmptyS+wkS n (EmptyS err) = EmptyS err wkS n rho        = Wk n rho  raiseS :: Int -> Substitution' a@@ -104,6 +109,11 @@ consS u rho = seq u (u :# rho)  -- | To replace index @n@ by term @u@, do @applySubst (singletonS n u)@.+--   @+--               Γ, Δ ⊢ u : A+--    ---------------------------------+--    Γ, Δ ⊢ singletonS |Δ| u : Γ, A, Δ+--   @ singletonS :: DeBruijn a => Int -> a -> Substitution' a singletonS n u = map deBruijnVar [0..n-1] ++# consS u (raiseS n)   -- ALT: foldl (\ s i -> deBruijnVar i `consS` s) (consS u $ raiseS n) $ downFrom n@@ -112,7 +122,8 @@ --   @ --             Γ, A, Δ ⊢ u : A --    ------------------------------------   @Γ, A, Δ ⊢ inplace |Δ| u : Γ, A, Δ+--    Γ, A, Δ ⊢ inplace |Δ| u : Γ, A, Δ+--   @ inplaceS :: Subst a a => Int -> a -> Substitution' a inplaceS k u = singletonS k u `composeS` liftS (k + 1) (raiseS 1) @@ -123,6 +134,11 @@ liftS k (Lift n rho) = Lift (n + k) rho liftS k rho          = Lift k rho +-- | @+--         Γ ⊢ ρ : Δ, Ψ+--      -------------------+--      Γ ⊢ dropS |Ψ| ρ : Δ+--   @ dropS :: Int -> Substitution' a -> Substitution' a dropS 0 rho                = rho dropS n IdS                = raiseS n@@ -131,13 +147,13 @@ dropS n (Strengthen _ rho) = dropS (n - 1) rho dropS n (Lift 0 rho)       = __IMPOSSIBLE__ dropS n (Lift m rho)       = wkS 1 $ dropS (n - 1) $ liftS (m - 1) rho-dropS n EmptyS             = __IMPOSSIBLE__+dropS n (EmptyS err)       = __IMPOSSIBLE__  -- | @applySubst (ρ `composeS` σ) v == applySubst ρ (applySubst σ v)@ composeS :: Subst a a => Substitution' a -> Substitution' a -> Substitution' a composeS rho IdS = rho composeS IdS sgm = sgm-composeS rho EmptyS = EmptyS+composeS rho (EmptyS err) = EmptyS err composeS rho (Wk n sgm) = composeS (dropS n rho) sgm composeS rho (u :# sgm) = applySubst rho u :# composeS rho sgm composeS rho (Strengthen err sgm) = Strengthen err (composeS rho sgm)@@ -149,20 +165,25 @@ --   Γ ⊢ σ : Δ --   Γ ⊢ δ : Θσ splitS :: Int -> Substitution' a -> (Substitution' a, Substitution' a)-splitS 0 rho                  = (rho, EmptyS)+splitS 0 rho                  = (rho, EmptyS __IMPOSSIBLE__) splitS n (u :# rho)           = second (u :#) $ splitS (n - 1) rho splitS n (Strengthen err rho) = second (Strengthen err) $ splitS (n - 1) rho splitS n (Lift 0 _)           = __IMPOSSIBLE__ splitS n (Wk m rho)           = wkS m *** wkS m $ splitS n rho-splitS n IdS                  = (raiseS n, liftS n EmptyS)+splitS n IdS                  = (raiseS n, liftS n $ EmptyS __IMPOSSIBLE__) splitS n (Lift m rho)         = wkS 1 *** liftS 1 $ splitS (n - 1) (liftS (m - 1) rho)-splitS n EmptyS               = __IMPOSSIBLE__+splitS n (EmptyS err)         = __IMPOSSIBLE__  infixr 4 ++#  (++#) :: DeBruijn a => [a] -> Substitution' a -> Substitution' a us ++# rho = foldr consS rho us +-- | @+--      Γ ⊢ ρ : Δ  Γ ⊢ reverse vs : Θ+--      ----------------------------- (treating Nothing as having any type)+--        Γ ⊢ prependS vs ρ : Δ, Θ+--   @ prependS :: DeBruijn a => Empty -> [Maybe a] -> Substitution' a -> Substitution' a prependS err us rho = foldr f rho us   where@@ -196,7 +217,7 @@              | otherwise -> lookupS rho (i - 1)   Lift n rho | i < n     -> deBruijnVar i              | otherwise -> raise n $ lookupS rho (i - n)-  EmptyS                 -> __IMPOSSIBLE__+  EmptyS err             -> absurd err  --------------------------------------------------------------------------- -- * Functions on abstractions@@ -253,4 +274,3 @@   loop n a v = case ignoreSharing v of     Lam h b -> Lam h $ underAbs (loop $ n-1) a b     _       -> __IMPOSSIBLE__-
src/full/Agda/TypeChecking/SyntacticEquality.hs view
@@ -193,6 +193,6 @@   synEq (Dom ai a) (Dom ai' a') = Dom <$$> synEq ai ai' <**> synEq a a'  instance SynEq ArgInfo where-  synEq ai@(ArgInfo h r o v) ai'@(ArgInfo h' r' o' v')-    | h == h', r == r', v == v' = pure2 ai-    | otherwise                 = inequal (ai, ai')+  synEq ai@(ArgInfo h r o) ai'@(ArgInfo h' r' o')+    | h == h', r == r' = pure2 ai+    | otherwise        = inequal (ai, ai')
src/full/Agda/TypeChecking/Telescope.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE ScopedTypeVariables #-}  module Agda.TypeChecking.Telescope where @@ -11,7 +10,7 @@ import Data.Foldable (forM_) import Data.IntSet (IntSet) import qualified Data.IntSet as IntSet-import Data.List hiding (null)+import qualified Data.List as List import Data.Maybe  import Agda.Syntax.Common@@ -36,32 +35,6 @@ #include "undefined.h" import Agda.Utils.Impossible -data OutputTypeName-  = OutputTypeName QName-  | OutputTypeVar-  | OutputTypeNameNotYetKnown-  | NoOutputTypeName---- | Strips all Pi's and return the head definition name, if possible.-getOutputTypeName :: Type -> TCM OutputTypeName-getOutputTypeName t = do-  TelV tel t' <- telView t-  ifBlocked (unEl t') (\ _ _ -> return OutputTypeNameNotYetKnown) $ \ v ->-    case ignoreSharing v of-      -- Possible base types:-      Def n _  -> return $ OutputTypeName n-      Sort{}   -> return NoOutputTypeName-      Var n _  -> return OutputTypeVar-      -- Not base types:-      Con{}    -> __IMPOSSIBLE__-      Lam{}    -> __IMPOSSIBLE__-      Lit{}    -> __IMPOSSIBLE__-      Level{}  -> __IMPOSSIBLE__-      MetaV{}  -> __IMPOSSIBLE__-      Pi{}     -> __IMPOSSIBLE__-      Shared{} -> __IMPOSSIBLE__-      DontCare{} -> __IMPOSSIBLE__- -- | Flatten telescope: (Γ : Tel) -> [Type Γ] flattenTel :: Telescope -> [Dom Type] flattenTel EmptyTel          = []@@ -225,7 +198,7 @@      ok    = all (<n) is && checkDependencies IntSet.empty is -    isC   = downFrom n \\ is+    isC   = downFrom n List.\\ is      perm  = Perm n $ map (n-1-) $ is ++ isC @@ -269,7 +242,7 @@     rho   = reverseP perm  -- works on de Bruijn levels      u1    = renameP __IMPOSSIBLE__ perm u -- Γ' ⊢ u1 : A'-    us    = map (\i -> fromMaybe (DotP u1) (deBruijnVar <$> findIndex (i ==) is)) [ 0 .. n-1 ]+    us    = map (\i -> fromMaybe (DotP u1) (deBruijnVar <$> List.findIndex (i ==) is)) [ 0 .. n-1 ]     sigma = us ++# raiseS (n-1)      ts1   = permute rho $ applyPatSubst sigma ts0@@ -303,7 +276,7 @@      tel'        = gamma1 `abstract` (delta `abstract` gamma2') -+-- | Gather leading Πs of a type in a telescope. telView :: Type -> TCM TelView telView = telViewUpTo (-1) @@ -367,17 +340,41 @@   (_, b) <- mustBePi t   return $ absApp b v --- | Given a function type, introduce its domain into---   the context and continue with its codomain.--intro1 :: (MonadTCM tcm) => Type -> (Type -> tcm a) -> tcm a-intro1 t cont = do-  (a, b) <- mustBePi t-  underAbstraction a b cont+-- | Compute type arity+typeArity :: Type -> TCM Nat+typeArity t = do+  TelV tel _ <- telView t+  return (size tel)  --------------------------------------------------------------------------- -- * Instance definitions ---------------------------------------------------------------------------++data OutputTypeName+  = OutputTypeName QName+  | OutputTypeVar+  | OutputTypeNameNotYetKnown+  | NoOutputTypeName++-- | Strips all Pi's and return the head definition name, if possible.+getOutputTypeName :: Type -> TCM OutputTypeName+getOutputTypeName t = do+  TelV tel t' <- telView t+  ifBlocked (unEl t') (\ _ _ -> return OutputTypeNameNotYetKnown) $ \ v ->+    case ignoreSharing v of+      -- Possible base types:+      Def n _  -> return $ OutputTypeName n+      Sort{}   -> return NoOutputTypeName+      Var n _  -> return OutputTypeVar+      -- Not base types:+      Con{}    -> __IMPOSSIBLE__+      Lam{}    -> __IMPOSSIBLE__+      Lit{}    -> __IMPOSSIBLE__+      Level{}  -> __IMPOSSIBLE__+      MetaV{}  -> __IMPOSSIBLE__+      Pi{}     -> __IMPOSSIBLE__+      Shared{} -> __IMPOSSIBLE__+      DontCare{} -> __IMPOSSIBLE__  addTypedInstance :: QName -> Type -> TCM () addTypedInstance x t = do
src/full/Agda/TypeChecking/Unquote.hs view
@@ -27,13 +27,11 @@ import Agda.Syntax.Translation.ReflectedToAbstract  import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Datatypes ( getConHead ) import Agda.TypeChecking.DropArgs import Agda.TypeChecking.Free import Agda.TypeChecking.Level import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Monad.Exception import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad@@ -49,18 +47,25 @@ import {-# SOURCE #-} Agda.TypeChecking.Rules.Def  import Agda.Utils.Except-import Agda.Utils.Impossible+  ( mkExceptT+  , MonadError(catchError, throwError)+  , ExceptT+  , runExceptT+  )+import Agda.Utils.Either+import Agda.Utils.FileName+import Agda.Utils.Lens import Agda.Utils.Maybe+import Agda.Utils.Maybe.Strict (toLazy) import Agda.Utils.Monad import Agda.Utils.Permutation ( Permutation(Perm), compactP )+import Agda.Utils.Pretty (prettyShow) import Agda.Utils.String ( Str(Str), unStr ) import Agda.Utils.VarSet (VarSet) import qualified Agda.Utils.VarSet as Set-import Agda.Utils.Maybe.Strict (toLazy)-import Agda.Utils.FileName-import Agda.Utils.Lens  #include "undefined.h"+import Agda.Utils.Impossible  agdaTermType :: TCM Type agdaTermType = El (mkType 0) <$> primAgdaTerm@@ -78,15 +83,15 @@ -- definitions. Also state snapshot from last commit and whether the state is -- dirty (definitions have been added). type UnquoteState = (Dirty, TCState)-type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptionT UnquoteError TCM)))+type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptT UnquoteError TCM)))  type UnquoteRes a = Either UnquoteError ((a, UnquoteState), [QName])  unpackUnquoteM :: UnquoteM a -> Context -> UnquoteState -> TCM (UnquoteRes a)-unpackUnquoteM m cxt s = runExceptionT $ runWriterT $ runStateT (runReaderT m cxt) s+unpackUnquoteM m cxt s = runExceptT $ runWriterT $ runStateT (runReaderT m cxt) s  packUnquoteM :: (Context -> UnquoteState -> TCM (UnquoteRes a)) -> UnquoteM a-packUnquoteM f = ReaderT $ \ cxt -> StateT $ \ s -> WriterT $ ExceptionT $ f cxt s+packUnquoteM f = ReaderT $ \ cxt -> StateT $ \ s -> WriterT $ mkExceptT $ f cxt s  runUnquoteM :: UnquoteM a -> TCM (Either UnquoteError (a, [QName])) runUnquoteM m = do@@ -100,7 +105,7 @@     isDefined x = do       def <- theDef <$> getConstInfo x       case def of-        Function{funClauses = []} -> genericError $ "Missing definition for " ++ show x+        Function{funClauses = []} -> genericError $ "Missing definition for " ++ prettyShow x         _       -> return ()  liftU :: TCM a -> UnquoteM a@@ -135,16 +140,16 @@   b <- liftU $ ifBlocked t (\ m _ -> pure $ Left  m)                            (\ t   -> pure $ Right t)   case b of-    Left m  -> do s <- gets snd; throwException $ BlockedOnMeta s m+    Left m  -> do s <- gets snd; throwError $ BlockedOnMeta s m     Right t -> return t  class Unquote a where   unquote :: I.Term -> UnquoteM a  unquoteN :: Unquote a => Arg Term -> UnquoteM a-unquoteN a | notHidden a && isRelevant a =+unquoteN a | visible a && isRelevant a =     unquote $ unArg a-unquoteN a = throwException $ BadVisibility "visible" a+unquoteN a = throwError $ BadVisibility "visible" a  choice :: Monad m => [(m Bool, m a)] -> m a -> m a choice [] dflt = dflt@@ -152,23 +157,23 @@  ensureDef :: QName -> UnquoteM QName ensureDef x = do-  i <- liftU $ (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom  -- for recursive unquoteDecl+  i <- liftU $ either (const Axiom) theDef <$> getConstInfo' x  -- for recursive unquoteDecl   case i of     Constructor{} -> do       def <- liftU $ prettyTCM =<< primAgdaTermDef       con <- liftU $ prettyTCM =<< primAgdaTermCon-      throwException $ ConInsteadOfDef x (show def) (show con)+      throwError $ ConInsteadOfDef x (show def) (show con)     _ -> return x  ensureCon :: QName -> UnquoteM QName ensureCon x = do-  i <- liftU $ (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom  -- for recursive unquoteDecl+  i <- liftU $ either (const Axiom) theDef <$> getConstInfo' x  -- for recursive unquoteDecl   case i of     Constructor{} -> return x     _ -> do       def <- liftU $ prettyTCM =<< primAgdaTermDef       con <- liftU $ prettyTCM =<< primAgdaTermCon-      throwException $ DefInsteadOfCon x (show def) (show con)+      throwError $ DefInsteadOfCon x (show def) (show con)  pickName :: R.Type -> String pickName a =@@ -185,10 +190,10 @@     case ignoreSharing t of       Con c _ [h,r] -> do         choice-          [(c `isCon` primArgArgInfo, ArgInfo <$> unquoteN h <*> unquoteN r <*> pure Reflected <*> pure False)]+          [(c `isCon` primArgArgInfo, ArgInfo <$> unquoteN h <*> unquoteN r <*> pure Reflected)]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "arg info" t+      _ -> throwError $ NonCanonical "arg info" t  instance Unquote a => Unquote (Arg a) where   unquote t = do@@ -199,7 +204,7 @@           [(c `isCon` primArgArg, Arg <$> unquoteN info <*> unquoteN x)]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "arg" t+      _ -> throwError $ NonCanonical "arg" t  -- Andreas, 2013-10-20: currently, post-fix projections are not part of the -- quoted syntax.@@ -214,35 +219,35 @@         choice [ (c `isCon` primTrue,  pure True)                , (c `isCon` primFalse, pure False) ]                __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "boolean" t+      _ -> throwError $ NonCanonical "boolean" t  instance Unquote Integer where   unquote t = do     t <- reduceQuotedTerm t     case ignoreSharing t of       Lit (LitNat _ n) -> return n-      _ -> throwException $ NonCanonical "integer" t+      _ -> throwError $ NonCanonical "integer" t  instance Unquote Double where   unquote t = do     t <- reduceQuotedTerm t     case ignoreSharing t of       Lit (LitFloat _ x) -> return x-      _ -> throwException $ NonCanonical "float" t+      _ -> throwError $ NonCanonical "float" t  instance Unquote Char where   unquote t = do     t <- reduceQuotedTerm t     case ignoreSharing t of       Lit (LitChar _ x) -> return x-      _ -> throwException $ NonCanonical "char" t+      _ -> throwError $ NonCanonical "char" t  instance Unquote Str where   unquote t = do     t <- reduceQuotedTerm t     case ignoreSharing t of       Lit (LitString _ x) -> return (Str x)-      _ -> throwException $ NonCanonical "string" t+      _ -> throwError $ NonCanonical "string" t  unquoteString :: Term -> UnquoteM String unquoteString x = unStr <$> unquote x@@ -266,7 +271,7 @@                , (c `isCon` primAgdaErrorPartTerm,   TermPart <$> unquoteN x)                , (c `isCon` primAgdaErrorPartName,   NamePart <$> unquoteN x) ]                __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "error part" t+      _ -> throwError $ NonCanonical "error part" t  instance Unquote a => Unquote [a] where   unquote t = do@@ -281,7 +286,7 @@           [(c `isCon` primNil, return [])]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "list" t+      _ -> throwError $ NonCanonical "list" t  instance Unquote Hiding where   unquote t = do@@ -290,11 +295,11 @@       Con c _ [] -> do         choice           [(c `isCon` primHidden,  return Hidden)-          ,(c `isCon` primInstance, return Instance)+          ,(c `isCon` primInstance, return (Instance NoOverlap))           ,(c `isCon` primVisible, return NotHidden)]           __IMPOSSIBLE__       Con c _ vs -> __IMPOSSIBLE__-      _        -> throwException $ NonCanonical "visibility" t+      _        -> throwError $ NonCanonical "visibility" t  instance Unquote Relevance where   unquote t = do@@ -306,14 +311,14 @@           ,(c `isCon` primIrrelevant, return Irrelevant)]           __IMPOSSIBLE__       Con c _ vs -> __IMPOSSIBLE__-      _        -> throwException $ NonCanonical "relevance" t+      _        -> throwError $ NonCanonical "relevance" t  instance Unquote QName where   unquote t = do     t <- reduceQuotedTerm t     case ignoreSharing t of       Lit (LitQName _ x) -> return x-      _                  -> throwException $ NonCanonical "name" t+      _                  -> throwError $ NonCanonical "name" t  instance Unquote a => Unquote (R.Abs a) where   unquote t = do@@ -324,7 +329,7 @@           [(c `isCon` primAbsAbs, R.Abs <$> (hint <$> unquoteNString x) <*> unquoteN y)]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "abstraction" t+      _ -> throwError $ NonCanonical "abstraction" t      where hint x | not (null x) = x                  | otherwise    = "_"@@ -344,7 +349,7 @@               sep [ text "Can't unquote stale metavariable"                   , pretty m <> text "." <> pretty x ]         return x-      _ -> throwException $ NonCanonical "meta variable" t+      _ -> throwError $ NonCanonical "meta variable" t  instance Unquote a => Unquote (Dom a) where   unquote t = domFromArg <$> unquote t@@ -363,7 +368,7 @@           ,(c `isCon` primAgdaSortLit, R.LitS <$> unquoteN u)]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "sort" t+      _ -> throwError $ NonCanonical "sort" t  instance Unquote Literal where   unquote t = do@@ -382,7 +387,7 @@           , (c `isCon` primAgdaLitMeta,   litMeta   noRange =<< unquoteN x) ]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "literal" t+      _ -> throwError $ NonCanonical "literal" t  instance Unquote R.Term where   unquote t = do@@ -420,7 +425,7 @@        Con{} -> __IMPOSSIBLE__       Lit{} -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "term" t+      _ -> throwError $ NonCanonical "term" t  instance Unquote R.Pattern where   unquote t = do@@ -442,7 +447,7 @@           [ (c `isCon` primAgdaPatCon, R.ConP <$> unquoteN x <*> unquoteN y) ]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "pattern" t+      _ -> throwError $ NonCanonical "pattern" t  instance Unquote R.Clause where   unquote t = do@@ -457,7 +462,7 @@           [ (c `isCon` primAgdaClauseClause, R.Clause <$> unquoteN x <*> unquoteN y) ]           __IMPOSSIBLE__       Con c _ _ -> __IMPOSSIBLE__-      _ -> throwException $ NonCanonical "clause" t+      _ -> throwError $ NonCanonical "clause" t  -- Unquoting TCM computations --------------------------------------------- @@ -474,7 +479,7 @@ evalTCM v = do   v <- reduceQuotedTerm v   liftU $ reportSDoc "tc.unquote.eval" 90 $ text "evalTCM" <+> prettyTCM v-  let failEval = throwException $ NonCanonical "type checking computation" v+  let failEval = throwError $ NonCanonical "type checking computation" v    case ignoreSharing v of     I.Def f [] ->@@ -501,7 +506,9 @@              , (f `isDef` primAgdaTCMTypeError,   tcFun1 tcTypeError   u)              , (f `isDef` primAgdaTCMQuoteTerm,   tcQuoteTerm (unElim u))              , (f `isDef` primAgdaTCMUnquoteTerm, tcFun1 (tcUnquoteTerm (mkT (unElim l) (unElim a))) u)-             , (f `isDef` primAgdaTCMBlockOnMeta, uqFun1 tcBlockOnMeta u) ]+             , (f `isDef` primAgdaTCMBlockOnMeta, uqFun1 tcBlockOnMeta u)+             , (f `isDef` primAgdaTCMDebugPrint,  tcFun3 tcDebugPrint l a u)+             ]              failEval     I.Def f [_, _, u, v] ->       choice [ (f `isDef` primAgdaTCMCatchError,    tcCatchError    (unElim u) (unElim v))@@ -550,9 +557,19 @@       b <- unquote (unElim b)       fun a b +    uqFun3 :: (Unquote a, Unquote b, Unquote c) => (a -> b -> c -> UnquoteM d) -> Elim -> Elim -> Elim -> UnquoteM d+    uqFun3 fun a b c = do+      a <- unquote (unElim a)+      b <- unquote (unElim b)+      c <- unquote (unElim c)+      fun a b c+     tcFun2 :: (Unquote a, Unquote b) => (a -> b -> TCM c) -> Elim -> Elim -> UnquoteM c     tcFun2 fun = uqFun2 (\ x y -> liftU (fun x y)) +    tcFun3 :: (Unquote a, Unquote b, Unquote c) => (a -> b -> c -> TCM d) -> Elim -> Elim -> Elim -> UnquoteM d+    tcFun3 fun = uqFun3 (\ x y z -> liftU (fun x y z))+     tcFreshName :: Str -> TCM Term     tcFreshName s = do       m <- currentModule@@ -568,7 +585,7 @@     tcBlockOnMeta :: MetaId -> UnquoteM Term     tcBlockOnMeta x = do       s <- gets snd-      throwException (BlockedOnMeta s x)+      throwError (BlockedOnMeta s x)      tcCommit :: UnquoteM Term     tcCommit = do@@ -582,6 +599,11 @@     tcTypeError :: [ErrorPart] -> TCM a     tcTypeError err = typeError . GenericDocError =<< fsep (map prettyTCM err) +    tcDebugPrint :: Str -> Integer -> [ErrorPart] -> TCM Term+    tcDebugPrint (Str s) n msg = do+      reportSDoc s (fromIntegral n) $ fsep (map prettyTCM msg)+      primUnitUnit+     tcInferType :: R.Term -> TCM Term     tcInferType v = do       (_, a) <- inferExpr =<< toAbstract_ v@@ -622,7 +644,7 @@     extendCxt :: Arg R.Type -> UnquoteM a -> UnquoteM a     extendCxt a m = do       a <- liftU $ traverse (isType_ <=< toAbstract_) a-      liftU1 (addContext (domFromArg a :: Dom Type)) m+      liftU1 (addContext' (domFromArg a :: Dom Type)) m      tcExtendContext :: Term -> Term -> UnquoteM Term     tcExtendContext a m = do@@ -639,8 +661,8 @@         go (a : as) m = extendCxt a $ go as m      constInfo :: QName -> TCM Definition-    constInfo x = getConstInfo x `catchError` \ _ ->-                  genericError $ "Unbound name: " ++ show x+    constInfo x = either err return =<< getConstInfo' x+      where err _ = genericError $ "Unbound name: " ++ prettyShow x      tcGetType :: QName -> TCM Term     tcGetType x = quoteType . defType =<< constInfo x@@ -662,24 +684,26 @@     tcDeclareDef :: Arg QName -> R.Type -> UnquoteM Term     tcDeclareDef (Arg i x) a = inOriginalContext $ do       setDirty-      let h = getHiding i-          r = getRelevance i-      when (h == Hidden) $ liftU $ typeError . GenericDocError =<< text "Cannot declare hidden function" <+> prettyTCM x+      let r = getRelevance i+      when (hidden i) $ liftU $ typeError . GenericDocError =<<+        text "Cannot declare hidden function" <+> prettyTCM x       tell [x]       liftU $ do-        reportSDoc "tc.unquote.decl" 10 $ sep [ text "declare" <+> prettyTCM x <+> text ":"-                                              , nest 2 $ prettyTCM a ]+        reportSDoc "tc.unquote.decl" 10 $ sep+          [ text "declare" <+> prettyTCM x <+> text ":"+          , nest 2 $ prettyTCM a+          ]         a <- isType_ =<< toAbstract_ a-        alreadyDefined <- isJust <$> tryMaybe (getConstInfo x)-        when alreadyDefined $ genericError $ "Multiple declarations of " ++ show x+        alreadyDefined <- isRight <$> getConstInfo' x+        when alreadyDefined $ genericError $ "Multiple declarations of " ++ prettyShow x         addConstant x $ defaultDefn i x a emptyFunction-        when (h == Instance) $ addTypedInstance x a+        when (isInstance i) $ addTypedInstance x a         primUnitUnit      tcDefineFun :: QName -> [R.Clause] -> UnquoteM Term     tcDefineFun x cs = inOriginalContext $ (setDirty >>) $ liftU $ do-      _ <- getConstInfo x `catchError` \ _ ->-        genericError $ "Missing declaration for " ++ show x+      whenM (isLeft <$> getConstInfo' x) $+        genericError $ "Missing declaration for " ++ prettyShow x       cs <- mapM (toAbstract_ . QNamed x) cs       reportSDoc "tc.unquote.def" 10 $ vcat $ map prettyA cs       let i = mkDefInfo (nameConcrete $ qnameName x) noFixity' PublicAccess ConcreteDef noRange
+ src/full/Agda/TypeChecking/Warnings.hs view
@@ -0,0 +1,114 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Warnings where++import qualified Data.List as List++import Agda.TypeChecking.Monad.Base+import {-# SOURCE #-} Agda.TypeChecking.Errors+import {-# SOURCE #-} Agda.TypeChecking.Pretty++import Agda.Syntax.Position+import Agda.Syntax.Parser++import Agda.Interaction.Options++import Agda.Utils.Lens+import qualified Agda.Utils.Pretty as P+import Agda.Utils.Except++#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative ((<$>))+#endif++++{-# SPECIALIZE genericWarning :: P.Doc -> TCM () #-}+genericWarning :: MonadTCM tcm => P.Doc -> tcm ()+genericWarning = warning . GenericWarning++{-# SPECIALIZE genericNonFatalError :: P.Doc -> TCM () #-}+genericNonFatalError :: MonadTCM tcm => P.Doc -> tcm ()+genericNonFatalError = warning . GenericNonFatalError++{-# SPECIALIZE warning_ :: Warning -> TCM TCWarning #-}+warning_ :: MonadTCM tcm => Warning -> tcm TCWarning+warning_ w = do+  r <- view eRange+  c <- view eCall+  -- NicifierIssues print their own error locations in their list of+  -- issues (but we might need to keep the overall range `r` for+  -- comparing ranges)+  let r' = case w of { NicifierIssue{} -> NoRange ; _ -> r }+  p <- liftTCM $ sayWhen r' c $ prettyWarning w+  liftTCM $ return $ TCWarning r w p++{-# SPECIALIZE warning :: Warning -> TCM () #-}+warning :: MonadTCM tcm => Warning -> tcm ()+warning w = do+  tcwarn <- warning_ w+  wmode <- optWarningMode <$> pragmaOptions+  case wmode of+    IgnoreAllWarnings -> case classifyWarning w of+                           -- not allowed to ignore non-fatal errors+                           ErrorWarnings -> raiseWarning tcwarn+                           AllWarnings -> return ()+    TurnIntoErrors -> typeError $ NonFatalErrors [tcwarn]+    LeaveAlone -> raiseWarning tcwarn+  where raiseWarning tcw = stTCWarnings %= (tcw :)++-- | Classifying warnings: some are benign, others are (non-fatal) errors++data WhichWarnings =+    ErrorWarnings -- ^ warnings that will be turned into errors+  | AllWarnings   -- ^ all warnings, including errors and benign ones+  -- Note: order of constructors is important for the derived Ord instance+  deriving (Eq, Ord)++isUnsolvedWarning :: Warning -> Bool+isUnsolvedWarning w = case w of+  UnsolvedMetaVariables{}    -> True+  UnsolvedInteractionMetas{} -> True+  UnsolvedConstraints{}      -> True+ -- rest+  _                          -> False++classifyWarning :: Warning -> WhichWarnings+classifyWarning w = case w of+  OldBuiltin{}               -> AllWarnings+  EmptyRewritePragma         -> AllWarnings+  UselessPublic              -> AllWarnings+  UnreachableClauses{}       -> AllWarnings+  UselessInline{}            -> AllWarnings+  GenericWarning{}           -> AllWarnings+  DeprecationWarning{}       -> AllWarnings+  NicifierIssue{}            -> AllWarnings+  TerminationIssue{}         -> ErrorWarnings+  CoverageIssue{}            -> ErrorWarnings+  CoverageNoExactSplit{}     -> ErrorWarnings+  NotStrictlyPositive{}      -> ErrorWarnings+  UnsolvedMetaVariables{}    -> ErrorWarnings+  UnsolvedInteractionMetas{} -> ErrorWarnings+  UnsolvedConstraints{}      -> ErrorWarnings+  GenericNonFatalError{}     -> ErrorWarnings+  SafeFlagPostulate{}        -> ErrorWarnings+  SafeFlagPragma{}           -> ErrorWarnings+  SafeFlagNonTerminating     -> ErrorWarnings+  SafeFlagTerminating        -> ErrorWarnings+  SafeFlagPrimTrustMe        -> ErrorWarnings+  SafeFlagNoPositivityCheck  -> ErrorWarnings+  SafeFlagPolarity           -> ErrorWarnings+  ParseWarning{}             -> ErrorWarnings++classifyWarnings :: [TCWarning] -> ([TCWarning], [TCWarning])+classifyWarnings = List.partition $ (< AllWarnings) . classifyWarning . tcWarning++-- | running the Parse monad++runPM :: PM a -> TCM a+runPM m = do+  (res, ws) <- runPMIO m+  mapM_ (warning . ParseWarning) ws+  case res of+    Left  e -> throwError (Exception (getRange e) (P.pretty e))+    Right a -> return a
src/full/Agda/TypeChecking/With.hs view
@@ -8,7 +8,8 @@ import Control.Monad import Control.Monad.Writer (WriterT, runWriterT, tell) -import Data.List+import Data.Either+import qualified Data.List as List import Data.Maybe import Data.Monoid import Data.Traversable (traverse)@@ -33,6 +34,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.ReconstructParameters+import Agda.TypeChecking.Rules.Term  import Agda.TypeChecking.Abstract import Agda.TypeChecking.Rules.LHS.Implicit@@ -45,6 +47,7 @@ import Agda.Utils.Null (empty) import Agda.Utils.Permutation import Agda.Utils.Pretty (prettyShow)+import qualified Agda.Utils.Pretty as P import Agda.Utils.Size  #include "undefined.h"@@ -66,9 +69,9 @@ -- --   Output: -----   [@Δ₁@]        part of context not needed for with arguments and their types.+--   [@Δ₁@]        part of context needed for with arguments and their types. -----   [@Δ₂@]        part of context needed for with arguments and their types.+--   [@Δ₂@]        part of context not needed for with arguments and their types. -- --   [@π@]         permutation from Δ to Δ₁Δ₂ as returned by 'splitTelescope'. --@@ -189,7 +192,7 @@ withArguments :: [Term] -> [EqualityView] -> [Term] withArguments vs as = concat $ for (zip vs as) $ \case   (v, OtherType a) -> [v]-  (prf, eqt@(EqualityType s _eq _l t v _v')) -> [unArg v, prf]+  (prf, eqt@(EqualityType s _eq _pars _t v _v')) -> [unArg v, prf]   -- | Compute the clauses for the with-function given the original patterns.@@ -198,6 +201,7 @@   -> QName                -- ^ Name of the parent function.   -> QName                -- ^ Name of the with-function.   -> Type                 -- ^ Types of the parent function.+  -> Telescope            -- ^ Context of parent patterns.   -> [NamedArg DeBruijnPattern] -- ^ Parent patterns.   -> Nat                  -- ^ Number of module parameters in parent patterns   -> Substitution         -- ^ Substitution from parent lhs to with function lhs@@ -206,18 +210,22 @@   -> Nat                  -- ^ Number of with expressions.   -> [A.SpineClause]      -- ^ With-clauses.   -> TCM [A.SpineClause]  -- ^ With-clauses flattened wrt. parent patterns.-buildWithFunction cxtNames f aux t qs npars withSub perm n1 n cs = mapM buildWithClause cs+buildWithFunction cxtNames f aux t delta qs npars withSub perm n1 n cs = mapM buildWithClause cs   where     -- Nested with-functions will iterate this function once for each parent clause.-    buildWithClause (A.Clause (A.SpineLHS i _ ps wps) inheritedDots rhs wh catchall) = do-      let (wps0, wps1) = genericSplitAt n wps+    buildWithClause (A.Clause (A.SpineLHS i _ ps wps) inheritedDots inhStrippedDots rhs wh catchall) = do+      let (wps0, wps1) = splitAt n wps           ps0          = map defaultNamedArg wps0       reportSDoc "tc.with" 50 $ text "inheritedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a                                                                | A.NamedDot x v a <- inheritedDots ]       rhs <- buildRHS rhs-      (namedDots, ps') <- stripWithClausePatterns cxtNames f aux t qs npars perm ps-      let (ps1, ps2) = genericSplitAt n1 ps'-      let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) (inheritedDots ++ namedDots) rhs wh catchall+      (namedDots, strippedDots, ps') <- stripWithClausePatterns cxtNames f aux t delta qs npars perm ps+      reportSDoc "tc.with" 50 $ hang (text "strippedDots:") 2 $+                                  vcat [ prettyTCM e <+> text "==" <+> prettyTCM v <+> (text ":" <+> prettyTCM t)+                                       | A.StrippedDot e v t <- strippedDots ]+      let (ps1, ps2) = splitAt n1 ps'+      let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) (inheritedDots ++ namedDots)+                                                                        (inhStrippedDots ++ strippedDots) rhs wh catchall       reportSDoc "tc.with" 20 $ vcat         [ text "buildWithClause returns" <+> prettyA result         ]@@ -235,14 +243,15 @@     -- of the innermost parent clause. Note that this makes them live in the     -- context of the with-function arguments before any pattern matching. We     -- need to update again once the with-clause patterns have been checked.-    -- This happens in Rules.Def.checkClause before calling checkRHS.+    -- This happens in Rules.Def.checkClause before calling checkRHS. The same+    -- goes for stripped dots.     permuteNamedDots :: A.SpineClause -> A.SpineClause-    permuteNamedDots (A.Clause lhs dots rhs wh catchall) =-      A.Clause lhs (applySubst withSub dots) rhs wh catchall+    permuteNamedDots (A.Clause lhs dots sdots rhs wh catchall) =+      A.Clause lhs (applySubst withSub dots) (applySubst withSub sdots) rhs wh catchall -{-| @stripWithClausePatterns cxtNames parent f t qs np π ps = ps'@+{-| @stripWithClausePatterns cxtNames parent f t Δ qs np π ps = ps'@ -[@Δ@]   context bound by lhs of original function (not an argument).+[@Δ@]   context bound by lhs of original function.  [@f@]   name of @with@-function. @@ -312,12 +321,13 @@   -> QName                    -- ^ Name of the parent function.   -> QName                    -- ^ Name of with-function.   -> Type                     -- ^ __@t@__   top-level type of the original function.+  -> Telescope                -- ^ __@Δ@__   context of patterns of parent function.   -> [NamedArg DeBruijnPattern] -- ^ __@qs@__  internal patterns for original function.   -> Nat                      -- ^ __@npars@__ number of module parameters is @qs@.   -> Permutation              -- ^ __@π@__   permutation taking @vars(qs)@ to @support(Δ)@.   -> [NamedArg A.Pattern]     -- ^ __@ps@__  patterns in with clause (eliminating type @t@).-  -> TCM ([A.NamedDotPattern], [NamedArg A.Pattern]) -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).-stripWithClausePatterns cxtNames parent f t qs npars perm ps = do+  -> TCM ([A.NamedDotPattern], [A.StrippedDotPattern], [NamedArg A.Pattern]) -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).+stripWithClausePatterns cxtNames parent f t delta qs npars perm ps = do   -- Andreas, 2014-03-05 expand away pattern synoyms (issue 1074)   ps <- expandPatternSynonyms ps   -- Ulf, 2016-11-16 Issue 2303: We need the module parameter@@ -338,7 +348,8 @@     ]    -- Andreas, 2015-11-09 Issue 1710: self starts with parent-function, not with-function!-  (ps', namedDots) <- runWriterT $ strip (Def parent []) t psi qs+  (ps', out) <- runWriterT $ strip (Def parent []) t psi qs+  let (strippedDots, namedDots) = partitionEithers out   reportSDoc "tc.with.strip" 50 $ nest 2 $     text "namedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.NamedDot x v a <- namedDots ]   let psp = permute perm ps'@@ -349,7 +360,7 @@   -- Andreas, 2014-03-05 Issue 142:   -- In some cases, permute throws away some dot patterns of ps'   -- which are then never checked.-  if True then return (namedDots, psp) else do+  if True then return (namedDots, strippedDots, psp) else do     -- Andreas, 2014-03-05 Disabled the fix for issue 142, the following is dead code:     forM_ (permute (droppedP perm) ps') $ \ p -> setCurrentRange p $ do       reportSDoc "tc.with.strip" 10 $ text "warning: dropped pattern " <+> prettyA p@@ -361,7 +372,7 @@             "This inaccessible pattern is never checked, so only _ allowed here"           _ -> return ()         _ -> return ()-    return (namedDots, psp)+    return (namedDots, strippedDots, psp)   where      strip@@ -369,7 +380,7 @@       -> Type                         -- ^ The type to be eliminated.       -> [NamedArg A.Pattern]       -- ^ With-clause patterns.       -> [NamedArg DeBruijnPattern] -- ^ Parent-clause patterns with de Bruijn indices relative to Δ.-      -> WriterT [A.NamedDotPattern] TCM [NamedArg A.Pattern]+      -> WriterT [Either A.StrippedDotPattern A.NamedDotPattern] TCM [NamedArg A.Pattern]             -- ^ With-clause patterns decomposed by parent-clause patterns.             --   Also outputs named dot patterns from the parent clause that             --   we need to add let-bindings for.@@ -407,7 +418,7 @@       | A.AsP _ x p <- namedArg p0 = do         (a, _) <- mustBePi t         let v = patternToTerm (namedArg q)-        tell [A.NamedDot x v (unDom a)]+        tell [Right $ A.NamedDot x v (unDom a)]         strip self t (fmap (p <$) p0 : ps) qs     strip self t ps0@(p0 : ps) qs0@(q : qs) = do       p <- liftTCM $ expandLitPattern p0@@ -429,13 +440,14 @@       case namedArg q of         ProjP o d -> case A.maybePostfixProjP p of           Just (o', AmbQ ds) -> do-            let d' = head ds-            when (length ds /= 1) __IMPOSSIBLE__+            -- Andreas, 2016-12-28, issue #2360:+            -- We disambiguate the projection in the with clause+            -- to the projection in the parent clause.             d  <- liftTCM $ getOriginalProjection d-            d' <- liftTCM $ getOriginalProjection d'+            found <- anyM ds ((d ==) <.> (liftTCM . getOriginalProjection))             -- We assume here that neither @o@ nor @o'@ can be @ProjSystem@.             if o /= o' then liftTCM $ mismatchOrigin o o' else do-            if d /= d' then mismatch else do+            if not found then mismatch else do               (self1, t1, ps) <- liftTCM $ do                 t <- reduce t                 (_, self1, t1) <- fromMaybe __IMPOSSIBLE__ <$> projectTyped self t o d@@ -447,14 +459,15 @@               strip self1 t1 ps qs           Nothing -> mismatch -        VarP x  -> do-          let v = var (dbPatVarIndex x)-          t  <- piApply1 t v-          ps <- strip (self `apply1` v) t ps qs-          return $ p : ps+        VarP x  -> (p :) <$> recurse (var (dbPatVarIndex x)) +        AbsurdP p -> __IMPOSSIBLE__+         DotP v  -> case namedArg p of-          A.DotP r o _  -> ok p+          A.DotP r o e  -> do+            (a, _) <- mustBePi t+            tell [Left $ A.StrippedDot e v (unDom a)]+            ok p           A.WildP _     -> ok p           -- Ulf, 2016-05-30: dot patterns are no longer mandatory so a parent           -- dot pattern can appear as a variable in the child clause. Indeed@@ -463,7 +476,7 @@           -- insert a let for it.           A.VarP x -> do             (a, _) <- mustBePi t-            tell [A.NamedDot x v (unDom a)]+            tell [Right $ A.NamedDot x v (unDom a)]             ok p           -- Andreas, 2013-03-21 in case the implicit A.pattern has already been eta-expanded           -- we just fold it back.  This fixes issues 665 and 824.@@ -480,9 +493,7 @@           _ -> failDotPat           where             okFlex = ok . makeImplicitP-            ok p = do-              t' <- piApply1 t v-              (p :) <$> strip (self `apply1` v) t' ps qs+            ok p   = (p :) <$> recurse v          q'@(ConP c ci qs') -> do          reportSDoc "tc.with.strip" 60 $@@ -492,7 +503,7 @@          Def d es <- liftTCM $ ignoreSharing <$> normalise (unEl $ unDom a)          let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es          -- Get the original constructor and field names.-         c <- (`withRangeOf` c) <$> do liftTCM $ getConForm $ conName c+         c <- either __IMPOSSIBLE__ (`withRangeOf` c) <$> do liftTCM $ getConForm $ conName c           case namedArg p of @@ -503,20 +514,17 @@             maybe __IMPOSSIBLE__ (\ p -> strip self t (p : ps) qs0) =<< do               liftTCM $ expandImplicitPattern' (unDom a) $ makeImplicitP p -          -- Andreas, 2013-03-21 if we encounter an implicit pattern-          -- in the with-clause, we expand it and restart-          -- Andreas, 2015-07-07 Issue 1606 do this whenever the parent-          -- is a record pattern, regardless of whether it came from an implicit-          -- or not.  This allows to drop hidden flexible record patterns from-          -- the with clauses even when they were present in the parent clause.-          A.WildP{} | Just _ <- conPRecord ci -> do-            maybe __IMPOSSIBLE__ (\ p -> strip self t (p : ps) qs0) =<< do-              liftTCM $ expandImplicitPattern' (unDom a) p+          -- Andreas, 2016-12-29, issue #2363.+          -- Allow _ to stand for the corresponding parent pattern.+          A.WildP{} -> do+            let ps' = map (updateNamedArg $ const $ A.WildP empty) qs'+            stripConP d us b c ConOCon qs' ps'            A.ConP _ (A.AmbQ cs') ps' -> do             -- Check whether the with-clause constructor can be (possibly trivially)             -- disambiguated to be equal to the parent-clause constructor.-            cs' <- liftTCM $ mapM getConForm cs'+            -- Andreas, 2017-08-13, herein, ignore abstract constructors.+            cs' <- liftTCM $ do snd . partitionEithers <$> mapM getConForm cs'             unless (elem c cs') mismatch             -- Strip the subpatterns ps' and then continue.             stripConP d us b c ConOCon qs' ps'@@ -536,10 +544,8 @@            mismatch          LitP lit -> case namedArg p of-          A.LitP lit' | lit == lit' -> do-            (a, b) <- mustBePi t-            let v = Lit lit-            strip (self `apply1` v) (b `absApp` v) ps qs+          A.LitP lit' | lit == lit' -> recurse $ Lit lit+          A.WildP{}                 -> recurse $ Lit lit            p@(A.PatternSynP pi' c' [ps']) -> do              reportSDoc "impossible" 10 $@@ -548,13 +554,17 @@            _ -> mismatch       where-        mismatch = typeError $-          WithClausePatternMismatch (namedArg p0) (dbPatVarName <$> namedArg q)-        mismatchOrigin o o' = typeError . GenericDocError =<< fsep+        recurse v = do+          t' <- piApply1 t v+          strip (self `apply1` v) t' ps qs++        mismatch = addContext delta $ typeError $+          WithClausePatternMismatch (namedArg p0) q+        mismatchOrigin o o' = addContext delta . typeError . GenericDocError =<< fsep           [ text "With clause pattern"           , prettyA p0           , text "is not an instance of its parent pattern"-          , prettyTCM $ dbPatVarName <$> namedArg q+          , P.fsep <$> prettyTCMPatterns [q]           , text $ "since the parent pattern is " ++ prettyProjOrigin o ++                    " and the with clause pattern is " ++ prettyProjOrigin o'           ]@@ -582,14 +592,14 @@              -- ^ Argument patterns (parent clause).           -> [NamedArg A.Pattern]              -- ^ Argument patterns (with clause).-          -> WriterT [A.NamedDotPattern] TCM [NamedArg A.Pattern]+          -> WriterT [Either A.StrippedDotPattern A.NamedDotPattern] TCM [NamedArg A.Pattern]              -- ^ Stripped patterns.         stripConP d us b c ci qs' ps' = do            -- Get the type and number of parameters of the constructor.           Defn {defType = ct, theDef = Constructor{conPars = np}}  <- getConInfo c           -- Compute the argument telescope for the constructor-          let ct' = ct `piApply` genericTake np us+          let ct' = ct `piApply` take np us           TelV tel' _ <- liftTCM $ telView ct'            reportSDoc "tc.with.strip" 20 $@@ -597,7 +607,7 @@                  , text "ct' = " <+> prettyTCM ct'                  , text "np  = " <+> text (show np)                  , text "us  = " <+> prettyList (map prettyTCM us)-                 , text "us' = " <+> prettyList (map prettyTCM $ genericTake np us)+                 , text "us' = " <+> prettyList (map prettyTCM $ take np us)                  ]            -- Compute the new type@@ -638,14 +648,22 @@ --     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@ expressions.-  -> Telescope            -- ^ __@Δ₂@__      The arguments of the @with@ function after the @with@ expressions.-  -> Nat                  -- ^ __@n@__       The number of @with@ expressions.-  -> [NamedArg DeBruijnPattern]   -- ^ __@qs@__      The parent patterns.-  -> Permutation          -- ^ __@perm@__    Permutation to split into needed and unneeded vars.-  -> Permutation          -- ^ __@lhsPerm@__ 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.+  -> [NamedArg DeBruijnPattern]+      -- ^ __@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 @@ -683,14 +701,14 @@   reportSDoc "tc.with.display" 20 $ vcat     [ text "withDisplayForm"     , nest 2 $ vcat-      [ text "f      =" <+> text (show f)-      , text "aux    =" <+> text (show aux)+      [ text "f      =" <+> text (prettyShow f)+      , text "aux    =" <+> text (prettyShow aux)       , text "delta1 =" <+> prettyTCM delta1       , text "delta2 =" <+> do addContext delta1 $ prettyTCM delta2       , text "n      =" <+> text (show n)       , text "perm   =" <+> text (show perm)       , text "top    =" <+> do addFullCtx $ prettyTCM topArgs-      , text "qs     =" <+> sep (map (prettyTCM . namedArg) qs)+      , text "qs     =" <+> prettyList (map pretty qs)       , text "qsToTm =" <+> prettyTCM tqs0 -- ctx would be permuted form of delta1 ++ delta2       , text "ys     =" <+> text (show ys)       , text "rho    =" <+> text (prettyShow rho)@@ -709,7 +727,7 @@     -- 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+        term i = maybe wild var $ List.findIndex (Just i ==) ys     -- -- OLD     -- sub top rho wild = parallelS $ map term [0 .. m - 1] ++ topTerms     --   where@@ -741,5 +759,6 @@       ProjP _ d   -> DDef d [] -- WRONG. TODO: convert spine to non-spine ... DDef d . defaultArg       VarP x      -> DTerm  $ var $ dbPatVarIndex x       DotP t      -> DDot   $ t+      AbsurdP p   -> toTerm p       ConP c cpi ps -> DCon c (fromConPatternInfo cpi) $ toTerms ps       LitP l      -> DTerm  $ Lit l
src/full/Agda/Utils/Bag.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE CPP                 #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}  -- | A simple overlay over Data.Map to manage unordered sets with duplicates. @@ -26,13 +25,17 @@  -- | A set with duplicates. --   Faithfully stores elements which are equal with regard to (==).-newtype Bag a = Bag { bag :: Map a [a] }+newtype Bag a = Bag+  { bag :: Map a [a]+      -- ^ The list contains all occurrences of @a@ (not just the duplicates!).+      --   Hence, the invariant: the list is never empty.+  }   deriving (Eq, Ord)   -- The list contains all occurrences of @a@ (not just the duplicates!).-  -- Hence the invariant: the list is never empty!+  -- Hence the invariant: the list is never empty.   --   -- This is slightly wasteful, but much easier to implement-  -- in terms of Map as the alternative, which is to store+  -- in terms of @Map@ as the alternative, which is to store   -- only the duplicates in the list.   -- See, e.g., implementation of 'union' which would be impossible   -- to do in the other representation.  We would need a@@ -44,23 +47,28 @@ -- * Query ------------------------------------------------------------------------ +-- | Is the bag empty? null :: Bag a -> Bool null = Map.null . bag +-- | Number of elements in the bag.  Duplicates count. O(n). size :: Bag a -> Int size = getSum . foldMap (Sum . length) . bag --- | @bag ! a@ finds all elements equal to @a@.+-- | @(bag ! a)@ finds all elements equal to @a@.  O(log n).+--   Total function, returns @[]@ if none are. (!) :: Ord a => Bag a -> a -> [a] Bag b ! a = Map.findWithDefault [] a b +-- | O(log n). member :: Ord a => a -> Bag a -> Bool member a = not . notMember a +-- | O(log n). notMember :: Ord a => a -> Bag a -> Bool notMember a b = List.null (b ! a) --- | Return the multiplicity of the given element.+-- | Return the multiplicity of the given element. O(log n + count _ _). count :: Ord a => a -> Bag a -> Int count a b = length (b ! a) @@ -68,9 +76,11 @@ -- * Construction ------------------------------------------------------------------------ +-- | O(1) empty :: Bag a empty = Bag $ Map.empty +-- | O(1) singleton :: a -> Bag a singleton a = Bag $ Map.singleton a [a] @@ -134,7 +144,7 @@     trav []       = __IMPOSSIBLE__  --------------------------------------------------------------------------- * Instances+-- Instances ------------------------------------------------------------------------  instance Show a => Show (Bag a) where
src/full/Agda/Utils/Benchmark.hs view
@@ -14,8 +14,10 @@  import Data.Foldable (foldMap) import Data.Functor+import Data.Function import qualified Data.List as List import Data.Monoid+import Data.Maybe  import qualified Text.PrettyPrint.Boxes as Boxes @@ -38,10 +40,17 @@  type Timings        a = Trie a CPUTime +data BenchmarkOn a = BenchmarkOff | BenchmarkOn | BenchmarkSome (Account a -> Bool)++isBenchmarkOn :: Account a -> BenchmarkOn a -> Bool+isBenchmarkOn _ BenchmarkOff      = False+isBenchmarkOn _ BenchmarkOn       = True+isBenchmarkOn a (BenchmarkSome p) = p a+ -- | Benchmark structure is a trie, mapping accounts (phases and subphases) --   to CPU time spent on their performance. data Benchmark a = Benchmark-  { benchmarkOn    :: !Bool+  { benchmarkOn    :: !(BenchmarkOn a)     -- ^ Are we benchmarking at all?   , currentAccount :: !(CurrentAccount a)     -- ^ What are we billing to currently?@@ -52,14 +61,14 @@ -- | Initial benchmark structure (empty). instance Null (Benchmark a) where   empty = Benchmark-    { benchmarkOn = False+    { benchmarkOn = BenchmarkOff     , currentAccount = Strict.Nothing     , timings = empty     }   null = null . timings  -- | Semantic editor combinator.-mapBenchmarkOn :: (Bool -> Bool) -> Benchmark a -> Benchmark a+mapBenchmarkOn :: (BenchmarkOn a -> BenchmarkOn a) -> Benchmark a -> Benchmark a mapBenchmarkOn f b = b { benchmarkOn = f $ benchmarkOn b }  -- | Semantic editor combinator.@@ -80,17 +89,16 @@   pretty b = text $ Boxes.render table     where     trie = timings b-    (accounts, times) = unzip $ Trie.toList trie-    aggrTimes         = do-      a <- accounts-      let t = Trie.lookupTrie a trie-          hasChildren =-            case foldMap (:[]) t of-              _:_:_ -> True-              _     -> False-      return $ if not (null a) && hasChildren-               then Boxes.text $ "(" ++ prettyShow (getSum $ foldMap Sum t) ++ ")"-               else Boxes.text ""+    (accounts, times0) = unzip $ Trie.toListOrderedBy (flip compare `on` snd)+                               $ Trie.filter ((> fromMilliseconds 10) . snd)+                               $ Trie.mapSubTries (Just . aggr) trie+    times = map fst times0+    aggr t = (fromMaybe 0 $ Trie.lookup [] t, getSum $ foldMap Sum t)+    aggrTimes = do+      (a, (t, aggrT)) <- zip accounts times0+      return $ if t == aggrT || null a+               then Boxes.text ""+               else Boxes.text $ "(" ++ prettyShow aggrT ++ ")"      -- Generate a table.     table = Boxes.hsep 1 Boxes.left [col1, col2, col3]@@ -149,7 +157,7 @@  -- | Turn benchmarking on/off. -setBenchmarking :: MonadBench a m => Bool -> m ()+setBenchmarking :: MonadBench a m => BenchmarkOn a -> m () setBenchmarking b = modifyBenchmark $ mapBenchmarkOn $ const b  -- | Bill current account with time up to now.@@ -180,7 +188,7 @@ --   Works even if the computation is aborted by an exception.  billTo :: MonadBench a m => Account a -> m c -> m c-billTo account m = ifNotM (getsBenchmark benchmarkOn) m $ do+billTo account m = ifNotM (isBenchmarkOn account <$> getsBenchmark benchmarkOn) m $ do   -- Switch to new account.   old <- switchBenchmarking $ Strict.Just account   -- Compute and switch back to old account.@@ -188,7 +196,7 @@  -- | Bill a CPS function to an account. Can't handle exceptions. billToCPS :: MonadBench a m => Account a -> ((b -> m c) -> m c) -> (b -> m c) -> m c-billToCPS account f k = ifNotM (getsBenchmark benchmarkOn) (f k) $ do+billToCPS account f k = ifNotM (isBenchmarkOn account <$> getsBenchmark benchmarkOn) (f k) $ do   -- Switch to new account.   old <- switchBenchmarking $ Strict.Just account   f $ \ x -> x `seq` do
src/full/Agda/Utils/BiMap.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} --- | Finite bijections (implemented as a pair of maps).+-- | Finite bijections (implemented as a pair of tree maps).  module Agda.Utils.BiMap where @@ -40,7 +40,7 @@ singleton :: a -> b -> BiMap a b singleton a b = BiMap (Map.singleton a b) (Map.singleton b a) --- | Insert.  Overwrites existing value if present.+-- | Insert.  Overwrites existing value if present. O(Map.insert). insert :: (Ord a, Ord b) => a -> b -> BiMap a b -> BiMap a b insert a b (BiMap t u) = BiMap (Map.insert a b t) (Map.insert b a u) @@ -50,16 +50,16 @@  -- | Construct from a list of pairs. -----   Does not check for actual bijectivity of constructed finite map.+--   Does not check for actual bijectivity of constructed finite map. O(n log n) fromList :: (Ord a, Ord b) => [(a,b)] -> BiMap a b fromList = List.foldl' (flip (uncurry insert)) empty --- | Turn into list, sorted ascendingly by first value.+-- | Turn into list, sorted ascendingly by first value.  O(Map.toList) toList :: BiMap a b -> [(a,b)] toList = Map.toAscList . biMapThere  --------------------------------------------------------------------------- * Instances+-- Instances ------------------------------------------------------------------------  instance (Ord a, Ord b) => Eq (BiMap a b) where@@ -70,4 +70,3 @@  instance (Show a, Show b) => Show (BiMap a b) where   show bimap = "Agda.Utils.BiMap.fromList " ++ show (toList bimap)-
src/full/Agda/Utils/Char.hs view
@@ -27,7 +27,7 @@ -- punctuation, symbols, separators (including spaces) and others -- (including control characters). ----- These are the tests that 'Data.Char' offers+-- These are the tests that 'Data.Char' offers: data UnicodeTest   = IsControl | IsSpace   | IsLower | IsUpper | IsAlpha | IsAlphaNum | IsPrint@@ -51,4 +51,3 @@ -- | Find out which tests a character satisfies. testChar :: Char -> [UnicodeTest] testChar c = map fst $ filter (($ c) . snd) unicodeTests-
src/full/Agda/Utils/Cluster.hs view
@@ -15,7 +15,6 @@ import Data.Char import Data.Functor import qualified Data.IntMap as IntMap-import Data.List  -- | Characteristic identifiers. type C = Int@@ -28,7 +27,7 @@ cluster f as = cluster' $ map (\ a -> (a, f a)) as  -- | Partition a list of @a@s paired with a non-empty list of---   characteristics $C$ into groups+--   characteristics @C@ into groups --   such that each element in a group shares at least one characteristic --   with at least one other element of the group. cluster' :: [(a,(C,[C]))] -> [[a]]
src/full/Agda/Utils/Either.hs view
@@ -1,17 +1,8 @@ --------------------------------------------------------------------------- | Utilities for the 'Either' type+-- | Utilities for the 'Either' type. ------------------------------------------------------------------------ -module Agda.Utils.Either-  ( whileLeft, caseEitherM-  , mapEither, mapLeft, mapRight-  , traverseEither-  , isLeft, isRight-  , fromLeft, fromRight-  , maybeLeft, maybeRight-  , allLeft, allRight-  , maybeToEither-  ) where+module Agda.Utils.Either where  -- | Loop while we have an exception. @@ -48,12 +39,14 @@ traverseEither f g = either (fmap Left . f) (fmap Right . g)  -- | Returns 'True' iff the argument is @'Right' x@ for some @x@.+-- --   Note: from @base >= 4.7.0.0@ already present in @Data.Either@. isRight :: Either a b -> Bool isRight (Right _) = True isRight (Left  _) = False  -- | Returns 'True' iff the argument is @'Left' x@ for some @x@.+-- --   Note: from @base >= 4.7.0.0@ already present in @Data.Either@. isLeft :: Either a b -> Bool isLeft (Right _) = False@@ -67,28 +60,36 @@ fromRight :: (a -> b) -> Either a b -> b fromRight f = either f id +-- | Analogue of 'Agda.Utils.Maybe.fromMaybeM'.+fromLeftM :: Monad m => (b -> m a) -> Either a b -> m a+fromLeftM = either return++-- | Analogue of 'Agda.Utils.Maybe.fromMaybeM'.+fromRightM :: Monad m => (a -> m b) -> Either a b -> m b+fromRightM f = either f return+ -- | Safe projection from 'Left'.---   @---     maybeLeft (Left a) = Just a---     maybeLeft Right{}  = Nothing---   @+--+--   > maybeLeft (Left a) = Just a+--   > maybeLeft Right{}  = Nothing+-- maybeLeft :: Either a b -> Maybe a maybeLeft = either Just (const Nothing)  -- | Safe projection from 'Right'.---   @---     maybeRight (Right b) = Just b---     maybeRight Left{}    = Nothing---   @+--+--   > maybeRight (Right b) = Just b+--   > maybeRight Left{}    = Nothing+-- maybeRight :: Either a b -> Maybe b maybeRight = either (const Nothing) Just --- | Returns @'Just' <input with tags stripped>@ if all elements are+-- | Returns @'Just' input_with_tags_stripped@ if all elements are -- to the 'Left', and otherwise 'Nothing'. allLeft :: [Either a b] -> Maybe [a] allLeft = mapM maybeLeft --- | Returns @'Just' <input with tags stripped>@ if all elements are+-- | Returns @'Just' input_with_tags_stripped@ if all elements are -- to the right, and otherwise 'Nothing'. -- -- @@@ -102,6 +103,6 @@ allRight :: [Either a b] -> Maybe [b] allRight = mapM maybeRight --- | Convert 'Maybe' to @'Either' ()'@+-- | Convert 'Maybe' to @'Either' ()@. maybeToEither :: Maybe a -> Either () a maybeToEither = maybe (Left ()) Right
src/full/Agda/Utils/Empty.hs view
@@ -1,13 +1,31 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveDataTypeable #-} +#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE DeriveDataTypeable #-}+#endif+ -- | An empty type with some useful instances. module Agda.Utils.Empty where +import Control.Exception (evaluate)++import Data.Functor ((<$))+import Data.Data (Data)++#if __GLASGOW_HASKELL__ <= 708+import Data.Typeable ( Typeable )+#endif+ import Agda.Utils.Impossible  #include "undefined.h"  data Empty+#if __GLASGOW_HASKELL__ <= 708+  deriving Typeable+#endif+deriving instance Data Empty  instance Eq Empty where   _ == _ = True@@ -21,3 +39,17 @@ absurd :: Empty -> a absurd e = seq e __IMPOSSIBLE__ ++-- | @toImpossible e@ extracts the @Impossible@ value raised via+--   @__IMPOSSIBLE__@ to create the element @e@ of type @Empty@.+--   It proceeds by evaluating @e@ to weak head normal form and+--   catching the exception.+--   We are forced to wrap things in a @Maybe@ because of+--   @catchImpossible@'s type.++toImpossible :: Empty -> IO Impossible+toImpossible e = do+  s <- catchImpossible (Nothing <$ evaluate e) (return . Just)+  case s of+    Just i  -> return i+    Nothing -> absurd e -- this should never happen
src/full/Agda/Utils/Except.hs view
@@ -1,39 +1,29 @@-{-# LANGUAGE CPP #-} -#if !(MIN_VERSION_mtl(2,2,1))-{-# OPTIONS_GHC -fno-warn-orphans #-}-#endif- --------------------------------------------------------------------------------- | Wrapper for Control.Monad.Except from the mtl package+-- | Wrapper for Control.Monad.Except from the mtl library (>= 2.2.1) ------------------------------------------------------------------------------  module Agda.Utils.Except   ( Error(noMsg, strMsg)   , ExceptT+  , mapExceptT   , mkExceptT   , MonadError(catchError, throwError)   , runExceptT-  , mapExceptT   ) where -#include "undefined.h"-import Agda.Utils.Impossible+import Control.Monad.Except  -------------------------------------------------------------------------#if MIN_VERSION_mtl(2,2,1)--- New mtl, reexport ExceptT, define class Error for backward compat.------------------------------------------------------------------------- -import Control.Monad.Except- -- | We cannot define data constructors synonymous, so we define the -- @mkExceptT@ function to be used instead of the data constructor -- @ExceptT@. mkExceptT :: m (Either e a) -> ExceptT e m a mkExceptT = ExceptT --- From Control.Monad.Trans.Error of transformers 0.3.0.0.+-- | Error class for backward compatibility (from+-- Control.Monad.Trans.Error in transformers 0.3.0.0).  class Error a where   noMsg  :: a@@ -45,40 +35,3 @@ -- | A string can be thrown as an error. instance Error String where   strMsg = id---------------------------------------------------------------------------#else--- Old mtl, need to define ExceptT from ErrorT---------------------------------------------------------------------------import Control.Monad.Error-import Text.PrettyPrint--type ExceptT = ErrorT---- | We cannot define data constructors synonymous, so we define the--- @mkExceptT@ function to be used instead of the data constructor--- @ErrorT@.-mkExceptT :: m (Either e a) -> ExceptT e m a-mkExceptT = ErrorT---- | 'runExcept' function using mtl 2.1.*.-runExceptT ::  ExceptT e m a -> m (Either e a)-runExceptT = runErrorT--mapExceptT :: (m (Either e a) -> m' (Either e' a')) -> ExceptT e m a -> ExceptT e' m' a'-mapExceptT = mapErrorT--instance Error Doc where-  noMsg  = empty-  strMsg = text---- | To simulate @MaybeT@ by @ExceptT@.-instance Error () where-  noMsg = ()---- Stupid ErrorT!-instance Error (a, b, c) where-  noMsg = __IMPOSSIBLE__--#endif
src/full/Agda/Utils/FileName.hs view
@@ -17,7 +17,7 @@ import System.Directory import System.FilePath -#if mingw32_HOST_OS+#ifdef mingw32_HOST_OS import Control.Exception (bracket) import System.Win32 (findFirstFile, findClose, getFindDataFileName) #endif@@ -25,7 +25,8 @@ import Data.Text (Text) import qualified Data.Text as Text import Data.Function-import Data.Hashable+import Data.Hashable (Hashable)+import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Utils.Monad@@ -40,7 +41,7 @@ -- paths point to the same files or directories.  newtype AbsolutePath = AbsolutePath { byteStringPath :: Text }-  deriving (Eq, Ord, Typeable, Hashable)+  deriving (Eq, Ord, Typeable, Data, Hashable)  -- | Extract the 'AbsolutePath' to be used as 'FilePath'. filePath :: AbsolutePath -> FilePath@@ -67,7 +68,7 @@   | otherwise    = __IMPOSSIBLE__  rootPath :: FilePath-#if mingw32_HOST_OS+#ifdef mingw32_HOST_OS rootPath = joinDrive "C:" [pathSeparator] #else rootPath = [pathSeparator]@@ -113,7 +114,7 @@ --  case insensitively.)  doesFileExistCaseSensitive :: FilePath -> IO Bool-#if mingw32_HOST_OS+#ifdef mingw32_HOST_OS doesFileExistCaseSensitive f = do   doesFileExist f `and2M` do     bracket (findFirstFile f) (findClose . fst) $
src/full/Agda/Utils/Functor.hs view
@@ -15,14 +15,6 @@ import Data.Functor.Compose import Data.Functor.Classes --- Andreas, 2015-05-06, see issue 1501.--- This instance can be obtained from transformers-compat.--- -- ASR (15 October 2014): See issue 1304.--- #if !MIN_VERSION_transformers(0,4,1)--- instance Eq a => Eq (Identity a) where---   Identity x == Identity x' = x == x'--- #endif- infixr 4 $>  ($>) :: Functor f => f a -> b -> f b
src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE BangPatterns               #-} {-# LANGUAGE CPP                        #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ScopedTypeVariables        #-}  -- | Directed graphs (can of course simulate undirected graphs). --@@ -90,6 +89,7 @@ import Agda.Utils.List (headMaybe) import Agda.Utils.Null (Null(null)) import qualified Agda.Utils.Null as Null+import Agda.Utils.Pretty import Agda.Utils.SemiRing import Agda.Utils.Singleton (Singleton) import qualified Agda.Utils.Singleton as Singleton@@ -118,11 +118,17 @@   }   deriving (Eq, Functor, Show) +instance (Pretty s, Pretty t, Pretty e) => Pretty (Graph s t e) where+  pretty = vcat . map pretty . edges+ data Edge s t e = Edge   { source :: s  -- ^ Outgoing node.   , target :: t  -- ^ Incoming node.   , label  :: e  -- ^ Edge label (weight).   } deriving (Eq, Ord, Functor, Show)++instance (Pretty s, Pretty t, Pretty e) => Pretty (Edge s t e) where+  pretty (Edge s t e) = pretty s <+> text "--(" <> pretty t <> text ")-->" <+> pretty t  -- | Reverse an edge. 
src/full/Agda/Utils/Haskell/Syntax.hs view
@@ -1,25 +1,30 @@+-- | ASTs for subset of GHC Haskell syntax.  module Agda.Utils.Haskell.Syntax where --- Modules --+-- * Modules  data Module = Module ModuleName [ModulePragma] [ImportDecl] [Decl] -data ModulePragma = LanguagePragma [Name]+data ModulePragma+  = LanguagePragma [Name]+  | OtherPragma String  -- ^ Unstructured pragma (Andreas, 2017-08-23, issue #2712).  data ImportDecl = ImportDecl-      { importModule    :: ModuleName-      , importQualified :: Bool-      , importSpecs     :: Maybe (Bool, [ImportSpec]) }+  { importModule    :: ModuleName+  , importQualified :: Bool+  , importSpecs     :: Maybe (Bool, [ImportSpec])+  }  data ImportSpec = IVar Name --- Declarations --+-- * Declarations  data Decl = TypeDecl Name [TyVarBind] Type           | DataDecl DataOrNew Name [TyVarBind] [ConDecl] [Deriving]           | TypeSig [Name] Type           | FunBind [Match]+          | PatSyn Pat Pat           | FakeDecl String   deriving (Eq) @@ -44,7 +49,7 @@ data Match = Match Name [Pat] Rhs (Maybe Binds)   deriving (Eq) --- Expressions --+-- * Expressions  data Type = TyForall [TyVarBind] Type           | TyFun Type Type@@ -89,7 +94,7 @@ data Literal = Int Integer | Frac Rational | Char Char | String String   deriving (Eq) --- Names --+-- * Names  data ModuleName = ModuleName String   deriving (Eq, Ord)
+ src/full/Agda/Utils/IO.hs view
@@ -0,0 +1,21 @@+-- | Auxiliary functions for the IO monad.++module Agda.Utils.IO where++import Control.Exception+import Control.Monad.Writer++-- | Catch 'IOException's.+--+class CatchIO m where+  catchIO :: m a -> (IOException -> m a) -> m a++-- | Alias of 'catch' for the IO monad.+--+instance CatchIO IO where+  catchIO = catch++-- | Upon exception, the written output is lost.+--+instance CatchIO m => CatchIO (WriterT w m) where+  catchIO m h = WriterT $ runWriterT m `catchIO` \ e -> runWriterT (h e)
src/full/Agda/Utils/IO/Directory.hs view
@@ -4,24 +4,61 @@ where  import Control.Monad+import Control.Monad.Writer+ import System.Directory import System.FilePath import Data.ByteString as BS  import Paths_Agda +import Agda.Utils.Functor++-- | @copyDirContent src dest@ recursively copies directory @src@ onto @dest@.+--+--   First, a to-do list of copy actions is created.+--   Then, the to-do list is carried out.+--+--   This avoids copying files we have just created again, which can happen+--   if @src@ and @dest@ are not disjoint.+--   (See issue #2705.)+-- copyDirContent :: FilePath -> FilePath -> IO ()-copyDirContent src dest = do-  createDirectoryIfMissing True dest-  chlds <- getDirectoryContents src-  mapM_ (\x -> do-    isDir <- doesDirectoryExist (src </> x)+copyDirContent src dest = mapM_ performAction =<< do+  (`appEndo` []) <$> execWriterT (copyDirContentDryRun src dest)++-- | Action to be carried out for copying a directory recursively.+--+data CopyDirAction+  = MkDir    FilePath+      -- ^ Create directory if missing.+  | CopyFile FilePath FilePath+      -- ^ Copy file if changed.++-- | Perform scheduled 'CopyDirAction'.+--+performAction :: CopyDirAction -> IO ()+performAction = \case+  MkDir d           -> createDirectoryIfMissing True d+  CopyFile src dest -> copyIfChanged src dest++-- | @copyDirContentDryRun src dest@ creates a to-do list+--   for recursively copying directory @src@ onto @dest@.+--+copyDirContentDryRun :: FilePath -> FilePath -> WriterT (Endo [CopyDirAction]) IO ()+copyDirContentDryRun src dest = do+  tell $ Endo (MkDir dest :)+  chlds <- lift $ getDirectoryContents src+  forM_ chlds $ \ x -> do+    isDir <- lift $ doesDirectoryExist (src </> x)     case isDir of       _ | x == "." || x == ".." -> return ()-      True  -> copyDirContent (src </> x) (dest </> x)-      False -> copyIfChanged (src </> x) (dest </> x)-    ) chlds+      True  -> copyDirContentDryRun (src </> x) (dest </> x)+      False -> tell $ Endo (CopyFile (src </> x) (dest </> x) :) +-- | @copyIfChanged src dst@ makes sure that @dst@ exists+--   and has the same content as @dst@.+-- copyIfChanged :: FilePath -> FilePath -> IO () copyIfChanged src dst = do   exist <- doesFileExist dst@@ -29,4 +66,3 @@     new <- BS.readFile src     old <- BS.readFile dst     unless (old == new) $ copyFile src dst-
src/full/Agda/Utils/IO/UTF8.hs view
@@ -4,8 +4,11 @@   ( readTextFile   , Agda.Utils.IO.UTF8.hPutStr   , Agda.Utils.IO.UTF8.writeFile+  , writeTextToFile   ) where +import Data.Text.Lazy (Text)+import qualified Data.Text.Lazy.IO as T import qualified System.IO as IO import Control.Applicative @@ -54,3 +57,11 @@ writeFile :: FilePath -> String -> IO () writeFile file s = IO.withFile file IO.WriteMode $ \h -> do   hPutStr h s++-- | Writes a UTF8-encoded text file. The native convention for line+-- endings is used.++writeTextToFile :: FilePath -> Text -> IO ()+writeTextToFile file s = IO.withFile file IO.WriteMode $ \h -> do+  IO.hSetEncoding h IO.utf8+  T.hPutStr h s
src/full/Agda/Utils/Impossible.hs view
@@ -12,11 +12,25 @@ -- | \"Impossible\" errors, annotated with a file name and a line -- number corresponding to the source code location of the error. -data Impossible = Impossible String Integer deriving Typeable+data Impossible +  = Impossible  String Integer+    -- ^ We reached a program point which should be unreachable.++  | Unreachable String Integer+    -- ^ @Impossible@ with a different error message.+    --   Used when we reach a program point which can in principle+    --   be reached, but not for a certain run.++  deriving Typeable+ instance Show Impossible where   show (Impossible file line) = unlines     [ "An internal error has occurred. Please report this as a bug."+    , "Location of the error: " ++ file ++ ":" ++ show line+    ]+  show (Unreachable file line) = unlines+    [ "We reached a program point we did not want to reach."     , "Location of the error: " ++ file ++ ":" ++ show line     ] 
+ src/full/Agda/Utils/IndexedList.hs view
@@ -0,0 +1,74 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TypeOperators #-}++module Agda.Utils.IndexedList where++import Agda.Utils.Lens++-- | Existential wrapper for indexed types.+data Some :: (k -> *) -> * where+  Some :: f i -> Some f++-- | Unpacking a wrapped value.+withSome :: Some b -> (forall i. b i -> a) -> a+withSome (Some x) f = f x++-- | Lists indexed by a type-level list. A value of type @All p [x₁..xₙ]@ is a+--   sequence of values of types @p x₁@, .., @p xₙ@.+data All :: (x -> *) -> [x] -> * where+  Nil  :: All p '[]+  Cons :: p x -> All p xs -> All p (x ': xs)++-- | Constructing an indexed list from a plain list.+makeAll :: (a -> Some b) -> [a] -> Some (All b)+makeAll f [] = Some Nil+makeAll f (x : xs) =+  case (f x, makeAll f xs) of+    (Some y, Some ys) -> Some (Cons y ys)++-- | Turning an indexed list back into a plain list.+forgetAll :: (forall x. b x -> a) -> All b xs -> [a]+forgetAll f Nil         = []+forgetAll f (Cons x xs) = f x : forgetAll f xs++-- | An index into a type-level list.+data Index :: [x] -> x -> * where+  Zero :: Index (x ': xs) x+  Suc  :: Index xs x -> Index (y ': xs) x++-- | Indices are just natural numbers.+forgetIndex :: Index xs x -> Int+forgetIndex Zero    = 0+forgetIndex (Suc i) = 1 + forgetIndex i++-- | Mapping over an indexed list.+mapWithIndex :: (forall x. Index xs x -> p x -> q x) -> All p xs -> All q xs+mapWithIndex f Nil = Nil+mapWithIndex f (Cons p ps) = Cons (f Zero p) $ mapWithIndex (f . Suc) ps++-- | If you have an index you can get a lens for the given element.+lIndex :: Index xs x -> Lens' (p x) (All p xs)+lIndex Zero    f (Cons x xs) = f x           <&> \ x  -> Cons x xs+lIndex (Suc i) f (Cons x xs) = lIndex i f xs <&> \ xs -> Cons x xs+#if __GLASGOW_HASKELL__ < 800+lIndex _ _ Nil = error "-fwarn-incomplete-pattern deficiency"+#endif++-- | Looking up an element in an indexed list.+lookupIndex :: All p xs -> Index xs x -> p x+lookupIndex = flip ix+  where+    -- -Wincomplete-patterns fails for the other argument order!+    ix :: Index xs x -> All p xs -> p x+    ix Zero    (Cons x xs) = x+    ix (Suc i) (Cons x xs) = ix i xs+#if __GLASGOW_HASKELL__ < 800+    ix _ Nil = error "-fwarn-incomplete-pattern deficiency"+#endif++-- | All indices into an indexed list.+allIndices :: All p xs -> All (Index xs) xs+allIndices = mapWithIndex const+
src/full/Agda/Utils/Lens.hs view
@@ -9,7 +9,7 @@   , (<&>) -- reexported from Agda.Utils.Functor   ) where -import Control.Applicative ( Const(Const), getConst )+import Control.Applicative import Control.Monad.State import Control.Monad.Reader import Control.Monad.Writer@@ -27,6 +27,13 @@ --   Mnemoic: "Lens inner outer". type Lens' i o = forall f. Functor f => (i -> f i) -> o -> f o +-- * Some simple lenses.++lFst :: Lens' a (a, b)+lFst f (x, y) = (, y) <$> f x++lSnd :: Lens' b (a, b)+lSnd f (x, y) = (x,) <$> f y  -- * Elementary lens operations. 
src/full/Agda/Utils/List.hs view
@@ -1,14 +1,12 @@-{-# LANGUAGE CPP #-}+-- | Utility functions for lists. -{-| Utitlity functions on lists.--} module Agda.Utils.List where  import Control.Arrow (first)  import Data.Functor ((<$>)) import Data.Function-import Data.List+import qualified Data.List as List import Data.Maybe import qualified Data.Map as Map import qualified Data.Set as Set@@ -19,9 +17,6 @@  import Agda.Utils.Tuple -#include "undefined.h"-import Agda.Utils.Impossible- -- | Case distinction for lists, with list first. --   Cf. 'Agda.Utils.Null.ifNull'. caseList :: [a] -> b -> (a -> [a] -> b) -> b@@ -49,6 +44,14 @@ lastMaybe [] = Nothing lastMaybe xs = Just $ last xs +-- | Last two elements (safe).+last2 :: [a] -> Maybe (a, a)+last2 (x : y : xs) = Just $ loop x y xs+  where+  loop x y []     = (x, y)+  loop x y (z:xs) = loop y z xs+last2 _ = Nothing+ -- | Opposite of cons @(:)@, safe. uncons :: [a] -> Maybe (a, [a]) uncons []     = Nothing@@ -60,11 +63,10 @@  -- | 'init' and 'last' in one go, safe. initLast :: [a] -> Maybe ([a],a)-initLast [] = Nothing-initLast as = Just $ loop as where-  loop []       = __IMPOSSIBLE__-  loop [a]      = ([], a)-  loop (a : as) = mapFst (a:) $ loop as+initLast []     = Nothing+initLast (a:as) = Just $ loop a as where+  loop a []      = ([], a)+  loop a (b : bs) = mapFst (a:) $ loop b bs  -- | Lookup function (partially safe). (!!!) :: [a] -> Int -> Maybe a@@ -261,7 +263,7 @@     dup (a : _ : _) = Just a     dup _           = Nothing --- | A variant of 'groupBy' which applies the predicate to consecutive+-- | A variant of 'List.groupBy' which applies the predicate to consecutive -- pairs.  groupBy' :: (a -> a -> Bool) -> [a] -> [[a]]@@ -274,10 +276,10 @@                    []            -> []                    ((_, z) : zs) -> grp z zs --- | @'groupOn' f = 'groupBy' (('==') \`on\` f) '.' 'sortBy' ('compare' \`on\` f)@.+-- | @'groupOn' f = 'groupBy' (('==') \`on\` f) '.' 'List.sortBy' ('compare' \`on\` f)@.  groupOn :: Ord b => (a -> b) -> [a] -> [[a]]-groupOn f = groupBy ((==) `on` f) . sortBy (compare `on` f)+groupOn f = List.groupBy ((==) `on` f) . List.sortBy (compare `on` f)  -- | @splitExactlyAt n xs = Just (ys, zs)@ iff @xs = ys ++ zs@ --   and @genericLength ys = n@.@@ -297,24 +299,28 @@   map (== x) xs  -- | Requires both lists to have the same length.+--+--   Otherwise, @Nothing@ is returned. -zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]-zipWith' f []        []      = []-zipWith' f (x : xs) (y : ys) = f x y : zipWith' f xs ys-zipWith' f []       (_ : _)  = {- ' -} __IMPOSSIBLE__-zipWith' f (_ : _)  []       = {- ' -} __IMPOSSIBLE__+zipWith' :: (a -> b -> c) -> [a] -> [b] -> Maybe [c]+zipWith' f = loop+  where+  loop []        []      = Just []+  loop (x : xs) (y : ys) = (f x y :) <$> loop xs ys+  loop []       (_ : _)  = Nothing+  loop (_ : _)  []       = Nothing -{- UNUSED; a better type would be-   zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], Either [a] [b])+-- -- UNUSED; a better type would be+-- -- zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], Either [a] [b]) --- | Like zipWith, but returns the leftover elements of the input lists.-zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], [a] , [b])-zipWithTails f xs       []       = ([], xs, [])-zipWithTails f []       ys       = ([], [] , ys)-zipWithTails f (x : xs) (y : ys) = (f x y : zs , as , bs)-  where (zs , as , bs) = zipWithTails f xs ys--}+-- -- | Like zipWith, but returns the leftover elements of the input lists.+-- zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], [a] , [b])+-- zipWithTails f xs       []       = ([], xs, [])+-- zipWithTails f []       ys       = ([], [] , ys)+-- zipWithTails f (x : xs) (y : ys) = (f x y : zs , as , bs)+--   where (zs , as , bs) = zipWithTails f xs ys + -- | Efficient variant of 'nubBy' for finite lists. -- -- Specification:@@ -323,10 +329,10 @@ nubOn :: Ord b => (a -> b) -> [a] -> [a] nubOn tag =   map snd-  . sortBy (compare `on` fst)+  . List.sortBy (compare `on` fst)   . map (snd . head)-  . groupBy ((==) `on` fst)-  . sortBy (compare `on` fst)+  . List.groupBy ((==) `on` fst)+  . List.sortBy (compare `on` fst)   . map (\p@(_, x) -> (tag x, p))   . zip [1..] @@ -339,7 +345,7 @@ -- -- Furthermore ----- > sortBy (compare `on` f) (uniqOn f xs) == uniqOn f xs.+-- > List.sortBy (compare `on` f) (uniqOn f xs) == uniqOn f xs. uniqOn :: Ord b => (a -> b) -> [a] -> [a] uniqOn key = Map.elems . Map.fromList . map (\ a -> (key a, a)) @@ -366,8 +372,8 @@  editDistance :: Eq a => [a] -> [a] -> Int editDistance xs ys = editD 0 0-  where xss = tails xs-        yss = tails ys+  where xss = List.tails xs+        yss = List.tails ys         tbl = Map.fromList [ ((i, j), editD' i j) | i <- [0..length xss - 1], j <- [0..length yss - 1] ]         editD i j = tbl Map.! (i, j)         editD' i j =
src/full/Agda/Utils/Maybe.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}- -- | Extend 'Data.Maybe' by common operations for the 'Maybe' type. -- --   Note: since this module is usually imported unqualified,@@ -17,9 +15,12 @@ import Data.Maybe import Data.Functor -#include "undefined.h"-import Agda.Utils.Impossible+-- * Conversion. +-- | Retain object when tag is 'True'.+boolToMaybe :: Bool -> a -> Maybe a+boolToMaybe b x = if b then Just x else Nothing+ -- * Collection operations.  -- | @unionWith@ for collections of size <= 1.@@ -59,6 +60,10 @@ caseMaybe :: Maybe a -> b -> (a -> b) -> b caseMaybe m d f = maybe d f m +-- | 'caseMaybe' with flipped branches.+ifJust :: Maybe a -> (a -> b) -> b -> b+ifJust m f d = maybe d f m+ -- * Monads and Maybe.  -- | Monadic version of 'maybe'.@@ -105,19 +110,3 @@ -- allJustM []         = return $ Just [] -- allJustM (mm : mms) = caseMaybeM mm (return Nothing) $ \ a -> --   fmap (a:) <$> allJust mms---- | Precondition: list not empty.---   @---     allJustsOrNothings [Nothing, Nothing] = Just Nothing---     allJustsOrNothings [Just 0, Just 1]   = Just $ Just [0,1]---     allJustsOrNothings [Just 0, Nothing]  = Nothing---   @-allJustsOrNothings :: [Maybe a] -> Maybe (Maybe [a])-allJustsOrNothings [] = __IMPOSSIBLE__-allJustsOrNothings [ma] = return $ (:[]) <$> ma-allJustsOrNothings (ma : mas) = do-  res <- allJustsOrNothings mas-  case (ma, res) of-    (Nothing, Nothing) -> return Nothing-    (Just a, Just as)  -> return $ Just (a : as)-    _                  -> mzero
src/full/Agda/Utils/Maybe/Strict.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} -#if __GLASGOW_HASKELL__ >= 706+#if __GLASGOW_HASKELL__ >= 708 {-# LANGUAGE DeriveGeneric #-} #endif @@ -39,14 +39,10 @@ import           Data.Semigroup      (Semigroup, Monoid, (<>), mempty, mappend) import           Data.Foldable       (Foldable (..)) import           Data.Traversable    (Traversable (..))-#if MIN_VERSION_base(4,7,0) import           Data.Typeable       (Typeable)-#else-import           Data.Typeable       (Typeable1)-#endif import           Data.Strict.Maybe   (Maybe (Nothing, Just), fromJust,                                       fromMaybe, isJust, isNothing, maybe)-#if __GLASGOW_HASKELL__ >= 706+#if __GLASGOW_HASKELL__ >= 708 import           GHC.Generics        (Generic (..)) #endif @@ -61,13 +57,9 @@ toLazy (Just x) = Lazy.Just x  deriving instance Data a => Data (Maybe a)-#if MIN_VERSION_base(4,7,0) deriving instance Typeable Maybe-#else-deriving instance Typeable1 Maybe-#endif -#if __GLASGOW_HASKELL__ >= 706+#if __GLASGOW_HASKELL__ >= 708 deriving instance Generic  (Maybe a) #endif @@ -77,13 +69,13 @@  -- The monoid instance was fixed in strict-base-types 0.5.0. See -- Issue 1805.-instance Monoid a => Semigroup (Maybe a) where+instance Semigroup a => Semigroup (Maybe a) where   Nothing <> m       = m   m       <> Nothing = m-  Just x1 <> Just x2 = Just (x1 `mappend` x2)+  Just x1 <> Just x2 = Just (x1 <> x2) -instance Monoid a => Monoid (Maybe a) where-  mempty = Nothing+instance Semigroup a => Monoid (Maybe a) where+  mempty  = Nothing   mappend = (<>)  instance Foldable Maybe where
src/full/Agda/Utils/Monad.hs view
@@ -5,9 +5,6 @@     , when, unless, MonadPlus(..)     , (<$>), (<*>)     , (<$)-#if MIN_VERSION_mtl(2,2,0)-    , Control.Monad.State.modify'-#endif     )     where @@ -20,6 +17,7 @@ import Data.Foldable as Fold import Data.Maybe +import Agda.Utils.Either import Agda.Utils.Except   ( Error(strMsg)   , MonadError(catchError, throwError)@@ -36,19 +34,11 @@  -- Conditionals and monads ------------------------------------------------ --- | @when_@ is just @Control.Monad.when@ with a more general type.-when_ :: Monad m => Bool -> m a -> m ()-when_ b m = when b $ m >> return ()---- | @unless_@ is just @Control.Monad.unless@ with a more general type.-unless_ :: Monad m => Bool -> m a -> m ()-unless_ b m = unless b $ m >> return ()--whenM :: Monad m => m Bool -> m a -> m ()-whenM c m = c >>= (`when_` m)+whenM :: Monad m => m Bool -> m () -> m ()+whenM c m = c >>= (`when` m) -unlessM :: Monad m => m Bool -> m a -> m ()-unlessM c m = c >>= (`unless_` m)+unlessM :: Monad m => m Bool -> m () -> m ()+unlessM c m = c >>= (`unless` m)  -- | Monadic guard. guardM :: (Monad m, MonadPlus m) => m Bool -> m ()@@ -85,11 +75,19 @@ anyM xs f = orM $ fmap f xs  -- | Lazy monadic disjunction with @Either@  truth values.+--   Returns the last error message if all fail. altM1 :: Monad m => (a -> m (Either err b)) -> [a] -> m (Either err b) altM1 f []       = __IMPOSSIBLE__ altM1 f [a]      = f a altM1 f (a : as) = either (const $ altM1 f as) (return . Right) =<< f a +-- | Lazy monadic disjunction with accumulation of errors in a monoid.+--   Errors are discarded if we succeed.+orEitherM :: (Monoid e, Monad m, Functor m) => [m (Either e b)] -> m (Either e b)+orEitherM []       = return $ Left mempty+orEitherM (m : ms) = caseEitherM m (\e -> mapLeft (e `mappend`) <$> orEitherM ms)+                                   (return . Right)+ -- Loops gathering results in a Monoid ------------------------------------  -- | Generalized version of @mapM_ :: Monad m => (a -> m ()) -> [a] -> m ()@@@ -112,20 +110,19 @@  -- Continuation monad ----------------------------------------------------- -type Cont r a = (a -> r) -> r---- | 'Control.Monad.mapM' for the continuation monad. Terribly useful.-thread :: (a -> Cont r b) -> [a] -> Cont r [b]-thread f [] ret = ret []-thread f (x:xs) ret =-    f x $ \y -> thread f xs $ \ys -> ret (y:ys)+-- Andreas, 2017-04-11, issue #2543+-- The terribly useful thread function is now UNUSED.  [Sadistic laughter :)]+--+-- type Cont r a = (a -> r) -> r+--+-- -- | 'Control.Monad.mapM' for the continuation monad. Terribly useful.+-- thread :: (a -> Cont r b) -> [a] -> Cont r [b]+-- thread f [] ret = ret []+-- thread f (x:xs) ret =+--     f x $ \y -> thread f xs $ \ys -> ret (y:ys)  -- Lists and monads ------------------------------------------------------- --- | Requires both lists to have the same lengths.-zipWithM' :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c]-zipWithM' f xs ys = sequence (zipWith' f xs ys)- -- | A monadic version of @'mapMaybe' :: (a -> Maybe b) -> [a] -> [b]@. mapMaybeM #if __GLASGOW_HASKELL__ <= 708@@ -163,10 +160,10 @@ -- | Finally for the 'Error' class. Errors in the finally part take -- precedence over prior errors. -finally :: MonadError e m => m a -> m b -> m a+finally :: MonadError e m => m a -> m () -> m a first `finally` after = do   r <- catchError (liftM Right first) (return . Left)-  _ <- after+  after   case r of     Left e  -> throwError e     Right r -> return r@@ -181,25 +178,18 @@ -- | Bracket without failure.  Typically used to preserve state. bracket_ :: Monad m          => m a         -- ^ Acquires resource. Run first.-         -> (a -> m c)  -- ^ Releases resource. Run last.+         -> (a -> m ())  -- ^ Releases resource. Run last.          -> m b         -- ^ Computes result. Run in-between.          -> m b bracket_ acquire release compute = do   resource <- acquire   result <- compute-  _ <- release resource+  release resource   return result  -- | Restore state after computation. localState :: MonadState s m => m a -> m a localState = bracket_ get put--#if !MIN_VERSION_mtl(2,2,0)-modify' :: MonadState s m => (s -> s) -> m ()-modify' f = do-  x <- get-  put $! f x-#endif  -- Read ------------------------------------------------------------------- 
+ src/full/Agda/Utils/Monoid.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++-- | More monoids.++module Agda.Utils.Monoid where++import Data.Semigroup (Semigroup(..))+import Data.Monoid (Monoid(..))++-- | Maximum of on-negative (small) natural numbers.++newtype MaxNat = MaxNat { getMaxNat :: Int }+  deriving (Num, Eq, Ord, Show, Enum)++instance Semigroup MaxNat where+  (<>) = max++instance Monoid MaxNat where+  mempty     = 0+  mappend    = (<>)+  mconcat [] = 0+  mconcat ms = maximum ms
src/full/Agda/Utils/Parser/MemoisedCPS.hs view
@@ -24,13 +24,16 @@  module Agda.Utils.Parser.MemoisedCPS   ( ParserClass(..)+  , sat, token, tok, doc+  , DocP, bindP, choiceP, seqP, starP, atomP   , Parser   , ParserWithGrammar   ) where  import Control.Applicative import Control.Monad (ap, liftM2)-import Control.Monad.State.Strict (State, evalState, get, put)+import Control.Monad.State.Strict (State, evalState, runState, get, put, modify')+ import Data.Array import Data.Hashable import qualified Data.HashMap.Strict as Map@@ -39,11 +42,13 @@ import Data.HashSet (HashSet) import qualified Data.IntMap.Strict as IntMap import Data.IntMap.Strict (IntMap)-import Data.List+import qualified Data.List as List+import Data.Maybe+ import Text.PrettyPrint.HughesPJ hiding (empty) import qualified Text.PrettyPrint.HughesPJ as PP -import Agda.Utils.Monad (modify')+import Agda.Utils.Pretty ( mparens )  #include "undefined.h" import Agda.Utils.Impossible@@ -95,11 +100,15 @@     p input i $ \j x -> unP (f x) input j k  instance Functor (Parser k r tok) where-  fmap f p = p >>= return . f+  fmap f (P p) = P $ \input i k ->+    p input i $ \i -> k i . f  instance Applicative (Parser k r tok) where-  pure x = P $ \_ i k -> k i x-  (<*>)  = ap+  pure x        = P $ \_ i k -> k i x+  P p1 <*> P p2 = P $ \input i k ->+    p1 input i $ \i f ->+    p2 input i $ \i x ->+    k i (f x)  instance Alternative (Parser k r tok) where   empty         = P $ \_ _ _ -> return []@@ -113,20 +122,15 @@    -- | Tries to print the parser, or returns 'PP.empty', depending on   -- the implementation. This function might not terminate.-  grammar :: p a -> Doc--  -- | Parses a single token.-  token :: p tok--  -- | Parses a token satisfying the given predicate.-  sat :: (tok -> Bool) -> p tok+  grammar :: Show k => p a -> Doc -  -- | Parses a given token.-  tok :: (Eq tok, Show tok) => tok -> p tok+  -- | Parses a token satisfying the given predicate. The computed+  -- value is returned.+  sat' :: (tok -> Maybe a) -> p a    -- | Uses the given function to modify the printed representation   -- (if any) of the given parser.-  annotate :: (Doc -> Doc) -> p a -> p a+  annotate :: (DocP -> DocP) -> p a -> p a    -- | Memoises the given parser.   --@@ -143,27 +147,44 @@   -- inputs.)   memoiseIfPrinting :: (Eq k, Hashable k, Show k) => k -> p r -> p r +-- | Uses the given document as the printed representation of the+-- given parser. The document's precedence is taken to be 'atomP'.++doc :: ParserClass p k r tok => Doc -> p a -> p a+doc d = annotate (\_ -> (d, atomP))++-- | Parses a token satisfying the given predicate.++sat :: ParserClass p k r tok => (tok -> Bool) -> p tok+sat p = sat' (\t -> if p t then Just t else Nothing)++-- | Parses a single token.++token :: ParserClass p k r tok => p tok+token = doc (text "·") (sat' Just)++-- | Parses a given token.++tok :: (ParserClass p k r tok, Eq tok, Show tok) => tok -> p tok+tok t = doc (text (show t)) (sat (t ==))+ instance ParserClass (Parser k r tok) k r tok where   parse p toks =     flip evalState IntMap.empty $     unP p (listArray (0, n - 1) toks) 0 $ \j x ->       if j == n then return [x] else return []-    where n = genericLength toks+    where n = List.genericLength toks    grammar _ = PP.empty -  token = P $ \input i k ->+  sat' p = P $ \input i k ->     if inRange (bounds input) i then-      (k $! (i + 1)) $! (input ! i)+      case p (input ! i) of+        Nothing -> return []+        Just x  -> (k $! (i + 1)) $! x     else       return [] -  sat p = do-    t <- token-    if p t then return t else empty--  tok t = sat (t ==)-   annotate _ p = p    memoiseIfPrinting _ p = p@@ -171,7 +192,7 @@   memoise key p = P $ \input i k -> do      let alter j zero f m =-          IntMap.alter (Just . f . maybe zero id) j m+          IntMap.alter (Just . f . fromMaybe zero) j m          lookupTable   = fmap (\m -> Map.lookup key =<<                                     IntMap.lookup i m) get@@ -200,17 +221,51 @@ -- | An extended parser type, with some support for printing parsers.  data ParserWithGrammar k r tok a =-  PG (Bool -> Either (Parser k r tok a)-                     (State (HashSet k) Doc))+  PG (Bool -> Either (Parser k r tok a) (Docs k))   -- ^ Invariant: If the boolean is 'True', then the result must be   -- @'Left' something@, and if the boolean is 'False', then the   -- result must be @'Right' something@. +-- | Documents paired with precedence levels.++type DocP = (Doc, Int)++-- | Precedence of @>>=@.++bindP :: Int+bindP = 10++-- | Precedence of @<|>@.++choiceP :: Int+choiceP = 20++-- | Precedence of @<*>@.++seqP :: Int+seqP = 30++-- | Precedence of @⋆@ and @+@.++starP :: Int+starP = 40++-- | Precedence of atoms.++atomP :: Int+atomP = 50++-- | The extended parser type computes one top-level document, plus+-- one document per encountered memoisation key.+--+-- 'Nothing' is used to mark that a given memoisation key has been+-- seen, but that no corresponding document has yet been stored.++type Docs k = State (HashMap k (Maybe DocP)) DocP+ -- | A smart constructor. -pg :: Parser k r tok a ->-      State (HashSet k) Doc ->-      ParserWithGrammar k r tok a+pg :: Parser k r tok a -> Docs k -> ParserWithGrammar k r tok a pg p d = PG $ \b -> if b then Left p else Right d  -- | Extracts the parser.@@ -218,56 +273,86 @@ parser :: ParserWithGrammar k r tok a -> Parser k r tok a parser (PG p) = either id __IMPOSSIBLE__ (p True) --- | Extracts the document.+-- | Extracts the documents. -doc :: ParserWithGrammar k r tok a -> State (HashSet k) Doc-doc (PG p) = either __IMPOSSIBLE__ id (p False)+docs :: ParserWithGrammar k r tok a -> Docs k+docs (PG p) = either __IMPOSSIBLE__ id (p False)  instance Monad (ParserWithGrammar k r tok) where   return  = pure-  p >>= f = pg (parser p >>= parser . f)-               ((\d -> parens (d <+> text ">>= ?")) <$> doc p)+  p >>= f =+    pg (parser p >>= parser . f)+       ((\(d, p) -> (mparens (p < bindP) d <+> text ">>= ?", bindP))+          <$> docs p)  instance Functor (ParserWithGrammar k r tok) where-  fmap f p = pg (fmap f (parser p)) (doc p)+  fmap f p = pg (fmap f (parser p)) (docs p)  instance Applicative (ParserWithGrammar k r tok) where-  pure x    = pg (pure x) (return (text "ε"))+  pure x    = pg (pure x) (return (text "ε", atomP))   p1 <*> p2 =     pg (parser p1 <*> parser p2)-       (liftM2 (\d1 d2 -> parens (sep [d1, d2])) (doc p1) (doc p2))+       (liftM2 (\(d1, p1) (d2, p2) ->+                   (sep [ mparens (p1 < seqP) d1+                        , mparens (p2 < seqP) d2+                        ], seqP))+               (docs p1) (docs p2)) +-- | A helper function.++starDocs :: String -> ParserWithGrammar k r tok a -> Docs k+starDocs s p =+  (\(d, p) -> (mparens (p < starP) d <+> text s, starP)) <$> docs p+ instance Alternative (ParserWithGrammar k r tok) where-  empty     = pg empty (return (text "∅"))+  empty     = pg empty (return (text "∅", atomP))   p1 <|> p2 =     pg (parser p1 <|> parser p2)-       (liftM2 (\d1 d2 -> parens (sep [d1, text "|", d2])) (doc p1) (doc p2))+       (liftM2 (\(d1, p1) (d2, p2) ->+                   (sep [ mparens (p1 < choiceP) d1+                        , text "|"+                        , mparens (p2 < choiceP) d2+                        ], choiceP))+               (docs p1) (docs p2)) -  many p = pg (many (parser p)) ((<+> text "⋆") . parens <$> doc p)-  some p = pg (some (parser p)) ((<+> text "+") . parens <$> doc p)+  many p = pg (many (parser p)) (starDocs "⋆" p)+  some p = pg (some (parser p)) (starDocs "+" p) +-- | Pretty-prints a memoisation key.++prettyKey :: Show k => k -> DocP+prettyKey key = (text ("<" ++ show key ++ ">"), atomP)+ -- | A helper function. -memoiseDoc ::+memoiseDocs ::   (Eq k, Hashable k, Show k) =>-  k -> ParserWithGrammar k r tok r -> State (HashSet k) Doc-memoiseDoc key p = do-  s <- get-  if Set.member key s then-    return (text ("<" ++ show key ++ ">"))-   else do-    put (Set.insert key s)-    (\d -> parens $-             text ("μ " ++ show key ++ ".") $+$ nest 2 d) <$>-      doc p+  k -> ParserWithGrammar k r tok r -> Docs k+memoiseDocs key p = do+  r <- Map.lookup key <$> get+  case r of+    Just _  -> return ()+    Nothing -> do+      modify' (Map.insert key Nothing)+      d <- docs p+      modify' (Map.insert key (Just d))+  return (prettyKey key)  instance ParserClass (ParserWithGrammar k r tok) k r tok where   parse p                 = parse (parser p)-  grammar p               = evalState (doc p) Set.empty-  token                   = pg token (return (text "·"))-  sat p                   = pg (sat p) (return (text "sat ?"))-  tok t                   = pg (tok t) (return (text (show t)))-  annotate f p            = pg (parser p) (f <$> doc p)+  sat' p                  = pg (sat' p) (return (text "<sat ?>", atomP))+  annotate f p            = pg (parser p) (f <$> docs p)   memoise key p           = pg (memoise key (parser p))-                               (memoiseDoc key p)-  memoiseIfPrinting key p = pg (parser p) (memoiseDoc key p)+                               (memoiseDocs key p)+  memoiseIfPrinting key p = pg (parser p) (memoiseDocs key p)++  grammar p =+    d+      $+$+    nest 2 (foldr1 ($+$) $+      text "where" :+      map (\(k, d) -> fst (prettyKey k) <+> text "∷=" <+>+                        maybe __IMPOSSIBLE__ fst d)+          (Map.toList ds))+    where+    ((d, _), ds) = runState (docs p) Map.empty
src/full/Agda/Utils/PartialOrd.hs view
@@ -3,7 +3,6 @@  import Data.Functor import Data.Maybe-import Data.List import Data.Semigroup import Data.Set (Set) import qualified Data.Set as Set
src/full/Agda/Utils/Permutation.hs view
@@ -7,13 +7,14 @@  import Data.IntMap (IntMap) import qualified Data.IntMap as IntMap-import Data.List hiding (drop, null) import qualified Data.List as List import Data.Maybe import Data.Array  import Data.Foldable (Foldable) import Data.Traversable (Traversable)++import Data.Data (Data) import Data.Typeable (Typeable)  import Agda.Syntax.Position (KillRange(..))@@ -37,7 +38,7 @@ --   @Perm : {m : Nat}(n : Nat) -> Vec (Fin n) m -> Permutation@ --   @m@ is the 'size' of the permutation. data Permutation = Perm { permRange :: Int, permPicks :: [Int] }-  deriving (Eq, Typeable)+  deriving (Eq, Typeable, Data)  instance Show Permutation where   show (Perm n xs) = showx [0..n - 1] ++ " -> " ++ showx xs@@ -101,7 +102,7 @@     where tabulate m = for [0..n-1] $ \ i -> IntMap.lookup i m  instance InversePermute (Int -> a) [Maybe a] where-  inversePermute (Perm n xs) f = for [0..n-1] $ \ x -> f <$> findIndex (x ==) xs+  inversePermute (Perm n xs) f = for [0..n-1] $ \ x -> f <$> List.findIndex (x ==) xs  -- | Identity permutation. idP :: Int -> Permutation@@ -113,7 +114,7 @@  -- | Pick the elements that are not picked by the permutation. droppedP :: Permutation -> Permutation-droppedP (Perm n xs) = Perm n $ [0..n-1] \\ xs+droppedP (Perm n xs) = Perm n $ [0..n-1] List.\\ xs  -- | @liftP k@ takes a @Perm {m} n@ to a @Perm {m+k} (n+k)@. --   Analogous to 'Agda.TypeChecking.Substitution.liftS',@@ -148,9 +149,9 @@ compactP :: Permutation -> Permutation compactP (Perm n xs) = Perm m $ map adjust xs   where-    m            = genericLength xs-    missing      = [0..n - 1] \\ xs-    holesBelow k = genericLength $ filter (< k) missing+    m            = List.genericLength xs+    missing      = [0..n - 1] List.\\ xs+    holesBelow k = List.genericLength $ filter (< k) missing     adjust k = k - holesBelow k  -- | @permute (reverseP p) xs ==@@ -222,7 +223,7 @@   { dropN    :: Int  -- ^ Non-negative number of things to drop.   , dropFrom :: a    -- ^ Where to drop from.   }-  deriving (Eq, Ord, Show, Typeable, Functor, Foldable, Traversable)+  deriving (Eq, Ord, Show, Typeable, Data, Functor, Foldable, Traversable)  instance KillRange a => KillRange (Drop a) where   killRange = fmap killRange
src/full/Agda/Utils/Pointer.hs view
@@ -1,5 +1,7 @@-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE BangPatterns       #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE StandaloneDeriving #-}  module Agda.Utils.Pointer   ( Ptr, newPtr, derefPtr, setPtr@@ -15,11 +17,22 @@ import Data.IORef import Data.Traversable import System.IO.Unsafe-import Data.Typeable ( Typeable ) +import Data.Data (Data (..))+import Data.Typeable (Typeable)++#include "undefined.h"+import Agda.Utils.Impossible+ data Ptr a = Ptr { ptrTag :: !Integer                  , ptrRef :: !(IORef a) }-  deriving (Typeable)+  deriving (Typeable, Data)++-- cheating because you shouldn't be digging this far anyway+instance Typeable a => Data (IORef a) where+  gunfold _ _ _ = __IMPOSSIBLE__+  toConstr      = __IMPOSSIBLE__+  dataTypeOf    = __IMPOSSIBLE__  {-# NOINLINE freshVar #-} freshVar :: MVar Integer
src/full/Agda/Utils/Pretty.hs view
@@ -1,5 +1,9 @@ {-# LANGUAGE CPP #-} +#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE DeriveDataTypeable #-}+#endif+ {-| Pretty printing functions. -} module Agda.Utils.Pretty@@ -8,9 +12,17 @@     ) where  import Data.Int ( Int32 )+import Data.Data (Data(..)) +#if __GLASGOW_HASKELL__ <= 708+import Data.Typeable ( Typeable )+#endif+ import Text.PrettyPrint hiding (TextDetails(Str), empty) +#include "undefined.h"+import Agda.Utils.Impossible+ -- * Pretty class  -- | While 'Show' is for rendering data in Haskell syntax,@@ -23,20 +35,17 @@ class Pretty a where   pretty      :: a -> Doc   prettyPrec  :: Int -> a -> Doc+  prettyList  :: [a] -> Doc    pretty      = prettyPrec 0   prettyPrec  = const pretty+  prettyList  = brackets . prettyList_  -- | Use instead of 'show' when printing to world.  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@@ -46,13 +55,18 @@  instance Pretty Char where   pretty c = text [c]+  prettyList = text  instance Pretty Doc where   pretty = id -instance Pretty String where-  pretty = text+instance Pretty a => Pretty (Maybe a) where+  prettyPrec p Nothing  = text "Nothing"+  prettyPrec p (Just x) = mparens (p > 0) $ text "Just" <+> prettyPrec 10 x +instance Pretty a => Pretty [a] where+  pretty = prettyList+ -- * 'Doc' utilities  pwords :: String -> [Doc]@@ -61,6 +75,15 @@ fwords :: String -> Doc fwords = fsep . pwords +-- | Comma separated list, without the brackets.+prettyList_ :: Pretty a => [a] -> Doc+prettyList_ = fsep . punctuate comma . map pretty++-- ASR (2016-12-13): In pretty >= 1.1.2.0 the below function 'mparens'+-- is called 'maybeParens'. I didn't use that name due to the issue+-- https://github.com/haskell/pretty/issues/40.++-- | Apply 'parens' to 'Doc' if boolean is true. mparens :: Bool -> Doc -> Doc mparens True  = parens mparens False = id@@ -81,3 +104,22 @@ multiLineText :: String -> Doc multiLineText = vcat . map text . lines ++#if __GLASGOW_HASKELL__ <= 708+deriving instance Typeable Doc+#endif++-- cheating because you shouldn't be digging this far anyway+instance Data Doc where+  gunfold _ _ _ = __IMPOSSIBLE__+  toConstr      = __IMPOSSIBLE__+  dataTypeOf    = __IMPOSSIBLE__++infixl 6 <?>+-- | @a <?> b = hang a 2 b@+(<?>) :: Doc -> Doc -> Doc+a <?> b = hang a 2 b++-- | @pshow = text . pretty@+pshow :: Show a => a -> Doc+pshow = text . show
src/full/Agda/Utils/Size.hs view
@@ -29,35 +29,33 @@ import Agda.Utils.Null  -- | The size of a collection (i.e., its length).------   Should fit into an @Int@.  TODO: change to @Int@.  class Sized a where-  size :: Integral n => a -> n+  size :: a -> Int  instance Sized [a] where   size = List.genericLength  instance Sized (IntMap a) where-  size = fromIntegral . IntMap.size+  size = IntMap.size  instance Sized IntSet where-  size = fromIntegral . IntSet.size+  size = IntSet.size  instance Sized (Map k a) where-  size = fromIntegral . Map.size+  size = Map.size  instance Sized (Set a) where-  size = fromIntegral . Set.size+  size = Set.size  instance Sized (HashMap k a) where-  size = fromIntegral . HashMap.size+  size = HashMap.size  instance Sized (HashSet a) where-  size = fromIntegral . HashSet.size+  size = HashSet.size  instance Sized (Seq a) where-  size = fromIntegral . Seq.length+  size = Seq.length   -- | Thing decorated with its size.@@ -74,7 +72,7 @@  -- | Return the cached size. instance Sized (SizedThing a) where-  size = fromIntegral . theSize+  size = theSize  instance Null a => Null (SizedThing a) where   empty = SizedThing 0 empty
src/full/Agda/Utils/String.hs view
@@ -1,7 +1,7 @@ module Agda.Utils.String where  import Data.Char-import Data.List+import qualified Data.List as List  import Numeric @@ -30,6 +30,18 @@    escapeChars = "\"\\" +-- | Adds hyphens around the given string+--+-- >>> putStrLn $ delimiter "Title"+-- ———— Title —————————————————————————————————————————————————++delimiter :: String -> String+delimiter s = concat [ replicate 4 '\x2014'+                     , " ", s, " "+                     , replicate (54 - length s) '\x2014'+                     ]++ -- | Shows a non-negative integer using the characters ₀-₉ instead of -- 0-9. @@ -47,7 +59,7 @@ -- | Indents every line the given number of steps.  indent :: Integral i => i -> String -> String-indent i = unlines . map (genericReplicate i ' ' ++) . lines+indent i = unlines . map (List.genericReplicate i ' ' ++) . lines  newtype Str = Str { unStr :: String }   deriving Eq@@ -58,7 +70,7 @@ -- | Show a number using comma to separate powers of 1,000.  showThousandSep :: Show a => a -> String-showThousandSep = reverse . intercalate "," . chop 3 . reverse . show+showThousandSep = reverse . List.intercalate "," . chop 3 . reverse . show  -- | Remove leading whitespace. ltrim :: String -> String
src/full/Agda/Utils/Suffix.hs view
@@ -81,7 +81,9 @@   :: (String -> Bool) -- ^ Is the given name already taken?   -> String           -- ^ Name of which we want an available variant.   -> String           -- ^ Name extended by suffix that is not taken already.-nameVariant taken x = addSuffix x $ trampoline step $ Prime 0+nameVariant taken x+  | taken x   = addSuffix x $ trampoline step $ Subscript 1+  | otherwise = x   where     -- if the current suffix is taken, repeat with next suffix, else done     step s = if taken (addSuffix x s) then Right (nextSuffix s) else Left s
+ src/full/Agda/Utils/Three.hs view
@@ -0,0 +1,24 @@+-- | Tools for a 3-element type.++module Agda.Utils.Three where++-- | Enum type with 3 elements.+--+data Three+  = One+  | Two+  | Three+  deriving (Eq, Ord, Show, Bounded, Enum)++-- | Partition a list into 3 groups.+--+--   Preserves the relative order or elements.+--+partition3 :: (a -> Three) -> [a] -> ([a], [a], [a])+partition3  f = loop where+  loop []     = ([], [], [])+  loop (x:xs) = case f x of+      One   -> (x:as, bs, cs)+      Two   -> (as, x:bs, cs)+      Three -> (as, bs, x:cs)+    where (as, bs, cs) = loop xs
src/full/Agda/Utils/Time.hs view
@@ -12,6 +12,7 @@   , getCPUTime   , measureTime   , CPUTime(..)+  , fromMilliseconds   ) where  import Control.Monad.Trans@@ -36,6 +37,9 @@  newtype CPUTime = CPUTime Integer   deriving (Eq, Show, Ord, Num, Real, Enum, Integral)++fromMilliseconds :: Integer -> CPUTime+fromMilliseconds n = CPUTime (n * 1000000000)  -- | Print CPU time in milli (10^-3) seconds. 
src/full/Agda/Utils/Trie.hs view
@@ -2,26 +2,38 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} +#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE DeriveDataTypeable #-}+#endif+ -- | Strict tries (based on "Data.Map.Strict" and "Agda.Utils.Maybe.Strict").  module Agda.Utils.Trie-  ( Trie+  ( Trie(..)   , empty, singleton, everyPrefix, insert, insertWith, union, unionWith   , adjust, delete-  , toList, toAscList+  , toList, toAscList, toListOrderedBy   , lookup, member, lookupPath, lookupTrie+  , mapSubTries, filter   ) where -import Prelude hiding (null, lookup)+import Prelude hiding (null, lookup, filter) import qualified Prelude +import Control.Monad import Data.Function import Data.Functor import Data.Foldable (Foldable) import qualified Data.Maybe as Lazy import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map+import Data.Monoid+import qualified Data.List as List +#if __GLASGOW_HASKELL__ <= 708+import Data.Typeable ( Typeable )+#endif+ import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Null @@ -29,7 +41,14 @@ -- --   With the strict 'Maybe' type, 'Trie' is also strict in 'v'. data Trie k v = Trie !(Strict.Maybe v) !(Map k (Trie k v))-  deriving (Show, Eq, Functor, Foldable)+  deriving ( Show+           , Eq+           , Functor+           , Foldable+#if __GLASGOW_HASKELL__ <= 708+           , Typeable+#endif+           )  -- | Empty trie. instance Null (Trie k v) where@@ -103,6 +122,25 @@   , (ks, v) <- toAscList t   ] +-- | Convert to list where nodes at the same level are ordered according to the+--   given ordering.+toListOrderedBy :: Ord k => (v -> v -> Ordering) -> Trie k v -> [([k], v)]+toListOrderedBy cmp (Trie mv ts) =+  Strict.maybeToList (([],) <$> mv) +++  [ (k : ks, v) | (k, t)  <- List.sortBy (cmp' `on` val . snd) $ Map.toAscList ts,+                  (ks, v) <- toListOrderedBy cmp t ]+  where+    cmp' Strict.Nothing  Strict.Just{}   = LT+    cmp' Strict.Just{}   Strict.Nothing  = GT+    cmp' Strict.Nothing  Strict.Nothing  = EQ+    cmp' (Strict.Just x) (Strict.Just y) = cmp x y+    val (Trie mv _) = mv++-- | Create new values based on the entire subtrie. Almost, but not quite+--   comonad extend.+mapSubTries :: Ord k => (Trie k u -> Maybe v) -> Trie k u -> Trie k v+mapSubTries f t@(Trie mv ts) = Trie (Strict.toStrict (f t)) (fmap (mapSubTries f) ts)+ -- | Returns the value associated with the given key, if any. lookup :: Ord k => [k] -> Trie k v -> Maybe v lookup []       (Trie v _)  = Strict.toLazy v@@ -125,4 +163,13 @@ lookupTrie :: Ord k => [k] -> Trie k v -> Trie k v lookupTrie []       t           = t lookupTrie (k : ks) (Trie _ cs) = maybe empty (lookupTrie ks) (Map.lookup k cs)++-- | Filter a trie.+filter :: Ord k => (v -> Bool) -> Trie k v -> Trie k v+filter p (Trie mv ts) = Trie mv' (Map.filter (not . null) $ filter p <$> ts)+  where+    mv' =+      case mv of+        Strict.Just v | p v -> mv+        _                   -> Strict.Nothing 
+ src/full/Agda/Utils/TypeLevel.hs view
@@ -0,0 +1,130 @@+{-# LANGUAGE GADTs                #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE PolyKinds            #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE KindSignatures       #-}+{-# LANGUAGE ConstraintKinds      #-}+{-# LANGUAGE ScopedTypeVariables  #-}+-- We need undecidable instances for the definition of @Foldr@,+-- and @Domains@ and @CoDomain@ using @If@ for instance.+{-# LANGUAGE UndecidableInstances #-}++module Agda.Utils.TypeLevel where++import Data.Proxy+import GHC.Exts (Constraint)++------------------------------------------------------------------+-- CONSTRAINTS+------------------------------------------------------------------++-- | @All p as@ ensures that the constraint @p@ is satisfied by+--   all the 'types' in @as@.+--   (Types is between scare-quotes here because the code is+--   actually kind polymorphic)++type family All (p :: k -> Constraint) (as :: [k]) :: Constraint where+  All p '[]       = ()+  All p (a ': as) = (p a, All p as)++------------------------------------------------------------------+-- FUNCTIONS+-- Type-level and Kind polymorphic versions of usual value-level+-- functions.+------------------------------------------------------------------++-- | On Booleans+type family If (b :: Bool) (l :: k) (r :: k) :: k where+  If 'True  l r = l+  If 'False l r = r++-- | On Lists+type family Foldr (c :: k -> l -> l) (n :: l) (as :: [k]) :: l where+  Foldr c n '[]       = n+  Foldr c n (a ': as) = c a (Foldr c n as)++-- | Version of @Foldr@ taking a defunctionalised argument so+--   that we can use partially applied functions.+type family Foldr' (c :: Function k (Function l l -> *) -> *)+                   (n :: l) (as :: [k]) :: l where+  Foldr' c n '[]       = n+  Foldr' c n (a ': as) = Apply (Apply c a) (Foldr' c n as)++type family Map (f :: Function k l -> *) (as :: [k]) :: [l] where+  Map f as = Foldr' (ConsMap0 f) '[] as++data ConsMap0 :: (Function k l -> *) -> Function k (Function [l] [l] -> *) -> *+data ConsMap1 :: (Function k l -> *) -> k -> Function [l] [l] -> *+type instance Apply (ConsMap0 f)    a = ConsMap1 f a+type instance Apply (ConsMap1 f a) tl = Apply f a ': tl++type family Constant (b :: l) (as :: [k]) :: [l] where+  Constant b as = Map (Constant1 b) as++------------------------------------------------------------------+-- TYPE FORMERS+------------------------------------------------------------------++-- | @Arrows [a1,..,an] r@ corresponds to @a1 -> .. -> an -> r@+-- | @Products [a1,..,an]@ corresponds to @(a1, (..,( an, ())..))@++type Arrows   (as :: [*]) (r :: *) = Foldr (->) r as+type Products (as :: [*])          = Foldr (,) () as++-- | @IsBase t@ is @'True@ whenever @t@ is *not* a function space.++type family IsBase (t :: *) :: Bool where+  IsBase (a -> t) = 'False+  IsBase a        = 'True++-- | Using @IsBase@ we can define notions of @Domains@ and @CoDomains@+--   which *reduce* under positive information @IsBase t ~ 'True@ even+--   though the shape of @t@ is not formally exposed++type family Domains (t :: *) :: [*] where+  Domains t = If (IsBase t) '[] (Domains' t)+type family Domains' (t :: *) :: [*] where+  Domains' (a -> t) = a ': Domains t++type family CoDomain (t :: *) :: * where+  CoDomain t = If (IsBase t) t (CoDomain' t)+type family CoDomain' (t :: *) :: * where+  CoDomain' (a -> t) = CoDomain t++------------------------------------------------------------------+-- TYPECLASS MAGIC+------------------------------------------------------------------++-- | @Currying as b@ witnesses the isomorphism between @Arrows as b@+--   and @Products as -> b@. It is defined as a type class rather+--   than by recursion on a singleton for @as@ so all of that these+--   conversions are inlined at compile time for concrete arguments.++class Currying as b where+  uncurrys :: Proxy as -> Proxy b -> Arrows as b -> Products as -> b+  currys   :: Proxy as -> Proxy b -> (Products as -> b) -> Arrows as b++instance Currying '[] b where+  uncurrys _ _ f = \ () -> f+  currys   _ _ f = f ()++instance Currying as b => Currying (a ': as) b where+  uncurrys _ p f = uncurry $ uncurrys (Proxy :: Proxy as) p . f+  currys   _ p f = currys (Proxy :: Proxy as) p . curry f++------------------------------------------------------------------+-- DEFUNCTIONALISATION+-- Cf. Eisenberg and Stolarek's paper:+-- Promoting Functions to Type Families in Haskell+------------------------------------------------------------------++data Function :: * -> * -> *++data Constant0 :: Function a (Function b a -> *) -> *+data Constant1 :: * -> Function b a -> *++type family Apply (t :: Function k l -> *) (u :: k) :: l++type instance Apply Constant0     a = Constant1 a+type instance Apply (Constant1 a) b = a
src/full/Agda/Utils/Warshall.hs view
@@ -17,7 +17,7 @@  import Data.Maybe import Data.Array-import Data.List+import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map @@ -42,7 +42,7 @@ warshallG :: (SemiRing edge, Ord node) => AdjList node edge -> AdjList node edge warshallG g = fromMatrix $ warshall m   where-    nodes = zip (nub $ Map.keys g ++ map fst (concat $ Map.elems g))+    nodes = zip (List.nub $ Map.keys g ++ map fst (concat $ Map.elems g))                 [0..]     len   = length nodes     b     = ((0,0), (len - 1,len - 1))@@ -322,15 +322,15 @@          -- compute the sets of flexible and rigid node numbers          ns  = Map.keys (nodeMap gr)          -- a set of flexible variables-         flexs  = foldl' (\ l k -> case k of (Flex i) -> i : l-                                             (Rigid _) -> l) [] ns+         flexs  = List.foldl' (\ l -> \case (Flex i ) -> i : l+                                            (Rigid _) -> l)     [] ns          -- a set of rigid variables-         rigids = foldl' (\ l k -> case k of (Flex _) -> l-                                             (Rigid i) -> i : l) [] ns+         rigids = List.foldl' (\ l -> \case (Flex _ ) -> l+                                            (Rigid i) -> i : l) [] ns           -- rigid matrix indices-         rInds = foldl' (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)-                                  in i : l) [] rigids+         rInds = List.foldl' (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)+                                       in i : l) [] rigids           -- check whether there is a solution          -- d   = [ m!(i,i) | i <- [0 .. (n-1)] ]  -- diagonal@@ -381,7 +381,7 @@          loop1 flxs (r:rgds) subst =             let row = fromJust $ Map.lookup (Rigid r) (nodeMap gr)                 (flxs',subst') =-                  foldl' (\ (flx,sub) f ->+                  List.foldl' (\ (flx,sub) f ->                           let col = fromJust $ Map.lookup (Flex f) (nodeMap gr)                           in  case (inScope f r, m!(row,col)) of --                                Finite z | z <= 0 ->
src/full/Agda/Version.hs view
@@ -1,7 +1,7 @@ module Agda.Version where  import Data.Version-import Data.List+import Data.List ( intercalate, map )  import qualified Paths_Agda as PA 
src/full/undefined.h view
@@ -1,2 +1,7 @@ #define __IMPOSSIBLE__ (throwImpossible (Impossible __FILE__ __LINE__)) #define __IMPOSSIBLE_TERM__ (impossibleTerm __FILE__ __LINE__)++#define __IMPOSSIBLE_VERBOSE__ (\ s -> do { reportSLn "impossible" 10 s ; __IMPOSSIBLE__ })++#define __UNREACHABLE__ (throwImpossible (Unreachable __FILE__ __LINE__))+#define __CRASH_WHEN__ (\ k n -> whenExactVerbosity k n __UNREACHABLE__)
+ stack-7.10.3.yaml view
@@ -0,0 +1,10 @@+resolver: lts-6.35++extra-deps:+- STMonadTrans-0.4.3+- cpphs-1.20.8+- equivalence-0.3.2++# Local packages, usually specified by relative directory name+packages:+- '.'
stack-7.8.4.yaml view
@@ -1,27 +1,35 @@+resolver: lts-2.22+ flags:-  semigroups:-    bytestring-builder: false-packages:-- '.'+  QuickCheck:+    base4: true+    base4point8: false+ extra-deps:-- binary-0.8.4.1-- boxes-0.1.4-- data-hash-0.2.0.1 - EdisonAPI-1.3.1 - EdisonCore-1.3.1.1-- equivalence-0.3.1+- QuickCheck-2.8.2+- STMonadTrans-0.4.3+- binary-0.7.2.1+- boxes-0.1.4+- cpphs-1.20.8+- data-hash-0.2.0.1+- equivalence-0.3.2 - fail-4.9.0.0-- geniplate-mirror-0.7.4+- geniplate-mirror-0.7.5 - gitrev-1.2.0-- haskeline-0.7.2.3+- haskeline-0.7.1.3 - ieee754-0.7.8 - monadplus-1.4.2+- mtl-2.2.1 - murmur-hash-0.1.0.9-- QuickCheck-2.9.2 - regex-tdfa-1.2.2 - regex-tdfa-text-1.0.0.3-- semigroups-0.18.2-- STMonadTrans-0.3.3-- tasty-silver-3.1.9+- semigroups-0.18+- transformers-0.4.2.0+- transformers-compat-0.4.0.4 - void-0.7.1-resolver: lts-2.22++# Local packages, usually specified by relative directory name+packages:+- '.'
− stack-8.0.1.yaml
@@ -1,5 +0,0 @@-resolver: lts-7.13--# Local packages, usually specified by relative directory name-packages:-- '.'
+ stack-8.0.2.yaml view
@@ -0,0 +1,5 @@+resolver: lts-9.1++# Local packages, usually specified by relative directory name+packages:+- '.'