libcspm 0.2.1 → 1.0.0
raw patch · 78 files changed
+12139/−5678 lines, 78 filesdep +deepseqdep +hashabledep +hashtablesdep ~containersdep ~pretty
Dependencies added: deepseq, hashable, hashtables, test-framework, text
Dependency ranges changed: containers, pretty
Files
- CHANGELOG.txt +29/−0
- LICENSE.txt +1/−1
- README.md +2/−0
- dist/build/CSPM/Parser/Lexer.hs +0/−530
- libcspm.cabal +39/−24
- src/CSPM.hs +92/−39
- src/CSPM/CommandLineOptions.hs +58/−0
- src/CSPM/Compiler/Events.hs +0/−33
- src/CSPM/Compiler/Map.hs +0/−32
- src/CSPM/Compiler/Processes.hs +0/−166
- src/CSPM/Compiler/Set.hs +0/−39
- src/CSPM/DataStructures/FreeVars.hs +273/−0
- src/CSPM/DataStructures/Literals.hs +8/−2
- src/CSPM/DataStructures/Names.hs +33/−14
- src/CSPM/DataStructures/Syntax.hs +206/−44
- src/CSPM/DataStructures/Tokens.hs +0/−199
- src/CSPM/DataStructures/Types.hs +233/−76
- src/CSPM/Desugar.hs +418/−112
- src/CSPM/Evaluator.hs +67/−14
- src/CSPM/Evaluator/BuiltInFunctions.hs +208/−47
- src/CSPM/Evaluator/DeclBind.hs +154/−103
- src/CSPM/Evaluator/DeepSeq.hs +91/−0
- src/CSPM/Evaluator/Dot.hs +471/−0
- src/CSPM/Evaluator/Environment.hs +16/−10
- src/CSPM/Evaluator/Exceptions.hs +92/−23
- src/CSPM/Evaluator/Exceptions.hs-boot +29/−0
- src/CSPM/Evaluator/Expr.hs +305/−132
- src/CSPM/Evaluator/Expr.hs-boot +0/−2
- src/CSPM/Evaluator/File.hs +16/−0
- src/CSPM/Evaluator/Module.hs +0/−21
- src/CSPM/Evaluator/Monad.hs +58/−37
- src/CSPM/Evaluator/PatBind.hs +16/−15
- src/CSPM/Evaluator/ProcessValues.hs +241/−0
- src/CSPM/Evaluator/Profiler.hs +225/−0
- src/CSPM/Evaluator/Profiler.hs-boot +3/−0
- src/CSPM/Evaluator/ValuePrettyPrinter.hs +520/−0
- src/CSPM/Evaluator/ValueSet.hs +266/−88
- src/CSPM/Evaluator/ValueSet.hs-boot +8/−3
- src/CSPM/Evaluator/Values.hs +208/−193
- src/CSPM/Evaluator/Values.hs-boot +9/−3
- src/CSPM/Parser.hs +4/−9
- src/CSPM/Parser/Exceptions.hs +48/−5
- src/CSPM/Parser/Lexer.x +115/−45
- src/CSPM/Parser/Monad.hs +17/−11
- src/CSPM/Parser/Parser.hs +3369/−2294
- src/CSPM/Parser/Tokens.hs +251/−0
- src/CSPM/Prelude.hs +160/−35
- src/CSPM/PrettyPrinter.hs +106/−18
- src/CSPM/Renamer.hs +1505/−573
- src/CSPM/TypeChecker.hs +11/−11
- src/CSPM/TypeChecker/BuiltInFunctions.hs +0/−2
- src/CSPM/TypeChecker/Common.hs +12/−10
- src/CSPM/TypeChecker/Compressor.hs +38/−4
- src/CSPM/TypeChecker/Decl.hs +353/−62
- src/CSPM/TypeChecker/Decl.hs-boot +0/−1
- src/CSPM/TypeChecker/Dependencies.hs +0/−271
- src/CSPM/TypeChecker/Exceptions.hs +51/−10
- src/CSPM/TypeChecker/Expr.hs +70/−48
- src/CSPM/TypeChecker/File.hs +17/−0
- src/CSPM/TypeChecker/InteractiveStmt.hs +2/−5
- src/CSPM/TypeChecker/Module.hs +0/−22
- src/CSPM/TypeChecker/Monad.hs +81/−34
- src/CSPM/TypeChecker/Pat.hs +3/−1
- src/CSPM/TypeChecker/Unification.hs +309/−103
- src/Data/Graph/ST.hs +287/−0
- src/Data/Set/MutableBit.hs +52/−0
- src/Util/Annotated.hs +34/−16
- src/Util/Exception.hs +65/−8
- src/Util/FuzzyLookup.hs +114/−0
- src/Util/HierarchicalMap.hs +11/−5
- src/Util/List.hs +3/−1
- src/Util/Monad.hs +19/−4
- src/Util/MonadicPrettyPrint.hs +133/−0
- src/Util/MonadicPrettyPrintInternal.hs +362/−0
- src/Util/PartialFunctions.hs +0/−2
- src/Util/Precedence.hs +23/−0
- src/Util/PrettyPrint.hs +1/−2
- tests/Main.hs +118/−64
CHANGELOG.txt view
@@ -1,3 +1,32 @@+1.0.0 Thomas Gibson-Robinson <thomas.gibsonrobinson@gmail.com> 2013-10-11+ This is a major release that delivers a fully functional evaluator that+ is both efficient and compatible with FDR2. This is the library used by FDR3+ (available from https://www.cs.ox.ac.uk/projects/fdr) for parsing and+ manipulating CSPm.++ * Changes to the evaluator included:+ * Major efficiency and memory improvements. In particular, when a+ pattern binds to a process, the entire tree of operator applications+ is not saved in the environment, meaning that memory usage is+ minimised. This should have no noticeable performance impact.+ * Fixed the naming of processes within let expressions.+ * The ability to handle all processes.+ * Misc fixes with dot handling, including within prefixes.+ * Improvements to the handling of infinite sets.+ * An error is thrown when a datatype is not rectangular.+ * Events is now available.+ * An error is thrown when an invalid event or datatype is constructed+ (e.g. when c.1 is constructed, if c is a channel allowing only 0 as+ its first field).+ * The pretty printing structure has been overhauled to make it possible to+ have side effects. This permits more attractive pretty printing of values.+ * Added Hashable instances for many of the built in datatypes.+ * Fixed many small incompatibilites in the parser.+ * Fixed a bug that prevented multiple assertions from being included.+ * Enhanced the renamer to produce better errors.+ * Add full support for modules, including parameterised modules.+ * Fixed many small bugs in the evaluator.+ 0.2.1 Thomas Gibson-Robinson <thomas.gibsonrobinson@gmail.com> 2012-01-18 * Fixed a bug in the typechecker that prevented certain (uncommon) functions that took function arguments that were polymorphic in dot from
LICENSE.txt view
@@ -1,4 +1,4 @@-Copyright (c) 2011, Thomas Gibson-Robinson+Copyright (c) 2013, University of Oxford All rights reserved. Redistribution and use in source and binary forms, with or without
README.md view
@@ -7,6 +7,8 @@ There is also a program, `cspmchecker`, that makes use of this library to provide command line type checking. +[](http://travis-ci.org/tomgr/libcspm)+ Installation ------------
− dist/build/CSPM/Parser/Lexer.hs
@@ -1,530 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 1 "src/CSPM/Parser/Lexer.x" #-}--{-# OPTIONS_GHC -fno-warn-lazy-unlifted-bindings #-}-module CSPM.Parser.Lexer where--import Data.ByteString.Internal (c2w)-import Data.List-import Data.Word--import Control.Monad.Trans-import CSPM.DataStructures.Tokens-import CSPM.Parser.Exceptions-import CSPM.Parser.Monad-import Util.Annotated-import Util.Exception---#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Char (ord)-import Data.Array.Base (unsafeAt)-#else-import Array-import Char (ord)-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif-alex_base :: AlexAddr-alex_base = AlexA# "\xf8\xff\xff\xff\x6d\x00\x00\x00\x72\x00\x00\x00\x8d\xff\xff\xff\xa2\xff\xff\xff\xa3\xff\xff\xff\xa4\xff\xff\xff\xa5\xff\xff\xff\xa6\xff\xff\xff\xa7\xff\xff\xff\xaa\xff\xff\xff\xb1\xff\xff\xff\x3c\x00\x00\x00\xb2\xff\xff\xff\x3e\x00\x00\x00\xb3\xff\xff\xff\x3f\x00\x00\x00\xb4\xff\xff\xff\xd5\xff\xff\xff\xd6\xff\xff\xff\xd7\xff\xff\xff\x44\x00\x00\x00\xd8\xff\xff\xff\x47\x00\x00\x00\xd9\xff\xff\xff\x58\x00\x00\x00\xea\xff\xff\xff\xba\xff\xff\xff\xf3\xff\xff\xff\xba\x00\x00\x00\x5a\x00\x00\x00\x21\x00\x00\x00\xb8\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2f\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x68\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x75\x00\x00\x00\x38\x01\x00\x00\xb8\x01\x00\x00\x38\x02\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x77\x00\x00\x00\x78\x00\x00\x00\x7a\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x40\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x00\x00\x87\x00\x00\x00\x88\x00\x00\x00\x89\x00\x00\x00\x8a\x00\x00\x00\x8b\x00\x00\x00\x8c\x00\x00\x00\x8d\x00\x00\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x90\x00\x00\x00\x91\x00\x00\x00\x92\x00\x00\x00\x93\x00\x00\x00\x94\x00\x00\x00\x95\x00\x00\x00\x9c\x00\x00\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\xa0\x00\x00\x00\xa1\x00\x00\x00\xa2\x00\x00\x00\x6b\x00\x00\x00\x5f\x00\x00\x00\x6e\x00\x00\x00\x6c\x00\x00\x00\xa7\x00\x00\x00\xa9\x00\x00\x00\xaa\x00\x00\x00\xab\x00\x00\x00\xaf\x00\x00\x00\xb0\x00\x00\x00\xb5\x00\x00\x00\xce\x00\x00\x00\xcf\x00\x00\x00\xd0\x00\x00\x00\xb8\x02\x00\x00\x96\x00\x00\x00\xaf\x03\x00\x00\x8b\x03\x00\x00\x0b\x04\x00\x00\x8b\x04\x00\x00\x0b\x05\x00\x00\x8b\x05\x00\x00\x0b\x06\x00\x00\x8b\x06\x00\x00\x0b\x07\x00\x00\x8b\x07\x00\x00\x0b\x08\x00\x00\x8b\x08\x00\x00\x0b\x09\x00\x00\x8b\x09\x00\x00\x0b\x0a\x00\x00\x8b\x0a\x00\x00\x0b\x0b\x00\x00\x8b\x0b\x00\x00\x0b\x0c\x00\x00\x8b\x0c\x00\x00\x0b\x0d\x00\x00\x8b\x0d\x00\x00\x0b\x0e\x00\x00\x8b\x0e\x00\x00\x0b\x0f\x00\x00\x8b\x0f\x00\x00\x0b\x10\x00\x00\x8b\x10\x00\x00\x0b\x11\x00\x00\x8b\x11\x00\x00\x0b\x12\x00\x00\x8b\x12\x00\x00\x0b\x13\x00\x00\x8b\x13\x00\x00\x0b\x14\x00\x00\x8b\x14\x00\x00\x0b\x15\x00\x00\x8b\x15\x00\x00\x0b\x16\x00\x00\x8b\x16\x00\x00\x0b\x17\x00\x00\x8b\x17\x00\x00\x0b\x18\x00\x00\x8b\x18\x00\x00\x0b\x19\x00\x00\x8b\x19\x00\x00\x0b\x1a\x00\x00\x8b\x1a\x00\x00\x0b\x1b\x00\x00\x8b\x1b\x00\x00\x0b\x1c\x00\x00\x8b\x1c\x00\x00\x0b\x1d\x00\x00\x8b\x1d\x00\x00\x0b\x1e\x00\x00\x8b\x1e\x00\x00\x0b\x1f\x00\x00\x8b\x1f\x00\x00\x0b\x20\x00\x00\x8b\x20\x00\x00\x97\x00\x00\x00\x98\x00\x00\x00\x0b\x21\x00\x00\x8b\x21\x00\x00\x0b\x22\x00\x00\x8b\x22\x00\x00\x0b\x23\x00\x00\x8b\x23\x00\x00\x0b\x24\x00\x00\x8b\x24\x00\x00\x9d\x00\x00\x00\x0b\x25\x00\x00\x8b\x25\x00\x00\x0b\x26\x00\x00\x8b\x26\x00\x00\x0b\x27\x00\x00\x8b\x27\x00\x00\x0b\x28\x00\x00\x8b\x28\x00\x00\x0b\x29\x00\x00\x8b\x29\x00\x00\x0b\x2a\x00\x00\x8b\x2a\x00\x00\x0b\x2b\x00\x00\x8b\x2b\x00\x00\x0b\x2c\x00\x00\x8b\x2c\x00\x00\x0b\x2d\x00\x00\x8b\x2d\x00\x00\x0b\x2e\x00\x00\x8b\x2e\x00\x00\x0b\x2f\x00\x00\x8b\x2f\x00\x00\x0b\x30\x00\x00\x8b\x30\x00\x00\x0b\x31\x00\x00\x8b\x31\x00\x00\x0b\x32\x00\x00\x8b\x32\x00\x00\x0b\x33\x00\x00\x8b\x33\x00\x00\x0b\x34\x00\x00\x8b\x34\x00\x00\x0b\x35\x00\x00\x8b\x35\x00\x00\x0b\x36\x00\x00\x8b\x36\x00\x00\x0b\x37\x00\x00\x8b\x37\x00\x00\x0b\x38\x00\x00\x8b\x38\x00\x00\x0b\x39\x00\x00\x8b\x39\x00\x00\x0b\x3a\x00\x00\x8b\x3a\x00\x00\x0b\x3b\x00\x00\x8b\x3b\x00\x00\x0b\x3c\x00\x00\x8b\x3c\x00\x00\x0b\x3d\x00\x00\x99\x00\x00\x00\x9a\x00\x00\x00\xd3\x00\x00\x00\x8b\x3d\x00\x00\x9b\x00\x00\x00\xa3\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\xa8\x00\x00\x00\x0b\x3e\x00\x00\xa6\x00\x00\x00\xae\x00\x00\x00\xb1\x00\x00\x00\xb3\x00\x00\x00\x8b\x3e\x00\x00\xb2\x00\x00\x00\xb6\x00\x00\x00\xad\x00\x00\x00\xb9\x00\x00\x00\xb7\x00\x00\x00\xbd\x00\x00\x00\xac\x00\x00\x00\xbf\x00\x00\x00\xbc\x00\x00\x00\x5c\x03\x00\x00\xc2\x00\x00\x00\xc1\x00\x00\x00\xc8\x00\x00\x00\xbe\x00\x00\x00\xc0\x00\x00\x00\x48\x03\x00\x00\xcb\x00\x00\x00\x4d\x03\x00\x00\xc4\x00\x00\x00\xc7\x00\x00\x00\xe1\x00\x00\x00\x52\x03\x00\x00\x51\x03\x00\x00\x00\x00\x00\x00\xfc\x3e\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x3d\x3f\x00\x00\x55\x03\x00\x00\x00\x00\x00\x00\xae\x3f\x00\x00\xae\x40\x00\x00\x6e\x40\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\xa4\x03\x00\x00\xa5\x03\x00\x00\x00\x00\x00\x00\xdf\x40\x00\x00\x00\x00\x00\x00\x50\x41\x00\x00\x00\x00\x00\x00\xc1\x41\x00\x00\x00\x00\x00\x00\x32\x42\x00\x00\x00\x00\x00\x00\xa3\x42\x00\x00\x00\x00\x00\x00\x14\x43\x00\x00\x00\x00\x00\x00\x85\x43\x00\x00\x00\x00\x00\x00\xf6\x43\x00\x00\x00\x00\x00\x00\x67\x44\x00\x00\x00\x00\x00\x00\xd8\x44\x00\x00\x00\x00\x00\x00\x49\x45\x00\x00\x00\x00\x00\x00\xba\x45\x00\x00\x53\x03\x00\x00\x00\x00\x00\x00\x2b\x46\x00\x00\x00\x00\x00\x00\x9c\x46\x00\x00\x00\x00\x00\x00\x0d\x47\x00\x00\x00\x00\x00\x00\x7e\x47\x00\x00\x00\x00\x00\x00\xef\x47\x00\x00\x00\x00\x00\x00\x60\x48\x00\x00\x00\x00\x00\x00\xd1\x48\x00\x00\x00\x00\x00\x00\x42\x49\x00\x00\x00\x00\x00\x00\xb3\x49\x00\x00\x00\x00\x00\x00\x24\x4a\x00\x00\x00\x00\x00\x00\x95\x4a\x00\x00\x00\x00\x00\x00\x06\x4b\x00\x00\x00\x00\x00\x00\x77\x4b\x00\x00\x00\x00\x00\x00\xe8\x4b\x00\x00\x00\x00\x00\x00\x59\x4c\x00\x00\x00\x00\x00\x00\xca\x4c\x00\x00\x00\x00\x00\x00\x3b\x4d\x00\x00\x00\x00\x00\x00\xac\x4d\x00\x00\x00\x00\x00\x00\x1d\x4e\x00\x00\x00\x00\x00\x00\x8e\x4e\x00\x00\x00\x00\x00\x00\xff\x4e\x00\x00\x00\x00\x00\x00\x70\x4f\x00\x00\x00\x00\x00\x00\xe1\x4f\x00\x00\x00\x00\x00\x00\x52\x50\x00\x00\x00\x00\x00\x00\xc3\x50\x00\x00\x00\x00\x00\x00\x34\x51\x00\x00\x00\x00\x00\x00\x75\x51\x00\x00\x00\x00\x00\x00\xe6\x51\x00\x00\x00\x00\x00\x00\x57\x52\x00\x00\x00\x00\x00\x00\xc8\x52\x00\x00\x00\x00\x00\x00\x39\x53\x00\x00\x00\x00\x00\x00\xaa\x53\x00\x00\x00\x00\x00\x00\x1b\x54\x00\x00\x00\x00\x00\x00\x8c\x54\x00\x00\x00\x00\x00\x00\xfd\x54\x00\x00\x00\x00\x00\x00\x6e\x55\x00\x00\x00\x00\x00\x00\xdf\x55\x00\x00\x00\x00\x00\x00\x50\x56\x00\x00\x00\x00\x00\x00\xc1\x56\x00\x00\x00\x00\x00\x00\x32\x57\x00\x00\x00\x00\x00\x00\xa3\x57\x00\x00\x00\x00\x00\x00\x14\x58\x00\x00\x00\x00\x00\x00\x85\x58\x00\x00\x00\x00\x00\x00\xf6\x58\x00\x00\x00\x00\x00\x00\x67\x59\x00\x00\x5d\x5a\x00\x00\x60\x03\x00\x00\x62\x03\x00\x00\x63\x03\x00\x00\x64\x03\x00\x00\x65\x03\x00\x00\x66\x03\x00\x00\x5b\x03\x00\x00\x00\x00\x00\x00\xa9\x59\x00\x00\x00\x00\x00\x00\x9e\x5a\x00\x00\x00\x00\x00\x00\xdf\x5a\x00\x00\x00\x00\x00\x00\x20\x5b\x00\x00\x00\x00\x00\x00\x61\x5b\x00\x00\x00\x00\x00\x00\xa2\x5b\x00\x00\x00\x00\x00\x00\xe3\x5b\x00\x00\x00\x00\x00\x00\x24\x5c\x00\x00\x00\x00\x00\x00\x65\x5c\x00\x00\x00\x00\x00\x00\xa6\x5c\x00\x00\x00\x00\x00\x00\xe7\x5c\x00\x00\x00\x00\x00\x00\x28\x5d\x00\x00\x6b\x03\x00\x00\x68\x03\x00\x00\x00\x00\x00\x00\x69\x5d\x00\x00\x00\x00\x00\x00\xaa\x5d\x00\x00\x00\x00\x00\x00\xeb\x5d\x00\x00\x00\x00\x00\x00\x2c\x5e\x00\x00\x00\x00\x00\x00\x6d\x5e\x00\x00\x00\x00\x00\x00\xae\x5e\x00\x00\x00\x00\x00\x00\xef\x5e\x00\x00\x00\x00\x00\x00\x30\x5f\x00\x00\x00\x00\x00\x00\x71\x5f\x00\x00\x00\x00\x00\x00\xb2\x5f\x00\x00\x00\x00\x00\x00\xf3\x5f\x00\x00\x00\x00\x00\x00\x34\x60\x00\x00\x00\x00\x00\x00\x75\x60\x00\x00\x00\x00\x00\x00\xb6\x60\x00\x00\x00\x00\x00\x00\xf7\x60\x00\x00\x00\x00\x00\x00\x38\x61\x00\x00\x00\x00\x00\x00\x79\x61\x00\x00\x00\x00\x00\x00\xba\x61\x00\x00\x00\x00\x00\x00\xfb\x61\x00\x00\x00\x00\x00\x00\x3c\x62\x00\x00\x00\x00\x00\x00\x7d\x62\x00\x00\x00\x00\x00\x00\xbe\x62\x00\x00\x00\x00\x00\x00\xff\x62\x00\x00\x00\x00\x00\x00\x40\x63\x00\x00\x00\x00\x00\x00\x81\x63\x00\x00\x00\x00\x00\x00\xc2\x63\x00\x00\xc2\x64\x00\x00\x82\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x64\x00\x00\x00\x00\x00\x00\x04\x65\x00\x00\x00\x00\x00\x00\x45\x65\x00\x00\x00\x00\x00\x00\x86\x65\x00\x00\x00\x00\x00\x00\xc7\x65\x00\x00\x00\x00\x00\x00\x08\x66\x00\x00\x00\x00\x00\x00\x49\x66\x00\x00\x00\x00\x00\x00\x8a\x66\x00\x00\x00\x00\x00\x00\xcb\x66\x00\x00\x00\x00\x00\x00\x0c\x67\x00\x00\x6d\x03\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x67\x00\x00\xee\x67\x00\x00\x5f\x68\x00\x00\x00\x00\x00\x00\xa0\x68\x00\x00\x00\x00\x00\x00\xe1\x68\x00\x00\x00\x00\x00\x00\x22\x69\x00\x00\x00\x00\x00\x00\x63\x69\x00\x00\x00\x00\x00\x00\xa4\x69\x00\x00\x00\x00\x00\x00\xe5\x69\x00\x00\x00\x00\x00\x00\x26\x6a\x00\x00\x00\x00\x00\x00\x67\x6a\x00\x00\x5a\x03\x00\x00\x67\x03\x00\x00\x69\x03\x00\x00\x6c\x03\x00\x00\x6e\x03\x00\x00\x6f\x03\x00\x00\x70\x03\x00\x00\x61\x03\x00\x00\x00\x00\x00\x00\xd8\x6a\x00\x00\xd8\x6b\x00\x00\x98\x6b\x00\x00\x00\x00\x00\x00\x98\x6c\x00\x00\x58\x6c\x00\x00\x00\x00\x00\x00\x58\x6d\x00\x00\x18\x6d\x00\x00\x00\x00\x00\x00\x18\x6e\x00\x00\xd8\x6d\x00\x00\x00\x00\x00\x00\xd8\x6e\x00\x00\x98\x6e\x00\x00\x00\x00\x00\x00\x98\x6f\x00\x00\x58\x6f\x00\x00\x00\x00\x00\x00\x58\x70\x00\x00\x18\x70\x00\x00\x00\x00\x00\x00\x18\x71\x00\x00\xd8\x70\x00\x00\x00\x00\x00\x00\xd8\x71\x00\x00\x98\x71\x00\x00\x00\x00\x00\x00\x98\x72\x00\x00\x58\x72\x00\x00\x00\x00\x00\x00\x58\x73\x00\x00\x18\x73\x00\x00\x00\x00\x00\x00\x18\x74\x00\x00\xd8\x73\x00\x00\x00\x00\x00\x00\xd8\x74\x00\x00\x98\x74\x00\x00\x00\x00\x00\x00\x98\x75\x00\x00\x58\x75\x00\x00\x00\x00\x00\x00\x58\x76\x00\x00\x18\x76\x00\x00\x00\x00\x00\x00\x18\x77\x00\x00\xd8\x76\x00\x00\x00\x00\x00\x00\xd8\x77\x00\x00\x98\x77\x00\x00\x00\x00\x00\x00\x98\x78\x00\x00\x58\x78\x00\x00\x00\x00\x00\x00\x58\x79\x00\x00\x18\x79\x00\x00\x00\x00\x00\x00\x18\x7a\x00\x00\xd8\x79\x00\x00\x00\x00\x00\x00\xd8\x7a\x00\x00\x98\x7a\x00\x00\x00\x00\x00\x00\x98\x7b\x00\x00\x58\x7b\x00\x00\x00\x00\x00\x00\x58\x7c\x00\x00\x18\x7c\x00\x00\x00\x00\x00\x00\x18\x7d\x00\x00\xd8\x7c\x00\x00\x00\x00\x00\x00\xd8\x7d\x00\x00\x98\x7d\x00\x00\x00\x00\x00\x00\x98\x7e\x00\x00\x58\x7e\x00\x00\x00\x00\x00\x00\x58\x7f\x00\x00\x18\x7f\x00\x00\x00\x00\x00\x00\x18\x80\x00\x00\xd8\x7f\x00\x00\x00\x00\x00\x00\xd8\x80\x00\x00\x98\x80\x00\x00\x00\x00\x00\x00\x98\x81\x00\x00\x58\x81\x00\x00\x00\x00\x00\x00\x58\x82\x00\x00\x18\x82\x00\x00\x00\x00\x00\x00\x18\x83\x00\x00\xd8\x82\x00\x00\x00\x00\x00\x00\xd8\x83\x00\x00\x98\x83\x00\x00\x00\x00\x00\x00\x98\x84\x00\x00\x58\x84\x00\x00\x00\x00\x00\x00\x58\x85\x00\x00\x18\x85\x00\x00\x00\x00\x00\x00\x18\x86\x00\x00\xd8\x85\x00\x00\x00\x00\x00\x00\xd8\x86\x00\x00\x98\x86\x00\x00\x00\x00\x00\x00\x75\x03\x00\x00\x98\x87\x00\x00\x58\x87\x00\x00\x00\x00\x00\x00\x4e\x88\x00\x00\x4e\x89\x00\x00\x99\x87\x00\x00\x00\x00\x00\x00\xce\x89\x00\x00\x8e\x89\x00\x00\x00\x00\x00\x00\x8e\x8a\x00\x00\x4e\x8a\x00\x00\x00\x00\x00\x00\x4e\x8b\x00\x00\x0e\x8b\x00\x00\x00\x00\x00\x00\x0e\x8c\x00\x00\xce\x8b\x00\x00\x00\x00\x00\x00\xce\x8c\x00\x00\x8e\x8c\x00\x00\x00\x00\x00\x00\x8e\x8d\x00\x00\x4e\x8d\x00\x00\x00\x00\x00\x00\x4e\x8e\x00\x00\x0e\x8e\x00\x00\x00\x00\x00\x00\x0e\x8f\x00\x00\xce\x8e\x00\x00\x00\x00\x00\x00\xce\x8f\x00\x00\x8e\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x8f\x00\x00\x10\x90\x00\x00\x51\x90\x00\x00\x51\x91\x00\x00\x11\x91\x00\x00\x00\x00\x00\x00\x11\x92\x00\x00\xd1\x91\x00\x00\x00\x00\x00\x00\xd1\x92\x00\x00\x91\x92\x00\x00\x00\x00\x00\x00\x91\x93\x00\x00\x51\x93\x00\x00\x00\x00\x00\x00\x51\x94\x00\x00\x11\x94\x00\x00\x00\x00\x00\x00\x11\x95\x00\x00\xd1\x94\x00\x00\x00\x00\x00\x00\xd1\x95\x00\x00\x91\x95\x00\x00\x00\x00\x00\x00\x91\x96\x00\x00\x51\x96\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x71\x03\x00\x00\x00\x00\x00\x00\x92\x96\x00\x00\x88\x97\x00\x00\x7e\x98\x00\x00\x74\x99\x00\x00\x6a\x9a\x00\x00\x60\x9b\x00\x00\x56\x9c\x00\x00\x4c\x9d\x00\x00\x42\x9e\x00\x00\x38\x9f\x00\x00\x2e\xa0\x00\x00\x24\xa1\x00\x00\x1a\xa2\x00\x00\x79\x03\x00\x00\x76\x03\x00\x00\x7b\x03\x00\x00\x74\x03\x00\x00\x10\xa3\x00\x00\x06\xa4\x00\x00\xfc\xa4\x00\x00\xf2\xa5\x00\x00\xe8\xa6\x00\x00\xde\xa7\x00\x00\xd4\xa8\x00\x00\xca\xa9\x00\x00\xc0\xaa\x00\x00\xb6\xab\x00\x00\xac\xac\x00\x00\xa2\xad\x00\x00\x98\xae\x00\x00\x8e\xaf\x00\x00\x84\xb0\x00\x00\x7a\xb1\x00\x00\x70\xb2\x00\x00\x66\xb3\x00\x00\x5c\xb4\x00\x00\x52\xb5\x00\x00\x48\xb6\x00\x00\x3e\xb7\x00\x00\x34\xb8\x00\x00\x2a\xb9\x00\x00\x20\xba\x00\x00\x77\x03\x00\x00\x7a\x03\x00\x00\x89\x03\x00\x00\x16\xbb\x00\x00\x0c\xbc\x00\x00\x02\xbd\x00\x00\xf8\xbd\x00\x00\xee\xbe\x00\x00\xb0\x03\x00\x00\xc2\x03\x00\x00\xc3\x03\x00\x00\xe4\xbf\x00\x00\xda\xc0\x00\x00\xd0\xc1\x00\x00\x78\x03\x00\x00\xc6\xc2\x00\x00\xbc\xc3\x00\x00\xb2\xc4\x00\x00\xb2\xc5\x00\x00\x32\xc6\x00\x00\xb2\xc6\x00\x00\xd3\x96\x00\x00\xc9\x97\x00\x00\xbf\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\xc7\x00\x00\x1e\xc8\x00\x00\x14\xc9\x00\x00\x0a\xca\x00\x00\x00\xcb\x00\x00\xf6\xcb\x00\x00\xec\xcc\x00\x00\xe2\xcd\x00\x00\x7f\x03\x00\x00\xe2\xce\x00\x00\x62\xcf\x00\x00\xb5\x99\x00\x00\x00\x00\x00\x00\xd9\xcf\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\xcd\x00\x00\x00\xa0\x5a\x00\x00\xa5\x5a\x00\x00\xaa\x5a\x00\x00\xaf\x5a\x00\x00\x90\x88\x00\x00\x95\x88\x00\x00\x9a\x88\x00\x00\x9f\x88\x00\x00\x62\x9b\x00\x00\xcf\xd0\x00\x00\xc5\xd1\x00\x00\xbb\xd2\x00\x00\xb1\xd3\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x9c\x00\x00\x00\x00\x00\x00\x30\x9d\x00\x00\x00\x00\x00\x00\xca\x97\x00\x00\xcf\x97\x00\x00\xd4\x97\x00\x00\xd9\x97\x00\x00\xc0\x98\x00\x00\xc5\x98\x00\x00\xca\x98\x00\x00\xcf\x98\x00\x00\x44\x9e\x00\x00\xb6\x99\x00\x00\xbb\x99\x00\x00\x00\x00\x00\x00\x35\x9e\x00\x00\x00\x00\x00\x00\x1c\x9f\x00\x00\x00\x00\x00\x00\x12\xa0\x00\x00\xc0\x99\x00\x00\xc5\x99\x00\x00\xac\x9a\x00\x00\xb1\x9a\x00\x00\x00\x00\x00\x00\x26\xa1\x00\x00\xb6\x9a\x00\x00\x9c\x9b\x00\x00\xd1\x00\x00\x00\xbb\x9a\x00\x00\x00\x00\x00\x00\xa2\x9b\x00\x00\x00\x00\x00\x00\x1c\xa2\x00\x00\xaa\x9b\x00\x00\x00\x00\x00\x00\x2b\xa1\x00\x00\x00\x00\x00\x00\x30\xa1\x00\x00\x35\xa1\x00\x00\x12\xa3\x00\x00\x5c\xa1\x00\x00\x21\xa2\x00\x00\x61\xa1\x00\x00\x66\xa1\x00\x00\x8a\xcf\x00\x00\x6b\xa1\x00\x00\x26\xa2\x00\x00\x2b\xa2\x00\x00\x52\xa2\x00\x00\x57\xa2\x00\x00\x5c\xa2\x00\x00\x61\xa2\x00\x00\x17\xa3\x00\x00\x1c\xa3\x00\x00\x21\xa3\x00\x00\x49\xa3\x00\x00\x50\xa3\x00\x00\x08\xa4\x00\x00\x0d\xa4\x00\x00\x12\xa4\x00\x00\x17\xa4\x00\x00\x3c\xa4\x00\x00\x00\x00\x00\x00\xe0\xa4\x00\x00\x00\x00\x00\x00\xd6\xa5\x00\x00\x00\x00\x00\x00\xcc\xa6\x00\x00\x00\x00\x00\x00\xc2\xa7\x00\x00\x00\x00\x00\x00\xb8\xa8\x00\x00\xae\xa9\x00\x00\xa4\xaa\x00\x00\x9a\xab\x00\x00\x90\xac\x00\x00\x86\xad\x00\x00\x7c\xae\x00\x00\x41\xa4\x00\x00\x46\xa4\x00\x00\x90\xaf\x00\x00\x4c\xa4\x00\x00\x95\xaf\x00\x00\x86\xb0\x00\x00\x9a\xaf\x00\x00\x9f\xaf\x00\x00\xcb\xaf\x00\x00\x7c\xb1\x00\x00\xd0\xaf\x00\x00\xd5\xaf\x00\x00\xda\xaf\x00\x00\x7b\xb1\x00\x00\x54\xb2\x00\x00\x4a\xb3\x00\x00\x40\xb4\x00\x00\x36\xb5\x00\x00\x2c\xb6\x00\x00\x22\xb7\x00\x00\x18\xb8\x00\x00\x0e\xb9\x00\x00\x04\xba\x00\x00\xfa\xba\x00\x00\xf0\xbb\x00\x00\xe6\xbc\x00\x00\xdc\xbd\x00\x00\xd2\xbe\x00\x00\xc8\xbf\x00\x00\xbe\xc0\x00\x00\xb4\xc1\x00\x00\xaa\xc2\x00\x00\xa0\xc3\x00\x00\x96\xc4\x00\x00\x0c\xc7\x00\x00\x02\xc8\x00\x00\xf8\xc8\x00\x00\xee\xc9\x00\x00\xe4\xca\x00\x00\xda\xcb\x00\x00\xd0\xcc\x00\x00\xc6\xcd\x00\x00\xcb\x03\x00\x00\xd1\xd0\x00\x00\xb2\xd1\x00\x00\x9f\xd2\x00\x00\x95\xd3\x00\x00\x8a\xd4\x00\x00\xde\xd4\x00\x00\x32\xd5\x00\x00\x86\xd5\x00\x00\xda\xd5\x00\x00\x2e\xd6\x00\x00\x82\xd6\x00\x00\xd6\xd6\x00\x00\x2a\xd7\x00\x00\x7e\xd7\x00\x00\xd2\xd7\x00\x00\x26\xd8\x00\x00\x7a\xd8\x00\x00\xce\xd8\x00\x00\x22\xd9\x00\x00\x76\xd9\x00\x00\xca\xd9\x00\x00\x1e\xda\x00\x00\x72\xda\x00\x00\xc6\xda\x00\x00\x1a\xdb\x00\x00\x6e\xdb\x00\x00\xc2\xdb\x00\x00\x16\xdc\x00\x00\x6a\xdc\x00\x00\xbe\xdc\x00\x00\x12\xdd\x00\x00\x66\xdd\x00\x00\xba\xdd\x00\x00\x0e\xde\x00\x00\x62\xde\x00\x00\xb6\xde\x00\x00\x0a\xdf\x00\x00\x5e\xdf\x00\x00\xb2\xdf\x00\x00\x06\xe0\x00\x00\xc5\x03\x00\x00\xc0\xb0\x00\x00\x78\xe0\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x3a\x03\xe7\x03\x3a\x03\x3a\x03\x3a\x03\x20\x03\x22\x03\x23\x03\x24\x03\x25\x03\x26\x03\x27\x03\x28\x03\x29\x03\x2b\x03\x2d\x03\x2f\x03\x32\x03\x33\x03\x34\x03\x36\x03\x38\x03\x40\x03\x3a\x03\x76\x03\x14\x00\x9e\x03\x78\x03\x9c\x03\x50\x03\x41\x03\x60\x03\x61\x03\x99\x03\x95\x03\x71\x03\x96\x03\x74\x03\x9b\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x7d\x03\x4f\x03\x5c\x03\x80\x03\x5f\x03\x75\x03\x94\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x6b\x03\x92\x03\x6d\x03\x9d\x03\xe6\x03\x43\x03\xd9\x03\xc1\x03\xc8\x03\xba\x03\xd2\x03\xb1\x03\xc1\x03\xc1\x03\xe1\x03\xc1\x03\xc1\x03\xa9\x03\xc1\x03\xa6\x03\xe3\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd3\x03\xc1\x03\xc1\x03\xb3\x03\xc1\x03\xc1\x03\xc1\x03\x64\x03\x70\x03\x66\x03\x6a\x00\x6a\x00\x6a\x00\x6a\x00\x6a\x00\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x0d\x00\x35\x03\x0f\x00\x11\x00\x37\x03\x3b\x03\x86\x03\x7b\x03\x16\x00\x18\x03\x04\x00\x18\x00\x05\x00\x6a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x39\x03\x17\x03\x16\x03\x15\x03\x4a\x03\x59\x03\x0a\x00\x2a\x03\xe4\x00\x2c\x03\x2e\x03\x14\x03\x13\x03\x30\x00\x12\x03\x11\x03\x10\x03\x1b\x00\x05\x03\x04\x03\x1c\x00\x02\x03\x01\x03\x00\x03\xfc\x02\xfb\x02\xfa\x02\xf9\x02\xf8\x02\xf5\x02\xf4\x02\xf3\x02\xf2\x02\xf1\x02\xf0\x02\xef\x02\xee\x02\xed\x02\xec\x02\xeb\x02\xea\x02\xe9\x02\xe8\x02\xe7\x02\xe6\x02\xe5\x02\xe4\x02\xe3\x02\xe2\x02\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xc8\x02\xe1\x02\x31\x03\xe0\x02\xdf\x02\xde\x02\xdd\x02\xdc\x02\xda\x02\xfb\x00\x1f\x00\xd9\x02\xd7\x02\xd8\x02\xd6\x02\xd5\x02\xd3\x02\xfc\x00\x1d\x00\x76\x03\xd2\x02\xd1\x02\x78\x03\x9c\x03\x50\x03\xf9\x00\xd0\x02\x61\x03\x99\x03\x95\x03\x71\x03\xff\x02\x74\x03\x9b\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x7d\x03\x4f\x03\x1e\x00\x80\x03\x5f\x03\x75\x03\x94\x03\xcf\x02\xce\x02\xcd\x02\xf7\x01\xc9\x02\x89\x01\x07\x01\xa6\x00\xa7\x00\x2e\x01\x8b\x01\x15\x02\x30\x03\x90\x01\xe8\x00\xed\x02\x0e\x02\xe2\x00\x13\x01\x5a\x03\x15\x01\x14\x01\xe9\x00\x8a\x01\xf4\x00\xea\x00\x6b\x03\x92\x03\x6d\x03\x9d\x03\xe6\x03\xef\x00\x87\x02\x0d\x01\xf5\x00\x06\x01\xaa\x01\xb0\x00\xec\x00\x03\x01\xdb\x02\x02\x01\xed\x00\x5c\x00\xfa\x00\x40\x00\xf6\x02\x00\x01\xfe\x00\x05\x01\xff\x00\xf6\x01\x04\x01\xf2\x00\xe6\x00\xf7\x00\xf1\x00\xfd\x00\x1a\x00\x70\x03\x66\x03\x19\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x09\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x07\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x08\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x20\x00\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\x6a\x00\x6a\x00\x6a\x00\x6a\x00\x6a\x00\x01\x01\xf6\x00\xf3\x00\xee\x00\x0a\x01\xe7\x00\xe3\x00\x8d\x01\x8f\x01\x0f\x02\xa9\x01\x10\x02\x11\x02\x12\x02\x13\x02\x14\x02\x69\x00\x28\x00\x6a\x00\xf8\x00\x8c\x01\x8e\x01\x5d\x00\x5b\x00\x5a\x00\x34\x00\x21\x00\x0c\x00\x27\x00\x82\x03\x26\x00\xe4\x00\xd4\x02\x25\x00\x35\x00\x24\x00\x23\x00\x22\x00\xf7\x02\x10\x00\x03\x00\x0b\x00\x8a\x03\x0e\x00\x84\x03\x88\x03\x55\x03\x53\x03\x51\x03\x4a\x03\xcc\x02\x8b\x02\x21\x03\xbc\x03\x00\x00\x47\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x00\x00\x4a\x03\x4a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x02\xc5\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc2\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xbf\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xbc\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xb9\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xb6\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb3\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb0\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\x31\x00\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\x33\x00\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\x32\x00\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xa7\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa4\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa1\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\x9e\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\x9b\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x98\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x95\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x92\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x8f\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x8c\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x88\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x84\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x81\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x7e\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x7b\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x78\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x75\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x72\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x6f\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x6c\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x69\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x66\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x63\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x60\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x5d\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5a\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x57\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x54\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x51\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x4e\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x4b\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x48\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x45\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x42\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x3f\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x3c\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x39\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x36\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x33\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x30\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x2d\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2a\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x27\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x24\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x21\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x1e\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x1b\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x18\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x6b\x00\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x6c\x00\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x6d\x00\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x6e\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x6f\x00\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x70\x00\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x71\x00\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x72\x00\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\x76\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x77\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x78\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x79\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x7a\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x7b\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x7c\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x7d\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x7e\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x7f\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xdf\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x80\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x81\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\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\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x83\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\x84\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x85\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x86\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x87\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x88\x00\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\x89\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x8a\x00\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\x8b\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x8c\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x8d\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x8e\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x8f\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x90\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x91\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x92\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x93\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x94\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x95\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x96\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x97\x00\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\x98\x00\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\x99\x00\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\x9a\x00\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\x9b\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x9c\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x9d\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x9e\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x00\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\xa0\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa1\x00\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\xa2\x00\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\xa3\x00\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\xa4\x00\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\xa5\x00\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\xbb\x00\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x10\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\xeb\x00\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0c\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\x11\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\x64\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\x92\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\x94\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\x96\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\x98\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\x9a\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\x9c\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\x9e\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\xa0\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\xa2\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\xa4\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\xa6\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\xa8\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\xac\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\xae\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\xb0\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\xb2\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\xb4\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\xb6\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\xb8\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\xba\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\xbc\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\xbe\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\xc0\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\xc2\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\xc4\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\xc6\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\xc8\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\xca\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\xcc\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\xce\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\xd0\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\xd2\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\xd4\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\xd6\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\xd8\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\xda\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\xdc\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\xde\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\xe0\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\xe3\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\xe5\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\xe7\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\xe9\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\xeb\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\xed\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\xef\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\xf1\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\xf3\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\xf5\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\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\x01\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\x03\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\x05\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\x07\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\x09\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\x0b\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\x0d\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\x6a\x00\x19\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\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x34\x03\x34\x03\x34\x03\x34\x03\x34\x03\x35\x03\x35\x03\x35\x03\x35\x03\x35\x03\x00\x00\x00\x00\x00\x00\x32\x03\x00\x00\x00\x00\x00\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x34\x03\x00\x00\x00\x00\x29\x00\x00\x00\x35\x03\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\xeb\x00\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0b\x01\x0c\x01\xf0\x00\x08\x01\x08\x01\x08\x01\x09\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\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\x1f\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\x22\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\x25\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\x28\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\x2b\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\x2e\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\x31\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\x34\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\x37\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\x3a\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\x3d\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\x40\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\x43\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\x46\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\x49\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\x4c\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\x4f\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\x52\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\x55\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\x58\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\x5b\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\x5e\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\x61\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\x64\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\x67\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\x6a\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\x6d\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\x70\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\x73\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\x76\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\x79\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\x7c\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\x7f\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\x82\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\x85\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\x89\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\x8d\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\x90\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\x93\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\x96\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\x99\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\x9c\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\x9f\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\xa2\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\xa5\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\xa8\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\xad\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\xaf\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\xae\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\xb1\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\xb4\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\xb7\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\xba\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\xbd\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\xc0\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\xc3\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\xc6\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\xcb\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x00\x00\x00\x00\x00\x00\x36\x03\x00\x00\x00\x00\x00\x00\x00\x00\x37\x03\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x2d\x00\x00\x00\x39\x03\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\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\xdf\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe0\x01\xbb\x00\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x63\x01\x64\x01\xe5\x00\x0e\x01\x0e\x01\x0e\x01\x0f\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe7\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\x03\x46\x03\x46\x03\x46\x03\x46\x03\x47\x03\x47\x03\x47\x03\x47\x03\x47\x03\x48\x03\x48\x03\x48\x03\x48\x03\x48\x03\x49\x03\x49\x03\x49\x03\x49\x03\x49\x03\x00\x00\x00\x00\x00\x00\x46\x03\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x00\x00\x00\x00\x00\x00\x48\x03\x00\x00\x00\x00\x36\x00\x00\x00\x49\x03\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\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\x18\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x1a\x02\x19\x02\xa5\x00\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x92\x01\xe1\x00\x16\x01\x16\x01\x16\x01\x17\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe6\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x00\x00\x00\x00\x00\x00\x4a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x03\x00\x00\x00\x00\x3a\x00\x00\x00\x4d\x03\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\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\x1b\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1d\x02\x1c\x02\xa4\x00\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x94\x01\xe0\x00\x18\x01\x18\x01\x18\x01\x19\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x03\x4f\x03\x4f\x03\x4f\x03\x4f\x03\x50\x03\x50\x03\x50\x03\x50\x03\x50\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x58\x03\x58\x03\x58\x03\x58\x03\x58\x03\x00\x00\x00\x00\x00\x00\x4f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x00\x00\x57\x03\x00\x00\x00\x00\x3e\x00\x00\x00\x58\x03\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\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\x1e\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x20\x02\x1f\x02\xa3\x00\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x96\x01\xdf\x00\x1a\x01\x1a\x01\x1a\x01\x1b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x03\x59\x03\x59\x03\x59\x03\x59\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x60\x03\x60\x03\x60\x03\x60\x03\x60\x03\x00\x00\x00\x00\x00\x00\x59\x03\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x03\x00\x00\x00\x00\x43\x00\x00\x00\x60\x03\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\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\x21\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x23\x02\x22\x02\xa2\x00\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x98\x01\xde\x00\x1c\x01\x1c\x01\x1c\x01\x1d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x03\x3a\x03\x1d\x00\x3a\x03\x3a\x03\x3a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x03\x76\x03\x00\x00\x00\x00\x78\x03\x9c\x03\x50\x03\x00\x00\x00\x00\x61\x03\x99\x03\x95\x03\x71\x03\x19\x00\x74\x03\x9b\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x7d\x03\x4f\x03\x1e\x00\x80\x03\x5f\x03\x75\x03\x94\x03\x00\x00\x00\x00\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x00\x00\x62\x03\x62\x03\x62\x03\x62\x03\x62\x03\x00\x00\x00\x00\x00\x00\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x03\x6b\x03\x92\x03\x6d\x03\x9d\x03\xe6\x03\x62\x03\x87\x02\x00\x00\x00\x00\x00\x00\xaa\x01\xb0\x00\x45\x00\x65\x03\xdb\x02\x00\x00\x00\x00\x5c\x00\x47\x00\x40\x00\xf6\x02\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x01\x48\x00\x00\x00\xe6\x00\x5b\x03\x00\x00\x00\x00\x1a\x00\x70\x03\x66\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x26\x02\x25\x02\xa1\x00\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x9a\x01\xdd\x00\x1e\x01\x1e\x01\x1e\x01\x1f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9a\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x29\x02\x28\x02\xa0\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9c\x01\xdc\x00\x20\x01\x20\x01\x20\x01\x21\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2b\x02\x9f\x00\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9d\x01\x9e\x01\xdb\x00\x22\x01\x22\x01\x22\x01\x23\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x98\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x03\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\x2d\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2f\x02\x2e\x02\x9e\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\xa0\x01\xda\x00\x24\x01\x24\x01\x24\x01\x25\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x97\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x32\x02\x31\x02\x9d\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa2\x01\xd9\x00\x26\x01\x26\x01\x26\x01\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x95\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x35\x02\x34\x02\x9c\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa4\x01\xd8\x00\x28\x01\x28\x01\x28\x01\x29\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x67\x03\x67\x03\x67\x03\x67\x03\x67\x03\x69\x03\x69\x03\x69\x03\x69\x03\x69\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x00\x00\x00\x00\x00\x00\x5e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x67\x03\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x00\x00\x00\x00\x7a\x03\x00\x00\x6a\x03\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x59\x03\x5b\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x71\x03\x71\x03\x71\x03\x71\x03\x71\x03\x00\x00\x00\x00\x00\x00\x6c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x03\x00\x00\x00\x00\x4c\x00\x00\x00\x71\x03\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x38\x02\x37\x02\x9b\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa6\x01\xd7\x00\x2a\x01\x2a\x01\x2a\x01\x2b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x03\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x72\x03\x72\x03\x72\x03\x72\x03\x72\x03\x73\x03\x73\x03\x73\x03\x73\x03\x73\x03\x00\x00\x00\x00\x00\x00\x65\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x72\x03\x00\x00\x00\x00\x3f\x03\x00\x00\x73\x03\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x73\x03\x73\x03\x73\x03\x73\x03\x73\x03\x75\x03\x75\x03\x75\x03\x75\x03\x75\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x77\x03\x00\x00\x00\x00\x00\x00\x73\x03\x00\x00\x00\x00\x00\x00\x00\x00\x75\x03\x00\x00\x00\x00\x00\x00\x00\x00\x77\x03\x00\x00\x68\x03\x51\x00\x72\x03\x77\x03\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\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\x62\x03\x58\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3b\x02\x3a\x02\x9a\x00\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa7\x01\xa8\x01\xd6\x00\x2c\x01\x2c\x01\x2c\x01\x2d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x78\x03\x78\x03\x78\x03\x78\x03\x78\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x00\x00\x00\x00\x00\x00\x6c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x78\x03\x00\x00\x00\x00\x00\x00\x00\x00\x79\x03\x00\x00\x00\x00\x4c\x00\x00\x00\x79\x03\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x02\x00\x00\x4b\x03\x00\x00\x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x00\x00\x13\x00\x7c\x03\x7c\x03\x7c\x03\x7c\x03\x7c\x03\x00\x00\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x12\x00\x00\x00\x15\x00\x79\x03\x00\x00\x00\x00\x00\x00\x67\x03\x00\x00\x46\x03\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\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\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\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\x3c\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3e\x02\x3d\x02\x99\x00\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xab\x01\xac\x01\xd5\x00\x2f\x01\x2f\x01\x2f\x01\x30\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7f\x03\x7f\x03\x7f\x03\x7f\x03\x7f\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x00\x00\x00\x00\x00\x00\x7e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x00\x00\x57\x00\x00\x00\x81\x03\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x57\x03\x95\x03\x95\x03\x95\x03\x95\x03\x95\x03\x00\x00\x00\x00\x81\x03\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x1f\x03\x00\x00\x00\x00\x93\x03\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x95\x03\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x41\x02\x40\x02\x98\x00\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xad\x01\xae\x01\xd4\x00\x31\x01\x31\x01\x31\x01\x32\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x44\x02\x43\x02\x97\x00\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xaf\x01\xb0\x01\xd3\x00\x33\x01\x33\x01\x33\x01\x34\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x47\x02\x46\x02\x96\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb2\x01\xd2\x00\x35\x01\x35\x01\x35\x01\x36\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x4a\x02\x49\x02\x95\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb4\x01\xd1\x00\x37\x01\x37\x01\x37\x01\x38\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4d\x02\x4c\x02\x94\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb6\x01\xd0\x00\x39\x01\x39\x01\x39\x01\x3a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x50\x02\x4f\x02\x93\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb8\x01\xcf\x00\x3b\x01\x3b\x01\x3b\x01\x3c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x51\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x53\x02\x52\x02\x92\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xba\x01\xce\x00\x3d\x01\x3d\x01\x3d\x01\x3e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x56\x02\x55\x02\x91\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xcd\x00\x3f\x01\x3f\x01\x3f\x01\x40\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x59\x02\x58\x02\x90\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xcc\x00\x41\x01\x41\x01\x41\x01\x42\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5a\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5c\x02\x5b\x02\x8f\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc0\x01\xcb\x00\x43\x01\x43\x01\x43\x01\x44\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5f\x02\x5e\x02\x8e\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc2\x01\xca\x00\x45\x01\x45\x01\x45\x01\x46\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x60\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x62\x02\x61\x02\x8d\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc4\x01\xc9\x00\x47\x01\x47\x01\x47\x01\x48\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x99\x03\x99\x03\x99\x03\x99\x03\x99\x03\x00\x00\x00\x00\x00\x00\x93\x03\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\x00\x00\x00\x00\x5f\x00\x00\x00\x99\x03\x00\x00\x00\x00\x3c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x00\x00\x4a\x03\x9a\x03\x9a\x03\x9a\x03\x9a\x03\x9a\x03\x9c\x03\x9c\x03\x9c\x03\x9c\x03\x9c\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9d\x03\x9e\x03\x9e\x03\x9e\x03\x9e\x03\x9e\x03\x00\x00\x00\x00\x00\x00\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x03\x00\x00\x00\x00\x63\x00\x00\x00\x9e\x03\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\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\x63\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x65\x02\x64\x02\x8c\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc6\x01\xc8\x00\x49\x01\x49\x01\x49\x01\x4a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x03\x76\x03\x00\x00\x00\x00\x78\x03\x9c\x03\x50\x03\x00\x00\x00\x00\x61\x03\x99\x03\x95\x03\x71\x03\xfd\x02\x74\x03\x9b\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x7d\x03\x4f\x03\x1e\x00\x80\x03\x5f\x03\x75\x03\x94\x03\x00\x00\x00\x00\xe6\x03\xe6\x03\xe6\x03\xe6\x03\xe6\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x03\x6b\x03\x92\x03\x6d\x03\x9d\x03\xe6\x03\x00\x00\x87\x02\x00\x00\x00\x00\x00\x00\xaa\x01\xb0\x00\x67\x00\x00\x00\xdb\x02\x00\x00\x00\x00\x5c\x00\x00\x00\x40\x00\xf6\x02\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x01\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x70\x03\x66\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x68\x02\x67\x02\x8b\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc8\x01\xc7\x00\x4b\x01\x4b\x01\x4b\x01\x4c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x03\x9a\x03\x9a\x03\x9a\x03\x9a\x03\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x49\x03\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x42\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\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\x69\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6b\x02\x6a\x02\x8a\x00\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xc9\x01\xca\x01\xc6\x00\x4d\x01\x4d\x01\x4d\x01\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x44\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6e\x02\x6d\x02\x89\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xc5\x00\x4f\x01\x4f\x01\x4f\x01\x50\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x87\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x71\x02\x70\x02\x88\x00\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xcd\x01\xce\x01\xc4\x00\x51\x01\x51\x01\x51\x01\x52\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x8e\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x74\x02\x73\x02\x87\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xd0\x01\xc3\x00\x53\x01\x53\x01\x53\x01\x54\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x60\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x91\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x77\x02\x76\x02\x86\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd2\x01\xc2\x00\x55\x01\x55\x01\x55\x01\x56\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x9f\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x7a\x02\x79\x02\x85\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd4\x01\xc1\x00\x57\x01\x57\x01\x57\x01\x58\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5a\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc4\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7d\x02\x7c\x02\x84\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd6\x01\xc0\x00\x59\x01\x59\x01\x59\x01\x5a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xb9\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xe2\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x80\x02\x7f\x02\x83\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd8\x01\xbf\x00\x5b\x01\x5b\x01\x5b\x01\x5c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xe0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x83\x02\x82\x02\x82\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xda\x01\xbe\x00\x5d\x01\x5d\x01\x5d\x01\x5e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x86\x02\x85\x02\x81\x00\xdb\x01\xdb\x01\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\xbd\x00\x5f\x01\x5f\x01\x5f\x01\x60\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xdf\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x8a\x02\x89\x02\x80\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xde\x01\xbc\x00\x61\x01\x61\x01\x61\x01\x62\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xde\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8e\x02\x8d\x02\x7f\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe3\x01\xba\x00\x65\x01\x65\x01\x65\x01\x66\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xdd\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x91\x02\x90\x02\x7e\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe5\x01\xb9\x00\x67\x01\x67\x01\x67\x01\x68\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xdb\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x94\x02\x93\x02\x7d\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe7\x01\xb8\x00\x69\x01\x69\x01\x69\x01\x6a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd8\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x95\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x97\x02\x96\x02\x7c\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe9\x01\xb7\x00\x6b\x01\x6b\x01\x6b\x01\x6c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd7\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x98\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x9a\x02\x99\x02\x7b\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xeb\x01\xb6\x00\x6d\x01\x6d\x01\x6d\x01\x6e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd6\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9b\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9d\x02\x9c\x02\x7a\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xed\x01\xb5\x00\x6f\x01\x6f\x01\x6f\x01\x70\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd5\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\xa0\x02\x9f\x02\x79\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xef\x01\xb4\x00\x71\x01\x71\x01\x71\x01\x72\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xd4\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa1\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa3\x02\xa2\x02\x78\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf1\x01\xb3\x00\x73\x01\x73\x01\x73\x01\x74\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xad\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa4\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa6\x02\xa5\x02\x77\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf3\x01\xb2\x00\x75\x01\x75\x01\x75\x01\x76\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xce\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa7\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa9\x02\xa8\x02\x76\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf5\x01\xb1\x00\x77\x01\x77\x01\x77\x01\x78\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xcd\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb0\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb2\x02\xb1\x02\x72\x00\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xfe\x01\xff\x01\xaf\x00\x79\x01\x79\x01\x79\x01\x7a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xcc\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb5\x02\xb4\x02\x71\x00\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x01\x02\xae\x00\x7b\x01\x7b\x01\x7b\x01\x7c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xcb\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb6\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb8\x02\xb7\x02\x70\x00\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x03\x02\xad\x00\x7d\x01\x7d\x01\x7d\x01\x7e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xca\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb9\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xbb\x02\xba\x02\x6f\x00\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x05\x02\xac\x00\x7f\x01\x7f\x01\x7f\x01\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc9\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbc\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbe\x02\xbd\x02\x6e\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x07\x02\xab\x00\x81\x01\x81\x01\x81\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb8\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbf\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc1\x02\xc0\x02\x6d\x00\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x08\x02\x09\x02\xaa\x00\x83\x01\x83\x01\x83\x01\x84\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc7\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc4\x02\xc3\x02\x6c\x00\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0a\x02\x0b\x02\xa9\x00\x85\x01\x85\x01\x85\x01\x86\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc5\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc5\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc7\x02\xc6\x02\x6b\x00\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0c\x02\x0d\x02\xa8\x00\x87\x01\x87\x01\x87\x01\x88\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\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x00\x00\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x00\x00\x1e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x03\x1e\x03\x1e\x03\x1e\x03\x1e\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\x03\x63\x03\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1b\x03\x20\x00\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xcb\x02\x68\x00\x16\x02\x16\x02\x16\x02\x17\x02\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\x19\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1b\x03\x20\x00\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xca\x02\xcb\x02\x68\x00\x16\x02\x16\x02\x16\x02\x17\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x06\x03\x00\x00\x06\x03\x06\x03\x06\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\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\x08\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0b\x03\x33\x00\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaa\x02\xaf\x02\x74\x00\xf9\x01\xf9\x01\xf9\x01\xfc\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbd\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0a\x03\x32\x00\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xae\x02\x75\x00\xf8\x01\xf8\x01\xf8\x01\xfd\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe7\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc3\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0a\x03\x32\x00\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xab\x02\xae\x02\x75\x00\xf8\x01\xf8\x01\xf8\x01\xfd\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x97\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc2\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0c\x03\x31\x00\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xac\x02\xad\x02\x73\x00\xfa\x01\xfa\x01\xfa\x01\xfb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbf\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xbe\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbb\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb7\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb6\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb5\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb4\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xaf\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xcf\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xae\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xd1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xac\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xab\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xaa\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa8\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc6\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa7\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa5\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa4\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa3\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xda\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xa2\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xdc\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xe4\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xb2\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x90\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x8f\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x8d\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x8c\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x8b\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x89\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x85\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x83\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc0\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x56\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x54\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\x00\x00\xc1\x03\xc1\x03\xc1\x03\x52\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xc1\x03\xe7\x03\xe7\x03\xe7\x03\xe7\x03\xe7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x03\x76\x03\x00\x00\x00\x00\x78\x03\x9c\x03\x50\x03\x00\x00\x00\x00\x61\x03\x99\x03\x95\x03\x71\x03\xfe\x02\x74\x03\x9b\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\xe5\x03\x7d\x03\x4f\x03\x1e\x00\x80\x03\x5f\x03\x75\x03\x94\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x03\x92\x03\x6d\x03\x9d\x03\xe6\x03\x00\x00\x87\x02\x00\x00\x00\x00\x00\x00\xaa\x01\xb0\x00\x00\x00\x00\x00\xdb\x02\x00\x00\x00\x00\x5c\x00\x00\x00\x40\x00\xf6\x02\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x01\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x70\x03\x66\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x79\x00\x65\x00\x65\x00\x65\x00\x65\x00\x65\x00\x65\x00\x63\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x2d\x00\x20\x00\x21\x00\x44\x00\x23\x00\x24\x00\x25\x00\x26\x00\x65\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\x65\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x44\x00\x3d\x00\x44\x00\x44\x00\x3d\x00\x2d\x00\x65\x00\x2d\x00\x44\x00\x65\x00\x65\x00\x44\x00\x65\x00\x20\x00\x65\x00\x65\x00\x65\x00\x65\x00\x20\x00\x2d\x00\x2d\x00\x2d\x00\x3e\x00\x3d\x00\x69\x00\x5d\x00\x2d\x00\x5d\x00\x5d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x73\x00\x2d\x00\x2d\x00\x75\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x6f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x5b\x00\x2d\x00\x5d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x65\x00\x64\x00\x73\x00\x65\x00\x2d\x00\x69\x00\x2d\x00\x2d\x00\x2d\x00\x6c\x00\x20\x00\x21\x00\x2d\x00\x2d\x00\x24\x00\x25\x00\x26\x00\x74\x00\x2d\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\x2d\x00\x2d\x00\x2d\x00\x61\x00\x69\x00\x2d\x00\x20\x00\x20\x00\x69\x00\x69\x00\x20\x00\x6f\x00\x3a\x00\x6f\x00\x63\x00\x2d\x00\x73\x00\x69\x00\x65\x00\x3d\x00\x6b\x00\x6b\x00\x63\x00\x2d\x00\x67\x00\x63\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x6d\x00\x61\x00\x69\x00\x61\x00\x65\x00\x65\x00\x66\x00\x6f\x00\x65\x00\x69\x00\x65\x00\x6f\x00\x6c\x00\x65\x00\x6e\x00\x6f\x00\x69\x00\x69\x00\x75\x00\x65\x00\x74\x00\x64\x00\x6c\x00\x77\x00\x72\x00\x6c\x00\x76\x00\x7b\x00\x7c\x00\x7d\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x61\x00\x76\x00\x72\x00\x6e\x00\x70\x00\x72\x00\x6e\x00\x20\x00\x20\x00\x66\x00\x74\x00\x66\x00\x66\x00\x66\x00\x66\x00\x66\x00\x72\x00\x74\x00\x20\x00\x74\x00\x2d\x00\x2d\x00\x68\x00\x6c\x00\x68\x00\x6c\x00\x76\x00\x46\x00\x72\x00\x66\x00\x72\x00\x2d\x00\x2d\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x52\x00\x74\x00\x54\x00\x6e\x00\x56\x00\x6e\x00\x74\x00\x74\x00\x72\x00\x64\x00\x3e\x00\x2d\x00\x2d\x00\x72\x00\x27\x00\xff\xff\x7c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3e\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\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\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\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\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\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\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\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\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\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\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\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\x0a\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\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\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\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x2d\x00\x20\x00\x69\x00\xff\xff\xff\xff\x6c\x00\x2d\x00\x6e\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x2d\x00\xff\xff\x77\x00\x3e\x00\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x3d\x00\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x5d\x00\x2d\x00\x2e\x00\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\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\x7c\x00\x3d\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x3e\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x46\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\x54\x00\xff\xff\x56\x00\x20\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\x5d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\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\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\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\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x5b\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\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\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\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\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\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\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\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x2d\x00\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\xff\xff\x6e\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x77\x00\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\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\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\x5c\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\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\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\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\x09\x00\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\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\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\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\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\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\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\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\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\xff\xff\x6e\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x77\x00\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x01\x0b\x01\xff\xff\x12\x01\x12\x01\xff\xff\x63\x01\x63\x01\x89\x01\x89\x01\x89\x01\xff\xff\xff\xff\xff\xff\x91\x01\x91\x01\x93\x01\x93\x01\x95\x01\x95\x01\x97\x01\x97\x01\x99\x01\x99\x01\x9b\x01\x9b\x01\x9d\x01\x9d\x01\x9f\x01\x9f\x01\xa1\x01\xa1\x01\xa3\x01\xa3\x01\xa5\x01\xa5\x01\xa7\x01\xa7\x01\xff\xff\xab\x01\xab\x01\xad\x01\xad\x01\xaf\x01\xaf\x01\xb1\x01\xb1\x01\xb3\x01\xb3\x01\xb5\x01\xb5\x01\xb7\x01\xb7\x01\xb9\x01\xb9\x01\xbb\x01\xbb\x01\xbd\x01\xbd\x01\xbf\x01\xbf\x01\xc1\x01\xc1\x01\xc3\x01\xc3\x01\xc5\x01\xc5\x01\xc7\x01\xc7\x01\xc9\x01\xc9\x01\xcb\x01\xcb\x01\xcd\x01\xcd\x01\xcf\x01\xcf\x01\xd1\x01\xd1\x01\xd3\x01\xd3\x01\xd5\x01\xd5\x01\xd7\x01\xd7\x01\xd9\x01\xd9\x01\xdb\x01\xdb\x01\xdd\x01\xdd\x01\xe1\x01\xe1\x01\xe2\x01\xe2\x01\xe4\x01\xe4\x01\xe6\x01\xe6\x01\xe8\x01\xe8\x01\xea\x01\xea\x01\xec\x01\xec\x01\xee\x01\xee\x01\xf0\x01\xf0\x01\xf2\x01\xf2\x01\xf4\x01\xf4\x01\xfe\x01\xfe\x01\x00\x02\x00\x02\x02\x02\x02\x02\x04\x02\x04\x02\x06\x02\x06\x02\x08\x02\x08\x02\x0a\x02\x0a\x02\x0c\x02\x0c\x02\x89\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x02\x1a\x02\x1d\x02\x1d\x02\x20\x02\x20\x02\x23\x02\x23\x02\x26\x02\x26\x02\x29\x02\x29\x02\x2c\x02\x2c\x02\x2f\x02\x2f\x02\x32\x02\x32\x02\x35\x02\x35\x02\x38\x02\x38\x02\x3b\x02\x3b\x02\xff\xff\xff\xff\x3e\x02\x3e\x02\x41\x02\x41\x02\x44\x02\x44\x02\x47\x02\x47\x02\x4a\x02\x4a\x02\x4d\x02\x4d\x02\x50\x02\x50\x02\x53\x02\x53\x02\x56\x02\x56\x02\x59\x02\x59\x02\x5c\x02\x5c\x02\x5f\x02\x5f\x02\x62\x02\x62\x02\x65\x02\x65\x02\x68\x02\x68\x02\x6b\x02\x6b\x02\x6e\x02\x6e\x02\x71\x02\x71\x02\x74\x02\x74\x02\x77\x02\x77\x02\x7a\x02\x7a\x02\x7d\x02\x7d\x02\x80\x02\x80\x02\x83\x02\x83\x02\x86\x02\x86\x02\x8a\x02\x8a\x02\x8b\x02\x8b\x02\x8b\x02\x8e\x02\x8e\x02\x91\x02\x91\x02\x94\x02\x94\x02\x97\x02\x97\x02\x9a\x02\x9a\x02\x9d\x02\x9d\x02\xa0\x02\xa0\x02\xa3\x02\xa3\x02\xa6\x02\xa6\x02\xa9\x02\xa9\x02\xff\xff\xff\xff\xab\x02\xaa\x02\xac\x02\xac\x02\xaa\x02\xab\x02\xb2\x02\xb2\x02\xb5\x02\xb5\x02\xb8\x02\xb8\x02\xbb\x02\xbb\x02\xbe\x02\xbe\x02\xc1\x02\xc1\x02\xc4\x02\xc4\x02\xc7\x02\xc7\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x02\xca\x02\xcc\x02\xcc\x02\xcc\x02\xcd\x02\xcd\x02\xcd\x02\xce\x02\xce\x02\xce\x02\xcf\x02\xcf\x02\xcf\x02\xd0\x02\xd0\x02\xd0\x02\xd1\x02\xd1\x02\xd1\x02\xd2\x02\xd2\x02\xd2\x02\xd3\x02\xd3\x02\xd3\x02\xd4\x02\xd4\x02\xd4\x02\xd5\x02\xd5\x02\xd5\x02\xd6\x02\xd6\x02\xd6\x02\xd7\x02\xd7\x02\xd7\x02\xdc\x02\xdc\x02\xdc\x02\xdd\x02\xdd\x02\xdd\x02\xde\x02\xde\x02\xde\x02\xdf\x02\xdf\x02\xdf\x02\xe0\x02\xe0\x02\xe0\x02\xe1\x02\xe1\x02\xe1\x02\xe2\x02\xe2\x02\xe2\x02\xe3\x02\xe3\x02\xe3\x02\xe4\x02\xe4\x02\xe4\x02\xe5\x02\xe5\x02\xe5\x02\xe6\x02\xe6\x02\xe6\x02\xe7\x02\xe7\x02\xe7\x02\xe8\x02\xe8\x02\xe8\x02\xe9\x02\xe9\x02\xe9\x02\xea\x02\xea\x02\xea\x02\xeb\x02\xeb\x02\xeb\x02\xec\x02\xec\x02\xec\x02\xed\x02\xed\x02\xed\x02\xee\x02\xee\x02\xee\x02\xef\x02\xef\x02\xef\x02\xf0\x02\xf0\x02\xf0\x02\xf1\x02\xf1\x02\xf1\x02\xf2\x02\xf2\x02\xf2\x02\xf3\x02\xf3\x02\xf3\x02\xf4\x02\xf4\x02\xf4\x02\xff\xff\xf8\x02\xf8\x02\xf8\x02\x8b\x02\xf9\x02\xf9\x02\xf9\x02\xfa\x02\xfa\x02\xfa\x02\xfb\x02\xfb\x02\xfb\x02\xfc\x02\xfc\x02\xfc\x02\x00\x03\x00\x03\x00\x03\x01\x03\x01\x03\x01\x03\x02\x03\x02\x03\x02\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x0e\x03\x0d\x03\x0f\x03\x0f\x03\x0d\x03\x0e\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\xff\xff\xff\xff\x1c\x03\x1c\x03\xcc\x02\xcd\x02\xce\x02\xcf\x02\xd0\x02\xd1\x02\xd2\x02\xd3\x02\xd4\x02\xd5\x02\xd6\x02\xd7\x02\xff\xff\xff\xff\xff\xff\xff\xff\xdc\x02\xdd\x02\xde\x02\xdf\x02\xe0\x02\xe1\x02\xe2\x02\xe3\x02\xe4\x02\xe5\x02\xe6\x02\xe7\x02\xe8\x02\xe9\x02\xea\x02\xeb\x02\xec\x02\xed\x02\xee\x02\xef\x02\xf0\x02\xf1\x02\xf2\x02\xf3\x02\xf4\x02\xff\xff\xff\xff\xff\xff\xf8\x02\xf9\x02\xfa\x02\xfb\x02\xfc\x02\xff\xff\xff\xff\xff\xff\x00\x03\x01\x03\x02\x03\xff\xff\x04\x03\x05\x03\x06\x03\x3d\x03\x3b\x03\x3e\x03\x3d\x03\x3b\x03\x3e\x03\x3d\x03\x3b\x03\x3e\x03\x10\x03\x11\x03\x12\x03\x13\x03\x14\x03\x15\x03\x16\x03\x17\x03\xff\xff\x1e\x03\xff\xff\x1e\x03\x1e\x03\x1e\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x03\x3d\x03\x3d\x03\x3e\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,999) [[],[],[(AlexAccPred (alex_action_27) (alexRightContext 797))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_0))],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAccPred (alex_action_30) (alexRightContext 794))],[(AlexAccPred (alex_action_30) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_31) (alexRightContext 794))],[(AlexAccPred (alex_action_31) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAccPred (alex_action_43) (alexRightContext 794))],[(AlexAccPred (alex_action_43) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_44) (alexRightContext 794))],[(AlexAccPred (alex_action_44) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_45) (alexRightContext 794))],[(AlexAccPred (alex_action_45) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAccPred (alex_action_77) (alexRightContext 794))],[(AlexAccPred (alex_action_77) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_78) (alexRightContext 794))],[(AlexAccPred (alex_action_78) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_79) (alexRightContext 794))],[(AlexAccPred (alex_action_79) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_80) (alexRightContext 794))],[(AlexAccPred (alex_action_80) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_81) (alexRightContext 794))],[(AlexAccPred (alex_action_81) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_82) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_83) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_84) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_85) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_86) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAccPred (alex_action_87) (alexRightContext 794)),(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_91))],[(AlexAcc (alex_action_91))],[(AlexAcc (alex_action_91))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_95))],[(AlexAcc (alex_action_96))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_97))],[(AlexAcc (alex_action_98))],[(AlexAcc (alex_action_99))],[(AlexAcc (alex_action_100))]]-{-# LINE 176 "src/CSPM/Parser/Lexer.x" #-}--wschars :: String-wschars = " \t\r\n"--strip :: String -> String-strip = lstrip . rstrip---- | Same as 'strip', but applies only to the left side of the string.-lstrip :: String -> String-lstrip s = case s of- [] -> []- (x:xs) -> if elem x wschars then lstrip xs else s---- | Same as 'strip', but applies only to the right side of the string.-rstrip :: String -> String-rstrip = reverse . lstrip . reverse--openseq token inp len = - do- cs <- getSequenceStack- setSequenceStack (0:cs)- tok token inp len-closeseq token inp len = - do- (c:cs) <- getSequenceStack- case cs of- c1:cs -> setSequenceStack (c+c1:cs)- [] -> - -- Must be because of a syntax error (too many closing brakcets)- -- We let the parser catch this and we try and do something- -- sensible.- setSequenceStack [0]- tok token inp len--gt :: AlexInput -> Int -> ParseMonad LToken-gt inp len = do- (c:cs) <- getSequenceStack- if c > 0 then do- setSequenceStack (c-1:cs)- tok TCloseSeq inp len- else tok TGt inp len--soakTok :: Token -> AlexInput -> Int -> ParseMonad LToken-soakTok t inp len = setCurrentStartCode soak >> tok t inp len---- TODO: don't count whitespace in the tokens-tok :: Token -> AlexInput -> Int -> ParseMonad LToken-tok t (ParserState { fileStack = fps:_ }) len =- return $ L (SrcSpanOneLine f lineno colno (colno+len)) t- where- (FileParserState { tokenizerPos = FilePosition offset lineno colno, - fileName = f }) = fps--stok :: (String -> Token) -> AlexInput -> Int -> ParseMonad LToken-stok f (st @ ParserState { fileStack = stk }) len = do- tok (f (filter (\ c -> c /= '\n') (takeChars len stk))) st len--skip input len = getNextToken--takeChars :: Int -> [FileParserState] -> String-takeChars 0 _ = ""-takeChars len (FileParserState {input = [] }:stk) = takeChars len stk-takeChars len (fps@(FileParserState {input = (c:cs) }):stk) = - c:(takeChars (len-1) (fps {input = cs}:stk))--nestedComment :: AlexInput -> Int -> ParseMonad LToken-nestedComment _ _ = do- st <- getParserState- go 1 st- where - err :: ParseMonad a- err = do- FileParserState { - fileName = fname, - tokenizerPos = pos, - currentStartCode = sc } <- getTopFileParserState- throwSourceError [lexicalErrorMessage (filePositionToSrcLoc fname pos)]- go :: Int -> AlexInput -> ParseMonad LToken- go 0 st = do setParserState st; getNextToken- go n st = do- case alexGetChar st of- Nothing -> err- Just (c,st) -> do- case c of- '-' -> do- case alexGetChar st of- Nothing -> err- Just ('\125',st) -> go (n-1) st- Just (c,st) -> go n st- '\123' -> do- case alexGetChar st of- Nothing -> err- Just ('-',st) -> go (n+1) st- Just (c,st) -> go n st- c -> go n st--switchInput :: AlexInput -> Int -> ParseMonad LToken-switchInput st len = do- FileParserState { - fileName = fname, - tokenizerPos = pos, - currentStartCode = sc } <- getTopFileParserState- let- str = takeChars len (fileStack st)- quotedFname = strip (drop (length "include") str)- - hasStartQuote ('\"':cs) = True- hasStartQuote _ = False-- hasEndQuote [] = False- hasEndQuote ('\"':cs) = True- hasEndQuote (c:cs) = hasEndQuote cs- - file = calcFile (tail quotedFname)- calcFile ('\"':cs) = ""- calcFile (c:cs) = c:calcFile cs-- if not (hasStartQuote quotedFname) || not (hasEndQuote (tail quotedFname)) then- throwSourceError [invalidIncludeErrorMessage (filePositionToSrcLoc fname pos)]- else pushFile file getNextToken--type AlexInput = ParserState--begin :: Int -> AlexInput -> Int -> ParseMonad LToken-begin sc' st len = setCurrentStartCode sc' >> getNextToken--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (ParserState { fileStack = fps:_ })= previousChar fps---- For compatibility with Alex 3-alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)-alexGetByte inp = - case alexGetChar inp of - Nothing -> Nothing- Just (c, inp') -> - -- Truncate the char to the first byte- Just (c2w c, inp')- -alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar (ParserState { fileStack = [] }) = Nothing-alexGetChar (st @ (ParserState { fileStack = fps:fpss })) = gc fps- where- gc (fps @ (FileParserState { input = [] })) = - alexGetChar (st { fileStack = fpss })- gc (fps @ (FileParserState { tokenizerPos = p, input = (c:s) })) =- p' `seq` Just (c, st')- where- p' = movePos p c- fps' = fps { input = s, tokenizerPos = p', previousChar = c }- st' = st { fileStack = fps':fpss }--getNextToken :: ParseMonad LToken-getNextToken = do- FileParserState { - fileName = fname, - tokenizerPos = pos, - currentStartCode = sc } <- getTopFileParserState- st <- getParserState- case alexScan st sc of- AlexEOF -> return $ L Unknown TEOF- AlexError st' -> - throwSourceError [lexicalErrorMessage (filePositionToSrcLoc fname pos)]- AlexSkip st' len -> do- setParserState st'- getNextToken- AlexToken st' len action -> do- setParserState st'- action st len--getNextTokenWrapper :: (LToken -> ParseMonad a) -> ParseMonad a-getNextTokenWrapper cont = getNextToken >>= cont----sem_prop,soak :: Int-sem_prop = 1-soak = 2-alex_action_0 = begin sem_prop -alex_action_1 = tok TTauPriority -alex_action_2 = tok TTauPriority -alex_action_3 = tok TDeadlockFree -alex_action_4 = tok TDeadlockFree -alex_action_5 = tok TLivelockFree -alex_action_6 = tok TLivelockFree -alex_action_7 = tok TDivergenceFree -alex_action_8 = tok TDivergenceFree -alex_action_9 = tok TDeterministic -alex_action_10 = tok (TModel Traces) -alex_action_11 = tok (TModel Failures) -alex_action_12 = tok (TModel FailuresDivergences) -alex_action_13 = tok (TModel Revivals) -alex_action_14 = tok (TModel RevivalsDivergences) -alex_action_15 = tok (TModel Refusals) -alex_action_16 = tok (TModel RefusalsDivergences) -alex_action_17 = begin 0 -alex_action_18 = begin 0 -alex_action_19 = tok (TRefines Traces) -alex_action_20 = tok (TRefines Failures) -alex_action_21 = tok (TRefines FailuresDivergences) -alex_action_22 = tok (TRefines Revivals) -alex_action_23 = tok (TRefines RevivalsDivergences) -alex_action_24 = tok (TRefines Refusals) -alex_action_25 = tok (TRefines RefusalsDivergences) -alex_action_26 = skip -alex_action_27 = begin 0 -alex_action_28 = skip -alex_action_29 = nestedComment -alex_action_30 = tok TFalse -alex_action_31 = tok TTrue -alex_action_32 = switchInput -alex_action_33 = tok TExtChoice -alex_action_34 = tok TIntChoice -alex_action_35 = tok TInterleave -alex_action_36 = tok TInterrupt -alex_action_37 = tok TPrefix -alex_action_38 = tok TSlidingChoice -alex_action_39 = tok TRException -alex_action_40 = tok TParallel -alex_action_41 = tok TSemiColon -alex_action_42 = tok TGuard -alex_action_43 = soakTok TAnd -alex_action_44 = soakTok TOr -alex_action_45 = soakTok TNot -alex_action_46 = tok TEq -alex_action_47 = tok TNotEq -alex_action_48 = tok TLtEq -alex_action_49 = tok TGtEq -alex_action_50 = tok TEmptySeq -alex_action_51 = tok TLt -alex_action_52 = gt -alex_action_53 = openseq TLParen -alex_action_54 = closeseq TRParen -alex_action_55 = openseq TLPipeBrace -alex_action_56 = closeseq TRPipeBrace -alex_action_57 = openseq TLBrace -alex_action_58 = closeseq TRBrace -alex_action_59 = openseq TLDoubleSqBracket -alex_action_60 = closeseq TRDoubleSqBracket -alex_action_61 = openseq TLPipeSqBracket -alex_action_62 = closeseq TRPipeSqBracket -alex_action_63 = tok TLSqBracket -alex_action_64 = tok TRSqBracket -alex_action_65 = tok TPipe -alex_action_66 = tok TComma -alex_action_67 = tok TDoubleDot -alex_action_68 = tok TDot -alex_action_69 = tok TQuestionMark -alex_action_70 = tok TExclamationMark -alex_action_71 = tok TDollar -alex_action_72 = tok TDrawnFrom -alex_action_73 = tok TTie -alex_action_74 = tok TColon -alex_action_75 = tok TDoubleAt -alex_action_76 = tok TDefineEqual -alex_action_77 = soakTok TIf -alex_action_78 = soakTok TThen -alex_action_79 = soakTok TElse -alex_action_80 = soakTok TLet -alex_action_81 = soakTok TWithin -alex_action_82 = soakTok TChannel -alex_action_83 = soakTok TAssert -alex_action_84 = soakTok TDataType -alex_action_85 = soakTok TExternal -alex_action_86 = soakTok TTransparent -alex_action_87 = soakTok TNameType -alex_action_88 = tok TBackSlash -alex_action_89 = tok TLambdaDot -alex_action_90 = tok TPlus -alex_action_91 = tok TMinus -alex_action_92 = tok TTimes -alex_action_93 = tok TDivide -alex_action_94 = tok TMod -alex_action_95 = tok TConcat -alex_action_96 = tok THash -alex_action_97 = stok (\s -> TIdent s) -alex_action_98 = stok (\ s -> TInteger (read s)) -alex_action_99 = tok TWildCard -alex_action_100 = tok TNewLine -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine--{-# LINE 37 "templates/GenericTemplate.hs" #-}--{-# LINE 47 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN- narrow16Int# i- where- i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)- high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- low = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 2#-#else- indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN- narrow32Int# i- where- !i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`- (b2 `uncheckedShiftL#` 16#) `or#`- (b1 `uncheckedShiftL#` 8#) `or#` b0)- !b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- !b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- !b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- !b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- !off' = off *# 4#-#else- indexInt32OffAddr# arr off-#endif------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a- = AlexEOF- | AlexError !AlexInput- | AlexSkip !AlexInput !Int- | AlexToken !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))- = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))- = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetByte input of- Nothing -> ---- AlexEOF- Just _ ->---- AlexError input'-- (AlexLastSkip input'' len, _) ->---- AlexSkip input'' len-- (AlexLastAcc k input''' len, _) ->---- AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =- input `seq` -- strict in the input- let - new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))- in- new_acc `seq`- case alexGetByte input of- Nothing -> (new_acc, input)- Just (c, new_input) -> ---- let- (base) = alexIndexInt32OffAddr alex_base s- ((I# (ord_c))) = fromIntegral c- (offset) = (base +# ord_c)- (check) = alexIndexInt16OffAddr alex_check offset- - (new_s) = if (offset >=# 0#) && (check ==# ord_c)- then alexIndexInt16OffAddr alex_table offset- else alexIndexInt16OffAddr alex_deflt s- in- case new_s of - -1# -> (new_acc, input)- -- on an error, we want to keep the input *before* the- -- character that failed, not after.- _ -> alex_scan_tkn user orig_input (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 [] = last_acc- check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))- check_accs (AlexAccPred a predx : rest)- | predx user orig_input (I# (len)) input- = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkipPred predx : rest)- | predx user orig_input (I# (len)) input- = AlexLastSkip input (I# (len))- check_accs (_ : rest) = check_accs rest--data AlexLastAcc a- = AlexNone- | AlexLastAcc a !AlexInput !Int- | AlexLastSkip !AlexInput !Int--instance Functor AlexLastAcc where- fmap f AlexNone = AlexNone- fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z- fmap f (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user- = AlexAcc a- | AlexAccSkip- | AlexAccPred a (AlexAccPred user)- | AlexAccSkipPred (AlexAccPred user)--type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool---- -------------------------------------------------------------------------------- Predicates on a rule--alexAndPred p1 p2 user in1 len in2- = p1 user in1 len in2 && p2 user in1 len in2----alexPrevCharIsPred :: Char -> AlexAccPred _ -alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input--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.---- used by wrappers-iUnbox (I# (i)) = i
libcspm.cabal view
@@ -26,13 +26,7 @@ The main module of interest will be the "CSPM" module. This packages up most of the functionality of the library in an easy to use, relatively high level format. See "CSPM" for an example of how to use this module.- .- Version Numbering Policy: point releases (i.e. from @x.y.z@ to @x.y.z'@)- are guaranteed to be backwards compatible. Minor releases (i.e. - from @x.y.z@ to @x.y'.z'@) will not be backwards compatible, but should be- relatively easy to port to. Major changes (i.e. from @x.y.z@ to @x'.y'.z'@)- will not be backwards compatible and may include large API redesigns.-Version: 0.2.1+Version: 1.0.0 Extra-source-files: README.md, CHANGELOG.txt@@ -44,49 +38,56 @@ Source-repository this type: git location: https://github.com/tomgr/libcspm- tag: release-0.2.1+ tag: release-1.0.0 Library Build-Depends:+ array >= 0.3, base >= 4 && < 5, bytestring >= 0.9,- filepath >= 1.2, - array >= 0.3, - containers >= 0.4, - mtl >= 2.0, - pretty >= 1.0,+ containers >= 0.5, + deepseq >= 1.3 && < 1.4, directory >= 1.0,+ filepath >= 1.2, graph-wrapper >= 0.2,+ hashable >= 1.1 && < 1.2,+ hashtables >= 1.0,+ mtl >= 2.0, + pretty >= 1.1,+ text >= 0.11 && < 0.12, value-supply >= 0.6 Exposed-Modules: CSPM,- CSPM.Compiler.Events,- CSPM.Compiler.Map,- CSPM.Compiler.Processes,- CSPM.Compiler.Set,+ CSPM.CommandLineOptions,+ CSPM.DataStructures.FreeVars, CSPM.DataStructures.Literals, CSPM.DataStructures.Names, CSPM.DataStructures.Syntax,- CSPM.DataStructures.Tokens, CSPM.DataStructures.Types, CSPM.Desugar, CSPM.Evaluator, CSPM.Evaluator.BuiltInFunctions, CSPM.Evaluator.DeclBind,+ CSPM.Evaluator.DeepSeq,+ CSPM.Evaluator.Dot, CSPM.Evaluator.Environment, CSPM.Evaluator.Exceptions, CSPM.Evaluator.Expr,- CSPM.Evaluator.Module,+ CSPM.Evaluator.File, CSPM.Evaluator.Monad, CSPM.Evaluator.PatBind,+ CSPM.Evaluator.ProcessValues,+ CSPM.Evaluator.Profiler, CSPM.Evaluator.Values,- CSPM.Evaluator.ValueSet+ CSPM.Evaluator.ValueSet,+ CSPM.Evaluator.ValuePrettyPrinter, CSPM.Parser, CSPM.Parser.Exceptions, CSPM.Parser.Lexer, CSPM.Parser.Monad, CSPM.Parser.Parser,+ CSPM.Parser.Tokens, CSPM.PrettyPrinter, CSPM.Prelude, CSPM.Renamer,@@ -95,32 +96,45 @@ CSPM.TypeChecker.Common, CSPM.TypeChecker.Compressor, CSPM.TypeChecker.Decl,- CSPM.TypeChecker.Dependencies, CSPM.TypeChecker.Environment, CSPM.TypeChecker.Exceptions, CSPM.TypeChecker.Expr,+ CSPM.TypeChecker.File, CSPM.TypeChecker.InteractiveStmt,- CSPM.TypeChecker.Module, CSPM.TypeChecker.Monad, CSPM.TypeChecker.Pat, CSPM.TypeChecker.Unification,+ Data.Graph.ST,+ Data.Set.MutableBit, Util.Annotated, Util.Exception,+ Util.FuzzyLookup, Util.HierarchicalMap, Util.List, Util.Monad,+ Util.MonadicPrettyPrint,+ Util.MonadicPrettyPrintInternal, Util.PartialFunctions,+ Util.Precedence, Util.Prelude, Util.PrettyPrint Other-Modules: Paths_libcspm + GHC-Options:+ -O3+ -fwarn-missing-fields+ -fwarn-dodgy-imports+ -fwarn-missing-methods+ -fwarn-unused-imports+ GHC-Prof-Options: -auto-all -prof+ Hs-Source-Dirs: src Extensions: DoAndIfThenElse -Test-Suite unit-tests+Test-Suite libcspm_tests Type: exitcode-stdio-1.0 Main-is: Main.hs @@ -130,7 +144,8 @@ Build-depends: base,+ directory >= 1.0, libcspm, filepath >= 1.2, mtl >= 2.0,- directory >= 1.0+ test-framework >= 0.6 && < 0.7
src/CSPM.hs view
@@ -1,4 +1,6 @@-{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}+{-# LANGUAGE FlexibleContexts, FlexibleInstances, IncoherentInstances,+ MultiParamTypeClasses, OverlappingInstances, TypeSynonymInstances,+ UndecidableInstances #-} -- | This module provides the main high-level interface to the library -- functionality. It does this through a monadic interface, mainly due to the -- fact that several of the components require the use of the IO monad. It is@@ -40,11 +42,11 @@ -- -- > main :: IO () -- > main = do--- > session <- newCSPMSession+-- > session <- newCSPMSession False -- > (value, resultingSession) <- unCSPM session $ do--- > -- Parse the file, returning something of type PModule.+-- > -- Parse the file, returning something of type PCSPMFile. -- > parsedFile <- parseFile "test.csp"--- > -- Rename the file, returning something of type TCModule.+-- > -- Rename the file, returning something of type TCCSPMFile. -- > renamedFile <- renameFile parsedFile -- > -- Typecheck the file, annotating it with types. -- > typeCheckedFile <- typeCheckFile renamedFile@@ -70,6 +72,8 @@ module CSPM ( -- * CSPM Monad CSPMSession, newCSPMSession,+ EV.ProfilerOptions(..), EV.defaultProfilerOptions,+ EV.EvaluatorOptions(..), EV.defaultEvaluatorOptions, CSPMMonad(..), withSession, -- ** A basic implementation of the monad@@ -86,15 +90,18 @@ -- * Parser API parseStringAsFile, parseFile, parseInteractiveStmt, parseExpression, -- * Renamer API- renameFile, renameInteractiveStmt, renameExpression,+ renameFile, renameInteractiveStmt, renameExpression, getBoundNames, -- * Type Checker API typeCheckFile, typeCheckInteractiveStmt, typeCheckExpression,- ensureExpressionIsOfType, dependenciesOfExp, typeOfExpression,+ ensureExpressionIsOfType, typeOfExpression, modifyTypeCheckerErrorOptions,+ typeOfName, boundProcessNames, -- * Desugarer API desugarFile, desugarInteractiveStmt, desugarExpression, -- * Evaluator API- bindFile, bindDeclaration, getBoundNames,- evaluateExpression,+ bindFile, bindDeclaration,+ evaluateExpression, maybeProcessNameToProcess, profilingData,+ -- * Shortcuts+ stringToValue, -- * Low-Level API -- | Whilst this module provides many of the commonly used functionality -- within the CSPM monad, sometimes there are additional functions exported@@ -111,11 +118,10 @@ ) where +import Control.Applicative import Control.Monad.State-import Control.Monad.Trans import Data.Version import System.FilePath-import System.IO import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax@@ -127,9 +133,9 @@ import qualified CSPM.TypeChecker as TC import qualified CSPM.Desugar as DS import Paths_libcspm (version)-import Util.Annotated import Util.Exception import Util.PrettyPrint+import qualified Util.MonadicPrettyPrint as M -- | A 'CSPMSession' represents the internal states of all the various -- components.@@ -143,13 +149,13 @@ } -- | Create a new 'CSPMSession'.-newCSPMSession :: MonadIO m => m CSPMSession-newCSPMSession = do+newCSPMSession :: MonadIO m => EV.EvaluatorOptions -> m CSPMSession+newCSPMSession profilerOptions = do -- Get the type checker environment with the built in functions already -- injected rnState <- liftIO $ RN.initRenamer tcState <- liftIO $ TC.initTypeChecker- let evState = EV.initEvaluator+ evState <- liftIO $ EV.initEvaluator profilerOptions return $ CSPMSession rnState tcState evState -- | The CSPMMonad is the main monad in which all functions must be called.@@ -199,14 +205,14 @@ runParserInCurrentState dir p = liftIO $ P.runParser p dir -- | Parse a file `fp`. Throws a `SourceError` on any parse error.-parseFile :: CSPMMonad m => FilePath -> m [PModule]+parseFile :: CSPMMonad m => FilePath -> m PCSPMFile parseFile fp = let (dir, fname) = splitFileName fp in runParserInCurrentState dir (P.parseFile fname) -- | Parses a string, treating it as though it were a file. Throws a -- 'SourceError' on any parse error.-parseStringAsFile :: CSPMMonad m => String -> m [PModule]+parseStringAsFile :: CSPMMonad m => String -> m PCSPMFile parseStringAsFile str = runParserInCurrentState "" (P.parseStringAsFile str) -- | Parses a 'PInteractiveStmt'. Throws a 'SourceError' on any parse error.@@ -228,7 +234,7 @@ return a -- | Renames a file.-renameFile :: CSPMMonad m => [PModule] -> m [TCModule]+renameFile :: CSPMMonad m => PCSPMFile -> m TCCSPMFile renameFile m = runRenamerInCurrentState $ do RN.newScope RN.rename m@@ -243,6 +249,10 @@ RN.newScope RN.rename e +-- | Get a list of currently bound names in the environment.+getBoundNames :: CSPMMonad m => m [Name]+getBoundNames = runRenamerInCurrentState RN.getBoundNames+ -- TypeChecker API -- | Runs the typechecker in the current state, saving the resulting state and@@ -256,51 +266,76 @@ -- | Type checks a file, also desugaring and annotating it. Throws a -- 'SourceError' if an error is encountered and will call 'handleWarnings' on -- any warnings. This also performs desugaraing.-typeCheckFile :: CSPMMonad m => [TCModule] -> m [TCModule]+typeCheckFile :: CSPMMonad m => TCCSPMFile -> m TCCSPMFile typeCheckFile ms = reportWarnings $ runTypeCheckerInCurrentState $ do TC.typeCheck ms- return ms -- | Type checks a 'PInteractiveStmt'. typeCheckInteractiveStmt :: CSPMMonad m => TCInteractiveStmt -> m TCInteractiveStmt typeCheckInteractiveStmt pstmt = reportWarnings $ runTypeCheckerInCurrentState $ do TC.typeCheck pstmt- return pstmt -- | Type checkes a 'PExp', returning the desugared and annotated version. typeCheckExpression :: CSPMMonad m => TCExp -> m TCExp typeCheckExpression exp = reportWarnings $ runTypeCheckerInCurrentState $ do TC.typeCheck exp- return exp -- | Given a 'Type', ensures that the 'PExp' is of that type. It returns the -- annoated and desugared expression. ensureExpressionIsOfType :: CSPMMonad m => Type -> TCExp -> m TCExp ensureExpressionIsOfType t exp = reportWarnings $ runTypeCheckerInCurrentState $ do TC.typeCheckExpect t exp- return exp -- | Gets the type of the expression in the current context. typeOfExpression :: CSPMMonad m => TCExp -> m Type typeOfExpression exp = reportWarnings $ runTypeCheckerInCurrentState (TC.typeOfExp exp) --- | Returns the 'Name's that the given type checked expression depends on.-dependenciesOfExp :: CSPMMonad m => TCExp -> m [Name]-dependenciesOfExp e = - reportWarnings $ runTypeCheckerInCurrentState (TC.dependenciesOfExp e)+-- | Returns all currently bound process names, optionally including functions+-- that evaluate to processes+boundProcessNames :: CSPMMonad m =>+ Bool -- ^ If true includes functions that evaluate to processes.+ -> m [Name]+boundProcessNames includeFunctions = do+ ns <- getBoundNames+ ts <- mapM typeOfName ns+ let isProcessFunction (TFunction _ (f@(TFunction _ _))) =+ isProcessFunction f+ isProcessFunction (TFunction _ t) = isProcess t+ isProcessFunction _ = False + isProcess TProc = True+ isProcess _ = False++ nonFuncNames = map fst $ filter (isProcess . typeSchemeType . snd)+ (zip ns ts)+ funcNames = map fst $ filter (isProcessFunction . typeSchemeType . snd)+ (zip ns ts)+ return $ nonFuncNames ++ (if includeFunctions then funcNames else [])++-- | Returns the type of the given name in the current context.+--+-- The file in which this name has been bound must have been typechecked using+-- typeCheckFile.+typeOfName :: CSPMMonad m => Name -> m TypeScheme+typeOfName n = reportWarnings $ runTypeCheckerInCurrentState (TC.typeOfName n)++modifyTypeCheckerErrorOptions :: CSPMMonad m =>+ (TC.ErrorOptions -> TC.ErrorOptions) -> m ()+modifyTypeCheckerErrorOptions f = reportWarnings $+ runTypeCheckerInCurrentState (TC.modifyErrorOptions f)+ -- | Desugar a file, preparing it for evaulation.-desugarFile :: CSPMMonad m => [TCModule] -> m [TCModule]-desugarFile [m] = return [DS.desugar m]+desugarFile :: CSPMMonad m => TCCSPMFile -> m TCCSPMFile+desugarFile m = DS.runDesugar $ DS.desugar m -- | Desugars an expression. desugarExpression :: CSPMMonad m => TCExp -> m TCExp-desugarExpression e = return $ DS.desugar e+desugarExpression e = DS.runDesugar $ DS.desugar e -- | Desugars an interactive statement. desugarInteractiveStmt :: CSPMMonad m => TCInteractiveStmt -> m TCInteractiveStmt-desugarInteractiveStmt s = return $ DS.desugar s+desugarInteractiveStmt s = DS.runDesugar $ DS.desugar s -- Evaluator API @@ -312,10 +347,6 @@ return a -- Environment API---- | Get a list of currently bound names in the environment.-getBoundNames :: CSPMMonad m => m [Name]-getBoundNames = runEvaluatorInCurrentState EV.getBoundNames -- | Takes a declaration and adds it to the current environment. Requires the -- declaration to be desugared.@@ -328,12 +359,12 @@ -- | Binds all the declarations that are in a particular file. Requires the -- file to be desugared.-bindFile :: CSPMMonad m => [TCModule] -> m ()-bindFile ms = do+bindFile :: CSPMMonad m => TCCSPMFile -> m ()+bindFile m = do -- Bind- evSt <- runEvaluatorInCurrentState (do- ds <- EV.evaluateFile ms- EV.addToEnvironment ds)+ evSt <- runEvaluatorInCurrentState $ do+ ds <- EV.evaluateFile m+ EV.addToEnvironment ds modifySession (\s -> s { evState = evSt }) return () @@ -342,6 +373,28 @@ evaluateExpression :: CSPMMonad m => TCExp -> m Value evaluateExpression e = runEvaluatorInCurrentState (EV.evaluateExp e) +-- | Obtains the profiling data that the evaluator has produced so far.+profilingData :: CSPMMonad m => m EV.ProfilingData+profilingData = runEvaluatorInCurrentState EV.profilingData++-- | Given a process name, attempts to convert the name into a process. This+-- is only possible for top-level function applications.+maybeProcessNameToProcess :: CSPMMonad m => EV.ProcName -> m (Maybe EV.UProc)+maybeProcessNameToProcess pn =+ runEvaluatorInCurrentState (EV.maybeProcessNameToProcess pn)++-- | Takes an expression string and a type and evaluates the expression,+-- providing the expression is of the correct type.+stringToValue :: CSPMMonad m => Type -> String -> m Value+stringToValue typ str =+ parseExpression str >>= renameExpression >>= + ensureExpressionIsOfType typ >>= desugarExpression >>= evaluateExpression+ -- | Return the version of libcspm that is being used. getLibCSPMVersion :: Version getLibCSPMVersion = version++instance (Applicative m, CSPMMonad m,+ M.MonadicPrettyPrintable EV.EvaluationMonad a) => + M.MonadicPrettyPrintable m a where+ prettyPrint = runEvaluatorInCurrentState . M.prettyPrint
+ src/CSPM/CommandLineOptions.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE ExistentialQuantification, Rank2Types #-}+module CSPM.CommandLineOptions (+ Options(..),+ allOptions,+ defaultOptions,+ typeCheckerOptions,+ setOptions,+) where++import CSPM+import qualified CSPM.TypeChecker.Exceptions as TC+import System.Console.GetOpt++-- | The type of options for libcspm.+data Options = Options {+ tcOptions :: TC.ErrorOptions+ }++-- | The default set of options.+defaultOptions :: Options+defaultOptions = Options {+ tcOptions = TC.defaultErrorOptions+ }++-- | All options for the type-checker.+typeCheckerOptions :: (a -> Options) -> (a -> Options -> a) ->+ [OptDescr (a -> a)]+typeCheckerOptions get set =+ let+ setFlag func opts = set opts (func o)+ where o = get opts+ in [+ Option [] ["fno-warn-deprecations"]+ (NoArg (setFlag $ \ o -> o {+ tcOptions = (tcOptions o) {+ TC.warnDeprecatedNamesUsed = False + }+ }))+ "Disables type-checker warnings for deprecations",+ Option [] ["fno-warn-unchecked-calls"]+ (NoArg (setFlag $ \o -> o {+ tcOptions = (tcOptions o) {+ TC.warnUnsafeNamesUsed = False + }+ }))+ ("Disables type-checker warnings for function calls that cannot " +++ "be type-checked")+ ]++-- | All available command line options.+allOptions :: (a -> Options) -> (a -> Options -> a) ->+ [OptDescr (a -> a)]+allOptions get set = typeCheckerOptions get set++-- | Sets the options to the values given.+setOptions :: CSPMMonad m => Options -> m ()+setOptions opts = do+ modifyTypeCheckerErrorOptions (\ _ -> tcOptions opts)
− src/CSPM/Compiler/Events.hs
@@ -1,33 +0,0 @@-{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}-module CSPM.Compiler.Events (- Event(..),- EventSet-) where--import qualified CSPM.Compiler.Map as M-import qualified CSPM.Compiler.Set as S-import Util.PrettyPrint---- | Events, as represented in the LTS.-data Event = - -- | The internal special event tau.- Tau - -- | The internal event tick, representing termination.- | Tick - -- | Any event defined in a channel definition.- | UserEvent String- deriving (Eq, Ord)--instance PrettyPrintable Event where- prettyPrint Tau = char 'τ'- prettyPrint Tick = char '✓'- prettyPrint (UserEvent s) = text s-instance Show Event where- show ev = show (prettyPrint ev)---- | An alias for ease-type EventSet = S.Set Event-type EventMap = M.Map Event Event--instance PrettyPrintable EventSet where- prettyPrint s = braces (list (map prettyPrint (S.toList s)))
− src/CSPM/Compiler/Map.hs
@@ -1,32 +0,0 @@-{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}-module CSPM.Compiler.Map ( - Map,- lookup,- empty,- insert,- domain, unSafeLookup,- toList,- fromList,- Relation, applyRelation-) where--import Data.List (nub)-import Prelude hiding (lookup)-import Util.PartialFunctions---- TODO-type Relation k v = Map k v-type Map k v = PartialFunction k v--instance (Eq k, Eq v) => Eq (Map k v) where- m1 == m2 = and [lookup k m1 == lookup k m1 | k <- domain m1]- -lookup k m = safeApply m k-empty = []-insert k v m = (k,v):m-domain m = nub (functionDomain m)-unSafeLookup k m = case lookup k m of- Just v -> v- Nothing -> error "no value"-toList = id-fromList = id
− src/CSPM/Compiler/Processes.hs
@@ -1,166 +0,0 @@--- | This module provides the input data structure to the compiler.-module CSPM.Compiler.Processes (- Proc(..), - ProcOperator(..), - ProcName(..),- prettyPrintAllRequiredProcesses,-) where--import qualified CSPM.Compiler.Map as M-import qualified CSPM.Compiler.Set as S-import CSPM.Compiler.Events-import CSPM.DataStructures.Names-import {-# SOURCE #-} CSPM.Evaluator.Values-import Util.PrettyPrint---- | ProcNames uniquely identify processes.-data ProcName = ProcName {- -- | The name of this process (recal Name s are unique).- name :: Name,- -- | The arguments applied to this process, in case it was a function- -- call.- arguments :: [[Value]]- }--instance Eq ProcName where- pn1 == pn2 = name pn1 == name pn2 && arguments pn1 == arguments pn2-instance PrettyPrintable ProcName where- prettyPrint (ProcName n args) =- prettyPrint n- <> hcat (map (\as -> parens (list (map prettyPrint as))) args)-instance Show ProcName where- show pn = show (prettyPrint pn)---- | An operator that can be applied to processes.-data ProcOperator =- Chase - | Diamond - | Explicate - | Normalize - | ModelCompress- | StrongBisim - | TauLoopFactor - | WeakBisim- deriving (Eq)--instance PrettyPrintable ProcOperator where- prettyPrint Chase = text "chase"- prettyPrint Diamond = text "diamond"- prettyPrint Explicate = text "explicate"- prettyPrint Normalize = text "normal"- prettyPrint ModelCompress = text "model_compress"- prettyPrint StrongBisim = text "sbisim"- prettyPrint TauLoopFactor = text "tau_loop_factor"- prettyPrint WeakBisim = text "wbisim"--instance Show ProcOperator where- show p = show (prettyPrint p)---- | A compiled process. Note this is an infinite data structure (due to--- PProcCall) as this makes compilation easy (we can easily chase--- dependencies).-data Proc =- PAlphaParallel [(S.Set Event, Proc)]- | PException Proc (S.Set Event) Proc- | PExternalChoice [Proc]- | PGenParallel (S.Set Event) [Proc]- | PHide Proc (S.Set Event)- | PInternalChoice [Proc]- | PInterrupt Proc Proc- | PInterleave [Proc]- -- Map from event of left process, to event of right that it synchronises- -- with. (Left being p1, Right being p2 ps ps).- | PLinkParallel Proc (M.Map Event Event) Proc- | POperator ProcOperator Proc- | PPrefix Event Proc- -- Map from Old -> New event- | PRename (M.Relation Event Event) Proc- | PSequentialComp Proc Proc- | PSlidingChoice Proc Proc- -- | Labels the process this contains. This allows infinite loops to be- -- spotted.- | PProcCall ProcName Proc--instance PrettyPrintable Proc where- prettyPrint (PAlphaParallel aps) =- text "||" <+> braces (list (map (\ (a,p) -> - parens (prettyPrint a <> char ',' <+> prettyPrint p)) aps))- prettyPrint (PException p1 a p2) =- prettyPrint p1 <+> text "[|" <> prettyPrint a <> text "|>" - <+> prettyPrint p2- prettyPrint (PExternalChoice ps) =- sep (punctuateFront (text "[] ") (map prettyPrint ps))- prettyPrint (PGenParallel a ps) =- text "||" <+> brackets (prettyPrint a) - <+> braces (list (map prettyPrint ps))- prettyPrint (PHide p a) =- prettyPrint p <+> char '\\' <+> prettyPrint a- prettyPrint (PInternalChoice ps) =- sep (punctuateFront (text "|~| ") (map prettyPrint ps))- prettyPrint (PInterleave ps) =- sep (punctuateFront (text "||| ") (map prettyPrint ps))- prettyPrint (PLinkParallel p1 evm p2) =- prettyPrint p1 <+> text "[" <>- list (map (\(evLeft, evRight) -> prettyPrint evLeft <+> text "<-" - <+> prettyPrint evRight) evm)- <> text "]" <+> prettyPrint p2- prettyPrint (POperator op p) = - prettyPrint op <> parens (prettyPrint p)- prettyPrint (PPrefix e p) =- prettyPrint e <+> text "->" <+> prettyPrint p- prettyPrint (PRename evm p) =- prettyPrint p <> text "[[" - <> list (map (\ (evOld, evNew) -> - prettyPrint evOld <+> text "<-" - <+> prettyPrint evNew) evm) - <> text "]]"- prettyPrint (PSequentialComp p1 p2) =- prettyPrint p1 <+> text "->" <+> prettyPrint p2- prettyPrint (PSlidingChoice p1 p2) =- prettyPrint p1 <+> text "|>" <+> prettyPrint p2- prettyPrint (PProcCall n _) = prettyPrint n--instance Show Proc where- show p = show (prettyPrint p)---- | Given a process, returns the initial process and all processes that it--- calls.-splitProcIntoComponents :: Proc -> (Proc, [(ProcName, Proc)])-splitProcIntoComponents p =- let- explored pns n = n `elem` (map fst pns)-- exploreAll :: [(ProcName, Proc)] -> [Proc] -> [(ProcName, Proc)]- exploreAll pns [] = pns- exploreAll pns (p:ps) = exploreAll (explore pns p) ps-- explore :: [(ProcName, Proc)] -> Proc -> [(ProcName, Proc)]- explore pns (PAlphaParallel aps) = exploreAll pns ps- where ps = map snd aps- explore pns (PException p1 _ p2) = exploreAll pns [p1, p2]- explore pns (PExternalChoice ps) = exploreAll pns ps- explore pns (PGenParallel _ ps) = exploreAll pns ps- explore pns (PHide p _) = explore pns p- explore pns (PInternalChoice ps) = exploreAll pns ps- explore pns (PInterrupt p1 p2) = exploreAll pns [p1, p2]- explore pns (PInterleave ps) = exploreAll pns ps- explore pns (PLinkParallel p1 _ p2) = exploreAll pns [p1, p2]- explore pns (POperator _ p) = explore pns p- explore pns (PPrefix _ p) = explore pns p- explore pns (PRename _ p) = explore pns p- explore pns (PSequentialComp p1 p2) = exploreAll pns [p1, p2]- explore pns (PSlidingChoice p1 p2) = exploreAll pns [p1, p2]- explore pns (PProcCall n p) =- if explored pns n then pns- else explore ((n, p):pns) p- in (p, explore [] p)---- | Pretty prints the given process and all processes that it depends upon.-prettyPrintAllRequiredProcesses :: Proc -> Doc-prettyPrintAllRequiredProcesses p =- let- (pInit, namedPs) = splitProcIntoComponents p- ppNamedProc (n,p) =- hang (prettyPrint n <+> char '=') tabWidth (prettyPrint p)- in - vcat (punctuate (char '\n') ((map ppNamedProc namedPs)++[prettyPrint pInit]))
− src/CSPM/Compiler/Set.hs
@@ -1,39 +0,0 @@-module CSPM.Compiler.Set ( - Set,- null,- member,- empty,- unions,- union,- difference,- fromList, - toList,- unionMap,- split,- subseteq,-) where--import Data.List ((\\), nub)-import Prelude hiding (null)--type Set a = [a]--null s = s == []-empty = []-unions xss = nub (concat xss)-union xs ys = nub (xs ++ ys)-difference xs ys = xs \\ ys-fromList = id-toList = id-member x xs = elem x xs-subseteq xs ys = and (map (\x -> x `elem` ys) xs)--unionMap :: Ord b => (a -> Set b) -> Set a -> Set b-unionMap f = unions . map f . toList---- TODO: replace with iterOverSet :: Set a -> (a -> m b) -> m (Set b) ?-split :: Set a -> (a, Set a)-split (x:xs) = (x,xs)---{- TODO use http://hackage.haskell.org/packages/archive/hashtables/1.0.0.0/doc/html/Data-HashTable-Class.html#v:new #-}
+ src/CSPM/DataStructures/FreeVars.hs view
@@ -0,0 +1,273 @@+{-# LANGUAGE FlexibleInstances #-}+module CSPM.DataStructures.FreeVars (+ BoundNames(..), FreeVars(..)+) where++import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import Data.List+import Util.Annotated+import Util.Exception++class BoundNames a where+ boundNames :: a -> [Name]++instance BoundNames a => BoundNames (Annotated b a) where+ boundNames = boundNames . unAnnotate+instance BoundNames a => BoundNames [a] where+ boundNames = concatMap boundNames+instance BoundNames (Decl Name) where+ boundNames (FunBind n ms _) = [n]+ boundNames (PatBind p ms _) = boundNames p+ boundNames (Channel ns es) = ns+ boundNames (SubType n dcs) = [n]+ boundNames (DataType n dcs) = n : boundNames dcs+ boundNames (NameType n e) = [n]+ boundNames (External ns) = []+ boundNames (Transparent ns) = []+ boundNames (Assert _) = []+ boundNames (Module n args ds1 ds2) =+ [n] ++ case args of+ [] -> boundNames (ds1 ++ ds2)+ _ -> []+ boundNames (TimedSection _ _ ds) = boundNames ds+ boundNames (ModuleInstance _ _ _ nm _) = map fst nm+ boundNames (PrintStatement _) = []++instance BoundNames (DataTypeClause Name) where+ boundNames (DataTypeClause n _) = [n]++instance BoundNames (Pat Name) where+ boundNames (PVar n) | isNameDataConstructor n = []+ boundNames (PVar n) = [n]+ boundNames (PConcat p1 p2) = boundNames [p1,p2]+ boundNames (PDotApp p1 p2) = boundNames [p1,p2]+ boundNames (PList ps) = boundNames ps+ boundNames (PWildCard) = []+ boundNames (PTuple ps) = boundNames ps+ boundNames (PSet ps) = boundNames ps+ boundNames (PParen p) = boundNames p+ boundNames (PLit l) = []+ boundNames (PDoublePattern p1 p2) = boundNames [p1,p2]+ boundNames (PCompList ps1 Nothing _) = boundNames ps1+ boundNames (PCompList ps1 (Just (p, ps2)) _) =+ boundNames ps1 ++ boundNames p ++ boundNames ps2+ boundNames (PCompDot ps _) = boundNames ps++instance BoundNames (Stmt Name) where+ boundNames (Qualifier e) = []+ boundNames (Generator p e) = boundNames p++instance BoundNames (Field Name) where+ boundNames (Input p e) = boundNames p+ boundNames (NonDetInput p e) = boundNames p+ boundNames (Output e) = []++class FreeVars a where+ freeVars :: a -> [Name]+ freeVars xs = nub (sort (freeVars' xs))+ freeVars' :: a -> [Name]++instance FreeVars a => FreeVars [a] where+ freeVars' xs = concatMap freeVars' xs+instance FreeVars a => FreeVars (Maybe a) where+ freeVars' (Just x) = freeVars' x+ freeVars' Nothing = []+instance FreeVars a => FreeVars (Annotated b a) where+ freeVars' (An _ _ inner) = freeVars' inner++instance FreeVars (Pat Name) where+ -- A variable is free iff it is a data constructor, as in all other cases+ -- it indicates that a new variable should be created, thus by definition it+ -- is not free.+ freeVars' (PVar n) | isNameDataConstructor n = [n]+ freeVars' (PVar n) = []+ freeVars' (PConcat p1 p2) = freeVars' p1 ++ freeVars' p2+ freeVars' (PDotApp p1 p2) = freeVars' [p1,p2]+ freeVars' (PList ps) = freeVars' ps+ freeVars' (PWildCard) = []+ freeVars' (PTuple ps) = freeVars' ps+ freeVars' (PSet ps) = freeVars' ps+ freeVars' (PParen p) = freeVars' p+ freeVars' (PLit l) = []+ freeVars' (PDoublePattern p1 p2) = freeVars' p1 ++ freeVars' p2+ freeVars' (PCompList ps1 Nothing _) = freeVars' ps1+ freeVars' (PCompList ps1 (Just (p, ps2)) _) =+ freeVars' ps1 ++ freeVars' p ++ freeVars' ps2+ freeVars' (PCompDot ps _) = freeVars' ps++instance FreeVars (Exp Name) where+ freeVars' (App e es) = freeVars' (e:es)+ freeVars' (BooleanBinaryOp _ e1 e2) = freeVars' [e1, e2]+ freeVars' (BooleanUnaryOp _ e) = freeVars' e+ freeVars' (Concat e1 e2) = freeVars' [e1, e2]+ freeVars' (DotApp e1 e2) = freeVars' [e1, e2]+ freeVars' (If e1 e2 e3) = freeVars' [e1, e2, e3]+ freeVars' (Lambda p e) =+ let+ fvsp = boundNames p+ depsp = freeVars p+ fvse = freeVars e+ in (fvse \\ fvsp)++depsp+ freeVars' (Let ds e) =+ let+ fvsd = freeVars ds+ newBoundVars = boundNames ds+ fvse = freeVars e+ in nub (fvse++fvsd) \\ newBoundVars+ freeVars' (Lit _) = []+ freeVars' (List es) = freeVars es+ freeVars' (ListComp es stmts) =+ let+ fvStmts = boundNames stmts+ depsStmts = freeVars stmts+ fvses' = freeVars es+ fvse = nub (fvses'++depsStmts)+ in fvse \\ fvStmts+ freeVars' (ListEnumFrom e1) = freeVars' e1+ freeVars' (ListEnumFromTo e1 e2) = freeVars' [e1,e2]+ freeVars' (ListEnumFromComp e1 stmts) = freeVarsStmts stmts [e1]+ freeVars' (ListEnumFromToComp e1 e2 stmts) = freeVarsStmts stmts [e1, e2]+ freeVars' (ListLength e) = freeVars' e+ freeVars' (Map kvs) = freeVars' (map fst kvs) ++ freeVars' (map snd kvs)+ freeVars' (MathsBinaryOp _ e1 e2) = freeVars' [e1,e2]+ freeVars' (MathsUnaryOp _ e1) = freeVars' e1+ freeVars' (Paren e) = freeVars' e+ freeVars' (Set es) = freeVars es+ freeVars' (SetComp es stmts) =+ let+ fvStmts = boundNames stmts+ depsStmts = freeVars stmts+ fvses' = freeVars es+ fvse = nub (fvses'++depsStmts)+ in fvse \\ fvStmts+ freeVars' (SetEnumComp es stmts) =+ let+ fvStmts = boundNames stmts+ depsStmts = freeVars stmts+ fvses' = freeVars es+ fvse = nub (fvses'++depsStmts)+ in fvse \\ fvStmts+ freeVars' (SetEnumFrom e1) = freeVars' e1+ freeVars' (SetEnumFromTo e1 e2) = freeVars' [e1,e2]+ freeVars' (SetEnumFromComp e1 stmts) = freeVarsStmts stmts [e1]+ freeVars' (SetEnumFromToComp e1 e2 stmts) = freeVarsStmts stmts [e1, e2]+ freeVars' (SetEnum es) = freeVars' es+ freeVars' (Tuple es) = freeVars' es+ freeVars' (Var n) = [n]+ + -- Processes+ freeVars' (AlphaParallel e1 e2 e3 e4) = freeVars' [e1,e2,e3,e4]+ freeVars' (Exception e1 e2 e3) = freeVars' [e1,e2,e3]+ freeVars' (ExternalChoice e1 e2) = freeVars' [e1,e2]+ freeVars' (GenParallel e1 e2 e3) = freeVars' [e1,e2,e3]+ freeVars' (GuardedExp e1 e2) = freeVars' [e1,e2]+ freeVars' (Hiding e1 e2) = freeVars' [e1,e2]+ freeVars' (InternalChoice e1 e2) = freeVars' [e1,e2]+ freeVars' (Interrupt e1 e2) = freeVars' [e1,e2]+ freeVars' (LinkParallel e1 links stmts e2) =+ let+ ds1 = freeVars [e1,e2]+ ds2 = freeVarsStmts stmts (concatMap (\ (x,y) -> x:y:[]) links)+ in ds1++ds2+ freeVars' (Interleave e1 e2) = freeVars' [e1,e2]+ freeVars' (Prefix e1 fields e2) =+ let+ depse = freeVars' [e1,e2]+ depsfields = freeVars' fields+ fvfields = boundNames fields+ fvse = nub (depsfields++depse)+ in fvse \\ fvfields+ freeVars' (Rename e1 renames stmts) =+ let+ (es, es') = unzip renames+ d1 = freeVars' e1+ d2 = freeVarsStmts stmts (es++es')+ in d1++d2+ freeVars' (SequentialComp e1 e2) = freeVars' [e1,e2]+ freeVars' (SlidingChoice e1 e2) = freeVars' [e1,e2]+ freeVars' (SynchronisingExternalChoice e1 e2 e3) = freeVars' [e1,e2,e3]+ freeVars' (SynchronisingInterrupt e1 e2 e3) = freeVars' [e1,e2,e3]++ freeVars' (ReplicatedAlphaParallel stmts e1 e2) = + freeVarsStmts stmts [e1,e2]+ freeVars' (ReplicatedInterleave stmts e1) = + freeVarsStmts stmts [e1]+ freeVars' (ReplicatedExternalChoice stmts e1) = + freeVarsStmts stmts [e1]+ freeVars' (ReplicatedInternalChoice stmts e1) = + freeVarsStmts stmts [e1]+ freeVars' (ReplicatedLinkParallel ties tiesStmts stmts e) =+ let+ (es, es') = unzip ties+ d1 = freeVarsStmts tiesStmts (es++es')+ d2 = freeVarsStmts stmts e+ -- The ties may depend on variables bound by stmts too+ fvsstmts = freeVars stmts+ in (d1 \\ fvsstmts)++d2+ freeVars' (ReplicatedParallel e1 stmts e2) =+ freeVars' e1 ++ freeVarsStmts stmts [e2]+ freeVars' (ReplicatedSequentialComp stmts e1) = freeVarsStmts stmts [e1]+ freeVars' (ReplicatedSynchronisingExternalChoice e1 stmts e2) = + freeVars' e1 ++ freeVarsStmts stmts [e2]+ + freeVars' x = panic ("TCFreeVars.hs: unrecognised exp "++show x)++-- Recall that a later stmt can depend on values that appear in an ealier stmt+-- For example, consider <x | x <- ..., f(x)>. Therefore we do a foldr to correctly+-- consider cases like <x | f(x), x <- ... >+freeVarsStmts :: FreeVars a => [TCStmt] -> a -> [Name]+freeVarsStmts [] e = freeVars e+freeVarsStmts (stmt:stmts) e =+ let+ depse = freeVarsStmts stmts e+ depsstmt = freeVars stmt+ fvstmt = boundNames stmt+ depse' = nub (depsstmt++depse)+ in depse' \\ fvstmt++instance FreeVars (Stmt Name) where+ freeVars' (Generator p e) = freeVars p ++ freeVars e+ freeVars' (Qualifier e) = freeVars e++instance FreeVars (Field Name) where+ freeVars' (Input p e) = freeVars p ++ freeVars e+ freeVars' (NonDetInput p e) = freeVars p ++ freeVars e+ freeVars' (Output e) = freeVars e++instance FreeVars (Decl Name) where+ freeVars' (FunBind n ms _) = freeVars ms+ freeVars' (PatBind p e _) = freeVars p ++ freeVars e+ freeVars' (Channel ns es) = freeVars es+ freeVars' (DataType n cs) = freeVars [cs]+ freeVars' (SubType n cs) =+ concatMap (\ (DataTypeClause n e) -> n : freeVars e) (map unAnnotate cs)+ freeVars' (NameType n e) = freeVars' e+ freeVars' (External ns) = []+ freeVars' (Transparent ns) = []+ freeVars' (Assert a) = freeVars a+ freeVars' (Module _ _ ds1 ds2) = freeVars' ds1 ++ freeVars' ds2+ freeVars' (TimedSection (Just n) f ds) =+ n : freeVars' f ++ concatMap freeVars' ds+ freeVars' (ModuleInstance _ n _ _ _) = [n]+ freeVars' (PrintStatement _) = []++instance FreeVars (Assertion Name) where+ freeVars' (Refinement e1 m e2 opts) = freeVars [e1, e2] ++ freeVars opts+ freeVars' (PropertyCheck e1 p m) = freeVars [e1]+ freeVars' (ASNot a) = freeVars a++instance FreeVars (ModelOption Name) where+ freeVars' (TauPriority e) = freeVars' e+ +instance FreeVars (Match Name) where+ freeVars' (Match ps e) =+ let+ fvs1 = boundNames ps+ depsPs = freeVars ps+ fvs2 = freeVars e+ in (fvs2 \\ fvs1) ++ depsPs++instance FreeVars (DataTypeClause Name) where+ freeVars' (DataTypeClause n Nothing) = []+ freeVars' (DataTypeClause n (Just e)) = freeVars' e
src/CSPM/DataStructures/Literals.hs view
@@ -7,11 +7,17 @@ data Literal = -- | An integer. This is finite size, as per the FDR spec. Int Int- -- | A boolean (TODO: remove).+ -- | A boolean. | Bool Bool- deriving (Eq, Show)+ -- | A character.+ | Char Char+ -- | A string.+ | String String+ deriving (Eq, Ord, Show) instance PrettyPrintable Literal where prettyPrint (Int n) = int n prettyPrint (Bool True) = text "true" prettyPrint (Bool False) = text "false"+ prettyPrint (Char c) = quotes (char c)+ prettyPrint (String s) = doubleQuotes (text s)
src/CSPM/DataStructures/Names.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses,+ TypeSynonymInstances #-} -- | Names used by the evaluator. This is heavily inspired by GHC. module CSPM.DataStructures.Names ( -- * Data Types@@ -12,13 +13,16 @@ isNameDataConstructor, ) where +import Control.Applicative import Control.Monad.Trans+import Data.Hashable import Data.IORef import Data.Supply import Data.Typeable import System.IO.Unsafe import Util.Annotated+import qualified Util.MonadicPrettyPrint as M import Util.PrettyPrint -- | A name that occurs in the source code somewhere.@@ -28,15 +32,26 @@ instance PrettyPrintable OccName where prettyPrint (OccName s) = text s+instance (Applicative m, Monad m) => M.MonadicPrettyPrintable m OccName where+ prettyPrint (OccName s) = M.text s -- | A name that has not yet been renamed. Created by the parser. data UnRenamedName = UnQual OccName+ | Qual {+ unRenamedNameModuleName :: OccName,+ unRenamedNameMemberName :: UnRenamedName+ } deriving (Eq, Ord, Show, Typeable) instance PrettyPrintable UnRenamedName where prettyPrint (UnQual n) = prettyPrint n+ prettyPrint (Qual mn n) = prettyPrint mn <> text "::" <> prettyPrint n +instance (Applicative m, Monad m) => M.MonadicPrettyPrintable m UnRenamedName where+ prettyPrint (UnQual n) = M.prettyPrint n+ prettyPrint (Qual mn n) = M.prettyPrint mn M.<> M.text "::" M.<> M.prettyPrint n+ -- | A renamed name and is the exclusive type used after the renamer. Names -- are guaranteed to be unique, meaning that two names are equal iff they -- refer to the same binding instance. For example, consider the following CSPM@@ -59,7 +74,7 @@ -- | The type of this name. nameType :: NameType, -- | The original occurence of this name (used for error messages).- nameOccurrence :: !OccName,+ nameFullyQualified :: !UnRenamedName, -- | Where this name was defined. If this occurs in a pattern, then it -- will be equal to the location of the pattern, otherwise it will be -- equal to the location of the definition that this name binds to.@@ -84,33 +99,37 @@ instance Eq Name where n1 == n2 = nameUnique n1 == nameUnique n2 +instance Hashable Name where+ hash n = nameUnique n+ instance Ord Name where compare n1 n2 = compare (nameUnique n1) (nameUnique n2) instance PrettyPrintable Name where- prettyPrint n = prettyPrint (nameOccurrence n)+ prettyPrint n = prettyPrint (nameFullyQualified n)+instance (Applicative m, Monad m) => M.MonadicPrettyPrintable m Name where+ prettyPrint n = M.prettyPrint (nameFullyQualified n) instance Show Name where show n = show (prettyPrint n) nameUniqueSupply :: IORef (Supply Int)-nameUniqueSupply = unsafePerformIO (do+nameUniqueSupply = unsafePerformIO $ do s <- newNumSupply- newIORef s)+ newIORef s+{-# NOINLINE nameUniqueSupply #-} takeNameUnique :: MonadIO m => m Int takeNameUnique = do- s <- liftIO $ readIORef nameUniqueSupply- let (s1, s2) = split2 s- liftIO $ writeIORef nameUniqueSupply s2- return $ supplyValue s1+ s <- liftIO $ atomicModifyIORef nameUniqueSupply split2+ return $ supplyValue s -mkExternalName :: MonadIO m => OccName -> SrcSpan -> Bool -> m Name+mkExternalName :: MonadIO m => UnRenamedName -> SrcSpan -> Bool -> m Name mkExternalName o s b = do u <- takeNameUnique return $ Name ExternalName o s u b -mkInternalName :: MonadIO m => OccName -> SrcSpan -> m Name+mkInternalName :: MonadIO m => UnRenamedName -> SrcSpan -> m Name mkInternalName o s = do u <- takeNameUnique return $ Name InternalName o s u False@@ -119,12 +138,12 @@ mkFreshInternalName = do u <- takeNameUnique let s = 'i':show u- return $ Name InternalName (OccName s) Unknown u False+ return $ Name InternalName (UnQual (OccName s)) Unknown u False -mkWiredInName :: MonadIO m => OccName -> Bool -> m Name+mkWiredInName :: MonadIO m => UnRenamedName -> Bool -> m Name mkWiredInName o b = do u <- takeNameUnique- return $ Name WiredInName o Unknown u b+ return $ Name WiredInName o BuiltIn u b -- | Does the given Name correspond to a data type or a channel definition. isNameDataConstructor :: Name -> Bool
src/CSPM/DataStructures/Syntax.hs view
@@ -7,8 +7,8 @@ -- (sometimes) with their type (but only after type checking). This is done -- using the 'Annotated' datatype. module CSPM.DataStructures.Syntax (- -- * Modules- Module(..),+ -- * Files+ CSPMFile(..), allAssertionsInFile, allPrintStatementsInFile, -- * Declarations Decl(..), Match(..), -- ** Assertions@@ -37,17 +37,22 @@ -- | Interactive statements are intended to be input by an interactive -- editor. InteractiveStmt(..),+ -- * Type Annotations+ STypeScheme(..), STypeConstraint(..), SType(..), -- * Type Synonyms -- | As the types are parameterised over the type of names it can be -- laborious to type the names. Therefore, some shortcuts are provided.- AnModule(..), AnDecl(..), AnMatch(..), AnPat(..), AnExp(..), AnField(..),- AnStmt(..), AnDataTypeClause(..), AnAssertion(..), AnInteractiveStmt(..),+ AnCSPMFile, AnDecl, AnMatch, AnPat, AnExp, AnField,+ AnStmt, AnDataTypeClause, AnAssertion, AnInteractiveStmt, AnSTypeScheme,+ AnSTypeConstraint, AnSType, -- ** Pre-Renaming Types- PModule(..), PDecl(..), PMatch(..), PPat(..), PExp(..), PField(..),- PStmt(..), PDataTypeClause(..), PAssertion(..), PInteractiveStmt(..),+ PCSPMFile, PDecl, PMatch, PPat, PExp, PField,+ PStmt, PDataTypeClause, PAssertion, PInteractiveStmt, PSTypeScheme,+ PSTypeConstraint, PSType, -- ** Post-Renaming Types- TCModule(..), TCDecl(..), TCMatch(..), TCPat(..), TCExp(..), TCField(..),- TCStmt(..), TCDataTypeClause(..), TCAssertion(..), TCInteractiveStmt(..),+ TCCSPMFile, TCDecl, TCMatch, TCPat, TCExp, TCField,+ TCStmt, TCDataTypeClause, TCAssertion, TCInteractiveStmt, TCSTypeScheme,+ TCSTypeConstraint, TCSType, -- * Helpers getType, getSymbolTable, ) where@@ -58,9 +63,8 @@ import Util.Annotated import Util.Exception --- P = post parsing, TC = post typechecking, An = annotated-type AnModule id = Annotated () (Module id) -- Declarations may bind multiple names+type AnCSPMFile id = Annotated () (CSPMFile id) type AnDecl id = Annotated (Maybe SymbolTable, PSymbolTable) (Decl id) type AnMatch id = Annotated () (Match id) type AnPat id = Annotated () (Pat id)@@ -70,6 +74,9 @@ type AnDataTypeClause id = Annotated () (DataTypeClause id) type AnAssertion id = Annotated () (Assertion id) type AnInteractiveStmt id = Annotated () (InteractiveStmt id)+type AnSTypeScheme id = Annotated () (STypeScheme id)+type AnSTypeConstraint id = Annotated () (STypeConstraint id)+type AnSType id = Annotated () (SType id) getType :: Annotated (Maybe Type, PType) a -> Type getType an = case fst (annotation an) of@@ -81,7 +88,7 @@ Just t -> t Nothing -> panic "Cannot get the symbol table of something that is not typechecked" -type PModule = AnModule UnRenamedName+type PCSPMFile = AnCSPMFile UnRenamedName type PDecl = AnDecl UnRenamedName type PMatch = AnMatch UnRenamedName type PPat = AnPat UnRenamedName@@ -91,8 +98,11 @@ type PDataTypeClause = AnDataTypeClause UnRenamedName type PAssertion = AnAssertion UnRenamedName type PInteractiveStmt = AnInteractiveStmt UnRenamedName+type PSTypeScheme = AnSTypeScheme UnRenamedName+type PSTypeConstraint = AnSTypeConstraint UnRenamedName+type PSType = AnSType UnRenamedName -type TCModule = AnModule Name+type TCCSPMFile = AnCSPMFile Name type TCDecl = AnDecl Name type TCMatch = AnMatch Name type TCPat = AnPat Name@@ -102,14 +112,36 @@ type TCDataTypeClause = AnDataTypeClause Name type TCAssertion = AnAssertion Name type TCInteractiveStmt = AnInteractiveStmt Name+type TCSTypeScheme = AnSTypeScheme Name+type TCSTypeConstraint = AnSTypeConstraint Name+type TCSType = AnSType Name -- *************************************************************************--- Modules+-- Files -- *************************************************************************-data Module id = - GlobalModule [AnDecl id]- deriving (Eq, Show)+data CSPMFile id = CSPMFile [AnDecl id]+ deriving (Eq, Ord, Show) +allAssertionsInFile :: AnCSPMFile a -> [AnAssertion a]+allAssertionsInFile (An _ _ (CSPMFile ds)) =+ let+ assertionsInDecl' = assertionsInDecl . unAnnotate+ assertionsInDecl (Assert a) = [a]+ assertionsInDecl (Module _ _ dsps dsps') =+ concatMap assertionsInDecl' dsps +++ concatMap assertionsInDecl' dsps'+ assertionsInDecl (TimedSection _ _ ds) =+ concatMap assertionsInDecl' ds+ assertionsInDecl _ = []+ in concatMap assertionsInDecl' ds++allPrintStatementsInFile :: AnCSPMFile a -> [Located String]+allPrintStatementsInFile (An _ _ (CSPMFile ds)) =+ let+ printStatementsInDecl (An loc _ (PrintStatement s)) = [L loc s]+ printStatementsInDecl _ = []+ in concatMap printStatementsInDecl ds+ -- ************************************************************************* -- Expressions -- *************************************************************************@@ -122,19 +154,19 @@ | GreaterThan | LessThanEq | GreaterThanEq- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data UnaryBooleanOp = Not- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data UnaryMathsOp = Negate- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data BinaryMathsOp = Divide | Minus | Mod | Plus | Times- deriving (Eq, Show)+ deriving (Eq, Ord, Show) -- | An expression. data Exp id =@@ -177,7 +209,7 @@ } -- | Lambda functions, e.g. @\(x,y) \@ e(x,y)@. | Lambda {- lambdaBindingPattern :: AnPat id,+ lambdaBindingPatterns :: [AnPat id], lambdaRightHandSide :: AnExp id } -- | Let declarations, e.g. @let func = e1 within e2@.@@ -207,10 +239,27 @@ listEnumFromToLowerBound :: AnExp id, listEnumFromToUpperBound :: AnExp id }+ -- | List of integers from the given value, concatenating all adjacent+ -- lists, e.g. @<x.. | x <- <0>>@.+ | ListEnumFromComp {+ listEnumFromCompLowerBound :: AnExp id,+ listEnumFromCompStatements :: [AnStmt id]+ }+ -- | List of integers between the given values, concatenating all items into+ -- one list, e.g. @<x..y | (x,y) <- <(0,1)>>@.+ | ListEnumFromToComp {+ listEnumFromToCompLowerBound :: AnExp id,+ listEnumFromToCompUpperBound :: AnExp id,+ listEnumFromToCompStatements :: [AnStmt id]+ } -- | The length of the list, e.g. @#list@. | ListLength { listLengthExpression :: AnExp id }+ -- | A literal map, e.g. @(| 1 => 2 |)@.+ | Map {+ mapKeyValuePairs :: [(AnExp id, AnExp id)]+ } -- | Application of binary maths operator, e.g. @x+y@. | MathsBinaryOp { mathsBinaryOpOperator :: BinaryMathsOp,@@ -256,6 +305,19 @@ -- | The upper bound. setEnumFromToUpperBound :: AnExp id }+ -- | Set of integers from the given value, concatenating all adjacent+ -- sets, e.g. @{x.. | x <- {0}}@.+ | SetEnumFromComp {+ setEnumFromCompLowerBound :: AnExp id,+ setEnumFromCompStatements :: [AnStmt id]+ }+ -- | Set of integers between the given values, concatenating all items into+ -- one set, e.g. @{x..y | (x,y) <- {(0,1)}}@.+ | SetEnumFromToComp {+ setEnumFromToCompLowerBound :: AnExp id,+ setEnumFromToCompUpperBound :: AnExp id,+ setEnumFromToCompStatements :: [AnStmt id]+ } -- | Tuples, e.g. @(1,2)@. | Tuple { tupleItems :: [AnExp id]@@ -356,6 +418,18 @@ slidingChoiceLeftProcess :: AnExp id, slidingChoiceRightProcess :: AnExp id }+ -- | Synchronising external choice, e.g. @P [+A+] Q@.+ | SynchronisingExternalChoice {+ synchronisingExternalChoiceLeftProcess :: AnExp id,+ synchronisingExternalChoiceAlphabet :: AnExp id,+ synchronisingExternalChoiceRightProcess :: AnExp id+ }+ -- | Synchronising interrupt, e.g. @P /+A+\ Q@.+ | SynchronisingInterrupt {+ synchronisingInterruptLeftProcess :: AnExp id,+ synchronisingInterruptAlphabet :: AnExp id,+ synchronisingInterruptRightProcess :: AnExp id+ } -- Replicated Operators -- | Replicated alphabetised parallel, e.g. @|| x : X \@ [| A(x) |] P(x)@.@@ -398,13 +472,32 @@ repParReplicatedStatements :: [AnStmt id], repParProcess :: AnExp id }- + -- | Replicated sequential choice, e.g. @; x : <0,1> \@ P(x)@.+ | ReplicatedSequentialComp {+ repSeqCompStatements :: [AnStmt id],+ repSeqCompProcess :: AnExp id+ }+ -- | Replicated synchronising external choice, e.g. @[+ A +] x : X \@ P(x)@.+ | ReplicatedSynchronisingExternalChoice {+ repSynchronisingExtChoiceAlphabet :: AnExp id,+ repSynchronisingExtChoiceReplicatedStatements :: [AnStmt id],+ repSynchronisingExtChoiceProcess :: AnExp id+ }+ -- | Used only for parsing - never appears in an AST. | ExpPatWildCard -- | Used only for parsing - never appears in an AST. | ExpPatDoublePattern (AnExp id) (AnExp id)++ -- | A timed prefix - only appears after desugaring.+ | TimedPrefix {+ -- | The name used to recurse back to this process.+ timedPrefixRecursionName :: id,+ -- | The original Prefix clause (it MUST be a regular Prefix).+ timedPrefixOriginalPrefix :: AnExp id+ } - deriving (Eq, Show)+ deriving (Eq, Ord, Show) data Field id = -- | @!x@@@ -413,19 +506,19 @@ | Input (AnPat id) (Maybe (AnExp id)) -- | @$x:A@ (see P395 UCS) | NonDetInput (AnPat id) (Maybe (AnExp id))- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data Stmt id = Generator (AnPat id) (AnExp id) | Qualifier (AnExp id)- deriving (Eq, Show)+ deriving (Eq, Ord, Show) -- | A statement in an interactive session. data InteractiveStmt id = Evaluate (AnExp id)- | Bind (AnDecl id)- | RunAssertion (Assertion id)- deriving Show+ | Bind [AnDecl id]+ | RunAssertion (AnAssertion id)+ deriving (Eq, Ord, Show) -- ************************************************************************* -- Declarations@@ -433,11 +526,11 @@ data Decl id = -- | A function binding, e.g. @func(x,y)(z) = 0@.- FunBind id [AnMatch id]+ FunBind id [AnMatch id] (Maybe (AnSTypeScheme id)) -- | The binding of a pattern to an expression, e.g. @(p,q) = e@.- | PatBind (AnPat id) (AnExp id)+ | PatBind (AnPat id) (AnExp id) (Maybe (AnSTypeScheme id)) -- | An assertion in a file, e.g. @assert P [T= Q@.- | Assert (Assertion id)+ | Assert (AnAssertion id) -- | An import of an external function, e.g. @external test@, | External { externalImportedNames :: [id]@@ -450,11 +543,46 @@ | Channel [id] (Maybe (AnExp id)) -- | A datatype declaration, e.g. @datatype T = Clause1 | Clause2@. | DataType id [AnDataTypeClause id]+ -- | A subtype declaration, e.g. @subtype T = Clause1 | Clause2@.+ | SubType id [AnDataTypeClause id] -- | A nametype declaration, e.g. @nametype T2 = T.T@. | NameType id (AnExp id)- deriving (Eq, Show)+ -- | A module declaration, e.g. @module X(Y,Z) ... export ... endmodule@.+ | Module {+ moduleName :: id,+ moduleArguments :: [AnPat id],+ modulePrivateDeclarations :: [AnDecl id],+ moduleExportedDeclarations :: [AnDecl id]+ }+ -- | A timed section, e.g. @Timed(f) { P = a -> b -> P }@.+ | TimedSection {+ -- | The tock instance used - set by the renamer.+ timedSectionTockName :: Maybe Name,+ timedSectionFunction :: Maybe (AnExp id),+ timedSectionContents :: [AnDecl id]+ }+ -- | A type annotation for the given names. This is only used inside the+ -- parser and never appears in outside ASTs.+ | ParsedTypeAnnotation [id] (AnSTypeScheme id)+ -- | A module instance declaration, e.g. @instance M1 = M2(E1, ..., EN)+ | ModuleInstance {+ -- | The name of the module instance.+ moduleInstanceName :: id,+ -- | The name of the module this is an instance of.+ moduleInstanceOf :: id,+ -- | The arguments of the module that this is an instance of.+ moduleInstanceOfArguments :: [AnExp id],+ -- | Map from name of this module to name of inner module.+ moduleInstanceNameMap :: [(id, id)],+ -- | The module that this is an instance of+ moduleInstanceOfDeclaration :: Maybe (AnDecl id)+ }+ -- | A print statement, e.g. @print x@.+ | PrintStatement {+ printStatement :: String+ }+ deriving (Eq, Ord, Show) --- TODO: annotate data Assertion id = -- | A refinement assertion, e.g. @assert P [F= Q@. Refinement {@@ -470,11 +598,9 @@ propertyCheckProperty :: SemanticProperty, propertyCheckModel :: Maybe Model }- -- | A boolean assertion, not currently supported.- | BoolAssertion (AnExp id) -- | The negation of an assertion, not currently supported.- | ASNot (Assertion id)- deriving (Eq, Show)+ | ASNot (AnAssertion id)+ deriving (Eq, Ord, Show) data Model = Traces @@ -484,19 +610,18 @@ | RefusalsDivergences | Revivals | RevivalsDivergences- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data ModelOption id = TauPriority (AnExp id)- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data SemanticProperty = DeadlockFreedom | Deterministic | LivelockFreedom- deriving (Eq, Show)+ deriving (Eq, Ord, Show) --- TODO: annotate -- | The clause of a datatype, e.g. if a datatype declaration was: -- -- > datatype T = A.Int.Bool | B.Bool | C@@ -512,7 +637,7 @@ -- clause for A would have "Int.Bool" as its type expression. dataTypeClauseTypeExpression :: Maybe (AnExp id) }- deriving (Eq, Show)+ deriving (Eq, Ord, Show) -- | Matches occur on the left hand side of a function declaration and there -- is one 'Match' for each clause of the declaration. For example, given the@@ -532,7 +657,7 @@ -- | The expression to be evaluated if the match succeeds. matchRightHandSide :: AnExp id }- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data Pat id = -- | The concatenation of two patterns, e.g. @p1^p2@.@@ -606,5 +731,42 @@ pDotItems :: [AnPat id], pDotOriginalpattern :: Pat id }+ deriving (Eq, Ord, Show) - deriving (Eq, Show)+-- | A syntatic type scheme.+data STypeScheme id =+ STypeScheme {+ stypeSchemeFreeVars :: [id],+ stypeSchemeTypeConstraints :: [AnSTypeConstraint id],+ stypeSchemeType :: AnSType id+ }+ deriving (Eq, Ord, Show)++-- | A syntatic type constraint.+data STypeConstraint id =+ STypeConstraint {+ stypeConstraintName :: Constraint,+ stypeConstraintVariable :: id+ }+ deriving (Eq, Ord, Show)++-- | A syntatic type.+data SType id =+ STVar id+ | STExtendable (AnSType id) id+ | STSet (AnSType id)+ | STSeq (AnSType id)+ | STDot (AnSType id) (AnSType id)+ | STTuple [AnSType id]+ | STFunction [AnSType id] (AnSType id)+ | STDotable (AnSType id) (AnSType id)+ | STParen (AnSType id)+ | STMap (AnSType id) (AnSType id)++ | STDatatype id+ | STProc+ | STInt+ | STBool+ | STChar+ | STEvent+ deriving (Eq, Ord, Show)
− src/CSPM/DataStructures/Tokens.hs
@@ -1,199 +0,0 @@-module CSPM.DataStructures.Tokens (- Token(..), LToken, Model(..),-)-where--import CSPM.DataStructures.Syntax (Model(..))-import CSPM.PrettyPrinter-import Util.Annotated-import Util.PrettyPrint--data Token = - TInteger Int- | TFalse- | TTrue- | TIdent String-- | TRefines Model- | TModel Model- | TTauPriority- | TDeadlockFree- | TDivergenceFree- | TLivelockFree- | TDeterministic-- | TNewLine- | TDefineEqual-- | TComma- | TDot- | TExclamationMark- | TQuestionMark- | TDollar- | TPipe- | TDoubleDot- | TColon- | TDrawnFrom- | TTie -- "<->"-- | TDoubleAt- | TWildCard-- | TIf- | TThen- | TElse- | TLet- | TWithin- | TBackSlash- | TLambdaDot- | TChannel- | TAssert- | TDataType- | TExternal- | TTransparent- | TNameType-- | TSemiColon- | TGuard-- | TNot- | TAnd- | TOr- | TEq- | TNotEq- | TLtEq- | TGtEq- | TLt- | TGt- | TPlus- | TMinus- | TTimes- | TDivide- | TMod- | TCloseSeq- | TEmptySeq-- | TConcat- | THash-- | TLParen- | TRParen- | TLBrace- | TRBrace- | TLPipeBrace- | TRPipeBrace- | TLDoubleSqBracket- | TRDoubleSqBracket- | TLPipeSqBracket- | TRPipeSqBracket- | TLSqBracket- | TRSqBracket - - | TExtChoice- | TIntChoice- | TInterleave- | TPrefix- | TInterrupt- | TSlidingChoice- | TRException- | TParallel-- | TEOF- deriving Eq- -type LToken = Located Token--instance Show Token where- show t = show (prettyPrint t)--instance PrettyPrintable Token where- prettyPrint (TInteger i) = int i- prettyPrint TFalse = text "false"- prettyPrint TTrue = text "true"- prettyPrint (TIdent s) = text s-- prettyPrint (TRefines m) = char '[' <> prettyPrint m <> char '='- prettyPrint (TModel m) = char '[' <> prettyPrint m <> char ']'- prettyPrint TTauPriority = text "tau priority"- prettyPrint TDeadlockFree = text "deadlock free"- prettyPrint TDivergenceFree = text "divergence free"- prettyPrint TLivelockFree = text "livelock free"- prettyPrint TDeterministic = text "deterministic"-- prettyPrint TNewLine = text "<newline>"- prettyPrint TDefineEqual = char '='-- prettyPrint TComma = char ','- prettyPrint TDot = char '.'- prettyPrint TExclamationMark = char '!'- prettyPrint TQuestionMark = char '?'- prettyPrint TDollar = char '$'- prettyPrint TPipe = char '|'- prettyPrint TDoubleDot = text ".."- prettyPrint TColon = char ':'- prettyPrint TDrawnFrom = text "<-"- prettyPrint TTie = text "<->"-- prettyPrint TDoubleAt = text "@@"- prettyPrint TWildCard = char '_'-- prettyPrint TIf = text "if"- prettyPrint TThen = text "then"- prettyPrint TElse = text "else"- prettyPrint TLet = text "let"- prettyPrint TWithin = text "within"- prettyPrint TBackSlash = char '\\'- prettyPrint TLambdaDot = char '@'- prettyPrint TChannel = text "channel"- prettyPrint TAssert = text "assert"- prettyPrint TDataType = text "datatype"- prettyPrint TExternal = text "external"- prettyPrint TTransparent = text "transparent"- prettyPrint TNameType = text "nametype"-- prettyPrint TSemiColon = char ';'- prettyPrint TGuard = char '&'-- prettyPrint TNot = text "not"- prettyPrint TAnd = text "and"- prettyPrint TOr = text "or"- prettyPrint TEq = text "=="- prettyPrint TNotEq = text "!="- prettyPrint TLtEq = text "<="- prettyPrint TGtEq = text ">="- prettyPrint TLt = char '<'- prettyPrint TGt = char '>'- prettyPrint TPlus = char '+'- prettyPrint TMinus = char '-'- prettyPrint TTimes = char '*'- prettyPrint TDivide = char '/'- prettyPrint TMod = char '%'- prettyPrint TCloseSeq = char '<'- prettyPrint TEmptySeq = text "<>"-- prettyPrint TConcat = char '^'- prettyPrint THash = char '#'-- prettyPrint TLParen = char '('- prettyPrint TRParen = char ')'- prettyPrint TLBrace = char '{'- prettyPrint TRBrace = char '}'- prettyPrint TLPipeBrace = text "{|"- prettyPrint TRPipeBrace = text "|}"- prettyPrint TLDoubleSqBracket = text "[["- prettyPrint TRDoubleSqBracket = text "]]"- prettyPrint TLPipeSqBracket = text "[|"- prettyPrint TRPipeSqBracket = text "|]"- prettyPrint TLSqBracket = text "["- prettyPrint TRSqBracket = text "]"- - prettyPrint TExtChoice = text "[]"- prettyPrint TIntChoice = text "|~|"- prettyPrint TInterleave = text "|||"- prettyPrint TPrefix = text "->"- prettyPrint TInterrupt = text "/\\"- prettyPrint TSlidingChoice = text "[>"- prettyPrint TRException = text "|>"- prettyPrint TParallel = text "||"-- prettyPrint TEOF = text "EOF"
src/CSPM/DataStructures/Types.hs view
@@ -1,9 +1,14 @@+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses,+ TypeSynonymInstances #-} module CSPM.DataStructures.Types ( -- * Data Structures TypeVar, TypeScheme(..), Constraint(..), Type(..), TypeVarRef(..),- prettyPrintTypes,+ prettyPrintTypes, isRigid, constraintImpliedBy, reduceConstraints,+ collectConstraints,+ -- * Creation of Types- freshTypeVar, freshTypeVarWithConstraints,+ freshTypeVar, freshTypeVarWithConstraints, freshTypeVarRef,+ freshRigidTypeVarWithConstraints, -- * Symbol Tables SymbolTable, PSymbolTable, freshPSymbolTable, readPSymbolTable, @@ -13,29 +18,60 @@ PType, freshPType, readPType, setPType, ) where -import Control.Monad.Trans+import Control.Monad.Reader import Data.IORef import Data.List+import qualified Data.Map as Mp import Data.Supply import System.IO.Unsafe import CSPM.DataStructures.Names+import qualified Util.MonadicPrettyPrint as M+import Util.Exception import Util.PartialFunctions+import Util.Precedence+import Util.Prelude import Util.PrettyPrint -- ************************************************************************* -- Types -- *************************************************************************-newtype TypeVar = TypeVar Int deriving (Eq, Show)+newtype TypeVar = TypeVar Int deriving (Eq, Ord, Show) +instance PrettyPrintable TypeVar where+ prettyPrint (TypeVar x) = int x+ data TypeScheme =- ForAll [(TypeVar, [Constraint])] Type+ ForAll {+ typeSchemeVariables :: [(TypeVar, [Constraint])],+ typeSchemeType :: Type+ } deriving (Eq, Show) data Constraint =- Eq | Ord | Inputable+ -- | Comparable for equality+ CEq+ -- | Orderable+ | COrd + -- | Can be input on a channel+ | CInputable+ -- | Can form sets of the type.+ | CSet+ -- | Is something that can be yielded on the right hand side of =>.+ | CYieldable deriving (Eq, Ord, Show) +constraintImpliedBy :: Constraint -> Constraint -> Bool+constraintImpliedBy c1 c2 | c1 == c2 = True+constraintImpliedBy CSet CEq = True+constraintImpliedBy _ _ = False++reduceConstraints :: [Constraint] -> [Constraint]+reduceConstraints cs = + case [c | c <- cs, c' <- cs, c /= c', constraintImpliedBy c c'] of+ [] -> cs+ (c:_) -> reduceConstraints (cs \\ [c])+ -- During Type Checking we use TDotable a b only when a is something -- atomic. Except, during unification we start doing TDotable (TDot...) -- and may build up large TDotable a b types.@@ -44,12 +80,39 @@ | TProc | TInt | TBool+ | TChar | TEvent- -- Something that can be extended to an event (only used internally)- | TEventable+ -- | Something that can be extended via some means to a given type.+ --+ -- After type-checking, the TypeVarRef will simply be a variable that+ -- contains Nothing. This means that it can be converted into an explicit+ -- TDotable via some unknown means, or directly to the return type.+ --+ -- The variable argument here has a slightly special role during+ -- unification. If it contains Nothing then this is extendable via some+ -- unknown means to the specified type. If it contains a TDotable argt rt,+ -- then we know that one of the arguments is argt, and the remaining+ -- arguments are rt, which must either be a Dotable or a variable. The+ -- meaning in the former sense is recursive, the meaning in the latter case+ -- is clear. If it contains TVar tvref, then this means tvref has replaced+ -- this argument variable.+ --+ -- We need to do the above as we may have multiple things that are+ -- extendable in the same way, so we need to sync the arguments together.+ | TExtendable {+ extendableUltimateType :: Type,+ extendableArgument :: TypeVarRef+ }+ -- | This type is used only during type-checking, and is guaranteed to only+ -- ever appear at the top-level of the left-hand side of a TExtendable.+ | TExtendableEmptyDotList | TSet Type | TSeq Type | TDot Type Type+ | TMap {+ mapKeyType :: Type,+ mapValueType :: Type+ } | TTuple [Type] -- Arguments to result type | TFunction [Type] Type@@ -57,17 +120,33 @@ -- with an a to yield something of type b | TDotable Type Type | TDatatype Name- deriving (Eq, Show)+ deriving (Eq, Ord, Show) data TypeVarRef = - TypeVarRef TypeVar [Constraint] PType+ TypeVarRef {+ typeVar :: TypeVar,+ constraints :: [Constraint],+ typePointer :: PType+ }+ | RigidTypeVarRef {+ typeVar :: TypeVar,+ constraints :: [Constraint],+ rigidName :: Name+ } instance Eq TypeVarRef where- (TypeVarRef tv1 cs1 pt1) == (TypeVarRef tv2 cs2 pt2) = tv1 == tv2-+ tvref1 == tvref2 = typeVar tvref1 == typeVar tvref2+instance Ord TypeVarRef where+ compare tvref1 tvref2 = compare (typeVar tvref1) (typeVar tvref2) instance Show TypeVarRef where- show (TypeVarRef tv cs _) = "TypeVarRef "++show tv ++ show cs+ show (TypeVarRef tv cs _) = "TypeVarRef "++show tv++" "++show cs+ show (RigidTypeVarRef tv cs n) =+ "RigidTypeVarRef "++show tv ++" "++show cs++" "++show n +isRigid :: TypeVarRef -> Bool+isRigid (RigidTypeVarRef _ _ _) = True+isRigid _ = False + typeVarSupply :: IORef (Supply Int) typeVarSupply = unsafePerformIO (do s <- newNumSupply@@ -75,23 +154,26 @@ takeTypeVarFromSupply :: MonadIO m => m TypeVar takeTypeVarFromSupply = do- s <- liftIO $ readIORef typeVarSupply- let (s1, s2) = split2 s- liftIO $ writeIORef typeVarSupply s2- return $ TypeVar $ supplyValue s1+ s <- liftIO $ atomicModifyIORef typeVarSupply split2+ return $ TypeVar $ supplyValue s freshTypeVar :: MonadIO m => m Type freshTypeVar = freshTypeVarWithConstraints [] -freshTypeVarWithConstraints :: MonadIO m => [Constraint] -> m Type-freshTypeVarWithConstraints cs = do+freshTypeVarRef :: MonadIO m => [Constraint] -> m TypeVarRef+freshTypeVarRef cs = do tv <- takeTypeVarFromSupply ioRef <- freshPType- return $ TVar (TypeVarRef tv cs ioRef)+ return $ TypeVarRef tv cs ioRef +freshTypeVarWithConstraints :: MonadIO m => [Constraint] -> m Type+freshTypeVarWithConstraints cs = freshTypeVarRef cs >>= return . TVar +freshRigidTypeVarWithConstraints :: MonadIO m => Name -> [Constraint] -> m Type+freshRigidTypeVarWithConstraints n cs = do+ tv <- takeTypeVarFromSupply+ return $ TVar (RigidTypeVarRef tv cs n) -newtype IORefMaybe a = IORefMaybe (Maybe a) type SymbolTable = PartialFunction Name TypeScheme type PType = IORef (Maybe Type) type PSymbolTable = IORef SymbolTable@@ -115,80 +197,152 @@ freshPSymbolTable = liftIO $ newIORef [] instance PrettyPrintable Constraint where- prettyPrint Eq = text "Eq"- prettyPrint Ord = text "Ord"- prettyPrint Inputable = text "Inputable"+ prettyPrint CEq = text "Eq"+ prettyPrint COrd = text "Ord"+ prettyPrint CInputable = text "Inputable"+ prettyPrint CSet = text "Set"+ prettyPrint CYieldable = text "Yieldable" -- | Pretty prints several types using the same variable substitutions prettyPrintTypes :: [Type] -> [Doc]-prettyPrintTypes ts = map (prettyPrintType vmap) ts+prettyPrintTypes ts = map (flip runReader vmap . M.prettyPrint) ts where vs = (nub . map fst . concatMap collectConstraints) ts+ tvrefs = map -- | Map from int to letter to improve presentation- vmap = zip (map (\ (TypeVar n) -> n) vs) ['a'..'z']+ vmap = variableMapForTypeVars vs +type VarMap = Mp.Map TypeVar Doc++variableMapForTypeVars :: [TypeVarRef] -> VarMap+variableMapForTypeVars tvs = + let+ (rigid, nonRigid) = partition isRigid tvs++ extract (RigidTypeVarRef _ _ n) = [show n]+ usedCharacterStrings = concatMap extract rigid++ gen :: Int -> [Char] -> [Char] -> [Doc]+ gen n xs [] = gen (n+1) xs xs+ gen 1 xs (y:ys) = char y : gen 1 xs ys+ gen n xs (y:ys) = text (y:show (n-1)) : gen n xs ys++ notUsed xs = not (show xs `elem` usedCharacterStrings)+ initialGen = if length rigid > 0 then 1 else 0+ availableStrings = filter notUsed (gen initialGen ['a'..'z'] [])++ vs = map (\ (RigidTypeVarRef tv _ n) -> (tv, prettyPrint n)) rigid+ ++ zip (map typeVar nonRigid) availableStrings+ in Mp.fromList vs+ instance PrettyPrintable Type where- prettyPrint t = prettyPrint (ForAll (collectConstraints t) t)+ prettyPrint t = prettyPrint (ForAll ts t)+ where ts = [(typeVar tv, cs) | (tv, cs) <- collectConstraints t] +instance Precedence Type where+ precedence (TDotable _ _) = 2+ precedence (TExtendable _ _) = 2+ precedence (TDot _ _) = 1+ precedence (TMap _ _) = 1++ precedence (TVar _) = 0+ precedence (TFunction _ _) = 0+ precedence (TSeq _) = 0+ precedence (TSet _) = 0+ precedence (TTuple _) = 0+ precedence (TDatatype _) = 0+ precedence TBool = 0+ precedence TInt = 0+ precedence TProc = 0+ precedence TEvent = 0+ precedence TChar = 0++ associativity (TDotable _ _) = AssocRight+ associativity (TExtendable _ _) = AssocRight+ associativity (TDot _ _) = AssocLeft+ associativity _ = AssocNone++ sameOperator (TDotable _ _) (TDotable _ _) = True+ sameOperator (TExtendable _ _) (TExtendable _ _) = True+ sameOperator (TDot _ _) (TDot _ _) = True+ sameOperator (TMap _ _) (TMap _ _) = True+ sameOperator (TVar _) (TVar _) = True+ sameOperator (TFunction _ _) (TFunction _ _) = True+ sameOperator (TSeq _) (TSeq _) = True+ sameOperator (TSet _) (TSet _) = True+ sameOperator (TTuple _) (TTuple _) = True+ sameOperator (TDatatype _) (TDatatype _) = True+ sameOperator TBool TBool = True+ sameOperator TInt TInt = True+ sameOperator TProc TProc = True+ sameOperator TEvent TEvent = True+ sameOperator TChar TChar = True+ sameOperator _ _ = False++instance M.MonadicPrettyPrintable (Reader VarMap) Type where+ prettyPrint (TVar tvref) = do+ st <- ask+ return $! case Mp.lookup (typeVar tvref) st of+ Just c -> c+ Nothing -> prettyPrint (typeVar tvref)+ prettyPrint (TFunction targs tr) =+ M.parens (M.list (mapM M.prettyPrint targs))+ M.<+> M.text "->" M.<+> M.prettyPrint tr+ prettyPrint (TSeq t) =+ M.char '<' M.<> M.prettyPrint t M.<> M.char '>'+ prettyPrint (TSet t) =+ M.braces (M.prettyPrint t)+ prettyPrint (TTuple ts) =+ M.parens (M.list (mapM M.prettyPrint ts))+ prettyPrint (TMap k v) =+ M.text "Map" M.<+> M.prettyPrint k M.<+> M.prettyPrint v+ prettyPrint (op@(TDot t1 t2)) =+ M.ppBinaryOp' op (M.char '.') t1 t2+ prettyPrint (op@(TDotable t1 t2)) = M.ppBinaryOp' op (M.text "=>") t1 t2+ prettyPrint (TDatatype n) = M.prettyPrint n+ prettyPrint TBool = M.text "Bool"+ prettyPrint TInt = M.text "Int"+ prettyPrint TProc = M.text "Proc"+ prettyPrint TEvent = M.text "Event"+ prettyPrint TChar = M.text "Char"+ prettyPrint (op@(TExtendable t tvref)) =+ M.ppBinaryOp' op (M.text "=>*") (TVar tvref) t+ instance PrettyPrintable TypeScheme where prettyPrint (ForAll ts t) =- (if length varsWithCs > 0 then - (if length varsWithCs > 1 then parens constraintsText - else constraintsText)- <+> text "=> "- else empty)- <> prettyPrintType vmap t+ case varsWithCs of+ [] -> empty+ [x] -> constraintsText <+> text "=> "+ _ -> parens constraintsText <+> text "=> "+ <> runReader (M.prettyPrint t) vmap where -- | Map from int to letter to improve presentation- vmap = zip (map (\ (TypeVar n, _) -> n) ts) ['a'..'z']- -- | Vars with constraints- varsWithCs = [(v, c) | (v, cs) <- ts, c <- cs, cs /= []]-- constraintsText = - hsep (- punctuate comma [- prettyPrint c <+> char (apply vmap n)- | (TypeVar n, c) <- varsWithCs]- )--prettyPrintType :: PartialFunction Int Char -> Type -> Doc-prettyPrintType vmap (TVar (TypeVarRef (TypeVar n) cs ioref)) = - case safeApply vmap n of- Just c -> char c- Nothing -> int n-prettyPrintType vmap (TFunction targs tr) = - parens (hsep (punctuate comma (map (prettyPrintType vmap) targs)))- <+> text "->" <+> prettyPrintType vmap tr-prettyPrintType vmap (TSeq t) =- char '<' <> prettyPrintType vmap t <> char '>'-prettyPrintType vmap (TSet t) =- char '{' <> prettyPrintType vmap t <> char '}'-prettyPrintType vmap (TTuple ts) =- parens (hsep (punctuate comma (map (prettyPrintType vmap) ts)))-prettyPrintType vmap (TDot t1 t2) =- (case t1 of- TDotable _ _ -> parens (prettyPrintType vmap t1)- _ -> prettyPrintType vmap t1- ) <> text "." <> prettyPrintType vmap t2-prettyPrintType vmap (TDotable t1 t2) =- prettyPrintType vmap t1 <> text "=>" <> prettyPrintType vmap t2-prettyPrintType vmap (TDatatype n) = prettyPrint n+ vmap = variableMapForTypeVars (map fst (collectConstraints t)) -prettyPrintType vmap (TBool) = text "Bool"-prettyPrintType vmap (TInt) = text "Int"-prettyPrintType vmap (TProc) = text "Proc"-prettyPrintType vmap (TEvent) = text "Event"-prettyPrintType vmap (TEventable) = text "Event or Channel"+ -- | Vars with constraints+ varsWithCs = [(v, c) | (v, cs) <- nub (sortConstraints ts),+ c <- reduceConstraints cs, cs /= []]+ compareConstraints (tv1, cs1) (tv2, cs2) =+ compare (show $ Mp.lookup tv1 vmap) (show $ Mp.lookup tv2 vmap)+ `thenCmp` compare cs1 cs2+ sortConstraints = sortBy compareConstraints+ constraintsText = list [+ prettyPrint c <+>+ case Mp.lookup tv vmap of+ Just x -> x+ Nothing -> panic "Could not pretty print type"+ | (tv, c) <- varsWithCs] -collectConstraints :: Type -> [(TypeVar, [Constraint])]+collectConstraints :: Type -> [(TypeVarRef, [Constraint])] collectConstraints = combine . collect where- combine :: [(TypeVar, [Constraint])] -> [(TypeVar, [Constraint])]+ combine :: [(TypeVarRef, [Constraint])] -> [(TypeVarRef, [Constraint])] combine xs = map (\ ys -> (head (map fst ys), nub (concat (map snd ys)))) (groupBy (\ (v1, _) (v2, _) -> v1 == v2) xs)- collect :: Type -> [(TypeVar, [Constraint])]- collect (TVar (TypeVarRef v cs _)) = [(v, cs)]++ collect :: Type -> [(TypeVarRef, [Constraint])]+ collect (TVar tvref) = [(tvref, constraints tvref)] collect (TFunction targs tr) = concatMap collect targs ++ collect tr collect (TSeq t) = collect t@@ -196,9 +350,12 @@ collect (TTuple ts) = concatMap collect ts collect (TDot t1 t2) = collect t1 ++ collect t2 collect (TDotable t1 t2) = collect t1 ++ collect t2+ collect (TMap k v) = collect k ++ collect v collect (TDatatype _) = [] collect TBool = [] collect TInt = [] collect TProc = [] collect TEvent = []- collect TEventable = []+ collect TChar = []+ collect (TExtendable t tvref) =+ (tvref, constraints tvref) : collect t
src/CSPM/Desugar.hs view
@@ -1,182 +1,488 @@ {-# LANGUAGE FlexibleInstances #-}-module CSPM.Desugar where+module CSPM.Desugar (Desugarable(..), runDesugar) where +import Control.Monad.State+import Data.List (nub, sort)+import qualified Data.Map as M+import Data.Maybe (fromJust)+import Data.Tuple (swap)+ import CSPM.DataStructures.Literals import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax import CSPM.DataStructures.Types import CSPM.PrettyPrinter+import CSPM.Prelude import Util.Annotated import Util.Exception-import Util.PrettyPrint+import Util.Monad+import Util.PrettyPrint hiding (($$)) +class FreeVars a where+ freeVars :: a -> [Name]++instance FreeVars a => FreeVars (Annotated b a) where+ freeVars (An loc _ inner) = freeVars inner++instance FreeVars (Pat Name) where+ freeVars (PConcat p1 p2) = freeVars p1++freeVars p2+ freeVars (PCompList p1 p2 _) = concatMap freeVars p1 ++ + case p2 of+ Just (p2, ps) -> freeVars p2 ++ concatMap freeVars ps+ Nothing -> []+ freeVars (PCompDot ps _) = concatMap freeVars ps+ freeVars (PDotApp p1 p2) = freeVars p1++freeVars p2+ freeVars (PDoublePattern p1 p2) = freeVars p1++freeVars p2+ freeVars (PList ps) = concatMap freeVars ps+ freeVars (PLit l) = []+ freeVars (PParen p) = freeVars p+ freeVars (PSet ps) = concatMap freeVars ps+ freeVars (PTuple ps) = concatMap freeVars ps+ freeVars (PVar n) | isNameDataConstructor n = []+ freeVars (PVar n) = [n]+ freeVars (PWildCard) = []++data DesugarState = DesugarState {+ inTimedSection :: Bool,+ currentLoc :: SrcSpan,+ variableSubstitution :: M.Map Name Name,+ parentSubstitutionForModules :: M.Map Name (M.Map Name Name)+ }++type DesugarMonad = StateT DesugarState IO++runDesugar :: MonadIO m => DesugarMonad a -> m a+runDesugar prog = liftIO $+ runStateT prog (DesugarState False Unknown M.empty M.empty) >>= return . fst++maybeTimedSection :: DesugarMonad a -> DesugarMonad a -> DesugarMonad a+maybeTimedSection nonTimed timed = do+ b <- gets inTimedSection+ if b then timed else nonTimed++timedSection :: DesugarMonad a -> DesugarMonad a+timedSection prog = do+ inTimed <- gets inTimedSection+ modify (\st -> st { inTimedSection = True })+ a <- prog+ modify (\st -> st { inTimedSection = inTimed })+ return a++addParentModuleSubstitution :: Name -> M.Map Name Name -> DesugarMonad ()+addParentModuleSubstitution mn sub = modify (\ st -> st {+ parentSubstitutionForModules =+ M.insert mn sub (parentSubstitutionForModules st)+ })++parentModuleSubstitution :: Name -> DesugarMonad (M.Map Name Name)+parentModuleSubstitution mn = do+ m <- gets parentSubstitutionForModules+ return $! case M.lookup mn m of+ Nothing -> M.empty+ Just xs -> xs++composeSubstitutions :: M.Map Name Name -> M.Map Name Name -> M.Map Name Name+composeSubstitutions oldMap newMap =+ M.mapWithKey combine (M.union oldMap newMap)+ where combine oldValue newValue =+ case M.lookup newValue newMap of+ Nothing -> newValue+ Just x -> x++bindSubtitution :: M.Map Name Name -> DesugarMonad a -> DesugarMonad a+bindSubtitution varMap prog = do+ sub <- gets variableSubstitution+ modify (\ st -> st { variableSubstitution = composeSubstitutions sub varMap })+ a <- prog+ modify (\ st -> st { variableSubstitution = sub })+ return a++substituteName :: Name -> DesugarMonad Name+substituteName n = do+ vm <- gets variableSubstitution+ case M.lookup n vm of+ Nothing -> return $ n+ Just mn -> return $ mn+ class Desugarable a where- desugar :: a -> a- desugarWithType :: a -> Type -> a- - desugarWithType a t = desugar a+ desugar :: a -> DesugarMonad a instance Desugarable a => Desugarable [a] where- desugar xs = map desugar xs+ desugar xs = mapM desugar xs instance Desugarable a => Desugarable (Maybe a) where- desugar Nothing = Nothing- desugar (Just a) = Just (desugar a)-instance Desugarable a => Desugarable (Annotated Type a) where- desugar (An l t i) = An l t (desugarWithType i t)-instance Desugarable a => Desugarable (Annotated b a) where- desugar (An l b i) = An l b (desugar i)+ desugar Nothing = return Nothing+ desugar (Just a) = desugar a >>= return . Just++instance Desugarable a => Desugarable (Annotated (Maybe Type, PType) a) where+ desugar (An l (t, pt) i) = do+ modify (\ st -> st { currentLoc = l })+ x <- desugar i+ y <- desugar t+ return (An l (y, pt) x)++instance Desugarable a => Desugarable (Annotated () a) where+ desugar (An l b i) = do+ modify (\ st -> st { currentLoc = l })+ desugar i >>= \ x -> return (An l b x)+ instance (Desugarable a, Desugarable b) => Desugarable (a,b) where- desugar (a,b) = (desugar a, desugar b)+ desugar (a,b) = do+ a' <- desugar a+ b' <- desugar b+ return (a', b') -instance Desugarable (Module Name) where- desugar (GlobalModule ds) = GlobalModule (desugar ds)+instance Desugarable (CSPMFile Name) where+ desugar (CSPMFile ds) = return CSPMFile $$ desugarDecls ds -instance Desugarable (Decl Name) where- desugar (FunBind n ms) = FunBind n (desugar ms)- desugar (PatBind p e) = PatBind (desugar p) (desugar e)- desugar (Assert a) = Assert (desugar a)- desugar (External ns) = External ns- desugar (Transparent ns) = Transparent ns- desugar (Channel ns me) = Channel ns (desugar me)- desugar (DataType n cs) = DataType n (desugar cs)- desugar (NameType n e) = NameType n (desugar e)+desugarDecl :: TCDecl -> DesugarMonad [TCDecl]+desugarDecl (an@(An x y (PatBind p e ta))) = do+ p' <- desugar p+ e' <- desugar e+ case getSymbolTable an of+ -- Optimise by removing it+ [] -> return []+ [_] -> return [An x y (PatBind p' e' Nothing)]+ st -> do+ -- We are binding multiple things and thus need to make an extractor+ nameToBindTo <- mkFreshInternalName+ let typeOf n = head [ts | (n', ts) <- st, n' == n]+ expToBindTo = An Unknown dummyAnnotation (Var nameToBindTo)+ mkExtractorPat' n (An a b p) = An a b (mkExtractorPat n p) + mkExtractorPat n (PCompList p1 p2 pold) =+ PCompList (map (mkExtractorPat' n) p1) (+ case p2 of+ Just (p, ps) -> Just (mkExtractorPat' n p, map (mkExtractorPat' n) ps)+ Nothing -> Nothing) pold+ mkExtractorPat n (PCompDot ps pold) =+ PCompDot (map (mkExtractorPat' n) ps) pold+ mkExtractorPat n (PDoublePattern p1 p2) =+ PDoublePattern (mkExtractorPat' n p1) (mkExtractorPat' n p2)+ mkExtractorPat n (PLit l) = PLit l+ mkExtractorPat n (PSet ps) = PSet (map (mkExtractorPat' n) ps)+ mkExtractorPat n (PTuple ps) = PTuple (map (mkExtractorPat' n) ps)+ mkExtractorPat n PWildCard = PWildCard+ mkExtractorPat n (PVar n') | n == n' = PVar n+ mkExtractorPat n (PVar n') = PWildCard + newPSymTableThunk = panic "new psymbole table evaluated"+ mkExtractor n = An (loc an)+ (Just [(n, typeOf n)], newPSymTableThunk) + (PatBind (mkExtractorPat' n p') expToBindTo Nothing)+ -- TODO: calculate the correct ForAll+ etype = ForAll (panic "incorrect polymorphism") (getType e')+ newPat = An (loc an)+ (Just [(nameToBindTo, etype)], newPSymTableThunk)+ (PatBind (An Unknown dummyAnnotation (PVar nameToBindTo)) e'+ Nothing)+ extractors = map mkExtractor (freeVars p')+ return $ newPat : extractors+desugarDecl (An _ _ (Module n [] ds1 ds2)) = do+ -- We flatten here if there are no arguments (the renamer has+ -- already done the work).+ desugarDecls (ds1++ds2)+desugarDecl (d@(An _ _ (Module _ _ _ _))) = return []+desugarDecl (d@(An _ _ (ModuleInstance nax nt args nm (Just mod)))) = do+ -- We flatten here by creating new names for the arguments, substituting+ -- these in the bodies of ds1 and ds2, and then binding them using patterns.+ parentSub <- parentModuleSubstitution nt+ let An _ _ (Module _ pats ds1 ds2) = mod+ fvs = nub (sort (concatMap freeVars pats))+ freshVars <- replicateM (length fvs) mkFreshInternalName+ let sub = composeSubstitutions parentSub+ (M.fromList $ zip fvs freshVars ++ swappedNm)+ swappedNm = map swap nm+ mapM_ (\ ad -> case unAnnotate ad of+ Module mName _ _ _ ->+ case M.lookup mName sub of+ Just m -> addParentModuleSubstitution m sub+ Nothing -> panic "Could not find module"+ _ -> return ()) (ds1 ++ ds2)+ bindSubtitution sub $ do+ vm <- gets variableSubstitution+ let extractTypes' (PVar n) t = [(n, t)]+ extractTypes' (PConcat p1 p2) (TSeq t) =+ extractTypes p1 t ++ extractTypes p2 t+ extractTypes' (PDotApp p1 p2) (TDot t1 t2) =+ extractTypes p1 t1 ++ extractTypes p2 t2+ extractTypes' (PList ps) (TSeq t) =+ concatMap (\ p -> extractTypes p t) ps+ extractTypes' (PWildCard) _ = []+ extractTypes' (PTuple ps) (TTuple ts) =+ concat (zipWith extractTypes ps ts)+ extractTypes' (PSet ps) (TSet t) =+ concatMap (\ p -> extractTypes p t) ps+ extractTypes' (PParen p) t = extractTypes p t+ extractTypes' (PLit l) _ = []+ extractTypes' (PDoublePattern p1 p2) t =+ extractTypes p1 t ++ extractTypes p2 t+ extractTypes = extractTypes' . unAnnotate++ makePatBind :: TCPat -> TCExp -> TCDecl+ makePatBind p e =+ let fvs = freeVars p+ nts = extractTypes p (getType e)+ symTable = [(fromJust (M.lookup n sub), ForAll [] t)+ | (n, t) <- nts, n `elem` fvs]+ in An (loc p)+ (Just symTable, panic "New symbol table evaluated")+ (PatBind p e Nothing)+ patBinds = zipWith makePatBind pats args+ desugarDecls $ patBinds ++ ds1 ++ ds2+desugarDecl (An x y d) = do+ d' <- case d of+ FunBind n ms ta ->+ return FunBind $$ substituteName n $$ desugar ms $$ return ta+ Assert a -> return Assert $$ desugar a+ External ns -> return External $$ mapM substituteName ns+ Transparent ns -> return Transparent $$ mapM substituteName ns+ Channel ns me ->+ return Channel $$ mapM substituteName ns $$ desugar me+ DataType n cs -> return DataType $$ substituteName n $$ desugar cs+ SubType n cs -> return SubType $$ substituteName n $$ desugar cs+ NameType n e -> return NameType $$ substituteName n $$ desugar e+ TimedSection (Just n) f ds ->+ return TimedSection $$ (substituteName n >>= return . Just) $$+ desugar f $$ timedSection (desugarDecls ds)+ PrintStatement s -> return $ PrintStatement s+ return [An x y d']++desugarDecls :: [TCDecl] -> DesugarMonad [TCDecl]+desugarDecls ds = do+ ds <- concatMapM desugarDecl ds+ let substituteSymbolTable (d@(An _ (Nothing, _) _)) = return d+ substituteSymbolTable (An x (Just st, y) d) = do+ st <- mapM (\ (n, t) -> do+ n <- substituteName n+ return $! (n, t)) st+ return $ An x (Just st, y) d+ mapM substituteSymbolTable ds+ instance Desugarable (Assertion Name) where desugar (Refinement e1 m e2 opts) = - Refinement (desugar e1) m (desugar e2) (desugar opts)+ return Refinement $$ desugar e1 $$ desugar m $$ desugar e2 $$ desugar opts desugar (PropertyCheck e p m) = - PropertyCheck (desugar e) p m+ return PropertyCheck $$ desugar e $$ desugar p $$ desugar m+ desugar (ASNot a) = return ASNot $$ desugar a +instance Desugarable SemanticProperty where+ desugar e = return e+instance Desugarable Model where+ desugar m = return m instance Desugarable (ModelOption Name) where- desugar (TauPriority e) = TauPriority (desugar e)+ desugar (TauPriority e) = return TauPriority $$ desugar e instance Desugarable (DataTypeClause Name) where- desugar (DataTypeClause n me) = DataTypeClause n (desugar me)+ desugar (DataTypeClause n me) =+ return DataTypeClause $$ substituteName n $$ desugar me instance Desugarable (Match Name) where- desugar (Match pss e) = Match (desugar pss) (desugar e)+ desugar (Match pss e) = return Match $$ desugar pss $$ desugar e instance Desugarable (Exp Name) where- desugar (App e es) = App (desugar e) (desugar es)+ desugar (App e es) = return App $$ desugar e $$ desugar es desugar (BooleanBinaryOp op e1 e2) = - BooleanBinaryOp op (desugar e1) (desugar e2)+ return (BooleanBinaryOp op) $$ desugar e1 $$ desugar e2 desugar (BooleanUnaryOp op e) =- BooleanUnaryOp op (desugar e)- desugar (Concat e1 e2) = Concat (desugar e1) (desugar e2)- desugar (DotApp e1 e2) = DotApp (desugar e1) (desugar e2)- desugar (If e1 e2 e3) = If (desugar e1) (desugar e2) (desugar e3)- desugar (Lambda p e) = Lambda (desugar p) (desugar e)- desugar (Let ds e) = Let (desugar ds) (desugar e)- desugar (Lit l) = Lit (desugar l)- desugar (List es) = List (desugar es)- desugar (ListComp es stmts) = ListComp (desugar es) (desugar stmts)- desugar (ListEnumFrom e) = ListEnumFrom (desugar e)- desugar (ListEnumFromTo e1 e2) = ListEnumFromTo (desugar e1) (desugar e2)- desugar (ListLength e) = ListLength (desugar e)+ return (BooleanUnaryOp op) $$ desugar e+ desugar (Concat e1 e2) = return Concat $$ desugar e1 $$ desugar e2+ desugar (DotApp e1 e2) = return DotApp $$ desugar e1 $$ desugar e2+ desugar (If e1 e2 e3) = return If $$ desugar e1 $$ desugar e2 $$ desugar e3+ desugar (Lambda p e) = return Lambda $$ desugar p $$ desugar e+ desugar (Let ds e) = return Let $$ desugarDecls ds $$ desugar e+ desugar (Lit l) = return Lit $$ desugar l+ desugar (List es) = return List $$ desugar es+ desugar (ListComp es stmts) = return ListComp $$ desugar es $$ desugar stmts+ desugar (ListEnumFrom e) = return ListEnumFrom $$ desugar e+ desugar (ListEnumFromTo e1 e2) = return ListEnumFromTo $$ desugar e1 $$ desugar e2+ desugar (ListEnumFromComp e stmts) =+ return ListEnumFromComp $$ desugar e $$ desugar stmts+ desugar (ListEnumFromToComp e1 e2 stmts) =+ return ListEnumFromToComp $$ desugar e1 $$ desugar e2 $$ desugar stmts+ desugar (ListLength e) = return ListLength $$ desugar e+ desugar (Map kvs) = return Map $$ desugar kvs desugar (MathsBinaryOp op e1 e2) = - MathsBinaryOp op (desugar e1) (desugar e2)- desugar (MathsUnaryOp op e) = MathsUnaryOp op (desugar e)- -- We don't remove the Paren as people may pretty print a desugared- -- expression, which would then not have parenthesis needed to- -- remove ambiguity- desugar (Paren e) = unAnnotate (desugar e)- desugar (Set es) = Set (desugar es)- desugar (SetComp es stmts) = SetComp (desugar es) (desugar stmts)- desugar (SetEnum es) = SetEnum (desugar es)- desugar (SetEnumComp es stmts) = SetEnumComp (desugar es) (desugar stmts)- desugar (SetEnumFrom e) = SetEnumFrom (desugar e)- desugar (SetEnumFromTo e1 e2) = SetEnumFromTo (desugar e1) (desugar e2)- desugar (Tuple es) = Tuple (desugar es)- desugar (Var n) = Var n+ return (MathsBinaryOp op) $$ desugar e1 $$ desugar e2+ desugar (MathsUnaryOp op e) = return (MathsUnaryOp op) $$ desugar e+ desugar (Paren e) = desugar e >>= return . unAnnotate+ desugar (Set es) = return Set $$ desugar es+ desugar (SetComp es stmts) = return SetComp $$ desugar es $$ desugar stmts+ desugar (SetEnum es) = return SetEnum $$ desugar es+ desugar (SetEnumComp es stmts) = return SetEnumComp $$ desugar es $$ desugar stmts+ desugar (SetEnumFrom e) = return SetEnumFrom $$ desugar e+ desugar (SetEnumFromTo e1 e2) = return SetEnumFromTo $$ desugar e1 $$ desugar e2+ desugar (SetEnumFromComp e stmts) =+ return SetEnumFromComp $$ desugar e $$ desugar stmts+ desugar (SetEnumFromToComp e1 e2 stmts) =+ return SetEnumFromToComp $$ desugar e1 $$ desugar e2 $$ desugar stmts+ desugar (Tuple es) = return Tuple $$ desugar es+ desugar (Var n) | n == builtInName "STOP" =+ maybeTimedSection (return $ Var n) (mkApplication "TSTOP" [])+ desugar (Var n) | n == builtInName "SKIP" =+ maybeTimedSection (return $ Var n) (mkApplication "TSKIP" [])+ desugar (Var n) = substituteName n >>= return . Var desugar (AlphaParallel e1 e2 e3 e4) =- AlphaParallel (desugar e1) (desugar e2) (desugar e3) (desugar e4)+ return AlphaParallel $$ desugar e1 $$ desugar e2 $$ desugar e3 $$ desugar e4 desugar (Exception e1 e2 e3) =- Exception (desugar e1) (desugar e2) (desugar e3)- desugar (ExternalChoice e1 e2) = ExternalChoice (desugar e1) (desugar e2)+ return Exception $$ desugar e1 $$ desugar e2 $$ desugar e3+ desugar (ExternalChoice e1 e2) = return ExternalChoice $$ desugar e1 $$ desugar e2 desugar (GenParallel e1 e2 e3) =- GenParallel (desugar e1) (desugar e2) (desugar e3)- desugar (GuardedExp e1 e2) = GuardedExp (desugar e1) (desugar e2)- desugar (Hiding e1 e2) = Hiding (desugar e1) (desugar e2)- desugar (InternalChoice e1 e2) = InternalChoice (desugar e1) (desugar e2)- desugar (Interrupt e1 e2) = Interrupt (desugar e1) (desugar e2)- desugar (Interleave e1 e2) = Interleave (desugar e1) (desugar e2)+ return GenParallel $$ desugar e1 $$ desugar e2 $$ desugar e3+ desugar (GuardedExp e1 e2) = return GuardedExp $$ desugar e1 $$ desugar e2+ desugar (Hiding e1 e2) = return Hiding $$ desugar e1 $$ desugar e2+ desugar (InternalChoice e1 e2) = return InternalChoice $$ desugar e1 $$ desugar e2+ desugar (Interrupt e1 e2) = return Interrupt $$ desugar e1 $$ desugar e2+ desugar (Interleave e1 e2) = return Interleave $$ desugar e1 $$ desugar e2 desugar (LinkParallel e1 ties stmts e2) = - LinkParallel (desugar e1) (desugar ties) (desugar stmts) (desugar e2)- desugar (Prefix e1 fs e2) = Prefix (desugar e1) (desugar fs) (desugar e2)+ maybeTimedSection+ (return LinkParallel $$ desugar e1 $$ desugar ties $$ desugar stmts+ $$ desugar e2)+ (gets currentLoc >>= \ loc ->+ throwSourceError [linkedParallelTimedSectionError loc])+ desugar (Prefix e1 fs e2) = do+ dp <- return Prefix $$ desugar e1 $$ desugar fs $$ desugar e2+ maybeTimedSection+ (return dp)+ (do+ n <- mkFreshInternalName+ srcSpan <- gets currentLoc+ ptype <- freshPType+ setPType ptype TProc+ return $ TimedPrefix n (An srcSpan (Just TProc, ptype) dp)) desugar (Rename e1 ties stmts) =- Rename (desugar e1) (desugar ties) (desugar stmts)- desugar (SequentialComp e1 e2) = SequentialComp (desugar e1) (desugar e2)- desugar (SlidingChoice e1 e2) = SlidingChoice (desugar e1) (desugar e2)+ return Rename $$ desugar e1 $$ desugar ties $$ desugar stmts+ desugar (SequentialComp e1 e2) = return SequentialComp $$ desugar e1 $$ desugar e2+ desugar (SlidingChoice e1 e2) = return SlidingChoice $$ desugar e1 $$ desugar e2+ desugar (SynchronisingExternalChoice e1 e2 e3) =+ return SynchronisingExternalChoice $$ desugar e1 $$ desugar e2 $$ desugar e3+ desugar (SynchronisingInterrupt e1 e2 e3) =+ return SynchronisingInterrupt $$ desugar e1 $$ desugar e2 $$ desugar e3 desugar (ReplicatedAlphaParallel stmts e1 e2) =- ReplicatedAlphaParallel (desugar stmts) (desugar e1) (desugar e2)+ return ReplicatedAlphaParallel $$ desugar stmts $$ desugar e1 $$ desugar e2 desugar (ReplicatedInterleave stmts e) =- ReplicatedInterleave (desugar stmts) (desugar e)+ return ReplicatedInterleave $$ desugar stmts $$ desugar e desugar (ReplicatedExternalChoice stmts e) =- ReplicatedExternalChoice (desugar stmts) (desugar e)+ return ReplicatedExternalChoice $$ desugar stmts $$ desugar e desugar (ReplicatedInternalChoice stmts e) =- ReplicatedInternalChoice (desugar stmts) (desugar e)+ return ReplicatedInternalChoice $$ desugar stmts $$ desugar e desugar (ReplicatedParallel stmts e1 e2) =- ReplicatedParallel (desugar stmts) (desugar e1) (desugar e2)+ return ReplicatedParallel $$ desugar stmts $$ desugar e1 $$ desugar e2 desugar (ReplicatedLinkParallel ties tiesStmts stmts e) =- ReplicatedLinkParallel (desugar ties) (desugar tiesStmts) - (desugar stmts) (desugar e)+ maybeTimedSection+ (return ReplicatedLinkParallel $$ desugar ties $$ desugar tiesStmts+ $$ desugar stmts $$ desugar e)+ (gets currentLoc >>= \ loc ->+ throwSourceError [linkedParallelTimedSectionError loc])+ desugar (ReplicatedSequentialComp stmts e) =+ return ReplicatedSequentialComp $$ desugar stmts $$ desugar e+ desugar (ReplicatedSynchronisingExternalChoice e1 stmts e2) =+ return ReplicatedSynchronisingExternalChoice $$ desugar e1 $$ desugar stmts $$ desugar e2 instance Desugarable (Field Name) where- desugar (Output e) = Output (desugar e)- desugar (Input p e) = Input (desugar p) (desugar e)- desugar (NonDetInput p e) = NonDetInput (desugar p) (desugar e)+ desugar (Output e) = return Output $$ desugar e+ desugar (Input p e) = return Input $$ desugar p $$ desugar e+ desugar (NonDetInput p e) =+ maybeTimedSection (return NonDetInput $$ desugar p $$ desugar e)+ (do+ loc <- gets currentLoc+ throwSourceError [nondetFieldTimedSectionError loc]) instance Desugarable (Stmt Name) where- desugar (Generator p e) = Generator (desugar p) (desugar e)- desugar (Qualifier e) = Qualifier (desugar e)+ desugar (Generator p e) = return Generator $$ desugar p $$ desugar e+ desugar (Qualifier e) = return Qualifier $$ desugar e instance Desugarable (InteractiveStmt Name) where- desugar (Bind d) = Bind (desugar d)- desugar (Evaluate e) = Evaluate (desugar e)- desugar (RunAssertion a) = RunAssertion (desugar a)+ desugar (Bind d) = return Bind $$ desugarDecls d+ desugar (Evaluate e) = return Evaluate $$ desugar e+ desugar (RunAssertion a) = return RunAssertion $$ desugar a instance Desugarable (Pat Name) where desugar (PConcat p1 p2) = let combine (as1, Just (p, bs1)) (as2, Nothing) = (as1, Just (p, bs1++as2)) combine (as1, Nothing) (as2, p) = (as1++as2, p)- + combine _ _ = throwSourceError [mkErrorMessage l err]+ where+ l = loc p1+ err = prettyPrint (PConcat p1 p2) <+> + text "is not a valid sequence pattern."+ extractCompList :: TCPat -> ([TCPat], Maybe (TCPat, [TCPat])) extractCompList (An _ _ (PCompList ps mp _)) = (ps, mp) extractCompList p = ([], Just (p, []))- - (start, end) = - combine (extractCompList . desugar $ p1)- (extractCompList . desugar $ p2)- in PCompList start end (PConcat p1 p2)- desugar (PList ps) = PCompList (map desugar ps) Nothing (PList ps)+ in do+ p1' <- desugar p1+ p2' <- desugar p2+ let (start, end) = combine (extractCompList p1') (extractCompList p2')+ return $ PCompList start end (PConcat p1 p2)+ desugar (PList ps) =+ return PCompList $$ desugar ps $$ return Nothing $$ return (PList ps) desugar (PDotApp p1 p2) = let extractDotList (An _ _ (PCompDot ds _)) = ds extractDotList d = [d]- ds1 = extractDotList (desugar p1)- ds2 = extractDotList (desugar p2)- in PCompDot (ds1++ds2) (PDotApp p1 p2)+ in do+ p1' <- desugar p1+ p2' <- desugar p2+ return $ PCompDot (extractDotList p1'++extractDotList p2') (PDotApp p1 p2) desugar (PDoublePattern p1 p2) =- PDoublePattern (desugar p1) (desugar p2)- desugar (PLit l) = PLit (desugar l)+ return PDoublePattern $$ desugar p1 $$ desugar p2+ desugar (PLit (String s)) = return $+ PCompList (map (\ c -> An Unknown () (PLit (Char c))) s)+ Nothing (PLit (String s))+ desugar (PLit l) = return PLit $$ desugar l -- We don't remove the Paren as people may pretty print a desugared -- expression, which would then not have parenthesis needed to -- remove ambiguity- desugar (PParen p) = unAnnotate (desugar p)- desugar (PSet []) = PSet []- desugar (PSet [p]) = PSet [desugar p]- desugar (PSet ps) = throwSourceError [mkErrorMessage l err]- where- -- TODO: get a proper location for the whole- -- pattern- l = loc (head ps)- err = prettyPrint (PSet ps) <+> text "is not a valid set pattern as set patterns may only match at most one element."- desugar (PTuple ps) = PTuple (map desugar ps)- desugar (PVar n) = PVar n- desugar (PWildCard) = PWildCard+ desugar (PParen p) = desugar p >>= return . unAnnotate+ desugar (PSet []) = return $ PSet []+ desugar (PSet [p]) = return PSet $$ (desugar p >>= (\x -> return [x]))+ desugar (PSet ps) = do+ loc <- gets currentLoc+ throwSourceError [invalidSetPatternMessage (PSet ps) loc]+ desugar (PTuple ps) = return PTuple $$ desugar ps+ desugar (PVar n) = substituteName n >>= return . PVar+ desugar (PWildCard) = return PWildCard instance Desugarable Literal where- desugar l = l+ desugar l = return l++instance Desugarable Type where+ desugar (TVar tvref) = return $ TVar tvref+ desugar (TSet t) = return TSet $$ desugar t+ desugar (TSeq t) = return TSeq $$ desugar t+ desugar (TDot t1 t2) = return TDot $$ desugar t1 $$ desugar t2+ desugar (TMap t1 t2) = return TMap $$ desugar t1 $$ desugar t2+ desugar (TTuple ts) = return TTuple $$ desugar ts+ desugar (TFunction ts t) = return TFunction $$ desugar ts $$ desugar t+ desugar (TDatatype n) = return TDatatype $$ substituteName n+ desugar (TDotable t1 t2) = return TDotable $$ desugar t1 $$ desugar t2+ desugar (TExtendable t tvref) =+ return TExtendable $$ desugar t $$ return tvref+ desugar TInt = return TInt+ desugar TBool = return TBool+ desugar TProc = return TProc+ desugar TEvent = return TEvent+ desugar TChar = return TChar+ desugar TExtendableEmptyDotList = return TExtendableEmptyDotList++invalidSetPatternMessage :: Pat Name -> SrcSpan -> ErrorMessage+invalidSetPatternMessage pat loc = mkErrorMessage loc $+ text "The pattern" <+> prettyPrint pat <+> + text "is invalid as set patterns may only match at most one element."++linkedParallelTimedSectionError :: SrcSpan -> ErrorMessage+linkedParallelTimedSectionError loc = mkErrorMessage loc $+ text "The linked parallel operator is not allowed in a timed section."++nondetFieldTimedSectionError :: SrcSpan -> ErrorMessage+nondetFieldTimedSectionError loc = mkErrorMessage loc $+ text "A non-deterministic input (i.e. $) is not allowed in a timed section."++mkApplication :: String -> [AnExp Name] -> DesugarMonad (Exp Name)+mkApplication fn args = do+ srcSpan <- gets currentLoc+ ptype <- freshPType+ setPType ptype TProc+ return $ App (An srcSpan (Just TProc, ptype) (Var (builtInName fn))) args
src/CSPM/Evaluator.hs view
@@ -1,22 +1,44 @@ module CSPM.Evaluator ( evaluateExp, evaluateDecl, evaluateFile,- getBoundNames, addToEnvironment,+ addToEnvironment, maybeProcessNameToProcess, initEvaluator, runFromStateToState,+ EvaluatorOptions(..), defaultEvaluatorOptions,+ ProfilerOptions(..), defaultProfilerOptions, EvaluationMonad, runEvaluator, EvaluationState,+ module CSPM.Evaluator.ProcessValues,+ module CSPM.Evaluator.Values,+ module CSPM.Evaluator.ValueSet,++ ProfilingData(..), profilingData, ) where import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Types import CSPM.Evaluator.BuiltInFunctions import CSPM.Evaluator.DeclBind import CSPM.Evaluator.Environment import CSPM.Evaluator.Expr-import CSPM.Evaluator.Module+import CSPM.Evaluator.File import CSPM.Evaluator.Monad+import CSPM.Evaluator.ProcessValues+import CSPM.Evaluator.Profiler import CSPM.Evaluator.Values+import CSPM.Evaluator.ValueSet+import qualified Data.Foldable as F+import Util.Annotated +data EvaluatorOptions = EvaluatorOptions {+ runtimeRangeChecks :: Bool,+ profilerOptions :: ProfilerOptions+ }++defaultEvaluatorOptions :: EvaluatorOptions+defaultEvaluatorOptions = EvaluatorOptions {+ runtimeRangeChecks = True,+ profilerOptions = defaultProfilerOptions+ }+ runFromStateToState :: EvaluationState -> EvaluationMonad a -> (a, EvaluationState) runFromStateToState st prog = runEvaluator st $ do@@ -26,24 +48,55 @@ -- | The environment to use initially. This uses the IO monad as -- the EvaluationMonad cannot be used without a valid environment.-initEvaluator :: EvaluationState-initEvaluator = runEvaluator (EvaluationState new) $- injectBuiltInFunctions getState+initEvaluator :: EvaluatorOptions -> IO EvaluationState+initEvaluator options = do+ profilerState <- initialProfilerState (profilerOptions options)+ let initialState = EvaluationState {+ environment = new,+ CSPM.Evaluator.Monad.parentScopeIdentifier = Nothing,+ currentExpressionLocation = Unknown,+ timedSection = Nothing,+ profilerState = profilerState,+ doRuntimeRangeChecks = runtimeRangeChecks options+ }+ return $! runEvaluator initialState (injectBuiltInFunctions getState) evaluateExp :: TCExp -> EvaluationMonad Value evaluateExp e = eval e -- | Evaluates the declaration but doesn't add it to the current environment. evaluateDecl :: TCDecl -> EvaluationMonad [(Name, EvaluationMonad Value)]-evaluateDecl d = return $ bindDecls [d]+evaluateDecl d = bindDecls [d] -- | Evaluates the declaration but doesn't add it to the current environment.-evaluateFile :: [TCModule] -> EvaluationMonad [(Name, EvaluationMonad Value)]-evaluateFile ms = return $ bindModules ms--getBoundNames :: EvaluationMonad [Name]-getBoundNames = - getEnvironment >>= return . filter (\n -> nameType n == ExternalName) . map fst . toList+evaluateFile :: TCCSPMFile -> EvaluationMonad [(Name, EvaluationMonad Value)]+evaluateFile ms = bindFile ms -addToEnvironment :: [(Name, EvaluationMonad Value)] -> EvaluationMonad EvaluationState+addToEnvironment :: [(Name, EvaluationMonad Value)] ->+ EvaluationMonad EvaluationState addToEnvironment bs = addScopeAndBindM bs getState++-- | Attempts to convert a process name to a process, if possible.+maybeProcessNameToProcess :: ProcName -> EvaluationMonad (Maybe UProc)+maybeProcessNameToProcess (pn@(ProcName (SFunctionBind fn [args] Nothing))) = do+ -- Evaluate the function again+ VFunction _ func <- lookupVar fn+ let checkArgument (VInt i) = True+ checkArgument (VChar c) = True+ checkArgument (VBool b) = True+ checkArgument (VTuple vs) = F.and $ fmap checkArgument vs+ checkArgument (VList vs) = F.and $ fmap checkArgument vs+ checkArgument (VSet s) = F.and $ fmap checkArgument (toList s)+ checkArgument (VDot vs) = F.and $ fmap checkArgument vs+ checkArgument (VChannel n) = True+ checkArgument (VDataType n) = True+ checkArgument (VFunction id _) = False+ checkArgument (VProc p) = False+ if and (map checkArgument args) then do+ v <- func args+ return $ Just $ PProcCall pn (let VProc p = v in p)+ else return Nothing+maybeProcessNameToProcess _ = return Nothing++profilingData :: EvaluationMonad ProfilingData+profilingData = getProfilingData
src/CSPM/Evaluator/BuiltInFunctions.hs view
@@ -3,25 +3,30 @@ builtInName ) where -import Control.Monad+import Data.Array+import Data.List+import Control.Monad.ST+import Data.Hashable import qualified Data.Map as M+import qualified Data.Sequence as Sq -import qualified CSPM.Compiler.Set as CS import CSPM.DataStructures.Names+import CSPM.Evaluator.Dot import CSPM.Evaluator.Exceptions import CSPM.Evaluator.Monad+import CSPM.Evaluator.Profiler import CSPM.Evaluator.Values import qualified CSPM.Evaluator.ValueSet as S import CSPM.Prelude+import qualified Data.Graph.ST as G import Util.Exception--bMap = M.fromList [(stringName b, name b) | b <- builtins True]-builtInName s = M.findWithDefault (panic "builtin not found") s bMap+import Util.Prelude+import Util.PrettyPrint -builtInFunctions :: [(Name, Value)]-builtInFunctions = +builtInFunctions :: EvaluationMonad [(Name, Value)]+builtInFunctions = do+ registerCall <- maybeRegisterCall let- nameForString s = builtInName s cspm_union [VSet s1, VSet s2] = S.union s1 s2 cspm_inter [VSet s1, VSet s2] = S.intersection s1 s2 cspm_diff [VSet s1, VSet s2] = S.difference s1 s2@@ -36,25 +41,69 @@ -- | Set of all sequences over s cspm_Seq [VSet s] = S.allSequences s cspm_seq [VSet s] = S.toList s- + cspm_transpose [VSet s] = VSet $ + S.fromList [VTuple (listArray (0,1) [arr!1, arr!0]) | VTuple arr <- S.toList s]+ cspm_relational_image [VSet s] = + let f = relationalImage s + fid = FBuiltInFunction (builtInName "relational_image") [VSet s]+ in VFunction fid (\[x] -> f x >>= return . VSet)+ cspm_mtransclose [VSet s1, VSet s2] = fdrSymmetricTransitiveClosure s1 s2+ cspm_relational_inverse_image s = cspm_relational_image [cspm_transpose s]+ cspm_show [v] =+ VList (map VChar (show (prettyPrint v)))+ cspm_error [err] = throwError' $ \ srcspan _ -> mkErrorMessage srcspan $+ text "Error:" <+> prettyPrint err++ cspm_mapFromList [VList s] = VMap $+ M.fromList [(arr!0, arr!1) | VTuple arr <- s]+ cspm_mapLookup [VMap m, k] =+ case M.lookup k m of+ Just v -> return v+ Nothing -> throwError' keyNotInDomainOfMapMessage+ cspm_mapMember [VMap m, k] =+ case M.lookup k m of+ Just v -> VBool True+ Nothing -> VBool False+ cspm_mapToList [VMap m] = VList $+ [VTuple (listArray (0,1) [k, v]) | (k, v) <- M.toList m]+ cspm_mapUpdate [VMap m, k, v] = VMap $ M.insert k v m+ cspm_mapUpdateMultiple [VMap m, VList s] = VMap $+ foldr (uncurry M.insert) m [(arr!0, arr!1) | VTuple arr <- s]+ cspm_Map [VSet k, VSet v] = S.allMaps k v++ map_funcs = [+ ("mapFromList", cspm_mapFromList),+ ("mapMember", cspm_mapMember),+ ("mapToList", cspm_mapToList),+ ("mapUpdate", cspm_mapUpdate),+ ("mapUpdateMultiple", cspm_mapUpdateMultiple)+ ] cspm_length [VList xs] = VInt $ length xs cspm_null [VList xs] = VBool $ null xs- cspm_head [VList []] = throwError headEmptyListMessage- cspm_head [VList (x:xs)] = x- cspm_tail [VList []] = throwError tailEmptyListMessage- cspm_tail [VList (x:xs)] = xs+ cspm_head [VList []] = throwError' headEmptyListMessage+ cspm_head [VList (x:xs)] = return x+ cspm_tail [VList []] = throwError' tailEmptyListMessage+ cspm_tail [VList (x:xs)] = return $ VList xs cspm_concat [VList xs] = concat (map (\(VList ys) -> ys) xs) cspm_elem [v, VList vs] = VBool $ v `elem` vs csp_chaos [VSet a] = VProc chaosCall where chaosCall = PProcCall n p- n = procId (nameForString "CHAOS") [[VSet a]]+ -- | We convert the set into an explicit set as this makes+ -- comparisons faster than leaving it as a set represented as+ -- (for instance) a CompositeSet of CartProduct sets.+ n = procName $ scopeId (builtInName "CHAOS") [[VSet $ S.fromList $ S.toList a]] Nothing evSet = S.valueSetToEventSet a- branches = [PPrefix ev chaosCall | ev <- CS.toList evSet]- stopProc = PProcCall (procId (nameForString "STOP") []) csp_stop- p = PInternalChoice (stopProc:branches)- + branches :: Sq.Seq UProc+ branches = fmap (\ ev -> PUnaryOp (PPrefix ev) chaosCall) evSet+ p = POp PInternalChoice $+ Sq.fromList [csp_stop, POp PExternalChoice branches]+ csp_loop [VProc p] =+ let pn = procName $ scopeId (builtInName "loop") [[VProc p]] Nothing+ procCall = PProcCall pn (PBinaryOp PSequentialComp p procCall)+ in VProc procCall+ cspm_extensions [v] = do exs <- extensions v return $ VSet $ S.fromList exs@@ -62,25 +111,42 @@ exs <- productions v return $ VSet $ S.fromList exs + csp_prioritise _ [_, VList []] = throwError' prioritiseEmptyListMessage+ csp_prioritise cache [VProc p, VList alphas] =+ let sets = map (\ (VSet s) -> S.valueSetToEventSet s) alphas+ pop = Prioritise cache (Sq.fromList sets)+ in return $ VProc $ PUnaryOp (POperator pop) p+ csp_timed_priority [VProc p] = do+ Just (_, tn) <- gets timedSection+ let tock = UserEvent $ VDot [VChannel tn]+ pop = Prioritise True $ Sq.fromList $+ [Sq.empty, Sq.singleton tock]+ return $ VProc $ PUnaryOp (POperator pop) p+ -- | Functions that return sets set_funcs = [ ("union", cspm_union), ("inter", cspm_inter), ("diff", cspm_diff), ("Union", cspm_Union), ("Inter", cspm_Inter), ("set", cspm_set), - ("Set", cspm_Set), ("Seq", cspm_Seq)+ ("Set", cspm_Set), ("Seq", cspm_Seq),+ ("Map", cspm_Map), ("mtransclose", cspm_mtransclose) ] -- | Functions that return sequences seq_funcs = [- ("seq", cspm_seq), ("tail", cspm_tail), ("concat", cspm_concat)+ ("seq", cspm_seq), ("concat", cspm_concat) ] -- | Functions that mutate processes (like compression functions). proc_operators = [- ("chase", Chase),+ ("chase", Chase True),+ ("chase_nocache", Chase False),+ ("deter", Determinise), ("diamond", Diamond),- ("explicate", Explicate),- ("normal", Normalize),+ ("explicate", Explicate False),+ ("lazyenumerate", Explicate True),+ ("normal", Normalize False),+ ("lazynorm", Normalize True), ("model_compress", ModelCompress), ("sbisim", StrongBisim), ("tau_loop_factor", TauLoopFactor),@@ -90,29 +156,73 @@ -- | Functions that return something else other_funcs = [ ("length", cspm_length), ("null", cspm_null), - ("head", cspm_head), ("elem", cspm_elem),+ ("elem", cspm_elem), ("member", cspm_member), ("card", cspm_card),- ("empty", cspm_empty), ("CHAOS", csp_chaos)+ ("empty", cspm_empty), ("CHAOS", csp_chaos),+ ("loop", csp_loop), ("relational_image", cspm_relational_image),+ ("relational_inverse_image", cspm_relational_inverse_image),+ ("transpose", cspm_transpose), ("show", cspm_show) ] -- | Functions that require a monadic context. monadic_funcs = [- ("productions", cspm_productions), ("extensions", cspm_extensions)+ ("head", cspm_head), ("tail", cspm_tail), + ("productions", cspm_productions), ("extensions", cspm_extensions),+ ("error", cspm_error), ("TSTOP", csp_tstop), ("TSKIP", csp_tskip),+ ("timed_priority", csp_timed_priority),+ ("prioritise", csp_prioritise True),+ ("prioritise_nocache", csp_prioritise False),+ ("WAIT", csp_wait), ("mapLookup", cspm_mapLookup) ]- - mkFunc (s, f) = (nameForString s, VFunction (\ vs -> return (f vs)))- mkMonadicFunc (s, f) = (nameForString s, VFunction f) + mkFunc (s, f) = mkMonadicFunc (s, \vs -> return $ f vs)+ mkMonadicFunc (s, f) = do+ let n = builtInName s+ f' vs = registerCall n (f vs)+ return $! (n, VFunction (FBuiltInFunction n []) f')+ procs = [ ("STOP", csp_stop),- ("SKIP", PPrefix Tick (PProcCall csp_stop_id csp_stop))+ ("SKIP", csp_skip) ] - csp_skip_id = procId (nameForString "SKIP") []- csp_stop_id = procId (nameForString "STOP") []- csp_stop = PExternalChoice []- - mkProc (s, p) = (nameForString s, VProc p)+ csp_skip_id = scopeId (builtInName "SKIP") [] Nothing+ csp_stop_id = scopeId (builtInName "STOP") [] Nothing+ csp_stop =+ PProcCall (procName csp_stop_id) (POp PExternalChoice Sq.empty)+ csp_skip =+ PProcCall (procName csp_skip_id) (PUnaryOp (PPrefix Tick) csp_stop)++ csp_tstop [] = do+ Just (_, tn) <- gets timedSection+ let+ pid = procName (scopeId tn [] (Just csp_stop_id))+ proc = PUnaryOp (PPrefix (UserEvent $ VDot [VChannel tn])) pc+ pc = PProcCall pid proc+ return $ VProc pc++ csp_tskip [] = do+ Just (_, tn) <- gets timedSection+ let+ pid = procName (scopeId tn [] (Just csp_skip_id))+ proc = PUnaryOp (PPrefix (UserEvent $ VDot [VChannel tn])) pc+ pc = PProcCall pid $ POp PExternalChoice $+ proc Sq.<| csp_skip Sq.<| Sq.empty+ return $ VProc pc++ csp_wait [VInt tocks] = do+ Just (_, tn) <- gets timedSection+ VProc tskip <- csp_tskip []+ let+ mkTocker 0 = tskip+ mkTocker n =+ PUnaryOp (PPrefix (UserEvent $ VDot [VChannel tn]))+ (mkTocker (n-1))+ waitId = scopeId (builtInName "WAIT") [[VInt tocks]] Nothing+ pid = procName (scopeId tn [] (Just waitId))+ return $ VProc $ PProcCall pid $ mkTocker tocks++ mkProc (s, p) = return (builtInName s, VProc p) cspm_true = ("true", VBool True) cspm_false = ("false", VBool False)@@ -121,25 +231,76 @@ cspm_Bool = ("Bool", VSet (S.fromList [snd cspm_true, snd cspm_false])) cspm_Int = ("Int", VSet S.Integers)+ cspm_Char = ("Char", VSet (S.fromList (map VChar [minBound :: Char ..]))) cspm_Proc = ("Proc", VSet S.Processes)- cspm_Events = ("Events", panic "Events not implemented")+ cspm_Events = ("Events", VSet (S.fromList []))+ + cspm_emptyMap = ("emptyMap", VMap M.empty) constants = [ cspm_true, cspm_false, cspm_True, cspm_False,- cspm_Bool, cspm_Int, cspm_Proc, cspm_Events+ cspm_Bool, cspm_Int, cspm_Proc, cspm_Events, cspm_Char,+ cspm_emptyMap ] - mkConstant (s, v) = (nameForString s, v)- in- map mkFunc (+ mkConstant (s, v) = return (builtInName s, v)++ evaluateProcOperator pop [p] = VProc $ + -- We defer matching of the arguments here to allow definitions like+ -- P = normal(P) to be evaluated. This allows the compiler to+ -- produce a more sensible error message.+ case p of+ VProc p -> PUnaryOp (POperator pop) p++ fs1 <- mapM mkFunc ( map (\ (n, f) -> (n, VSet . f)) set_funcs ++ map (\ (n, f) -> (n, VList . f)) seq_funcs- ++ map (\ (n, po) -> - (n,\[VProc p]-> VProc $ POperator po p)) proc_operators- ++ other_funcs)- ++ map mkMonadicFunc monadic_funcs- ++ map mkProc procs- ++ map mkConstant constants+ ++ map (\ (n, po) -> (n, evaluateProcOperator po)) proc_operators+ ++ other_funcs ++ map_funcs)+ fs2 <- mapM mkMonadicFunc monadic_funcs+ fs3 <- mapM mkProc procs+ fs4 <- mapM mkConstant constants+ return $! fs1++fs2++fs3++fs4 injectBuiltInFunctions :: EvaluationMonad a -> EvaluationMonad a-injectBuiltInFunctions = addScopeAndBind builtInFunctions+injectBuiltInFunctions prog = do+ fs <- builtInFunctions+ addScopeAndBind fs prog++-- | Takes a set and returns a function from value to set of values that are+-- mapped to.+relationalImage :: S.ValueSet -> Value -> EvaluationMonad S.ValueSet+relationalImage s = + let tuples = [(hash (arr!0), hash(arr!1), arr!0, arr!1) | VTuple arr <- S.toList s]+ hashCmp (hx1,_,x1,_) (hx2,_,x2,_) = compare hx1 hx2 `thenCmp` compare x1 x2+ hashEq (hx1,_,x1,_) (hx2,_,x2,_) = hx1 == hx2 && x1 == x2+ sortedTuples = sortBy hashCmp tuples+ groupedTuples = groupBy hashEq sortedTuples+ mkResult xss = + let (hg, _, xg, _) = head xss+ -- Our keys are hashes and values as this is slightly faster+ in ((hg, xg), S.fromList (map (\(_,_,_,y) -> y) xss))+ m = M.fromList (map mkResult groupedTuples)+ lookup v = return (M.findWithDefault S.emptySet (hash v, v) m)+ in lookup++-- | Compute the 'min transitive closure' of a relation. FDR actually returns+-- something rather odd in this case. In particular, it takes a relation+-- (specified as a set of pairs), and a set. It then computes the symmetric,+-- transitive closure of the relation (note NOT reflexive). It returns a+-- relation where each element x of the second set is mapped to a representative+-- value of the second set (if one exists). As this is not reflexive it omits+-- all pairs of the form (x,x).+--+-- NOTE: FDR actually represents the second relation as (rep(x), x), for some+-- reason.+fdrSymmetricTransitiveClosure :: S.ValueSet -> S.ValueSet -> S.ValueSet+fdrSymmetricTransitiveClosure vs1 vs2 = + let computeRepresentatives = do+ let es = [(arr!0, arr!1) | VTuple arr <- S.toList vs1]+ esSym = es ++ [(a,b) | (b,a) <- es]+ nodes = map fst esSym+ g <- G.newGraph nodes esSym+ rs <- G.nonReflexiveRepresentativesForNodes g+ return $! [tupleFromList [a,b] | (b,a) <- rs, S.member a vs2, S.member b vs2]+ in S.fromList $ runST computeRepresentatives
src/CSPM/Evaluator/DeclBind.hs view
@@ -1,143 +1,194 @@ {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} module CSPM.Evaluator.DeclBind ( bindDecls, - --valuesForChannel, valuesForDataTypeClause, ) where -import Control.Monad-import Data.Maybe-import System.IO.Unsafe+import Data.List (partition) import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax+import CSPM.DataStructures.Types+import CSPM.Evaluator.BuiltInFunctions+import CSPM.Evaluator.Dot import CSPM.Evaluator.Exceptions import {-# SOURCE #-} CSPM.Evaluator.Expr import CSPM.Evaluator.Monad import CSPM.Evaluator.PatBind+import CSPM.Evaluator.Profiler import CSPM.Evaluator.Values import CSPM.Evaluator.ValueSet import Util.Annotated-import Util.Exception-import qualified Util.List as UL import Util.Monad -- | Given a list of declarations, returns a sequence of names bounds to -- values that can be passed to 'addScopeAndBind' in order to bind them in -- the current scope.-bindDecls :: [TCDecl] -> [(Name, EvaluationMonad Value)]-bindDecls ds = concatMap bindDecl ds+bindDecls :: [TCDecl] -> EvaluationMonad [(Name, EvaluationMonad Value)]+bindDecls ds = do+ registerCall <- maybeRegisterCall+ nvs <- concatMapM bindDecl ds + let eventsName = builtInName "Events"+ (eventNvs, normalNvs) = partition (\x -> fst x == eventsName) nvs+ computeEvents vs = registerCall eventsName $ do+ vss <- sequence (map snd eventNvs)+ return $ VSet $ infiniteUnions $ vs : map (\ (VSet s) -> s) vss -bindDecl :: TCDecl -> [(Name, EvaluationMonad Value)]-bindDecl (an@(An _ _ (FunBind n ms))) = [(n, collectArgs argGroupCount [])]- where- mss = map unAnnotate ms- argGroupCount = head (map (\ (Match pss e) -> length pss) mss)+ isChannelDecl (Channel _ _) = True+ isChannelDecl _ = False++ if or (map (isChannelDecl . unAnnotate) ds) then do+ -- Lookup the existing value of events and add to it+ VSet vs <- lookupVar eventsName+ return $ (eventsName, computeEvents vs) : normalNvs+ else return nvs++bindDecl :: TCDecl -> EvaluationMonad [(Name, EvaluationMonad Value)]+bindDecl (an@(An _ _ (FunBind n ms _))) = do+ parentScope <- getParentScopeIdentifier+ registerCall <- maybeRegisterCall+ let+ matches = map unAnnotate ms+ argGroupCount = head (map (\ (Match pss e) -> length pss) matches) collectArgs :: Int -> [[Value]] -> EvaluationMonad Value- collectArgs 0 ass_ = do- bss <- mapM (\ (Match pss e) -> do- let - r = zipWith bindAll pss ass- b = and (map fst r)- binds = concatMap snd r- return ((b, binds), e)- ) mss+ collectArgs 0 ass_ = let- rs :: [([(Name, Value)], TCExp)]- rs = [(bs, e) | ((True, bs), e) <- bss]- case rs of- ((binds, exp):_) ->- addScopeAndBind binds (do- v <- eval exp- case v of- VProc p -> - return $ VProc $ PProcCall (procId n ass) p- _ -> return v)- _ -> throwError $ - funBindPatternMatchFailureMessage (loc an) n ass- where- ass = reverse ass_- collectArgs n ass =- return $ VFunction $ \ vs -> collectArgs (n-1) (vs:ass)-bindDecl (an@(An _ _ (PatBind p e))) =- let- -- We put p inside the unsafePerformIO simply to prevent it being- -- lifed out of the lambda (and thus only being performed once).- nV = unsafePerformIO (p `seq` mkFreshInternalName)- {-# NOINLINE nV #-}- extractor :: Name -> EvaluationMonad Value- extractor n = do- v <- lookupVar nV- let - nvs = case bind p v of- (True, nvs) -> nvs- (False, _) -> throwError $ - patternMatchFailureMessage (loc an) p v- return $ head [v | (n', v) <- nvs, n' == n]- in (nV, eval e):[(fv, extractor fv) | fv <- freeVars p]-bindDecl (an@(An _ _ (Channel ns me))) =+ scopeName = scopeId n argGroups parentScope+ argGroups = reverse ass_+ tryMatches [] = throwError $ + funBindPatternMatchFailureMessage (loc an) n argGroups+ tryMatches (Match pss e : ms) =+ let + bindResult = zipWith bindAll pss argGroups+ (bindResults, boundValuess) = unzip bindResult+ binds = concat boundValuess+ in + if not (and bindResults) then tryMatches ms+ else+ addScopeAndBind binds $ updateParentScopeIdentifier scopeName $ do+ v <- registerCall n $ eval e+ case v of+ VProc p -> return $ VProc $ PProcCall (procName scopeName) p+ _ -> return $ v+ in tryMatches matches+ collectArgs number ass = do+ -- Make sure we save the enclosing environment (as it contains+ -- variables that we need).+ st <- gets id+ let fid = FMatchBind n (reverse ass) parentScope+ return $ VFunction fid $ \ vs ->+ (if profilerActive st then+ modify (\ st' -> st {+ -- Don't reset the profiler state+ profilerState = profilerState st'+ }) + else modify (\ _ -> st)) $ collectArgs (number-1) (vs:ass)+ return $ [(n, collectArgs argGroupCount [])]+bindDecl (an@(An _ _ (PatBind p e _))) = do+ parentScope <- getParentScopeIdentifier+ registerCall <- maybeRegisterCall+ let [(n, ForAll _ t)] = getSymbolTable an+ scopeName = scopeId n [] parentScope+ ev = maybeSave t $ updateParentScopeIdentifier scopeName $ do+ v <- registerCall n $ eval e+ case bind p v of+ (True, [(n', val)]) | n == n' -> return $!+ case val of+ VProc p -> VProc $ PProcCall (procName scopeName) p+ _ -> val+ (False, _) -> throwError $ + patternMatchFailureMessage (loc an) p v+ return $ [(n, ev)]+bindDecl (an@(An _ _ (Channel ns me))) = do+ registerCall <- maybeRegisterCall let mkChan :: Name -> EvaluationMonad Value- mkChan n = do- vss <- case me of- Just e -> eval e >>= return . evalTypeExprToList+ mkChan n = registerCall n $ do+ fields <- case me of+ Just e -> eval e >>= evalTypeExprToList n Nothing -> return []- - let arity = fromIntegral (length vss)- return $ VTuple [VDot [VChannel n], VInt arity, VList (map VList vss)]- in [(n, mkChan n) | n <- ns]-bindDecl (an@(An _ _ (DataType n cs))) =+ let arity = fromIntegral (length fields)+ return $! tupleFromList [VDot [VChannel n], VInt arity, tupleFromList (map VSet fields)]+ eventSetValue :: EvaluationMonad Value+ eventSetValue = do+ ss <- mapM (\ n -> do+ (_, _, fields) <- dataTypeInfo n+ let fs = fromList [VChannel n] : elems fields+ return $ cartesianProduct CartDot fs) ns+ return $ VSet (infiniteUnions ss)+ -- We bind to events here, and this is picked up in bindDecls+ return $ (builtInName "Events", eventSetValue) : [(n, mkChan n) | n <- ns]+bindDecl (an@(An _ _ (DataType n cs))) = do+ registerCall <- maybeRegisterCall let mkDataTypeClause :: DataTypeClause Name -> (Name, EvaluationMonad Value) mkDataTypeClause (DataTypeClause nc me) = (nc, do vss <- case me of- Just e -> eval e >>= return . evalTypeExprToList+ Just e -> eval e >>= evalTypeExprToList nc Nothing -> return [] let arity = fromIntegral (length vss)- return $ VTuple [VDot [VDataType nc], VInt arity, VList (map VList vss)])+ return $ tupleFromList [VDot [VDataType nc], VInt arity, tupleFromList (map VSet vss)]) computeSetOfValues :: EvaluationMonad Value- computeSetOfValues =+ computeSetOfValues = let mkSet nc = do- VTuple [_, _, VList fields] <- lookupVar nc- let cp = UL.cartesianProduct (map (\(VList vs) -> vs) fields)- return $ map (\vs -> VDot ((VDataType nc):vs)) cp- in do- vs <- concatMapM mkSet [nc | DataTypeClause nc _ <- map unAnnotate cs]- return $ VSet (fromList vs)- in (n, computeSetOfValues):(map mkDataTypeClause (map unAnnotate cs))-bindDecl (an@(An _ _ (NameType n e))) =- [(n, do+ (_, _, fields) <- dataTypeInfo nc+ let fs = fromList [VDataType nc] : elems fields+ return $ cartesianProduct CartDot fs+ in registerCall n $ do+ vs <- mapM mkSet [nc | DataTypeClause nc _ <- map unAnnotate cs]+ return $ VSet (infiniteUnions vs)+ return $ (n, computeSetOfValues):(map mkDataTypeClause (map unAnnotate cs))+bindDecl (an@(An _ _ (SubType n cs))) = do+ registerCall <- maybeRegisterCall+ let+ computeSetOfValues =+ let + mkSet (DataTypeClause nc me) = do+ (_, _, fields) <- dataTypeInfo nc+ fs <- case me of+ Just e -> eval e >>= evalTypeExprToList nc+ Nothing -> return []+ let s = cartesianProduct CartDot (fromList [VDataType nc] : fs)+ vs <- mapM productionsSet (toList s)+ return (infiniteUnions vs)+ in registerCall n $ do+ vs <- mapM (mkSet . unAnnotate) cs+ return $ VSet (infiniteUnions vs)+ return $ [(n, computeSetOfValues)]+bindDecl (an@(An _ _ (NameType n e))) = do+ registerCall <- maybeRegisterCall+ return $ [(n, registerCall n $ do v <- eval e- return $ VSet $ evalTypeExpr v)]--bindDecl (an@(An _ _ (Assert _))) = []-bindDecl (an@(An _ _ (External ns))) = []-bindDecl (an@(An _ _ (Transparent ns))) = []+ sets <- evalTypeExprToList n v+ -- If we only have one set then this is not a cartesian product, this is+ -- just introducing another name (see TPC P543 and+ -- evaluator/should_pass/nametypes.csp).+ case sets of+ [s] -> return $ VSet s+ _ -> return $ VSet $ cartesianProduct CartDot sets)]+bindDecl (an@(An _ _ (Assert _))) = return []+bindDecl (an@(An _ _ (External ns))) = return []+bindDecl (an@(An _ _ (Transparent ns))) = return []+bindDecl (an@(An _ _ (TimedSection (Just tn) f ds))) = do+ nds <- concatMapM bindDecl ds+ let packageDecl :: EvaluationMonad Value -> EvaluationMonad Value+ packageDecl value = do+ st <- gets id+ func <- case f of+ Just f -> do+ VFunction _ wrappedFunc <- eval f+ let func (UserEvent v) = c+ where VInt c = runEvaluator st (wrappedFunc [v])+ return func+ Nothing -> return $ \ (UserEvent _) -> 1+ return $! runEvaluator st $ setTimedCSP tn func value+ return $! map (\ (n,d) -> (n, packageDecl d)) nds+bindDecl (an@(An _ _ (PrintStatement _))) = return [] evalTypeExpr :: Value -> ValueSet evalTypeExpr (VSet s) = s-evalTypeExpr (VDot vs) = cartesianProduct VDot (map evalTypeExpr vs)-evalTypeExpr (VTuple vs) = cartesianProduct VTuple (map evalTypeExpr vs)--evalTypeExprToList :: Value -> [[Value]]-evalTypeExprToList (VDot vs) = concatMap evalTypeExprToList vs-evalTypeExprToList v = [toList (evalTypeExpr v)]--class FreeVars a where- freeVars :: a -> [Name]--instance FreeVars a => FreeVars (Annotated b a) where- freeVars (An _ _ inner) = freeVars inner+evalTypeExpr (VTuple vs) = cartesianProduct CartTuple (map evalTypeExpr (elems vs)) -instance FreeVars (Pat Name) where- freeVars (PConcat p1 p2) = freeVars p1++freeVars p2- freeVars (PDotApp p1 p2) = freeVars p1++freeVars p2- freeVars (PDoublePattern p1 p2) = freeVars p1++freeVars p2- freeVars (PList ps) = concatMap freeVars ps- freeVars (PLit l) = []- freeVars (PParen p) = freeVars p- freeVars (PSet ps) = concatMap freeVars ps- freeVars (PTuple ps) = concatMap freeVars ps- freeVars (PVar n) | isNameDataConstructor n = []- freeVars (PVar n) = [n]- freeVars (PWildCard) = []+evalTypeExprToList :: Name -> Value -> EvaluationMonad [ValueSet]+evalTypeExprToList n (VDot vs) = concatMapM (evalTypeExprToList n) vs+evalTypeExprToList n v = splitIntoFields False n (evalTypeExpr v)
+ src/CSPM/Evaluator/DeepSeq.hs view
@@ -0,0 +1,91 @@+{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}+module CSPM.Evaluator.DeepSeq () where++import Control.DeepSeq++import CSPM.Evaluator.ProcessValues+import CSPM.Evaluator.ValueSet+import CSPM.Evaluator.Values++-- In general, we don't need to worry about errors in names as we strictly+-- construct them, and strictly insert them everywhere. We also don't need to+-- worry about errors inside expressions since the desugarer is strict.++instance NFData ScopeIdentifier where+ rnf (SFunctionBind n vss s) = n `seq` rnf vss `seq` rnf s+ rnf (SVariableBind vs s) = rnf vs `seq` rnf s++instance NFData FunctionIdentifier where+ rnf (FBuiltInFunction n xs) = n `seq` rnf xs+ rnf (FLambda n p) = n `seq` rnf p+ rnf (FMatchBind n vss p) = n `seq` rnf vss `seq` rnf p++instance NFData Value where+ rnf (VInt x) = rnf x+ rnf (VChar x) = rnf x+ rnf (VBool x) = rnf x+ rnf (VTuple xs) = rnf xs+ rnf (VDot xs) = rnf xs+ rnf (VChannel n) = n `seq` ()+ rnf (VDataType n) = n `seq` ()+ rnf (VList xs) = rnf xs+ rnf (VSet xs) = rnf xs+ rnf (VMap m) = rnf m+ rnf (VFunction fid _) = rnf fid+ rnf (VProc p) = rnf p++instance NFData ValueSet where+ rnf Integers = ()+ rnf Processes = ()+ rnf (ExplicitSet s) = rnf s+ rnf (IntSetFrom x) = rnf x+ rnf (CompositeSet xs) = rnf xs+ rnf (AllSequences xs) = rnf xs+ rnf (CartesianProduct xs _) = rnf xs+ rnf (Powerset xs) = rnf xs++instance NFData UProc where+ rnf (PUnaryOp op p) = rnf op `seq` rnf p+ rnf (PBinaryOp op p1 p2) = rnf op `seq` rnf p1 `seq` rnf p2+ rnf (POp op p) = rnf op `seq` rnf p+ -- We can't do full deep evaluation here, otherwise we would spin. However,+ -- hashing and equality comparison bottom out at a PProcCall anyway.+ rnf (PProcCall pn p) = rnf pn++instance NFData UnCompiledOperator where+ rnf (PAlphaParallel evs) = rnf evs+ rnf (PException evs) = rnf evs+ rnf PExternalChoice = ()+ rnf (PGenParallel evs) = rnf evs+ rnf (PHide evs) = rnf evs+ rnf PInternalChoice = ()+ rnf PInterrupt = ()+ rnf PInterleave = ()+ rnf (PLinkParallel evm) = rnf evm+ rnf (POperator op) = rnf op+ rnf (PPrefix ev) = rnf ev+ rnf (PRename evm) = rnf evm+ rnf PSequentialComp = ()+ rnf PSlidingChoice = ()+ rnf (PSynchronisingExternalChoice evs) = rnf evs+ rnf (PSynchronisingInterrupt evs) = rnf evs++instance NFData UnCompiledProcOperator where+ rnf (Chase b) = rnf b+ rnf Determinise = ()+ rnf Diamond = ()+ rnf (Explicate b) = rnf b+ rnf (Normalize b) = rnf b+ rnf ModelCompress = ()+ rnf (Prioritise b evs) = rnf b `seq` rnf evs+ rnf StrongBisim = ()+ rnf TauLoopFactor = ()+ rnf WeakBisim = ()++instance NFData ProcName where+ rnf (ProcName s) = rnf s++instance NFData Event where+ rnf Tau = ()+ rnf Tick = ()+ rnf (UserEvent vs) = rnf vs
+ src/CSPM/Evaluator/Dot.hs view
@@ -0,0 +1,471 @@+module CSPM.Evaluator.Dot (+ combineDots, dataTypeInfo,+ extensions, extensionsSet, oneFieldExtensions,+ productions, productionsSet, splitIntoFields,+ compressIntoEnumeratedSet,+) where++import CSPM.DataStructures.Names+import {-# SOURCE #-} CSPM.Evaluator.Exceptions+import CSPM.Evaluator.Monad+import CSPM.Evaluator.Values+import CSPM.Evaluator.ValueSet hiding (cartesianProduct)+import qualified CSPM.Evaluator.ValueSet as S+import Data.List (groupBy, sortBy)+import Data.Maybe (catMaybes, isJust)+import Util.List+import Util.Prelude++dataTypeInfo :: Name -> EvaluationMonad (Value, Int, Array Int ValueSet)+dataTypeInfo n = do+ VTuple dta <- lookupVar n+ let VInt a = dta!1+ VTuple fs = dta!2+ return $ (dta!0, a, fmap (\(VSet s) -> s) fs)+{-# INLINE dataTypeInfo #-}++-- | The number of fields this datatype or channel has.+arityOfDataTypeClause :: Name -> EvaluationMonad Int+arityOfDataTypeClause n = do+ (_, a, _) <- dataTypeInfo n+ return a++-- | Returns true if the value is a complete field.+isCompleteField :: Value -> EvaluationMonad Bool+isCompleteField (v@(VDot vs)) =+ case maybeNamedDot v of+ Nothing -> return True+ Just n -> do+ arity <- arityOfDataTypeClause n+ if arity == length vs -1 then+ isCompleteField (last vs)+ else return False+isCompleteField _ = return True++-- | Takes two values and dots then together appropriately.+combineDots :: Value -> Value -> EvaluationMonad Value+combineDots v1 v2 =+ let+ -- | Dots the given value onto the right of the given base, providing+ -- the left hand value is a field.+ maybeDotFieldOn :: Value -> Value -> EvaluationMonad (Maybe Value)+ maybeDotFieldOn vbase v = do+ fields <-+ case maybeNamedDot vbase of+ Just n -> do+ (_, _, fs) <- dataTypeInfo n+ let VDot (nd:_) = vbase+ return $! S.cartesianProduct CartDot $+ fromList [nd] : elems fs+ Nothing -> return S.emptySet+ dotNamedFieldOn (maybeNamedDot vbase) fields vbase v++ dotNamedFieldOn :: Maybe Name -> ValueSet -> Value -> Value ->+ EvaluationMonad (Maybe Value)+ dotNamedFieldOn (Just n) allowedValues (VDot vs) v = do+ let fieldCount = length vs -1+ lastField = last vs+ getField ix = splitFieldSet ix (VDot vs) allowedValues+ b <- isCompleteField lastField+ arity <- arityOfDataTypeClause n+ if b then + if arity == fieldCount then return Nothing+ else do+ let newValue = VDot (vs++[v])+ fieldSet = getField fieldCount+ checkIsValidForField fieldSet newValue fieldCount v $+ return $ Just newValue+ else do+ let fieldSet = getField (fieldCount-1)+ vLast <- dotNamedFieldOn (maybeNamedDot lastField) fieldSet+ lastField v+ case vLast of+ Nothing -> return Nothing+ Just vLast -> do+ let newValue = VDot (replaceLast vs vLast)+ checkIsValidForField fieldSet newValue fieldCount vLast $+ return $ Just newValue+ dotNamedFieldOn Nothing _ _ _ = return Nothing++ checkIsValidForField :: ValueSet -> Value -> Int ->+ Value -> EvaluationMonad a -> EvaluationMonad a+ checkIsValidForField allowedSet overallValue field v result = do+ b <- gets doRuntimeRangeChecks+ if not b then result else do+ b <- isCompleteField v+ if not b then result else do+ if member v allowedSet then result+ else throwError' $+ dotIsNotValidMessage overallValue field v allowedSet++ splitFieldSet :: Int -> Value -> ValueSet -> ValueSet+ splitFieldSet ix v fieldSet =+ case fastUnDotCartProduct fieldSet of+ Just restrictByField ->restrictByField!!(ix+1)+ Nothing -> slowMatchDotPrefix (\ _ vs -> vs!!(ix+1)) fieldSet v++ -- | Dots the two values together, ensuring that if either the left or+ -- the right value is a dot list combines them into one dot list.+ -- This function assumes that any data values are not meant to be split+ -- apart.+ dotAndReduce :: Value -> Value -> Value+ -- We don't need to split v2 into fields because whenever we call+ -- this function the second value is simply being dotted onto the right+ -- and not put into a field of any sort+ dotAndReduce v1 v2 = VDot (splitIntoFields v1 ++ [v2])++ -- | Given a base value and the value of a field dots the field onto+ -- the right of the base. Assumes that the value provided is a field.+ dotFieldOn :: Value -> Value -> EvaluationMonad Value+ dotFieldOn vBase vField = do+ mv <- maybeDotFieldOn vBase vField+ case mv of+ Just v -> return v+ Nothing -> return $ dotAndReduce vBase vField+ + -- | Split a value up into the values that could be used as fields.+ splitIntoFields :: Value -> [Value]+ splitIntoFields (v@(VDot (VDataType n:_))) = [v]+ splitIntoFields (v@(VDot (VChannel n:_))) = [v]+ splitIntoFields (VDot vs) = vs+ splitIntoFields v = [v]++ -- | Given a base value and a list of many fields dots the fields onto+ -- the base. Assumes that the values provided are fields.+ dotManyFieldsOn :: Value -> [Value] -> EvaluationMonad Value+ dotManyFieldsOn v [] = return v+ dotManyFieldsOn vBase (v:vs) = do+ vBase' <- dotFieldOn vBase v+ dotManyFieldsOn vBase' vs+ in+ -- Split v2 up into its composite fields and then dot them onto v1.+ dotManyFieldsOn v1 (splitIntoFields v2)++-- | Returns an x such that ev.x has been extended by exactly one atomic field.+-- This could be inside a subfield or elsewhere.+oneFieldExtensions :: Value -> EvaluationMonad [Value]+oneFieldExtensions v =+ let+ exts :: [ValueSet] -> Value -> EvaluationMonad [Value]+ exts fieldSets (VDot vs) = do+ case maybeNamedDot (VDot vs) of+ Nothing -> return [VDot []]+ Just n -> do+ let fieldCount = length vs -1+ b <- isCompleteField (last vs)+ if b then return $!+ if length fieldSets == fieldCount then [VDot []]+ else toList (fieldSets!!fieldCount)+ else do+ let field = fieldSets!!(fieldCount-1)+ case fastUnDotCartProduct field of+ Just restrictByField ->+ exts (tail restrictByField) (last vs)+ Nothing -> return $! toList $ slowMatchDotPrefix+ (\ i v -> v!!i) field (last vs)+ exts _ _ = return [VDot []]+ in do+ case maybeNamedDot v of+ Just n -> do+ (_, _, fieldSets) <- dataTypeInfo n+ exts (elems fieldSets) v+ Nothing -> return [VDot []]++maybeNamedDot :: Value -> Maybe Name+maybeNamedDot (VDot (VChannel n : _)) = Just n+maybeNamedDot (VDot (VDataType n : _)) = Just n+maybeNamedDot _ = Nothing++-- | Takes a datatype or a channel value and then computes all x such that +-- ev.x is a full datatype/event. Each of the returned values is guaranteed+-- to be a VDot.+extensions :: Value -> EvaluationMonad [Value]+extensions v = extensionsSet v >>= return . toList++extensionsSet :: Value -> EvaluationMonad ValueSet+extensionsSet v = do+ case maybeNamedDot v of+ Nothing -> return S.emptySet+ Just n -> do+ (_, _, fieldSets) <- dataTypeInfo n+ sets <- extensionsSets (elems fieldSets) v+ return $+ case sets of+ [s] -> s+ sets -> S.cartesianProduct CartDot sets++-- | Takes a value and returns a set of fields such that ev.x is a full thing.+-- Further, the field sets are guaranteed to be representable as a full+-- carteisan product.+extensionsSets :: [ValueSet] -> Value -> EvaluationMonad [ValueSet]+extensionsSets fieldSets (VDot vs) = do+ let fieldCount = length vs - 1+ maybeWrap [v] = v+ maybeWrap vs = VDot vs+ -- Firstly, complete the last field in the current value (in case+ -- it is only half formed).+ exsLast <-+ if fieldCount == 0 || not (isJust (maybeNamedDot (last vs))) then+ return []+ else do+ b <- isCompleteField (last vs) + if b then return []+ else do+ let field = fieldSets!!(fieldCount-1)+ case fastUnDotCartProduct field of+ Just restrictByField ->+ extensionsSets (tail restrictByField) (last vs)+ Nothing -> -- Need to do a slow scan+ return $! + [slowMatchDotPrefix (\ i v -> maybeWrap (drop i v))+ field (last vs)]+ return $! exsLast ++ drop fieldCount fieldSets+extensionsSets _ _ = return []++-- | Given a set of dotted values, and a dotted value, scans the set of dotted+-- values and calls the specified function for each value that matches.+slowMatchDotPrefix :: (Int -> [Value] -> Value) -> ValueSet -> Value -> ValueSet+slowMatchDotPrefix f set (VDot vs) =+ let+ matches (VDot vs') | vs' `isProductionOf` vs = [f (length vs) vs']+ matches _ = []+ in+ fromList (concatMap matches (toList set))++-- | Given two dot lists, the second of which may be an incomplete dot-list,+-- returns True if the first is a production of the second.+isProductionOf :: [Value] -> [Value] -> Bool+isProductionOf [] _ = False+isProductionOf _ [] = True+isProductionOf (VDot h1 : vs1) [VDot h2] = + -- If we are in the last field and have a dot then the dot might also be+ -- incomplete, so we recursively check if this is a prefix+ h1 `isProductionOf` h2+isProductionOf (h1 : vs1) (h2 : vs2) = h1 == h2 && vs1 `isProductionOf` vs2++-- | Takes a datatype or a channel value and computes v.x for all x that+-- complete the value.+productions :: Value -> EvaluationMonad [Value]+productions v = productionsSet v >>= return . toList++productionsSet :: Value -> EvaluationMonad ValueSet+productionsSet v = do+ case maybeNamedDot v of+ Nothing -> return S.emptySet+ Just n -> do+ (_, _, fieldSets) <- dataTypeInfo n+ sets <- productionsSets (elems fieldSets) v+ return $! S.cartesianProduct CartDot sets+ +productionsSets :: [ValueSet] -> Value -> EvaluationMonad [ValueSet]+productionsSets fieldSets (VDot vs) = do+ let fieldCount = length vs - 1+ psLast <-+ if fieldCount == 0 then return []+ else if not (isJust (maybeNamedDot (last vs))) then return []+ else do+ b <- isCompleteField (last vs)+ if b then return []+ else do+ let field = fieldSets!!(fieldCount-1)+ case fastUnDotCartProduct field of+ Just restrictByField -> do+ sets <- productionsSets (tail restrictByField) (last vs)+ return [S.cartesianProduct CartDot sets]+ Nothing -> return+ [slowMatchDotPrefix (\ _ -> VDot) field (last vs)]++ let psSets = case psLast of+ [] -> map (\v -> fromList [v]) vs+ _ ->+ -- We cannot express this as a simple cart product, as+ -- the resulting item has dots at two levels. Thus,+ -- dot together this lot and form an explicit set,+ -- then we proceed as before+ map (\v -> fromList [v]) (init vs) ++ psLast+ return $! psSets ++ drop fieldCount fieldSets+productionsSets _ v = return []++takeFields :: Int -> [Value] -> EvaluationMonad ([Value], [Value])+takeFields 0 vs = return ([], vs)+takeFields 1 vs = do+ (f, vs) <- takeFirstField False vs+ return ([f], vs)+takeFields n vs = do+ (f, vs') <- takeFirstField False vs+ (fs, vs'') <- takeFields (n-1) vs'+ return (f:fs, vs'')++takeFirstField :: Bool -> [Value] -> EvaluationMonad (Value, [Value])+takeFirstField True (VDataType n : vs) = return (VDataType n, vs)+takeFirstField True (VChannel n : vs) = return (VChannel n, vs)+takeFirstField False (VDataType n : vs) = do+ (_, arity, fieldSets) <- dataTypeInfo n+ (fs, vs) <- takeFields arity vs+ return $ (VDot (VDataType n : fs), vs)+takeFirstField False (VChannel n : vs) = do+ (_, arity, fieldSets) <- dataTypeInfo n+ (fs, vs) <- takeFields arity vs+ return $ (VDot (VChannel n : fs), vs)+takeFirstField forceSplit (v:vs) = return (v, vs)++-- | Takes a set of dotted values (i.e. a set of VDot _) and returns a list of+-- sets such that the cartesian product is equal to the original set.+--+-- This throws an error if the set cannot be decomposed.+splitIntoFields :: Bool -> Name -> ValueSet -> EvaluationMonad [ValueSet]+splitIntoFields forceSplit n vs = do+ case unDotProduct vs of+ Just ss -> return ss+ Nothing -> manuallySplitValues forceSplit n vs (toList vs)++isDot :: Value -> Bool+isDot (VDot _ ) = True+isDot _ = False++manuallySplitValues :: Bool -> Name -> ValueSet -> [Value] ->+ EvaluationMonad [ValueSet]+manuallySplitValues forceSplit n vs (values@(VDot fs : _)) = do+ let extract (VDot vs) = vs+ -- | Splits a dot list into the separate fields.+ split :: [Value] -> EvaluationMonad [Value]+ split [] = return []+ split vs = do+ (v, vs') <- takeFirstField forceSplit vs+ ss <- split vs'+ return $ v:ss+ splitValues <- mapM (split . extract) (toList vs)+ if splitValues == [] then return [] else do+ let fieldCount = length (head splitValues)+ combine [] = replicate fieldCount []+ combine (vs:vss) = zipWith (:) vs (combine vss)+ -- | The list of values such that cart producting them together should+ -- yield the overall datatype.+ cartProductFields :: [[Value]]+ cartProductFields = combine splitValues+ -- | Given a set, recursively checks that it is ok, and reconstruct the+ -- set as a cart product.+ recursivelySplit vs = do+ if length vs > 0 && isDot (head vs)+ && length (extract (head vs)) > 1 then do+ -- We've got a dotted field - check to see if this field is+ -- recursively decomposable+ sets <- splitIntoFields True n (fromList vs)+ if length sets == 1 then return $ head sets+ else return $ S.cartesianProduct S.CartDot sets+ else return $! fromList vs++ if or (map isMixedList cartProductFields) then+ if forceSplit || length cartProductFields == 1 then return [vs]+ else throwError $ setNotRectangularErrorMessage (nameDefinition n) vs+ Nothing+ else do+ sets <- mapM recursivelySplit cartProductFields++ let cartProduct =+ if length sets == 1 && isDot (head (toList (head sets))) then do+ -- Don't wrap with extra dots if we already have some+ head sets+ else S.cartesianProduct S.CartDot sets+ if cartProduct /= vs then+ if forceSplit then + return [vs]+ else throwError $+ setNotRectangularErrorMessage (nameDefinition n) vs+ (Just cartProduct)+ else return $ sets+manuallySplitValues _ _ vs _ = return [vs]++isMixedList :: [Value] -> Bool+isMixedList [] = False+isMixedList [x] = False+isMixedList (VInt _ : (xs@(VInt _ : _))) = isMixedList xs+isMixedList (VBool _ : (xs@(VBool _ : _))) = isMixedList xs+isMixedList (VChar _ : (xs@(VChar _ : _))) = isMixedList xs+isMixedList (VTuple t1 : (xs@(VTuple t2 : _))) =+ let vs1 = elems t1+ vs2 = elems t2+ in length vs1 /= length vs2+ || or (zipWith (\ x y -> isMixedList [x,y]) vs1 vs2)+ || isMixedList xs+isMixedList (VDot vs1 : (xs@(VDot vs2 : _))) = + length vs1 /= length vs2+ || or (zipWith (\ x y -> isMixedList [x,y]) vs1 vs2)+ || isMixedList xs+isMixedList (VChannel _ : (xs@(VChannel _ : _))) = isMixedList xs+isMixedList (VDataType _ : (xs@(VDataType _ : _))) = isMixedList xs+isMixedList (VProc _ : (xs@(VProc _ : _))) = isMixedList xs+isMixedList (VList vs1 : (xs@(VList vs2 : _))) =+ (length vs1 > 0 && length vs2 > 0 && isMixedList [head vs1, head vs2])+ || isMixedList xs+isMixedList (VSet s1 : (xs@(VSet s2 : _))) =+ let vs1 = toList s1+ vs2 = toList s2+ in (length vs1 > 0 && length vs2 > 0 && isMixedList [head vs1, head vs2])+ || isMixedList xs+isMixedList _ = True++-- | Takes a set and returns a list of values xs such that +-- Union({productions(x) | x <- xs}) == xs. For example, if c is a channel of+-- type {0,1} then {c.0, c.1} would return [c].+--+-- This is primarily used for display purposes.+compressIntoEnumeratedSet :: ValueSet -> EvaluationMonad (Maybe [Value])+compressIntoEnumeratedSet vs =+ let + haveAllOfLastField :: [[Value]] -> EvaluationMonad Bool+ haveAllOfLastField ys = do+ let n = case head (head ys) of+ VDataType n -> n+ VChannel n -> n+ fieldIx = length (head ys) - 2+ (_, _, fieldSets) <- dataTypeInfo n+ if fromList (map last ys) == fieldSets!fieldIx then+ -- All values are used+ return True+ else return False++ splitGroup :: [[Value]] -> EvaluationMonad (Maybe [Value])+ splitGroup ([_]:_) = return Nothing+ splitGroup vs = do+ b <- haveAllOfLastField vs+ if b then+ -- have everything, and inits are equal, so can compress.+ -- Since the inits are equal just take the init of the first+ -- item.+ return $ Just $ init (head vs)+ else return $ Nothing++ forceRepeatablyCompress :: [[Value]] -> EvaluationMonad [Value]+ forceRepeatablyCompress vs = do+ mt <- repeatablyCompress vs+ return $! case mt of+ Just vs -> vs+ Nothing -> map VDot vs++ -- | Repeatably compresses the supplied values from the back, returning+ -- the compressed set.+ repeatablyCompress :: [[Value]] -> EvaluationMonad (Maybe [Value])+ repeatablyCompress [] = return Nothing+ repeatablyCompress vs = do+ let initiallyEqual :: [[[Value]]]+ initiallyEqual = groupBy (\ xs ys ->+ head xs == head ys && init xs == init ys) $+ sortBy (\ xs ys -> compare (head xs) (head ys)+ `thenCmp` compare (init xs) (init ys)) vs+ -- head is required above (consider [x]).+ processNothing Nothing vss = map VDot vss+ processNothing (Just _) vss = []+ gs <- mapM splitGroup initiallyEqual+ let vsDone = zipWith processNothing gs initiallyEqual+ -- Now, repeatably compress the prefixes that were equal.+ case catMaybes gs of+ [] -> return Nothing+ xs -> do+ vsRecursive <- forceRepeatablyCompress xs+ return $! Just (vsRecursive ++ concat vsDone)+ in case toList vs of+ [] -> return Nothing+ (vs @ (VDot ((VChannel _) :_) : _)) ->+ repeatablyCompress (map (\ (VDot xs) -> xs) vs)+ _ -> return Nothing -- must be a set that we cannot handle
src/CSPM/Evaluator/Environment.hs view
@@ -1,26 +1,32 @@ module CSPM.Evaluator.Environment ( Environment,- new, lookup, newLayerAndBind, toList,+ new, lookup, newLayerAndBind, ) where -import qualified Data.Map as M+import qualified Data.IntMap as M import Prelude hiding (lookup) import CSPM.DataStructures.Names import {-# SOURCE #-} CSPM.Evaluator.Values import Util.Exception -type Environment = M.Map Name Value+data Environment = Environment [M.IntMap Value] new :: Environment-new = M.empty--toList :: Environment -> [(Name, Value)]-toList = M.toList+new = Environment [] lookup :: Environment -> Name -> Value-lookup env n = M.findWithDefault (panic ("lookup not found: "++show n)) n env+lookup (Environment env) n = + let+ nv = nameUnique n+ lookupInLayers [] = panic ("lookup not found: "++show n)+ lookupInLayers (m:ms) = + case M.lookup nv m of+ Just v -> v+ Nothing -> lookupInLayers ms+ in lookupInLayers env newLayerAndBind :: Environment -> [(Name, Value)] -> Environment-newLayerAndBind env nvs = - foldr (\ (n,v) env -> M.insert n v env) env nvs+newLayerAndBind (Environment ms) nvs =+ let ms' = M.fromList [(nameUnique n, v) | (n,v) <- nvs] : ms+ in Environment ms'
src/CSPM/Evaluator/Exceptions.hs view
@@ -1,18 +1,31 @@ module CSPM.Evaluator.Exceptions where -import Data.Typeable import Prelude import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax import CSPM.PrettyPrinter+import CSPM.Evaluator.ValuePrettyPrinter () import CSPM.Evaluator.Values-import {-# SOURCE #-} CSPM.Evaluator.ValueSet+import CSPM.Evaluator.ValueSet hiding (empty) import Util.Annotated import Util.Exception import Util.PrettyPrint +printCallStack :: Maybe ScopeIdentifier -> Doc+printCallStack Nothing = text "Lexical call stack: none available"+printCallStack (Just p) =+ let ppFrame _ Nothing = empty+ ppFrame i (Just (SFunctionBind n vss p)) =+ int i <> colon <+> prettyPrint (SFunctionBind n vss Nothing)+ $$ ppFrame (i+1) p+ ppFrame i (Just (SVariableBind vs p)) =+ int i <> colon <+> prettyPrint (SVariableBind vs Nothing)+ $$ ppFrame (i+1) p+ in text "Lexical call stack:" $$ tabIndent (ppFrame 1 (Just p))++ patternMatchFailureMessage :: SrcSpan -> TCPat -> Value -> ErrorMessage patternMatchFailureMessage l pat v = mkErrorMessage l $ @@ -20,28 +33,74 @@ (prettyPrint v)) tabWidth (text "does not match the pattern" <+> prettyPrint pat) -headEmptyListMessage :: ErrorMessage-headEmptyListMessage = mkErrorMessage Unknown $ +patternMatchesFailureMessage :: SrcSpan -> [TCPat] -> [Value] -> ErrorMessage+patternMatchesFailureMessage l pat v =+ mkErrorMessage l $ + hang (hang (text "Pattern match failure: ") tabWidth+ (list (map prettyPrint v)))+ tabWidth (text "do not match the patterns" <+>+ list (map prettyPrint pat))++headEmptyListMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+headEmptyListMessage loc scope = mkErrorMessage loc $ text "Attempt to take head of empty list."+ $$ printCallStack scope -tailEmptyListMessage :: ErrorMessage-tailEmptyListMessage = mkErrorMessage Unknown $ +prioritiseEmptyListMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+prioritiseEmptyListMessage loc scope = mkErrorMessage loc $ + text "Prioritise must be called with a non-empty list."+ $$ printCallStack scope++tailEmptyListMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+tailEmptyListMessage loc scope = mkErrorMessage loc $ text "Attempt to take tail of empty list."+ $$ printCallStack scope +divideByZeroMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+divideByZeroMessage loc scope = mkErrorMessage loc $+ text "Attempt to divide by zero"+ $$ printCallStack scope++keyNotInDomainOfMapMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+keyNotInDomainOfMapMessage loc scope = mkErrorMessage loc $+ text "Lookup called on a key that is not in the domain of the map."+ $$ printCallStack scope+ funBindPatternMatchFailureMessage :: SrcSpan -> Name -> [[Value]] -> ErrorMessage funBindPatternMatchFailureMessage l n vss = mkErrorMessage l $ hang (text "Pattern match failure whilst attempting to evaluate:") tabWidth (prettyPrint n <> hcat (map (\ vs -> parens (list (map prettyPrint vs))) vss)) -replicatedInternalChoiceOverEmptySetMessage :: SrcSpan -> Exp Name -> ErrorMessage-replicatedInternalChoiceOverEmptySetMessage l p = mkErrorMessage l $+replicatedLinkParallelOverEmptySeqMessage :: Exp Name -> SrcSpan ->+ Maybe ScopeIdentifier -> ErrorMessage+replicatedLinkParallelOverEmptySeqMessage p l scope = mkErrorMessage l $ hang (+ hang (text "The sequence expression in"<>colon) tabWidth + (prettyPrint p)+ ) tabWidth+ (text "evaluated to the empty sequence. However, replicated linked parallel is not defined for the empty sequence.")+ $$ printCallStack scope++replicatedInternalChoiceOverEmptySetMessage :: Exp Name -> SrcSpan -> + Maybe ScopeIdentifier -> ErrorMessage+replicatedInternalChoiceOverEmptySetMessage p l scope = mkErrorMessage l $+ hang ( hang (text "The set expression in"<>colon) tabWidth (prettyPrint p) ) tabWidth (text "evaluated to the empty set. However, replicated internal choice is not defined for the empty set.")+ $$ printCallStack scope +replicatedInternalChoiceOverEmptySetMessage' :: Pat Name -> SrcSpan ->+ Maybe ScopeIdentifier -> ErrorMessage+replicatedInternalChoiceOverEmptySetMessage' p loc scope = mkErrorMessage loc $+ hang (+ hang (text "The pattern"<>colon) tabWidth (prettyPrint p)+ ) tabWidth+ (text "matched no elements of the channel set. However, replicated internal choice is not defined for the empty set.")+ $$ printCallStack scope+ typeCheckerFailureMessage :: String -> ErrorMessage typeCheckerFailureMessage s = mkErrorMessage Unknown $ hang (text "The program caused a runtime error that should have been caught by the typechecker:")@@ -63,22 +122,32 @@ cardOfInfiniteSetMessage vs = mkErrorMessage Unknown $ text "Attempt to take the cardinatlity of an infinite set." -cannotUnionSetsMessage :: ValueSet -> ValueSet -> ErrorMessage-cannotUnionSetsMessage vs1 vs2 = mkErrorMessage Unknown $- text "Cannot union the supplied sets."--cannotIntersectSetsMessage :: ValueSet -> ValueSet -> ErrorMessage-cannotIntersectSetsMessage vs1 vs2 = mkErrorMessage Unknown $- text "Cannot intersect the supplied sets."- cannotDifferenceSetsMessage :: ValueSet -> ValueSet -> ErrorMessage cannotDifferenceSetsMessage vs1 vs2 = mkErrorMessage Unknown $ text "Cannot difference the supplied sets." -eventIsNotValidMessage :: Value -> ErrorMessage-eventIsNotValidMessage (v@(VDot (VChannel n:_))) = mkErrorMessage Unknown $- text "The event" - <+> prettyPrint v - <+> text "is not a member of its channel"- <+> prettyPrint n- <+> text "and therefore the event is not valid."+dotIsNotValidMessage :: Value -> Int -> Value -> ValueSet -> SrcSpan ->+ Maybe ScopeIdentifier -> ErrorMessage+dotIsNotValidMessage (value@(VDot (h:_))) field fieldValue fieldOptions loc scope =+ mkErrorMessage loc $+ hang (text "The value:") tabWidth (prettyPrint value)+ $$ text "is invalid as it is not within the set of values defined for" <+>+ case h of+ VChannel n -> text "the channel" <+> prettyPrint n <> char '.'+ VDataType n -> text "the data constructor" <+> prettyPrint n <> char '.'+ $$ hang (text "In particular the" <+> speakNth (field+1) <+> text "field:") tabWidth (prettyPrint fieldValue)+ $$ hang (text "is not a member of the set") tabWidth (prettyPrint fieldOptions)+ $$ printCallStack scope++setNotRectangularErrorMessage :: SrcSpan -> ValueSet -> Maybe ValueSet -> ErrorMessage+setNotRectangularErrorMessage loc s1 ms2 = mkErrorMessage loc $+ hang (text "The set:") tabWidth (prettyPrint s1)+ $$ text "cannot be decomposed into a cartesian product (i.e. it is not rectangular)."+ $$ case ms2 of+ Just s2 -> + hang (text "The cartesian product is equal to:") tabWidth + -- Force evaluation to a proper set, not a cart product.+ (prettyPrint (fromList (toList s2)))+ $$ hang (text "and thus the following values are missing:") tabWidth+ (prettyPrint (difference s2 s1))+ Nothing -> empty
+ src/CSPM/Evaluator/Exceptions.hs-boot view
@@ -0,0 +1,29 @@+module CSPM.Evaluator.Exceptions where++import Prelude++import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import {-# SOURCE #-} CSPM.Evaluator.Values+import {-# SOURCE #-} CSPM.Evaluator.ValueSet+import Util.Annotated+import Util.Exception++patternMatchFailureMessage :: SrcSpan -> TCPat -> Value -> ErrorMessage+headEmptyListMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+tailEmptyListMessage :: SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage+funBindPatternMatchFailureMessage :: SrcSpan -> Name -> [[Value]] -> ErrorMessage+replicatedInternalChoiceOverEmptySetMessage :: Exp Name -> SrcSpan -> + Maybe ScopeIdentifier -> ErrorMessage+replicatedInternalChoiceOverEmptySetMessage' :: Pat Name -> SrcSpan ->+ Maybe ScopeIdentifier -> ErrorMessage+typeCheckerFailureMessage :: String -> ErrorMessage+cannotConvertIntegersToListMessage :: ErrorMessage+cannotConvertProcessesToListMessage :: ErrorMessage+cannotCheckSetMembershipError :: Value -> ValueSet -> ErrorMessage+cardOfInfiniteSetMessage :: ValueSet -> ErrorMessage+cannotDifferenceSetsMessage :: ValueSet -> ValueSet -> ErrorMessage+dotIsNotValidMessage :: Value -> Int -> Value -> ValueSet -> SrcSpan ->+ Maybe ScopeIdentifier -> ErrorMessage+setNotRectangularErrorMessage :: SrcSpan -> ValueSet -> Maybe ValueSet ->+ ErrorMessage
src/CSPM/Evaluator/Expr.hs view
@@ -3,15 +3,19 @@ Evaluatable, eval, ) where -import Control.Monad.Trans+import qualified Data.Foldable as F+import Data.List (nub)+import qualified Data.Map as M import Data.Maybe+import Data.Sequence ((<|))+import qualified Data.Sequence as Sq import CSPM.DataStructures.Literals import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax import CSPM.Evaluator.BuiltInFunctions import CSPM.Evaluator.DeclBind-import CSPM.Evaluator.Environment+import CSPM.Evaluator.Dot import CSPM.Evaluator.Exceptions import CSPM.Evaluator.Monad import CSPM.Evaluator.PatBind@@ -19,9 +23,6 @@ import qualified CSPM.Evaluator.ValueSet as S import Util.Annotated import Util.Exception-import Util.Monad-import Util.Prelude-import Util.PrettyPrint -- In order to keep lazy evaluation working properly only use pattern -- matching when you HAVE to know the value. (Hence why we delay pattern@@ -31,12 +32,12 @@ eval :: a -> EvaluationMonad Value instance Evaluatable a => Evaluatable (Annotated b a) where- eval (An _ _ a) = eval a+ eval (An loc _ a) = setCurrentExpressionLocation loc (eval a) instance Evaluatable (Exp Name) where eval (App func args) = do vs <- mapM eval args- VFunction f <- eval func+ VFunction _ f <- eval func f vs eval (BooleanBinaryOp op e1 e2) = do v1 <- eval e1@@ -85,18 +86,28 @@ eval (If e1 e2 e3) = do VBool b <- eval e1 if b then eval e2 else eval e3- eval (Lambda p e) =- return $ VFunction $ \ [v] -> do- let (matches, binds) = bind p v- if matches then- addScopeAndBind binds (eval e)- else- throwError $ patternMatchFailureMessage (loc p) p v- eval (Let decls e) = addScopeAndBindM (bindDecls decls) (eval e)+ eval (Lambda ps e) = do+ st <- getState+ psid <- getParentScopeIdentifier+ let fid = FLambda (Lambda ps e) psid+ return $ VFunction fid $ \ vs -> return $ runEvaluator st $ do+ let (matches, binds) = bindAll ps vs+ if matches then do+ p <- getParentScopeIdentifier+ updateParentScopeIdentifier (annonymousScopeId vs psid) $ + addScopeAndBind binds (eval e)+ else do+ loc <- getCurrentExpressionLocation+ throwError $ patternMatchesFailureMessage loc ps vs+ eval (Let decls e) = do+ nvs <- bindDecls decls+ addScopeAndBindM nvs (eval e) eval (Lit lit) = return $ case lit of Int i -> VInt i- Bool b -> VBool b + Bool b -> VBool b+ Char c -> VChar c+ String s -> VList (map VChar s) eval (List es) = mapM eval es >>= return . VList eval (ListComp es stmts) = do xs <- evalStmts (\(VList xs) -> xs) stmts (mapM eval es)@@ -108,21 +119,44 @@ VInt lb <- eval e1 VInt ub <- eval e2 return $ VList (map VInt [lb..ub])+ eval (ListEnumFromComp e1 stmts) = do+ ss <- evalStmts (\ (VList xs) -> xs) stmts $ do+ VInt lb <- eval e1+ return $ map VInt [lb..]+ return $ VList ss+ eval (ListEnumFromToComp e1 e2 stmts) = do+ ss <- evalStmts (\ (VList xs) -> xs) stmts $ do+ VInt lb <- eval e1+ VInt ub <- eval e2+ return $ map VInt [lb..ub]+ return $ VList ss eval (ListLength e) = do VList xs <- eval e return $ VInt (length xs)+ eval (Map kvs) = do+ xs <- mapM (\ (k, v) -> do+ k <- eval k+ v <- eval v+ return (k, v)) kvs+ return $ VMap $ M.fromList xs eval (MathsBinaryOp op e1 e2) = do VInt i1 <- eval e1 VInt i2 <- eval e2 case op of- Divide -> return $ VInt (i1 `div` i2)+ Divide -> do+ scopeId <- getParentScopeIdentifier+ loc <- getCurrentExpressionLocation+ return $ VInt $+ case i2 of+ 0 -> throwError $ divideByZeroMessage loc scopeId+ _ -> i1 `div` i2 Minus -> return $ VInt (i1 - i2) Mod -> return $ VInt (i1 `mod` i2) Plus -> return $ VInt (i1 + i2) Times -> return $ VInt (i1 * i2) eval (MathsUnaryOp op e) = do VInt i <- eval e- case op of + case op of Negate -> return $ VInt (-i) eval (Paren e) = eval e eval (Set es) = mapM eval es >>= return . VSet . S.fromList@@ -131,11 +165,11 @@ return $ VSet (S.fromList xs) eval (SetEnum es) = do evs <- mapM eval es- ss <- mapM completeEvent evs+ ss <- mapM productionsSet evs return $ VSet (S.unions ss) eval (SetEnumComp es stmts) = do ss <- evalStmts (\(VSet s) -> S.toList s) stmts - (mapM (\e -> eval e >>= completeEvent) es)+ (mapM (\e -> eval e >>= productionsSet) es) return $ VSet (S.unions ss) eval (SetEnumFrom e) = do VInt lb <- eval e@@ -144,46 +178,59 @@ VInt lb <- eval e1 VInt ub <- eval e2 return $ VSet (S.fromList (map VInt [lb..ub]))- eval (Tuple es) = mapM eval es >>= return . VTuple+ eval (SetEnumFromComp e1 stmts) = do+ ss <- evalStmts (\ (VSet s) -> S.toList s) stmts $ do+ VInt lb <- eval e1+ return [S.IntSetFrom lb]+ return $ VSet $ S.unions ss+ eval (SetEnumFromToComp e1 e2 stmts) = do+ ss <- evalStmts (\ (VSet s) -> S.toList s) stmts $ do+ VInt lb <- eval e1+ VInt ub <- eval e2+ return [S.fromList (map VInt [lb..ub])]+ return $ VSet $ S.unions ss+ eval (Tuple es) = mapM eval es >>= return . tupleFromList eval (Var n) | isNameDataConstructor n = do- VTuple [dc, _, _] <- lookupVar n+ (dc, _, _) <- dataTypeInfo n return dc- eval (Var n) = do- v <- lookupVar n- case v of- VProc p -> return $ VProc $ PProcCall (procId n []) p- _ -> return v+ eval (Var n) = lookupVar n -- This is the most complicated process because it is actually a shorthand -- for external choice and internal choice. eval (Prefix e1 fs e2) = let evalInputField :: Value -> [Field Name] -> TCPat -> S.ValueSet -> - (Value -> [Field Name] -> EvaluationMonad Proc) ->- EvaluationMonad [Proc]+ (Value -> [Field Name] -> EvaluationMonad UProc) ->+ EvaluationMonad (Sq.Seq UProc) evalInputField evBase fs p s evalRest = do mps <- mapM (\v -> do let (matches, binds) = bind p v if matches then do ev' <- combineDots evBase v- p <- addScopeAndBind binds (evalRest ev' fs)+ pid <- getParentScopeIdentifier+ p <- updateParentScopeIdentifier (annonymousScopeId [v] pid) $+ addScopeAndBind binds $ evalRest ev' fs return $ Just p else return Nothing) (S.toList s)- return $ catMaybes mps+ return $ Sq.fromList $ catMaybes mps -- | Evalutates an input field, deducing the correct set of values -- to input over. evalInputField2 :: Value -> [Field Name] -> Pat Name -> - (Value -> [Field Name] -> EvaluationMonad Proc) ->- ([Proc] -> Proc) -> EvaluationMonad Proc+ (Value -> [Field Name] -> EvaluationMonad UProc) ->+ (Sq.Seq UProc -> UProc) -> EvaluationMonad UProc evalInputField2 evBase fs p evalRest procConstructor = let -- | The function to use to generate the options. If this- -- is the last field it uses 'extensions' to extend to a- -- fully formed event, otherwise we use 'oneFieldExtensions'- -- to extend by precisely one field.- extensionsOperator =- if fs == [] then extensions else oneFieldExtensions+ -- is the last field AND the last pattern in the current+ -- field it uses 'extensions' to extend to a fully formed + -- event, otherwise we use 'oneFieldExtensions' to extend + -- by precisely one field.+ extensionsOperator :: + [Pat Name] -> Value -> EvaluationMonad [Value]+ extensionsOperator ps | fs /= [] = oneFieldExtensions+ extensionsOperator [p] = extensions + extensionsOperator (p1:p2:ps) = oneFieldExtensions -- | Converts a pattern to its constituent fields. patToFields :: Pat Name -> [Pat Name]@@ -194,42 +241,49 @@ -- | Given a value and a list of patterns (from -- 'patToFields') computes the appropriate set of events and -- then evaluates it.- evExtensions :: Value -> [Pat Name] -> EvaluationMonad [Proc]- evExtensions evBase [] = do- p <- evalRest evBase fs- return [p]- evExtensions evBase (PVar n:ps) | isNameDataConstructor n = do- VTuple [dc, _, _] <- lookupVar n+ evExtensions :: Value -> [Pat Name] -> [(Name, Value)] -> + EvaluationMonad (Sq.Seq UProc)+ evExtensions evBase [] bs = do+ pid <- getParentScopeIdentifier+ p <- updateParentScopeIdentifier (annonymousScopeId (map snd bs) pid) $+ addScopeAndBind bs $ evalRest evBase fs+ return $ Sq.singleton p+ evExtensions evBase (PVar n:ps) bs | isNameDataConstructor n = do+ (dc, _, _) <- dataTypeInfo n evBase' <- combineDots evBase dc- evExtensions evBase' ps- evExtensions evBase (p:ps) = do- vs <- extensionsOperator evBase+ evExtensions evBase' ps bs+ evExtensions evBase (p:ps) bs = do+ vs <- extensionsOperator (p:ps) evBase mps <- mapM (\v -> do- let (matches, bs) = bind p v+ let (matches, bs') = bind p v if matches then do evBase' <- combineDots evBase v- proc <- addScopeAndBind bs (evExtensions evBase' ps)+ proc <- evExtensions evBase' ps (bs++bs') return $ Just proc else return Nothing) vs- return $ concat $ catMaybes mps+ return $ F.msum $ catMaybes mps in do- ps <- evExtensions evBase (patToFields p)+ ps <- evExtensions evBase (patToFields p) [] return $ procConstructor ps - evalNonDetFields :: Value -> [Field Name] -> EvaluationMonad Proc+ evalNonDetFields :: Value -> [Field Name] -> EvaluationMonad UProc evalNonDetFields evBase (NonDetInput p (Just e):fs) = do VSet s <- eval e ps <- evalInputField evBase fs p s evalNonDetFields- return $ PInternalChoice ps- evalNonDetFields evBase (NonDetInput p Nothing:fs) =- evalInputField2 evBase fs (unAnnotate p) evalNonDetFields PInternalChoice+ if Sq.null ps then+ throwError' $ replicatedInternalChoiceOverEmptySetMessage (unAnnotate e)+ else return $ POp PInternalChoice ps+ evalNonDetFields evBase (NonDetInput p Nothing:fs) = do+ POp _ ps <- evalInputField2 evBase fs (unAnnotate p) evalNonDetFields (POp PInternalChoice)+ if Sq.null ps then+ throwError' $ replicatedInternalChoiceOverEmptySetMessage' (unAnnotate p)+ else return $ POp PInternalChoice ps evalNonDetFields evBase fs = evalFields evBase fs - evalFields :: Value -> [Field Name] -> EvaluationMonad Proc+ evalFields :: Value -> [Field Name] -> EvaluationMonad UProc evalFields ev [] = do- -- TODO: check valid event p <- evalProc e2- return $ PPrefix (valueEventToEvent ev) p+ return $ PUnaryOp (PPrefix (valueEventToEvent ev)) p evalFields evBase (Output e:fs) = do v <- eval e ev' <- combineDots evBase v@@ -237,137 +291,208 @@ evalFields evBase (Input p (Just e):fs) = do VSet s <- eval e ps <- evalInputField evBase fs p s evalFields- return $ PExternalChoice ps+ return $ POp PExternalChoice ps evalFields evBase (Input p Nothing:fs) =- evalInputField2 evBase fs (unAnnotate p) evalFields PExternalChoice+ evalInputField2 evBase fs (unAnnotate p) evalFields (POp PExternalChoice) evalFields evBase (NonDetInput _ _:fs) = panic "Evaluation of $ after ! or ? is not supported." -- Takes a proc and combines nested [] and |~|- simplify :: Proc -> Proc- simplify (PExternalChoice [p]) = simplify p- simplify (PInternalChoice [p]) = simplify p- simplify (PExternalChoice (ps@((PExternalChoice _):_))) =- let extract (PExternalChoice ps) = ps in- simplify (PExternalChoice (concatMap extract ps))- simplify (PExternalChoice ps) = PExternalChoice (map simplify ps)- simplify (PInternalChoice (ps@((PInternalChoice _):_))) =- let extract (PInternalChoice ps) = ps in- simplify (PInternalChoice (concatMap extract ps))- simplify (PInternalChoice ps) = PInternalChoice (map simplify ps)- simplify p = p+ --simplify :: UProc -> UProc+ --simplify (POp (PExternalChoice [p])) = simplify p+ --simplify (POp (PInternalChoice [p])) = simplify p+ --simplify (POp (PExternalChoice (ps@((PExternalChoice _):_))) =+ -- let extract (PExternalChoice ps) = ps in+ -- simplify (PExternalChoice (concatMap extract ps))+ --simplify (PExternalChoice ps) = PExternalChoice (map simplify ps)+ --simplify (PInternalChoice (ps@((PInternalChoice _):_))) =+ -- let extract (PInternalChoice ps) = ps in+ -- simplify (PInternalChoice (concatMap extract ps))+ --simplify (PInternalChoice ps) = PInternalChoice (map simplify ps)+ --simplify p = p in do ev@(VDot (VChannel n:vfs)) <- eval e1- VTuple [_, VInt arity, VList fieldSets] <- lookupVar n p <- evalNonDetFields ev (map unAnnotate fs)- return $ VProc (simplify p)+ return $ VProc p --(simplify p) + eval (TimedPrefix n e) = do+ -- Evaluate the prefix process+ p <- evalProc e+ Just (eventFunc, tockName) <- gets timedSection+ parentScope <- getParentScopeIdentifier+ let addTocker (POp PExternalChoice ps) =+ POp PExternalChoice (fmap addTocker ps)+ addTocker (PUnaryOp (PPrefix ev) p) =+ PUnaryOp (PPrefix ev) (makeTocker tockName (eventFunc ev) p)+ p' = addTocker p+ tocker = PUnaryOp (PPrefix (tock tockName)) procCall+ mainProc = POp PExternalChoice (tocker <| p' <| Sq.empty)+ procCall = PProcCall (procName $ scopeId n [] parentScope) mainProc+ return $ VProc procCall+ eval (AlphaParallel e1 e2 e3 e4) = do p1 <- evalProc e1 p2 <- evalProc e4- VSet a1 <- eval e2- VSet a2 <- eval e3- return $ VProc $ PAlphaParallel [(S.valueSetToEventSet a1, p1),- (S.valueSetToEventSet a2, p2)]+ VSet a1 <- timedCSPSyncSet $ eval e2+ VSet a2 <- timedCSPSyncSet $ eval e3+ return $ VProc $ POp (PAlphaParallel + (S.valueSetToEventSet a1 <| S.valueSetToEventSet a2 <| Sq.empty))+ (p1 <| p2 <| Sq.empty) eval (Exception e1 e2 e3) = do p1 <- evalProc e1 VSet a <- eval e2 p2 <- evalProc e3- return $ VProc $ PException p1 (S.valueSetToEventSet a) p2+ return $ VProc $ PBinaryOp (PException (S.valueSetToEventSet a)) p1 p2 eval (ExternalChoice e1 e2) = do p1 <- evalProc e1 p2 <- evalProc e2- return $ VProc $ PExternalChoice [p1, p2]+ let ps = (p1 <| p2 <| Sq.empty)+ maybeTimedCSP+ (return $ VProc $ POp PExternalChoice ps)+ (\ tn _ -> return $ VProc $+ POp (PSynchronisingExternalChoice (tockSet tn)) ps) eval (GenParallel e1 e2 e3) = do ps <- evalProcs [e1, e3]- VSet a <- eval e2- return $ VProc $ PGenParallel (S.valueSetToEventSet a) ps+ VSet a <- timedCSPSyncSet $ eval e2+ return $ VProc $ POp (PGenParallel (S.valueSetToEventSet a)) ps eval (GuardedExp guard proc) = do VBool b <- eval guard- if b then eval proc else lookupVar (builtInName "STOP")+ if b then eval proc+ else maybeTimedCSP+ (lookupVar (builtInName "STOP"))+ (\ _ _ -> do+ VFunction _ tstop <- lookupVar (builtInName "TSTOP")+ tstop []) eval (Hiding e1 e2) = do p <- evalProc e1 VSet s <- eval e2- return $ VProc $ PHide p (S.valueSetToEventSet s)+ if S.empty s then return $ VProc p+ else return $ VProc $ PUnaryOp (PHide (S.valueSetToEventSet s)) p eval (InternalChoice e1 e2) = do ps <- evalProcs [e1, e2]- return $ VProc $ PInternalChoice ps+ return $ VProc $ POp PInternalChoice ps eval (Interrupt e1 e2) = do p1 <- evalProc e1 p2 <- evalProc e2- return $ VProc $ PInterrupt p1 p2+ maybeTimedCSP+ (return $ VProc $ PBinaryOp PInterrupt p1 p2)+ (\ tn _ -> return $ VProc $+ PBinaryOp (PSynchronisingInterrupt (tockSet tn)) p1 p2) eval (Interleave e1 e2) = do ps <- evalProcs [e1, e2]- return $ VProc $ PInterleave ps+ maybeTimedCSP+ (return $ VProc $ POp PInterleave ps)+ (\ tn _ -> return $ VProc $ POp (PGenParallel (tockSet tn)) ps) eval (LinkParallel e1 ties stmts e2) = do p1 <- evalProc e1 p2 <- evalProc e2 ts <- evalTies stmts ties- return $ VProc $ PLinkParallel p1 ts p2+ return $ VProc $+ PBinaryOp (PLinkParallel (removeDuplicateTies ts)) p1 p2 eval (Rename e1 ties stmts) = do p1 <- evalProc e1 ts <- evalTies stmts ties- return $ VProc $ PRename ts p1+ return $ VProc $ if Sq.null ts then p1 else+ PUnaryOp (PRename (removeDuplicateTies ts)) p1 eval (SequentialComp e1 e2) = do p1 <- evalProc e1 p2 <- evalProc e2- return $ VProc $ PSequentialComp p1 p2+ return $ VProc $ PBinaryOp PSequentialComp p1 p2 eval (SlidingChoice e1 e2) = do p1 <- evalProc e1 p2 <- evalProc e2- return $ VProc $ PSlidingChoice p1 p2+ return $ VProc $ PBinaryOp PSlidingChoice p1 p2+ eval (SynchronisingExternalChoice e1 e2 e3) = do+ ps <- evalProcs [e1, e3]+ VSet a <- timedCSPSyncSet $ eval e2+ return $ VProc $ POp+ (PSynchronisingExternalChoice (S.valueSetToEventSet a)) ps+ eval (SynchronisingInterrupt e1 e2 e3) = do+ p1 <- evalProc e1+ VSet a <- timedCSPSyncSet $ eval e2+ p2 <- evalProc e3+ return $ VProc $+ PBinaryOp (PSynchronisingInterrupt (S.valueSetToEventSet a)) p1 p2 eval (ReplicatedAlphaParallel stmts e1 e2) = do- aps <- evalStmts (\(VSet s) -> S.toList s) stmts (do- VSet s <- eval e1+ aps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts $ do+ VSet s <- timedCSPSyncSet $ eval e1 p <- evalProc e2- return [(S.valueSetToEventSet s, p)])- return $ VProc $ PAlphaParallel aps+ return (S.valueSetToEventSet s, p)+ let (as, ps) = unzipSq aps+ maybeTSTOP ps $ return $ VProc $ POp (PAlphaParallel as) ps eval (ReplicatedExternalChoice stmts e) = do- ps <- evalStmts (\(VSet s) -> S.toList s) stmts (evalProcs [e])- return $ VProc $ PExternalChoice ps+ ps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts (evalProc e)+ maybeTimedCSP+ (return $ VProc $ POp PExternalChoice ps)+ (\ tn _ -> maybeTSTOP ps $ return $ VProc $+ POp (PSynchronisingExternalChoice (tockSet tn)) ps) eval (ReplicatedInterleave stmts e) = do- ps <- evalStmts (\(VSet s) -> S.toList s) stmts (evalProcs [e])- return $ VProc $ PInterleave ps- eval (ReplicatedInternalChoice stmts e) = do- ps <- evalStmts (\(VSet s) -> S.toList s) stmts (evalProcs [e])- let e' = ReplicatedInternalChoice stmts e- case ps of- [] -> throwError $ replicatedInternalChoiceOverEmptySetMessage (loc e) e'- _ -> return $ VProc $ PInternalChoice ps- eval (ReplicatedLinkParallel ties tiesStmts stmts e) = do- tsps <- evalStmts (\(VList vs) -> vs) stmts $ do+ ps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts (evalProc e)+ maybeTimedCSP+ (return $ VProc $ POp PInterleave ps)+ (\ tn _ -> maybeTSTOP ps $+ return $ VProc $ POp (PGenParallel (tockSet tn)) ps)+ eval (e'@(ReplicatedInternalChoice stmts e)) = do+ ps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts (evalProc e)+ if Sq.null ps then+ throwError' $ replicatedInternalChoiceOverEmptySetMessage e'+ else return $ VProc $ POp PInternalChoice ps+ eval (e'@(ReplicatedLinkParallel ties tiesStmts stmts e)) = do+ tsps <- evalStmts' (\(VList vs) -> Sq.fromList vs) stmts $ do ts <- evalTies tiesStmts ties p <- evalProc e- return [(ts, p)]- let - mkLinkPar [(ts, p1)] = p1- mkLinkPar ((ts, p1):tps) = PLinkParallel p1 ts (mkLinkPar tps)- return $ VProc $ mkLinkPar tsps+ return (ts, p)+ if Sq.null tsps then+ throwError' $ replicatedLinkParallelOverEmptySeqMessage e'+ else do+ let+ (tsps' Sq.:> (_, lastProc)) = Sq.viewr tsps+ mkLinkPar (ts, p1) p2 =+ PBinaryOp (PLinkParallel (removeDuplicateTies ts)) p1 p2+ return $ VProc $ F.foldr mkLinkPar lastProc tsps' eval (ReplicatedParallel e1 stmts e2) = do- VSet s <- eval e1- ps <- evalStmts (\(VSet s) -> S.toList s) stmts (evalProcs [e2])- return $ VProc $ PGenParallel (S.valueSetToEventSet s) ps+ VSet s <- timedCSPSyncSet $ eval e1+ ps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts (evalProc e2)+ maybeTSTOP ps $ + return $ VProc $ POp (PGenParallel (S.valueSetToEventSet s)) ps+ eval (ReplicatedSequentialComp stmts e) = do+ ps <- evalStmts' (\(VList vs) -> Sq.fromList vs) stmts (evalProc e)+ if Sq.null ps then+ maybeTimedCSP+ (lookupVar (builtInName "SKIP"))+ (\ _ _ -> do+ VFunction _ tskip <- lookupVar (builtInName "TSKIP")+ tskip [])+ else return $ VProc $ F.foldr1 (PBinaryOp PSequentialComp) ps+ eval (ReplicatedSynchronisingExternalChoice e1 stmts e2) = do+ VSet a <- timedCSPSyncSet $ eval e1+ ps <- evalStmts' (\(VSet s) -> S.toSeq s) stmts (evalProc e2)+ maybeTSTOP ps $ return $ VProc $ POp+ (PSynchronisingExternalChoice (S.valueSetToEventSet a)) ps eval e = panic ("No clause to eval "++show e) -evalProcs :: Evaluatable a => [a] -> EvaluationMonad [Proc]-evalProcs as = mapM evalProc as+evalProcs :: Evaluatable a => [a] -> EvaluationMonad (Sq.Seq UProc)+evalProcs as = mapM evalProc as >>= return . Sq.fromList -evalProc :: Evaluatable a => a -> EvaluationMonad Proc+evalProc :: Evaluatable a => a -> EvaluationMonad UProc evalProc a = eval a >>= \v -> case v of VProc x -> return x _ -> panic "Type checker error" -evalTies :: [TCStmt] -> [(TCExp, TCExp)] -> EvaluationMonad [(Event, Event)]+removeDuplicateTies :: Sq.Seq (Event, Event) -> Sq.Seq (Event, Event)+removeDuplicateTies = Sq.fromList . nub . F.toList . Sq.unstableSort++evalTies :: [TCStmt] -> [(TCExp, TCExp)] -> EvaluationMonad (Sq.Seq (Event, Event)) evalTies stmts ties = do tss <- evalStmts (\(VSet s) -> S.toList s) stmts (mapM evalTie ties)- return $ concat tss+ return $ Sq.fromList (concat tss) where extendTie :: (Value, Value) -> Value -> EvaluationMonad (Event, Event) extendTie (evOld, evNew) ex = do- ev1 <- extendEvent evOld ex- ev2 <- extendEvent evNew ex+ ev1 <- combineDots evOld ex+ ev2 <- combineDots evNew ex return (valueEventToEvent ev1, valueEventToEvent ev2) evalTie (eOld, eNew) = do evOld <- eval eOld@@ -393,19 +518,67 @@ v <- eval e vss <- mapM (\v -> do let (matches, binds) = bind p v- if matches then - addScopeAndBind binds (evStmts stmts)+ if matches then do+ pid <- getParentScopeIdentifier+ updateParentScopeIdentifier (annonymousScopeId [v] pid) $+ addScopeAndBind binds (evStmts stmts) else return []) (extract v) return $ concat vss in evStmts (map unAnnotate anStmts) --- | Takes a VEvent and then computes all events that this is a prefix of.-completeEvent :: Value -> EvaluationMonad S.ValueSet-completeEvent ev = do- exs <- extensions ev- l <- mapM (extendEvent ev) exs- return $ S.fromList l+-- | Evaluates the statements, evaluating `prog` for each possible +-- assingment to the generators that satisfies the qualifiers.+evalStmts' :: (Value -> Sq.Seq Value) -> [TCStmt] -> EvaluationMonad a -> + EvaluationMonad (Sq.Seq a)+evalStmts' extract anStmts prog =+ let+ evStmts [] = prog >>= return . Sq.singleton+ evStmts (Qualifier e:stmts) = do+ VBool b <- eval e+ if b then evStmts stmts else return Sq.empty+ evStmts (Generator p e:stmts) = do+ v <- eval e+ F.foldlM (\ s v -> do+ let (matches, binds) = bind p v+ if matches then do+ pid <- getParentScopeIdentifier+ s' <- updateParentScopeIdentifier (annonymousScopeId [v] pid) $+ addScopeAndBind binds (evStmts stmts)+ return $ s Sq.>< s'+ else return s) Sq.empty (extract v)+ in evStmts (map unAnnotate anStmts) -extendEvent :: Value -> Value -> EvaluationMonad Value-extendEvent ev exs = combineDots ev exs+unzipSq :: Sq.Seq (a,b) -> (Sq.Seq a, Sq.Seq b)+unzipSq sqs = F.foldr + (\ (a,b) (as, bs) -> (a <| as, b <| bs) ) (Sq.empty, Sq.empty) sqs++timedCSPSyncSet :: EvaluationMonad Value -> EvaluationMonad Value+timedCSPSyncSet prog = do+ VSet a <- prog+ maybeTimedCSP+ (return $ VSet a)+ (\ tn _ -> return $ VSet (S.union (S.fromList [tockValue tn]) a))++tSTOP :: EvaluationMonad Value+tSTOP = do+ VFunction _ tstop <- lookupVar (builtInName "TSTOP")+ tstop []++maybeTSTOP :: Sq.Seq a -> EvaluationMonad Value -> EvaluationMonad Value+maybeTSTOP sq p1 =+ maybeTimedCSP p1 (\ _ _ -> if Sq.null sq then tSTOP else p1)++tock :: Name -> Event+tock tn = UserEvent (tockValue tn)++tockValue :: Name -> Value+tockValue tn = VDot [VChannel tn]++tockSet :: Name -> EventSet+tockSet tn = Sq.singleton (tock tn)++makeTocker :: Name -> Int -> UProc -> UProc+makeTocker tn 0 p = p+makeTocker tn tocks p =+ PUnaryOp (PPrefix (tock tn)) (makeTocker tn (tocks-1) p)
src/CSPM/Evaluator/Expr.hs-boot view
@@ -5,7 +5,6 @@ import CSPM.DataStructures.Syntax import CSPM.Evaluator.Monad import CSPM.Evaluator.Values-import CSPM.Evaluator.ValueSet import Util.Annotated class Evaluatable a where@@ -13,4 +12,3 @@ instance Evaluatable a => Evaluatable (Annotated b a) instance Evaluatable (Exp Name)-
+ src/CSPM/Evaluator/File.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE TypeSynonymInstances #-}+module CSPM.Evaluator.File (+ bindFile+) +where++import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import CSPM.Evaluator.DeclBind+import CSPM.Evaluator.Monad+import CSPM.Evaluator.Values+import Util.Annotated++bindFile :: TCCSPMFile -> EvaluationMonad [(Name, EvaluationMonad Value)]+bindFile an = case unAnnotate an of+ CSPMFile ds -> bindDecls ds
− src/CSPM/Evaluator/Module.hs
@@ -1,21 +0,0 @@-{-# LANGUAGE TypeSynonymInstances #-}-module CSPM.Evaluator.Module (- bindModules, bindModule,-) -where--import Control.Monad--import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax-import CSPM.Evaluator.DeclBind-import CSPM.Evaluator.Monad-import CSPM.Evaluator.Values-import Util.Annotated--bindModules :: [TCModule] -> [(Name, EvaluationMonad Value)]-bindModules ms = concatMap bindModule ms--bindModule :: TCModule -> [(Name, EvaluationMonad Value)]-bindModule an = case unAnnotate an of- GlobalModule ds -> bindDecls ds
src/CSPM/Evaluator/Monad.hs view
@@ -1,69 +1,62 @@ module CSPM.Evaluator.Monad where ---import Control.Monad.State+import Control.Monad.Reader import Prelude hiding (lookup) import CSPM.DataStructures.Names import CSPM.Evaluator.Environment+import CSPM.Evaluator.ProcessValues+import {-# SOURCE #-} CSPM.Evaluator.Profiler import {-# SOURCE #-} CSPM.Evaluator.Values+import Util.Annotated import Util.Exception data EvaluationState = EvaluationState {- environment :: Environment+ environment :: Environment,+ parentScopeIdentifier :: Maybe ScopeIdentifier,+ currentExpressionLocation :: SrcSpan,+ timedSection :: Maybe (Event -> Int, Name),+ profilerState :: ProfilerState,+ doRuntimeRangeChecks :: Bool }- -type EvaluationMonad = LazyEvalMonad EvaluationState--newtype LazyEvalMonad s a = LazyEvalMonad { - -- Notice that this doesn't yield a new environment- unLazyEvalMonad :: s -> a-}- -runLazyEvalMonad :: s -> LazyEvalMonad s a -> a-runLazyEvalMonad st (LazyEvalMonad prog) = prog st--gets :: (s -> a) -> LazyEvalMonad s a-gets f = LazyEvalMonad (\st -> f st)+ +type EvaluationMonad = Reader EvaluationState -modify :: (s -> s) -> LazyEvalMonad s a -> LazyEvalMonad s a-modify f prog = LazyEvalMonad (\st -> unLazyEvalMonad prog (f st))+gets :: (EvaluationState -> a) -> EvaluationMonad a+gets = asks -instance Monad (LazyEvalMonad a) where- (LazyEvalMonad p1) >>= f = - LazyEvalMonad (\ st -> - let- a = p1 st- LazyEvalMonad p2 = f a- in p2 st)- return k = LazyEvalMonad (\ st -> k)+modify :: (EvaluationState -> EvaluationState) -> EvaluationMonad a -> EvaluationMonad a+modify = local runEvaluator :: EvaluationState -> EvaluationMonad a -> a-runEvaluator st prog = runLazyEvalMonad st prog+runEvaluator st prog = runReader prog st getState :: EvaluationMonad EvaluationState getState = gets id+{-# INLINE getState #-} getEnvironment :: EvaluationMonad Environment getEnvironment = gets environment----setEnvironment :: Environment -> EvaluationMonad ()---setEnvironment env =--- modify (\ st -> st { environment = env })+{-# INLINE getEnvironment #-} -lookupVar :: Name -> EvaluationMonad Value-lookupVar n = do+lookupVarMaybeThunk :: Name -> EvaluationMonad Value+lookupVarMaybeThunk n = do -- This should never produce an error as the TC would -- catch it env <- getEnvironment return $ lookup env n+{-# INLINE lookupVarMaybeThunk #-} -- | Implements non-recursive lets. addScopeAndBind :: [(Name, Value)] -> EvaluationMonad a -> EvaluationMonad a-addScopeAndBind bs = addScopeAndBindM [(n, return v) | (n, v) <- bs]+addScopeAndBind [] prog = prog+addScopeAndBind bs prog =+ modify (\ st -> st { environment = newLayerAndBind (environment st) bs }) prog -- | Implements recursive lets. addScopeAndBindM :: [(Name, EvaluationMonad Value)] -> EvaluationMonad a -> EvaluationMonad a+addScopeAndBindM [] prog = prog addScopeAndBindM binds prog = do st <- getState let@@ -75,8 +68,36 @@ throwError :: ErrorMessage -> a throwError err = throwSourceError [err] --- the problem here is that in order to get st', we need env', which requires--- bs. However, bs requires st', which is not a problem intself if something--- is lazy, but if binds does a lookup in the environment (which it does)--- then this will break it?+getParentScopeIdentifier :: EvaluationMonad (Maybe ScopeIdentifier)+getParentScopeIdentifier = gets parentScopeIdentifier +updateParentScopeIdentifier :: ScopeIdentifier -> EvaluationMonad a -> EvaluationMonad a+updateParentScopeIdentifier pn prog =+ modify (\ st -> st { parentScopeIdentifier = Just pn }) prog++setCurrentExpressionLocation :: SrcSpan -> EvaluationMonad a -> EvaluationMonad a+setCurrentExpressionLocation sp prog =+ modify (\ st -> st { currentExpressionLocation = sp }) prog++getCurrentExpressionLocation :: EvaluationMonad SrcSpan+getCurrentExpressionLocation = gets currentExpressionLocation++throwError' :: (SrcSpan -> Maybe ScopeIdentifier -> ErrorMessage) -> EvaluationMonad a+throwError' f = do+ loc <- gets currentExpressionLocation+ stk <- gets parentScopeIdentifier+ throwError (f loc stk)++setTimedCSP :: Name -> (Event -> Int) -> EvaluationMonad a -> EvaluationMonad a+setTimedCSP tock func prog =+ modify (\ st -> st { timedSection = Just (func, tock) }) prog++maybeTimedCSP ::+ EvaluationMonad a ->+ (Name -> (Event -> Int) -> EvaluationMonad a) ->+ EvaluationMonad a+maybeTimedCSP nonTimedProg timedProg = do+ mfunc <- gets timedSection+ case mfunc of+ Nothing -> nonTimedProg+ Just (f, tock) -> timedProg tock f
src/CSPM/Evaluator/PatBind.hs view
@@ -1,17 +1,12 @@ {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} module CSPM.Evaluator.PatBind where -import Control.Monad- import CSPM.DataStructures.Literals import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax-import CSPM.Evaluator.Monad import CSPM.Evaluator.Values import CSPM.Evaluator.ValueSet import Util.Annotated-import Util.Exception-import Util.PrettyPrint -- Bind :: Pattern, value -> (Matches Pattern, Values to Bind class Bindable a where@@ -67,9 +62,8 @@ (b1, nvs1) = bind p v (b2, nvs2) = matchCompDot ps vs in (b1 && b2, nvs1++nvs2)- - r = matchCompDot (map unAnnotate ps) vs- in r+ matchCompDot _ _ = (False, [])+ in matchCompDot (map unAnnotate ps) vs bind (PDoublePattern p1 p2) v = let (m1, b1) = bind p1 v@@ -77,23 +71,30 @@ in (m1 && m2, b1++b2) bind (PLit (Int i1)) (VInt i2) | i1 == i2 = (True, []) bind (PLit (Bool b1)) (VBool b2) | b1 == b2 = (True, [])+ bind (PLit (Char c1)) (VChar c2) | c1 == c2 = (True, [])+ bind (PSet []) (VSet s) | empty s = (True, []) bind (PSet [p]) (VSet s) = case singletonValue s of Just v -> bind p v Nothing -> (False, []) bind (PTuple ps) (VTuple vs) = do -- NB: len ps == len vs by typechecker- bindAll ps vs--- TODO, the following two cases are wrong, consider calling f(x) = x--- with f(done). ARGH.--- bind (PVar n) (VChannel n') = return (n == n', []) --- bind (PVar n) (VDataType n') = return (n == n', [])--- Must just be a normal variable+ bindAll ps (elems vs) bind (PVar n) v | isNameDataConstructor n = case v of VChannel n' -> (n == n', []) VDataType n' -> (n == n', [])- _ -> panic $ show $ prettyPrint v <+> text "is not a data constructor."+ -- We have to allow these to enable patterns such as f(J) where+ -- J has arity 0.+ VDot [VChannel n'] -> (n == n', [])+ VDot [VDataType n'] -> (n == n', [])+ -- We have to allow patterns like `match` J against X.0 in case+ -- these are in the same data type and a function has two clauses,+ -- one for each of these cases. e.g.+ -- f(J) = X+ -- f(X.0) = X+ -- as in one clause we match J against VDot [X,0]+ _ -> (False, []) bind (PVar n) v = (True, [(n, v)]) bind PWildCard v = (True, []) bind _ _ = (False, [])
+ src/CSPM/Evaluator/ProcessValues.hs view
@@ -0,0 +1,241 @@+{-# LANGUAGE FlexibleContexts, FlexibleInstances,+ GeneralizedNewtypeDeriving, MultiParamTypeClasses,+ TypeSynonymInstances, UndecidableInstances #-}+module CSPM.Evaluator.ProcessValues (+ -- * Events+ Event(..),+ EventSet, eventSetFromList, EventMap,+ -- * Processes+ Proc(..), UnCompiledProc, UnCompiledProcOperator, UnCompiledOperator,+ CSPOperator(..),+ ProcOperator(..), + ProcName(..),+ operator, components,+ splitProcIntoComponents,+ trimProcess,+) where++import {-# SOURCE #-} CSPM.Evaluator.Values+import qualified Data.Foldable as F+import qualified Data.Sequence as S+import Data.Hashable+import Util.Exception+import Util.Prelude++-- | Events, as represented in the LTS.+data Event = + -- | The internal special event tau.+ Tau + -- | The internal event tick, representing termination.+ | Tick + -- | Any event defined in a channel definition.+ | UserEvent Value+ deriving (Eq, Ord)++type EventMap = S.Seq (Event, Event)+type EventSet = S.Seq Event++eventSetFromList :: [Event] -> EventSet+eventSetFromList = S.fromList++instance Hashable Event where+ hash Tau = 1+ hash Tick = 2+ hash (UserEvent vs) = combine 3 (hash vs)++-- | ProcNames uniquely identify processes.+newtype ProcName = ProcName (ScopeIdentifier) deriving (Eq, Hashable, Ord)++-- | An operator that can be applied to processes.+data ProcOperator seq evs =+ Chase Bool+ | Determinise+ | Diamond+ | Explicate Bool+ | Normalize Bool+ | ModelCompress+ | Prioritise Bool (seq evs)+ | StrongBisim+ | TauLoopFactor+ | WeakBisim+ deriving (Eq, Ord)++instance Hashable (seq evs) => Hashable (ProcOperator seq evs) where+ hash (Chase True) = 1+ hash (Chase False) = 2+ hash Diamond = 3+ hash (Explicate True) = 4+ hash (Explicate False) = 5+ hash (Normalize True)= 6+ hash (Normalize False)= 7+ hash (Prioritise False evs) = combine 8 (hash evs)+ hash (Prioritise True evs) = combine 9 (hash evs)+ hash ModelCompress = 10+ hash StrongBisim = 11+ hash TauLoopFactor = 12+ hash WeakBisim = 13+ hash Determinise = 14++data CSPOperator seq ev evs evm =+ PAlphaParallel (seq evs)+ | PException evs+ | PExternalChoice+ | PGenParallel evs+ | PHide evs+ | PInternalChoice+ | PInterrupt+ | PInterleave+ -- Map from event of left process, to event of right that it synchronises+ -- with. (Left being p1, Right being p2 ps ps).+ | PLinkParallel evm+ | POperator (ProcOperator seq evs)+ | PPrefix ev+ -- Map from Old -> New event+ | PRename evm+ | PSequentialComp+ | PSlidingChoice+ | PSynchronisingExternalChoice evs+ | PSynchronisingInterrupt evs+ deriving (Eq, Ord)++instance (Hashable ev, Hashable evm, Hashable evs, Hashable (seq evs)) =>+ Hashable (CSPOperator seq ev evs evm) where+ hash (PAlphaParallel s) = combine 1 (hash s)+ hash (PException s) = combine 2 (hash s)+ hash PExternalChoice = 3+ hash (PGenParallel evs) = combine 4 (hash evs)+ hash (PHide evs) = combine 5 (hash evs)+ hash PInternalChoice = 6+ hash PInterrupt = 7+ hash PInterleave = 8+ hash (PLinkParallel s) = combine 9 (hash s)+ hash (POperator op) = combine 11 (hash op)+ hash (PPrefix ev) = combine 12 (hash ev)+ hash (PRename evm) = combine 13 (hash evm)+ hash PSequentialComp = 14+ hash PSlidingChoice = 15+ hash (PSynchronisingExternalChoice evs) = combine 16 (hash evs)+ hash (PSynchronisingInterrupt evs) = combine 17 (hash evs)++errorThunk = panic "Trimmed process evaluated"++trimProcess :: UnCompiledProc -> UnCompiledProc+trimProcess (PUnaryOp op p1) =+ PUnaryOp (trimOperator op) (trimProcess p1)+trimProcess (PBinaryOp op p1 p2) =+ PBinaryOp (trimOperator op) (trimProcess p1) (trimProcess p2)+trimProcess (POp op ps) =+ POp (trimOperator op) (fmap trimProcess ps)+trimProcess (PProcCall pn _) = PProcCall pn errorThunk++trimEvent :: Event -> Event+trimEvent Tau = Tau+trimEvent Tick = Tick+trimEvent (UserEvent v) = UserEvent (trimValueForProcessName v)++trimOperator :: UnCompiledOperator -> UnCompiledOperator+trimOperator (PAlphaParallel s) = PAlphaParallel (fmap (fmap trimEvent) s)+trimOperator (PException s) = PException (fmap trimEvent s)+trimOperator PExternalChoice = PExternalChoice+trimOperator (PGenParallel evs) = PGenParallel (fmap trimEvent evs)+trimOperator (PHide evs) = PHide (fmap trimEvent evs)+trimOperator PInternalChoice = PInternalChoice+trimOperator PInterrupt = PInterrupt+trimOperator PInterleave = PInterleave+trimOperator (PLinkParallel evm) =+ PLinkParallel (fmap (\(ev,ev') -> (trimEvent ev, trimEvent ev')) evm)+trimOperator (POperator op) = POperator op+trimOperator (PPrefix ev) = PPrefix (trimEvent ev)+trimOperator (PRename evm) = + PRename (fmap (\(ev,ev') -> (trimEvent ev, trimEvent ev')) evm)+trimOperator PSequentialComp = PSequentialComp+trimOperator PSlidingChoice = PSlidingChoice+trimOperator (PSynchronisingExternalChoice evs) =+ PSynchronisingExternalChoice (fmap trimEvent evs)+trimOperator (PSynchronisingInterrupt evs) =+ PSynchronisingInterrupt (fmap trimEvent evs)++-- | A compiled process. Note this is an infinite data structure (due to+-- PProcCall) as this makes compilation easy (we can easily chase+-- dependencies).+data Proc seq op pn ev evs evm = + PUnaryOp (op seq ev evs evm) (Proc seq op pn ev evs evm)+ | PBinaryOp (op seq ev evs evm) (Proc seq op pn ev evs evm) (Proc seq op pn ev evs evm)+ | POp (op seq ev evs evm) (seq (Proc seq op pn ev evs evm))+ -- | Labels the process this contains. This allows infinite loops to be+ -- spotted.+ | PProcCall pn (Proc seq op pn ev evs evm)++instance (Eq pn, Eq (seq (Proc seq op pn ev evs evm)), Eq (op seq ev evs evm)) =>+ Eq (Proc seq op pn ev evs evm) where+ (PProcCall pn1 _) == (PProcCall pn2 _) = pn1 == pn2+ (PUnaryOp op1 p1) == (PUnaryOp op2 p2) = op1 == op2 && p1 == p2+ (PBinaryOp op1 p1 p2) == (PBinaryOp op2 r1 r2) =+ op1 == op2 && p1 == r1 && p2 == r2+ (POp op1 ps1) == (POp op2 ps2) = op1 == op2 && ps1 == ps2+ _ == _ = False++instance (Hashable pn, Hashable (seq (Proc seq op pn ev evs evm)), Hashable (op seq ev evs evm)) =>+ Hashable (Proc seq op pn ev evs evm) where+ hash (PProcCall pn1 _) = combine 1 (hash pn1)+ hash (PUnaryOp op1 p1) = combine 2 (combine (hash op1) (hash p1))+ hash (PBinaryOp op1 p1 p2) = combine 3 (combine (hash op1) (combine (hash p1) (hash p2)))+ hash (POp op ps) = combine 4 (combine (hash op) (hash ps))++instance (Ord pn, Ord (seq (Proc seq op pn ev evs evm)), Ord (op seq ev evs evm)) =>+ Ord (Proc seq op pn ev evs evm) where+ compare (PProcCall pn1 _) (PProcCall pn2 _) = compare pn1 pn2+ compare (PProcCall _ _) _ = LT+ compare _ (PProcCall _ _) = GT+ compare (PUnaryOp op1 p1) (PUnaryOp op2 p2) =+ compare op1 op2 `thenCmp` compare p1 p2+ compare (PUnaryOp _ _) _ = LT+ compare _ (PUnaryOp _ _) = GT+ compare (PBinaryOp op1 p1 p2) (PBinaryOp op2 r1 r2) =+ compare op1 op2 `thenCmp` compare p1 r1 `thenCmp` compare p2 r2+ compare (PBinaryOp _ _ _) _ = LT+ compare _ (PBinaryOp _ _ _) = GT+ compare (POp op1 ps1) (POp op2 ps2) =+ compare op1 op2 `thenCmp` compare ps1 ps2++type UnCompiledProc = + Proc S.Seq CSPOperator ProcName Event (S.Seq Event) (S.Seq (Event, Event))+type UnCompiledOperator = + CSPOperator S.Seq Event (S.Seq Event) (S.Seq (Event, Event))+type UnCompiledProcOperator =+ ProcOperator S.Seq (S.Seq Event)++instance Hashable a => Hashable (S.Seq a) where+ hash a = foldr combine 0 (F.toList (fmap hash a))++-- | Gives the operator of a process. If the process is a ProcCall an error is+-- thrown.+operator :: Proc seq op pn ev evs evm -> op seq ev evs evm+operator (PUnaryOp op _) = op+operator (PBinaryOp op _ _)= op+operator (POp op _) = op++-- | Returns the components of a given process.+components :: Proc S.Seq op pn ev evs evm -> S.Seq (Proc S.Seq op pn ev evs evm)+components (PBinaryOp _ p1 p2) = p1 S.<| p2 S.<| S.empty+components (POp _ ps) = ps+components (PUnaryOp _ p1) = S.singleton p1++-- | Given a process, returns the initial process and all processes that it+-- calls.+splitProcIntoComponents :: (Eq pn, F.Foldable seq) => Proc seq op pn ev evs evm -> + (Proc seq op pn ev evs evm, [(pn, Proc seq op pn ev evs evm)])+splitProcIntoComponents p =+ let+ explored pns n = n `elem` (map fst pns)++ exploreAll pns [] = pns+ exploreAll pns (p:ps) = exploreAll (explore pns p) ps++ explore pns (PUnaryOp _ p) = explore pns p+ explore pns (PBinaryOp _ p1 p2) = exploreAll pns [p1,p2]+ explore pns (POp _ ps) = exploreAll pns (F.toList ps)+ explore pns (PProcCall n p) =+ if explored pns n then pns+ else explore ((n, p):pns) p+ in (p, explore [] p)
+ src/CSPM/Evaluator/Profiler.hs view
@@ -0,0 +1,225 @@+{-# LANGUAGE BangPatterns #-}+module CSPM.Evaluator.Profiler (+ ProfilerOptions(..), defaultProfilerOptions,+ ProfilerState, initialProfilerState,+ maybeRegisterCall, registerCall,+ ProfilingData, getProfilingData,+ profilerActive,+) where++import Control.Concurrent.MVar+import Control.Exception (bracket)+import qualified Data.HashTable.IO as H+import Data.List ((\\), isPrefixOf, sort, sortBy, transpose)+import System.IO.Unsafe++import CSPM.DataStructures.Names+import CSPM.Evaluator.Monad+import Util.PrettyPrint++data ProfilerOptions = ProfilerOptions {+ isActive :: Bool,+ flattenRecursiveCalls :: Bool+ }++defaultProfilerOptions :: ProfilerOptions+defaultProfilerOptions = ProfilerOptions {+ isActive = False,+ flattenRecursiveCalls = True+ }++type CallCountTable = H.BasicHashTable Name Int+data ProfilerState = ProfilerState {+ options :: ProfilerOptions,+ tableLock :: MVar (),+ callCounts :: CallCountTable,+ hiearchicalCallCounts :: H.BasicHashTable [Name] CallCountTable,+ profilingStack :: [Name]+ }++profilerActive :: EvaluationState -> Bool+profilerActive st = isActive (options (profilerState st))++initialProfilerState :: ProfilerOptions -> IO ProfilerState+initialProfilerState options = do+ callCounts <- H.new+ hiearchicalCallCounts <- H.new+ tableLock <- newMVar ()+ return $! ProfilerState {+ options = options,+ tableLock = tableLock,+ callCounts = callCounts,+ hiearchicalCallCounts = hiearchicalCallCounts,+ profilingStack = []+ }++maybeRegisterCall ::+ EvaluationMonad (Name -> EvaluationMonad a -> EvaluationMonad a)+maybeRegisterCall = do+ profilerState <- gets profilerState+ return $!+ if isActive (options profilerState) then registerCall+ else \ _ prog -> prog++registerCall :: Name -> EvaluationMonad a -> EvaluationMonad a+registerCall n prog = do+ profilerState <- gets profilerState+ unsafePerformIO (incrementCounter profilerState n) `seq`+ modify (\ st -> st {+ profilerState = profilerState {+ profilingStack = + let stk = profilingStack profilerState+ in if flattenRecursiveCalls (options profilerState) then+ case stk of+ n':_ | n == n' -> stk+ _ -> n : stk+ else n : stk+ }+ }) prog+{-# NOINLINE registerCall #-}++incrementCallCounter :: CallCountTable -> Name -> IO ()+incrementCallCounter table n = do+ mcount <- H.lookup table n+ let !c = case mcount of+ Just count -> count + 1+ Nothing -> 1+ H.insert table n c++incrementCounter :: ProfilerState -> Name -> IO ()+incrementCounter profilerState n = do+ let lock = tableLock profilerState+ hierachicalTable = hiearchicalCallCounts profilerState+ bracket (takeMVar lock) (\_ -> putMVar lock ()) $ \_ -> do+ incrementCallCounter (callCounts profilerState) n++ let stk = profilingStack profilerState+ mtable <- H.lookup hierachicalTable stk+ table <- case mtable of+ Just table -> return table+ Nothing -> do+ table <- H.new+ H.insert hierachicalTable stk table+ return table+ incrementCallCounter table n+{-# NOINLINE incrementCounter #-}++type CallCounts = [(Name, Int)]+data HierarchicalCallCount =+ HierarchicalCallCount [(Name, Int, HierarchicalCallCount)]+ deriving Show++createHierarchicalCallCount :: [([Name], CallCounts)] -> HierarchicalCallCount+createHierarchicalCallCount table =+ let reversedTable = map (\ (ns, c) -> (reverse ns, c)) table+ -- Sort the table lexiographically. This will cluster together+ -- common prefixes+ sortedTable = sortBy (\ (ns1, _) (ns2, _) -> compare ns1 ns2) reversedTable++ extractCommonPrefix :: [([Name], CallCounts)] ->+ (Name, [([Name], CallCounts)], [([Name], CallCounts)])+ extractCommonPrefix [] = error "invalid list"+ extractCommonPrefix (([], cs) : _) = error "invalid list"+ extractCommonPrefix ((n:ns1, cs1) : ncs) =+ let+ (common, rest) = span (\ (ns2, _) -> [n] `isPrefixOf` ns2) ncs+ in (n, (ns1, cs1) : (map (\ (ns, cs) -> (tail ns, cs)) common), rest)++ construct :: [([Name], CallCounts)] -> [(Name, Int, HierarchicalCallCount)]+ construct ncs =+ let+ -- How many time each top-level function was called+ counts = [(n, c) | ([], ncs') <- ncs, (n, c) <- ncs']++ recursiveCounts = [(xs, ncs') | (xs, ncs') <- ncs, xs /= []]++ -- Group into common prefixes+ commonPrefixes :: [([Name], CallCounts)] ->+ [(Name, [([Name], CallCounts)])]+ commonPrefixes [] = []+ commonPrefixes ncs = (n, common) : commonPrefixes rest+ where (n, common, rest) = extractCommonPrefix ncs++ allCommonPrefixes = commonPrefixes recursiveCounts++ safeLookup counts n =+ case lookup n counts of+ Just c -> c+ Nothing -> -1++ constructCommonPrefix (n, sub) =+ (n, safeLookup counts n, HierarchicalCallCount (construct sub))++ namesWithCount = map fst counts+ namesWithoutChildren =+ sort namesWithCount \\ sort (map fst allCommonPrefixes)+ in map constructCommonPrefix allCommonPrefixes+ ++ map (\ n -> constructCommonPrefix (n, [])) namesWithoutChildren+ in HierarchicalCallCount $ construct sortedTable++data ProfilingData = ProfilingData {+ totalCallCounts :: CallCounts,+ hierachicalTable :: HierarchicalCallCount+ }++getProfilingData :: EvaluationMonad ProfilingData+getProfilingData = do+ profilerState <- gets profilerState+ return $! unsafePerformIO (extractProfilingData profilerState)+{-# NOINLINE getProfilingData #-}++extractProfilingData :: ProfilerState -> IO ProfilingData+extractProfilingData profilerState = do+ let lock = tableLock profilerState+ (tbl, htbl) <- bracket (takeMVar lock) (\_ -> putMVar lock ()) $ \_ -> do+ tbl <- H.toList (callCounts profilerState)+ htbl <- H.toList (hiearchicalCallCounts profilerState)+ htbl <- mapM (\ (n, table) -> do+ tbl <- H.toList table+ return (n, tbl)) htbl+ return (tbl, htbl)+ return $! ProfilingData tbl (createHierarchicalCallCount htbl)++printInColumns :: [Doc] -> [[Doc]] -> Doc+printInColumns header rows =+ let cols = transpose (map (map show) (header : rows))+ requiredWidth xs = maximum (map length xs)+ padColumn :: Char -> [String] -> [String]+ padColumn c xs = map (\ x -> x ++ replicate (len - length x) c) xs+ where len = requiredWidth xs+ joinColumns :: [[String]] -> [String]+ joinColumns cols = map concatWithSpace (transpose cols)+ where+ concatWithSpace [] = []+ concatWithSpace [x] = x+ concatWithSpace (x:xs) = x ++ " " ++ concatWithSpace xs+ insertSpacer (header:rs) = header : replicate (length header) '-' : rs+ in vcat (map text (insertSpacer (joinColumns (map (padColumn ' ') cols))))++prettyPrintOverallTable :: [(Name, Int)] -> Doc+prettyPrintOverallTable tbl =+ let descendingCounts (_, c1) (_, c2) = compare c2 c1+ totalCallCounts = map (\ (n, c) -> [prettyPrint n, int c]) $!+ sortBy descendingCounts tbl+ in printInColumns [text "Name", text "Call Count"] (totalCallCounts)++prettyPrintHierarchicalData :: HierarchicalCallCount -> Doc+prettyPrintHierarchicalData cs =+ let callCounts :: Int -> HierarchicalCallCount -> [[Doc]]+ callCounts depth (HierarchicalCallCount ncs) =+ concatMap (\ (n, count, rec) ->+ [text (replicate depth ' ') <> prettyPrint n, int count]+ : (callCounts (depth + 2)) rec+ )+ $ sortBy (\ (_, c1, _) (_, c2, _) -> compare c2 c1) ncs+ in printInColumns [text "Name", text "Call Count"] (callCounts 0 cs)++instance PrettyPrintable ProfilingData where+ prettyPrint (ProfilingData tbl hierarchicalData) =+ text "Total Function Call Counts"+ $$ text "--------------------------"+ $$ tabIndent (prettyPrintOverallTable tbl)+ $$ text " "+ $$ text "Hierarchical Call Counts"+ $$ text "------------------------"+ $$ tabIndent (prettyPrintHierarchicalData hierarchicalData)
+ src/CSPM/Evaluator/Profiler.hs-boot view
@@ -0,0 +1,3 @@+module CSPM.Evaluator.Profiler where++data ProfilerState
+ src/CSPM/Evaluator/ValuePrettyPrinter.hs view
@@ -0,0 +1,520 @@+{-# LANGUAGE FlexibleContexts, FlexibleInstances, IncoherentInstances,+ MultiParamTypeClasses, TypeSynonymInstances, UndecidableInstances #-}+module CSPM.Evaluator.ValuePrettyPrinter (+ prettyPrintAllRequiredProcesses,+) where++import Control.Applicative+import Control.Monad+import Control.Monad.Identity+import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import CSPM.Evaluator.Dot+import CSPM.Evaluator.Monad+import CSPM.Evaluator.ProcessValues+import CSPM.Evaluator.Values+import CSPM.Evaluator.ValueSet+import CSPM.PrettyPrinter+import CSPM.Prelude+import qualified Data.Foldable as F+import qualified Data.Map as Mp+import qualified Data.Sequence as S+import Data.List (partition)+import Util.Precedence+import Util.PrettyPrint+import qualified Util.MonadicPrettyPrint as M++instance (Applicative m, Monad m) => M.MonadicPrettyPrintable m (Exp Name) where+ prettyPrint = return . prettyPrint++instance (Applicative m, Monad m) => M.MonadicPrettyPrintable m TCExp where+ prettyPrint = return . prettyPrint++instance PrettyPrintable Event where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable (S.Seq Event) where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable ProcName where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable Value where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable ValueSet where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable UnCompiledProc where+ prettyPrint = runIdentity . M.prettyPrint++instance (F.Foldable seq, M.MonadicPrettyPrintable Identity evs) =>+ PrettyPrintable (ProcOperator seq evs) where+ prettyPrint = runIdentity . M.prettyPrint++instance PrettyPrintable ScopeIdentifier where+ prettyPrint = runIdentity . M.prettyPrint++instance (Applicative m, Monad m, M.MonadicPrettyPrintable m Value) =>+ M.MonadicPrettyPrintable m Event where+ prettyPrint Tau = M.char 'τ'+ prettyPrint Tick = M.char '✓'+ prettyPrint (UserEvent v) = M.prettyPrint v++ prettyPrintBrief Tau = M.char 'τ'+ prettyPrintBrief Tick = M.char '✓'+ prettyPrintBrief (UserEvent v) = M.prettyPrintBrief v++instance (Applicative m, F.Foldable seq, Monad m, M.MonadicPrettyPrintable m evs) =>+ M.MonadicPrettyPrintable m (ProcOperator seq evs) where+ prettyPrint (Chase True) = M.text "chase"+ prettyPrint (Chase False) = M.text "chase_no_cache"+ prettyPrint Determinise = M.text "deter"+ prettyPrint Diamond = M.text "diamond"+ prettyPrint (Explicate False) = M.text "explicate"+ prettyPrint (Explicate True) = M.text "lazyenumerate"+ prettyPrint (Normalize False) = M.text "normal"+ prettyPrint (Normalize True) = M.text "lazynorm"+ prettyPrint (Prioritise cache as) =+ (if cache then M.text "prioritise" else M.text "prioritise_nocache")+ M.<> M.parens (M.angles (M.list (mapM M.prettyPrint (F.toList as))))+ prettyPrint ModelCompress = M.text "model_compress"+ prettyPrint StrongBisim = M.text "sbisim"+ prettyPrint TauLoopFactor = M.text "tau_loop_factor"+ prettyPrint WeakBisim = M.text "wbisim"++ prettyPrintBrief (Prioritise True as) = M.text "prioritise"+ prettyPrintBrief (Prioritise False as) = M.text "prioritise_nocache"+ prettyPrintBrief op = M.prettyPrint op++ppOperatorWithArg (Prioritise cache as) proc = do+ (if cache then M.text "prioritise" else M.text "prioritise_nocache")+ M.<> M.parens (proc M.<> M.comma M.<+>+ M.angles (M.list (mapM M.prettyPrint (F.toList as))))+ppOperatorWithArg op proc = M.prettyPrint op M.<> M.parens proc++ppBriefOperatorWithArg (Prioritise cache as) proc = do+ (if cache then M.text "prioritise" else M.text "prioritise_nocache")+ M.<> M.parens (proc M.<> M.comma M.<+> M.ellipsis)+ppBriefOperatorWithArg op proc =+ M.prettyPrint op M.<> M.parens proc+ +instance (F.Foldable f) => M.MonadicPrettyPrintable EvaluationMonad (f Event) where+ prettyPrint sevs =+ let+ evs = F.toList sevs+ (vevents, oevents) = partition isUserEvent evs+ isUserEvent (UserEvent _) = True+ isUserEvent _ = False+ in case evs of+ [] -> M.braces M.empty+ _ -> do+ mvs <- compressIntoEnumeratedSet (fromList (map (\ (UserEvent v) -> v) vevents))+ case mvs of+ Just vs -> do+ ds1 <- mapM M.prettyPrint vs+ ds2 <- mapM M.prettyPrint oevents+ M.braces (M.bars (M.list (return $ ds2++ds1)))+ Nothing -> + -- Compression unsucesful+ M.braces (M.list (mapM M.prettyPrint evs))++instance (F.Foldable f) => M.MonadicPrettyPrintable Identity (f Event) where+ prettyPrint evs = M.braces (M.list (mapM M.prettyPrint (F.toList evs)))++instance (Applicative m, Monad m, M.MonadicPrettyPrintable m Value) =>+ M.MonadicPrettyPrintable m ProcName where+ prettyPrint (ProcName s) = M.prettyPrint s+ prettyPrintBrief (ProcName s) = M.prettyPrintBrief s++instance (Applicative m, Monad m, M.MonadicPrettyPrintable m Value) =>+ M.MonadicPrettyPrintable m ScopeIdentifier where+ prettyPrint (SFunctionBind n args Nothing) =+ M.prettyPrint n+ M.<> M.hcat (mapM (\as -> M.parens (M.list (mapM M.prettyPrint as))) args)+ prettyPrint (SFunctionBind n args (Just pn)) =+ M.prettyPrint pn M.<> M.text "::" M.<> M.prettyPrint (SFunctionBind n args Nothing)+ prettyPrint (SVariableBind args Nothing) =+ M.text "ANNON" M.<> (M.parens (M.list (mapM M.prettyPrint args)))+ prettyPrint (SVariableBind args (Just pn)) =+ M.prettyPrint pn M.<> M.text "::" M.<> M.prettyPrint (SVariableBind args Nothing)++ prettyPrintBrief (SFunctionBind n args Nothing) =+ let+ spaceThreashold = 15++ spaceCost :: Value -> Int+ spaceCost (VInt _) = 1+ spaceCost (VChar _) = 1+ spaceCost (VBool _) = 1+ spaceCost (VTuple arr) = 2 + length vs + sum (map spaceCost vs)+ where vs = F.toList arr + spaceCost (VDot vs) = length vs + sum (map spaceCost vs)+ spaceCost (VChannel n) = length (show (prettyPrint n))+ spaceCost (VDataType n) = length (show (prettyPrint n))+ spaceCost (VList vs) = 2 + length vs + sum (map spaceCost vs)+ spaceCost (VSet s) = 2 + length vs + sum (map spaceCost vs)+ where vs = toList s+ spaceCost (VMap m) =+ 2 + sum (map spaceCost (map fst vs ++ map snd vs))+ where vs = Mp.toList m+ spaceCost (VFunction _ _) = spaceThreashold+ spaceCost (VProc _) = spaceThreashold+ spaceCost (VThunk _) = spaceThreashold+ + smallPP :: (Applicative m, Monad m, M.MonadicPrettyPrintable m Value)+ => Value -> m Doc+ smallPP v | spaceCost v < spaceThreashold = M.prettyPrintBrief v+ smallPP _ = M.ellipsis+ in M.prettyPrintBrief n M.<> M.hcat (mapM (\as ->+ if length as >= spaceThreashold then M.ellipsis+ else M.parens $ M.list $ mapM smallPP as) args)+ prettyPrintBrief (SFunctionBind n args (Just pn)) =+ M.prettyPrintBrief pn M.<> M.text "::"+ M.<> M.prettyPrintBrief (SFunctionBind n args Nothing)+ prettyPrintBrief (SVariableBind args Nothing) =+ M.text "ANNON" M.<> (M.parens (M.list (mapM M.prettyPrintBrief args)))+ prettyPrintBrief (SVariableBind args (Just pn)) =+ M.prettyPrintBrief pn M.<> M.text "::"+ M.<> M.prettyPrintBrief (SVariableBind args Nothing)++instance (Applicative m, F.Foldable seq, Functor seq, Monad m, + M.MonadicPrettyPrintable m ev, M.MonadicPrettyPrintable m evs) => + M.MonadicPrettyPrintable m (CSPOperator seq ev evs (seq (ev,ev))) where+ prettyPrintBrief (PAlphaParallel _) = M.text "[ || ]"+ prettyPrintBrief (PException _) = M.text "[| |>"+ prettyPrintBrief PExternalChoice = M.text "[]"+ prettyPrintBrief (PGenParallel _) = M.text "[| |]"+ prettyPrintBrief (PHide _) = M.text "\\"+ prettyPrintBrief PInternalChoice = M.text "|~|"+ prettyPrintBrief PInterrupt = M.text "/\\"+ prettyPrintBrief PInterleave = M.text "|||"+ prettyPrintBrief (PLinkParallel _) = M.text "[ <-> ]"+ prettyPrintBrief (POperator op) = M.prettyPrintBrief op+ prettyPrintBrief (PPrefix _) = M.text "->"+ prettyPrintBrief (PRename _) = M.text "[[ ]]"+ prettyPrintBrief PSequentialComp = M.text ";"+ prettyPrintBrief PSlidingChoice = M.text "[>"+ prettyPrintBrief (PSynchronisingExternalChoice _) = M.text "[+ +]"+ prettyPrintBrief (PSynchronisingInterrupt _) = M.text "/+ +\\"++ prettyPrint (PAlphaParallel as) =+ M.text "Alphabetised parallel with process alphabets:"+ M.$$ (M.tabIndent $ M.vcat $+ mapM (\ (cid, a) -> M.int cid M.<> M.colon M.<+> M.prettyPrint a)+ (zip [1..] (F.toList as)))+ prettyPrint (PException a) =+ M.text "Exception with event set:"+ M.$$ M.tabIndent (M.prettyPrint a)+ prettyPrint PExternalChoice = M.text "External Choice"+ prettyPrint (PGenParallel a) =+ M.text "Generalised Parallel synchronising:"+ M.$$ M.tabIndent (M.prettyPrint a)+ prettyPrint (PHide a) =+ M.text "Hiding event set:"+ M.$$ M.tabIndent (M.prettyPrint a)+ prettyPrint PInternalChoice = M.text "Internal Choice"+ prettyPrint PInterrupt = M.text "Interrupt"+ prettyPrint PInterleave = M.text "Interleave"+ prettyPrint (PLinkParallel em) =+ M.text "Link Parallel synchronising:"+ M.$$ (M.tabIndent $ M.vcat $+ mapM (\(ev1, ev2) ->+ M.prettyPrint ev1 M.<+> M.text "<->" M.<+> M.prettyPrint ev2)+ (F.toList em))+ prettyPrint (POperator op) = + M.text "Compression using" M.<+> M.prettyPrint op+ prettyPrint (PPrefix ev) = M.text "Prefix" M.<+> M.prettyPrint ev+ prettyPrint (PRename em) =+ M.text "Renaming using map:"+ M.$$ (M.tabIndent $ M.vcat $+ mapM (\(ev1, ev2) ->+ M.prettyPrint ev1 M.<+> M.text "->" M.<+> M.prettyPrint ev2)+ (F.toList em))+ prettyPrint PSequentialComp = M.text "Sequential Composition"+ prettyPrint PSlidingChoice = M.text "Sliding Choice"+ prettyPrint (PSynchronisingExternalChoice evs) =+ M.text "Synchronising external choice, synchronising on:"+ M.$$ M.tabIndent (M.prettyPrint evs)+ prettyPrint (PSynchronisingInterrupt evs) =+ M.text "Synchronising interrupt, synchronising on:"+ M.$$ M.tabIndent (M.prettyPrint evs)++instance Precedence (Proc seq CSPOperator pn ev evs (seq (ev,ev))) where+ precedence (PUnaryOp (PHide _) _) = 10+ precedence (POp PInterleave _) = 9+ precedence (PBinaryOp (PException _) _ _) = 8+ precedence (POp (PAlphaParallel _) _) = 8+ precedence (POp (PGenParallel _) _) = 8+ precedence (PBinaryOp (PLinkParallel _) _ _) = 8+ precedence (POp PInternalChoice _) = 7+ precedence (POp PExternalChoice _) = 6+ precedence (POp (PSynchronisingExternalChoice _) _) = 6+ precedence (PBinaryOp PInterrupt _ _) = 5+ precedence (PBinaryOp (PSynchronisingInterrupt _) _ _) = 5+ precedence (PBinaryOp PSlidingChoice _ _) = 4+ precedence (PBinaryOp PSequentialComp _ _) = 3+ precedence (PUnaryOp (PPrefix _) _) = 2+ precedence (PUnaryOp (PRename _) _) = 1++ precedence (PProcCall _ _) = 0+ precedence (PUnaryOp (POperator _) _) = 0++ppBinaryOp, ppBriefBinaryOp ::+ (F.Foldable seq, Functor seq, M.MonadicPrettyPrintable m pn,+ M.MonadicPrettyPrintable m ev, M.MonadicPrettyPrintable m evs) => + Proc seq CSPOperator pn ev evs (seq (ev,ev)) ->+ m Doc ->+ Proc seq CSPOperator pn ev evs (seq (ev,ev)) -> + Proc seq CSPOperator pn ev evs (seq (ev,ev)) ->+ m Doc+ppBriefBinaryOp op opd p1 p2 =+ M.sep (sequence [M.prettyPrintBriefPrec (precedence op) p1,+ opd M.<+> M.prettyPrintBriefPrec (precedence op) p2])+ppBinaryOp = M.ppBinaryOp++maybeNull :: (Applicative m, F.Foldable s, Monad m) => s a -> m Doc -> m Doc+maybeNull s _ | null (F.toList s) = M.text "STOP"+maybeNull _ d = d++maybeNull' :: (Applicative m, F.Foldable s, Monad m) => s a -> m Doc -> m Doc+maybeNull' s _ | null (F.toList s) = M.text "SKIP"+maybeNull' _ d = d++instance + (F.Foldable seq, Functor seq, M.MonadicPrettyPrintable m pn,+ M.MonadicPrettyPrintable m ev, M.MonadicPrettyPrintable m evs) => + M.MonadicPrettyPrintable m + (Proc seq CSPOperator pn ev evs (seq (ev,ev))) where++ prettyPrint (op@(POp (PAlphaParallel as) ps)) = maybeNull' ps $ + case length (F.toList as) of+ 1 -> + let [p1] = F.toList ps+ [a1] = F.toList as+ in+ M.prettyPrintBriefPrec (precedence op) p1 M.<+>+ M.text "[" M.<> M.prettyPrint a1 M.<+> M.text "|| {}] SKIP"+ 2 ->+ let [p1, p2] = F.toList ps+ [a1, a2] = F.toList as+ in ppBinaryOp op (+ M.char '[' M.<> M.prettyPrint a1 M.<+>+ M.text "||" M.<+> M.prettyPrint a2 M.<> M.char ']') p1 p2+ _ ->+ M.text "|| (a, p) :" M.<+> M.braces (M.list (+ zipWithM (\ a p -> M.parens $ M.sep $ sequence [+ M.prettyPrint a, M.comma M.<+> M.prettyPrint p]+ ) (F.toList as) (F.toList ps))) M.<+> M.text "@ [a] p"+ prettyPrint (op@(PBinaryOp (PException a) p1 p2)) =+ ppBinaryOp op (M.text "[|" M.<+> M.prettyPrint a M.<+> M.text "|>") p1 p2+ prettyPrint (op@(POp PExternalChoice ps)) =+ let flatten (POp PExternalChoice ps) = concatMap flatten (F.toList ps)+ flatten p = [p]+ ps' = flatten (POp PExternalChoice ps)+ in maybeNull ps' $ M.sep (M.punctuateFront (M.text "[] ") $+ mapM (M.prettyPrintPrec op) ps')+ prettyPrint (op@(POp (PGenParallel a) ps)) = maybeNull' ps $ + M.sep (M.punctuateFront+ (M.text "[|" M.<+> M.prettyPrint a M.<+> M.text "|] ")+ (mapM (M.prettyPrintPrec op) (F.toList ps)))+ prettyPrint (op@(PUnaryOp (PHide a) p)) =+ M.prettyPrintPrec op p+ M.<+> M.char '\\' M.<+> M.prettyPrint a+ prettyPrint (op@(POp PInternalChoice ps)) =+ let flatten (POp PInternalChoice ps) = concatMap flatten (F.toList ps)+ flatten p = [p]+ ps' = flatten (POp PInternalChoice ps)+ in M.sep (M.punctuateFront (M.text "|~| ") $+ mapM (M.prettyPrintPrec op) ps')+ prettyPrint (op@(POp PInterleave ps)) = maybeNull ps $ + M.sep (M.punctuateFront (M.text "||| ") $+ mapM (M.prettyPrintPrec op) $ F.toList ps)+ prettyPrint (op@(PBinaryOp PInterrupt p1 p2)) =+ ppBinaryOp op (M.text "/\\") p1 p2+ prettyPrint (op@(PBinaryOp (PLinkParallel evm) p1 p2)) =+ M.prettyPrintPrec op p1 M.<+> M.text "[" M.<>+ M.list (mapM (\(evLeft, evRight) -> + M.prettyPrint evLeft M.<+> M.text "<->" + M.<+> M.prettyPrint evRight) $ F.toList evm)+ M.<> M.text "]" M.<+> M.prettyPrintPrec op p2+ prettyPrint (op@(PUnaryOp (POperator cop) p)) = + ppOperatorWithArg cop (M.prettyPrint p)+ prettyPrint (op@(PUnaryOp (PPrefix e) p)) =+ M.prettyPrint e M.<+> M.text "->"+ M.<+> M.prettyPrintPrec op p+ prettyPrint (op@(PUnaryOp (PRename evm) p)) =+ M.prettyPrintPrec op p M.<> M.text "[[" + M.<> M.list (mapM (\ (evOld, evNew) -> + M.prettyPrint evOld M.<+> M.text "<-" + M.<+> M.prettyPrint evNew) $ F.toList evm) + M.<> M.text "]]"+ prettyPrint (op@(PBinaryOp PSequentialComp p1 p2)) =+ ppBinaryOp op (M.char ';') p1 p2+ prettyPrint (op@(PBinaryOp PSlidingChoice p1 p2)) =+ ppBinaryOp op (M.text "[>") p1 p2+ prettyPrint (PProcCall n _) = M.prettyPrint n+ prettyPrint (op@(POp (PSynchronisingExternalChoice alpha) ps)) =+ let ps' = F.toList ps+ in maybeNull ps' $ M.sep (M.punctuateFront+ (M.text "[+" M.<> M.prettyPrint alpha M.<> M.text "+] ") $+ mapM (M.prettyPrintPrec op) ps')+ prettyPrint (op@(PBinaryOp (PSynchronisingInterrupt es) p1 p2)) =+ ppBinaryOp op (M.text "/+" M.<+> M.prettyPrint es M.<+> M.text "+\\")+ p1 p2++ prettyPrintBrief (op@(POp (PAlphaParallel as) ps)) = maybeNull' ps $ + if length (F.toList as) == 1 then+ let [p] = F.toList ps in+ M.prettyPrintBriefPrec (precedence op) p M.<+> M.text "[…||…] SKIP"+ else M.sep (M.punctuateFront (M.text "[…||…] ")+ (mapM (M.prettyPrintBriefPrec (precedence op)) (F.toList ps)))+ prettyPrintBrief (op@(PBinaryOp (PException a) p1 p2)) =+ ppBriefBinaryOp op (M.text "[|…|>") p1 p2+ prettyPrintBrief (op@(POp PExternalChoice ps)) =+ let flatten (POp PExternalChoice ps) = concatMap flatten (F.toList ps)+ flatten p = [p]+ ps' = flatten (POp PExternalChoice ps)+ in maybeNull ps' $ M.sep (M.punctuateFront (M.text "[] ") $+ mapM (M.prettyPrintBriefPrec (precedence op)) ps')+ prettyPrintBrief (op@(POp (PGenParallel a) ps)) = maybeNull' ps $ + M.sep (M.punctuateFront (M.text "[|…|] ")+ (mapM (M.prettyPrintBriefPrec (precedence op)) (F.toList ps)))+ prettyPrintBrief (op@(PUnaryOp (PHide a) p)) =+ M.prettyPrintBriefPrec (precedence op) p+ M.<+> M.char '\\' M.<+> M.braces M.ellipsis+ prettyPrintBrief (op@(POp PInternalChoice ps)) =+ let flatten (POp PInternalChoice ps) = concatMap flatten (F.toList ps)+ flatten p = [p]+ ps' = flatten (POp PInternalChoice ps)+ in M.sep (M.punctuateFront (M.text "|~| ") $+ mapM (M.prettyPrintBriefPrec (precedence op)) ps')+ prettyPrintBrief (op@(POp PInterleave ps)) = maybeNull ps $ + M.sep (M.punctuateFront (M.text "||| ") $+ mapM (M.prettyPrintBriefPrec (precedence op)) $ F.toList ps)+ prettyPrintBrief (op@(PBinaryOp PInterrupt p1 p2)) =+ ppBriefBinaryOp op (M.text "/\\") p1 p2+ prettyPrintBrief (op@(PBinaryOp (PLinkParallel evm) p1 p2)) =+ ppBriefBinaryOp op (M.text "[…<->…]") p1 p2+ prettyPrintBrief (op@(PUnaryOp (POperator cop) p)) = + ppBriefOperatorWithArg cop (M.prettyPrintBriefPrec 100 p)+ prettyPrintBrief (op@(PUnaryOp (PPrefix e) p)) =+ M.prettyPrintBrief e M.<+> M.text "->" M.<+> M.ellipsis+ --M.<+> M.prettyPrintBriefPrec (precedence op) p+ prettyPrintBrief (op@(PUnaryOp (PRename evm) p)) =+ M.prettyPrintBriefPrec (precedence op) p M.<> M.text "[[…]]"+ prettyPrintBrief (op@(PBinaryOp PSequentialComp p1 p2)) =+ ppBriefBinaryOp op (M.char ';') p1 p2+ prettyPrintBrief (op@(PBinaryOp PSlidingChoice p1 p2)) =+ ppBriefBinaryOp op (M.text "[>") p1 p2+ prettyPrintBrief (op@(POp (PSynchronisingExternalChoice alpha) ps)) =+ let ps' = F.toList ps+ in maybeNull ps' $ M.sep (M.punctuateFront (M.text "[+…+] ") $+ mapM (M.prettyPrintBriefPrec (precedence op)) ps')+ prettyPrintBrief (op@(PBinaryOp (PSynchronisingInterrupt es) p1 p2)) =+ ppBriefBinaryOp op (M.text "/+…+\\") p1 p2+ prettyPrintBrief (PProcCall n _) = M.prettyPrintBrief n++instance (Applicative m, Monad m,+ M.MonadicPrettyPrintable m TCExp,+ M.MonadicPrettyPrintable m UProc,+ M.MonadicPrettyPrintable m UProcOperator,+ M.MonadicPrettyPrintable m ValueSet) =>+ M.MonadicPrettyPrintable m Value where+ prettyPrint (VInt i) = M.int i+ prettyPrint (VChar c) = M.quotes (M.char c)+ prettyPrint (VBool True) = M.text "true"+ prettyPrint (VBool False) = M.text "false"+ prettyPrint (VTuple vs) = M.parens (M.list $ mapM M.prettyPrint (elems vs))+ prettyPrint (VDot vs) = M.dotSep (mapM M.prettyPrint vs)+ prettyPrint (VChannel n) = M.prettyPrint n+ prettyPrint (VDataType n) = M.prettyPrint n+ prettyPrint (VList (vs@((VChar _) : _))) =+ M.doubleQuotes (M.text (map (\ (VChar c) -> c) vs))+ prettyPrint (VList vs) = M.angles (M.list $ mapM M.prettyPrint vs)+ prettyPrint (VSet s) = M.prettyPrint s+ prettyPrint (VMap m) =+ M.text "(|" M.<+> M.list (mapM+ (\ (k,v) -> M.prettyPrint k M.<+> M.text "=>" M.<+> M.prettyPrint v)+ (Mp.toList m))+ M.<+> M.text "|)"+ prettyPrint (VFunction (FBuiltInFunction n args) _) =+ M.prettyPrint n M.<> case args of+ [] -> M.empty+ _ -> M.parens (M.list (mapM M.prettyPrint args))+ prettyPrint (VFunction (FLambda e Nothing) _) = M.prettyPrint e+ prettyPrint (VFunction (FLambda e (Just p)) _) =+ M.prettyPrint p M.<> M.text "::" M.<> M.parens (M.prettyPrint e)+ prettyPrint (VFunction (FMatchBind n args parent) _) =+ (case parent of+ Just pid -> M.prettyPrint pid M.<> M.text "::"+ Nothing -> M.empty+ ) M.<> M.prettyPrint n M.<>+ case args of+ [] -> M.empty+ _ -> M.hcat (mapM (\ as -> M.parens (M.list (mapM M.prettyPrint as))) args)+ prettyPrint (VProc p) = M.prettyPrint p+ prettyPrint (VThunk th) = M.text "<thunk>"++ prettyPrintBrief (VSet s) = M.braces M.ellipsis+ prettyPrintBrief (VMap m) = M.text "(|" M.<+> M.ellipsis M.<+> M.text "|)"+ prettyPrintBrief (VList s) = M.angles M.ellipsis+ prettyPrintBrief (VTuple vs) =+ M.parens (M.list $ mapM M.prettyPrintBrief (elems vs))+ prettyPrintBrief (VDot vs) = M.dotSep (mapM M.prettyPrintBrief vs)+ prettyPrintBrief (VChannel n) = M.prettyPrint n+ prettyPrintBrief (VDataType n) = M.prettyPrint n+ prettyPrintBrief (VFunction _ _) = M.text "<function>"+ prettyPrintBrief (VProc p) = M.prettyPrintBrief p+ prettyPrintBrief v = M.prettyPrint v ++instance M.MonadicPrettyPrintable EvaluationMonad ValueSet where+ prettyPrint Integers = M.text "Integers"+ prettyPrint Processes = M.text "Proc"+ prettyPrint (IntSetFrom lb) = M.braces (M.int lb M.<> M.text "...")+ prettyPrint (AllSequences vs) = M.text "Seq" M.<> M.parens (M.prettyPrint vs)+ prettyPrint (CartesianProduct vss CartTuple) =+ M.parens (M.list (mapM M.prettyPrint vss))+ prettyPrint (CompositeSet ss) =+ M.text "Union" M.<> M.parens (M.braces (M.list (mapM M.prettyPrint (F.toList ss))))+ prettyPrint s = do+ -- Try and compress+ mvs <- compressIntoEnumeratedSet s+ case mvs of+ Just vs ->+ -- Compression succesful+ M.text "{|" M.<> M.list (mapM M.prettyPrint vs) M.<> M.text "|}"+ Nothing -> + case s of+ CartesianProduct vss CartDot ->+ M.hcat (M.punctuate (M.text ".") (mapM M.prettyPrint vss))+ ExplicitSet _ ->+ M.braces (M.list (mapM M.prettyPrint (toList s)))++instance M.MonadicPrettyPrintable Identity ValueSet where+ prettyPrint Integers = M.text "Integers"+ prettyPrint Processes = M.text "Proc"+ prettyPrint (IntSetFrom lb) = M.braces (M.int lb M.<> M.text "...")+ prettyPrint (AllSequences vs) = M.text "Seq" M.<> M.parens (M.prettyPrint vs)+ prettyPrint (CartesianProduct vss CartTuple) =+ M.parens (M.list (mapM M.prettyPrint vss))+ prettyPrint (CompositeSet ss) =+ M.text "Union" M.<> M.parens (M.braces (M.list (mapM M.prettyPrint (F.toList ss))))+ prettyPrint (CartesianProduct vss CartDot) =+ M.hcat (M.punctuate (M.text ".") (mapM M.prettyPrint vss))+ prettyPrint (s@(ExplicitSet _)) =+ M.braces (M.list (mapM M.prettyPrint (toList s)))++-- | Pretty prints the given process and all processes that it depends upon.+prettyPrintAllRequiredProcesses ::+ (F.Foldable seq, PrettyPrintable (Proc seq op ProcName ev evs evm)) => + Proc seq op ProcName ev evs evm -> Doc+prettyPrintAllRequiredProcesses p =+ let+ (pInit, namedPs') = splitProcIntoComponents p+ stopName = head [name b | b <- builtins False, stringName b == "STOP"]+ namedPs =+ filter (\ (ProcName s, _) -> scopeFunctionName s /= stopName) namedPs'+ ppNamedProc (n,p) =+ hang (prettyPrint n <+> char '=') tabWidth (prettyPrint p)+ in vcat (punctuate (char '\n') ((map ppNamedProc namedPs)++[prettyPrint pInit]))
src/CSPM/Evaluator/ValueSet.hs view
@@ -6,32 +6,42 @@ -- places that infinite sets are allowed. module CSPM.Evaluator.ValueSet ( -- * Construction- ValueSet(Integers, Processes, IntSetFrom),- emptySet, fromList, toList,+ ValueSet(..),+ emptySet, fromList, toList, toSeq, -- * Basic Functions compareValueSets, member, card, empty,- union, unions,+ union, unions, infiniteUnions, intersection, intersections, difference, -- * Derived functions- cartesianProduct, powerset, allSequences,+ CartProductType(..), cartesianProduct, powerset, allSequences, allMaps,+ fastUnDotCartProduct, -- * Specialised Functions singletonValue,- valueSetToEventSet+ valueSetToEventSet,+ unDotProduct, ) where import Control.Monad+import qualified Data.Foldable as F+import Data.Hashable+import Data.List (sort)+import qualified Data.Map as M import qualified Data.Set as S+import qualified Data.Sequence as Sq+import qualified Data.Traversable as T -import CSPM.Evaluator.Exceptions+import {-# SOURCE #-} CSPM.Evaluator.Exceptions import CSPM.Evaluator.Values-import qualified CSPM.Compiler.Events as CE-import qualified CSPM.Compiler.Set as CS+import qualified CSPM.Evaluator.ProcessValues as CE import Util.Exception-import Util.PrettyPrint hiding (empty)+import qualified Util.List as UL+import Util.Prelude +data CartProductType = CartDot | CartTuple deriving (Eq, Ord)+ data ValueSet = -- | Set of all integers Integers@@ -40,27 +50,54 @@ -- | An explicit set of values | ExplicitSet (S.Set Value) -- | The infinite set of integers starting at lb.- | IntSetFrom Int -- {lb..}- -- | A set of two value sets. Note that the tree of sets may be infinite.- -- NB. Composite sets are always infinite.- | CompositeSet ValueSet ValueSet- -- Only used for the internal set representation- deriving Ord+ | IntSetFrom Int+ -- | A union of several sets.+ | CompositeSet (Sq.Seq ValueSet)+ -- | A set containing all sequences over the given set.+ | AllSequences ValueSet+ -- | A cartesian product of several sets.+ | CartesianProduct [ValueSet] CartProductType+ -- | The powerset of the given set+ | Powerset ValueSet+ -- | The set of all maps from the given domain to the given image.+ | AllMaps ValueSet ValueSet +instance Hashable ValueSet where+ hash Integers = 1+ hash Processes = 2+ hash (IntSetFrom lb) = combine 3 lb+ hash (AllSequences vs) = combine 4 (hash vs)+ -- All the above are the ONLY possible representations of the sets (as the+ -- sets are infinite). However, other sets can be represented in multiple+ -- ways so we have to normalise to an explicit set, essentially. + -- This is already guaranteed to be sorted+ hash (ExplicitSet vs) = combine 5 (hash (S.toList vs))+ hash s = combine 5 (hash (sort $ toList s))+ instance Eq ValueSet where- s1 == s2 = compareValueSets s1 s2 == Just EQ+ s1 == s2 = compare s1 s2 == EQ+instance Ord ValueSet where+ -- Basic (possibly)-infinite cases+ compare Integers Integers = EQ+ compare Integers _ = GT+ compare _ Integers = LT+ compare Processes Processes = EQ+ compare Processes _ = GT+ compare _ Processes = LT+ compare (IntSetFrom lb1) (IntSetFrom lb2) = compare lb1 lb2+ compare (CartesianProduct vs1 cp1) (CartesianProduct vs2 cp2) =+ compare cp1 cp2 `thenCmp` compare vs1 vs2+ -- Mixed infinite cases -instance PrettyPrintable ValueSet where- prettyPrint Integers = text "Integers"- prettyPrint Processes = text "Proc"- prettyPrint (IntSetFrom lb) = braces (int lb <> text "...")- prettyPrint (ExplicitSet s) =- braces (list (map prettyPrint $ S.toList s))- prettyPrint (CompositeSet s1 s2) =- text "union" <> parens (prettyPrint s1 <> comma <+> prettyPrint s2)- -instance Show ValueSet where- show = show . prettyPrint+ -- Explicitly finite cases+ compare (CompositeSet s1) (CompositeSet s2) = compare s1 s2+ compare (AllSequences s1) (AllSequences s2) = compare s1 s2+ compare (ExplicitSet s1) (ExplicitSet s2) = compare s1 s2+ compare (Powerset s1) (Powerset s2) = compare s1 s2+ compare (AllMaps k1 v1) (AllMaps k2 v2) =+ compare k1 k2 `thenCmp` compare v1 v2+ -- Fallback to comparing the lists+ compare s1 s2 = compare (sort $ toList s1) (sort $ toList s2) flipOrder :: Maybe Ordering -> Maybe Ordering flipOrder Nothing = Nothing@@ -94,52 +131,65 @@ in if lb1 <= lb2 then Just GT else Nothing compareValueSets (ExplicitSet s1) (IntSetFrom lb1) = flipOrder (compareValueSets (IntSetFrom lb1) (ExplicitSet s1))- -- Composite Sets-compareValueSets (CompositeSet s1 s2) s =- case (compareValueSets s1 s, compareValueSets s2 s) of- (Nothing, _) -> Nothing- (_, Nothing) -> Nothing- (Just LT, Just x) -> if x /= GT then Just LT else Nothing- (Just EQ, Just x) -> Just x- (Just GT, Just x) -> if x /= LT then Just GT else Nothing-compareValueSets s (CompositeSet s1 s2) = - flipOrder (compareValueSets (CompositeSet s1 s2) s)-+compareValueSets (CompositeSet ss) s =+ compareValueSets (fromList (toList (CompositeSet ss))) s+compareValueSets s (CompositeSet ss) = + flipOrder (compareValueSets (CompositeSet ss) s)+compareValueSets s1 s2 | empty s1 && empty s2 = Just EQ+compareValueSets s1 s2 | empty s1 && not (empty s2) = Just LT+compareValueSets s1 s2 | not (empty s1) && empty s2 = Just GT+-- AllSequences+ExplicitSet sets+compareValueSets (AllSequences vs1) (AllSequences vs2) = compareValueSets vs1 vs2+compareValueSets (ExplicitSet vs) (AllSequences vss) =+ if and (map (flip member (AllSequences vss)) (S.toList vs)) then Just LT+ -- Otherwise, there is some item in vs that is not in vss. However, unless+ -- vss is empty there must be some value in the second set that is not in+ -- the first, since (AllSequences vss) is infinite and, if the above+ -- finishes, we know the first set is finite. Hence, they would be+ -- incomparable.+ else Nothing+compareValueSets (AllSequences vss) (ExplicitSet vs) =+ flipOrder (compareValueSets (ExplicitSet vs) (AllSequences vss))+-- CartesianProduct+ExplicitSet sets+compareValueSets (CartesianProduct vss1 vc1) (CartesianProduct vss2 vc2) | vc1 == vc2 =+ let os = zipWith compareValueSets vss1 vss2+ order v [] = v+ order (Just LT) (Just x : xs) | x /= GT = order (Just LT) xs+ order (Just EQ) (Just x : xs) = order (Just x) xs+ order (Just GT) (Just x : xs) | x /= LT = order (Just GT) xs+ order _ _ = Nothing+ in order (head os) os+compareValueSets (ExplicitSet vs) (CartesianProduct vsets vc) =+ compareValueSets (ExplicitSet vs) (fromList (toList (CartesianProduct vsets vc)))+compareValueSets (CartesianProduct vsets vc) (ExplicitSet vs) =+ flipOrder (compareValueSets (ExplicitSet vs) (CartesianProduct vsets vc))+compareValueSets (Powerset vs1) (Powerset vs2) = compareValueSets vs1 vs2+compareValueSets s1 (Powerset s2) =+ compareValueSets s1 (fromList (toList (Powerset s2)))+compareValueSets (Powerset s1) s2 = flipOrder (compareValueSets s2 (Powerset s1))+compareValueSets s1 (AllMaps ks vs) =+ compareValueSets s1 (fromList (toList (AllMaps ks vs)))+compareValueSets (AllMaps ks vs) s2 = + flipOrder (compareValueSets s2 (AllMaps ks vs)) -- Anything else is incomparable---compareValueSets _ _ = Nothing+compareValueSets _ _ = Nothing -- | Produces a ValueSet of the carteisan product of several ValueSets, -- using 'vc' to convert each sequence of values into a single value.-cartesianProduct :: ([Value] -> Value) -> [ValueSet] -> ValueSet-cartesianProduct vc = fromList . map vc . sequence . map toList+cartesianProduct :: CartProductType -> [ValueSet] -> ValueSet+cartesianProduct vc vss = CartesianProduct vss vc --- | Returns the powerset of a ValueSet. This requires powerset :: ValueSet -> ValueSet-powerset = fromList . map (VSet . fromList) . - filterM (\x -> [True, False]) . toList+powerset = Powerset -- | Returns the set of all sequences over the input set. This is infinite -- so we use a CompositeSet. allSequences :: ValueSet -> ValueSet-allSequences s = if empty s then emptySet else - let - itemsAsList :: [Value]- itemsAsList = toList s-- list :: Integer -> [Value]- list 0 = [VList []]- list n = concatMap (\x -> map (app x) (list (n-1))) itemsAsList- where- app :: Value -> Value -> Value- app x (VList xs) = VList $ x:xs- - yielder :: [Value] -> ValueSet- yielder (x:xs) = CompositeSet (ExplicitSet (S.singleton x)) (yielder xs)+allSequences s = AllSequences s - allSequences :: [Value]- allSequences = concatMap list [0..]- in yielder allSequences+allMaps :: ValueSet -> ValueSet -> ValueSet+allMaps ks vs = AllMaps ks vs -- | The empty set emptySet :: ValueSet@@ -153,46 +203,115 @@ toList :: ValueSet -> [Value] toList (ExplicitSet s) = S.toList s toList (IntSetFrom lb) = map VInt [lb..]-toList (CompositeSet s1 s2) = toList s1 ++ toList s2-toList Integers = throwSourceError [cannotConvertIntegersToListMessage]+toList (CompositeSet ss) = F.msum (fmap toList ss)+toList Integers =+ let merge (x:xs) ys = x:merge ys xs in map VInt $ merge [0..] [(-1),(-2)..] toList Processes = throwSourceError [cannotConvertProcessesToListMessage]+toList (AllSequences vs) =+ if empty vs then [] else + let + itemsAsList :: [Value]+ itemsAsList = toList vs + list :: Integer -> [Value]+ list 0 = [VList []]+ list n = concatMap (\x -> map (app x) (list (n-1))) itemsAsList+ where+ app :: Value -> Value -> Value+ app x (VList xs) = VList $ x:xs+ + allSequences :: [Value]+ allSequences = concatMap list [0..]+ in allSequences+toList (CartesianProduct vss ct) =+ let cp = UL.cartesianProduct (map toList vss)+ in case ct of+ CartTuple -> map tupleFromList cp+ CartDot -> map VDot cp+toList (Powerset vs) =+ (map (VSet . fromList) . filterM (\x -> [True, False]) . toList) vs+toList (AllMaps ks' vs') =+ let ks = toList (Powerset ks')+ vs = toList vs'+ -- | Creates all maps that have the given set as its domain+ makeMaps :: [Value] -> [Value]+ makeMaps [] = [VMap $ M.empty]+ makeMaps (k:ks) =+ map (\ [VMap m, v] -> VMap $ M.insert k v m)+ (UL.cartesianProduct [makeMaps ks, vs])+ in concatMap (\ (VSet s) -> makeMaps (toList s)) ks++toSeq :: ValueSet -> Sq.Seq Value+toSeq (ExplicitSet s) = F.foldMap Sq.singleton s+toSeq (IntSetFrom lb) = fmap VInt (Sq.fromList [lb..])+toSeq (CompositeSet ss) = F.msum (fmap toSeq ss)+toSeq (AllSequences vs) = Sq.fromList (toList (AllSequences vs))+toSeq (CartesianProduct vss ct) = Sq.fromList (toList (CartesianProduct vss ct))+toSeq (Powerset vs) = Sq.fromList (toList (Powerset vs))+toSeq (AllMaps ks vs) = Sq.fromList (toList (AllMaps ks vs))+toSeq Integers = throwSourceError [cannotConvertIntegersToListMessage]+toSeq Processes = throwSourceError [cannotConvertProcessesToListMessage]+ -- | Returns the value iff the set contains one item only. singletonValue :: ValueSet -> Maybe Value-singletonValue s =- let- isSingleton :: ValueSet -> Bool- isSingleton (ExplicitSet s) = S.size s == 1- isSingleton _ = False- in if isSingleton s then Just (head (toList s)) else Nothing+singletonValue s = case toList s of+ [x] -> Just x+ _ -> Nothing -- | Is the specified value a member of the set. member :: Value -> ValueSet -> Bool member v (ExplicitSet s) = S.member v s member (VInt i) Integers = True member (VInt i) (IntSetFrom lb) = i >= lb-member v (CompositeSet s1 s2) = member v s1 || member v s2+member v (CompositeSet ss) = F.or (fmap (member v) ss) -- FDR does actually try and given the correct value here. member (VProc p) Processes = True+member (VList vs) (AllSequences s) = and (map (flip member s) vs)+member (VDot vs) (CartesianProduct vss CartDot) = and (zipWith member vs vss)+member (VTuple vs) (CartesianProduct vss CartTuple) =+ and (zipWith member (elems vs) vss)+member (VSet s) (Powerset vs) = and (map (\v -> member v vs) (toList s))+member (VMap m) (AllMaps ks vs) =+ and (map (flip member ks) (map fst (M.toList m)))+ && and (map (flip member vs) (map snd (M.toList m))) member v s1 = throwSourceError [cannotCheckSetMembershipError v s1] -- | The cardinality of the set. Throws an error if the set is infinite. card :: ValueSet -> Integer card (ExplicitSet s) = toInteger (S.size s)+card (CompositeSet ss) = F.sum (fmap card ss)+card (CartesianProduct vss _) = product (map card vss)+card (Powerset s) = 2^(card s)+card (AllMaps ks vs) =+ -- For each key, we can either not map it to anything, or map it to one+ -- of the values+ (card vs + 1) ^ (card ks) card s = throwSourceError [cardOfInfiniteSetMessage s] -- | Is the specified set empty? empty :: ValueSet -> Bool empty (ExplicitSet s) = S.null s-empty (CompositeSet s1 s2) = False+empty (CompositeSet ss) = F.and (fmap empty ss) empty (IntSetFrom lb) = False+empty (AllSequences s) = empty s+empty (CartesianProduct vss _) = or (map empty vss) empty Processes = False empty Integers = False+empty (Powerset s) = False+empty (AllMaps ks vs) = False -- | Replicated union. unions :: [ValueSet] -> ValueSet-unions vs = foldr union (ExplicitSet S.empty) vs+unions [] = emptySet+unions vs = foldr1 union vs +infiniteUnions :: [ValueSet] -> ValueSet+infiniteUnions [vs] = vs+infiniteUnions vs =+ let extract (CompositeSet s) = s+ extract s = Sq.singleton s+ in CompositeSet (F.msum (map extract vs))+ -- | Replicated intersection. intersections :: [ValueSet] -> ValueSet intersections [] = emptySet@@ -208,18 +327,20 @@ union (IntSetFrom lb1) (IntSetFrom lb2) = IntSetFrom (min lb1 lb2) union _ Integers = Integers union Integers _ = Integers--- Composite unions-union s1 (s2 @ (CompositeSet _ _)) = CompositeSet s1 s2-union (s1 @ (CompositeSet _ _)) s2 = CompositeSet s1 s2 -- Explicit unions union (ExplicitSet s1) (ExplicitSet s2) = ExplicitSet (S.union s1 s2)-union (ExplicitSet s1) (IntSetFrom lb) =- CompositeSet (ExplicitSet s1) (IntSetFrom lb)-union (IntSetFrom lb) (ExplicitSet s1) =- CompositeSet (ExplicitSet s1) (IntSetFrom lb)---- The above are all the well typed possibilities---union s1 s2 = throwSourceError [cannotUnionSetsMessage s1 s2]+union (CompositeSet s1) (CompositeSet s2) = CompositeSet (s1 Sq.>< s2)+union (CompositeSet s1) s2 = CompositeSet (s2 Sq.<| s1)+union s1 (CompositeSet s2) = CompositeSet (s1 Sq.<| s2)+union (IntSetFrom lb) s = CompositeSet (Sq.fromList [IntSetFrom lb, s])+union s (IntSetFrom lb) = CompositeSet (Sq.fromList [IntSetFrom lb, s])+union (AllSequences s1) s2 = CompositeSet (Sq.fromList [AllSequences s1, s2])+union s2 (AllSequences s1) = CompositeSet (Sq.fromList [AllSequences s1, s2])+union (AllMaps k v) s2 = CompositeSet (Sq.fromList [AllMaps k v, s2])+union s2 (AllMaps k v) = CompositeSet (Sq.fromList [AllMaps k v, s2])+-- Otherwise, we force to an explicit set (this has better performance than+-- always forming an explicit set)+union s1 s2 = ExplicitSet $ S.union (S.fromList (toList s1)) (S.fromList (toList s2)) -- | Intersects two sets throwing an error if it cannot be done in a way that -- will terminate.@@ -245,9 +366,28 @@ intersection Processes Processes = Processes intersection Processes x = x intersection x Processes = x--- Composite sets are always infinite and therefore cannot be intersected in any--- finite way.-intersection s1 s2 = throwSourceError [cannotIntersectSetsMessage s1 s2]+-- Composite Sets+intersection (CompositeSet ss) s =+ CompositeSet (fmap (intersection s) ss)+intersection s (CompositeSet ss) =+ CompositeSet (fmap (intersection s) ss)+-- Cartesian product and all sequences - here we simpy convert to a list and+-- compare.+intersection (CartesianProduct vss vc) s =+ intersection (fromList (toList (CartesianProduct vss vc))) s+intersection s (CartesianProduct vss vc) =+ intersection (fromList (toList (CartesianProduct vss vc))) s+intersection (AllSequences vs) s =+ intersection (fromList (toList (AllSequences vs))) s+intersection s (AllSequences vs) =+ intersection (fromList (toList (AllSequences vs))) s+intersection (AllMaps ks vs) s =+ intersection (fromList (toList (AllMaps ks vs))) s+intersection s (AllMaps ks vs) =+ intersection (fromList (toList (AllMaps ks vs))) s+intersection (Powerset s1) (Powerset s2) = Powerset (intersection s1 s2)+intersection (Powerset s1) s2 = intersection (fromList (toList (Powerset s1))) s2+intersection s2 (Powerset s1) = intersection (fromList (toList (Powerset s1))) s2 difference :: ValueSet -> ValueSet -> ValueSet difference (ExplicitSet s1) (ExplicitSet s2) = ExplicitSet (S.difference s1 s2)@@ -270,7 +410,45 @@ throwSourceError [cannotDifferenceSetsMessage s1' s2'] difference (ExplicitSet s1) (IntSetFrom lb1) = ExplicitSet (S.fromList [VInt i | VInt i <- S.toList s1, i < lb1])-difference s1 s2 = throwSourceError [cannotDifferenceSetsMessage s1 s2]+difference (CompositeSet ss) s =+ CompositeSet (fmap (\s1 -> difference s1 s) ss)+difference s (CompositeSet ss) = F.foldl difference s ss+difference s1 s2 = difference (fromList (toList s1)) (fromList (toList s2)) -valueSetToEventSet :: ValueSet -> CS.Set CE.Event-valueSetToEventSet = CS.fromList . map valueEventToEvent . toList+valueSetToEventSet :: ValueSet -> CE.EventSet+valueSetToEventSet = CE.eventSetFromList . map valueEventToEvent . toList++-- | Attempts to decompose the set into a cartesian product, returning Nothing+-- if it cannot.+unDotProduct :: ValueSet -> Maybe [ValueSet]+unDotProduct (CartesianProduct vs CartTuple) = return [CartesianProduct vs CartTuple]+unDotProduct (CartesianProduct (s1:ss) CartDot) =+ -- This is reducible only if this set doesn't represent a set of datatype/+ -- channel items. If this is the case recursively express as a CartDot+ -- though+ case singletonValue s1 of+ Just (VDataType _) -> return [CartesianProduct (s1:ss) CartDot]+ Just (VChannel _) -> return [CartesianProduct (s1:ss) CartDot]+ _ -> return (s1:ss)+unDotProduct (AllSequences vs) = return [AllSequences vs]+unDotProduct (AllMaps ks vs) = return [AllMaps ks vs]+unDotProduct (IntSetFrom i1) = return [IntSetFrom i1]+unDotProduct (Powerset s) = return [Powerset s]+unDotProduct Integers = return [Integers]+unDotProduct Processes = return [Processes]+unDotProduct (CompositeSet ss) = do+ vs <- T.mapM unDotProduct ss+ let ok [_] = True+ ok _ = False+ ex [x] = x+ if F.and (fmap ok vs) then Just [CompositeSet (fmap ex vs)]+ else Nothing+unDotProduct (ExplicitSet s) | S.null s = return [ExplicitSet s]+unDotProduct (ExplicitSet s) =+ case head (S.toList s) of+ VDot _ -> Nothing+ _ -> Just [ExplicitSet s]++fastUnDotCartProduct :: ValueSet -> Maybe [ValueSet]+fastUnDotCartProduct (CartesianProduct s CartDot) = Just s+fastUnDotCartProduct _ = Nothing
src/CSPM/Evaluator/ValueSet.hs-boot view
@@ -1,15 +1,20 @@ module CSPM.Evaluator.ValueSet where +import Data.Hashable+ import {-# SOURCE #-} CSPM.Evaluator.Values-import Util.PrettyPrint data ValueSet+data CartProductType = CartDot | CartTuple instance Eq ValueSet+instance Hashable ValueSet instance Ord ValueSet-instance PrettyPrintable ValueSet toList :: ValueSet -> [Value] fromList :: [Value] -> ValueSet-cartesianProduct :: ([Value] -> Value) -> [ValueSet] -> ValueSet+cartesianProduct :: CartProductType -> [ValueSet] -> ValueSet compareValueSets :: ValueSet -> ValueSet -> Maybe Ordering+member :: Value -> ValueSet -> Bool+unDotProduct :: ValueSet -> Maybe [ValueSet]+difference :: ValueSet -> ValueSet -> ValueSet
src/CSPM/Evaluator/Values.hs view
@@ -1,32 +1,38 @@ module CSPM.Evaluator.Values (- Value(..), Proc(..), ProcOperator(..), Event(..),+ Value(..), UProc, UProcOperator, Proc(..), CSPOperator(..),+ ProcOperator(..), Event(..), EventSet,+ ScopeIdentifier(..), FunctionIdentifier(..), compareValues,- procId,+ procName, scopeId, annonymousScopeId, valueEventToEvent,- combineDots,- extensions, oneFieldExtensions,- productions,+ noSave, maybeSave, removeThunk, lookupVar,+ tupleFromList,+ trimValueForProcessName,+ module Data.Array, ) where -import Control.Monad-import Data.Foldable (foldrM)--import CSPM.Compiler.Events-import CSPM.Compiler.Processes import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax+import CSPM.DataStructures.Types import CSPM.Evaluator.Monad-import {-# SOURCE #-} CSPM.Evaluator.ValueSet hiding (cartesianProduct)-import CSPM.PrettyPrinter+import CSPM.Evaluator.ProcessValues+import {-# SOURCE #-} qualified CSPM.Evaluator.ValueSet as S+import Data.Array+import qualified Data.Foldable as F+import Data.Hashable+import qualified Data.Map as M+import Prelude hiding (lookup) import Util.Exception-import Util.List import Util.Prelude-import Util.PrettyPrint +type UProc = UnCompiledProc+type UProcOperator = UnCompiledProcOperator+ data Value = VInt Int+ | VChar Char | VBool Bool- | VTuple [Value]+ | VTuple (Array Int Value) -- | If A is a datatype clause that has 3 fields a b c then a runtime -- instantiation of this would be VDot [VDataType "A", a, b, c] where a,b -- and c can contain other VDots.@@ -36,19 +42,148 @@ | VChannel Name | VDataType Name | VList [Value]- | VSet ValueSet- | VFunction ([Value] -> EvaluationMonad Value)- | VProc Proc+ | VMap (M.Map Value Value)+ | VSet S.ValueSet+ | VFunction FunctionIdentifier ([Value] -> EvaluationMonad Value)+ | VProc UProc+ | VThunk (EvaluationMonad Value) +-- | A disambiguator between different occurences of either processes or+-- functions. This works by storing the values that are bound (i.e. the free+-- variables the inner `thing` may depend on). This is used as a 'ProcName' and+-- for 'FunctionIdentifier's.+data ScopeIdentifier =+ SFunctionBind {+ scopeFunctionName :: Name,+ scopeFunctionArguments :: [[Value]],+ parentScopeIdentifier :: Maybe ScopeIdentifier+ }+ | SVariableBind {+ variablesBound :: [Value],+ parentScopeIdentifier :: Maybe ScopeIdentifier+ }++instance Eq ScopeIdentifier where+ SFunctionBind n1 vss1 p1 == SFunctionBind n2 vss2 p2 =+ n1 == n2 && vss1 == vss2 && p1 == p2+ SVariableBind vs1 p1 == SVariableBind vs2 p2 =+ vs1 == vs2 && p1 == p2++instance Hashable ScopeIdentifier where+ hash (SFunctionBind n1 args1 p1) =+ combine 1 (combine (hash n1) (combine (hash args1) (hash p1)))+ hash (SVariableBind vs1 p1) = combine 2 (combine (hash vs1) (hash p1))++instance Ord ScopeIdentifier where+ compare (SFunctionBind n1 vss1 p1) (SFunctionBind n2 vss2 p2) =+ compare n1 n2 `thenCmp` compare vss1 vss2 `thenCmp` compare p1 p2+ compare (SFunctionBind _ _ _) _ = LT+ compare _ (SFunctionBind _ _ _) = GT+ compare (SVariableBind vs1 p1) (SVariableBind vs2 p2) =+ compare vs1 vs2 `thenCmp` compare p1 p2++data FunctionIdentifier = + FBuiltInFunction {+ functionName :: Name,+ arguments :: [Value]+ }+ | FLambda {+ lambdaExpression :: Exp Name,+ parentFunctionIdentifier :: Maybe ScopeIdentifier+ }+ | FMatchBind {+ functionName :: Name,+ argumentGroups :: [[Value]],+ -- | The free variables this is bound in+ scopeIdentifier :: Maybe ScopeIdentifier+ }++instance Eq FunctionIdentifier where+ FBuiltInFunction n1 vs1 == FBuiltInFunction n2 vs2 =+ n1 == n2 && vs1 == vs2+ FLambda e1 parent1 == FLambda e2 parent2 =+ e1 == e2 && parent1 == parent2+ FMatchBind n1 args1 parent1 == FMatchBind n2 args2 parent2 =+ n1 == n2 && args1 == args2 && parent1 == parent2+ _ == _ = False++instance Hashable FunctionIdentifier where+ hash (FBuiltInFunction n1 vs) = combine 2 (combine (hash n1) (hash vs))+ hash (FLambda expr parent) =+ combine 3 (combine (hash (show expr)) (hash parent))+ hash (FMatchBind n vs parent) =+ combine 4 (combine (hash n) (combine (hash vs) (hash parent)))++instance Ord FunctionIdentifier where+ compare (FBuiltInFunction n1 args1) (FBuiltInFunction n2 args2) =+ compare n1 n2 `thenCmp` compare args1 args2+ compare (FBuiltInFunction _ _) _ = LT+ compare _ (FBuiltInFunction _ _) = GT+ compare (FLambda e1 parent1) (FLambda e2 parent2) =+ compare parent1 parent2 `thenCmp` compare e1 e2+ compare (FLambda _ _) _ = LT+ compare _ (FLambda _ _) = GT+ compare (FMatchBind n1 vs1 parent1) (FMatchBind n2 vs2 parent2) =+ compare n1 n2 `thenCmp` compare parent1 parent2 `thenCmp` compare vs1 vs2++tupleFromList :: [Value] -> Value+tupleFromList vs = VTuple $! listArray (0, length vs - 1) vs++-- | Given a program that yields a value, returns a second program that can be+-- inserted into the environment, but will cause the environment not to save+-- the actual value, but to recompute it everytime. This is useful for cheap,+-- to compute, but high cost in terms of memory, computations (like named+-- processes).+noSave :: EvaluationMonad Value -> EvaluationMonad Value+noSave prog = do+ pn <- getParentScopeIdentifier+ tok <- gets timedSection+ return $ VThunk $ modify (\ st -> st {+ CSPM.Evaluator.Monad.parentScopeIdentifier = pn,+ timedSection = tok }) prog++maybeSave :: Type -> EvaluationMonad Value -> EvaluationMonad Value+maybeSave TProc prog = noSave prog+maybeSave _ prog = prog++removeThunk :: Value -> EvaluationMonad Value+removeThunk (VThunk p) = p+removeThunk v = return v++lookupVar :: Name -> EvaluationMonad Value+lookupVar n = lookupVarMaybeThunk n >>= removeThunk++instance (Ix i, Hashable a) => Hashable (Array i a) where+ hash arr = F.foldr combine 0 (fmap hash arr)++instance Hashable Value where+ hash (VInt i) = combine 1 (hash i)+ hash (VBool b) = combine 2 (hash b)+ hash (VChar c) = combine 3 (hash c)+ hash (VTuple vs) = combine 5 (hash vs)+ hash (VDot vs) = combine 6 (hash vs)+ hash (VChannel n) = combine 7 (hash n)+ hash (VDataType n) = combine 8 (hash n)+ hash (VList vs) = combine 9 (hash vs)+ hash (VSet vset) = combine 10 (hash vset)+ -- We identify all functions (for process names) - see comment below in Eq.+ hash (VFunction id _) = combine 11 (hash id)+ hash (VProc p) = combine 12 (hash p)+ hash (VMap m) = combine 13 (hash (M.toList m))+ instance Eq Value where VInt i1 == VInt i2 = i1 == i2 VBool b1 == VBool b2 = b1 == b2+ VChar c1 == VChar c2 = c1 == c2 VTuple vs1 == VTuple vs2 = vs1 == vs2 VDot vs1 == VDot vs2 = vs1 == vs2 VChannel n1 == VChannel n2 = n1 == n2 VDataType n1 == VDataType n2 = n1 == n2 VList vs1 == VList vs2 = vs1 == vs2 VSet s1 == VSet s2 = s1 == s2+ VProc p1 == VProc p2 = p1 == p2+ VFunction id1 _ == VFunction id2 _ = id1 == id2+ VMap m1 == VMap m2 = m1 == m2 v1 == v2 = False @@ -56,14 +191,16 @@ compareValues :: Value -> Value -> Maybe Ordering -- The following are all orderable and comparable compareValues (VInt i1) (VInt i2) = Just (compare i1 i2)+compareValues (VChar c1) (VChar c2) = Just (compare c1 c2) compareValues (VBool b1) (VBool b2) = Just (compare b1 b2) compareValues (VTuple vs1) (VTuple vs2) = -- Tuples must be same length by type checking -- Tuples are ordered lexiographically let- cmp [] [] = EQ- cmp (x:xs) (y:ys) = compare x y `thenCmp` cmp xs ys- in Just (cmp vs1 vs2)+ (l, u) = bounds vs1+ cmp ix | ix > u = EQ+ cmp ix = compare (vs1!ix) (vs2!ix) `thenCmp` cmp (ix+1)+ in Just (cmp 0) compareValues (VList vs1) (VList vs2) = let -- for lists comparing means comparing prefixes@@ -75,7 +212,17 @@ -- x != y, hence neither can be a prefix of the other Nothing in cmp vs1 vs2-compareValues (VSet s1) (VSet s2) = compareValueSets s1 s2+compareValues (VSet s1) (VSet s2) = S.compareValueSets s1 s2+compareValues (VMap m1) (VMap m2) =+ let cmp v1 v2 =+ case compareValues v1 v2 of+ Just LT -> True+ Just EQ -> True+ _ -> False+ in if m1 == m2 then Just EQ+ else if M.isSubmapOfBy cmp m1 m2 then Just LT+ else if M.isSubmapOfBy cmp m2 m1 then Just GT+ else Nothing -- The following can only be compared for equality, hence if they are not -- equal we return Nothing.@@ -87,198 +234,66 @@ if vs1 == vs2 then Just EQ else Nothing -- Every other possibility is invalid-compareValues v1 v2 = panic $- "Cannot compare "++show v1++" "++show v2+compareValues v1 v2 = panic $ "Cannot compare two values" instance Ord Value where -- This implementation is used for various internal measures, but not -- for implementing actual comparisons in CSPM. compare (VInt i1) (VInt i2) = compare i1 i2+ compare (VChar c1) (VChar c2) = compare c1 c2 compare (VBool b1) (VBool b2) = compare b1 b2 compare (VTuple vs1) (VTuple vs2) = compare vs1 vs2 compare (VList vs1) (VList vs2) = compare vs1 vs2- compare (VSet s1) (VSet s2) = compare s1 s2 + compare (VSet s1) (VSet s2) = compare s1 s2+ compare (VMap m1) (VMap m2) = compare m1 m2 -- These are only ever used for the internal set implementation compare (VDot vs1) (VDot vs2) = compare vs1 vs2 compare (VChannel n) (VChannel n') = compare n n' compare (VDataType n) (VDataType n') = compare n n'+ compare (VProc p1) (VProc p2) = compare p1 p2+ compare (VFunction id1 _) (VFunction id2 _) = compare id1 id2 compare v1 v2 = panic $ -- Must be as a result of a mixed set of values, which cannot happen -- as a result of type checking.- "Internal sets - cannot order "++show v1++" "++show v2--instance PrettyPrintable Value where- prettyPrint (VInt i) = int i- prettyPrint (VBool True) = text "true"- prettyPrint (VBool False) = text "false"- prettyPrint (VTuple vs) = parens (list $ map prettyPrint vs)- prettyPrint (VDot vs) = dotSep (map prettyPrint vs)- prettyPrint (VChannel n) = prettyPrint n- prettyPrint (VDataType n) = prettyPrint n- prettyPrint (VList vs) = angles (list $ map prettyPrint vs)- prettyPrint (VSet s) = prettyPrint s- prettyPrint (VFunction _) = text "<function>"- prettyPrint (VProc p) = prettyPrint p--instance Show Value where- show v = show (prettyPrint v)---- | The number of fields this datatype or channel has.-arityOfDataTypeClause :: Name -> EvaluationMonad Int-arityOfDataTypeClause n = do- VTuple [_, VInt a,_] <- lookupVar n- return a---- | Takes two values and dots then together appropriately.-combineDots :: Value -> Value -> EvaluationMonad Value-combineDots v1 v2 =- let- -- | Dots the given value onto the right of the given base, providing- -- the left hand value is a field.- maybeDotFieldOn :: Value -> Value -> EvaluationMonad (Maybe Value)- maybeDotFieldOn (VDot (nd:vs)) v = do- let - mn = case nd of- VDataType n -> Just n- VChannel n -> Just n- _ -> Nothing- case mn of- Nothing -> return Nothing- Just n -> do- a <- arityOfDataTypeClause n- let fieldCount = length vs- if a == 0 then return Nothing- else if length vs == 0 then- return $ Just (VDot [nd, v])- else do- -- Try and dot it onto our last field- mv <- maybeDotFieldOn (last vs) v- case mv of- Just vLast ->- return $ Just (VDot (nd:replaceLast vs vLast))- -- Start a new field, or return nothing if we- -- are full- Nothing | fieldCount < a -> - return $ Just (VDot (nd:vs++[v]))- Nothing | fieldCount == a -> return Nothing- Nothing | fieldCount > a -> panic "Malformed dot encountered."- maybeDotFieldOn vbase v = return Nothing-- -- | Dots the two values together, ensuring that if either the left or- -- the right value is a dot list combines them into one dot list.- dotAndReduce :: Value -> Value -> Value- dotAndReduce (VDot (VDataType n1:vs1)) (VDot (VDataType n2:vs2)) =- VDot [VDot (VDataType n1:vs1), VDot (VDataType n2:vs2)]- dotAndReduce (VDot (VDataType n1:vs1)) (VDot vs2) =- VDot (VDot (VDataType n1:vs1) : vs2)- dotAndReduce (VDot vs1) (VDot (VDataType n2:vs2)) =- VDot (vs1 ++ [VDot (VDataType n2:vs2)])- dotAndReduce v1 v2 = VDot [v1, v2]-- -- | Given a base value and the value of a field dots the field onto- -- the right of the base. Assumes that the value provided is a field.- dotFieldOn :: Value -> Value -> EvaluationMonad Value- dotFieldOn vBase vField = do- mv <- maybeDotFieldOn vBase vField- case mv of- Just v -> return v- Nothing -> return $ dotAndReduce vBase vField- - -- | Split a value up into the values that could be used as fields.- splitIntoFields :: Value -> [Value]- splitIntoFields (v@(VDot (VDataType n:_))) = [v]- splitIntoFields (VDot vs) = vs- splitIntoFields v = [v]+ "Internal sets - cannot order "+ +procName :: ScopeIdentifier -> ProcName+procName = ProcName - -- | Given a base value and a list of many fields dots the fields onto- -- the base. Assumes that the values provided are fields.- dotManyFieldsOn :: Value -> [Value] -> EvaluationMonad Value- dotManyFieldsOn v [] = return v- dotManyFieldsOn vBase (v:vs) = do- vBase' <- dotFieldOn vBase v- dotManyFieldsOn vBase' vs- in- -- Split v2 up into its composite fields and then dot them onto v1.- dotManyFieldsOn v1 (splitIntoFields v2)+scopeId :: Name -> [[Value]] -> Maybe ScopeIdentifier -> ScopeIdentifier+scopeId n vss pn = SFunctionBind n (map (map trimValueForProcessName) vss) pn -procId :: Name -> [[Value]] -> ProcName-procId n vss = ProcName n vss+annonymousScopeId :: [Value] -> Maybe ScopeIdentifier -> ScopeIdentifier+annonymousScopeId vss pn = SVariableBind (map trimValueForProcessName vss) pn -- | This assumes that the value is a VDot with the left is a VChannel valueEventToEvent :: Value -> Event-valueEventToEvent v = UserEvent (show (prettyPrint v))---- | Returns an x such that ev.x has been extended by exactly one atomic field.--- This could be inside a subfield or elsewhere.-oneFieldExtensions :: Value -> EvaluationMonad [Value]-oneFieldExtensions (VDot (dn:vs)) = do- let - mn = case dn of- VChannel n -> Just n- VDataType n -> Just n- _ -> Nothing- case mn of- Nothing -> return [VDot []]- Just n -> do- let fieldCount = length vs- -- Get the information about the channel- VTuple [_, VInt arity, VList fieldSets] <- lookupVar n-- -- Firstly, try completing the last field in the current value - -- (in case it is only half formed).- mexs <- - if fieldCount > 0 then do- exs <- oneFieldExtensions (last vs)- if exs /= [VDot []] then return $ Just exs- else return Nothing- else return Nothing- - return $ case mexs of- Just exs -> exs- Nothing -> - if arity == fieldCount then [VDot []]- else -- We still have fields to complete- map (\ v -> VDot [v]) - (head [s | VList s <- drop (length vs) fieldSets])-oneFieldExtensions _ = return [VDot []]+valueEventToEvent = UserEvent --- | Takes a datatype or a channel value and then computes all x such that --- ev.x is a full datatype/event. Each of the returned values is guaranteed--- to be a VDot.-extensions :: Value -> EvaluationMonad [Value]-extensions (VDot (dn:vs)) = do- let - mn = case dn of- VChannel n -> Just n- VDataType n -> Just n- _ -> Nothing- case mn of- Nothing -> return [VDot []]- Just n -> do- let fieldCount = length vs- -- Get the information about the datatype/channel- VTuple [_, VInt arity, VList fieldSets] <- lookupVar n+errorThunk = panic "Trimmed value function evaluated" - -- Firstly, complete the last field in the current value (in case it is only- -- half formed).- exsLast <- - if fieldCount == 0 then return [VDot []]- else extensions (last vs)- - if arity == fieldCount then return exsLast- else - -- We still have fields to complete- let - remainingFields = [s | VList s <- drop (length vs) fieldSets]- combineDots ((VDot vs1):vs2) = VDot (vs1++vs2)- fields = exsLast:remainingFields- in return $ map combineDots (cartesianProduct fields)-extensions v = return [VDot []]+trimFunctionIdentifier :: FunctionIdentifier -> FunctionIdentifier+trimFunctionIdentifier (FBuiltInFunction n args) =+ FBuiltInFunction n (map trimValueForProcessName args)+trimFunctionIdentifier (FLambda e p) = FLambda e p+trimFunctionIdentifier (FMatchBind n args p) =+ FMatchBind n (map (map trimValueForProcessName) args) p --- | Takes a datatype or a channel value and computes v.x for all x that--- complete the value.-productions :: Value -> EvaluationMonad [Value]-productions v = do- pss <- extensions v- mapM (combineDots v) pss+trimValueForProcessName :: Value -> Value+trimValueForProcessName (VInt i) = VInt i+trimValueForProcessName (VChar c) = VChar c+trimValueForProcessName (VBool b) = VBool b+trimValueForProcessName (VTuple vs) = VTuple (fmap trimValueForProcessName vs)+trimValueForProcessName (VList vs) = VList (map trimValueForProcessName vs)+trimValueForProcessName (VSet s) =+ VSet $ S.fromList $ map trimValueForProcessName $ S.toList s+trimValueForProcessName (VMap m) = VMap $ M.fromList $+ map (\ (v1, v2) -> (trimValueForProcessName v1, trimValueForProcessName v2))+ (M.toList m)+trimValueForProcessName (VDot vs) = VDot $ map trimValueForProcessName vs+trimValueForProcessName (VChannel n) = VChannel n+trimValueForProcessName (VDataType n) = VDataType n+trimValueForProcessName (VFunction id _) =+ VFunction (trimFunctionIdentifier id) errorThunk+trimValueForProcessName (VProc p) = VProc (trimProcess p)
src/CSPM/Evaluator/Values.hs-boot view
@@ -1,9 +1,15 @@ module CSPM.Evaluator.Values where -import Util.PrettyPrint+import Data.Hashable data Value instance Eq Value+instance Hashable Value instance Ord Value-instance PrettyPrintable Value-instance Show Value++data ScopeIdentifier+instance Eq ScopeIdentifier+instance Hashable ScopeIdentifier+instance Ord ScopeIdentifier++trimValueForProcessName :: Value -> Value
src/CSPM/Parser.hs view
@@ -55,7 +55,6 @@ import CSPM.DataStructures.Syntax import CSPM.Parser.Monad import CSPM.Parser.Parser-import Util.Annotated -- | Parse as string as an 'PInteractiveStmt'. parseInteractiveStmt :: String -> ParseMonad PInteractiveStmt@@ -68,14 +67,10 @@ pushFileContents "<interactive>" str >> parseExpression_ -- | Parse the given file, returning the parsed 'PModule's.-parseFile :: String -> ParseMonad [PModule]-parseFile fname = do- decls <- pushFile fname parseFile_- return [An Unknown dummyAnnotation (GlobalModule decls)]+parseFile :: String -> ParseMonad PCSPMFile+parseFile fname = pushFile fname parseFile_ -- | Parse a string, as though it were an entire file, returning the parsed -- 'PModule's.-parseStringAsFile :: String -> ParseMonad [PModule]-parseStringAsFile str = do- decls <- pushFileContents "<interactive>" str >> parseFile_- return [An Unknown dummyAnnotation (GlobalModule decls)]+parseStringAsFile :: String -> ParseMonad PCSPMFile+parseStringAsFile str = pushFileContents "<interactive>" str >> parseFile_
src/CSPM/Parser/Exceptions.hs view
@@ -1,18 +1,26 @@ module CSPM.Parser.Exceptions ( invalidPatternErrorMessage,- invalidDeclarationErrorMessage,+ invalidLetDeclarationErrorMessage,+ invalidModuleDeclarationErrorMessage,+ invalidFunctionArgsErrorMessage, invalidExpressionErrorMessage, invalidIncludeErrorMessage,+ invalidTimedSectionDeclarationErrorMessage, lexicalErrorMessage, parseErrorMessage, fileAccessErrorMessage,+ ambiguousTypeAnnotationsError,+ unusedTypeAnnotationsError,+ unknownConstraintError,+ definitionSpanFileError, throwSourceError ) where +import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Tokens+import CSPM.Parser.Tokens import CSPM.PrettyPrinter import Util.Annotated import Util.Exception@@ -22,14 +30,27 @@ invalidPatternErrorMessage e = mkErrorMessage (loc e) $ hang (prettyPrint e) tabWidth (text "is not a valid pattern") -invalidDeclarationErrorMessage :: PDecl -> ErrorMessage-invalidDeclarationErrorMessage d = mkErrorMessage (loc d) $- hang (prettyPrint d) tabWidth (text "is not a valid declaration")+invalidLetDeclarationErrorMessage :: PDecl -> ErrorMessage+invalidLetDeclarationErrorMessage d = mkErrorMessage (loc d) $+ hang (prettyPrint d) tabWidth (text "is not a valid declaration in a let expression") +invalidModuleDeclarationErrorMessage :: PDecl -> ErrorMessage+invalidModuleDeclarationErrorMessage d = mkErrorMessage (loc d) $+ hang (prettyPrint d) tabWidth (text "is not a valid declaration in a module")++invalidTimedSectionDeclarationErrorMessage :: PDecl -> ErrorMessage+invalidTimedSectionDeclarationErrorMessage d = mkErrorMessage (loc d) $+ hang (prettyPrint d) tabWidth (text "is not a valid declaration in a timed section")+ invalidExpressionErrorMessage :: PExp -> ErrorMessage invalidExpressionErrorMessage e = mkErrorMessage (loc e) $ hang (prettyPrint e) tabWidth (text "is not a valid expression") +invalidFunctionArgsErrorMessage :: PSType -> ErrorMessage+invalidFunctionArgsErrorMessage t = mkErrorMessage (loc t) $+ hang (prettyPrint t) tabWidth+ (text "is not a valid type for a function argument list")+ invalidIncludeErrorMessage :: SrcSpan -> ErrorMessage invalidIncludeErrorMessage srcspan = mkErrorMessage srcspan (text "Invalid include directive")@@ -44,3 +65,25 @@ fileAccessErrorMessage :: FilePath -> ErrorMessage fileAccessErrorMessage fp = mkErrorMessage Unknown $ text "Could not open the file" <+> quotes (text fp)++ambiguousTypeAnnotationsError :: UnRenamedName -> [SrcSpan] -> ErrorMessage+ambiguousTypeAnnotationsError n spans = mkErrorMessage Unknown $+ hang (text "The variable" <+> prettyPrint n + <+> text "has multiple type annotations at" <> colon)+ tabWidth (vcat (map prettyPrint spans))++unusedTypeAnnotationsError :: UnRenamedName -> SrcSpan -> ErrorMessage+unusedTypeAnnotationsError n span = mkErrorMessage span $+ text "The type annotation for" <+> prettyPrint n <+> text "is unused."++unknownConstraintError :: String -> SrcSpan -> ErrorMessage+unknownConstraintError s loc = mkErrorMessage loc $+ text "The constraint" <+> text s <+> text "is unknown."++definitionSpanFileError :: PExp -> PExp -> SrcSpan -> ErrorMessage+definitionSpanFileError left right errLoc = mkErrorMessage errLoc $+ text "The definition:"+ $$ tabIndent (prettyPrint left <+> char '=' <+> prettyPrint right)+ $$ text "starts in the file" <+> text (srcSpanFile (loc left))+ $$ text "but ends in the file" <+> text (srcSpanFile (loc right))+ <> char '.'
src/CSPM/Parser/Lexer.x view
@@ -1,15 +1,14 @@ {-{-# OPTIONS_GHC -fno-warn-lazy-unlifted-bindings #-}+{-# OPTIONS_GHC -fno-warn-lazy-unlifted-bindings -fno-warn-unused-imports + -fno-warn-unused-binds #-} module CSPM.Parser.Lexer where import Data.ByteString.Internal (c2w)-import Data.List import Data.Word -import Control.Monad.Trans-import CSPM.DataStructures.Tokens import CSPM.Parser.Exceptions import CSPM.Parser.Monad+import CSPM.Parser.Tokens import Util.Annotated import Util.Exception @@ -29,14 +28,39 @@ @property = $propertychars+(\[$upperalpha+\])? +@spaces = $white_no_nl* @white_no_nl = ((\-\-.*)|$white_no_nl)+ @nl = ((\-\-.*\n)|$whitechar)* @comment = (\-\-.*) @nltok = (@comment|())\n@nl+@notnot = [^n]|(n[^o])|(no[^t]) --- *************************************************************************--- TODO: get correct lambda function syntax+-- For string identification+$symbol = [\!\#\$\%\&\*\+\.\/\<\=\>\?\@\\\^\|\-\~]+$large = [A-Z \xc0-\xd6 \xd8-\xde]+$small = [a-z \xdf-\xf6 \xf8-\xff \_]+$string_alpha = [$small $large]+$graphic = [$string_alpha $symbol $digit \:\"\'] +$octit = 0-7+$hexit = [0-9 A-F a-f]++@decimal = $digit++@octal = $octit++@hexadecimal = $hexit++@exponent = [eE] [\-\+] @decimal++$cntrl = [$large \@\[\\\]\^\_]+@ascii = \^ $cntrl | NUL | SOH | STX | ETX | EOT | ENQ | ACK+ | BEL | BS | HT | LF | VT | FF | CR | SO | SI | DLE+ | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM+ | SUB | ESC | FS | GS | RS | US | SP | DEL+$charesc = [abfnrtv\\\"\'\&]+@escape = \\ ($charesc | @ascii | @decimal | o @octal | x @hexadecimal)+@gap = \\ $whitechar+ \\+@string = $graphic # [\"\\] | " " | @escape | @gap++ -- Note that we allow newlines to preceed all tokens, except for those that -- may possibly be at the start of a new expression. Therefore, for example, -- as a + may never be at the start of an expression we allow newlines before@@ -44,15 +68,15 @@ -- the start of one and thus we do not allow newlines to come between them. tokens :- <0>@nl:\[ { begin sem_prop }- <sem_prop>"tau priority" { tok TTauPriority }- <sem_prop>"tau priority over" { tok TTauPriority }- <sem_prop>"deadlock free" { tok TDeadlockFree }- <sem_prop>"deadlock-free" { tok TDeadlockFree }- <sem_prop>"livelock free" { tok TLivelockFree }- <sem_prop>"livelock-free" { tok TLivelockFree }- <sem_prop>"divergence free" { tok TDivergenceFree }- <sem_prop>"divergence-free" { tok TDivergenceFree }- <sem_prop>"deterministic" { tok TDeterministic }+ <sem_prop>@spaces"tau priority" { tok TTauPriority }+ <sem_prop>@spaces"tau priority over" { tok TTauPriority }+ <sem_prop>@spaces"deadlock free" { tok TDeadlockFree }+ <sem_prop>@spaces"deadlock-free" { tok TDeadlockFree }+ <sem_prop>@spaces"livelock free" { tok TLivelockFree }+ <sem_prop>@spaces"livelock-free" { tok TLivelockFree }+ <sem_prop>@spaces"divergence free" { tok TDivergenceFree }+ <sem_prop>@spaces"divergence-free" { tok TDivergenceFree }+ <sem_prop>@spaces"deterministic" { tok TDeterministic } <sem_prop>@nl"[T]" { tok (TModel Traces) } <sem_prop>@nl"[F]" { tok (TModel Failures) } <sem_prop>@nl"[FD]" { tok (TModel FailuresDivergences) }@@ -60,8 +84,8 @@ <sem_prop>@nl"[VD]" { tok (TModel RevivalsDivergences) } <sem_prop>@nl"[R]" { tok (TModel Refusals) } <sem_prop>@nl"[RD]" { tok (TModel RefusalsDivergences) }- <sem_prop>"]:" { begin 0 }- <sem_prop>"]" { begin 0 }+ <sem_prop>@spaces"]:" { begin 0 }+ <sem_prop>@spaces"]" { begin 0 } <0>@nl"[T="@nl { tok (TRefines Traces) } <0>@nl"[F="@nl { tok (TRefines Failures) }@@ -71,9 +95,18 @@ <0>@nl"[R="@nl { tok (TRefines Refusals) } <0>@nl"[RD="@nl { tok (TRefines RefusalsDivergences) } - <soak>((\-\-.*\n)|$whitechar)+ { skip }+ <soak>((\-\-.*\n)|$whitechar)+ { skip } <soak>""/$not_white { begin 0 }+ <soak>@nl"{-" { nestedComment } + <assert>((\-\-.*\n)|$whitechar)+ { skip }+ <assert>@nl"not"/$notid { begin' soak TAssertNot }+ <assert>""/@notnot { begin 0 }+ <assert>@nl"{-" { nestedComment }++ <0>"print ".*$ { stok (\ s ->+ TPrint (drop (length "print ") s))}+ <0>@white_no_nl { skip } <0>@nl"{-" { nestedComment }@@ -94,6 +127,10 @@ <0>@nl"||"@nl { tok TParallel } <0>@nl";"@nl { tok TSemiColon } <0>@nl"&"@nl { tok TGuard }+ <0>@nl"/+"@nl { tok TLSyncInterrupt }+ <0>@nl"+\"@nl { tok TRSyncInterrupt }+ <0>@nl"[+"@nl { tok TLSyncExtChoice }+ <0>@nl"+]"@nl { tok TRSyncExtChoice } -- Boolean Operators <0>@nl"and"/$notid { soakTok TAnd }@@ -115,6 +152,8 @@ <0>@nl"|}" { closeseq TRPipeBrace } <0>"{"@nl { openseq TLBrace } <0>@nl"}" { closeseq TRBrace }+ <0>"(| "@nl { openseq TLMap }+ <0>@nl"|)" { closeseq TRMap } <0>@nl"[["@nl { openseq TLDoubleSqBracket } <0>@nl"]]" { closeseq TRDoubleSqBracket } <0>@nl"[|"@nl { openseq TLPipeSqBracket }@@ -132,8 +171,14 @@ <0>@nl"$"@nl { tok TDollar } <0>@nl"<-"@nl { tok TDrawnFrom } <0>@nl"<->"@nl { tok TTie }- <0>@nl":"@nl { tok TColon }+ <0>"::" { tok TScope }+ <0>@nl":" { soakTok TColon } + <0>@nl" ::"@nl { tok TOfType }+ <0>@nl":: "@nl { tok TOfType }+ <0>@nl"=>*"@nl { tok TYieldStar }+ <0>@nl"=>"@nl { tok TYield }+ <0>@nl"@@"@nl { tok TDoubleAt } -- Program Structure@@ -144,18 +189,23 @@ <0>@nl"let"/$notid { soakTok TLet } <0>@nl"within"/$notid { soakTok TWithin } <0>"channel"/$notid { soakTok TChannel }- <0>"assert"/$notid { soakTok TAssert }+ <0>"assert"/$notid { soakTok' TAssert } <0>"datatype"/$notid { soakTok TDataType }+ <0>"subtype"/$notid { soakTok TSubType } <0>"external"/$notid { soakTok TExternal } <0>"transparent"/$notid { soakTok TTransparent } <0>"nametype"/$notid { soakTok TNameType }-+ <0>"module"/$notid { soakTok TModule }+ <0>"exports"/$notid { tok TExports }+ <0>"endmodule"/$notid { tok TEndModule }+ <0>"instance" { tok TInstance } <0>@nl"\"@nl { tok TBackSlash } <0>@nl"@"@nl { tok TLambdaDot }+ <0>"Timed"/$notid { soakTok TTimed } -- Arithmetic <0>@nl"+"@nl { tok TPlus }- <0>"-"@nl { tok TMinus }+ <0>"-"/[[^\->]\n] { soakTok TMinus } <0>@nl"*"@nl { tok TTimes } <0>@nl"/"@nl { tok TDivide } <0>@nl"%"@nl { tok TMod }@@ -165,8 +215,11 @@ <0>"#"@nl { tok THash } -- 'Wildcards'- <0>$alpha+$alphanum*$prime* { stok (\s -> TIdent s) }+ <0>$alpha+$alphanum*$prime* { stok (\ s -> TIdent s) } <0>@nl$digit+ { stok (\ s -> TInteger (read s)) }+ <0>@nl \' ($graphic # [\'\\] | " " | @escape) \' + { stok (\ s -> TChar (read s)) }+ <0>@nl\"@string*\" { stok (\ s -> TString (read s)) } -- Must be after names <0>@nl"_"@nl { tok TWildCard }@@ -218,25 +271,31 @@ soakTok :: Token -> AlexInput -> Int -> ParseMonad LToken soakTok t inp len = setCurrentStartCode soak >> tok t inp len +soakTok' :: Token -> AlexInput -> Int -> ParseMonad LToken+soakTok' t inp len = setCurrentStartCode assert >> tok t inp len+ -- TODO: don't count whitespace in the tokens tok :: Token -> AlexInput -> Int -> ParseMonad LToken tok t (ParserState { fileStack = fps:_ }) len = return $ L (SrcSpanOneLine f lineno colno (colno+len)) t where- (FileParserState { tokenizerPos = FilePosition offset lineno colno, + (FileParserState { tokenizerPos = FilePosition _ lineno colno, fileName = f }) = fps+tok _ _ _ = panic "tok: invalid state" stok :: (String -> Token) -> AlexInput -> Int -> ParseMonad LToken stok f (st @ ParserState { fileStack = stk }) len = do- tok (f (filter (\ c -> c /= '\n') (takeChars len stk))) st len+ tok (f (filter (\c -> not (elem c ['\r','\n'])) (takeChars len stk))) st len -skip input len = getNextToken+skip :: AlexInput -> Int -> ParseMonad LToken+skip _ _ = getNextToken takeChars :: Int -> [FileParserState] -> String takeChars 0 _ = "" takeChars len (FileParserState {input = [] }:stk) = takeChars len stk takeChars len (fps@(FileParserState {input = (c:cs) }):stk) = c:(takeChars (len-1) (fps {input = cs}:stk))+takeChars _ _ = panic "takeChars: invalid input" nestedComment :: AlexInput -> Int -> ParseMonad LToken nestedComment _ _ = do@@ -247,8 +306,7 @@ err = do FileParserState { fileName = fname, - tokenizerPos = pos, - currentStartCode = sc } <- getTopFileParserState+ tokenizerPos = pos } <- getTopFileParserState throwSourceError [lexicalErrorMessage (filePositionToSrcLoc fname pos)] go :: Int -> AlexInput -> ParseMonad LToken go 0 st = do setParserState st; getNextToken@@ -261,46 +319,53 @@ case alexGetChar st of Nothing -> err Just ('\125',st) -> go (n-1) st- Just (c,st) -> go n st+ Just (_,st) -> go n st '\123' -> do case alexGetChar st of Nothing -> err Just ('-',st) -> go (n+1) st- Just (c,st) -> go n st- c -> go n st+ Just (_,st) -> go n st+ _ -> go n st switchInput :: AlexInput -> Int -> ParseMonad LToken switchInput st len = do FileParserState { fileName = fname, - tokenizerPos = pos, - currentStartCode = sc } <- getTopFileParserState+ tokenizerPos = pos } <- getTopFileParserState let str = takeChars len (fileStack st) quotedFname = strip (drop (length "include") str) - hasStartQuote ('\"':cs) = True+ hasStartQuote ('\"':_) = True hasStartQuote _ = False hasEndQuote [] = False- hasEndQuote ('\"':cs) = True- hasEndQuote (c:cs) = hasEndQuote cs+ hasEndQuote ('\"':_) = True+ hasEndQuote (_:cs) = hasEndQuote cs file = calcFile (tail quotedFname)- calcFile ('\"':cs) = ""+ calcFile ('\"':_) = "" calcFile (c:cs) = c:calcFile cs+ calcFile [] = panic "switchInput::calcFile: empty file" if not (hasStartQuote quotedFname) || not (hasEndQuote (tail quotedFname)) then throwSourceError [invalidIncludeErrorMessage (filePositionToSrcLoc fname pos)]- else pushFile file getNextToken+ -- We push a newline token here to make sure that any expression that+ -- crosses the include boundary will be a hard parse error+ else pushFile file $ return $!+ L ((filePositionToSrcLoc fname pos)) TNewLine type AlexInput = ParserState begin :: Int -> AlexInput -> Int -> ParseMonad LToken-begin sc' st len = setCurrentStartCode sc' >> getNextToken+begin sc' _ _ = setCurrentStartCode sc' >> getNextToken +begin' :: Int -> Token -> AlexInput -> Int -> ParseMonad LToken+begin' sc' t st len = setCurrentStartCode sc' >> tok t st len+ alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (ParserState { fileStack = fps:_ })= previousChar fps+alexInputPrevChar (ParserState { fileStack = fps:_ }) = previousChar fps+alexInputPrevChar _ = panic "alexInputPrevChar: invalid state - no previous char" -- For compatibility with Alex 3 alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)@@ -315,7 +380,7 @@ alexGetChar (ParserState { fileStack = [] }) = Nothing alexGetChar (st @ (ParserState { fileStack = fps:fpss })) = gc fps where- gc (fps @ (FileParserState { input = [] })) = + gc (FileParserState { input = [] }) = alexGetChar (st { fileStack = fpss }) gc (fps @ (FileParserState { tokenizerPos = p, input = (c:s) })) = p' `seq` Just (c, st')@@ -327,15 +392,21 @@ getNextToken :: ParseMonad LToken getNextToken = do FileParserState { + input = input, fileName = fname, tokenizerPos = pos, currentStartCode = sc } <- getTopFileParserState st <- getParserState- case alexScan st sc of+ if length (fileStack st) > 1 && input == [] then do+ -- Switch input back+ setParserState (st { fileStack = tail (fileStack st) })+ -- Insert a newline to stop expressions spanning files+ return $! L ((filePositionToSrcLoc fname pos)) TNewLine+ else case alexScan st sc of AlexEOF -> return $ L Unknown TEOF- AlexError st' -> + AlexError _ -> throwSourceError [lexicalErrorMessage (filePositionToSrcLoc fname pos)]- AlexSkip st' len -> do+ AlexSkip st' _ -> do setParserState st' getNextToken AlexToken st' len action -> do@@ -344,5 +415,4 @@ getNextTokenWrapper :: (LToken -> ParseMonad a) -> ParseMonad a getNextTokenWrapper cont = getNextToken >>= cont- }
src/CSPM/Parser/Monad.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module CSPM.Parser.Monad ( ParseMonad, ParserState(..), FileParserState(..), movePos,@@ -14,13 +15,13 @@ import Control.Exception import Control.Monad.State-import Data.Typeable+import GHC.IO.Encoding+#if __GLASGOW_HASKELL__ < 705 import Prelude hiding (catch)+#endif import System.FilePath import System.IO-import System.IO.Error hiding (catch) -import CSPM.DataStructures.Tokens import CSPM.Parser.Exceptions import Util.Annotated @@ -49,7 +50,7 @@ -- Don't treat tabs any differently (editors don't) --movePos (FilePosition a l c) '\t' = -- FilePosition (a+1) l (((c+7) `div` 8)*8+1)-movePos (FilePosition a l c) '\n' = FilePosition (a+1) (l+1) 1+movePos (FilePosition a l _) '\n' = FilePosition (a+1) (l+1) 1 movePos (FilePosition a l c) _ = FilePosition (a+1) l (c+1) -- *************************************************************************@@ -101,8 +102,14 @@ let filename = combine dirname fname handle :: IOException -> a- handle err = throwSourceError [fileAccessErrorMessage filename]- str <- liftIO $ catch (readFile filename) handle+ handle e = throwSourceError [fileAccessErrorMessage filename]+ str <- liftIO $ catch (do+ handle <- openFile filename ReadMode+ -- Decode the file using an ASCII codec (except in comments, all CSPM+ -- characters should be ASCII - clearly in comments we can just ignore+ -- anything non-ASCII).+ hSetEncoding handle char8+ hGetContents handle) handle pushFileContents filename str x <- prog return x@@ -110,13 +117,12 @@ pushFileContents :: String -> String -> ParseMonad () pushFileContents filename input = modify (\ st -> let- fs = FileParserState startPos filename input '\n' 0 [0]+ -- We add an extra space on the end of the file contents to allow+ -- the right contexts used in the lexer to still work even at the+ -- end of the file.+ fs = FileParserState startPos filename (input++" ") '\n' 0 [0] in st { fileStack = fs:(fileStack st) })--setFileParserState :: FileParserState -> ParseMonad ()-setFileParserState fs = - modify (\ st -> st { fileStack = fs:(tail (fileStack st)) } ) getTokenizerPos :: ParseMonad FilePosition getTokenizerPos = getTopFileParserState >>= (return . tokenizerPos)
src/CSPM/Parser/Parser.hs view
@@ -13,2300 +13,3375 @@ -- i.e.: cpp -P src/CSPM/Parser/Parser.ppy > src/CSPM/Parser/Parser.y && happy --ghc --coerce --array src/CSPM/Parser/Parser.y && rm src/CSPM/Parser/Parser.y import Data.Char--import CSPM.DataStructures.Literals-import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Tokens-import CSPM.DataStructures.Types hiding (TDot)-import CSPM.Parser.Exceptions-import CSPM.Parser.Lexer-import CSPM.Parser.Monad-import Util.Annotated-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.18.6--newtype HappyAbsSyn t8 t9 t27 t28 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn6 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDecl])-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (PInteractiveStmt) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t8 t9 t27 t28) -> (PInteractiveStmt)-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: t8 -> (HappyAbsSyn t8 t9 t27 t28)-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t8 t9 t27 t28) -> t8-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: t9 -> (HappyAbsSyn t8 t9 t27 t28)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t8 t9 t27 t28) -> t9-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDecl])-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDecl])-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDecl])-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: (Maybe PDecl) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t8 t9 t27 t28) -> (Maybe PDecl)-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (PDecl) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t8 t9 t27 t28) -> (PDecl)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (PDecl) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t8 t9 t27 t28) -> (PDecl)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Assertion UnRenamedName) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t8 t9 t27 t28) -> (Assertion UnRenamedName)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (SemanticProperty) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t8 t9 t27 t28) -> (SemanticProperty)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (ModelOption UnRenamedName) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t8 t9 t27 t28) -> (ModelOption UnRenamedName)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (PDataTypeClause) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t8 t9 t27 t28) -> (PDataTypeClause)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: ([PDataTypeClause]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDataTypeClause])-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: ([PDataTypeClause]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PDataTypeClause])-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (Located UnRenamedName) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t8 t9 t27 t28) -> (Located UnRenamedName)-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: ([Located UnRenamedName]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t8 t9 t27 t28) -> ([Located UnRenamedName])-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: ([Located UnRenamedName]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t8 t9 t27 t28) -> ([Located UnRenamedName])-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: (Located Literal) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t8 t9 t27 t28) -> (Located Literal)-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (PPat) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t8 t9 t27 t28) -> (PPat)-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: t27 -> (HappyAbsSyn t8 t9 t27 t28)-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t8 t9 t27 t28) -> t27-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: t28 -> (HappyAbsSyn t8 t9 t27 t28)-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t8 t9 t27 t28) -> t28-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: (PExp) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t8 t9 t27 t28) -> (PExp)-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: (PExp) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t8 t9 t27 t28) -> (PExp)-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: (PExp) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t8 t9 t27 t28) -> (PExp)-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: (PField) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t8 t9 t27 t28) -> (PField)-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: ((PExp, PExp)) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t8 t9 t27 t28) -> ((PExp, PExp))-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t8 t9 t27 t28) -> ([(PExp, PExp)])-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t8 t9 t27 t28) -> ([(PExp, PExp)])-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: ((PExp, PExp)) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t8 t9 t27 t28) -> ((PExp, PExp))-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t8 t9 t27 t28) -> ([(PExp, PExp)])-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t8 t9 t27 t28) -> ([(PExp, PExp)])-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: ([PField]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PField])-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: ([PField]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PField])-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: ([PExp]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PExp])-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: ([PExp]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PExp])-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([PExp]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PExp])-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: ([PExp]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PExp])-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PStmt])-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: (PStmt) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t8 t9 t27 t28) -> (PStmt)-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PStmt])-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t27 t28)-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t8 t9 t27 t28) -> ([PStmt])-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyInTok :: (LToken) -> (HappyAbsSyn t8 t9 t27 t28)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t8 t9 t27 t28) -> (LToken)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\x4c\x01\x70\x01\x00\x00\x4d\x00\x00\x00\x00\x00\x70\x01\x64\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x96\x00\x70\x01\x70\x01\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\xa2\x00\x00\x00\x01\x06\x96\x00\x70\x01\xa2\x00\x00\x00\xd0\x01\xce\x00\xe3\x00\x00\x00\x00\x00\xfe\x01\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x70\x01\x00\x00\x9b\x00\xcb\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x18\x00\xde\x02\x00\x00\xc7\x00\xd8\x00\xc5\x00\xc1\x00\xb1\x00\xb4\x00\x00\x00\xbb\x00\xb3\x00\x68\x05\x01\x06\xf7\xff\xa8\x00\x35\x05\xf1\xff\x31\x02\x73\x00\x1d\x00\xf9\x02\xb1\x08\xa0\x00\x01\x06\xb5\x01\xee\x04\xa7\x04\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x00\x00\x03\x01\x70\x01\x70\x01\x70\x01\x00\x00\x70\x01\x00\x00\x70\x01\x00\x00\xba\x00\x70\x01\x70\x01\x00\x00\x70\x01\x70\x01\x61\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x68\x00\x70\x01\x70\x01\x2a\x08\x2a\x08\xf8\x07\xc6\x07\x2a\x08\xfd\x06\x62\x07\x94\x07\x60\x04\x94\x00\x97\x02\x9c\x00\x00\x00\x90\x00\x98\x00\x62\x00\xd1\xff\x1d\x00\x1d\x00\x1d\x00\xf9\x02\xf9\x02\xa0\x08\xa0\x08\xa0\x08\xa0\x08\xa0\x08\xa0\x08\x7e\x08\x8f\x08\x33\x06\xce\x05\x30\x07\xcb\x06\x98\x06\x53\x08\x00\x00\x70\x01\x00\x00\x97\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x8b\x00\x7c\x00\x70\x01\x01\x00\x00\x00\x70\x01\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x6b\x00\x00\x00\x9b\x05\x00\x00\x00\x00\x00\x00\x3d\x00\x70\x01\x85\x00\x85\x00\x70\x01\x2a\x08\x70\x01\x70\x01\x00\x00\x70\x01\x4b\x00\x70\x01\x70\x01\x70\x01\x40\x00\x70\x01\x9b\x05\x9b\x05\x70\x01\x00\x00\x9b\x05\x9b\x05\x9b\x05\x00\x00\x00\x00\x70\x01\x00\x00\x66\x00\x39\x00\x9b\x05\x19\x04\x00\x00\x3a\x00\x5f\x00\x9b\x05\x00\x00\xe6\x03\x00\x00\x9f\x03\x33\x00\x00\x00\x00\x00\x70\x01\x00\x00\x00\x00\x00\x00\x70\x01\x49\x00\x58\x03\x11\x03\x70\x01\x65\x06\x65\x06\x00\x00\x00\x00\x00\x00\x30\x07\x30\x07\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x53\x00\x00\x00\x00\x00\x70\x01\x00\x00\x70\x01\x55\x00\x65\x06\x70\x01\x70\x01\x70\x01\x9b\x05\x9b\x05\x9b\x05\x65\x06\x65\x06\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x27\x00\xd7\x00\xd1\x09\x50\x00\x20\x01\x00\x00\x00\x00\x55\x03\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x09\xa6\x03\xf5\x04\xc3\x09\x00\x00\x00\x00\xbc\x09\xb5\x09\x1e\x00\xfb\x01\xb2\x01\xae\x09\x05\x02\x7b\x08\x26\x08\xf4\x07\xc2\x07\x00\x00\x00\x00\x0a\x00\xe8\x02\x5c\x03\x00\x00\x00\x00\x41\x00\x00\x00\x47\x00\x00\x00\x00\x00\x0a\x00\xb6\x00\x35\x00\xb0\x00\x71\x00\x30\x00\x97\x01\x00\x00\x00\x00\x23\x00\xa7\x09\xa0\x09\x99\x09\x92\x09\x8b\x09\x84\x09\x7d\x09\x76\x09\x6f\x09\x68\x09\x61\x09\x5a\x09\x53\x09\x4c\x09\x45\x09\x3e\x09\x37\x09\x30\x09\x29\x09\x22\x09\x07\x01\x6d\x02\x1b\x09\xbc\x01\x14\x09\x0d\x09\x06\x09\xff\x08\xf8\x08\xf1\x08\xea\x08\xe3\x08\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x0a\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x07\x00\x00\xeb\x04\xd9\x08\xae\x04\x85\x08\x00\x00\x50\x01\x00\x00\x44\x01\x00\x00\x5c\x08\x52\x08\xf9\x00\x00\x00\x8e\x00\x3a\x02\x00\x00\x45\x00\xa4\x04\x34\x08\x02\x08\xd0\x07\x65\x00\x00\x00\x9e\x07\x6c\x07\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0a\x00\x00\x00\x00\x00\xef\xff\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x39\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x04\x8d\x01\x00\x00\x07\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x04\x0e\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x04\x63\x00\xff\xff\xf4\x03\x0a\x00\xd4\x06\xa1\x06\x00\x00\x2a\x01\x00\x00\xea\x03\x6f\x06\x3d\x06\x00\x00\x0a\x06\x0a\x00\x0a\x00\xd7\x05\x00\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x0a\x00\x00\x00\x29\x00\xf5\xff\x00\x00\x00\x00\xa4\x05\x00\x00\x00\x00\x00\x00\x71\x05\x00\x00\x0a\x00\x0a\x00\x40\x05\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x03\x00\x00\xa4\x02\x08\x00\x0a\x00\x39\x05\x32\x05\xfc\x04\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xf6\xff\x00\x00\x00\x00\x00\x00\xf4\xff\xc9\xff\xca\xff\x7c\xff\x00\x00\xcb\xff\xd2\xff\xd6\xff\xd0\xff\xd1\xff\xa5\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xff\xce\xff\x00\x00\x00\x00\x00\x00\x7c\xff\x7c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xcc\xff\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x00\x00\xf2\xff\xf1\xff\xed\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\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\xff\x71\xff\x00\x00\x73\xff\x00\x00\x00\x00\x00\x00\x00\x00\x83\xff\x78\xff\x84\xff\x00\x00\x79\xff\x00\x00\x7b\xff\x79\xff\x00\x00\x00\x00\x00\x00\xac\xff\xb8\xff\xbb\xff\x00\x00\xcf\xff\x00\x00\x00\x00\x79\xff\x00\x00\xfc\xff\xf3\xff\xf5\xff\xb1\xff\x00\x00\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xff\x00\x00\xc4\xff\x00\x00\xab\xff\x00\x00\x00\x00\x00\x00\xa7\xff\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\xff\x98\xff\x99\xff\x9b\xff\xa2\xff\x9e\xff\x9f\xff\xa1\xff\xcc\xff\x78\xff\x00\x00\x00\x00\x87\xff\x78\xff\x88\xff\x00\x00\xad\xff\xb5\xff\xb4\xff\xb3\xff\xb6\xff\xb7\xff\xbe\xff\xbf\xff\xbc\xff\xbd\xff\xc0\xff\xc1\xff\xba\xff\xb9\xff\xa0\xff\xa4\xff\x8a\xff\x8c\xff\x8e\xff\xc7\xff\x7f\xff\x00\x00\xe6\xff\x00\x00\xd4\xff\xe7\xff\xd5\xff\xe8\xff\x00\x00\xeb\xff\x00\x00\xef\xff\xf8\xff\x00\x00\xe2\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\x00\x00\xe4\xff\xe1\xff\xc6\xff\xf0\xff\xee\xff\xf7\xff\xec\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\x00\x00\x00\x00\xc3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\xff\x75\xff\x00\x00\x72\xff\x94\xff\x92\xff\x93\xff\x85\xff\x77\xff\x00\x00\x82\xff\x00\x00\x00\x00\x7a\xff\x00\x00\xa9\xff\x00\x00\x7e\xff\xc2\xff\xec\xff\x00\x00\xaf\xff\x00\x00\x00\x00\xb0\xff\xae\xff\x00\x00\xaa\xff\xa8\xff\xa6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xff\x9d\xff\x89\xff\x96\xff\x86\xff\x8b\xff\x8d\xff\xe5\xff\xd3\xff\xd8\xff\xe9\xff\xd9\xff\xda\xff\xea\xff\xe3\xff\x00\x00\xdc\xff\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x90\xff\xc5\xff\x8f\xff\x91\xff\x9c\xff\xd7\xff\xdb\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x10\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x10\x00\x10\x00\x10\x00\x39\x00\x16\x00\x13\x00\x14\x00\x15\x00\x10\x00\x3f\x00\x18\x00\x19\x00\x12\x00\x13\x00\x0d\x00\x27\x00\x16\x00\x10\x00\x18\x00\x0c\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x28\x00\x29\x00\x2a\x00\x1a\x00\x0d\x00\x0e\x00\x00\x00\x27\x00\x31\x00\x03\x00\x21\x00\x22\x00\x3c\x00\x10\x00\x2e\x00\x2f\x00\x13\x00\x27\x00\x15\x00\x33\x00\x3e\x00\x18\x00\x19\x00\x16\x00\x38\x00\x39\x00\x27\x00\x3b\x00\x1a\x00\x3d\x00\x16\x00\x10\x00\x23\x00\x41\x00\x1a\x00\x43\x00\x10\x00\x45\x00\x46\x00\x47\x00\x02\x00\x21\x00\x22\x00\x0b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x03\x00\x37\x00\x10\x00\x39\x00\x02\x00\x13\x00\x14\x00\x15\x00\x08\x00\x3f\x00\x18\x00\x19\x00\x12\x00\x13\x00\x10\x00\x19\x00\x16\x00\x31\x00\x18\x00\x07\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x28\x00\x29\x00\x2a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x27\x00\x10\x00\x3c\x00\x3e\x00\x13\x00\x14\x00\x15\x00\x2e\x00\x2f\x00\x18\x00\x19\x00\x19\x00\x33\x00\x10\x00\x11\x00\x12\x00\x44\x00\x38\x00\x39\x00\x02\x00\x3b\x00\x0d\x00\x3d\x00\x40\x00\x4f\x00\x28\x00\x41\x00\x24\x00\x43\x00\x06\x00\x45\x00\x46\x00\x47\x00\x26\x00\x07\x00\x01\x00\x02\x00\x4c\x00\x04\x00\x05\x00\x3a\x00\x06\x00\x10\x00\x07\x00\x10\x00\x13\x00\x14\x00\x15\x00\x10\x00\x44\x00\x18\x00\x19\x00\x12\x00\x13\x00\x0e\x00\x43\x00\x16\x00\x3a\x00\x18\x00\x07\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x28\x00\x29\x00\x2a\x00\x19\x00\x07\x00\x01\x00\x02\x00\x27\x00\x04\x00\x05\x00\x10\x00\x11\x00\x12\x00\x0f\x00\x2e\x00\x2f\x00\x10\x00\x11\x00\x12\x00\x33\x00\x19\x00\x10\x00\x12\x00\x13\x00\x38\x00\x39\x00\x16\x00\x3b\x00\x18\x00\x3d\x00\x09\x00\x0a\x00\x0b\x00\x41\x00\x01\x00\x43\x00\x19\x00\x45\x00\x46\x00\x47\x00\x19\x00\x07\x00\x19\x00\x27\x00\x4c\x00\x48\x00\x02\x00\x17\x00\x03\x00\x10\x00\x2e\x00\x2f\x00\x13\x00\xff\xff\x15\x00\x33\x00\x17\x00\x18\x00\x19\x00\x4f\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\xff\xff\x01\x00\x02\x00\x4c\x00\x04\x00\x05\x00\x10\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\x12\x00\x13\x00\x10\x00\xff\xff\x16\x00\x13\x00\x18\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x27\x00\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x10\x00\x2e\x00\x2f\x00\x13\x00\x31\x00\x15\x00\x33\x00\xff\xff\x18\x00\x19\x00\x10\x00\x38\x00\x39\x00\x13\x00\x3b\x00\x15\x00\x3d\x00\x17\x00\x18\x00\x19\x00\x41\x00\x1b\x00\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\xff\xff\x01\x00\x02\x00\x4c\x00\x04\x00\x05\x00\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x12\x00\x13\x00\x10\x00\xff\xff\x16\x00\x13\x00\x18\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\x1f\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x01\x00\x02\x00\x27\x00\x04\x00\x05\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x12\x00\x13\x00\x38\x00\x39\x00\x16\x00\x3b\x00\x18\x00\x3d\x00\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x07\x00\x08\x00\x09\x00\x27\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x2e\x00\x2f\x00\x13\x00\x0a\x00\x15\x00\x33\x00\xff\xff\x18\x00\x19\x00\x10\x00\x38\x00\x39\x00\x13\x00\x3b\x00\x15\x00\x3d\x00\x17\x00\x18\x00\x19\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\xff\xff\xff\xff\x06\x00\x4c\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x10\x00\x18\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\x25\x00\x26\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x3f\x00\x25\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x10\x00\x18\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\x25\x00\x26\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x3a\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\x1b\x00\x1c\x00\x1d\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x0d\x00\x0e\x00\x05\x00\x06\x00\x11\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\xff\xff\x4d\x00\x4e\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x10\x00\x0a\x00\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\x18\x00\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x18\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\x28\x00\x29\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\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x10\x00\x15\x00\xff\xff\x13\x00\x18\x00\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\x10\x00\x18\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\x10\x00\x18\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\x16\x00\x14\x00\x18\x00\x19\x00\x10\x00\x18\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x10\x00\xff\xff\xff\xff\x13\x00\x11\x00\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\x18\x00\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x0d\x00\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\xff\xff\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x0d\x00\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\x47\x00\xff\xff\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\x11\x00\x45\x00\x46\x00\xff\xff\x48\x00\x49\x00\x4a\x00\x18\x00\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x10\x00\x3f\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\x45\x00\x18\x00\x19\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x10\x00\x3f\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x10\x00\x3f\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x48\x00\xff\xff\x4a\x00\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x10\x00\x3f\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x48\x00\xff\xff\xff\xff\xff\xff\x10\x00\x4d\x00\x4e\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x08\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x10\x00\x39\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x3f\x00\x18\x00\x19\x00\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x48\x00\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x10\x00\x39\x00\xff\xff\x13\x00\x14\x00\x15\x00\xff\xff\x3f\x00\x18\x00\x19\x00\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x28\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3f\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3f\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3f\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x10\x00\x39\x00\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x3f\x00\x18\x00\x19\x00\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\x10\x00\x18\x00\x19\x00\x13\x00\xff\xff\x15\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x81\x00\x0b\x00\x0c\x00\xd0\x00\x0d\x00\x0e\x00\x85\x00\x78\x00\x05\x00\x4b\x00\xf8\x00\x06\x00\x56\x00\x07\x00\x0b\x01\x4c\x00\x57\x00\x09\x00\x0f\x00\x10\x00\x1f\x01\xda\x00\x11\x00\x0f\x01\x12\x00\x11\x01\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x58\x00\xff\x00\x5a\x00\x33\x00\x91\x00\x92\x00\x25\x00\x13\x00\x79\x00\x04\x00\x34\x00\x35\x00\x82\x00\x05\x00\x14\x00\x15\x00\x06\x00\xde\x00\x07\x00\x16\x00\x86\x00\x68\x00\x09\x00\x76\x00\x17\x00\x18\x00\x88\x00\x19\x00\xb6\x00\x1a\x00\xf9\x00\xb9\x00\x69\x00\x1b\x00\x33\x00\x1c\x00\xbe\x00\x1d\x00\x1e\x00\x1f\x00\xc1\x00\x34\x00\x35\x00\xc4\x00\x20\x00\x0b\x00\x0c\x00\x76\x00\x0d\x00\x0e\x00\x04\x00\x4a\x00\x05\x00\x4b\x00\x0c\x00\x06\x00\x56\x00\x07\x00\x15\x01\x4c\x00\x57\x00\x09\x00\x0f\x00\x10\x00\x16\x01\x1a\x01\x11\x00\x79\x00\x12\x00\x84\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x58\x00\xe8\x00\x5a\x00\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x13\x00\x05\x00\xfc\x00\xfe\x00\x06\x00\x56\x00\x07\x00\x14\x00\x15\x00\x57\x00\x09\x00\xff\x00\x16\x00\xba\x00\xbb\x00\xbc\x00\x03\x01\x17\x00\x18\x00\x0c\x00\x19\x00\xd2\x00\x1a\x00\x07\x01\xfb\xff\xe3\x00\x1b\x00\x13\x01\x1c\x00\xd3\x00\x1d\x00\x1e\x00\x1f\x00\xcc\x00\xd4\x00\x0b\x00\x0c\x00\x20\x00\x0d\x00\x0e\x00\xd9\x00\xd5\x00\x05\x00\xda\x00\x8a\x00\x06\x00\x56\x00\x07\x00\x8a\x00\xea\x00\x57\x00\x09\x00\x0f\x00\x10\x00\xdc\x00\xe3\x00\x11\x00\x7e\x00\x12\x00\x84\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x58\x00\xeb\x00\x5a\x00\x7d\x00\x88\x00\x0b\x00\x0c\x00\x13\x00\x0d\x00\x0e\x00\xba\x00\xbd\x00\xbc\x00\x8b\x00\x14\x00\x15\x00\xba\x00\xbf\x00\xbc\x00\x16\x00\x8c\x00\x8a\x00\x0f\x00\x10\x00\x17\x00\x18\x00\x11\x00\x19\x00\x12\x00\x1a\x00\x38\x00\x39\x00\x3a\x00\x1b\x00\x20\x00\x1c\x00\x8d\x00\x1d\x00\x1e\x00\x1f\x00\x8e\x00\x8f\x00\x90\x00\x13\x00\x20\x00\xb8\x00\x0c\x00\xc4\x00\xc3\x00\x05\x00\x14\x00\x15\x00\x06\x00\x00\x00\x07\x00\x16\x00\x21\x00\x22\x00\x09\x00\xff\xff\x17\x00\x18\x00\x00\x00\x19\x00\xf0\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x0b\x00\x0c\x00\x20\x00\x0d\x00\x0e\x00\x05\x00\x00\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x00\x00\x57\x00\x09\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x05\x00\x00\x00\x11\x00\x06\x00\x12\x00\x07\x00\x00\x00\x00\x00\x63\x00\x09\x00\x58\x00\xec\x00\x5a\x00\x73\x00\x74\x00\x29\x00\x00\x00\x2a\x00\x2b\x00\x13\x00\x00\x00\xa1\x00\x65\x00\x00\x00\x00\x00\x05\x00\x14\x00\x15\x00\x06\x00\x79\x00\x07\x00\x16\x00\x00\x00\x6f\x00\x09\x00\x05\x00\x17\x00\x18\x00\x06\x00\x19\x00\x07\x00\x1a\x00\x9d\x00\x22\x00\x09\x00\x1b\x00\x07\x01\x1c\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x0b\x00\x0c\x00\x20\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x00\x00\x57\x00\x09\x00\x0f\x00\x10\x00\x05\x00\x00\x00\x24\x00\x06\x00\x12\x00\x07\x00\x00\x00\x00\x00\x63\x00\x09\x00\x00\x00\x25\x00\x58\x00\xf0\x00\x5a\x00\x00\x00\x00\x00\x0b\x00\x0c\x00\x13\x00\x0d\x00\x0e\x00\xf1\x00\x00\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x17\x00\x18\x00\x11\x00\x19\x00\x12\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\xcd\x00\xce\x00\x2b\x00\x13\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x14\x00\x15\x00\x06\x00\xb8\x00\x07\x00\x16\x00\x00\x00\x6f\x00\x09\x00\x05\x00\x17\x00\x18\x00\x06\x00\x19\x00\x07\x00\x1a\x00\x27\x00\x22\x00\x09\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x20\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\x00\x00\x63\x00\x09\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x5e\x00\x9a\x00\x09\x00\x00\x00\x64\x00\x65\x00\x00\x00\x5f\x00\x9b\x00\x61\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\x4c\x00\xca\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\xc1\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\x00\x00\x66\x00\x09\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x5e\x00\x22\x00\x09\x00\x00\x00\x67\x00\x65\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x7f\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x5e\x00\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x80\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x9d\x00\x22\x00\x09\x00\x00\x00\x9e\x00\x9f\x00\xa0\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x00\x00\x55\x00\x56\x00\xff\xff\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x20\x01\x22\x00\x09\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\xdd\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\xde\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\xcf\xff\xcf\xff\x28\x00\x29\x00\x3b\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x2c\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x00\x00\x55\x00\x56\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x18\x01\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x05\x00\x26\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\x05\x00\x71\x00\x09\x00\x06\x00\x3c\x00\x07\x00\x00\x00\x27\x00\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x19\x01\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x28\x00\x29\x00\x00\x00\x2a\x00\x2b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x6f\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x13\x01\x22\x00\x09\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x79\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x05\x00\xfb\x00\x00\x00\x06\x00\x3c\x00\x07\x00\x00\x00\x05\x01\x22\x00\x09\x00\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x0a\x01\x22\x00\x09\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x10\x01\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\xca\x00\x22\x00\x09\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\xd0\x00\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\xe0\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x7a\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\xe7\x00\x22\x00\x09\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\xf3\x00\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\xf5\x00\x7b\x00\xf6\x00\x09\x00\x05\x00\x3c\x00\x00\x00\x06\x00\x6d\x00\x07\x00\x00\x00\x05\x00\x6e\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x1c\x01\x09\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x55\x00\x56\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x83\x00\x05\x00\x00\x00\x00\x00\x06\x00\x3b\x00\x07\x00\x00\x00\x05\x00\x1d\x01\x09\x00\x06\x00\x3c\x00\x07\x00\x00\x00\x05\x00\x1e\x01\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x16\x01\x09\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x1a\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x87\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x1b\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x01\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x03\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x04\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x4c\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x4f\x00\x50\x00\x00\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x4c\x00\xd8\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x00\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x09\x01\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x00\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xcc\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x3b\x00\x4f\x00\x50\x00\x00\x00\x52\x00\x53\x00\x54\x00\x3c\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xd5\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x00\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xe0\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x05\x00\x4c\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x4f\x00\x57\x00\x09\x00\x52\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xe1\x00\x09\x00\x58\x00\xf7\x00\x5a\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x05\x00\x4c\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x00\x00\x57\x00\x09\x00\x52\x00\x53\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xe4\x00\x09\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x05\x00\x4c\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x00\x00\x57\x00\x09\x00\x52\x00\x00\x00\x54\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xe5\x00\x09\x00\x58\x00\x5b\x00\x5a\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x05\x00\x4c\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x00\x00\x57\x00\x09\x00\x52\x00\x00\x00\x00\x00\x00\x00\x05\x00\x55\x00\x56\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xe6\x00\x09\x00\x58\x00\x5c\x00\x5a\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x37\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x05\x00\x4b\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x4c\x00\xed\x00\x09\x00\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x52\x00\x00\x00\xee\x00\x09\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x05\x00\x4b\x00\x00\x00\x06\x00\x56\x00\x07\x00\x00\x00\x4c\x00\x57\x00\x09\x00\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\xf2\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x5d\x00\x5a\x00\x3d\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x00\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x4c\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x4c\x00\x43\x00\x44\x00\x00\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x05\x00\x4b\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x4c\x00\xf4\x00\x09\x00\x05\x00\x00\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x92\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x93\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x94\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x95\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x96\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x97\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x98\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x99\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x9c\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa2\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa3\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa4\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa5\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa6\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa7\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa8\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xa9\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xaa\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xab\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xac\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xad\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xae\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xaf\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb0\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb1\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb2\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb3\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb4\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\xb5\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x62\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x6a\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x6b\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x6c\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x05\x00\x70\x00\x09\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (3, 142) [- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41),- (42 , happyReduce_42),- (43 , happyReduce_43),- (44 , happyReduce_44),- (45 , happyReduce_45),- (46 , happyReduce_46),- (47 , happyReduce_47),- (48 , happyReduce_48),- (49 , happyReduce_49),- (50 , happyReduce_50),- (51 , happyReduce_51),- (52 , happyReduce_52),- (53 , happyReduce_53),- (54 , happyReduce_54),- (55 , happyReduce_55),- (56 , happyReduce_56),- (57 , happyReduce_57),- (58 , happyReduce_58),- (59 , happyReduce_59),- (60 , happyReduce_60),- (61 , happyReduce_61),- (62 , happyReduce_62),- (63 , happyReduce_63),- (64 , happyReduce_64),- (65 , happyReduce_65),- (66 , happyReduce_66),- (67 , happyReduce_67),- (68 , happyReduce_68),- (69 , happyReduce_69),- (70 , happyReduce_70),- (71 , happyReduce_71),- (72 , happyReduce_72),- (73 , happyReduce_73),- (74 , happyReduce_74),- (75 , happyReduce_75),- (76 , happyReduce_76),- (77 , happyReduce_77),- (78 , happyReduce_78),- (79 , happyReduce_79),- (80 , happyReduce_80),- (81 , happyReduce_81),- (82 , happyReduce_82),- (83 , happyReduce_83),- (84 , happyReduce_84),- (85 , happyReduce_85),- (86 , happyReduce_86),- (87 , happyReduce_87),- (88 , happyReduce_88),- (89 , happyReduce_89),- (90 , happyReduce_90),- (91 , happyReduce_91),- (92 , happyReduce_92),- (93 , happyReduce_93),- (94 , happyReduce_94),- (95 , happyReduce_95),- (96 , happyReduce_96),- (97 , happyReduce_97),- (98 , happyReduce_98),- (99 , happyReduce_99),- (100 , happyReduce_100),- (101 , happyReduce_101),- (102 , happyReduce_102),- (103 , happyReduce_103),- (104 , happyReduce_104),- (105 , happyReduce_105),- (106 , happyReduce_106),- (107 , happyReduce_107),- (108 , happyReduce_108),- (109 , happyReduce_109),- (110 , happyReduce_110),- (111 , happyReduce_111),- (112 , happyReduce_112),- (113 , happyReduce_113),- (114 , happyReduce_114),- (115 , happyReduce_115),- (116 , happyReduce_116),- (117 , happyReduce_117),- (118 , happyReduce_118),- (119 , happyReduce_119),- (120 , happyReduce_120),- (121 , happyReduce_121),- (122 , happyReduce_122),- (123 , happyReduce_123),- (124 , happyReduce_124),- (125 , happyReduce_125),- (126 , happyReduce_126),- (127 , happyReduce_127),- (128 , happyReduce_128),- (129 , happyReduce_129),- (130 , happyReduce_130),- (131 , happyReduce_131),- (132 , happyReduce_132),- (133 , happyReduce_133),- (134 , happyReduce_134),- (135 , happyReduce_135),- (136 , happyReduce_136),- (137 , happyReduce_137),- (138 , happyReduce_138),- (139 , happyReduce_139),- (140 , happyReduce_140),- (141 , happyReduce_141),- (142 , happyReduce_142)- ]--happy_n_terms = 80 :: Int-happy_n_nonterms = 43 :: Int--happyReduce_3 = happySpecReduce_2 0# happyReduction_3-happyReduction_3 happy_x_2- happy_x_1- = case happyOut10 happy_x_2 of { happy_var_2 -> - happyIn6- (happy_var_2- )}--happyReduce_4 = happyMonadReduce 4# 1# happyReduction_4-happyReduction_4 (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 { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - ( do- d <- convDecl happy_var_2 happy_var_4 - return $ annotate2 happy_var_1 happy_var_4 (Bind d))}}}- ) (\r -> happyReturn (happyIn7 r))--happyReduce_5 = happySpecReduce_2 1# happyReduction_5-happyReduction_5 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn7- (annotate happy_var_1 (RunAssertion happy_var_2)- )}}--happyReduce_6 = happySpecReduce_1 1# happyReduction_6-happyReduction_6 happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - happyIn7- (annotate happy_var_1 (Evaluate happy_var_1)- )}--happyReduce_7 = happySpecReduce_1 2# happyReduction_7-happyReduction_7 happy_x_1- = happyIn8- (- )--happyReduce_8 = happySpecReduce_2 2# happyReduction_8-happyReduction_8 happy_x_2- happy_x_1- = happyIn8- (- )--happyReduce_9 = happySpecReduce_0 3# happyReduction_9-happyReduction_9 = happyIn9- (- )--happyReduce_10 = happySpecReduce_2 3# happyReduction_10-happyReduction_10 happy_x_2- happy_x_1- = happyIn9- (- )--happyReduce_11 = happySpecReduce_0 4# happyReduction_11-happyReduction_11 = happyIn10- ([]- )--happyReduce_12 = happySpecReduce_1 4# happyReduction_12-happyReduction_12 happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn10- (happy_var_1- )}--happyReduce_13 = happySpecReduce_1 5# happyReduction_13-happyReduction_13 happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn11- (combineDecls (reverse happy_var_1)- )}--happyReduce_14 = happySpecReduce_1 6# happyReduction_14-happyReduction_14 happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn12- ([happy_var_1]- )}--happyReduce_15 = happySpecReduce_3 6# happyReduction_15-happyReduction_15 happy_x_3- happy_x_2- happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - case happyOut13 happy_x_3 of { happy_var_3 -> - happyIn12- (case happy_var_3 of - Just d -> d:happy_var_1- Nothing -> happy_var_1- )}}--happyReduce_16 = happySpecReduce_0 7# happyReduction_16-happyReduction_16 = happyIn13- (Nothing- )--happyReduce_17 = happySpecReduce_1 7# happyReduction_17-happyReduction_17 happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn13- (Just happy_var_1- )}--happyReduce_18 = happyMonadReduce 1# 8# happyReduction_18-happyReduction_18 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut15 happy_x_1 of { happy_var_1 -> - ( annotateWithSymbolTable happy_var_1)}- ) (\r -> happyReturn (happyIn14 r))--happyReduce_19 = happyMonadReduce 3# 9# happyReduction_19-happyReduction_19 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - ( convDecl happy_var_1 happy_var_3)}}- ) (\r -> happyReturn (happyIn15 r))--happyReduce_20 = happySpecReduce_2 9# happyReduction_20-happyReduction_20 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_2 of { happy_var_2 -> - happyIn15- (annotate2List happy_var_1 happy_var_2 (Channel (map unLoc happy_var_2) Nothing)- )}}--happyReduce_21 = happyReduce 4# 9# happyReduction_21-happyReduction_21 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - happyIn15- (annotate2 happy_var_1 happy_var_4 (Channel (map unLoc happy_var_2) (Just happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_22 = happyReduce 4# 9# happyReduction_22-happyReduction_22 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut22 happy_x_2 of { happy_var_2 -> - case happyOut20 happy_x_4 of { happy_var_4 -> - happyIn15- (annotate2List happy_var_1 happy_var_4 (DataType (unLoc happy_var_2) happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_23 = happySpecReduce_2 9# happyReduction_23-happyReduction_23 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_2 of { happy_var_2 -> - happyIn15- (annotate2List happy_var_1 happy_var_2 (External (map unLoc happy_var_2))- )}}--happyReduce_24 = happySpecReduce_2 9# happyReduction_24-happyReduction_24 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_2 of { happy_var_2 -> - happyIn15- (annotate2List happy_var_1 happy_var_2 (Transparent (map unLoc happy_var_2))- )}}--happyReduce_25 = happySpecReduce_2 9# happyReduction_25-happyReduction_25 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn15- (annotate happy_var_1 (Assert happy_var_2)- )}}--happyReduce_26 = happyReduce 4# 9# happyReduction_26-happyReduction_26 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut22 happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - happyIn15- (annotate2 happy_var_1 happy_var_4 (NameType (unLoc happy_var_2) happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_27 = happySpecReduce_3 10# happyReduction_27-happyReduction_27 happy_x_3- happy_x_2- happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - happyIn16- ((Refinement happy_var_1 (getRefinesModel happy_var_2) happy_var_3 [])- )}}}--happyReduce_28 = happyReduce 4# 10# happyReduction_28-happyReduction_28 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - case happyOut18 happy_x_4 of { happy_var_4 -> - happyIn16- ((Refinement happy_var_1 (getRefinesModel happy_var_2) happy_var_3 [happy_var_4])- ) `HappyStk` happyRest}}}}--happyReduce_29 = happySpecReduce_2 10# happyReduction_29-happyReduction_29 happy_x_2- happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOut17 happy_x_2 of { happy_var_2 -> - happyIn16- ((PropertyCheck happy_var_1 happy_var_2 Nothing)- )}}--happyReduce_30 = happySpecReduce_3 10# happyReduction_30-happyReduction_30 happy_x_3- happy_x_2- happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOut17 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn16- ((PropertyCheck happy_var_1 happy_var_2 (Just (getPropModel happy_var_3)))- )}}}--happyReduce_31 = happySpecReduce_1 11# happyReduction_31-happyReduction_31 happy_x_1- = happyIn17- (DeadlockFreedom- )--happyReduce_32 = happySpecReduce_1 11# happyReduction_32-happyReduction_32 happy_x_1- = happyIn17- (LivelockFreedom- )--happyReduce_33 = happySpecReduce_1 11# happyReduction_33-happyReduction_33 happy_x_1- = happyIn17- (LivelockFreedom- )--happyReduce_34 = happySpecReduce_1 11# happyReduction_34-happyReduction_34 happy_x_1- = happyIn17- (Deterministic- )--happyReduce_35 = happySpecReduce_2 12# happyReduction_35-happyReduction_35 happy_x_2- happy_x_1- = case happyOut29 happy_x_2 of { happy_var_2 -> - happyIn18- (TauPriority happy_var_2- )}--happyReduce_36 = happySpecReduce_3 13# happyReduction_36-happyReduction_36 happy_x_3- happy_x_2- happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - happyIn19- (annotate2 happy_var_1 happy_var_3 (DataTypeClause (unLoc happy_var_1) (Just happy_var_3))- )}}--happyReduce_37 = happySpecReduce_1 13# happyReduction_37-happyReduction_37 happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn19- (annotate happy_var_1 (DataTypeClause (unLoc happy_var_1) Nothing)- )}--happyReduce_38 = happySpecReduce_1 14# happyReduction_38-happyReduction_38 happy_x_1- = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn20- (reverse happy_var_1- )}--happyReduce_39 = happySpecReduce_1 15# happyReduction_39-happyReduction_39 happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - happyIn21- ([happy_var_1]- )}--happyReduce_40 = happySpecReduce_3 15# happyReduction_40-happyReduction_40 happy_x_3- happy_x_2- happy_x_1- = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut19 happy_x_3 of { happy_var_3 -> - happyIn21- (happy_var_3:happy_var_1- )}}--happyReduce_41 = happySpecReduce_1 16# happyReduction_41-happyReduction_41 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn22- (liftLoc happy_var_1 (UnQual (OccName (getName happy_var_1)))- )}--happyReduce_42 = happySpecReduce_1 17# happyReduction_42-happyReduction_42 happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - happyIn23- (reverse happy_var_1- )}--happyReduce_43 = happySpecReduce_1 18# happyReduction_43-happyReduction_43 happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn24- ([happy_var_1]- )}--happyReduce_44 = happySpecReduce_3 18# happyReduction_44-happyReduction_44 happy_x_3- happy_x_2- happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - case happyOut22 happy_x_3 of { happy_var_3 -> - happyIn24- (happy_var_3:happy_var_1- )}}--happyReduce_45 = happySpecReduce_1 19# happyReduction_45-happyReduction_45 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25- (liftLoc happy_var_1 (Int (getInt happy_var_1))- )}--happyReduce_46 = happySpecReduce_1 19# happyReduction_46-happyReduction_46 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25- (liftLoc happy_var_1 (Bool True)- )}--happyReduce_47 = happySpecReduce_1 19# happyReduction_47-happyReduction_47 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25- (liftLoc happy_var_1 (Bool False)- )}--happyReduce_48 = happySpecReduce_1 20# happyReduction_48-happyReduction_48 happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - happyIn26- (convPat happy_var_1- )}--happyReduce_49 = happyMonadReduce 1# 21# happyReduction_49-happyReduction_49 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> - ( do- modifyTopFileParserState (- \ st @ (FileParserState { sequenceStack = (c:cs) }) -> - st { sequenceStack = (c+1):cs })- return happy_var_1)}- ) (\r -> happyReturn (happyIn27 r))--happyReduce_50 = happySpecReduce_1 22# happyReduction_50-happyReduction_50 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn28- (happy_var_1- )}--happyReduce_51 = happySpecReduce_1 23# happyReduction_51-happyReduction_51 happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - happyIn29- (checkExp happy_var_1- )}--happyReduce_52 = happyMonadReduce 1# 24# happyReduction_52-happyReduction_52 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> - ( do- t <- freshPType- let An l _ e = happy_var_1- return $ An l (Nothing, t) e)}- ) (\r -> happyReturn (happyIn30 r))--happyReduce_53 = happySpecReduce_1 25# happyReduction_53-happyReduction_53 happy_x_1- = case happyOut25 happy_x_1 of { happy_var_1 -> - happyIn31- (liftLoc happy_var_1 (Lit (unLoc happy_var_1))- )}--happyReduce_54 = happySpecReduce_1 25# happyReduction_54-happyReduction_54 happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn31- (liftLoc happy_var_1 (Var (unLoc happy_var_1))- )}--happyReduce_55 = happySpecReduce_3 25# happyReduction_55-happyReduction_55 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Tuple happy_var_2)- )}}}--happyReduce_56 = happySpecReduce_3 25# happyReduction_56-happyReduction_56 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (DotApp happy_var_1 happy_var_3)- )}}--happyReduce_57 = happyReduce 4# 25# happyReduction_57-happyReduction_57 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (Let (checkLetDecls happy_var_2) happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_58 = happyReduce 6# 25# happyReduction_58-happyReduction_58 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - case happyOut30 happy_x_6 of { happy_var_6 -> - happyIn31- (annotate2 happy_var_1 happy_var_6 (If happy_var_2 happy_var_4 happy_var_6)- ) `HappyStk` happyRest}}}}--happyReduce_59 = happySpecReduce_3 25# happyReduction_59-happyReduction_59 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Paren happy_var_2)- )}}}--happyReduce_60 = happyReduce 4# 25# happyReduction_60-happyReduction_60 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (App happy_var_1 happy_var_3)- ) `HappyStk` happyRest}}}--happyReduce_61 = happyReduce 4# 25# happyReduction_61-happyReduction_61 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut26 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (Lambda happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_62 = happySpecReduce_3 25# happyReduction_62-happyReduction_62 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp Equals happy_var_1 happy_var_3)- )}}--happyReduce_63 = happySpecReduce_3 25# happyReduction_63-happyReduction_63 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp NotEquals happy_var_1 happy_var_3)- )}}--happyReduce_64 = happySpecReduce_3 25# happyReduction_64-happyReduction_64 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp LessThan happy_var_1 happy_var_3)- )}}--happyReduce_65 = happySpecReduce_3 25# happyReduction_65-happyReduction_65 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp GreaterThan happy_var_1 happy_var_3)- )}}--happyReduce_66 = happySpecReduce_3 25# happyReduction_66-happyReduction_66 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp LessThanEq happy_var_1 happy_var_3)- )}}--happyReduce_67 = happySpecReduce_3 25# happyReduction_67-happyReduction_67 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp GreaterThanEq happy_var_1 happy_var_3)- )}}--happyReduce_68 = happySpecReduce_2 25# happyReduction_68-happyReduction_68 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn31- (annotate2 happy_var_1 happy_var_2 (BooleanUnaryOp Not happy_var_2)- )}}--happyReduce_69 = happySpecReduce_3 25# happyReduction_69-happyReduction_69 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp Or happy_var_1 happy_var_3)- )}}--happyReduce_70 = happySpecReduce_3 25# happyReduction_70-happyReduction_70 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp And happy_var_1 happy_var_3)- )}}--happyReduce_71 = happySpecReduce_2 25# happyReduction_71-happyReduction_71 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn31- (annotate2 happy_var_1 happy_var_2 (MathsUnaryOp Negate happy_var_2)- )}}--happyReduce_72 = happySpecReduce_3 25# happyReduction_72-happyReduction_72 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Plus happy_var_1 happy_var_3)- )}}--happyReduce_73 = happySpecReduce_3 25# happyReduction_73-happyReduction_73 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Minus happy_var_1 happy_var_3)- )}}--happyReduce_74 = happySpecReduce_3 25# happyReduction_74-happyReduction_74 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Mod happy_var_1 happy_var_3)- )}}--happyReduce_75 = happySpecReduce_3 25# happyReduction_75-happyReduction_75 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Divide happy_var_1 happy_var_3)- )}}--happyReduce_76 = happySpecReduce_3 25# happyReduction_76-happyReduction_76 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Times happy_var_1 happy_var_3)- )}}--happyReduce_77 = happySpecReduce_1 25# happyReduction_77-happyReduction_77 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn31- (annotate happy_var_1 (List [])- )}--happyReduce_78 = happySpecReduce_3 25# happyReduction_78-happyReduction_78 happy_x_3- happy_x_2- happy_x_1- = case happyOut27 happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOut28 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (List happy_var_2)- )}}}--happyReduce_79 = happyReduce 5# 25# happyReduction_79-happyReduction_79 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut27 happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_4 of { happy_var_4 -> - case happyOut28 happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (ListComp happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_80 = happyReduce 4# 25# happyReduction_80-happyReduction_80 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut27 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut28 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (ListEnumFrom happy_var_2)- ) `HappyStk` happyRest}}}--happyReduce_81 = happyReduce 5# 25# happyReduction_81-happyReduction_81 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut27 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - case happyOut28 happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (ListEnumFromTo happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_82 = happySpecReduce_3 25# happyReduction_82-happyReduction_82 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Concat happy_var_1 happy_var_3)- )}}--happyReduce_83 = happySpecReduce_2 25# happyReduction_83-happyReduction_83 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn31- (annotate2 happy_var_1 happy_var_2 (ListLength happy_var_2)- )}}--happyReduce_84 = happySpecReduce_3 25# happyReduction_84-happyReduction_84 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Set happy_var_2)- )}}}--happyReduce_85 = happyReduce 5# 25# happyReduction_85-happyReduction_85 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (SetComp happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_86 = happyReduce 4# 25# happyReduction_86-happyReduction_86 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (SetEnumFrom happy_var_2)- ) `HappyStk` happyRest}}}--happyReduce_87 = happyReduce 5# 25# happyReduction_87-happyReduction_87 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (SetEnumFromTo happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_88 = happySpecReduce_3 25# happyReduction_88-happyReduction_88 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (SetEnum happy_var_2)- )}}}--happyReduce_89 = happyReduce 5# 25# happyReduction_89-happyReduction_89 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (SetEnumComp happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_90 = happySpecReduce_1 25# happyReduction_90-happyReduction_90 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn31- (liftLoc happy_var_1 (ExpPatWildCard)- )}--happyReduce_91 = happySpecReduce_3 25# happyReduction_91-happyReduction_91 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (liftLoc happy_var_1 (ExpPatDoublePattern happy_var_1 happy_var_3)- )}}--happyReduce_92 = happyReduce 4# 25# happyReduction_92-happyReduction_92 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut39 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (Prefix happy_var_1 happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_93 = happySpecReduce_3 25# happyReduction_93-happyReduction_93 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Prefix happy_var_1 [] happy_var_3)- )}}--happyReduce_94 = happySpecReduce_3 25# happyReduction_94-happyReduction_94 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (ExternalChoice happy_var_1 happy_var_3)- )}}--happyReduce_95 = happySpecReduce_3 25# happyReduction_95-happyReduction_95 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Hiding happy_var_1 happy_var_3)- )}}--happyReduce_96 = happySpecReduce_3 25# happyReduction_96-happyReduction_96 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (InternalChoice happy_var_1 happy_var_3)- )}}--happyReduce_97 = happySpecReduce_3 25# happyReduction_97-happyReduction_97 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Interleave happy_var_1 happy_var_3)- )}}--happyReduce_98 = happyReduce 5# 25# happyReduction_98-happyReduction_98 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (GenParallel happy_var_1 happy_var_3 happy_var_5)- ) `HappyStk` happyRest}}}--happyReduce_99 = happyReduce 7# 25# happyReduction_99-happyReduction_99 (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 happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - case happyOut30 happy_x_7 of { happy_var_7 -> - happyIn31- (annotate2 happy_var_1 happy_var_7 (AlphaParallel happy_var_1 happy_var_3 happy_var_5 happy_var_7)- ) `HappyStk` happyRest}}}}--happyReduce_100 = happySpecReduce_3 25# happyReduction_100-happyReduction_100 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (Interrupt happy_var_1 happy_var_3)- )}}--happyReduce_101 = happyReduce 5# 25# happyReduction_101-happyReduction_101 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (Exception happy_var_1 happy_var_3 happy_var_5)- ) `HappyStk` happyRest}}}--happyReduce_102 = happySpecReduce_3 25# happyReduction_102-happyReduction_102 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (SlidingChoice happy_var_1 happy_var_3)- )}}--happyReduce_103 = happySpecReduce_3 25# happyReduction_103-happyReduction_103 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (SequentialComp happy_var_1 happy_var_3)- )}}--happyReduce_104 = happySpecReduce_3 25# happyReduction_104-happyReduction_104 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn31- (annotate2 happy_var_1 happy_var_3 (GuardedExp happy_var_1 happy_var_3)- )}}--happyReduce_105 = happyReduce 5# 25# happyReduction_105-happyReduction_105 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut34 happy_x_3 of { happy_var_3 -> - case happyOut45 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - happyIn31- (annotate2 happy_var_1 happy_var_5 (Rename happy_var_1 happy_var_3 happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_106 = happyReduce 6# 25# happyReduction_106-happyReduction_106 (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 happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut37 happy_x_3 of { happy_var_3 -> - case happyOut45 happy_x_4 of { happy_var_4 -> - case happyOut30 happy_x_6 of { happy_var_6 -> - happyIn31- (annotate2 happy_var_1 happy_var_6 (LinkParallel happy_var_1 happy_var_3 happy_var_4 happy_var_6)- ) `HappyStk` happyRest}}}}--happyReduce_107 = happyReduce 4# 25# happyReduction_107-happyReduction_107 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut47 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (ReplicatedInterleave happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_108 = happyReduce 4# 25# happyReduction_108-happyReduction_108 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut47 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (ReplicatedExternalChoice happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_109 = happyReduce 4# 25# happyReduction_109-happyReduction_109 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut47 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn31- (annotate2 happy_var_1 happy_var_4 (ReplicatedInternalChoice happy_var_2 happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_110 = happyReduce 7# 25# happyReduction_110-happyReduction_110 (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 { happy_var_1 -> - case happyOut47 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - case happyOut30 happy_x_7 of { happy_var_7 -> - happyIn31- (annotate2 happy_var_1 happy_var_7 (ReplicatedAlphaParallel happy_var_2 happy_var_5 happy_var_7)- ) `HappyStk` happyRest}}}}--happyReduce_111 = happyReduce 6# 25# happyReduction_111-happyReduction_111 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_4 of { happy_var_4 -> - case happyOut30 happy_x_6 of { happy_var_6 -> - happyIn31- (annotate2 happy_var_1 happy_var_6 (ReplicatedParallel happy_var_2 happy_var_4 happy_var_6)- ) `HappyStk` happyRest}}}}--happyReduce_112 = happyReduce 7# 25# happyReduction_112-happyReduction_112 (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 { happy_var_1 -> - case happyOut37 happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - case happyOut47 happy_x_5 of { happy_var_5 -> - case happyOut30 happy_x_7 of { happy_var_7 -> - happyIn31- (annotate2 happy_var_1 happy_var_7 (ReplicatedLinkParallel happy_var_2 happy_var_3 happy_var_5 happy_var_7)- ) `HappyStk` happyRest}}}}}--happyReduce_113 = happySpecReduce_2 26# happyReduction_113-happyReduction_113 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn32- (annotate2 happy_var_1 happy_var_2 (Input (convPat happy_var_2) Nothing)- )}}--happyReduce_114 = happyReduce 4# 26# happyReduction_114-happyReduction_114 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn32- (annotate2 happy_var_1 happy_var_4 (Input (convPat happy_var_2) (Just (checkExp happy_var_4)))- ) `HappyStk` happyRest}}}--happyReduce_115 = happySpecReduce_2 26# happyReduction_115-happyReduction_115 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn32- (annotate2 happy_var_1 happy_var_2 (NonDetInput (convPat happy_var_2) Nothing)- )}}--happyReduce_116 = happyReduce 4# 26# happyReduction_116-happyReduction_116 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn32- (annotate2 happy_var_1 happy_var_4 (NonDetInput (convPat happy_var_2) (Just (checkExp happy_var_4)))- ) `HappyStk` happyRest}}}--happyReduce_117 = happySpecReduce_2 26# happyReduction_117-happyReduction_117 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn32- (annotate2 happy_var_1 happy_var_2 (Output (checkExp happy_var_2))- )}}--happyReduce_118 = happySpecReduce_3 27# happyReduction_118-happyReduction_118 happy_x_3- happy_x_2- happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - happyIn33- ((happy_var_1, happy_var_3)- )}}--happyReduce_119 = happySpecReduce_1 28# happyReduction_119-happyReduction_119 happy_x_1- = case happyOut35 happy_x_1 of { happy_var_1 -> - happyIn34- (reverse happy_var_1- )}--happyReduce_120 = happySpecReduce_1 29# happyReduction_120-happyReduction_120 happy_x_1- = case happyOut33 happy_x_1 of { happy_var_1 -> - happyIn35- ([happy_var_1]- )}--happyReduce_121 = happySpecReduce_3 29# happyReduction_121-happyReduction_121 happy_x_3- happy_x_2- happy_x_1- = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn35- (happy_var_3:happy_var_1- )}}--happyReduce_122 = happySpecReduce_3 30# happyReduction_122-happyReduction_122 happy_x_3- happy_x_2- happy_x_1- = case happyOut29 happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - happyIn36- ((happy_var_1, happy_var_3)- )}}--happyReduce_123 = happySpecReduce_1 31# happyReduction_123-happyReduction_123 happy_x_1- = case happyOut38 happy_x_1 of { happy_var_1 -> - happyIn37- (reverse happy_var_1- )}--happyReduce_124 = happySpecReduce_1 32# happyReduction_124-happyReduction_124 happy_x_1- = case happyOut36 happy_x_1 of { happy_var_1 -> - happyIn38- ([happy_var_1]- )}--happyReduce_125 = happySpecReduce_3 32# happyReduction_125-happyReduction_125 happy_x_3- happy_x_2- happy_x_1- = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOut36 happy_x_3 of { happy_var_3 -> - happyIn38- (happy_var_3:happy_var_1- )}}--happyReduce_126 = happySpecReduce_1 33# happyReduction_126-happyReduction_126 happy_x_1- = case happyOut40 happy_x_1 of { happy_var_1 -> - happyIn39- (reverse happy_var_1- )}--happyReduce_127 = happySpecReduce_1 34# happyReduction_127-happyReduction_127 happy_x_1- = case happyOut32 happy_x_1 of { happy_var_1 -> - happyIn40- ([happy_var_1]- )}--happyReduce_128 = happySpecReduce_2 34# happyReduction_128-happyReduction_128 happy_x_2- happy_x_1- = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOut32 happy_x_2 of { happy_var_2 -> - happyIn40- (happy_var_2:happy_var_1- )}}--happyReduce_129 = happySpecReduce_3 35# happyReduction_129-happyReduction_129 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_3 of { happy_var_3 -> - happyIn41- (happy_var_1:(reverse happy_var_3)- )}}--happyReduce_130 = happySpecReduce_1 36# happyReduction_130-happyReduction_130 happy_x_1- = case happyOut44 happy_x_1 of { happy_var_1 -> - happyIn42- (reverse happy_var_1- )}--happyReduce_131 = happySpecReduce_0 37# happyReduction_131-happyReduction_131 = happyIn43- ([]- )--happyReduce_132 = happySpecReduce_1 37# happyReduction_132-happyReduction_132 happy_x_1- = case happyOut44 happy_x_1 of { happy_var_1 -> - happyIn43- (reverse happy_var_1- )}--happyReduce_133 = happySpecReduce_3 38# happyReduction_133-happyReduction_133 happy_x_3- happy_x_2- happy_x_1- = case happyOut44 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn44- (happy_var_3:happy_var_1- )}}--happyReduce_134 = happySpecReduce_1 38# happyReduction_134-happyReduction_134 happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - happyIn44- ([happy_var_1]- )}--happyReduce_135 = happySpecReduce_0 39# happyReduction_135-happyReduction_135 = happyIn45- ([]- )--happyReduce_136 = happySpecReduce_2 39# happyReduction_136-happyReduction_136 happy_x_2- happy_x_1- = case happyOut47 happy_x_2 of { happy_var_2 -> - happyIn45- (happy_var_2- )}--happyReduce_137 = happySpecReduce_3 40# happyReduction_137-happyReduction_137 happy_x_3- happy_x_2- happy_x_1- = case happyOut26 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn46- (annotate2 happy_var_1 happy_var_3 (Generator happy_var_1 happy_var_3)- )}}--happyReduce_138 = happySpecReduce_3 40# happyReduction_138-happyReduction_138 happy_x_3- happy_x_2- happy_x_1- = case happyOut26 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - happyIn46- (annotate2 happy_var_1 happy_var_3 (Generator happy_var_1 happy_var_3)- )}}--happyReduce_139 = happySpecReduce_1 40# happyReduction_139-happyReduction_139 happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - happyIn46- (annotate happy_var_1 (Qualifier happy_var_1)- )}--happyReduce_140 = happySpecReduce_1 41# happyReduction_140-happyReduction_140 happy_x_1- = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn47- (reverse happy_var_1- )}--happyReduce_141 = happySpecReduce_3 42# happyReduction_141-happyReduction_141 happy_x_3- happy_x_2- happy_x_1- = case happyOut48 happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn48- (happy_var_3:happy_var_1- )}}--happyReduce_142 = happySpecReduce_1 42# happyReduction_142-happyReduction_142 happy_x_1- = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn48- ([happy_var_1]- )}--happyNewToken action sts stk- = getNextTokenWrapper(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- L _ TEOF -> happyDoAction 79# tk action sts stk;- L _ (TInteger _) -> cont 1#;- L _ (TIdent _) -> cont 2#;- L _ TNewLine -> cont 3#;- L _ TFalse -> cont 4#;- L _ TTrue -> cont 5#;- L _ TDefineEqual -> cont 6#;- L _ TComma -> cont 7#;- L _ TDot -> cont 8#;- L _ TQuestionMark -> cont 9#;- L _ TDollar -> cont 10#;- L _ TExclamationMark -> cont 11#;- L _ TDoubleDot -> cont 12#;- L _ TColon -> cont 13#;- L _ TDrawnFrom -> cont 14#;- L _ TTie -> cont 15#;- L _ TPipe -> cont 16#;- L _ TDoubleAt -> cont 17#;- L _ TWildCard -> cont 18#;- L _ TIf -> cont 19#;- L _ TThen -> cont 20#;- L _ TElse -> cont 21#;- L _ TLet -> cont 22#;- L _ TWithin -> cont 23#;- L _ TBackSlash -> cont 24#;- L _ TLambdaDot -> cont 25#;- L _ TChannel -> cont 26#;- L _ TDataType -> cont 27#;- L _ TExternal -> cont 28#;- L _ TTransparent -> cont 29#;- L _ TNameType -> cont 30#;- L _ TAssert -> cont 31#;- L _ TDeadlockFree -> cont 32#;- L _ TLivelockFree -> cont 33#;- L _ TDivergenceFree -> cont 34#;- L _ TDeterministic -> cont 35#;- L _ TTauPriority -> cont 36#;- L _ (TRefines _) -> cont 37#;- L _ (TModel _) -> cont 38#;- L _ TNot -> cont 39#;- L _ TAnd -> cont 40#;- L _ TOr -> cont 41#;- L _ TEq -> cont 42#;- L _ TNotEq -> cont 43#;- L _ TLtEq -> cont 44#;- L _ TGtEq -> cont 45#;- L _ TEmptySeq -> cont 46#;- L _ TLt -> cont 47#;- L _ TGt -> cont 48#;- L _ TCloseSeq -> cont 49#;- L _ TPlus -> cont 50#;- L _ TMinus -> cont 51#;- L _ TTimes -> cont 52#;- L _ TDivide -> cont 53#;- L _ TMod -> cont 54#;- L _ TConcat -> cont 55#;- L _ THash -> cont 56#;- L _ TLParen -> cont 57#;- L _ TRParen -> cont 58#;- L _ TLBrace -> cont 59#;- L _ TRBrace -> cont 60#;- L _ TLPipeBrace -> cont 61#;- L _ TRPipeBrace -> cont 62#;- L _ TLDoubleSqBracket -> cont 63#;- L _ TRDoubleSqBracket -> cont 64#;- L _ TLPipeSqBracket -> cont 65#;- L _ TRPipeSqBracket -> cont 66#;- L _ TLSqBracket -> cont 67#;- L _ TRSqBracket -> cont 68#;- L _ TExtChoice -> cont 69#;- L _ TIntChoice -> cont 70#;- L _ TInterleave -> cont 71#;- L _ TPrefix -> cont 72#;- L _ TInterrupt -> cont 73#;- L _ TSlidingChoice -> cont 74#;- L _ TRException -> cont 75#;- L _ TParallel -> cont 76#;- L _ TSemiColon -> cont 77#;- L _ TGuard -> cont 78#;- _ -> happyError' tk- })--happyError_ tk = happyError' tk--happyThen :: () => ParseMonad a -> (a -> ParseMonad b) -> ParseMonad b-happyThen = (>>=)-happyReturn :: () => a -> ParseMonad a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> ParseMonad a-happyReturn1 = happyReturn-happyError' :: () => (LToken) -> ParseMonad a-happyError' tk = parseError tk--parseFile_ = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))--parseInteractiveStmt_ = happySomeParser where- happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut7 x))--parseExpression_ = happySomeParser where- happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut30 x))--happySeq = happyDontSeq---combineDecls :: [PDecl] -> [PDecl]-combineDecls [] = []-combineDecls ((An loc1 b (FunBind n ms)):(An loc2 c (FunBind n' ms')):ds) | n == n' = - combineDecls $ (An (combineSpans loc1 loc2) b (FunBind n (ms++ms'))):ds-combineDecls (d:ds) = d:combineDecls ds--convDecl :: PExp -> PExp -> ParseMonad PDecl-convDecl (lhs @ (An loc1 b lhsexp)) (rhs @ (An loc2 d _)) = - let- span = combineSpans loc1 loc2-- -- REMEMBER: needs to reverse pts- getPats :: Exp UnRenamedName -> ([[PPat]], UnRenamedName)- getPats (App f args) = - ((map convPat args):ps, n)- where- (ps, n) = getPats (unAnnotate f)- getPats (Var n) = ([], n)- - convFunBind exp = - FunBind n [An span (dummyAnnotation) (Match (reverse ps) rhs)]- where- (ps, n) = getPats exp-- convPatBind exp = PatBind (convPat exp) rhs- in do- symbTable <- freshPSymbolTable- case lhsexp of- App f args -> return $ An span (Nothing, symbTable) (convFunBind lhsexp)- _ -> return $ An span (Nothing, symbTable) (convPatBind lhs)---- | Throws an error if a declaration that is not allowed inside a let --- expression is found.-checkLetDecls :: [PDecl] -> [PDecl]-checkLetDecls decls = map checkDecl decls- where- checkDecl :: PDecl -> PDecl- checkDecl (anDecl@(An _ _ decl)) =- let- check (FunBind a b) = anDecl- check (PatBind a b) = anDecl- check _ = throwSourceError [invalidDeclarationErrorMessage anDecl]- in check decl--checkExp :: PExp -> PExp-checkExp (anExp@(An a b exp)) =- let - check :: Exp UnRenamedName -> Exp UnRenamedName- check (App e es) = App (checkExp e) (map checkExp es)- check (BooleanBinaryOp op e1 e2) = BooleanBinaryOp op (checkExp e1) (checkExp e2)- check (BooleanUnaryOp op e) = BooleanUnaryOp op (checkExp e)- check (Concat e1 e2) = Concat (checkExp e1) (checkExp e2)- check (DotApp e1 e2) = DotApp (checkExp e1) (checkExp e2)- check (If e1 e2 e3) = If (checkExp e1) (checkExp e2) (checkExp e3)- check (Lambda p e) = Lambda p (checkExp e)- check (Let decls e) = Let decls (checkExp e)- check (Lit lit) = Lit lit- check (List es) = List (map checkExp es)- check (ListComp es stmts) = ListComp (map checkExp es) stmts- check (ListEnumFrom e) = ListEnumFrom (checkExp e)- check (ListEnumFromTo e1 e2) = ListEnumFromTo (checkExp e1) (checkExp e2)- check (ListLength e) = ListLength (checkExp e)- check (MathsBinaryOp op e1 e2) = MathsBinaryOp op (checkExp e1) (checkExp e2)- check (MathsUnaryOp op e) = MathsUnaryOp op (checkExp e)- check (Paren e) = Paren (checkExp e)- check (Set es) = Set (map checkExp es)- check (SetComp es stmts) = SetComp (map checkExp es) stmts- check (SetEnumFrom e) = SetEnumFrom (checkExp e)- check (SetEnumFromTo e1 e2) = SetEnumFromTo (checkExp e1) (checkExp e2)- check (SetEnum es) = SetEnum (map checkExp es)- -- We don't need to check inside stmts as they will have been checked- -- upon creation- check (SetEnumComp es stmts) = SetEnumComp (map checkExp es) stmts- check (Tuple es) = Tuple (map checkExp es)- check (Var qname) = Var qname-- check (AlphaParallel e1 e2 e3 e4) = - AlphaParallel (checkExp e1) (checkExp e2) (checkExp e3) (checkExp e4)- check (Exception e1 e2 e3) = Exception (checkExp e1) (checkExp e2) (checkExp e3)- check (ExternalChoice e1 e2) = ExternalChoice (checkExp e1) (checkExp e2)- check (GenParallel e1 e2 e3) = GenParallel (checkExp e1) (checkExp e2) (checkExp e3)- check (GuardedExp e1 e2) = GuardedExp (checkExp e1) (checkExp e2)- check (Hiding e1 e2) = Hiding (checkExp e1) (checkExp e2)- check (InternalChoice e1 e2) = InternalChoice (checkExp e1) (checkExp e2)- check (Interrupt e1 e2) = Interrupt (checkExp e1) (checkExp e2)- check (Interleave e1 e2) = Interleave (checkExp e1) (checkExp e2)- check (LinkParallel e1 ties stmts e2) = - LinkParallel (checkExp e1) ties stmts (checkExp e2)- check (Prefix e1 fields e2) = Prefix (checkExp e1) fields (checkExp e2)- check (Rename e ties stmts) = Rename (checkExp e) ties stmts- check (SequentialComp e1 e2) = SequentialComp (checkExp e1) (checkExp e2)- check (SlidingChoice e1 e2) = SlidingChoice (checkExp e1) (checkExp e2)-- check (ReplicatedAlphaParallel stmts e1 e2) = - ReplicatedAlphaParallel stmts (checkExp e1) (checkExp e2)- check (ReplicatedInterleave stmts e1) = ReplicatedInterleave stmts (checkExp e1)- check (ReplicatedExternalChoice stmts e1) = ReplicatedExternalChoice stmts (checkExp e1)- check (ReplicatedInternalChoice stmts e1) = ReplicatedInternalChoice stmts (checkExp e1)- check (ReplicatedParallel e1 stmts e2) = - ReplicatedParallel (checkExp e1) stmts (checkExp e2)- check (ReplicatedLinkParallel ties tiesStmts stmts e) = - ReplicatedLinkParallel ties tiesStmts stmts (checkExp e)- - check x = throwSourceError [invalidExpressionErrorMessage anExp]- in- An a b (check exp)--dotAppToList :: PExp -> [PExp]-dotAppToList (An a b exp) = - let - list :: Exp UnRenamedName -> [PExp]- list (DotApp e1 e2) = (dotAppToList e1) ++ (dotAppToList e2)- list x = [An a b x]- in- list exp--convPat :: PExp -> PPat-convPat (anExp@ (An a b exp)) = - let- trans :: Exp UnRenamedName -> Pat UnRenamedName- trans (Concat e1 e2) = PConcat (convPat e1) (convPat e2)- trans (DotApp e1 e2) = PDotApp (convPat e1) (convPat e2)- trans (List xs) = PList (map convPat xs)- trans (Lit x) = PLit x- trans (Set xs) = PSet (map convPat xs)- trans (Paren x) = PParen (convPat x)- trans (Tuple xs) = PTuple (map convPat xs)- trans (Var x) = PVar x- trans (ExpPatWildCard) = PWildCard- trans (ExpPatDoublePattern e1 e2) = - PDoublePattern (convPat e1) (convPat e2)- trans x = throwSourceError [invalidPatternErrorMessage anExp]- in- An a () (trans exp)---- Helper function to get the contents of tokens-getInt (L _ (TInteger x)) = x-getName (L _ (TIdent x)) = x-getRefinesModel (L _ (TRefines x)) = x-getPropModel (L _ (TModel x)) = x--class Locatable a where- getLoc :: a b -> SrcSpan- unLoc :: a b -> b- mkLoc :: SrcSpan -> b -> a b--instance Locatable Located where- getLoc (L loc _) = loc- unLoc (L _ b) = b- mkLoc loc b = L loc b--instance Locatable (Annotated a) where- getLoc (An loc _ _) = loc- unLoc (An _ _ b) = b- mkLoc loc b = An loc dummyAnnotation b--annotate :: (Locatable t1, Locatable t2) => t1 a -> b -> t2 b-annotate t1 b = mkLoc (getLoc t1) b--annotate2 :: - (Locatable t1, Locatable t2, Locatable t3) => t1 a -> t2 b -> c -> t3 c-annotate2 t1 t2 b = mkLoc (combineSpans (getLoc t1) (getLoc t2)) b-annotate2List :: - (Locatable t1, Locatable t2, Locatable t3) => t1 a -> [t2 b] -> c -> t3 c-annotate2List t1 t2 b = annotate2 t1 (last t2) b-annotate2List' :: - (Locatable t1, Locatable t2, Locatable t3) => [t1 a] -> t2 b -> c -> t3 c-annotate2List' t1 t2 b = annotate2 (last t1) t2 b--annotateWithSymbolTable - :: Annotated (Maybe SymbolTable, PSymbolTable) a -> ParseMonad (Annotated (Maybe SymbolTable, PSymbolTable) a)-annotateWithSymbolTable (An l _ a) = do- symbTable <- freshPSymbolTable- return $ An l (Nothing, symbTable) a--liftLoc :: (Locatable t1, Locatable t2) => t1 a -> b -> t2 b-liftLoc t1 b = mkLoc (getLoc t1) b--parseError :: LToken -> ParseMonad a-parseError tok = throwSourceError [parseErrorMessage tok]-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 30 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 61 "templates/GenericTemplate.hs" #-}--{-# LINE 70 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser). We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =- happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st- = {- nothing -}--- case action of- 0# -> {- nothing -}- happyFail i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}-- (happyReduceArr Happy_Data_Array.! rule) i tk st- where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))- n -> {- nothing -}--- happyShift new_state i tk st- where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))- where (off) = indexShortOffAddr happyActOffsets st- (off_i) = (off Happy_GHC_Exts.+# i)- check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))- then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i)- else False- (action)- | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 130 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =- Happy_GHC_Exts.narrow16Int# i- where- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)- high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))- low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))- off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 163 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "shifting the error token" $- happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =- happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk- = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')- = let r = fn v1 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')- = let r = fn v1 v2 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')- = let r = fn v1 v2 v3 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk- = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of- sts1@((HappyCons (st1@(action)) (_))) ->- let r = fn stk in -- it doesn't hurt to always seq here...- happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))- where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))- where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk-- (off) = indexShortOffAddr happyGotoOffsets st1- (off_i) = (off Happy_GHC_Exts.+# nt)- (new_state) = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where (off) = indexShortOffAddr happyGotoOffsets st- (off_i) = (off Happy_GHC_Exts.+# nt)- (new_state) = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk =--- trace "failing" $ - happyError_ tk+import Data.List (groupBy, nub, sort, sortBy, (\\))+import qualified Data.Map as M++import CSPM.DataStructures.Literals+import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import CSPM.DataStructures.Types hiding (TDot, TChar)+import CSPM.Parser.Exceptions+import CSPM.Parser.Lexer+import CSPM.Parser.Monad+import CSPM.Parser.Tokens+import Prelude hiding (getChar)+import Util.Annotated+import Util.Exception (panic)+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.10++newtype HappyAbsSyn t8 t9 t39 t40 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: (PCSPMFile) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t8 t9 t39 t40) -> (PCSPMFile)+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (PInteractiveStmt) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t8 t9 t39 t40) -> (PInteractiveStmt)+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: t8 -> (HappyAbsSyn t8 t9 t39 t40)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t8 t9 t39 t40) -> t8+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t8 t9 t39 t40)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t8 t9 t39 t40) -> t9+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PDecl])+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PDecl])+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: ([PDecl]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PDecl])+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Maybe PDecl) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t8 t9 t39 t40) -> (Maybe PDecl)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (PDecl) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t8 t9 t39 t40) -> (PDecl)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (PDecl) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t8 t9 t39 t40) -> (PDecl)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: ([PPat]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PPat])+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: ([PPat]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PPat])+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (PAssertion) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t8 t9 t39 t40) -> (PAssertion)+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (Located SemanticProperty) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t8 t9 t39 t40) -> (Located SemanticProperty)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (Located (ModelOption UnRenamedName)) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t8 t9 t39 t40) -> (Located (ModelOption UnRenamedName))+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (PDataTypeClause) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t8 t9 t39 t40) -> (PDataTypeClause)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([PDataTypeClause]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PDataTypeClause])+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ([PDataTypeClause]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PDataTypeClause])+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (Located UnRenamedName) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t8 t9 t39 t40) -> (Located UnRenamedName)+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Located UnRenamedName) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t8 t9 t39 t40) -> (Located UnRenamedName)+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: ([Located UnRenamedName]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t8 t9 t39 t40) -> ([Located UnRenamedName])+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: ([Located UnRenamedName]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t8 t9 t39 t40) -> ([Located UnRenamedName])+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (PSTypeScheme) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t8 t9 t39 t40) -> (PSTypeScheme)+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([PSTypeConstraint]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PSTypeConstraint])+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([PSTypeConstraint]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PSTypeConstraint])+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: (PSType) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t8 t9 t39 t40) -> (PSType)+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: (PSTypeConstraint) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t8 t9 t39 t40) -> (PSTypeConstraint)+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: ([PSType]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PSType])+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: ([PSType]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PSType])+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Located Literal) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t8 t9 t39 t40) -> (Located Literal)+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (PPat) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t8 t9 t39 t40) -> (PPat)+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([PPat]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PPat])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: t39 -> (HappyAbsSyn t8 t9 t39 t40)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t8 t9 t39 t40) -> t39+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: t40 -> (HappyAbsSyn t8 t9 t39 t40)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t8 t9 t39 t40) -> t40+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (PExp) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t8 t9 t39 t40) -> (PExp)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (PExp) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t8 t9 t39 t40) -> (PExp)+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (PExp) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t8 t9 t39 t40) -> (PExp)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (PField) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t8 t9 t39 t40) -> (PField)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ((PExp, PExp)) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t8 t9 t39 t40) -> ((PExp, PExp))+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((PExp, PExp)) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t8 t9 t39 t40) -> ((PExp, PExp))+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: ([PField]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PField])+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: ([PField]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PField])+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([PExp]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PExp])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: ([(PExp, PExp)]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t8 t9 t39 t40) -> ([(PExp, PExp)])+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PStmt])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (PStmt) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t8 t9 t39 t40) -> (PStmt)+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PStmt])+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ([PStmt]) -> (HappyAbsSyn t8 t9 t39 t40)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t8 t9 t39 t40) -> ([PStmt])+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyInTok :: (LToken) -> (HappyAbsSyn t8 t9 t39 t40)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t8 t9 t39 t40) -> (LToken)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\xee\x00\x55\x02\x00\x00\x60\x00\x00\x00\x00\x00\x55\x02\xc0\x01\xb8\x08\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\x55\x02\xbf\x00\x55\x02\x55\x02\x00\x00\x00\x00\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\xba\x01\x00\x00\xbf\x00\x12\x02\x12\x02\xf6\x01\xb6\x01\x00\x00\xf5\x02\x55\x02\x00\x00\x00\x00\x0b\x02\x00\x00\x00\x00\xf9\x01\x0f\x02\x00\x00\x00\x00\xe7\x01\xbf\x02\x0f\x00\x00\x00\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\x04\x02\xe7\xff\xd1\x01\xf8\x07\xbd\x00\x85\x04\x00\x00\xee\x01\xfd\x01\xed\x01\xe5\x01\xe4\x01\xe3\x01\xea\x01\x00\x00\xe8\x01\xec\x01\xb8\x07\xb8\x08\xf8\xff\xeb\x01\x78\x07\xa8\x01\xe9\x01\x38\x07\xf9\xff\xff\x02\xa5\x01\xf2\xff\x93\x05\xb2\x04\xd6\x01\x00\x00\xdb\x01\xb8\x08\x7f\x02\xe1\x06\xde\x01\x00\x00\x89\x01\x83\x01\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x8a\x06\xfb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x55\x02\x00\x00\x72\x01\x3f\x03\x33\x06\x60\x0b\x60\x0b\x23\x0b\xe6\x0a\x60\x0b\xef\x09\x6c\x0a\xa9\x0a\xf3\x05\xc3\x01\x2e\x04\xbc\x01\x00\x00\xb8\x01\xb4\x01\x7e\x01\xcc\xff\xf2\xff\xf2\xff\xf2\xff\x93\x05\x93\x05\x1b\x04\x1b\x04\x1b\x04\x1b\x04\x1b\x04\x1b\x04\xac\x02\x2c\x03\xf5\x08\x78\x08\x2f\x0a\xb2\x09\x72\x09\x3f\x02\x00\x00\x55\x02\x00\x00\x55\x02\x55\x02\x55\x02\x55\x02\x00\x00\x55\x02\x00\x00\x55\x02\x00\x00\x4d\x01\x55\x02\x00\x00\x55\x02\x55\x02\x55\x02\x00\x00\x55\x02\x55\x02\x76\x01\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x62\x01\x55\x02\x55\x02\x55\x02\x55\x02\x55\x02\x00\x00\x55\x02\x55\x02\xbf\x00\xb3\x01\x73\x01\xae\x01\x00\x00\x00\x00\xad\x01\xab\x01\xa2\x01\x55\x02\x81\x00\x01\x00\x00\x00\x55\x02\xac\x01\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x02\x77\x01\x00\x00\x00\x00\x38\x08\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x1f\x00\x7d\x01\x0b\x00\x4c\x00\x67\x00\x4c\x00\x4c\x00\x42\x01\x55\x02\x9d\x01\x9d\x01\x55\x02\x94\x01\x55\x02\x91\x01\x48\x01\x44\x01\x00\x00\x6a\x01\x38\x08\x38\x08\x38\x08\x00\x00\x55\x02\x38\x08\x38\x08\x38\x08\x00\x00\x00\x00\x55\x02\x00\x00\x5c\x01\x29\x01\x38\x08\x38\x08\xb3\x05\xee\x03\x55\x02\x00\x00\x21\x01\x60\x01\x38\x08\x00\x00\x00\x00\x73\x05\x60\x0b\x55\x02\x55\x02\x00\x00\x55\x02\x0a\x01\x55\x02\x55\x02\x55\x02\x0d\x01\x55\x02\x55\x02\x55\x02\x00\x00\x97\x03\x55\x02\x18\x01\x00\x00\x18\x01\x00\x00\x55\x02\xe6\x0a\xa9\x0a\x1c\x05\x55\x02\x32\x09\x32\x09\x00\x00\x00\x00\x00\x00\x2f\x0a\x2f\x0a\x55\x02\x00\x00\x08\x01\x55\x02\x00\x00\x55\x02\x00\x00\x55\x02\x30\x01\xc5\x04\x55\x02\xf7\x00\x00\x00\x02\x01\xf7\xff\x01\x00\x00\x00\x00\x00\x00\x00\x34\x01\x3b\x01\x00\x00\x00\x00\x1b\x00\x47\x00\x12\x00\xfa\x00\x33\x01\x07\x00\x00\x00\xf4\x00\xe2\x00\x02\x00\x00\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x00\x00\x55\x02\x00\x00\x09\x00\x1a\x00\x09\x00\x2d\x01\x1a\x00\x00\x00\x4c\x00\x00\x00\x4c\x00\x00\x00\x1f\x01\x04\x01\x00\x00\x4c\x00\x55\x02\x1c\x01\xf9\x00\x00\x00\x00\x00\x55\x02\xbf\x00\x38\x08\x55\x02\x55\x02\x38\x08\x38\x08\xcd\x00\x00\x00\x38\x08\x32\x09\x55\x02\xce\x00\x00\x00\x00\x00\x32\x09\x00\x00\x38\x08\x32\x09\xc9\x00\x00\x00\xba\x00\x01\x01\xf8\x00\x00\x00\x00\x00\x05\x00\x4c\x00\x00\x00\xf5\x00\x1a\x00\xea\x00\x1a\x00\x4c\x00\x1a\x00\x00\x00\x01\x00\x55\x02\x00\x00\x00\x00\x00\x00\xc4\x00\x1a\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x15\x00\x35\x01\x76\x09\xe9\x00\x57\x0c\x00\x00\x00\x00\x89\x06\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x0e\x6e\x0c\xa5\x03\x0e\x0e\x00\x00\x00\x00\x02\x0e\xfe\x0d\x41\x02\x1a\x05\xb9\x01\xec\x03\xf2\x0d\x3a\x07\xea\x0b\xd5\x0b\xcb\x0b\xb6\x0b\xac\x0b\xe8\x0d\x00\x00\x00\x00\x92\x04\x6e\x01\x67\x01\x74\x0a\x00\x00\x00\x00\xc3\x00\xf7\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x49\x01\xd0\x00\xcf\x00\x1d\x01\xa4\x00\xc7\x00\xc5\x00\xbc\x00\x00\x00\xb7\x09\xa3\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\xa3\x00\xa3\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\xa3\x00\x00\x00\xa3\x00\x00\x00\xa3\x00\xa3\x00\xa3\x00\x00\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\xa3\x00\x95\x00\x00\x00\x00\x00\x7d\x00\xe6\x0d\xdc\x0d\xd0\x0d\xcc\x0d\xc0\x0d\xb6\x0d\xb4\x0d\xaa\x0d\x9e\x0d\x9a\x0d\x8e\x0d\x84\x0d\x82\x0d\x78\x0d\x6c\x0d\x68\x0d\x5c\x0d\x52\x0d\x50\x0d\x46\x0d\x95\x03\x08\x03\x3a\x0d\xe3\x06\x36\x0d\x2a\x0d\x20\x0d\x1e\x0d\x14\x0d\x08\x0d\x04\x0d\xf8\x0c\xee\x0c\xec\x0c\xa3\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x0b\x00\x00\x2a\x05\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\x69\x00\xa3\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\x00\x00\xe2\x0c\x00\x00\xd6\x0c\x3d\x09\xbd\x01\xd2\x0c\x00\x00\x78\x00\x00\x00\x8c\x0b\x00\x00\xc6\x0c\xbc\x0c\x00\x00\xba\x0c\xb0\x0c\x56\x0b\x00\x00\x2a\x07\x3d\x02\x00\x00\xd3\x06\x00\x09\xa4\x0c\xa0\x0c\x94\x0c\x00\x00\x06\x01\x8a\x0c\x88\x0c\x7e\x0c\x7c\x06\x00\x00\x0e\x02\xc1\x08\x40\x0c\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x08\xd3\x00\x72\x0c\x00\x00\x6c\x0b\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x08\x7b\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x16\x01\x56\x01\x0e\x01\x0c\x01\x00\x00\x01\x08\xb0\x01\x8b\x01\xc1\x07\x6d\x00\xfc\x03\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\xa3\x00\x00\x00\x65\x0b\xa3\x00\xa3\x00\xa3\x00\x00\x00\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\xa3\x00\xa3\x00\xdf\x03\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\x28\x0b\x21\x0b\x00\x00\x8b\x04\x00\x00\x85\x07\xeb\x0a\xe7\x0a\x00\x00\xb4\x0a\xb0\x0a\x78\x0a\x00\x00\xa7\x00\x88\x03\x4a\x00\x00\x00\x31\x00\x00\x00\xca\x01\xa3\x00\xa3\x00\xa3\x00\x33\x0a\xa3\x00\xa3\x00\x00\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\xfb\x09\x00\x00\x00\x00\x46\x01\x00\x00\xbb\x09\x00\x00\xc5\x08\x00\x00\xa3\x00\x85\x08\x00\x00\x00\x00\x4f\x00\x00\x00\x29\x0c\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\xfe\x00\xe7\x00\xe5\x00\xe4\x00\xa1\x00\x00\x00\x40\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x7e\x00\x00\x00\x10\x00\x00\x00\x00\x00\x5a\x00\xfc\x05\x45\x00\x00\x00\x00\x00\x00\x00\xc0\x05\x12\x0c\xa3\x00\x05\x08\xc5\x07\xa3\x00\xa3\x00\x00\x00\x00\x00\xa3\x00\xa3\x00\x00\x06\x2b\x00\x00\x00\x00\x00\xa3\x00\x00\x00\xa3\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\xf6\xff\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x80\x05\x79\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xf3\xff\x00\x00\x00\x00\x00\x00\xf1\xff\x9b\xff\x9c\xff\x45\xff\x00\x00\xa1\xff\x9d\xff\xab\xff\xaa\xff\xa9\xff\xc6\xff\xa7\xff\xa8\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x84\xff\xa3\xff\x00\x00\x00\x00\x00\x00\x45\xff\x41\xff\x45\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\xc2\xff\xf7\xff\xc3\xff\xc4\xff\xf8\xff\x00\x00\xef\xff\xee\xff\xea\xff\x00\x00\x00\x00\xc6\xff\xd9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\xff\x36\xff\x00\x00\x38\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\x3d\xff\x4d\xff\x00\x00\x42\xff\x00\x00\x44\xff\x00\x00\x00\x00\x40\xff\x42\xff\x00\x00\x00\x00\x00\x00\x7c\xff\x8a\xff\x8d\xff\x00\x00\xa5\xff\xd6\xff\xa6\xff\x00\x00\x00\x00\x00\x00\x49\xff\x00\x00\x4a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\x00\x00\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\xff\x00\x00\xfc\xff\xf0\xff\xf2\xff\x83\xff\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00\x64\xff\x65\xff\x66\xff\x68\xff\x6f\xff\x6b\xff\x6c\xff\x6e\xff\xa1\xff\x3d\xff\x00\x00\x00\x00\x50\xff\x3d\xff\x51\xff\x00\x00\x7d\xff\x87\xff\x86\xff\x85\xff\x88\xff\x89\xff\x90\xff\x91\xff\x8e\xff\x8f\xff\x92\xff\x93\xff\x8c\xff\x8b\xff\x6d\xff\x71\xff\x53\xff\x55\xff\x57\xff\x99\xff\x48\xff\x00\x00\xc5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xff\x00\x00\x96\xff\x00\x00\x7b\xff\x00\x00\x00\x00\x7a\xff\x00\x00\x00\x00\x00\x00\x74\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xff\x00\x00\x00\x00\xf1\xff\x00\x00\xd8\xff\x00\x00\xe3\xff\xe4\xff\x00\x00\x00\x00\xe8\xff\x00\x00\x00\x00\xec\xff\xf5\xff\x00\x00\x00\x00\xfa\xff\xd2\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\x00\x00\xd4\xff\xd1\xff\xc1\xff\x98\xff\xed\xff\xeb\xff\xf4\xff\xba\xff\xdc\xff\xc0\xff\x00\x00\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\x00\x00\x3b\xff\x3a\xff\x59\xff\x37\xff\x00\x00\x5f\xff\x5d\xff\x5e\xff\x4e\xff\x3c\xff\x00\x00\x4b\xff\x00\x00\x00\x00\x43\xff\x3e\xff\x00\x00\x00\x00\x00\x00\x78\xff\x00\x00\x47\xff\x94\xff\xa4\xff\xe9\xff\x00\x00\x70\xff\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x82\xff\x00\x00\x80\xff\x00\x00\x62\xff\x63\xff\x00\x00\x00\x00\x67\xff\x6a\xff\x52\xff\x61\xff\x4f\xff\x54\xff\x56\xff\x00\x00\x79\xff\x00\x00\x00\x00\x77\xff\x00\x00\x73\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xda\xff\x00\x00\xf1\xff\xe0\xff\xc8\xff\xe5\xff\xc9\xff\xca\xff\xe6\xff\xe7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xaf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\x00\x00\xcc\xff\xb6\xff\xb0\xff\xb5\xff\xb3\xff\xbf\xff\xb8\xff\x00\x00\xb2\xff\x00\x00\xb7\xff\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xdb\xff\x00\x00\xf1\xff\x58\xff\x00\x00\x00\x00\x5b\xff\x3f\xff\x00\x00\x76\xff\x97\xff\x60\xff\x00\x00\x00\x00\x7f\xff\x7e\xff\x69\xff\x75\xff\x5a\xff\x5c\xff\x00\x00\x9f\xff\x00\x00\xa0\xff\x00\x00\xc7\xff\xcb\xff\xb5\xff\x00\x00\xbc\xff\x00\x00\xac\xff\xae\xff\xb1\xff\x00\x00\xbe\xff\xb4\xff\xf1\xff\x00\x00\xd5\xff\xdd\xff\x9e\xff\x00\x00\xad\xff\xdf\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x0a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x14\x00\x13\x00\x13\x00\x0b\x00\x13\x00\x04\x00\x0b\x00\x0a\x00\x0b\x00\x47\x00\x0b\x00\x00\x00\x15\x00\x16\x00\x03\x00\x0a\x00\x19\x00\x4f\x00\x1b\x00\x0b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0b\x00\x0b\x00\x26\x00\x02\x00\x28\x00\x0b\x00\x1b\x00\x2a\x00\x2c\x00\x47\x00\x2a\x00\x49\x00\x2a\x00\x27\x00\x2a\x00\x13\x00\x34\x00\x27\x00\x45\x00\x29\x00\x47\x00\x3f\x00\x1a\x00\x2a\x00\x3c\x00\x3d\x00\x48\x00\x3e\x00\x4f\x00\x41\x00\x4a\x00\x2a\x00\x2a\x00\x4e\x00\x46\x00\x47\x00\x2a\x00\x49\x00\x04\x00\x4b\x00\x22\x00\x4d\x00\x48\x00\x04\x00\x4c\x00\x51\x00\x22\x00\x53\x00\x10\x00\x55\x00\x56\x00\x57\x00\x14\x00\x58\x00\x0c\x00\x4a\x00\x5c\x00\x5d\x00\x58\x00\x5f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x13\x00\x58\x00\x04\x00\x22\x00\x13\x00\x13\x00\x02\x00\x1a\x00\x13\x00\x58\x00\x58\x00\x1a\x00\x15\x00\x16\x00\x58\x00\x1a\x00\x19\x00\x1c\x00\x1b\x00\x14\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3d\x00\x04\x00\x26\x00\x14\x00\x28\x00\x3d\x00\x0f\x00\x13\x00\x2c\x00\x0a\x00\x47\x00\x48\x00\x49\x00\x13\x00\x4b\x00\x47\x00\x34\x00\x49\x00\x1e\x00\x4b\x00\x1a\x00\x21\x00\x37\x00\x1d\x00\x3c\x00\x3d\x00\x26\x00\x27\x00\x37\x00\x41\x00\x22\x00\x13\x00\x3d\x00\x28\x00\x46\x00\x47\x00\x13\x00\x49\x00\x1a\x00\x4b\x00\x34\x00\x4d\x00\x47\x00\x48\x00\x49\x00\x51\x00\x4b\x00\x53\x00\x13\x00\x55\x00\x56\x00\x57\x00\x14\x00\x15\x00\x16\x00\x1a\x00\x5c\x00\x5d\x00\x3d\x00\x5f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x37\x00\x06\x00\x07\x00\x08\x00\x47\x00\x22\x00\x49\x00\x28\x00\x4b\x00\x10\x00\x11\x00\x28\x00\x14\x00\x0e\x00\x2f\x00\x30\x00\x15\x00\x16\x00\x2f\x00\x30\x00\x19\x00\x14\x00\x1b\x00\x14\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x14\x00\x14\x00\x26\x00\x13\x00\x28\x00\x02\x00\x25\x00\x17\x00\x2c\x00\x03\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x34\x00\x0a\x00\x07\x00\x08\x00\x13\x00\x13\x00\x04\x00\x13\x00\x3c\x00\x3d\x00\x05\x00\x1a\x00\x1a\x00\x41\x00\x1a\x00\x48\x00\x15\x00\x16\x00\x46\x00\x47\x00\x19\x00\x49\x00\x1b\x00\x4b\x00\x0a\x00\x4d\x00\x3f\x00\x20\x00\x21\x00\x51\x00\x13\x00\x53\x00\x4a\x00\x55\x00\x56\x00\x57\x00\x4a\x00\x1a\x00\x13\x00\x2c\x00\x5c\x00\x5d\x00\x24\x00\x5f\x00\x13\x00\x04\x00\x13\x00\x34\x00\x04\x00\x1e\x00\x1f\x00\x1a\x00\x21\x00\x1a\x00\x13\x00\x3c\x00\x3d\x00\x26\x00\x27\x00\x2a\x00\x41\x00\x1a\x00\x14\x00\x15\x00\x16\x00\x46\x00\x47\x00\x01\x00\x49\x00\x0b\x00\x4b\x00\x58\x00\x4d\x00\x48\x00\x0a\x00\x38\x00\x51\x00\x49\x00\x53\x00\x48\x00\x55\x00\x56\x00\x57\x00\x0b\x00\x13\x00\x13\x00\x47\x00\x5c\x00\x5d\x00\x1c\x00\x5f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x4a\x00\x1e\x00\x07\x00\x08\x00\x21\x00\x3f\x00\x23\x00\x13\x00\x50\x00\x26\x00\x27\x00\x14\x00\x15\x00\x16\x00\x13\x00\x54\x00\x15\x00\x16\x00\x1e\x00\x1f\x00\x19\x00\x21\x00\x1b\x00\x13\x00\x0a\x00\x4a\x00\x26\x00\x27\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x4e\x00\x1c\x00\x07\x00\x08\x00\x14\x00\x15\x00\x16\x00\x38\x00\x39\x00\x3a\x00\x34\x00\x14\x00\x15\x00\x16\x00\x13\x00\x1c\x00\x15\x00\x16\x00\x3c\x00\x3d\x00\x19\x00\x48\x00\x1b\x00\x41\x00\x0c\x00\x0d\x00\x0e\x00\x4a\x00\x46\x00\x47\x00\x04\x00\x49\x00\x4a\x00\x4b\x00\x05\x00\x4d\x00\x10\x00\x11\x00\x12\x00\x51\x00\x14\x00\x53\x00\x04\x00\x55\x00\x56\x00\x57\x00\x63\x00\x34\x00\x2a\x00\x31\x00\x5c\x00\x5d\x00\x2b\x00\x5f\x00\x33\x00\x3c\x00\x3d\x00\x04\x00\x3f\x00\x10\x00\x41\x00\x09\x00\x53\x00\x09\x00\x09\x00\x46\x00\x47\x00\x47\x00\x49\x00\x09\x00\x4b\x00\x0a\x00\x4d\x00\x10\x00\x11\x00\x12\x00\x51\x00\x14\x00\x53\x00\x48\x00\x55\x00\x56\x00\x57\x00\x54\x00\x13\x00\x13\x00\x11\x00\x5c\x00\x5d\x00\x13\x00\x5f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x13\x00\x1e\x00\x07\x00\x08\x00\x21\x00\x1e\x00\x1f\x00\x13\x00\x21\x00\x26\x00\x27\x00\x58\x00\x04\x00\x26\x00\x27\x00\x0a\x00\x15\x00\x16\x00\x1e\x00\x1f\x00\x19\x00\x21\x00\x1b\x00\x48\x00\x35\x00\x36\x00\x26\x00\x27\x00\x1c\x00\x0a\x00\x4c\x00\x0a\x00\x0a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x13\x00\x12\x00\x07\x00\x08\x00\x1c\x00\x1c\x00\x1c\x00\x38\x00\x39\x00\x3a\x00\x34\x00\x35\x00\x0a\x00\x04\x00\x1c\x00\x1c\x00\x15\x00\x16\x00\x3c\x00\x3d\x00\x19\x00\x29\x00\x1b\x00\x41\x00\x1a\x00\x05\x00\x0a\x00\x04\x00\x46\x00\x47\x00\x63\x00\x49\x00\x0d\x00\x4b\x00\x63\x00\x4d\x00\x27\x00\xff\xff\x13\x00\x51\x00\x63\x00\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\xff\xff\x34\x00\x35\x00\x1e\x00\x5c\x00\x5d\x00\x21\x00\x5f\x00\x23\x00\x3c\x00\x3d\x00\x26\x00\x27\x00\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\x46\x00\x47\x00\xff\xff\x49\x00\xff\xff\x4b\x00\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\x0b\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\x13\x00\xff\xff\x5c\x00\x5d\x00\x13\x00\x5f\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x1e\x00\x07\x00\x08\x00\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\x2c\x00\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x1b\x00\xff\xff\x31\x00\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x09\x00\x34\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x14\x00\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\x1b\x00\x46\x00\x47\x00\xff\xff\x49\x00\xff\xff\x4b\x00\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\x5f\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x36\x00\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x4f\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1e\x00\x32\x00\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x48\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x4f\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x1e\x00\x1f\x00\x13\x00\x21\x00\x13\x00\x14\x00\xff\xff\xff\xff\x26\x00\x27\x00\x0b\x00\xff\xff\x1b\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x33\x00\x34\x00\xff\xff\x26\x00\x27\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x13\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x1e\x00\x1f\x00\x13\x00\x21\x00\x13\x00\x14\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1b\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x33\x00\x34\x00\xff\xff\x26\x00\x27\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x4f\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\x10\x00\x11\x00\x05\x00\x06\x00\x14\x00\x08\x00\x09\x00\xff\xff\xff\xff\x13\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\x1e\x00\x26\x00\x27\x00\x21\x00\x29\x00\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x4f\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x13\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x1e\x00\x1f\x00\x13\x00\x21\x00\xff\xff\x14\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1b\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x22\x00\x33\x00\x34\x00\xff\xff\x26\x00\x27\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x04\x00\x05\x00\x06\x00\x14\x00\x08\x00\x09\x00\xff\xff\x18\x00\x13\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\x1e\x00\x26\x00\x27\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x2a\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x4f\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x1e\x00\x1f\x00\x13\x00\x21\x00\x14\x00\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x1b\x00\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x14\x00\x13\x00\xff\xff\x17\x00\x26\x00\x27\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x14\x00\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\x52\x00\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\x13\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x13\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x13\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x10\x00\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x13\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x10\x00\x51\x00\x0d\x00\x53\x00\x14\x00\x55\x00\x56\x00\x57\x00\x13\x00\x59\x00\x5a\x00\x1b\x00\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\x0d\x00\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x13\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\xff\xff\x53\x00\x14\x00\x55\x00\x56\x00\x13\x00\x58\x00\x59\x00\x5a\x00\x1b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x51\x00\x0d\x00\x53\x00\xff\xff\x55\x00\x56\x00\x57\x00\x13\x00\x59\x00\x5a\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x23\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\x13\x00\x58\x00\x59\x00\x5a\x00\x13\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x58\x00\x59\x00\x5a\x00\xff\xff\x1e\x00\x5d\x00\x5e\x00\x21\x00\x1e\x00\x61\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x13\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x58\x00\x1e\x00\x5a\x00\xff\xff\x21\x00\x5d\x00\x5e\x00\xff\xff\x1e\x00\x26\x00\x27\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x13\x00\x47\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x13\x00\xff\xff\xff\xff\x58\x00\x26\x00\x27\x00\xff\xff\x13\x00\x5d\x00\x5e\x00\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x26\x00\x27\x00\x21\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\x3e\x00\x13\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x13\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\x4f\x00\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x58\x00\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x5e\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\x13\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x26\x00\x27\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\xff\xff\x13\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\x38\x00\x39\x00\x3a\x00\x26\x00\x27\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\x38\x00\x39\x00\x3a\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x05\x00\x06\x00\x1e\x00\x08\x00\x09\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x05\x00\x06\x00\x1e\x00\x08\x00\x09\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x05\x00\x06\x00\x1e\x00\x08\x00\x09\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x1e\x00\x08\x00\x09\x00\x21\x00\x07\x00\x08\x00\x09\x00\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\x13\x00\x1e\x00\x21\x00\xff\xff\x21\x00\xff\xff\xff\xff\x26\x00\x27\x00\x26\x00\x27\x00\x1e\x00\x13\x00\xff\xff\x21\x00\xff\xff\x13\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\x21\x00\x1e\x00\x13\x00\xff\xff\x21\x00\x26\x00\x27\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x13\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\xc4\x00\x0c\x00\x0d\x00\x0e\x00\x3c\x00\xff\x00\x3d\x00\x10\x00\x11\x00\x6f\x01\xd0\x00\xc9\x00\x72\x01\x96\x00\x34\x00\x72\x01\x81\x01\x72\x01\x82\x00\x72\x01\x2c\x00\x12\x00\x13\x00\x04\x00\xc4\xff\x14\x00\x83\x00\x15\x00\x72\x01\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x72\x01\x72\x01\x45\x00\xaf\x01\x46\x00\x72\x01\xa7\x01\x73\x01\x47\x00\xe2\x00\x73\x01\xe3\x00\x73\x01\x6a\x00\x73\x01\xff\x00\x16\x00\x6a\x00\x81\x00\xc4\xff\x82\x00\x97\x00\xb5\x01\x73\x01\x17\x00\x18\x00\x8a\x01\x7e\x01\x83\x00\x19\x00\xca\x00\x73\x01\x86\x01\xd1\x00\x1a\x00\x1b\x00\x73\x01\x1c\x00\x0f\x00\x1d\x00\x99\x01\x1e\x00\x82\x01\x0f\x00\xaf\x01\x1f\x00\x98\x01\x20\x00\xa3\x01\x21\x00\x22\x00\x23\x00\x62\x01\x74\x01\x8a\x01\x85\x01\x24\x00\x25\x00\x74\x01\x26\x00\x0c\x00\x0d\x00\x0e\x00\x3c\x00\x94\x00\x3d\x00\x10\x00\x11\x00\xff\x00\x74\x01\x04\x01\x3f\x01\xff\x00\x5b\x01\x5d\x01\xad\x01\xff\x00\x74\x01\x74\x01\xa5\x01\x12\x00\x13\x00\x74\x01\x6a\x01\x14\x00\x6c\x01\x15\x00\x6f\x01\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x05\x01\x04\x01\x45\x00\xfa\x00\x46\x00\x05\x01\x75\x01\x05\x00\x47\x00\x0d\x01\x67\x01\x6e\x01\x07\x01\xff\x00\x08\x01\x67\x01\x16\x00\x07\x01\x06\x00\x08\x01\xa9\x01\x07\x00\x33\x01\xaa\x01\x17\x00\x18\x00\x56\x00\x0a\x00\x37\x01\x19\x00\x94\x00\xff\x00\x05\x01\xbe\x00\x1a\x00\x1b\x00\xc0\x00\x1c\x00\xab\x01\x1d\x00\x29\x01\x1e\x00\x67\x01\x6e\x01\x07\x01\x1f\x00\x08\x01\x20\x00\xff\x00\x21\x00\x22\x00\x23\x00\x30\x00\xe6\x00\x32\x00\x78\x01\x24\x00\x25\x00\x05\x01\x26\x00\x0c\x00\x0d\x00\x0e\x00\x3c\x00\xd3\x00\x3d\x00\x10\x00\x11\x00\x06\x01\x41\x01\x07\x01\x6a\x00\x08\x01\xdd\x00\xde\x00\x6a\x00\xe3\x00\xf2\x00\x6b\x00\x6c\x00\x12\x00\x13\x00\x6b\x00\x6c\x00\x14\x00\xe4\x00\x15\x00\xe5\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\xe8\x00\xe9\x00\x45\x00\xff\x00\x46\x00\xed\x00\xb7\x01\x00\x01\x47\x00\x04\x00\x01\x01\x02\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x16\x00\xad\x01\x10\x00\x11\x00\xff\x00\xff\x00\x34\x00\xff\x00\x17\x00\x18\x00\xef\x00\x79\x01\x7a\x01\x19\x00\x7b\x01\xb2\x01\x12\x00\x13\x00\x1a\x00\x1b\x00\x29\x00\x1c\x00\x15\x00\x1d\x00\xb1\x01\x1e\x00\x97\x00\x2a\x00\x2b\x00\x1f\x00\xff\x00\x20\x00\xb3\x01\x21\x00\x22\x00\x23\x00\x9c\x01\x7c\x01\x05\x00\x2c\x00\x24\x00\x25\x00\xa3\x01\x26\x00\xff\x00\x34\x00\xff\x00\x16\x00\xa9\x01\x06\x00\x48\x00\x65\x01\x07\x00\x67\x01\xff\x00\x17\x00\x18\x00\x49\x00\x0a\x00\xa7\x01\x19\x00\x6e\x01\x30\x00\xe7\x00\x32\x00\x1a\x00\x1b\x00\x26\x00\x1c\x00\x72\x01\x1d\x00\x7f\x01\x1e\x00\x80\x01\x83\x01\x17\x01\x1f\x00\x8d\x01\x20\x00\x84\x01\x21\x00\x22\x00\x23\x00\x87\x01\x88\x01\x05\x00\x8c\x01\x24\x00\x25\x00\x90\x01\x26\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x94\x01\x06\x00\x10\x00\x11\x00\x07\x00\x97\x00\x27\x00\x05\x00\x4b\x01\x09\x00\x0a\x00\x30\x00\xea\x00\x32\x00\x27\x01\x47\x01\x12\x00\x13\x00\x06\x00\x48\x00\x14\x00\x07\x00\x15\x00\xff\x00\xcf\x00\x50\x01\x49\x00\x0a\x00\x68\x01\x69\x01\x6a\x01\x6b\x01\x6c\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x55\x01\x56\x01\x10\x00\x11\x00\x30\x00\x31\x00\x32\x00\x4a\x00\x92\x01\x4c\x00\x16\x00\x30\x00\x34\x00\x32\x00\x3e\x01\x59\x01\x12\x00\x13\x00\x17\x00\x18\x00\x14\x00\x5a\x01\x15\x00\x19\x00\x6f\x00\x70\x00\x71\x00\x5b\x01\x1a\x00\x1b\x00\x0f\x00\x1c\x00\x28\x01\x1d\x00\xef\x00\x1e\x00\x5f\x01\x60\x01\x61\x01\x1f\x00\x62\x01\x20\x00\x34\x00\x21\x00\x22\x00\x23\x00\xfb\xff\x16\x00\x71\x01\x77\x01\x24\x00\x25\x00\x75\x01\x26\x00\xfa\x00\x17\x00\x18\x00\x34\x00\x97\x00\x0a\x01\x19\x00\x0b\x01\x19\x01\x0c\x01\x0d\x01\x1a\x00\x1b\x00\x0f\x01\x1c\x00\x10\x01\x1d\x00\x33\x01\x1e\x00\x5f\x01\x63\x01\x61\x01\x1f\x00\x62\x01\x20\x00\x32\x01\x21\x00\x22\x00\x23\x00\x1f\x01\xd5\x00\x05\x00\x35\x01\x24\x00\x25\x00\x05\x00\x26\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xd5\x00\x06\x00\x10\x00\x11\x00\x07\x00\x06\x00\x2b\x01\x05\x00\x07\x00\x59\x00\x0a\x00\xc0\x00\x0f\x00\x66\x00\x0a\x00\xc4\x00\x12\x00\x13\x00\x06\x00\x48\x00\x14\x00\x07\x00\x15\x00\xc6\x00\x5a\x00\x5b\x00\x49\x00\x0a\x00\xc5\x00\xcc\x00\xcd\x00\xcf\x00\xd3\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xd5\x00\xd6\x00\x10\x00\x11\x00\xd7\x00\xd8\x00\xd9\x00\x4a\x00\x97\x01\x4c\x00\x16\x00\xe1\x00\xdb\x00\x34\x00\xda\x00\xdc\x00\x12\x00\x13\x00\x17\x00\x18\x00\x14\x00\xed\x00\x15\x00\x19\x00\xf0\x00\xef\x00\xf1\x00\x34\x00\x1a\x00\x1b\x00\xff\xff\x1c\x00\x12\x01\x1d\x00\xff\xff\x1e\x00\x6a\x00\x00\x00\x05\x00\x1f\x00\xff\xff\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x00\x00\x16\x00\x30\x00\x06\x00\x24\x00\x25\x00\x07\x00\x26\x00\x2e\x00\x17\x00\x18\x00\x09\x00\x0a\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x6e\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x05\x00\x00\x00\x24\x00\x25\x00\x05\x00\x26\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x06\x00\x10\x00\x11\x00\x07\x00\x06\x00\x51\x00\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x5e\x00\x0a\x00\x1f\x01\x12\x00\x13\x00\x00\x00\x00\x00\x14\x00\x00\x00\x15\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\xc3\x00\x16\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x00\x00\x17\x00\x18\x00\x72\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x73\x00\x1a\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\xec\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x74\x00\x00\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x83\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\xc7\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\x06\x00\xf8\x00\x00\x00\x07\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\xa6\x00\xa7\x00\xa8\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\xc8\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x83\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x3b\x01\x6e\x00\x6f\x00\x70\x00\x71\x00\x06\x00\x48\x00\x05\x00\x07\x00\x43\x01\x72\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x63\x00\x00\x00\x73\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x56\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x40\x01\x4c\x00\x06\x00\x64\x00\x65\x00\x07\x00\x00\x00\xa9\x00\x58\x00\x00\x00\x66\x00\x0a\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x97\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x05\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x06\x00\x48\x00\x05\x00\x07\x00\x52\x01\x72\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x00\x00\x00\x00\x73\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x56\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x50\x01\x4c\x00\x06\x00\x64\x00\x5c\x01\x07\x00\x00\x00\x57\x00\x58\x00\x00\x00\x66\x00\x0a\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x53\x01\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\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\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x83\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x36\x01\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x37\x01\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\xa6\xff\xa6\xff\x35\x00\x36\x00\x72\x00\x37\x00\x38\x00\x00\x00\x00\x00\x05\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\xa5\x00\x00\x00\x06\x00\x09\x00\x0a\x00\x07\x00\x4b\x01\x00\x00\x00\x00\x00\x00\x3a\x00\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x83\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x8f\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x05\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x06\x00\x48\x00\x05\x00\x07\x00\x00\x00\x72\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x00\x00\x00\x00\x73\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x5c\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x56\x01\x4c\x00\x06\x00\x00\x00\x00\x00\x07\x00\x3b\x01\x5d\x00\x58\x00\x00\x00\x3c\x01\x0a\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x97\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\xb4\x01\x92\x00\x36\x00\x72\x00\x37\x00\x38\x00\x00\x00\x4f\x01\x05\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\xb3\x01\x00\x00\x06\x00\x09\x00\x0a\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x54\x01\x06\x00\x00\x00\x00\x00\x07\x00\x83\x00\x9f\x01\xa0\x01\xa1\x01\x09\x00\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\xa4\x01\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x9a\x01\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x39\x01\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x77\x01\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x3a\x01\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x98\x00\x06\x00\x48\x00\x05\x00\x07\x00\x72\x00\x00\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x00\x00\x73\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x13\x01\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x58\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x06\x00\x48\x00\x00\x00\x07\x00\x72\x00\x05\x00\x00\x00\xc2\x00\x49\x00\x0a\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x51\x00\x00\x00\x00\x00\xa2\x00\x0a\x00\x4a\x00\x1d\x01\x4c\x00\x00\x00\x52\x00\xa3\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\xcb\x00\x06\x00\x48\x00\x00\x00\x07\x00\x72\x00\x05\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x51\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x4a\x00\x20\x01\x4c\x00\x00\x00\x52\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x49\x01\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x5e\x01\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x9c\x01\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\xd2\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x64\x01\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x9d\x01\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\xdf\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x08\x01\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x8d\x01\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x05\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x11\x01\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x90\x01\x0a\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x05\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x05\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x2c\x01\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x83\x00\x30\x01\x00\x00\x00\x00\x00\x00\x72\x00\x86\x00\x87\x00\x05\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x83\x00\x31\x01\x84\x00\xdf\x00\x85\x00\x72\x00\x86\x00\x87\x00\x88\x00\x05\x00\x8a\x00\x8b\x00\x73\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x2e\x00\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x91\x01\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\xf1\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x05\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x2e\x00\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x94\x01\x0a\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x00\x00\x85\x00\x72\x00\x86\x00\x87\x00\x05\x00\x89\x00\x8a\x00\x8b\x00\x73\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x01\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x84\x00\x2d\x00\x85\x00\x00\x00\x86\x00\x87\x00\x88\x00\x05\x00\x8a\x00\x8b\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x2e\x00\x00\x00\x07\x00\x09\x00\x0a\x00\x00\x00\x00\x00\x43\x01\x0a\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x05\x00\x89\x00\x8a\x00\x8b\x00\x05\x00\x00\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x00\x00\x00\x00\x07\x00\x44\x01\x0a\x00\x00\x00\x00\x00\x45\x01\x0a\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x06\x00\x8c\x00\x8d\x00\x07\x00\x06\x00\x8f\x00\x00\x00\x07\x00\x47\x01\x0a\x00\x00\x00\x00\x00\x48\x01\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x05\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x89\x00\x06\x00\x8b\x00\x00\x00\x07\x00\x8c\x00\x8d\x00\x00\x00\x06\x00\x4c\x01\x0a\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x01\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x00\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x05\x00\x82\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x06\x00\x48\x00\x00\x00\x07\x00\x05\x00\x00\x00\x00\x00\x89\x00\x49\x00\x0a\x00\x00\x00\x05\x00\x8c\x00\x8d\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x06\x00\x57\x01\x0a\x00\x07\x00\x4a\x00\x21\x01\x4c\x00\x00\x00\xfb\x00\x0a\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x05\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x82\x00\x00\x00\x05\x00\x06\x00\x48\x00\x00\x00\x07\x00\x00\x00\x83\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x06\x00\x48\x00\x00\x00\x07\x00\x89\x00\x00\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x8d\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x28\x01\x4c\x00\x00\x00\x00\x00\x05\x00\x06\x00\x48\x00\x00\x00\x07\x00\x4a\x00\x3e\x01\x4c\x00\x00\x00\x49\x00\x0a\x00\x06\x00\x48\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x05\x00\x06\x00\x48\x00\x00\x00\x07\x00\x00\x00\x4a\x00\x4d\x00\x4c\x00\x49\x00\x0a\x00\x06\x00\x48\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x0a\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x4e\x00\x4c\x00\x00\x00\x00\x00\x06\x00\x48\x00\x00\x00\x07\x00\x00\x00\x4a\x00\x4f\x00\x4c\x00\x49\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x92\x00\x36\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x50\x00\x4c\x00\x05\x00\x30\x00\x39\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x92\x00\x36\x00\x06\x00\x37\x00\x38\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x01\x92\x00\x36\x00\x06\x00\x37\x00\x38\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x92\x00\x36\x00\x06\x00\x37\x00\x38\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x36\x00\x06\x00\x37\x00\x38\x00\x07\x00\xfc\x00\xfd\x00\x38\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x00\x00\x05\x00\x30\x00\x39\x00\x32\x00\x05\x00\x30\x00\x39\x00\x32\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\x67\x00\x0a\x00\x00\x00\x00\x00\x67\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x01\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x15\x01\x0a\x00\x16\x01\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x19\x01\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\x1a\x01\x0a\x00\x00\x00\x00\x00\x1b\x01\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x23\x01\x0a\x00\x24\x01\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x25\x01\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\x2a\x01\x0a\x00\x00\x00\x00\x00\x2d\x01\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x98\x00\x0a\x00\x99\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x9a\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\x9b\x00\x0a\x00\x00\x00\x00\x00\x9c\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x9e\x00\x0a\x00\x9f\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\xa0\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\xa1\x00\x0a\x00\x00\x00\x00\x00\xa4\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\xab\x00\x0a\x00\xac\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\xad\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\xae\x00\x0a\x00\x00\x00\x00\x00\xaf\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\xb1\x00\x0a\x00\xb2\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\xb3\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\xb4\x00\x0a\x00\x00\x00\x00\x00\xb5\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\xb7\x00\x0a\x00\xb8\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\xb9\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\xba\x00\x0a\x00\x00\x00\x00\x00\xbb\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x0a\x00\x06\x00\x05\x00\x06\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\xbd\x00\x0a\x00\x47\x00\x0a\x00\x06\x00\x05\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x55\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x07\x00\x06\x00\x05\x00\x00\x00\x07\x00\x60\x00\x0a\x00\x00\x00\x00\x00\x61\x00\x0a\x00\x00\x00\x05\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x0a\x00\x06\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (3, 201) [+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85),+ (86 , happyReduce_86),+ (87 , happyReduce_87),+ (88 , happyReduce_88),+ (89 , happyReduce_89),+ (90 , happyReduce_90),+ (91 , happyReduce_91),+ (92 , happyReduce_92),+ (93 , happyReduce_93),+ (94 , happyReduce_94),+ (95 , happyReduce_95),+ (96 , happyReduce_96),+ (97 , happyReduce_97),+ (98 , happyReduce_98),+ (99 , happyReduce_99),+ (100 , happyReduce_100),+ (101 , happyReduce_101),+ (102 , happyReduce_102),+ (103 , happyReduce_103),+ (104 , happyReduce_104),+ (105 , happyReduce_105),+ (106 , happyReduce_106),+ (107 , happyReduce_107),+ (108 , happyReduce_108),+ (109 , happyReduce_109),+ (110 , happyReduce_110),+ (111 , happyReduce_111),+ (112 , happyReduce_112),+ (113 , happyReduce_113),+ (114 , happyReduce_114),+ (115 , happyReduce_115),+ (116 , happyReduce_116),+ (117 , happyReduce_117),+ (118 , happyReduce_118),+ (119 , happyReduce_119),+ (120 , happyReduce_120),+ (121 , happyReduce_121),+ (122 , happyReduce_122),+ (123 , happyReduce_123),+ (124 , happyReduce_124),+ (125 , happyReduce_125),+ (126 , happyReduce_126),+ (127 , happyReduce_127),+ (128 , happyReduce_128),+ (129 , happyReduce_129),+ (130 , happyReduce_130),+ (131 , happyReduce_131),+ (132 , happyReduce_132),+ (133 , happyReduce_133),+ (134 , happyReduce_134),+ (135 , happyReduce_135),+ (136 , happyReduce_136),+ (137 , happyReduce_137),+ (138 , happyReduce_138),+ (139 , happyReduce_139),+ (140 , happyReduce_140),+ (141 , happyReduce_141),+ (142 , happyReduce_142),+ (143 , happyReduce_143),+ (144 , happyReduce_144),+ (145 , happyReduce_145),+ (146 , happyReduce_146),+ (147 , happyReduce_147),+ (148 , happyReduce_148),+ (149 , happyReduce_149),+ (150 , happyReduce_150),+ (151 , happyReduce_151),+ (152 , happyReduce_152),+ (153 , happyReduce_153),+ (154 , happyReduce_154),+ (155 , happyReduce_155),+ (156 , happyReduce_156),+ (157 , happyReduce_157),+ (158 , happyReduce_158),+ (159 , happyReduce_159),+ (160 , happyReduce_160),+ (161 , happyReduce_161),+ (162 , happyReduce_162),+ (163 , happyReduce_163),+ (164 , happyReduce_164),+ (165 , happyReduce_165),+ (166 , happyReduce_166),+ (167 , happyReduce_167),+ (168 , happyReduce_168),+ (169 , happyReduce_169),+ (170 , happyReduce_170),+ (171 , happyReduce_171),+ (172 , happyReduce_172),+ (173 , happyReduce_173),+ (174 , happyReduce_174),+ (175 , happyReduce_175),+ (176 , happyReduce_176),+ (177 , happyReduce_177),+ (178 , happyReduce_178),+ (179 , happyReduce_179),+ (180 , happyReduce_180),+ (181 , happyReduce_181),+ (182 , happyReduce_182),+ (183 , happyReduce_183),+ (184 , happyReduce_184),+ (185 , happyReduce_185),+ (186 , happyReduce_186),+ (187 , happyReduce_187),+ (188 , happyReduce_188),+ (189 , happyReduce_189),+ (190 , happyReduce_190),+ (191 , happyReduce_191),+ (192 , happyReduce_192),+ (193 , happyReduce_193),+ (194 , happyReduce_194),+ (195 , happyReduce_195),+ (196 , happyReduce_196),+ (197 , happyReduce_197),+ (198 , happyReduce_198),+ (199 , happyReduce_199),+ (200 , happyReduce_200),+ (201 , happyReduce_201)+ ]++happy_n_terms = 100 :: Int+happy_n_nonterms = 59 :: Int++happyReduce_3 = happySpecReduce_2 0# happyReduction_3+happyReduction_3 happy_x_2+ happy_x_1+ = case happyOut10 happy_x_2 of { happy_var_2 -> + happyIn6+ (mkLoc Unknown (CSPMFile happy_var_2)+ )}++happyReduce_4 = happyMonadReduce 4# 1# happyReduction_4+happyReduction_4 (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 { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_4 of { happy_var_4 -> + ( do+ d <- convDecl happy_var_2 happy_var_4 + d <- annotateWithSymbolTable d+ return $ annotate2 happy_var_1 happy_var_4 (Bind [d]))}}}+ ) (\r -> happyReturn (happyIn7 r))++happyReduce_5 = happySpecReduce_3 1# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn7+ (annotate2 happy_var_1 happy_var_3 (RunAssertion (annotate2 happy_var_1 happy_var_3 (ASNot happy_var_3)))+ )}}++happyReduce_6 = happySpecReduce_2 1# happyReduction_6+happyReduction_6 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn7+ (annotate2 happy_var_1 happy_var_2 (RunAssertion happy_var_2)+ )}}++happyReduce_7 = happyMonadReduce 2# 1# happyReduction_7+happyReduction_7 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + ( do+ d <- annotateWithSymbolTable $+ annotate2List happy_var_1 happy_var_2 (External (map unLoc happy_var_2))+ return $ annotate2List happy_var_1 happy_var_2 (Bind [d]))}}+ ) (\r -> happyReturn (happyIn7 r))++happyReduce_8 = happyMonadReduce 2# 1# happyReduction_8+happyReduction_8 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + ( do+ d <- annotateWithSymbolTable $+ annotate2List happy_var_1 happy_var_2 (Transparent (map unLoc happy_var_2))+ return $ annotate2List happy_var_1 happy_var_2 (Bind [d]))}}+ ) (\r -> happyReturn (happyIn7 r))++happyReduce_9 = happySpecReduce_1 1# happyReduction_9+happyReduction_9 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn7+ (annotate happy_var_1 (Evaluate happy_var_1)+ )}++happyReduce_10 = happySpecReduce_1 2# happyReduction_10+happyReduction_10 happy_x_1+ = happyIn8+ (+ )++happyReduce_11 = happySpecReduce_2 2# happyReduction_11+happyReduction_11 happy_x_2+ happy_x_1+ = happyIn8+ (+ )++happyReduce_12 = happySpecReduce_0 3# happyReduction_12+happyReduction_12 = happyIn9+ (+ )++happyReduce_13 = happySpecReduce_2 3# happyReduction_13+happyReduction_13 happy_x_2+ happy_x_1+ = happyIn9+ (+ )++happyReduce_14 = happySpecReduce_0 4# happyReduction_14+happyReduction_14 = happyIn10+ ([]+ )++happyReduce_15 = happySpecReduce_1 4# happyReduction_15+happyReduction_15 happy_x_1+ = case happyOut11 happy_x_1 of { happy_var_1 -> + happyIn10+ (happy_var_1+ )}++happyReduce_16 = happySpecReduce_1 5# happyReduction_16+happyReduction_16 happy_x_1+ = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn11+ (attachTypeAnnotations $+ combineDecls (reverse happy_var_1)+ )}++happyReduce_17 = happySpecReduce_1 6# happyReduction_17+happyReduction_17 happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + happyIn12+ ([happy_var_1]+ )}++happyReduce_18 = happySpecReduce_3 6# happyReduction_18+happyReduction_18 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut12 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn12+ (case happy_var_3 of + Just d -> d:happy_var_1+ Nothing -> happy_var_1+ )}}++happyReduce_19 = happySpecReduce_0 7# happyReduction_19+happyReduction_19 = happyIn13+ (Nothing+ )++happyReduce_20 = happySpecReduce_1 7# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + happyIn13+ (Just happy_var_1+ )}++happyReduce_21 = happyMonadReduce 1# 8# happyReduction_21+happyReduction_21 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut15 happy_x_1 of { happy_var_1 -> + ( annotateWithSymbolTable happy_var_1)}+ ) (\r -> happyReturn (happyIn14 r))++happyReduce_22 = happyMonadReduce 3# 9# happyReduction_22+happyReduction_22 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + ( convDecl happy_var_1 happy_var_3)}}+ ) (\r -> happyReturn (happyIn15 r))++happyReduce_23 = happySpecReduce_2 9# happyReduction_23+happyReduction_23 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + happyIn15+ (annotate2List happy_var_1 happy_var_2 (Channel (map unLoc happy_var_2) Nothing)+ )}}++happyReduce_24 = happyReduce 4# 9# happyReduction_24+happyReduction_24 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2 happy_var_1 happy_var_4 (Channel (map unLoc happy_var_2) (Just happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_25 = happyReduce 4# 9# happyReduction_25+happyReduction_25 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut23 happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2List happy_var_1 happy_var_4 (DataType (unLoc happy_var_2) happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_26 = happyReduce 4# 9# happyReduction_26+happyReduction_26 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut23 happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2List happy_var_1 happy_var_4 (SubType (unLoc happy_var_2) happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_27 = happySpecReduce_2 9# happyReduction_27+happyReduction_27 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + happyIn15+ (annotate2List happy_var_1 happy_var_2 (External (map unLoc happy_var_2))+ )}}++happyReduce_28 = happySpecReduce_2 9# happyReduction_28+happyReduction_28 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + happyIn15+ (annotate2List happy_var_1 happy_var_2 (Transparent (map unLoc happy_var_2))+ )}}++happyReduce_29 = happySpecReduce_3 9# happyReduction_29+happyReduction_29 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn15+ (annotate2 happy_var_1 happy_var_3 (Assert (annotate2 happy_var_1 happy_var_3 (ASNot happy_var_3)))+ )}}++happyReduce_30 = happySpecReduce_2 9# happyReduction_30+happyReduction_30 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn15+ (annotate2 happy_var_1 happy_var_2 (Assert happy_var_2)+ )}}++happyReduce_31 = happyReduce 4# 9# happyReduction_31+happyReduction_31 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2 happy_var_1 happy_var_4 (NameType (unLoc happy_var_2) happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_32 = happyReduce 9# 9# happyReduction_32+happyReduction_32 (happy_x_9 `HappyStk`+ happy_x_8 `HappyStk`+ happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut16 happy_x_3 of { happy_var_3 -> + case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOut10 happy_x_8 of { happy_var_8 -> + case happyOutTok happy_x_9 of { happy_var_9 -> + happyIn15+ (annotate2 happy_var_1 happy_var_9 (Module (unLoc happy_var_2) happy_var_3 + (map checkModuleDecl happy_var_5)+ (map checkModuleDecl happy_var_8))+ ) `HappyStk` happyRest}}}}}}++happyReduce_33 = happyReduce 4# 9# happyReduction_33+happyReduction_33 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut10 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2 happy_var_1 happy_var_4 (TimedSection Nothing+ Nothing+ (map checkTimedDecl happy_var_3))+ ) `HappyStk` happyRest}}}++happyReduce_34 = happyReduce 7# 9# happyReduction_34+happyReduction_34 (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 { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + case happyOut10 happy_x_6 of { happy_var_6 -> + case happyOutTok happy_x_7 of { happy_var_7 -> + happyIn15+ (annotate2 happy_var_1 happy_var_7 (TimedSection Nothing+ (Just happy_var_3)+ (map checkTimedDecl happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_35 = happySpecReduce_3 9# happyReduction_35+happyReduction_35 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + case happyOut29 happy_x_3 of { happy_var_3 -> + happyIn15+ (annotate2List' happy_var_1 happy_var_3 (ParsedTypeAnnotation+ (map unLoc happy_var_1) happy_var_3)+ )}}++happyReduce_36 = happyReduce 5# 9# happyReduction_36+happyReduction_36 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut25 happy_x_4 of { happy_var_4 -> + case happyOut18 happy_x_5 of { happy_var_5 -> + happyIn15+ (annotate2List happy_var_1 happy_var_5 (ModuleInstance (unLoc happy_var_2)+ (unLoc happy_var_4) happy_var_5 [] Nothing)+ ) `HappyStk` happyRest}}}}++happyReduce_37 = happyReduce 4# 9# happyReduction_37+happyReduction_37 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut25 happy_x_4 of { happy_var_4 -> + happyIn15+ (annotate2 happy_var_1 happy_var_4 (ModuleInstance (unLoc happy_var_2)+ (unLoc happy_var_4) [] [] Nothing)+ ) `HappyStk` happyRest}}}++happyReduce_38 = happySpecReduce_1 9# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn15+ (liftLoc happy_var_1 (PrintStatement+ (getPrintString happy_var_1))+ )}++happyReduce_39 = happySpecReduce_0 10# happyReduction_39+happyReduction_39 = happyIn16+ ([]+ )++happyReduce_40 = happySpecReduce_3 10# happyReduction_40+happyReduction_40 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut38 happy_x_2 of { happy_var_2 -> + happyIn16+ (reverse happy_var_2+ )}++happyReduce_41 = happySpecReduce_1 11# happyReduction_41+happyReduction_41 happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn17+ (reverse happy_var_1+ )}++happyReduce_42 = happySpecReduce_3 12# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut42 happy_x_2 of { happy_var_2 -> + happyIn18+ (reverse happy_var_2+ )}++happyReduce_43 = happySpecReduce_3 13# happyReduction_43+happyReduction_43 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn19+ (annotate2 happy_var_1 happy_var_3 (Refinement happy_var_1 (getRefinesModel happy_var_2) happy_var_3 [])+ )}}}++happyReduce_44 = happyReduce 4# 13# happyReduction_44+happyReduction_44 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + case happyOut21 happy_x_4 of { happy_var_4 -> + happyIn19+ (annotate2 happy_var_1 happy_var_4 (Refinement happy_var_1 (getRefinesModel happy_var_2) happy_var_3 [unLoc happy_var_4])+ ) `HappyStk` happyRest}}}}++happyReduce_45 = happySpecReduce_2 13# happyReduction_45+happyReduction_45 happy_x_2+ happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + happyIn19+ (annotate2 happy_var_1 happy_var_2 (PropertyCheck happy_var_1 (unLoc happy_var_2) Nothing)+ )}}++happyReduce_46 = happySpecReduce_3 13# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn19+ (annotate2 happy_var_1 happy_var_3 (PropertyCheck happy_var_1 (unLoc happy_var_2) (Just (getPropModel happy_var_3)))+ )}}}++happyReduce_47 = happySpecReduce_1 14# happyReduction_47+happyReduction_47 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn20+ (liftLoc happy_var_1 DeadlockFreedom+ )}++happyReduce_48 = happySpecReduce_1 14# happyReduction_48+happyReduction_48 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn20+ (liftLoc happy_var_1 LivelockFreedom+ )}++happyReduce_49 = happySpecReduce_1 14# happyReduction_49+happyReduction_49 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn20+ (liftLoc happy_var_1 LivelockFreedom+ )}++happyReduce_50 = happySpecReduce_1 14# happyReduction_50+happyReduction_50 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn20+ (liftLoc happy_var_1 Deterministic+ )}++happyReduce_51 = happySpecReduce_2 15# happyReduction_51+happyReduction_51 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_2 of { happy_var_2 -> + happyIn21+ (annotate2 happy_var_1 happy_var_2 (TauPriority happy_var_2)+ )}}++happyReduce_52 = happySpecReduce_3 16# happyReduction_52+happyReduction_52 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn22+ (annotate2 happy_var_1 happy_var_3 (DataTypeClause (unLoc happy_var_1) (Just happy_var_3))+ )}}++happyReduce_53 = happySpecReduce_1 16# happyReduction_53+happyReduction_53 happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn22+ (annotate happy_var_1 (DataTypeClause (unLoc happy_var_1) Nothing)+ )}++happyReduce_54 = happySpecReduce_1 17# happyReduction_54+happyReduction_54 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn23+ (reverse happy_var_1+ )}++happyReduce_55 = happySpecReduce_1 18# happyReduction_55+happyReduction_55 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn24+ ([happy_var_1]+ )}++happyReduce_56 = happySpecReduce_3 18# happyReduction_56+happyReduction_56 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn24+ (happy_var_3:happy_var_1+ )}}++happyReduce_57 = happySpecReduce_1 19# happyReduction_57+happyReduction_57 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn25+ (liftLoc happy_var_1 (UnQual (OccName (getName happy_var_1)))+ )}++happyReduce_58 = happySpecReduce_3 19# happyReduction_58+happyReduction_58 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut25 happy_x_3 of { happy_var_3 -> + happyIn25+ (annotate happy_var_1 (Qual (OccName (getName happy_var_1)) (unLoc happy_var_3))+ )}}++happyReduce_59 = happySpecReduce_1 20# happyReduction_59+happyReduction_59 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn26+ (liftLoc happy_var_1 (UnQual (OccName (getName happy_var_1)))+ )}++happyReduce_60 = happySpecReduce_1 21# happyReduction_60+happyReduction_60 happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn27+ (reverse happy_var_1+ )}++happyReduce_61 = happySpecReduce_1 22# happyReduction_61+happyReduction_61 happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn28+ ([happy_var_1]+ )}++happyReduce_62 = happySpecReduce_3 22# happyReduction_62+happyReduction_62 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_3 of { happy_var_3 -> + happyIn28+ (happy_var_3:happy_var_1+ )}}++happyReduce_63 = happySpecReduce_1 23# happyReduction_63+happyReduction_63 happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn29+ (liftLoc happy_var_1 (STypeScheme [] [] happy_var_1)+ )}++happyReduce_64 = happySpecReduce_3 23# happyReduction_64+happyReduction_64 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut33 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn29+ (liftLoc happy_var_1 (STypeScheme [] [happy_var_1] happy_var_3)+ )}}++happyReduce_65 = happyReduce 5# 23# happyReduction_65+happyReduction_65 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut30 happy_x_2 of { happy_var_2 -> + case happyOut32 happy_x_5 of { happy_var_5 -> + happyIn29+ (liftLoc happy_var_1 (STypeScheme [] happy_var_2 happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_66 = happySpecReduce_1 24# happyReduction_66+happyReduction_66 happy_x_1+ = case happyOut31 happy_x_1 of { happy_var_1 -> + happyIn30+ (reverse happy_var_1+ )}++happyReduce_67 = happySpecReduce_3 25# happyReduction_67+happyReduction_67 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut31 happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn31+ (happy_var_3:happy_var_1+ )}}++happyReduce_68 = happySpecReduce_1 25# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOut33 happy_x_1 of { happy_var_1 -> + happyIn31+ ([happy_var_1]+ )}++happyReduce_69 = happySpecReduce_1 26# happyReduction_69+happyReduction_69 happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn32+ (liftLoc happy_var_1 (STVar (unLoc happy_var_1))+ )}++happyReduce_70 = happySpecReduce_3 26# happyReduction_70+happyReduction_70 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STSet happy_var_2)+ )}}}++happyReduce_71 = happySpecReduce_3 26# happyReduction_71+happyReduction_71 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STSeq happy_var_2)+ )}}}++happyReduce_72 = happySpecReduce_3 26# happyReduction_72+happyReduction_72 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STParen happy_var_2)+ )}}}++happyReduce_73 = happySpecReduce_3 26# happyReduction_73+happyReduction_73 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STExtendable happy_var_3 (unLoc happy_var_1))+ )}}++happyReduce_74 = happySpecReduce_3 26# happyReduction_74+happyReduction_74 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STDotable happy_var_1 happy_var_3)+ )}}++happyReduce_75 = happyReduce 5# 26# happyReduction_75+happyReduction_75 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_2 of { happy_var_2 -> + case happyOut32 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + happyIn32+ (annotate2 happy_var_1 happy_var_5 (STMap happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_76 = happySpecReduce_3 26# happyReduction_76+happyReduction_76 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STDot happy_var_1 happy_var_3)+ )}}++happyReduce_77 = happySpecReduce_3 26# happyReduction_77+happyReduction_77 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STTuple happy_var_2)+ )}}}++happyReduce_78 = happyReduce 4# 26# happyReduction_78+happyReduction_78 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_4 of { happy_var_4 -> + happyIn32+ (annotate2 happy_var_1 happy_var_4 (STFunction [] happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_79 = happySpecReduce_3 26# happyReduction_79+happyReduction_79 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn32+ (annotate2 happy_var_1 happy_var_3 (STFunction+ (getFuncArgs happy_var_1) happy_var_3)+ )}}++happyReduce_80 = happySpecReduce_2 27# happyReduction_80+happyReduction_80 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + happyIn33+ (annotate2 happy_var_1 happy_var_2 (STypeConstraint+ (constraintForName (getLoc happy_var_1)+ (getName happy_var_1))+ (unLoc happy_var_2))+ )}}++happyReduce_81 = happySpecReduce_3 28# happyReduction_81+happyReduction_81 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOut35 happy_x_3 of { happy_var_3 -> + happyIn34+ (happy_var_1:(reverse happy_var_3)+ )}}++happyReduce_82 = happySpecReduce_3 29# happyReduction_82+happyReduction_82 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn35+ (happy_var_3:happy_var_1+ )}}++happyReduce_83 = happySpecReduce_1 29# happyReduction_83+happyReduction_83 happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn35+ ([happy_var_1]+ )}++happyReduce_84 = happySpecReduce_1 30# happyReduction_84+happyReduction_84 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn36+ (liftLoc happy_var_1 (Int (getInt happy_var_1))+ )}++happyReduce_85 = happySpecReduce_1 30# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn36+ (liftLoc happy_var_1 (Char (getChar happy_var_1))+ )}++happyReduce_86 = happySpecReduce_1 30# happyReduction_86+happyReduction_86 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn36+ (liftLoc happy_var_1 (String (getString happy_var_1))+ )}++happyReduce_87 = happySpecReduce_1 30# happyReduction_87+happyReduction_87 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn36+ (liftLoc happy_var_1 (Bool True)+ )}++happyReduce_88 = happySpecReduce_1 30# happyReduction_88+happyReduction_88 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn36+ (liftLoc happy_var_1 (Bool False)+ )}++happyReduce_89 = happySpecReduce_1 31# happyReduction_89+happyReduction_89 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn37+ (convPat happy_var_1+ )}++happyReduce_90 = happySpecReduce_1 32# happyReduction_90+happyReduction_90 happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn38+ ([happy_var_1]+ )}++happyReduce_91 = happySpecReduce_3 32# happyReduction_91+happyReduction_91 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOut37 happy_x_3 of { happy_var_3 -> + happyIn38+ (happy_var_3:happy_var_1+ )}}++happyReduce_92 = happyMonadReduce 1# 33# happyReduction_92+happyReduction_92 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> + ( do+ modifyTopFileParserState (+ \ st @ (FileParserState { sequenceStack = (c:cs) }) -> + st { sequenceStack = (c+1):cs })+ return happy_var_1)}+ ) (\r -> happyReturn (happyIn39 r))++happyReduce_93 = happySpecReduce_1 34# happyReduction_93+happyReduction_93 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn40+ (happy_var_1+ )}++happyReduce_94 = happySpecReduce_1 35# happyReduction_94+happyReduction_94 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn41+ (checkExp happy_var_1+ )}++happyReduce_95 = happySpecReduce_1 36# happyReduction_95+happyReduction_95 happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn42+ (reverse happy_var_1+ )}++happyReduce_96 = happySpecReduce_1 37# happyReduction_96+happyReduction_96 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn43+ ([happy_var_1]+ )}++happyReduce_97 = happySpecReduce_3 37# happyReduction_97+happyReduction_97 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn43+ (happy_var_3:happy_var_1+ )}}++happyReduce_98 = happyMonadReduce 1# 38# happyReduction_98+happyReduction_98 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> + ( do+ t <- freshPType+ let An l _ e = happy_var_1+ return $ An l (Nothing, t) e)}+ ) (\r -> happyReturn (happyIn44 r))++happyReduce_99 = happySpecReduce_1 39# happyReduction_99+happyReduction_99 happy_x_1+ = case happyOut36 happy_x_1 of { happy_var_1 -> + happyIn45+ (liftLoc happy_var_1 (Lit (unLoc happy_var_1))+ )}++happyReduce_100 = happySpecReduce_1 39# happyReduction_100+happyReduction_100 happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn45+ (liftLoc happy_var_1 (Var (unLoc happy_var_1))+ )}++happyReduce_101 = happySpecReduce_3 39# happyReduction_101+happyReduction_101 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut55 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Tuple happy_var_2)+ )}}}++happyReduce_102 = happySpecReduce_3 39# happyReduction_102+happyReduction_102 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (DotApp happy_var_1 happy_var_3)+ )}}++happyReduce_103 = happyReduce 4# 39# happyReduction_103+happyReduction_103 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut11 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (Let (checkLetDecls happy_var_2) happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_104 = happyReduce 6# 39# happyReduction_104+happyReduction_104 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (If happy_var_2 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}++happyReduce_105 = happySpecReduce_3 39# happyReduction_105+happyReduction_105 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Paren happy_var_2)+ )}}}++happyReduce_106 = happyReduce 4# 39# happyReduction_106+happyReduction_106 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (App happy_var_1 happy_var_3)+ ) `HappyStk` happyRest}}}++happyReduce_107 = happyReduce 4# 39# happyReduction_107+happyReduction_107 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut17 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (Lambda happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_108 = happySpecReduce_3 39# happyReduction_108+happyReduction_108 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp Equals happy_var_1 happy_var_3)+ )}}++happyReduce_109 = happySpecReduce_3 39# happyReduction_109+happyReduction_109 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp NotEquals happy_var_1 happy_var_3)+ )}}++happyReduce_110 = happySpecReduce_3 39# happyReduction_110+happyReduction_110 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp LessThan happy_var_1 happy_var_3)+ )}}++happyReduce_111 = happySpecReduce_3 39# happyReduction_111+happyReduction_111 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp GreaterThan happy_var_1 happy_var_3)+ )}}++happyReduce_112 = happySpecReduce_3 39# happyReduction_112+happyReduction_112 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp LessThanEq happy_var_1 happy_var_3)+ )}}++happyReduce_113 = happySpecReduce_3 39# happyReduction_113+happyReduction_113 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp GreaterThanEq happy_var_1 happy_var_3)+ )}}++happyReduce_114 = happySpecReduce_2 39# happyReduction_114+happyReduction_114 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn45+ (annotate2 happy_var_1 happy_var_2 (BooleanUnaryOp Not happy_var_2)+ )}}++happyReduce_115 = happySpecReduce_3 39# happyReduction_115+happyReduction_115 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp Or happy_var_1 happy_var_3)+ )}}++happyReduce_116 = happySpecReduce_3 39# happyReduction_116+happyReduction_116 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (BooleanBinaryOp And happy_var_1 happy_var_3)+ )}}++happyReduce_117 = happySpecReduce_2 39# happyReduction_117+happyReduction_117 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn45+ (annotate2 happy_var_1 happy_var_2 (MathsUnaryOp Negate happy_var_2)+ )}}++happyReduce_118 = happySpecReduce_3 39# happyReduction_118+happyReduction_118 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Plus happy_var_1 happy_var_3)+ )}}++happyReduce_119 = happySpecReduce_3 39# happyReduction_119+happyReduction_119 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Minus happy_var_1 happy_var_3)+ )}}++happyReduce_120 = happySpecReduce_3 39# happyReduction_120+happyReduction_120 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Mod happy_var_1 happy_var_3)+ )}}++happyReduce_121 = happySpecReduce_3 39# happyReduction_121+happyReduction_121 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Divide happy_var_1 happy_var_3)+ )}}++happyReduce_122 = happySpecReduce_3 39# happyReduction_122+happyReduction_122 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (MathsBinaryOp Times happy_var_1 happy_var_3)+ )}}++happyReduce_123 = happySpecReduce_1 39# happyReduction_123+happyReduction_123 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn45+ (annotate happy_var_1 (List [])+ )}++happyReduce_124 = happySpecReduce_3 39# happyReduction_124+happyReduction_124 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut40 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (List happy_var_2)+ )}}}++happyReduce_125 = happyReduce 5# 39# happyReduction_125+happyReduction_125 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + case happyOut40 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (ListComp happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_126 = happyReduce 4# 39# happyReduction_126+happyReduction_126 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut40 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (ListEnumFrom happy_var_2)+ ) `HappyStk` happyRest}}}++happyReduce_127 = happyReduce 5# 39# happyReduction_127+happyReduction_127 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + case happyOut40 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (ListEnumFromTo happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_128 = happyReduce 6# 39# happyReduction_128+happyReduction_128 (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 happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_5 of { happy_var_5 -> + case happyOut40 happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (ListEnumFromComp happy_var_2 happy_var_5)+ ) `HappyStk` happyRest}}}}++happyReduce_129 = happyReduce 7# 39# happyReduction_129+happyReduction_129 (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 happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + case happyOut63 happy_x_6 of { happy_var_6 -> + case happyOut40 happy_x_7 of { happy_var_7 -> + happyIn45+ (annotate2 happy_var_1 happy_var_7 (ListEnumFromToComp happy_var_2 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}}++happyReduce_130 = happySpecReduce_3 39# happyReduction_130+happyReduction_130 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Concat happy_var_1 happy_var_3)+ )}}++happyReduce_131 = happySpecReduce_2 39# happyReduction_131+happyReduction_131 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn45+ (annotate2 happy_var_1 happy_var_2 (ListLength happy_var_2)+ )}}++happyReduce_132 = happySpecReduce_3 39# happyReduction_132+happyReduction_132 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Set happy_var_2)+ )}}}++happyReduce_133 = happySpecReduce_3 39# happyReduction_133+happyReduction_133 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Map happy_var_2)+ )}}}++happyReduce_134 = happyReduce 5# 39# happyReduction_134+happyReduction_134 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (SetComp happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_135 = happyReduce 4# 39# happyReduction_135+happyReduction_135 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (SetEnumFrom happy_var_2)+ ) `HappyStk` happyRest}}}++happyReduce_136 = happyReduce 5# 39# happyReduction_136+happyReduction_136 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (SetEnumFromTo happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_137 = happyReduce 6# 39# happyReduction_137+happyReduction_137 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (SetEnumFromComp happy_var_2 happy_var_5)+ ) `HappyStk` happyRest}}}}++happyReduce_138 = happyReduce 7# 39# happyReduction_138+happyReduction_138 (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 { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + case happyOut63 happy_x_6 of { happy_var_6 -> + case happyOutTok happy_x_7 of { happy_var_7 -> + happyIn45+ (annotate2 happy_var_1 happy_var_7 (SetEnumFromToComp happy_var_2 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}}++happyReduce_139 = happySpecReduce_3 39# happyReduction_139+happyReduction_139 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (SetEnum happy_var_2)+ )}}}++happyReduce_140 = happyReduce 5# 39# 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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (SetEnumComp happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_141 = happySpecReduce_1 39# happyReduction_141+happyReduction_141 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn45+ (liftLoc happy_var_1 (ExpPatWildCard)+ )}++happyReduce_142 = happySpecReduce_3 39# happyReduction_142+happyReduction_142 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (liftLoc happy_var_1 (ExpPatDoublePattern happy_var_1 happy_var_3)+ )}}++happyReduce_143 = happyReduce 4# 39# happyReduction_143+happyReduction_143 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut53 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (Prefix happy_var_1 happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_144 = happySpecReduce_3 39# happyReduction_144+happyReduction_144 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Prefix happy_var_1 [] happy_var_3)+ )}}++happyReduce_145 = happySpecReduce_3 39# happyReduction_145+happyReduction_145 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (ExternalChoice happy_var_1 happy_var_3)+ )}}++happyReduce_146 = happySpecReduce_3 39# happyReduction_146+happyReduction_146 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Hiding happy_var_1 happy_var_3)+ )}}++happyReduce_147 = happySpecReduce_3 39# happyReduction_147+happyReduction_147 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (InternalChoice happy_var_1 happy_var_3)+ )}}++happyReduce_148 = happySpecReduce_3 39# happyReduction_148+happyReduction_148 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Interleave happy_var_1 happy_var_3)+ )}}++happyReduce_149 = happyReduce 5# 39# happyReduction_149+happyReduction_149 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (GenParallel happy_var_1 happy_var_3 happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_150 = happyReduce 7# 39# happyReduction_150+happyReduction_150 (happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_7 of { happy_var_7 -> + happyIn45+ (annotate2 happy_var_1 happy_var_7 (AlphaParallel happy_var_1 happy_var_3 happy_var_5 happy_var_7)+ ) `HappyStk` happyRest}}}}++happyReduce_151 = happySpecReduce_3 39# happyReduction_151+happyReduction_151 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (Interrupt happy_var_1 happy_var_3)+ )}}++happyReduce_152 = happyReduce 5# 39# happyReduction_152+happyReduction_152 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (Exception happy_var_1 happy_var_3 happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_153 = happySpecReduce_3 39# happyReduction_153+happyReduction_153 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (SlidingChoice happy_var_1 happy_var_3)+ )}}++happyReduce_154 = happySpecReduce_3 39# happyReduction_154+happyReduction_154 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (SequentialComp happy_var_1 happy_var_3)+ )}}++happyReduce_155 = happySpecReduce_3 39# happyReduction_155+happyReduction_155 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn45+ (annotate2 happy_var_1 happy_var_3 (GuardedExp happy_var_1 happy_var_3)+ )}}++happyReduce_156 = happyReduce 5# 39# happyReduction_156+happyReduction_156 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (SynchronisingExternalChoice happy_var_1 happy_var_3 happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_157 = happyReduce 5# 39# happyReduction_157+happyReduction_157 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (SynchronisingInterrupt happy_var_1 happy_var_3 happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_158 = happyReduce 5# 39# happyReduction_158+happyReduction_158 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut48 happy_x_3 of { happy_var_3 -> + case happyOut61 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + happyIn45+ (annotate2 happy_var_1 happy_var_5 (Rename happy_var_1 happy_var_3 happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_159 = happyReduce 6# 39# happyReduction_159+happyReduction_159 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + case happyOut61 happy_x_4 of { happy_var_4 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (LinkParallel happy_var_1 happy_var_3 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}++happyReduce_160 = happyReduce 4# 39# happyReduction_160+happyReduction_160 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (ReplicatedInterleave happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_161 = happyReduce 4# 39# happyReduction_161+happyReduction_161 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (ReplicatedExternalChoice happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_162 = happyReduce 4# 39# happyReduction_162+happyReduction_162 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (ReplicatedInternalChoice happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_163 = happyReduce 7# 39# happyReduction_163+happyReduction_163 (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 { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_7 of { happy_var_7 -> + happyIn45+ (annotate2 happy_var_1 happy_var_7 (ReplicatedAlphaParallel happy_var_2 happy_var_5 happy_var_7)+ ) `HappyStk` happyRest}}}}++happyReduce_164 = happyReduce 6# 39# happyReduction_164+happyReduction_164 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (ReplicatedParallel happy_var_2 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}++happyReduce_165 = happyReduce 7# 39# happyReduction_165+happyReduction_165 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { happy_var_2 -> + case happyOut61 happy_x_3 of { happy_var_3 -> + case happyOut63 happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_7 of { happy_var_7 -> + happyIn45+ (annotate2 happy_var_1 happy_var_7 (ReplicatedLinkParallel happy_var_2 happy_var_3 happy_var_5 happy_var_7)+ ) `HappyStk` happyRest}}}}}++happyReduce_166 = happyReduce 4# 39# happyReduction_166+happyReduction_166 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn45+ (annotate2 happy_var_1 happy_var_4 (ReplicatedSequentialComp happy_var_2 happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_167 = happyReduce 6# 39# happyReduction_167+happyReduction_167 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn45+ (annotate2 happy_var_1 happy_var_6 (ReplicatedSynchronisingExternalChoice+ happy_var_2 happy_var_4 happy_var_6)+ ) `HappyStk` happyRest}}}}++happyReduce_168 = happySpecReduce_2 40# happyReduction_168+happyReduction_168 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn46+ (annotate2 happy_var_1 happy_var_2 (Input (convPat happy_var_2) Nothing)+ )}}++happyReduce_169 = happyReduce 4# 40# happyReduction_169+happyReduction_169 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn46+ (annotate2 happy_var_1 happy_var_4 (Input (convPat happy_var_2) (Just (checkExp happy_var_4)))+ ) `HappyStk` happyRest}}}++happyReduce_170 = happySpecReduce_2 40# happyReduction_170+happyReduction_170 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn46+ (annotate2 happy_var_1 happy_var_2 (NonDetInput (convPat happy_var_2) Nothing)+ )}}++happyReduce_171 = happyReduce 4# 40# happyReduction_171+happyReduction_171 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn46+ (annotate2 happy_var_1 happy_var_4 (NonDetInput (convPat happy_var_2) (Just (checkExp happy_var_4)))+ ) `HappyStk` happyRest}}}++happyReduce_172 = happySpecReduce_2 40# happyReduction_172+happyReduction_172 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn46+ (annotate2 happy_var_1 happy_var_2 (Output (checkExp happy_var_2))+ )}}++happyReduce_173 = happySpecReduce_3 41# happyReduction_173+happyReduction_173 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn47+ ((happy_var_1, happy_var_3)+ )}}++happyReduce_174 = happySpecReduce_1 42# happyReduction_174+happyReduction_174 happy_x_1+ = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn48+ (reverse happy_var_1+ )}++happyReduce_175 = happySpecReduce_1 43# happyReduction_175+happyReduction_175 happy_x_1+ = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn49+ ([happy_var_1]+ )}++happyReduce_176 = happySpecReduce_3 43# happyReduction_176+happyReduction_176 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn49+ (happy_var_3:happy_var_1+ )}}++happyReduce_177 = happySpecReduce_3 44# happyReduction_177+happyReduction_177 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn50+ ((happy_var_1, happy_var_3)+ )}}++happyReduce_178 = happySpecReduce_1 45# happyReduction_178+happyReduction_178 happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn51+ (reverse happy_var_1+ )}++happyReduce_179 = happySpecReduce_1 46# happyReduction_179+happyReduction_179 happy_x_1+ = case happyOut50 happy_x_1 of { happy_var_1 -> + happyIn52+ ([happy_var_1]+ )}++happyReduce_180 = happySpecReduce_3 46# happyReduction_180+happyReduction_180 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_3 of { happy_var_3 -> + happyIn52+ (happy_var_3:happy_var_1+ )}}++happyReduce_181 = happySpecReduce_1 47# happyReduction_181+happyReduction_181 happy_x_1+ = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn53+ (reverse happy_var_1+ )}++happyReduce_182 = happySpecReduce_1 48# happyReduction_182+happyReduction_182 happy_x_1+ = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn54+ ([happy_var_1]+ )}++happyReduce_183 = happySpecReduce_2 48# happyReduction_183+happyReduction_183 happy_x_2+ happy_x_1+ = case happyOut54 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_2 of { happy_var_2 -> + happyIn54+ (happy_var_2:happy_var_1+ )}}++happyReduce_184 = happySpecReduce_3 49# happyReduction_184+happyReduction_184 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut58 happy_x_3 of { happy_var_3 -> + happyIn55+ (happy_var_1:(reverse happy_var_3)+ )}}++happyReduce_185 = happySpecReduce_1 50# happyReduction_185+happyReduction_185 happy_x_1+ = case happyOut58 happy_x_1 of { happy_var_1 -> + happyIn56+ (reverse happy_var_1+ )}++happyReduce_186 = happySpecReduce_0 51# happyReduction_186+happyReduction_186 = happyIn57+ ([]+ )++happyReduce_187 = happySpecReduce_1 51# happyReduction_187+happyReduction_187 happy_x_1+ = case happyOut58 happy_x_1 of { happy_var_1 -> + happyIn57+ (reverse happy_var_1+ )}++happyReduce_188 = happySpecReduce_3 52# happyReduction_188+happyReduction_188 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn58+ (happy_var_3:happy_var_1+ )}}++happyReduce_189 = happySpecReduce_1 52# happyReduction_189+happyReduction_189 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn58+ ([happy_var_1]+ )}++happyReduce_190 = happySpecReduce_0 53# happyReduction_190+happyReduction_190 = happyIn59+ ([]+ )++happyReduce_191 = happySpecReduce_1 53# happyReduction_191+happyReduction_191 happy_x_1+ = case happyOut60 happy_x_1 of { happy_var_1 -> + happyIn59+ (reverse happy_var_1+ )}++happyReduce_192 = happyReduce 5# 54# happyReduction_192+happyReduction_192 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut60 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + happyIn60+ ((happy_var_3, happy_var_5):happy_var_1+ ) `HappyStk` happyRest}}}++happyReduce_193 = happySpecReduce_3 54# happyReduction_193+happyReduction_193 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn60+ ([(happy_var_1, happy_var_3)]+ )}}++happyReduce_194 = happySpecReduce_0 55# happyReduction_194+happyReduction_194 = happyIn61+ ([]+ )++happyReduce_195 = happySpecReduce_2 55# happyReduction_195+happyReduction_195 happy_x_2+ happy_x_1+ = case happyOut63 happy_x_2 of { happy_var_2 -> + happyIn61+ (happy_var_2+ )}++happyReduce_196 = happySpecReduce_3 56# happyReduction_196+happyReduction_196 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn62+ (annotate2 happy_var_1 happy_var_3 (Generator happy_var_1 happy_var_3)+ )}}++happyReduce_197 = happySpecReduce_3 56# happyReduction_197+happyReduction_197 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn62+ (annotate2 happy_var_1 happy_var_3 (Generator happy_var_1 happy_var_3)+ )}}++happyReduce_198 = happySpecReduce_1 56# happyReduction_198+happyReduction_198 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn62+ (annotate happy_var_1 (Qualifier happy_var_1)+ )}++happyReduce_199 = happySpecReduce_1 57# happyReduction_199+happyReduction_199 happy_x_1+ = case happyOut64 happy_x_1 of { happy_var_1 -> + happyIn63+ (reverse happy_var_1+ )}++happyReduce_200 = happySpecReduce_3 58# happyReduction_200+happyReduction_200 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut64 happy_x_1 of { happy_var_1 -> + case happyOut62 happy_x_3 of { happy_var_3 -> + happyIn64+ (happy_var_3:happy_var_1+ )}}++happyReduce_201 = happySpecReduce_1 58# happyReduction_201+happyReduction_201 happy_x_1+ = case happyOut62 happy_x_1 of { happy_var_1 -> + happyIn64+ ([happy_var_1]+ )}++happyNewToken action sts stk+ = getNextTokenWrapper(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ L _ TEOF -> happyDoAction 99# tk action sts stk;+ L _ (TInteger _) -> cont 1#;+ L _ (TChar _) -> cont 2#;+ L _ (TString _) -> cont 3#;+ L _ (TIdent _) -> cont 4#;+ L _ TNewLine -> cont 5#;+ L _ (TPrint _) -> cont 6#;+ L _ TFalse -> cont 7#;+ L _ TTrue -> cont 8#;+ L _ TDefineEqual -> cont 9#;+ L _ TComma -> cont 10#;+ L _ TDot -> cont 11#;+ L _ TQuestionMark -> cont 12#;+ L _ TDollar -> cont 13#;+ L _ TExclamationMark -> cont 14#;+ L _ TDoubleDot -> cont 15#;+ L _ TColon -> cont 16#;+ L _ TDrawnFrom -> cont 17#;+ L _ TTie -> cont 18#;+ L _ TPipe -> cont 19#;+ L _ TDoubleAt -> cont 20#;+ L _ TWildCard -> cont 21#;+ L _ TIf -> cont 22#;+ L _ TThen -> cont 23#;+ L _ TElse -> cont 24#;+ L _ TLet -> cont 25#;+ L _ TWithin -> cont 26#;+ L _ TBackSlash -> cont 27#;+ L _ TLambdaDot -> cont 28#;+ L _ TChannel -> cont 29#;+ L _ TDataType -> cont 30#;+ L _ TSubType -> cont 31#;+ L _ TExternal -> cont 32#;+ L _ TTransparent -> cont 33#;+ L _ TNameType -> cont 34#;+ L _ TModule -> cont 35#;+ L _ TExports -> cont 36#;+ L _ TEndModule -> cont 37#;+ L _ TInstance -> cont 38#;+ L _ TScope -> cont 39#;+ L _ TTimed -> cont 40#;+ L _ TOfType -> cont 41#;+ L _ TYield -> cont 42#;+ L _ TYieldStar -> cont 43#;+ L _ TAssert -> cont 44#;+ L _ TDeadlockFree -> cont 45#;+ L _ TLivelockFree -> cont 46#;+ L _ TDivergenceFree -> cont 47#;+ L _ TDeterministic -> cont 48#;+ L _ TTauPriority -> cont 49#;+ L _ (TRefines _) -> cont 50#;+ L _ (TModel _) -> cont 51#;+ L _ TNot -> cont 52#;+ L _ TAssertNot -> cont 53#;+ L _ TAnd -> cont 54#;+ L _ TOr -> cont 55#;+ L _ TEq -> cont 56#;+ L _ TNotEq -> cont 57#;+ L _ TLtEq -> cont 58#;+ L _ TGtEq -> cont 59#;+ L _ TEmptySeq -> cont 60#;+ L _ TLt -> cont 61#;+ L _ TGt -> cont 62#;+ L _ TCloseSeq -> cont 63#;+ L _ TPlus -> cont 64#;+ L _ TMinus -> cont 65#;+ L _ TTimes -> cont 66#;+ L _ TDivide -> cont 67#;+ L _ TMod -> cont 68#;+ L _ TConcat -> cont 69#;+ L _ THash -> cont 70#;+ L _ TLParen -> cont 71#;+ L _ TRParen -> cont 72#;+ L _ TLBrace -> cont 73#;+ L _ TRBrace -> cont 74#;+ L _ TLMap -> cont 75#;+ L _ TRMap -> cont 76#;+ L _ TLPipeBrace -> cont 77#;+ L _ TRPipeBrace -> cont 78#;+ L _ TLDoubleSqBracket -> cont 79#;+ L _ TRDoubleSqBracket -> cont 80#;+ L _ TLPipeSqBracket -> cont 81#;+ L _ TRPipeSqBracket -> cont 82#;+ L _ TLSqBracket -> cont 83#;+ L _ TRSqBracket -> cont 84#;+ L _ TExtChoice -> cont 85#;+ L _ TIntChoice -> cont 86#;+ L _ TInterleave -> cont 87#;+ L _ TPrefix -> cont 88#;+ L _ TInterrupt -> cont 89#;+ L _ TSlidingChoice -> cont 90#;+ L _ TRException -> cont 91#;+ L _ TParallel -> cont 92#;+ L _ TSemiColon -> cont 93#;+ L _ TGuard -> cont 94#;+ L _ TLSyncExtChoice -> cont 95#;+ L _ TRSyncExtChoice -> cont 96#;+ L _ TLSyncInterrupt -> cont 97#;+ L _ TRSyncInterrupt -> cont 98#;+ _ -> happyError' tk+ })++happyError_ 99# tk = happyError' tk+happyError_ _ tk = happyError' tk++happyThen :: () => ParseMonad a -> (a -> ParseMonad b) -> ParseMonad b+happyThen = (>>=)+happyReturn :: () => a -> ParseMonad a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> ParseMonad a+happyReturn1 = happyReturn+happyError' :: () => (LToken) -> ParseMonad a+happyError' tk = parseError tk++parseFile_ = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))++parseInteractiveStmt_ = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut7 x))++parseExpression_ = happySomeParser where+ happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut41 x))++happySeq = happyDontSeq+++combineDecls :: [PDecl] -> [PDecl]+combineDecls [] = []+combineDecls ((An loc1 b (FunBind n ms Nothing)):+ (An loc2 c (FunBind n' ms' Nothing)):ds)+ | n == n' && srcSpanFile loc1 == srcSpanFile loc2 =+ combineDecls $+ (An (combineSpans loc1 loc2) b (FunBind n (ms++ms') Nothing)):ds+combineDecls (d:ds) = d:combineDecls ds++constraintForName :: SrcSpan -> String -> Constraint+constraintForName _ "Eq" = CEq+constraintForName _ "Ord" = COrd+constraintForName _ "Inputable" = CInputable+constraintForName _ "Set" = CSet+constraintForName _ "Yieldable" = CYieldable+constraintForName loc s = throwSourceError [unknownConstraintError s loc]++attachTypeAnnotations :: [PDecl] -> [PDecl]+attachTypeAnnotations ds =+ let+ extractTypeAnnotations :: Decl UnRenamedName ->+ [(UnRenamedName, PSTypeScheme)]+ extractTypeAnnotations (ParsedTypeAnnotation ns ta) =+ [(n, ta) | n <- ns]+ extractTypeAnnotations _ = []++ extractedAnnotations =+ concatMap (extractTypeAnnotations . unAnnotate) ds++ nameLocs :: [(UnRenamedName, SrcSpan)]+ nameLocs = [(n, loc x) | (n, x) <- extractedAnnotations]++ locsByName :: [(UnRenamedName, [SrcSpan])]+ locsByName =+ map (\ nss -> (fst (head nss), map snd nss)) $+ groupBy (\x y -> fst x == fst y) $+ sortBy (\ x y -> compare (fst x) (fst y)) nameLocs++ dupeErrors = concatMap (\ (n, locs) ->+ case locs of+ [_] -> []+ _ -> [ambiguousTypeAnnotationsError n locs]+ ) locsByName++ nameForDecl (An _ _ (FunBind n _ _)) = [n]+ nameForDecl (An _ _ (PatBind (An _ _ (PVar n)) _ _)) = [n]+ nameForDecl _ = []++ allNames = nub $ sort $ map fst nameLocs+ usedNames = nub $ sort $ concatMap nameForDecl ds+ unusedNames = allNames \\ usedNames+ unusedErrors = map (\ n ->+ case lookup n nameLocs of+ Just loc -> unusedTypeAnnotationsError n loc+ _ -> panic "attachTypeAnnotations: logic error"+ ) unusedNames++ typeAnMap = M.fromList extractedAnnotations+ + annotationForName n =+ M.findWithDefault (panic "attachedTypeAnnotations: invalid state")+ n typeAnMap++ annotateDecl :: PDecl -> [PDecl]+ annotateDecl (An x y (FunBind n ms Nothing)) | M.member n typeAnMap =+ [An x y (FunBind n ms (Just $ annotationForName n))]+ annotateDecl (An x y (PatBind (p@(An _ _ (PVar n))) e Nothing))+ | M.member n typeAnMap =+ [An x y (PatBind p e (Just $ annotationForName n))]+ annotateDecl (An _ _ (ParsedTypeAnnotation _ _)) = []+ annotateDecl d = [d]+ in if length dupeErrors > 0 then+ throwSourceError dupeErrors+ else if length unusedErrors > 0 then+ throwSourceError unusedErrors+ else concatMap annotateDecl ds++convDecl :: PExp -> PExp -> ParseMonad PDecl+convDecl lhs rhs | srcSpanFile (loc lhs) /= srcSpanFile (loc rhs) =+ throwSourceError [definitionSpanFileError lhs rhs (loc lhs)]+convDecl (lhs @ (An loc1 b lhsexp)) (rhs @ (An loc2 d _)) = + let+ span = combineSpans loc1 loc2++ -- REMEMBER: needs to reverse pts+ getPats :: Exp UnRenamedName -> ([[PPat]], UnRenamedName)+ getPats (App f args) = + ((map convPat args):ps, n)+ where+ (ps, n) = getPats (unAnnotate f)+ getPats (Var n) = ([], n)+ + convFunBind exp = + FunBind n [An span (dummyAnnotation) (Match (reverse ps) rhs)]+ Nothing+ where+ (ps, n) = getPats exp++ convPatBind exp = PatBind (convPat exp) rhs Nothing+ in do+ symbTable <- freshPSymbolTable+ case lhsexp of+ App f args -> return $ An span (Nothing, symbTable) (convFunBind lhsexp)+ _ -> return $ An span (Nothing, symbTable) (convPatBind lhs)++-- | Throws an error if a declaration that is not allowed inside a let +-- expression is found.+checkLetDecls :: [PDecl] -> [PDecl]+checkLetDecls decls =+ if and (map checkDecl decls) then+ decls+ else panic "checkLetDecls: Invalid state."+ where+ checkDecl :: PDecl -> Bool+ checkDecl (anDecl@(An _ _ decl)) =+ let+ check (FunBind _ _ _) = True+ check (PatBind _ _ _) = True+ check (External a) = True+ check (Transparent a) = True+ check (TimedSection _ _ ds) = and (map checkDecl ds)+ -- We can't allow module instances as this would cause channels+ -- to be declared in let statements, which would lead to Events+ -- being hard to define+ -- check (ModuleInstance _ _ _ _ _) = True+ check _ = throwSourceError [invalidLetDeclarationErrorMessage anDecl]+ in check decl+ +checkModuleDecl :: PDecl -> PDecl+checkModuleDecl (anDecl@(An _ _ (Assert _))) =+ throwSourceError [invalidModuleDeclarationErrorMessage anDecl]+checkModuleDecl (anDecl@(An _ _ (PrintStatement _))) =+ throwSourceError [invalidModuleDeclarationErrorMessage anDecl]+checkModuleDecl (anDecl@(An x y (TimedSection a b ds))) =+ An x y (TimedSection a b (map checkModuleDecl ds))+checkModuleDecl d = d++checkTimedDecl :: PDecl -> PDecl+checkTimedDecl (anDecl@(An _ _ (PrintStatement _))) =+ throwSourceError [invalidTimedSectionDeclarationErrorMessage anDecl]+checkTimedDecl d = d++checkExp :: PExp -> PExp+-- Transform X \ Y ||| Z (which will have been parsed as X \ (Y ||| Z)) into+-- (X \ Y) ||| Z (and ditto for other parallel operators). Note that we cannot+-- do this using precedences, since we do want X ||| Y \ Z to bracket \ Z around+-- the whole of X ||| Y. Thus, we really need a context dependent precedence,+-- which happy doesn't have.+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (Interleave e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (Interleave (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (GenParallel e2 e3 e4)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ e4' = checkExp e4+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (GenParallel (An lhide an2 (Hiding e1' e2')) e3' e4')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (AlphaParallel e2 e3 e4 e5)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ e4' = checkExp e4+ e5' = checkExp e5+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (AlphaParallel (An lhide an2 (Hiding e1' e2')) e3' e4' e5')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (Exception e2 e3 e4)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ e4' = checkExp e4+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (Exception (An lhide an2 (Hiding e1' e2')) e3' e4')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (InternalChoice e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (InternalChoice (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (ExternalChoice e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (ExternalChoice (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (Interrupt e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (Interrupt (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (SlidingChoice e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (SlidingChoice (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (SequentialComp e2 e3)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (SequentialComp (An lhide an2 (Hiding e1' e2')) e3')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (SynchronisingExternalChoice e2 e3 e4)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ e4' = checkExp e4+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (SynchronisingExternalChoice (An lhide an2 (Hiding e1' e2')) e3' e4')+checkExp (An l1 an1 (Hiding e1 (An l2 an2 (SynchronisingInterrupt e2 e3 e4)))) =+ let+ e1' = checkExp e1+ e2' = checkExp e2+ e3' = checkExp e3+ e4' = checkExp e4+ -- The parallel's location is simply the whole expression+ lpar = l1+ lhide = combineSpans (loc e1') (loc e2')+ in An lpar an1 (SynchronisingInterrupt (An lhide an2 (Hiding e1' e2')) e3' e4')+checkExp (anExp@(An a b exp)) =+ let + check :: Exp UnRenamedName -> Exp UnRenamedName+ check (App e es) = App (checkExp e) (map checkExp es)+ check (BooleanBinaryOp op e1 e2) = BooleanBinaryOp op (checkExp e1) (checkExp e2)+ check (BooleanUnaryOp op e) = BooleanUnaryOp op (checkExp e)+ check (Concat e1 e2) = Concat (checkExp e1) (checkExp e2)+ check (DotApp e1 e2) = DotApp (checkExp e1) (checkExp e2)+ check (If e1 e2 e3) = If (checkExp e1) (checkExp e2) (checkExp e3)+ check (Lambda p e) = Lambda p (checkExp e)+ check (Let decls e) = Let decls (checkExp e)+ check (Lit lit) = Lit lit+ check (List es) = List (map checkExp es)+ check (ListComp es stmts) = ListComp (map checkExp es) stmts+ check (ListEnumFrom e) = ListEnumFrom (checkExp e)+ check (ListEnumFromTo e1 e2) = ListEnumFromTo (checkExp e1) (checkExp e2)+ check (ListEnumFromComp e1 stmts) = ListEnumFromComp (checkExp e1) stmts+ check (ListEnumFromToComp e1 e2 stmts) =+ ListEnumFromToComp (checkExp e1) (checkExp e2) stmts+ check (ListLength e) = ListLength (checkExp e)+ check (Map kvs) = Map (map (\ (k, v) -> (checkExp k, checkExp v)) kvs)+ check (MathsBinaryOp op e1 e2) = MathsBinaryOp op (checkExp e1) (checkExp e2)+ check (MathsUnaryOp op e) = MathsUnaryOp op (checkExp e)+ check (Paren e) = Paren (checkExp e)+ check (Set es) = Set (map checkExp es)+ check (SetComp es stmts) = SetComp (map checkExp es) stmts+ check (SetEnumFrom e) = SetEnumFrom (checkExp e)+ check (SetEnumFromTo e1 e2) = SetEnumFromTo (checkExp e1) (checkExp e2)+ check (SetEnumFromComp e1 stmts) = SetEnumFromComp (checkExp e1) stmts+ check (SetEnumFromToComp e1 e2 stmts) =+ SetEnumFromToComp (checkExp e1) (checkExp e2) stmts+ check (SetEnum es) = SetEnum (map checkExp es)+ -- We don't need to check inside stmts as they will have been checked+ -- upon creation+ check (SetEnumComp es stmts) = SetEnumComp (map checkExp es) stmts+ check (Tuple es) = Tuple (map checkExp es)+ check (Var qname) = Var qname++ check (AlphaParallel e1 e2 e3 e4) = + AlphaParallel (checkExp e1) (checkExp e2) (checkExp e3) (checkExp e4)+ check (Exception e1 e2 e3) = Exception (checkExp e1) (checkExp e2) (checkExp e3)+ check (ExternalChoice e1 e2) = ExternalChoice (checkExp e1) (checkExp e2)+ check (GenParallel e1 e2 e3) = GenParallel (checkExp e1) (checkExp e2) (checkExp e3)+ check (GuardedExp e1 e2) = GuardedExp (checkExp e1) (checkExp e2)+ check (Hiding e1 e2) = Hiding (checkExp e1) (checkExp e2)+ check (InternalChoice e1 e2) = InternalChoice (checkExp e1) (checkExp e2)+ check (Interrupt e1 e2) = Interrupt (checkExp e1) (checkExp e2)+ check (Interleave e1 e2) = Interleave (checkExp e1) (checkExp e2)+ check (LinkParallel e1 ties stmts e2) = + LinkParallel (checkExp e1) ties stmts (checkExp e2)+ check (Prefix e1 fields e2) = Prefix (checkExp e1) fields (checkExp e2)+ check (Rename e ties stmts) = Rename (checkExp e) ties stmts+ check (SequentialComp e1 e2) = SequentialComp (checkExp e1) (checkExp e2)+ check (SlidingChoice e1 e2) = SlidingChoice (checkExp e1) (checkExp e2)+ check (SynchronisingExternalChoice e1 e2 e3) =+ SynchronisingExternalChoice (checkExp e1) (checkExp e2) (checkExp e3)+ check (SynchronisingInterrupt e1 e2 e3) =+ SynchronisingInterrupt (checkExp e1) (checkExp e2) (checkExp e3)++ check (ReplicatedAlphaParallel stmts e1 e2) = + ReplicatedAlphaParallel stmts (checkExp e1) (checkExp e2)+ check (ReplicatedInterleave stmts e1) = ReplicatedInterleave stmts (checkExp e1)+ check (ReplicatedExternalChoice stmts e1) = ReplicatedExternalChoice stmts (checkExp e1)+ check (ReplicatedInternalChoice stmts e1) = ReplicatedInternalChoice stmts (checkExp e1)+ check (ReplicatedParallel e1 stmts e2) = + ReplicatedParallel (checkExp e1) stmts (checkExp e2)+ check (ReplicatedLinkParallel ties tiesStmts stmts e) = + ReplicatedLinkParallel ties tiesStmts stmts (checkExp e)+ check (ReplicatedSequentialComp stmts e1) = + ReplicatedSequentialComp stmts (checkExp e1)+ check (ReplicatedSynchronisingExternalChoice e1 stmts e3) =+ ReplicatedSynchronisingExternalChoice (checkExp e1) stmts+ (checkExp e3)+ + check x = throwSourceError [invalidExpressionErrorMessage anExp]+ in+ An a b (check exp)++getFuncArgs :: PSType -> [PSType]+getFuncArgs (An _ _ (STParen s)) = [s]+getFuncArgs (An _ _ (STTuple ts)) = ts+getFuncArgs s = throwSourceError [invalidFunctionArgsErrorMessage s]++dotAppToList :: PExp -> [PExp]+dotAppToList (An a b exp) = + let + list :: Exp UnRenamedName -> [PExp]+ list (DotApp e1 e2) = (dotAppToList e1) ++ (dotAppToList e2)+ list x = [An a b x]+ in+ list exp++convPat :: PExp -> PPat+convPat (anExp@ (An a b exp)) = + let+ trans :: Exp UnRenamedName -> Pat UnRenamedName+ trans (Concat e1 e2) = PConcat (convPat e1) (convPat e2)+ trans (DotApp e1 e2) = PDotApp (convPat e1) (convPat e2)+ trans (List xs) = PList (map convPat xs)+ trans (Lit x) = PLit x+ trans (MathsUnaryOp Negate e) =+ case trans (unAnnotate e) of+ PLit (Int x) -> PLit (Int (-x))+ _ -> throwSourceError [invalidPatternErrorMessage anExp]+ trans (Set xs) = PSet (map convPat xs)+ trans (Paren x) = PParen (convPat x)+ trans (Tuple xs) = PTuple (map convPat xs)+ trans (Var x) = PVar x+ trans (ExpPatWildCard) = PWildCard+ trans (ExpPatDoublePattern e1 e2) = + PDoublePattern (convPat e1) (convPat e2)+ trans x = throwSourceError [invalidPatternErrorMessage anExp]+ in+ An a () (trans exp)++-- Helper function to get the contents of tokens+getInt (L _ (TInteger x)) = x+getChar (L _ (TChar c)) = c+getString (L _ (TString s)) = s+getName (L _ (TIdent x)) = x+getRefinesModel (L _ (TRefines x)) = x+getPropModel (L _ (TModel x)) = x+getPrintString (L _ (TPrint x)) = x++class Locatable a where+ getLoc :: a b -> SrcSpan+ unLoc :: a b -> b+ mkLoc :: SrcSpan -> b -> a b++instance Locatable Located where+ getLoc (L loc _) = loc+ unLoc (L _ b) = b+ mkLoc loc b = L loc b++instance Locatable (Annotated a) where+ getLoc (An loc _ _) = loc+ unLoc (An _ _ b) = b+ mkLoc loc b = An loc dummyAnnotation b++annotate :: (Locatable t1, Locatable t2) => t1 a -> b -> t2 b+annotate t1 b = mkLoc (getLoc t1) b++annotate2 :: + (Locatable t1, Locatable t2, Locatable t3) => t1 a -> t2 b -> c -> t3 c+annotate2 t1 t2 b = mkLoc (combineSpans (getLoc t1) (getLoc t2)) b+annotate2List :: + (Locatable t1, Locatable t2, Locatable t3) => t1 a -> [t2 b] -> c -> t3 c+annotate2List t1 t2 b = annotate2 t1 (last t2) b+annotate2List' :: + (Locatable t1, Locatable t2, Locatable t3) => [t1 a] -> t2 b -> c -> t3 c+annotate2List' t1 t2 b = annotate2 (last t1) t2 b++annotateWithSymbolTable + :: Annotated (Maybe SymbolTable, PSymbolTable) a -> ParseMonad (Annotated (Maybe SymbolTable, PSymbolTable) a)+annotateWithSymbolTable (An l _ a) = do+ symbTable <- freshPSymbolTable+ return $ An l (Nothing, symbTable) a++liftLoc :: (Locatable t1, Locatable t2) => t1 a -> b -> t2 b+liftLoc t1 b = mkLoc (getLoc t1) b++parseError :: LToken -> ParseMonad a+parseError tok = throwSourceError [parseErrorMessage tok]+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 30 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 51 "templates/GenericTemplate.hs" #-}++{-# LINE 61 "templates/GenericTemplate.hs" #-}++{-# LINE 70 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser). We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+ happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+ = {- nothing -}+++ case action of+ 0# -> {- nothing -}+ happyFail i tk st+ -1# -> {- nothing -}+ happyAccept i tk st+ n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++ (happyReduceArr Happy_Data_Array.! rule) i tk st+ where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+ n -> {- nothing -}+++ happyShift new_state i tk st+ where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+ where (off) = indexShortOffAddr happyActOffsets st+ (off_i) = (off Happy_GHC_Exts.+# i)+ check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+ then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i)+ else False+ (action)+ | check = indexShortOffAddr happyTable off_i+ | otherwise = indexShortOffAddr happyDefActions st++{-# LINE 130 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+ Happy_GHC_Exts.narrow16Int# i+ where+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+ high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+ low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+ off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 163 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+ let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "shifting the error token" $+ happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+ happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+ = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+ = let r = fn v1 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+ = let r = fn v1 v2 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+ = let r = fn v1 v2 v3 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+ = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let r = fn stk in -- it doesn't hurt to always seq here...+ happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+ happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+ where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+ drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+ happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+ where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+ drop_stk = happyDropStk k stk++ (off) = indexShortOffAddr happyGotoOffsets st1+ (off_i) = (off Happy_GHC_Exts.+# nt)+ (new_state) = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = + {- nothing -}+ happyDoAction j tk new_state+ where (off) = indexShortOffAddr happyGotoOffsets st+ (off_i) = (off Happy_GHC_Exts.+# nt)+ (new_state) = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail 0# tk old_st _ stk@(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
+ src/CSPM/Parser/Tokens.hs view
@@ -0,0 +1,251 @@+module CSPM.Parser.Tokens (+ Token(..), LToken, Model(..),+)+where++import CSPM.DataStructures.Syntax (Model(..))+import CSPM.PrettyPrinter+import Util.Annotated+import Util.PrettyPrint++data Token = + TInteger Int+ | TChar Char+ | TString String+ | TFalse+ | TTrue+ | TIdent String++ | TPrint String++ | TRefines Model+ | TModel Model+ | TTauPriority+ | TDeadlockFree+ | TDivergenceFree+ | TLivelockFree+ | TDeterministic++ | TNewLine+ | TDefineEqual++ | TModule+ | TExports+ | TEndModule+ | TScope+ | TInstance++ | TOfType+ | TYield+ | TYieldStar++ | TTimed++ | TComma+ | TDot+ | TExclamationMark+ | TQuestionMark+ | TDollar+ | TPipe+ | TDoubleDot+ | TColon+ | TDrawnFrom+ | TTie -- "<->"++ | TDoubleAt+ | TWildCard++ | TIf+ | TThen+ | TElse+ | TLet+ | TWithin+ | TBackSlash+ | TLambdaDot+ | TChannel+ | TAssert+ | TAssertNot+ | TDataType+ | TSubType+ | TExternal+ | TTransparent+ | TNameType++ | TSemiColon+ | TGuard++ | TNot+ | TAnd+ | TOr+ | TEq+ | TNotEq+ | TLtEq+ | TGtEq+ | TLt+ | TGt+ | TPlus+ | TMinus+ | TTimes+ | TDivide+ | TMod+ | TCloseSeq+ | TEmptySeq++ | TConcat+ | THash++ | TLParen+ | TRParen+ | TLBrace+ | TRBrace+ | TLPipeBrace+ | TRPipeBrace+ | TLDoubleSqBracket+ | TRDoubleSqBracket+ | TLPipeSqBracket+ | TRPipeSqBracket+ | TLSqBracket+ | TRSqBracket + + | TExtChoice+ | TIntChoice+ | TInterleave+ | TPrefix+ | TInterrupt+ | TSlidingChoice+ | TRException+ | TParallel++ | TLSyncInterrupt+ | TRSyncInterrupt+ | TLSyncExtChoice+ | TRSyncExtChoice++ | TLMap+ | TRMap++ | TEOF+ deriving Eq+ +type LToken = Located Token++instance Show Token where+ show t = show (prettyPrint t)++instance PrettyPrintable Token where+ prettyPrint (TInteger i) = int i+ prettyPrint (TChar c) = quotes (char c)+ prettyPrint (TString s) = doubleQuotes (text s)+ prettyPrint TFalse = text "false"+ prettyPrint TTrue = text "true"+ prettyPrint (TIdent s) = text s++ prettyPrint (TPrint s) = text "print" <+> text s++ prettyPrint (TRefines m) = char '[' <> prettyPrint m <> char '='+ prettyPrint (TModel m) = char '[' <> prettyPrint m <> char ']'+ prettyPrint TTauPriority = text "tau priority"+ prettyPrint TDeadlockFree = text "deadlock free"+ prettyPrint TDivergenceFree = text "divergence free"+ prettyPrint TLivelockFree = text "livelock free"+ prettyPrint TDeterministic = text "deterministic"++ prettyPrint TNewLine = text "<newline>"+ prettyPrint TDefineEqual = char '='++ prettyPrint TModule = text "module"+ prettyPrint TExports = text "exports"+ prettyPrint TEndModule = text "endmodule"+ prettyPrint TScope = text "::"+ prettyPrint TInstance = text "instance"++ prettyPrint TOfType = text "::"+ prettyPrint TYield = text "=>"+ prettyPrint TYieldStar = text "=>*"++ prettyPrint TTimed = text "Timed"++ prettyPrint TComma = char ','+ prettyPrint TDot = char '.'+ prettyPrint TExclamationMark = char '!'+ prettyPrint TQuestionMark = char '?'+ prettyPrint TDollar = char '$'+ prettyPrint TPipe = char '|'+ prettyPrint TDoubleDot = text ".."+ prettyPrint TColon = char ':'+ prettyPrint TDrawnFrom = text "<-"+ prettyPrint TTie = text "<->"++ prettyPrint TDoubleAt = text "@@"+ prettyPrint TWildCard = char '_'++ prettyPrint TIf = text "if"+ prettyPrint TThen = text "then"+ prettyPrint TElse = text "else"+ prettyPrint TLet = text "let"+ prettyPrint TWithin = text "within"+ prettyPrint TBackSlash = char '\\'+ prettyPrint TLambdaDot = char '@'+ prettyPrint TChannel = text "channel"+ prettyPrint TAssert = text "assert"+ prettyPrint TAssertNot = text "not"+ prettyPrint TDataType = text "datatype"+ prettyPrint TSubType = text "subtype"+ prettyPrint TExternal = text "external"+ prettyPrint TTransparent = text "transparent"+ prettyPrint TNameType = text "nametype"++ prettyPrint TSemiColon = char ';'+ prettyPrint TGuard = char '&'++ prettyPrint TNot = text "not"+ prettyPrint TAnd = text "and"+ prettyPrint TOr = text "or"+ prettyPrint TEq = text "=="+ prettyPrint TNotEq = text "!="+ prettyPrint TLtEq = text "<="+ prettyPrint TGtEq = text ">="+ prettyPrint TLt = char '<'+ prettyPrint TGt = char '>'+ prettyPrint TPlus = char '+'+ prettyPrint TMinus = char '-'+ prettyPrint TTimes = char '*'+ prettyPrint TDivide = char '/'+ prettyPrint TMod = char '%'+ prettyPrint TCloseSeq = char '<'+ prettyPrint TEmptySeq = text "<>"++ prettyPrint TConcat = char '^'+ prettyPrint THash = char '#'++ prettyPrint TLParen = char '('+ prettyPrint TRParen = char ')'+ prettyPrint TLBrace = char '{'+ prettyPrint TRBrace = char '}'+ prettyPrint TLPipeBrace = text "{|"+ prettyPrint TRPipeBrace = text "|}"+ prettyPrint TLDoubleSqBracket = text "[["+ prettyPrint TRDoubleSqBracket = text "]]"+ prettyPrint TLPipeSqBracket = text "[|"+ prettyPrint TRPipeSqBracket = text "|]"+ prettyPrint TLSqBracket = text "["+ prettyPrint TRSqBracket = text "]"+ + prettyPrint TExtChoice = text "[]"+ prettyPrint TIntChoice = text "|~|"+ prettyPrint TInterleave = text "|||"+ prettyPrint TPrefix = text "->"+ prettyPrint TInterrupt = text "/\\"+ prettyPrint TSlidingChoice = text "[>"+ prettyPrint TRException = text "|>"+ prettyPrint TParallel = text "||"++ prettyPrint TLSyncInterrupt = text "/+"+ prettyPrint TRSyncInterrupt = text "+\\"+ prettyPrint TLSyncExtChoice = text "[+"+ prettyPrint TRSyncExtChoice = text "+]"++ prettyPrint TLMap = text "(|"+ prettyPrint TRMap = text "|)"++ prettyPrint TEOF = text "EOF"
src/CSPM/Prelude.hs view
@@ -3,15 +3,18 @@ module CSPM.Prelude ( BuiltIn(..), builtins,+ builtInName, transparentFunctionForOccName, externalFunctionForOccName ) where +import qualified Data.Map as M import System.IO.Unsafe import CSPM.DataStructures.Names import CSPM.DataStructures.Types+import Util.Exception data BuiltIn = BuiltIn {@@ -22,16 +25,21 @@ typeScheme :: TypeScheme, isTypeUnsafe :: Bool, isExternal :: Bool,+ isHidden :: Bool, isTransparent :: Bool } instance Eq BuiltIn where b1 == b2 = name b1 == name b2 +bMap = M.fromList [(stringName b, name b) | b <- builtins True]+builtInName s = M.findWithDefault (panic "builtin not found") s bMap+ builtins :: Bool -> [BuiltIn] builtins includeHidden = if includeHidden then allBuiltins - else [b | b <- allBuiltins, not (isExternal b), not (isTransparent b)]+ else [b | b <- allBuiltins, not (isHidden b), not (isExternal b),+ not (isTransparent b)] transparentFunctionForOccName :: OccName -> Maybe BuiltIn transparentFunctionForOccName (OccName s) =@@ -43,12 +51,11 @@ let bs = [b | b <- allBuiltins, isExternal b, stringName b == s] in if bs == [] then Nothing else Just (head bs) - allBuiltins :: [BuiltIn] allBuiltins = unsafePerformIO makeBuiltins -makeBuiltins :: IO [BuiltIn] --Type -> (String, [Type], Type)]-makeBuiltins = +makeBuiltins :: IO [BuiltIn]+makeBuiltins = do let cspm_union fv = ("union", [TSet fv, TSet fv], TSet fv) cspm_inter fv = ("inter", [TSet fv, TSet fv], TSet fv)@@ -63,9 +70,15 @@ cspm_Seq fv = ("Seq", [TSet fv], TSet (TSeq fv)) cspm_seq fv = ("seq", [TSet fv], TSeq fv) - sets = [cspm_union, cspm_inter, cspm_diff, cspm_Union, cspm_Inter,- cspm_member, cspm_card, cspm_empty, cspm_set, cspm_Set,- cspm_Seq, cspm_seq]+ setsSets = [cspm_union, cspm_inter, cspm_diff, cspm_Union, cspm_Inter,+ cspm_set, cspm_Set, cspm_Seq]+ -- The following require Eq as they allowing queries to be made about+ -- the set. In particular, the following all allow holes to be punched+ -- through the type checker and process values to be compared. For+ -- instance, member(P, {STOP}) card({STOP, P}) == 1,+ -- empty(diff({STOP}, {P})), length(seq({STOP, P})) == 1 all test if+ -- P == STOP.+ eqSets = [cspm_empty, cspm_card, cspm_member, cspm_seq] cspm_length fv = ("length", [TSeq fv], TInt) cspm_null fv = ("null", [TSeq fv], TBool)@@ -74,21 +87,25 @@ cspm_concat fv = ("concat", [TSeq (TSeq fv)], TSeq fv) cspm_elem fv = ("elem", [fv, TSeq fv], TBool) - seqs = [cspm_length, cspm_null, cspm_head, cspm_tail, cspm_concat,- cspm_elem]+ seqs = [cspm_length, cspm_null, cspm_head, cspm_tail, cspm_concat]+ eqSeqs = [cspm_elem] cspm_STOP = ("STOP", TProc) cspm_SKIP = ("SKIP", TProc) cspm_CHAOS = ("CHAOS", TFunction [TSet TEvent] TProc)- cspm_prioritise = ("prioritise", TFunction [TProc, TSeq (TSet TEvent)] TProc)+ csp_tskip = ("TSKIP", TFunction [] TProc)+ csp_tstop = ("TSTOP", TFunction [] TProc)+ csp_wait = ("WAIT", TFunction [TInt] TProc) builtInProcs :: [(String, Type)]- builtInProcs = [cspm_STOP, cspm_SKIP, cspm_CHAOS, cspm_prioritise]+ builtInProcs = [cspm_STOP, cspm_SKIP, cspm_CHAOS, csp_tstop, csp_tskip,+ csp_wait] cspm_Int = ("Int", TSet TInt) cspm_Bool = ("Bool", TSet TBool) cspm_Proc = ("Proc", TSet TProc) cspm_Events = ("Events", TSet TEvent)+ cspm_Char = ("Char", TSet TChar) cspm_true = ("true", TBool) cspm_false = ("false", TBool) cspm_True = ("True", TBool)@@ -96,26 +113,101 @@ typeConstructors :: [(String, Type)] typeConstructors = [cspm_Int, cspm_Bool, cspm_Proc, cspm_Events, - cspm_true, cspm_false, cspm_True, cspm_False]+ cspm_Char, cspm_true, cspm_false, cspm_True, cspm_False] + cspm_emptyMap k v = ("emptyMap", TMap k v)+ cspm_mapFromList k v =+ ("mapFromList", TFunction [TSeq (TTuple [k, v])] (TMap k v))+ cspm_mapLookup k v = ("mapLookup", TFunction [TMap k v, k] v)+ cspm_mapMember k v = ("mapMember", TFunction [TMap k v, k] TBool)+ cspm_mapToList k v =+ ("mapToList", TFunction [TMap k v] (TSeq (TTuple [k, v])))+ cspm_mapUpdate k v =+ ("mapUpdate", TFunction [TMap k v, k, v] (TMap k v))+ cspm_mapUpdateMultiple k v =+ ("mapUpdateMultiple",+ TFunction [TMap k v, TSeq (TTuple [k, v])] (TMap k v))+ cspm_Map k v = ("Map", TFunction [TSet k, TSet v] (TSet (TMap k v)))++ mapFunctions :: [Type -> Type -> (String, Type)]+ mapFunctions = [cspm_emptyMap, cspm_mapFromList, cspm_mapLookup,+ cspm_mapMember, cspm_mapToList, cspm_mapUpdate,+ cspm_mapUpdateMultiple]++ externalAndTransparentFunctions :: [(String, Type)]+ externalAndTransparentFunctions = [+ ("chase", TFunction [TProc] TProc),+ ("chase_nocache", TFunction [TProc] TProc)+ ]+ externalFunctions :: [(String, Type)]- externalFunctions = []+ externalFunctions = [+ ("deter", TFunction [TProc] TProc),+ ("loop", TFunction [TProc] TProc),+ ("prioritise", TFunction [TProc, TSeq (TSet TEvent)] TProc),+ ("prioritise_nocache", TFunction [TProc, TSeq (TSet TEvent)] TProc)+ ] + complexExternalFunctions :: IO [(String, TypeScheme)]+ complexExternalFunctions = do+ mtransclose <- do+ fv @ (TVar (TypeVarRef tv _ _)) <- freshTypeVarWithConstraints [CEq]+ return $ ForAll [(tv, [CEq])] + (TFunction [TSet (TTuple [fv,fv]), TSet fv] (TSet (TTuple [fv,fv])))+ relational_image <- do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints [CEq]+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints [CSet]+ return $ ForAll [(tv1, [CEq]), (tv2, [CSet])] + (TFunction [TSet (TTuple [fv1,fv2])] (TFunction [fv1] (TSet fv2)))+ relational_inverse_image <- do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints [CEq]+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints [CSet]+ return $ ForAll [(tv2, [CEq]), (tv1, [CSet])] + (TFunction [TSet (TTuple [fv1,fv2])] (TFunction [fv2] (TSet fv1)))+ transpose <- do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints [CSet]+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints [CSet]+ return $ ForAll [(tv1, [CSet]), (tv2, [CSet])] + (TFunction [TSet (TTuple [fv1,fv2])] (TSet (TTuple [fv2,fv1])))+ return [+ ("mtransclose", mtransclose),+ ("relational_image", relational_image),+ ("relational_inverse_image", relational_inverse_image),+ ("transpose", transpose)+ ]+ transparentFunctions :: [(String, Type)] transparentFunctions = [+ ("explicate", TFunction [TProc] TProc),+ ("lazyenumerate", TFunction [TProc] TProc), ("diamond", TFunction [TProc] TProc), ("normal", TFunction [TProc] TProc),+ ("lazynorm", TFunction [TProc] TProc), ("sbisim", TFunction [TProc] TProc), ("tau_loop_factor", TFunction [TProc] TProc), ("model_compress", TFunction [TProc] TProc),- ("explicate", TFunction [TProc] TProc),- ("wbisim", TFunction [TProc] TProc),- ("chase", TFunction [TProc] TProc)+ ("wbisim", TFunction [TProc] TProc) ] - externalNames = map fst externalFunctions- transparentNames = map fst transparentFunctions+ csp_timed_priority = ("timed_priority", TFunction [TProc] TProc) + cspm_error fv = ("error", [TSeq TChar], fv)+ cspm_show fv = ("show", [fv], TSeq TChar)++ fdr3Extensions = [cspm_error, cspm_show]++ complexExternals <- complexExternalFunctions++ let+ externalNames =+ map fst externalAndTransparentFunctions+ ++map fst externalFunctions++map fst complexExternals+ transparentNames =+ map fst transparentFunctions+ ++map fst externalAndTransparentFunctions++ hiddenNames = ["TSKIP", "TSTOP", "timed_priority", "WAIT"]+ mkFuncType cs func = do fv @ (TVar (TypeVarRef tv _ _)) <- freshTypeVarWithConstraints cs let (n, args, ret) = func fv@@ -130,26 +222,37 @@ let (n, t) = func return (n, ForAll [] t) + mkMapFunction f = do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints [CSet]+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints []+ let (n, t) = f fv1 fv2+ return (n, ForAll [(tv1, [CSet]), (tv2, [])] t)++ mkMapFunction' f = do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints [CSet]+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints [CSet]+ let (n, t) = f fv1 fv2+ return (n, ForAll [(tv1, [CSet]), (tv2, [CSet])] t)+ unsafeFunctionNames :: [String]- unsafeFunctionNames = ["productions", "extensions"]+ unsafeFunctionNames = [] deprecatedNames :: [String]- deprecatedNames = ["True", "False"]+ deprecatedNames = [] replacementForDeprecatedName :: String -> Maybe String- replacementForDeprecatedName "True" = Just "true"- replacementForDeprecatedName "False" = Just "false" replacementForDeprecatedName _ = Nothing makeBuiltIn :: (String, TypeScheme) -> IO BuiltIn makeBuiltIn (s, ts) = do- n <- mkWiredInName (OccName s) False+ n <- mkWiredInName (UnQual (OccName s)) False return $ BuiltIn { name = n, stringName = s, isDeprecated = s `elem` deprecatedNames, deprecatedReplacement = Nothing, typeScheme = ts,+ isHidden = s `elem` hiddenNames, isTypeUnsafe = s `elem` unsafeFunctionNames, isExternal = s `elem` externalNames, isTransparent = s `elem` transparentNames@@ -164,18 +267,40 @@ [] -> return b Nothing -> return b makeReplacements _ b = return b- in do- bs1 <- mapM (mkFuncType []) seqs- bs2 <- mapM (mkFuncType [Eq]) sets- bs3 <- mapM mkPatternType typeConstructors- bs4 <- mapM mkPatternType builtInProcs- bs5 <- mapM mkUnsafeFuncType unsafeFunctionNames- bs6 <- mapM mkPatternType externalFunctions- bs7 <- mapM mkPatternType transparentFunctions - let bs = bs1++bs2++bs3++bs4++bs5++bs6++bs7+ makeExtensionType = do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints []+ fv2 @ (TVar (TypeVarRef tv2 _ _)) <- freshTypeVarWithConstraints []+ return $ ForAll [(tv1, []), (tv2, [CYieldable])]+ (TFunction [TDotable fv1 fv2] (TSet fv1))+ makeProductionsType = do+ fv1 @ (TVar (TypeVarRef tv1 _ _)) <- freshTypeVarWithConstraints []+ fv2 @ (TVar (fv2ref@(TypeVarRef tv2 _ _))) <-+ freshTypeVarWithConstraints []+ return $ ForAll [(tv1, [CYieldable]), (tv2, [])]+ (TFunction [TExtendable fv1 fv2ref] (TSet fv1))+ makeExtensionsProductions = do+ t1 <- makeExtensionType+ t2 <- makeProductionsType+ return [("extensions", t1), ("productions", t2)] - bs' <- mapM makeBuiltIn bs- bs'' <- mapM (makeReplacements bs') bs'+ bs1 <- mapM (mkFuncType []) seqs+ bs2 <- mapM (mkFuncType [CSet]) setsSets+ bs2' <- mapM (mkFuncType [CEq]) (eqSets ++ eqSeqs)+ bs3 <- mapM mkPatternType typeConstructors+ bs4 <- mapM mkPatternType builtInProcs+ bs5 <- makeExtensionsProductions+ bs6 <- mapM mkPatternType (externalFunctions++[csp_timed_priority])+ bs7 <- mapM mkPatternType transparentFunctions+ bs8 <- mapM mkPatternType externalAndTransparentFunctions+ bs9 <- mapM (mkFuncType []) fdr3Extensions+ bs10 <- mapM mkMapFunction mapFunctions+ bs11 <- mapM mkMapFunction' [cspm_Map] - return bs''+ let bs = bs1++bs2++bs2'++bs3++bs4++bs5++bs6++bs7++complexExternals++bs8++bs9+ ++bs10++bs11++ bs' <- mapM makeBuiltIn bs+ bs'' <- mapM (makeReplacements bs') bs'+ + return bs''
src/CSPM/PrettyPrinter.hs view
@@ -4,24 +4,18 @@ ) where -import CSPM.DataStructures.Literals-import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax import Util.Annotated-import Util.Exception import Util.PrettyPrint -instance PrettyPrintable id => PrettyPrintable [Module id] where- prettyPrint = vcat . map prettyPrint--instance PrettyPrintable id => PrettyPrintable (Module id) where- prettyPrint (GlobalModule decls) = +instance PrettyPrintable id => PrettyPrintable (CSPMFile id) where+ prettyPrint (CSPMFile decls) = vcat (punctuate (char '\n') (map prettyPrint decls)) instance PrettyPrintable id => PrettyPrintable (InteractiveStmt id) where prettyPrint (Evaluate e) = prettyPrint e- prettyPrint (Bind decl) = - text "let" <+> prettyPrint decl+ prettyPrint (Bind (decl:_)) = text "let" <+> prettyPrint decl+ prettyPrint (RunAssertion a) = text "assert" <+> prettyPrint a prettyPrintMatch :: PrettyPrintable id => id -> AnMatch id -> Doc prettyPrintMatch n (An _ _ (Match groups exp)) = @@ -31,11 +25,57 @@ where ppGroup ps = parens (list (map prettyPrint ps)) +instance PrettyPrintable id => PrettyPrintable (STypeScheme id) where+ prettyPrint (STypeScheme _ [] t) = prettyPrint t+ prettyPrint (STypeScheme _ cs t) =+ hang (case cs of+ [c] -> prettyPrint c+ _ -> parens (list (map prettyPrint cs)))+ tabWidth+ (text "=>" <+> prettyPrint t)++instance PrettyPrintable id => PrettyPrintable (STypeConstraint id) where+ prettyPrint (STypeConstraint c n) = prettyPrint c <+> prettyPrint n++instance PrettyPrintable id => PrettyPrintable (SType id) where+ prettyPrint (STVar n) = prettyPrint n+ prettyPrint STProc = text "Proc"+ prettyPrint STInt = text "Int"+ prettyPrint STBool = text "Bool"+ prettyPrint STChar = text "Char"+ prettyPrint STEvent = text "Event"+ prettyPrint (STExtendable t n) =+ ppBinOp (prettyPrint n) (text "=>*") (prettyPrint t)+ prettyPrint (STSet t) = braces (prettyPrint t)+ prettyPrint (STSeq t) = angles (prettyPrint t)+ prettyPrint (STDot t1 t2) = prettyPrint t1 <> char '.' <> prettyPrint t2+ prettyPrint (STMap t1 t2) =+ text "(|" <+> prettyPrint t1 <+> text "=>" <+> prettyPrint t2+ <+> text "|)"+ prettyPrint (STTuple ts) = parens (list (map prettyPrint ts))+ prettyPrint (STFunction args rt) =+ ppBinOp (parens (list (map prettyPrint args))) (text "->")+ (prettyPrint rt)+ prettyPrint (STDotable t1 t2) =+ ppBinOp (prettyPrint t1) (text "=>") (prettyPrint t2)+ prettyPrint (STDatatype n) = prettyPrint n+ prettyPrint (STParen t) = parens (prettyPrint t)+ instance PrettyPrintable id => PrettyPrintable (Decl id) where- prettyPrint (FunBind n ms) = vcat (map (prettyPrintMatch n) ms)- prettyPrint (PatBind pat exp) =- hang (prettyPrint pat <+> equals)- tabWidth (prettyPrint exp)+ prettyPrint (FunBind n ms ts) =+ (case ts of+ Nothing -> empty+ Just ta -> + prettyPrint n <+> text "::" <+> prettyPrint ta+ )+ $$ vcat (map (prettyPrintMatch n) ms)+ prettyPrint (PatBind pat exp ts) =+ (case ts of+ Nothing -> empty+ Just ta -> + prettyPrint pat <+> text "::" <+> prettyPrint ta+ )+ $$ hang (prettyPrint pat <+> equals) tabWidth (prettyPrint exp) prettyPrint (Channel ns Nothing) = text "channel" <+> list (map prettyPrint ns) prettyPrint (Channel ns (Just e)) =@@ -48,9 +88,32 @@ prettyPrint (DataType n dtcs) = text "datatype" <+> prettyPrint n <+> text "=" <+> fsep (punctuate (text "|") (map prettyPrint dtcs))+ prettyPrint (SubType n dtcs) =+ text "subtype" <+> prettyPrint n <+> text "=" + <+> fsep (punctuate (text "|") (map prettyPrint dtcs))+ prettyPrint (NameType n e) =+ text "nametype" <+> prettyPrint n <+> text "=" <+> prettyPrint e prettyPrint (Assert a) = text "assert" <+> prettyPrint a- + prettyPrint (Module n args private exported) =+ text "module" <+> prettyPrint n <> parens (list (map prettyPrint args))+ $$ tabIndent (vcat (punctuate (char '\n') (map prettyPrint private)))+ $$ text "exports"+ $$ tabIndent (vcat (punctuate (char '\n') (map prettyPrint exported)))+ $$ text "endmodule"+ prettyPrint (TimedSection _ f ds) =+ text "Timed"+ <+> case f of+ Just f -> parens (prettyPrint f)+ Nothing -> empty+ <+> char '{'+ $$ tabIndent (vcat (punctuate (char '\n') (map prettyPrint ds)))+ $$ char '}'+ prettyPrint (ModuleInstance n nm args mp _) =+ text "instance" <+> prettyPrint n <+> char '=' <+> prettyPrint nm <>+ parens (list (map prettyPrint args))+ prettyPrint (PrintStatement s) = text "print" <+> text s+ instance PrettyPrintable id => PrettyPrintable (Assertion id) where prettyPrint (Refinement e1 m e2 opts) = hang (hang (prettyPrint e1) tabWidth@@ -62,6 +125,7 @@ prettyPrint (PropertyCheck e1 prop (Just m)) = hang (prettyPrint e1) tabWidth (colon <> brackets (prettyPrint prop <+> brackets (prettyPrint m)))+ prettyPrint (ASNot a) = text "not" <+> prettyPrint a instance PrettyPrintable Model where prettyPrint Traces = text "T"@@ -146,8 +210,8 @@ sep [hang (text "if" <+> prettyPrint e1 <+> text "then") tabWidth (prettyPrint e2), text "else" <+> prettyPrint e3]- prettyPrint (Lambda pat exp) = - text "\\" <> prettyPrint pat+ prettyPrint (Lambda ps exp) = + text "\\" <> list (map prettyPrint ps) <+> text "@" <+> prettyPrint exp prettyPrint (Let decls exp) = @@ -159,7 +223,14 @@ prettyPrint (ListEnumFrom lb) = angles (prettyPrint lb <> text "..") prettyPrint (ListEnumFromTo lb ub) = angles (prettyPrint lb <> text ".." <> prettyPrint ub)+ prettyPrint (ListEnumFromComp lb stmts) = + angles (ppComp' [prettyPrint lb <> text ".."] stmts)+ prettyPrint (ListEnumFromToComp lb ub stmts) = + angles (ppComp' [prettyPrint lb <> text ".." <> prettyPrint ub] stmts) prettyPrint (Lit lit) = prettyPrint lit+ prettyPrint (Map kvs) = text "(|" <+>+ list (map (\ (k, v) -> prettyPrint k <+> text "=>" <+> prettyPrint v) kvs)+ <+> text "|)" prettyPrint (MathsUnaryOp op e1) = prettyPrint op <> prettyPrint e1 prettyPrint (MathsBinaryOp op e1 e2) = ppBinOp' (prettyPrint e1) (prettyPrint op) (prettyPrint e2)@@ -171,6 +242,10 @@ prettyPrint (SetEnumFrom lb) = braces (prettyPrint lb <> text "..") prettyPrint (SetEnumFromTo lb ub) = braces (prettyPrint lb <> text ".." <> prettyPrint ub)+ prettyPrint (SetEnumFromComp lb stmts) = + braces (ppComp' [prettyPrint lb <> text ".."] stmts)+ prettyPrint (SetEnumFromToComp lb ub stmts) = + braces (ppComp' [prettyPrint lb <> text ".." <> prettyPrint ub] stmts) prettyPrint (Tuple exps) = parens (list (map prettyPrint exps)) prettyPrint (Var qname) = prettyPrint qname @@ -211,6 +286,12 @@ ppBinOp (prettyPrint e1) (char ';') (prettyPrint e2) prettyPrint (SlidingChoice e1 e2) = ppBinOp (prettyPrint e1) (text "[>") (prettyPrint e2)+ prettyPrint (SynchronisingExternalChoice e1 a e2) =+ ppBinOp (prettyPrint e1) (text "[+" <> prettyPrint a <> text "+]")+ (prettyPrint e2)+ prettyPrint (SynchronisingInterrupt e1 a e2) =+ ppBinOp (prettyPrint e1) (text "/+" <> prettyPrint a <> text "+\\")+ (prettyPrint e2) prettyPrint (ReplicatedAlphaParallel stmts alpha e) = ppRepOp (text "||") stmts @@ -226,12 +307,19 @@ stmts (prettyPrint e) prettyPrint (ReplicatedParallel alpha stmts e) = ppRepOp (brackets (bars (prettyPrint alpha))) stmts (prettyPrint e)- + prettyPrint (ReplicatedSequentialComp stmts e) =+ ppRepOp (text ";") stmts (prettyPrint e)+ prettyPrint (ReplicatedSynchronisingExternalChoice e1 stmts e2) =+ ppRepOp (text "[+" <> prettyPrint e1 <> text "+]")+ stmts (prettyPrint e2)+ -- Patterns - this is only used when emitting parser errors about invalid -- expressions. prettyPrint (ExpPatWildCard) = char '_' prettyPrint (ExpPatDoublePattern e1 e2) = prettyPrint e1 <+> text "@@" <+> prettyPrint e2++ prettyPrint (TimedPrefix _ p) = prettyPrint p instance PrettyPrintable id => PrettyPrintable (Field id) where prettyPrint (Output exp) =
src/CSPM/Renamer.hs view
@@ -2,576 +2,1508 @@ {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE UndecidableInstances #-}--- | Renames all variables to unique Names, in the process converting all--- UnRenamedName into Name. This simplifies many subsequent phases as every--- name is guaranteed to be unique so flat maps may be used, rather than--- Hierarchical maps. Further, this also flags patterns that match channels--- and datatype clauses.-module CSPM.Renamer (- RenamerState,- RenamerMonad,- runFromStateToState,- initRenamer,- rename,- newScope,-) where--import Control.Monad.State-import Data.List--import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax-import CSPM.Prelude-import Util.Annotated-import Util.Exception-import qualified Util.HierarchicalMap as HM-import Util.Monad-import Util.PartialFunctions-import Util.PrettyPrint hiding (($$))--type RenameEnvironment = HM.HierarchicalMap UnRenamedName Name--data RenamerState = RenamerState {- environment :: RenameEnvironment,- srcSpan :: SrcSpan- }--type RenamerMonad = StateT RenamerState IO---- | Initialises the renamer.-initRenamer :: IO (RenamerState)-initRenamer = do- let bs = map (\b -> (UnQual (OccName (stringName b)), name b)) (builtins False)- return $ RenamerState {- -- We insert a new layer to allow builtins to be overridden- environment = HM.newLayer (HM.updateMulti HM.new bs),- srcSpan = Unknown- }---- | Runs the renamer starting at the given state and returning the given state.-runFromStateToState :: RenamerState -> RenamerMonad a -> IO (a, RenamerState)-runFromStateToState s p = runStateT p s---- **********************--- Monad Operations--addScope :: RenamerMonad a -> RenamerMonad a-addScope m = do- env <- gets environment- let env' = HM.newLayer env- modify (\ st -> st { environment = env' })- a <- m- modify (\ st -> st { environment = env })- return a--newScope :: RenamerMonad ()-newScope = do- env <- gets environment- let env' = HM.newLayer env- modify (\ st -> st { environment = env' })- -lookupName :: UnRenamedName -> RenamerMonad (Maybe Name)-lookupName n = do- env <- gets environment- return $ HM.maybeLookup env n--setName :: UnRenamedName -> Name -> RenamerMonad ()-setName rn n =- modify (\ st -> st {- environment = HM.update (environment st) rn n- })--setSrcSpan :: SrcSpan -> RenamerMonad ()-setSrcSpan loc = modify (\ st -> st { srcSpan = loc })---- **********************--- Renaming Class and basic instances--class Renamable e1 e2 | e1 -> e2 where- rename :: e1 -> RenamerMonad e2--instance Renamable e1 e2 => Renamable [e1] [e2] where- rename es = mapM rename es--instance Renamable e1 e2 => Renamable (Maybe e1) (Maybe e2) where- rename (Just x) = return Just $$ rename x- rename Nothing = return Nothing--instance Renamable e1 e2 => Renamable (Annotated a e1) (Annotated a e2) where- rename (An a b e) = do- setSrcSpan a- rename e >>= return . An a b--instance (Renamable e1 e2, Renamable e1' e2') => Renamable (e1, e1') (e2, e2') where- rename (a, b) = do- a' <- rename a- b' <- rename b- return (a', b')--type NameMaker = SrcSpan -> UnRenamedName -> RenamerMonad Name--externalNameMaker :: Bool -> NameMaker-externalNameMaker b l (UnQual ocn) = mkExternalName ocn l b--internalNameMaker :: NameMaker-internalNameMaker l (UnQual ocn) = mkInternalName ocn l--reAnnotatePure :: Annotated a e -> e' -> Annotated a e'-reAnnotatePure (An a b _) v = An a b v---- | Given something annotated and a function that mutates the inner object,--- returns the inner object annotated with the same outer annotation.-reAnnotate :: Monad m => Annotated a e -> m e' -> m (Annotated a e')-reAnnotate (An a b _) m = do- v <- m- return $ An a b v---- | Renames the declarations in the current scope.-renameDeclarations :: Bool -> [PDecl] -> RenamerMonad a -> RenamerMonad ([TCDecl], a)-renameDeclarations topLevel ds prog = do- -- Firstly, check for duplicates amongst the definitions- checkDuplicates ds-- -- Now, find all the datatype labels and channels and create names for- -- them in the maps (otherwise renameVarLHS will fail).- mapM_ insertChannelsAndDataTypes ds-- -- Secondly, insert all other names into the environment.- mapM_ insertBoundNames ds-- -- Finally, as all the declarations have been inserted into the map we- -- can rename the right hand sides (as every variable *should* be in- -- scope).- ds' <- mapM renameRightHandSide ds-- -- check the inner thing- a <- prog-- return (ds', a)-- where- nameMaker :: NameMaker- nameMaker = if topLevel then externalNameMaker False else internalNameMaker-- ignoringNameMaker :: NameMaker- ignoringNameMaker _ rn = do- Just v <- lookupName rn- return v-- insertChannelsAndDataTypes :: PDecl -> RenamerMonad ()- insertChannelsAndDataTypes ad = case unAnnotate ad of- Channel ns _ -> mapM_ (\ rn -> do- n' <- externalNameMaker True (loc ad) rn- setName rn n') ns- DataType rn cs -> mapM_ (\ cl -> case unAnnotate cl of- DataTypeClause rn _ -> do- n' <- externalNameMaker True (loc cl) rn- setName rn n'- ) cs- _ -> return ()- - insertBoundNames :: PDecl -> RenamerMonad ()- insertBoundNames pd = case unAnnotate pd of- Assert _ -> return ()- Channel _ _ -> return ()- DataType rn _ -> do- n <- nameMaker (loc pd) rn- setName rn n- External ns ->- mapM_ (\ rn@(UnQual ocn) -> do- case externalFunctionForOccName ocn of- Just b -> setName rn (name b)- Nothing -> - let err = mkErrorMessage (loc pd) (externalFunctionNotRecognised rn)- in throwSourceError [err]) ns- FunBind rn ms -> do- n <- nameMaker (loc pd) rn- setName rn n- NameType rn _ -> do- n <- nameMaker (loc pd) rn- setName rn n- PatBind p e -> renamePattern nameMaker p >> return ()- Transparent ns -> - mapM_ (\ rn@(UnQual ocn) -> do- case transparentFunctionForOccName ocn of- Just b -> setName rn (name b)- Nothing ->- let err = mkErrorMessage (loc pd) (transparentFunctionNotRecognised rn)- in throwSourceError [err]) ns-- renameRightHandSide :: PDecl -> RenamerMonad TCDecl- renameRightHandSide pd = reAnnotate pd $ case unAnnotate pd of- Assert e -> do- e' <- addScope $ rename e- return $ Assert e'- Channel rns e -> do- ns <- mapM renameVarRHS rns- e' <- addScope $ rename e- return $ Channel ns e'- DataType rn cs -> do- n <- renameVarRHS rn- cs' <- mapM (\ pc -> addScope $ reAnnotate pc $ case unAnnotate pc of- DataTypeClause rn e -> do- n' <- renameVarRHS rn- e' <- rename e- return $ DataTypeClause n' e') cs- return $ DataType n cs'- External rns -> do- ns <- mapM renameVarRHS rns- return $ External ns- FunBind rn ms -> do- n <- renameVarRHS rn- ms' <- mapM rename ms- return $ FunBind n ms'- NameType rn e -> do- n <- renameVarRHS rn- e' <- addScope $ rename e- return $ NameType n e'- PatBind p e -> do- p' <- renamePattern ignoringNameMaker p- e' <- addScope $ rename e- return $ PatBind p' e'- Transparent rns -> do- ns <- mapM renameVarRHS rns- return $ Transparent ns--renamePattern :: NameMaker -> PPat -> RenamerMonad TCPat-renamePattern nm ap =- let- renamePat :: PPat -> RenamerMonad TCPat- renamePat ap = reAnnotate ap $ case unAnnotate ap of- PConcat p1 p2 -> return PConcat $$ renamePat p1 $$ renamePat p2- PDotApp p1 p2 -> return PDotApp $$ renamePat p1 $$ renamePat p2- PDoublePattern p1 p2 -> - return PDoublePattern $$ renamePat p1 $$ renamePat p2- PList ps -> return PList $$ mapM renamePat ps- PLit l -> return $ PLit l- PParen p -> return PParen $$ renamePat p- PSet ps -> return PSet $$ mapM renamePat ps- PTuple ps -> return PTuple $$ mapM renamePat ps- PVar v -> do - -- In this case, we should lookup the variable in the map and see if it is- -- bound. If it is and is a datatype constructor, then we should return- -- return that, otherwise we create a new internal var.- mn <- lookupName v- case mn of- Just n | isNameDataConstructor n ->- -- Just return the name- return (PVar n) - _ -> do- -- Create the name- n <- nm (loc ap) v- setName v n- return $ PVar n- PWildCard -> return PWildCard- in do- checkDuplicates [ap]- renamePat ap--checkDuplicates :: FreeVars a => [Annotated b a] -> RenamerMonad ()-checkDuplicates aps = do- fvss <- mapM freeVars aps-- let - fvs = sort (concat fvss)- gfvs = group fvs- duped = filter (\l -> length l > 1) gfvs- nameLocMap = - concatMap (\(ns, d) -> [(n, loc d) | n <- ns]) (zip fvss aps)- - loc <- gets srcSpan- if duped /= [] then- throwSourceError (map (mkErrorMessage loc) (duplicatedDefinitionsMessage nameLocMap))- else return ()---- | Rename a variable on the left hand side of a definition.---renameVarLHS :: NameMaker -> UnRenamedName -> RenamerMonad Name---renameVarLHS nm v = do---- | Rename a variable on the right hand side of a definition.-renameVarRHS :: UnRenamedName -> RenamerMonad Name-renameVarRHS n = do- mn <- lookupName n- loc <- gets srcSpan- case mn of- Just x -> return x- Nothing -> throwSourceError [mkErrorMessage loc (varNotInScopeMessage n)]--renameFields :: [PField] -> RenamerMonad a -> RenamerMonad ([TCField], a)-renameFields fs inner = do- checkDuplicates fs- -- No duplicates, so we can just add one scope- addScope (do- -- We do the fields left to right, to ensure that the scoping is correct-- -- Recall that c?x$y is equiv to |~| y:... @ [] x:... @ ... and hence- -- the nondet fields bind first.-- -- Firstly, we do the nondet fields.- fsNonDet <- mapM (\afd -> - case unAnnotate afd of- Output e -> return Nothing- Input p me -> return Nothing- NonDetInput p me -> do- me' <- rename me- p' <- renamePattern internalNameMaker p- return $ Just $ reAnnotatePure afd $ NonDetInput p' me') fs-- fsDet <- mapM (\ afd ->- case unAnnotate afd of- Output e -> do- e' <- rename e- return $ Just $ reAnnotatePure afd $ Output e'- Input p me -> do- -- Rename me first, as it can't depend on p- me' <- rename me- p' <- renamePattern internalNameMaker p- return $ Just $ reAnnotatePure afd $ Input p' me'- NonDetInput p me -> return Nothing) fs- - let - combineJusts :: [Maybe a] -> [Maybe a] -> [a]- combineJusts [] [] = []- combineJusts (Just x:xs) (Nothing:ys) = x:combineJusts xs ys- combineJusts (Nothing:xs) (Just y:ys) = y:combineJusts xs ys-- fs' :: [TCField]- fs' = combineJusts fsNonDet fsDet-- -- all fields renamed, now rename the inner thing- a <- inner- return (fs', a))--renameStatements :: [PStmt] -> RenamerMonad a -> RenamerMonad ([TCStmt], a)-renameStatements stmts inner = do- checkDuplicates stmts- -- No duplicates, so we can just add one scope- addScope (do- -- We do the stmts left to right, to ensure that the scoping is correct- stmts' <- mapM (\ astmt -> reAnnotate astmt $ - case unAnnotate astmt of- Generator p e -> do- -- Rename e first, as it can't depend on p- e' <- rename e- p' <- renamePattern internalNameMaker p- return $ Generator p' e'- Qualifier e -> do- e' <- rename e- return $ Qualifier e'- ) stmts- -- all stmts renamed, now rename the inner thing- a <- inner- return (stmts', a))--instance Renamable (Match UnRenamedName) (Match Name) where- rename (Match pss e) = addScope $ do- checkDuplicates (concat pss)- pss' <- mapM (mapM (renamePattern internalNameMaker)) pss- e' <- rename e- return $ Match pss' e'--instance Renamable (InteractiveStmt UnRenamedName) (InteractiveStmt Name) where- rename (Bind d) = do- ([d'],_) <- renameDeclarations True [d] (return ())- return $ Bind d'- rename (Evaluate e) = return Evaluate $$ rename e- rename (RunAssertion a) = return RunAssertion $$ rename a--instance Renamable (Module UnRenamedName) (Module Name) where- rename (GlobalModule ds) = do- (ds', _) <- renameDeclarations True ds (return ())- return $ GlobalModule ds'--instance Renamable (Assertion UnRenamedName) (Assertion Name) where- rename (ASNot e) =- return ASNot $$ rename e- rename (BoolAssertion e) =- return BoolAssertion $$ rename e- rename (Refinement e1 m e2 mopts) = - return Refinement $$ rename e1 $$ return m $$ rename e2 $$ rename mopts- rename (PropertyCheck e1 p m) =- return PropertyCheck $$ rename e1 $$ return p $$ return m--instance Renamable (ModelOption UnRenamedName) (ModelOption Name) where- rename (TauPriority e) = return TauPriority $$ rename e--instance Renamable (Exp UnRenamedName) (Exp Name) where- rename (App e es) = return App $$ rename e $$ rename es- rename (BooleanBinaryOp op e1 e2) = return - (BooleanBinaryOp op) $$ rename e1 $$ rename e2- rename (BooleanUnaryOp op e) = return- (BooleanUnaryOp op) $$ rename e- rename (Concat e1 e2) = return Concat $$ rename e1 $$ rename e2- rename (DotApp e1 e2) = return DotApp $$ rename e1 $$ rename e2- rename (If e1 e2 e3) = return If $$ rename e1 $$ rename e2 $$ rename e3- rename (Lambda p e) = do- (p', e') <- addScope (do- p' <- renamePattern internalNameMaker p- e' <- rename e- return (p', e'))- return $ Lambda p' e'- rename (Let ds e) = do- (ds', e') <- addScope $ renameDeclarations False ds (rename e)- return $ Let ds' e'- rename (Lit l) = return $ Lit l- rename (List es) = return List $$ rename es- rename (ListComp es stmts) = do- (stmts', es') <- renameStatements stmts (rename es)- return $ ListComp es' stmts'- rename (ListEnumFrom e) = return ListEnumFrom $$ rename e- rename (ListEnumFromTo e1 e2) = return ListEnumFromTo $$ rename e1 $$ rename e2- rename (ListLength e) = return ListLength $$ rename e- rename (MathsBinaryOp op e1 e2) = return - (MathsBinaryOp op) $$ rename e1 $$ rename e2- rename (MathsUnaryOp op e) = return (MathsUnaryOp op) $$ rename e- rename (Paren e) = return Paren $$ rename e- rename (Set es) = return Set $$ rename es- rename (SetComp es stmts) = do- (stmts', es') <- renameStatements stmts (rename es)- return $ SetComp es' stmts'- rename (SetEnum es) = return SetEnum $$ rename es- rename (SetEnumComp es stmts) = do- (stmts', es') <- renameStatements stmts (rename es)- return $ SetEnumComp es' stmts'- rename (SetEnumFrom e) = return SetEnumFrom $$ rename e- rename (SetEnumFromTo e1 e2) = return SetEnumFromTo $$ rename e1 $$ rename e2- rename (Tuple es) = return Tuple $$ rename es- rename (Var n) = return Var $$ renameVarRHS n-- rename (AlphaParallel e1 e2 e3 e4) = return- AlphaParallel $$ rename e1 $$ rename e2 $$ rename e3 $$ rename e4- rename (Exception e1 e2 e3) = return- Exception $$ rename e1 $$ rename e2 $$ rename e3- rename (ExternalChoice e1 e2) = return ExternalChoice $$ rename e1 $$ rename e2- rename (GenParallel e1 e2 e3) = return- GenParallel $$ rename e1 $$ rename e2 $$ rename e3- rename (GuardedExp e1 e2) = return GuardedExp $$ rename e1 $$ rename e2- rename (Hiding e1 e2) = return Hiding $$ rename e1 $$ rename e2- rename (InternalChoice e1 e2) = return InternalChoice $$ rename e1 $$ rename e2- rename (Interrupt e1 e2) = return Interrupt $$ rename e1 $$ rename e2- rename (Interleave e1 e2) = return Interleave $$ rename e1 $$ rename e2- rename (LinkParallel e1 ties stmts e2) = do- e1' <- rename e1- e2' <- rename e2- (stmts', ties') <- renameStatements stmts (rename ties)- return $ LinkParallel e1' ties' stmts' e2'- rename (Prefix e1 fs e2) = do- e1' <- rename e1- (fs', e2') <- renameFields fs (rename e2)- return $ Prefix e1' fs' e2'- rename (Rename e1 ties stmts) = do- e1' <- rename e1- (stmts', ties') <- renameStatements stmts (rename ties)- return $ Rename e1' ties' stmts'- rename (SequentialComp e1 e2) = return SequentialComp $$ rename e1 $$ rename e2- rename (SlidingChoice e1 e2) = return SlidingChoice $$ rename e1 $$ rename e2- - rename (ReplicatedAlphaParallel stmts e1 e2) = do- (stmts', (e1', e2')) <- renameStatements stmts (do- e1' <- rename e1- e2' <- rename e2- return (e1', e2'))- return $ ReplicatedAlphaParallel stmts' e1' e2'- rename (ReplicatedInterleave stmts e) = do- (stmts', e') <- renameStatements stmts (rename e)- return $ ReplicatedInterleave stmts' e'- rename (ReplicatedExternalChoice stmts e) = do- (stmts', e') <- renameStatements stmts (rename e)- return $ ReplicatedExternalChoice stmts' e'- rename (ReplicatedInternalChoice stmts e) = do- (stmts', e') <- renameStatements stmts (rename e)- return $ ReplicatedInternalChoice stmts' e'- rename (ReplicatedParallel e1 stmts e2) = do- e1' <- rename e1- (stmts', e2') <- renameStatements stmts (rename e2)- return $ ReplicatedParallel e1' stmts' e2'- rename (ReplicatedLinkParallel ties tiesStmts stmts e) = do- (stmts', (e', ties', tiesStmts')) <- renameStatements stmts (do- e' <- rename e- (tiesStmts', ties') <- renameStatements tiesStmts (rename ties)- return (e', ties', tiesStmts'))- return $ ReplicatedLinkParallel ties' tiesStmts' stmts' e'--class FreeVars a where- freeVars :: a -> RenamerMonad [UnRenamedName]--instance FreeVars a => FreeVars [a] where- freeVars xs = concatMapM freeVars xs- -instance FreeVars a => FreeVars (Annotated b a) where- freeVars (An _ _ inner) = freeVars inner--instance FreeVars (Pat UnRenamedName) where- freeVars (PConcat p1 p2) = do- fvs1 <- freeVars p1- fvs2 <- freeVars p2- return $ fvs1++fvs2- freeVars (PDotApp p1 p2) = freeVars [p1,p2]- freeVars (PDoublePattern p1 p2) = do- fvs1 <- freeVars p1- fvs2 <- freeVars p2- return $ fvs1++fvs2- freeVars (PList ps) = freeVars ps- freeVars (PLit l) = return []- freeVars (PParen p) = freeVars p- freeVars (PSet ps) = freeVars ps- freeVars (PTuple ps) = freeVars ps- freeVars (PVar n) = do- mn <- lookupName n- case mn of- Just n | isNameDataConstructor n -> return []- _ -> return [n]- freeVars (PWildCard) = return []--instance FreeVars (Stmt UnRenamedName) where- freeVars (Qualifier e) = return []- freeVars (Generator p e) = freeVars p--instance FreeVars (Field UnRenamedName) where- freeVars (Input p e) = freeVars p- freeVars (NonDetInput p e) = freeVars p- freeVars (Output e) = return []--instance FreeVars (Decl UnRenamedName) where- freeVars (Assert _) = return []- freeVars (External ns) = return ns- freeVars (Channel ns _) = return ns- freeVars (DataType n cs) = - return $ n:[n' | DataTypeClause n' _ <- map unAnnotate cs]- freeVars (FunBind n _) = return [n]- freeVars (NameType n _) = return [n]- freeVars (PatBind p _) = freeVars p- freeVars (Transparent ns) = return ns---- ********************--- Error Messages--type Error = Doc--duplicatedDefinitionsMessage :: [(UnRenamedName, SrcSpan)] -> [Error]-duplicatedDefinitionsMessage ns = duplicatedDefinitionsMessage' $- let- names = map fst ns- dupNames = (map head . filter (\ g -> length g > 1) . group . sort) names- in [(n, applyRelation ns n) | n <- dupNames]--duplicatedDefinitionsMessage' :: [(UnRenamedName, [SrcSpan])] -> [Error]-duplicatedDefinitionsMessage' nlocs = - map (\ (n, spans) ->- hang (text "The variable" <+> prettyPrint n - <+> text "has multiple definitions at" <> colon) tabWidth- (vcat (map prettyPrint spans))) nlocs--transparentFunctionNotRecognised :: UnRenamedName -> Error-transparentFunctionNotRecognised n =- text "The transparent function" <+> prettyPrint n <+> - text "is not recognised."--externalFunctionNotRecognised :: UnRenamedName -> Error-externalFunctionNotRecognised n = - text "The external function" <+> prettyPrint n <+> - text "is not recognised."--varNotInScopeMessage :: UnRenamedName -> Error-varNotInScopeMessage n = prettyPrint n <+> text "is not in scope"+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE UndecidableInstances #-}+-- | Renames all variables to unique Names, in the process converting all+-- UnRenamedName into Name. This simplifies many subsequent phases as every+-- name is guaranteed to be unique so flat maps may be used, rather than+-- Hierarchical maps. Further, this also flags patterns that match channels+-- and datatype clauses.+module CSPM.Renamer (+ RenamerState,+ RenamerMonad,+ runFromStateToState,+ initRenamer,+ rename,+ newScope,+ getBoundNames,+) where++import Control.Monad.State+import Data.List+import qualified Data.Map as M+import Data.Maybe (fromJust, isJust,isNothing)+import qualified Data.Set as S++import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import CSPM.Prelude+import CSPM.PrettyPrinter+import Util.Annotated+import Util.Exception+import Util.FuzzyLookup+import qualified Util.HierarchicalMap as HM+import Util.Monad+import Util.PartialFunctions+import Util.PrettyPrint hiding (($$))+import qualified Util.PrettyPrint as P++data Visibility =+ Public+ | Private+ | Instance+ deriving (Eq, Ord, Show)++data RenamedName = RenamedName {+ renamedName :: Name,+ renamedNameIsModule :: Bool,+ renamedNameVisibility :: Visibility+ }+ deriving Show++data RenamedType = RenamedType {+ renamedType :: SType Name,+ renamedTypeVisibility :: Visibility+ }+ deriving Show++type RenameEnvironment = HM.HierarchicalMap UnRenamedName RenamedName+type TypeRenameEnvironment = HM.HierarchicalMap UnRenamedName RenamedType++data ModuleInformation =+ ModuleInformation {+ declaration :: PDecl,+ renamedDeclaration :: Maybe TCDecl,+ -- | The visibility of the names in the module.+ nameVisibility :: M.Map UnRenamedName Visibility,+ typeNameVisibility :: M.Map UnRenamedName Visibility,+ publicBoundModules :: [UnRenamedName],+ privateBoundModules :: [UnRenamedName],+ publicBoundLabels :: [UnRenamedName],+ privateBoundLabels :: [UnRenamedName],+ publicBoundNames :: [UnRenamedName],+ privateBoundNames :: [UnRenamedName],+ publicTypeNames :: [UnRenamedName],+ privateTypeNames :: [UnRenamedName]+ }+ | ModuleInstanceInformation {+ resolvedTarget :: Name+ }+ deriving Show++data RenamerState = RenamerState {+ -- | The current rename map for variables.+ environment :: RenameEnvironment,+ -- | The current rename map for type-variables.+ typeEnvironment :: TypeRenameEnvironment,+ -- | The last source span seen, for error messages.+ srcSpan :: SrcSpan,+ -- | Errors that have occured.+ errors :: [ErrorMessage],+ -- | The modules that names should be qualified with.+ currentModuleQualificationStack :: [OccName],+ -- | The modules that are in scope. Used for module instances.+ foundModules :: M.Map Name ModuleInformation+ }++type RenamerMonad = StateT RenamerState IO++-- | Initialises the renamer.+initRenamer :: IO (RenamerState)+initRenamer = do+ let bs = map (\b -> (UnQual (OccName (stringName b)), RenamedName {+ renamedName = name b,+ renamedNameIsModule = False,+ renamedNameVisibility = Public+ }))+ (builtins False)+ bts = map (\ (s, t) -> (UnQual (OccName s), RenamedType {+ renamedType = t,+ renamedTypeVisibility = Public+ })) [+ ("Proc", STProc),+ ("Int", STInt),+ ("Bool", STBool),+ ("Char", STChar),+ ("Event", STEvent)+ ]+ return $ RenamerState {+ -- We insert a new layer to allow builtins to be overridden+ environment = HM.newLayer (HM.updateMulti HM.new bs),+ typeEnvironment = HM.newLayer (HM.updateMulti HM.new bts),+ srcSpan = Unknown,+ errors = [],+ currentModuleQualificationStack = [],+ foundModules = M.empty+ }++-- | Runs the renamer starting at the given state and returning the given state.+runFromStateToState :: RenamerState -> RenamerMonad a -> IO (a, RenamerState)+runFromStateToState s p = do+ (a, st') <- runStateT p s+ -- Check if any errors have been thrown.+ case errors st' of+ [] -> return (a, st')+ es -> throwSourceError es++getBoundNames :: RenamerMonad [Name]+getBoundNames = do+ env <- gets environment+ let isInteresting (_, rname) =+ nameType (renamedName rname) `elem` [ExternalName, WiredInName]+ && renamedNameVisibility rname == Public+ && not (renamedNameIsModule rname)+ return $ map (renamedName . snd) $ filter isInteresting $ HM.flatten env++-- **********************+-- Monad Operations++addTypeScope :: RenamerMonad a -> RenamerMonad a+addTypeScope m = do+ env <- gets typeEnvironment+ let env' = HM.newLayer env+ modify (\ st -> st { typeEnvironment = env' })+ a <- m+ modify (\ st -> st { typeEnvironment = env })+ return a++lookupType :: UnRenamedName -> RenamerMonad (Maybe RenamedType)+lookupType n = do+ env <- gets typeEnvironment+ return $! HM.maybeLookup env n++setType :: UnRenamedName -> SType Name -> RenamerMonad ()+setType rn t = setTypeWithVisibility rn t Public++setTypeWithVisibility :: UnRenamedName -> SType Name -> Visibility ->+ RenamerMonad ()+setTypeWithVisibility rn t vis = modify (\ st -> st {+ typeEnvironment = HM.update (typeEnvironment st) rn (RenamedType t vis)+ })++addScope :: RenamerMonad a -> RenamerMonad a+addScope m = do+ env <- gets environment+ let env' = HM.newLayer env+ modify (\ st -> st { environment = env' })+ a <- m+ modify (\ st -> st { environment = env })+ return a++newScope :: RenamerMonad ()+newScope = do+ env <- gets environment+ let env' = HM.newLayer env+ modify (\ st -> st { environment = env' })++lookupName :: UnRenamedName -> Bool -> RenamerMonad (Maybe Name)+lookupName n isModule = lookupName' n isModule False++lookupMaybeHiddenName :: UnRenamedName -> Bool -> RenamerMonad (Maybe Name)+lookupMaybeHiddenName n isModule = lookupName' n isModule True++lookupName' :: UnRenamedName -> Bool -> Bool -> RenamerMonad (Maybe Name)+lookupName' n isModule ignoreVisibility = do+ env <- gets environment+ return $!+ case HM.maybeLookup env n of+ Just (RenamedName n isModule' isVisible)+ | isModule == isModule' &&+ (isVisible == Public || ignoreVisibility) ->+ Just n+ _ -> Nothing++currentVisibilityOfName :: UnRenamedName -> RenamerMonad Visibility+currentVisibilityOfName rn = do+ env <- gets environment+ return $!+ case HM.maybeLookup env rn of+ Just (RenamedName _ _ v) -> v+ _ -> panic "Cannot find name for visibility checking"++qualify :: OccName -> [OccName] -> UnRenamedName+qualify on [] = UnQual on+qualify on (n:ns) = Qual n (qualify on ns)++qualifyName :: UnRenamedName -> RenamerMonad UnRenamedName+qualifyName (UnQual on) = do+ ns <- gets currentModuleQualificationStack+ return $! qualify on (reverse ns)+qualifyName (Qual on rn) = do+ n <- qualifyName (UnQual on)+ let qualify (UnQual on) = Qual on rn+ qualify (Qual mn rn) = Qual mn (qualify rn)+ return $! qualify n++setName :: UnRenamedName -> Name -> RenamerMonad ()+setName rn n = setRenamedName rn (RenamedName n False Public)++setNameWithVisibility :: UnRenamedName -> Name -> Visibility -> RenamerMonad ()+setNameWithVisibility rn n vis = setRenamedName rn (RenamedName n False vis)++setModuleName :: UnRenamedName -> Name -> Visibility -> RenamerMonad ()+setModuleName rn n vis = setRenamedName rn (RenamedName n True vis)++setRenamedName :: UnRenamedName -> RenamedName -> RenamerMonad ()+setRenamedName rn renamed = do+ rn' <- qualifyName rn+ modify (\ st -> st { environment = HM.update (environment st) rn renamed })++informationForModule :: SrcSpan -> UnRenamedName -> RenamerMonad ModuleInformation+informationForModule loc rn = do+ env <- gets environment+ mn <- lookupMaybeHiddenName rn True+ case mn of+ Just n -> informationForModuleName n+ Nothing -> do+ msg <- varNotInScopeMessage rn True+ throwSourceError [mkErrorMessage loc msg]++informationForModuleName :: Name -> RenamerMonad ModuleInformation+informationForModuleName n = do+ m <- gets foundModules+ case M.lookup n m of+ Just (ModuleInstanceInformation nt) -> informationForModuleName nt+ Just x -> return x+ Nothing -> panic "Found module name but couldn't find module"++setSrcSpan :: SrcSpan -> RenamerMonad ()+setSrcSpan loc = modify (\ st -> st { srcSpan = loc })++-- | Report a message as an error. This will be raised at the outer monad level.+addErrors :: [ErrorMessage] -> RenamerMonad ()+addErrors msgs = modify (\st -> st { errors = msgs ++ errors st })++addModuleContext :: OccName -> RenamerMonad a -> RenamerMonad a+addModuleContext mName prog = do+ modify (\ st -> st { currentModuleQualificationStack = + mName : currentModuleQualificationStack st })+ a <- prog+ modify (\st -> st { currentModuleQualificationStack =+ tail (currentModuleQualificationStack st) })+ return a++resetModuleContext :: RenamerMonad a -> RenamerMonad a+resetModuleContext prog = do+ stk <- gets currentModuleQualificationStack+ modify (\st -> st { currentModuleQualificationStack = [] })+ a <- prog+ modify (\st -> st { currentModuleQualificationStack = stk })+ return a++addModule :: Name -> PDecl -> RenamerMonad ()+addModule n d =+ modify (\ st -> st {+ foundModules = M.insert n+ (ModuleInformation d Nothing M.empty M.empty [] [] [] [] [] [] [] [])+ (foundModules st)+ })++addModuleInstance :: Name -> Name -> RenamerMonad ()+addModuleInstance n nt =+ modify (\ st -> st {+ foundModules = M.insert n (ModuleInstanceInformation nt) (foundModules st)+ })++updateModuleInformation :: Name -> (ModuleInformation -> ModuleInformation) ->+ RenamerMonad ()+updateModuleInformation n f = do+ modify (\ st -> st { foundModules = M.adjust f n (foundModules st) })++addBoundModuleModules :: Name -> [UnRenamedName] -> [UnRenamedName] ->+ RenamerMonad ()+addBoundModuleModules mn privNs pubNs = updateModuleInformation mn $+ \ st -> st { privateBoundModules = privNs, publicBoundModules = pubNs }++addBoundModuleLabels :: Name -> [UnRenamedName] -> [UnRenamedName] -> RenamerMonad ()+addBoundModuleLabels mn privNs pubNs = updateModuleInformation mn $+ \ st -> st { privateBoundLabels = privNs, publicBoundLabels = pubNs }++addBoundModuleBoundNames :: Name -> [UnRenamedName] -> [UnRenamedName] -> RenamerMonad ()+addBoundModuleBoundNames mn privNs pubNs = updateModuleInformation mn $+ \ st -> st { privateBoundNames = privNs, publicBoundNames = pubNs }++addBoundModuleTypeNames :: Name -> [UnRenamedName] -> [UnRenamedName] -> RenamerMonad ()+addBoundModuleTypeNames mn privNs pubNs = updateModuleInformation mn $+ \ st -> st { privateTypeNames = privNs, publicTypeNames = pubNs }++addBoundModuleRenamedVersion :: Name -> TCDecl -> RenamerMonad ()+addBoundModuleRenamedVersion mn td = updateModuleInformation mn $+ \ st -> st { renamedDeclaration = Just td }++setNameVisibilityInModule :: Name -> [UnRenamedName] -> [UnRenamedName] ->+ RenamerMonad ()+setNameVisibilityInModule mn ns tns = do+ env <- gets environment+ mapM_ (\ n -> case HM.maybeLookup env n of+ Nothing -> panic "Cannot find name for visibility"+ Just renamed ->+ updateModuleInformation mn $ \ st -> st {+ nameVisibility = M.insert n (renamedNameVisibility renamed)+ (nameVisibility st)+ }+ ) ns+ tenv <- gets typeEnvironment+ mapM_ (\ n -> case HM.maybeLookup tenv n of+ Nothing -> panic "Cannot find name for visibility"+ Just renamed ->+ updateModuleInformation mn $ \ st -> st {+ typeNameVisibility = M.insert n (renamedTypeVisibility renamed)+ (typeNameVisibility st)+ }+ ) tns++nameVisibilityInModule :: UnRenamedName -> UnRenamedName -> RenamerMonad Visibility+nameVisibilityInModule umrn n = do+ env <- gets environment+ Just mn <- lookupMaybeHiddenName umrn True+ minfo <- informationForModuleName mn+ case M.lookup n (nameVisibility minfo) of+ Just v -> return v+ Nothing -> panic "Name does not have a visibility in module"++typeNameVisibilityInModule :: UnRenamedName -> UnRenamedName -> RenamerMonad Visibility+typeNameVisibilityInModule umrn n = do+ env <- gets environment+ Just mn <- lookupMaybeHiddenName umrn True+ minfo <- informationForModuleName mn+ case M.lookup n (typeNameVisibility minfo) of+ Just v -> return v+ Nothing -> panic "Type name does not have a visibility in module"++hideBoundNames :: [UnRenamedName] -> [UnRenamedName] ->+ RenamerMonad [UnRenamedName]+hideBoundNames ns tns = do+ let nameSet = S.fromList ns+ change rn x | S.member rn nameSet =+ x { renamedNameVisibility = Private }+ change rn x = x+ modify (\ st -> st { environment = HM.map change (environment st) })+ let nameSet = S.fromList tns+ change rn x | S.member rn nameSet =+ x { renamedTypeVisibility = Private }+ change rn x = x+ modify (\ st -> st { typeEnvironment = HM.map change (typeEnvironment st) })+ return ns++unhideModuleNames :: OccName -> RenamerMonad a -> RenamerMonad a+unhideModuleNames prefix prog = addScope $ do+ minfo <- informationForModule Unknown (UnQual prefix)+ let unhide rn (RenamedName x y _) = RenamedName x y $!+ case M.lookup rn (nameVisibility minfo) of+ Just v -> v+ Nothing -> panic $ "Cannot find visibility of "++show x+ ++" in "++show (prettyPrint prefix)+ unhideType rn (RenamedType x _) = RenamedType x $!+ case M.lookup rn (typeNameVisibility minfo) of+ Just v -> v+ Nothing -> panic "Cannot find type vis"+ let ns = publicBoundModules minfo ++ privateBoundModules minfo +++ publicBoundLabels minfo ++ privateBoundLabels minfo +++ publicBoundNames minfo ++ privateBoundNames minfo+ -- Unhide the names+ modify (\ st -> st {+ environment = HM.updateMulti (environment st)+ [(rn, unhide rn (HM.lookup (environment st) (Qual prefix rn)))+ | rn <- ns],+ typeEnvironment = HM.updateMulti (typeEnvironment st)+ [(rn, unhideType rn (HM.lookup (typeEnvironment st) (Qual prefix rn)))+ | rn <- privateTypeNames minfo ++ publicTypeNames minfo]+ })+ prog++-- | Given a module name, runs the provided program in a new scope in which+-- all variables that were bound with the given module name as a prefix in+-- scope.+prefixNamesFromScope :: Bool -> OccName ->+ RenamerMonad ([UnRenamedName], [UnRenamedName]) ->+ RenamerMonad ([UnRenamedName], [UnRenamedName])+prefixNamesFromScope isParamterised prefix prog = do+ (rns, rnts) <- unhideModuleNames prefix $ do+ (ns, tns) <- prog+ env <- gets environment+ tenv <- gets typeEnvironment+ let rns = map (\ rn -> (rn,+ case HM.maybeLookup env rn of+ Just r -> r+ Nothing -> panic "Cannot find name to prefix")) ns+ rnts = map (\ rn -> (rn,+ case HM.maybeLookup tenv rn of+ Just r -> r+ Nothing -> panic "Cannot find type name to prefix")) tns+ return (rns, rnts)+ ns <- mapM (\ (rn, renamed) -> do+ let rn' = Qual prefix rn+ setRenamedName rn' $!+ if isParamterised then renamed { renamedNameVisibility = Instance }+ else renamed+ return rn') rns+ tns <- mapM (\ (rn, RenamedType t vis) -> do+ let rn' = Qual prefix rn+ setTypeWithVisibility rn' t (if isParamterised then Instance else vis)+ return rn') rnts+ return (ns, tns)++-- **********************+-- Renaming Class and basic instances++class Renamable e1 e2 | e1 -> e2 where+ rename :: e1 -> RenamerMonad e2++instance Renamable e1 e2 => Renamable [e1] [e2] where+ rename es = mapM rename es++instance Renamable e1 e2 => Renamable (Maybe e1) (Maybe e2) where+ rename (Just x) = return Just $$ rename x+ rename Nothing = return Nothing++instance Renamable e1 e2 => Renamable (Annotated a e1) (Annotated a e2) where+ rename (An a b e) = do+ setSrcSpan a+ rename e >>= return . An a b++instance (Renamable e1 e2, Renamable e1' e2') => Renamable (e1, e1') (e2, e2') where+ rename (a, b) = do+ a' <- rename a+ b' <- rename b+ return (a', b')++type NameMaker = SrcSpan -> UnRenamedName -> RenamerMonad Name++externalNameMaker :: Bool -> NameMaker+externalNameMaker b l unrn = do+ unrn <- qualifyName unrn+ mkExternalName unrn l b++internalNameMaker :: NameMaker+internalNameMaker l unrn = mkInternalName unrn l++reAnnotatePure :: Annotated a e -> e' -> Annotated a e'+reAnnotatePure (An a b _) v = An a b v++-- | Given something annotated and a function that mutates the inner object,+-- returns the inner object annotated with the same outer annotation.+reAnnotate :: Monad m => Annotated a e -> m e' -> m (Annotated a e')+reAnnotate (An a b _) m = do+ v <- m+ return $ An a b v++timedNames :: [String]+timedNames = ["timed_priority", "WAIT"]++joinName :: UnRenamedName -> UnRenamedName -> UnRenamedName+joinName (UnQual mn) x = Qual mn x+joinName (Qual x y) z = Qual x (joinName y z)++concatMapM' :: Monad m => (a -> m ([b], [c])) -> [a] -> m ([b], [c])+concatMapM' f xs = do+ bscs <- mapM f xs+ let (bs, cs) = unzip bscs+ return (concat bs, concat cs)++-- | Renames the declarations in the current scope.+renameDeclarations :: Bool -> [PDecl] -> RenamerMonad a -> RenamerMonad ([TCDecl], a)+renameDeclarations topLevel ds prog = do+ -- Check to see if any modules are multi-defined (although we check for+ -- duplicates below, because of the preprocessing that modules require this+ -- comes too late and would result in various odd errors being emitted).+ checkModuleNameDuplicates ds+ -- Insert the modules+ mapM_ insertModule ds+ -- Now, find all the datatype labels and channels and create names for+ -- them in the maps (otherwise renameVarLHS will fail).+ mapM_ insertLabels ds+ -- Firstly, check for duplicates amongst the definitions (this can only+ -- be done AFTER insertChannelsAndDatatTypes).+ checkDuplicates ds+ -- Secondly, insert all other names into the environment. We need to have+ -- inserted the channels by here to detect where names are pattern matched.+ mapM_ (insertBoundNames nameMaker) ds+ -- Finally, as all the declarations have been inserted into the map we+ -- can rename the right hand sides (as every variable *should* be in+ -- scope).+ ds' <- mapM renameRightHandSide ds+ -- check the inner thing+ a <- prog++ return (ds', a)++ where+ -- | Register all modules in the list of instances. This renames all+ -- modules (but not instances), and does so recursively if the module+ -- is not required to be instantiated.+ --+ -- By default all modules are bound with fully qualified names, but can+ -- have unqualLevel prefixes removed.+ insertModule :: PDecl -> RenamerMonad [UnRenamedName]+ insertModule ad = case unAnnotate ad of+ Module (UnQual nm) args privDs pubDs -> do+ -- Compute the module's actual name+ n <- nameMaker (loc ad) (UnQual nm)+ setModuleName (UnQual nm) n Public+ addModule n ad+ -- Add submodules recursively+ (ns, []) <- prefixNamesFromScope (args /= []) nm $ addModuleContext nm $ do+ ns1 <- concatMapM insertModule privDs+ ns2 <- concatMapM insertModule pubDs+ addBoundModuleModules n ns1 ns2+ let ns = ns1 ++ ns2+ setNameVisibilityInModule n ns []+ hideBoundNames ns1 []+ return $ (ns, [])+ return $ (UnQual nm):ns+ ModuleInstance (UnQual nm) nt args [] _ -> do+ mntarget <- lookupName nt True+ when (isNothing mntarget) $ do+ msg <- varNotInScopeMessage nt True+ throwSourceError [mkErrorMessage (loc ad) msg]+ let Just mtarget = mntarget+ -- Find the module+ minfo <- informationForModule (loc ad) nt+ -- Compute the module's actual name+ n <- nameMaker (loc ad) (UnQual nm)+ setModuleName (UnQual nm) n Public+ addModuleInstance n mtarget+ -- Add any submodules+ (ns, []) <- prefixNamesFromScope False nm $ addModuleContext nm $ do+ let makeModule rn = do+ n <- nameMaker (loc ad) rn+ vis <- nameVisibilityInModule nt rn+ setModuleName rn n vis+ Just nt <- lookupMaybeHiddenName (joinName nt rn) True+ addModuleInstance n nt+ return rn+ ns1 <- mapM makeModule (privateBoundModules minfo)+ ns2 <- mapM makeModule (publicBoundModules minfo)+ hideBoundNames ns1 []+ return $ (ns1++ns2, [])+ return $ (UnQual nm):ns+ _ -> return []++ nameMaker :: NameMaker+ nameMaker = if topLevel then externalNameMaker False else internalNameMaker++ ignoringNameMaker :: NameMaker+ ignoringNameMaker _ rn = do+ Just v <- lookupName rn False+ return v++ -- | Inserts channels and datatypes that are present in the top-level+ -- namespace. Returns the set of names that were bound.+ insertLabels :: PDecl -> RenamerMonad [UnRenamedName]+ insertLabels ad = case unAnnotate ad of+ Channel ns _ -> mapM (\ rn -> do+ n' <- externalNameMaker True (loc ad) rn+ setName rn n'+ return rn) ns+ DataType rn cs -> mapM (\ cl -> case unAnnotate cl of+ DataTypeClause rn _ -> do+ n' <- externalNameMaker True (loc cl) rn+ setName rn n'+ return rn+ ) cs+ Module (UnQual mn) args privDs pubDs -> do+ Just n <- lookupName (UnQual mn) True+ (ns, []) <- prefixNamesFromScope (args /= []) mn $ addModuleContext mn $ do+ privLabels <- concatMapM insertLabels privDs+ pubLabels <- concatMapM insertLabels pubDs+ addBoundModuleLabels n privLabels pubLabels+ let ns = privLabels ++ pubLabels+ setNameVisibilityInModule n ns []+ hideBoundNames privLabels []+ return (ns, [])+ return ns+ TimedSection _ _ ds -> concatMapM insertLabels ds+ ModuleInstance (UnQual mn) nt args [] _ -> do+ Just n <- lookupName (UnQual mn) True+ minfo <- informationForModule (loc ad) nt+ (ns, []) <- prefixNamesFromScope False mn $ addModuleContext mn $ do+ let makeLabel rn = do+ n' <- externalNameMaker True (loc ad) rn+ vis <- nameVisibilityInModule nt rn+ setNameWithVisibility rn n' vis+ return rn+ privLabels <- mapM makeLabel (privateBoundLabels minfo)+ pubLabels <- mapM makeLabel (publicBoundLabels minfo)+ hideBoundNames privLabels []+ return $! (privLabels ++ pubLabels, [])+ return ns+ _ -> return []++ insertBoundNames :: NameMaker -> PDecl ->+ RenamerMonad ([UnRenamedName], [UnRenamedName])+ insertBoundNames nameMaker pd = case unAnnotate pd of+ Assert _ -> return ([], [])+ Channel _ _ -> return ([], [])+ DataType rn _ -> do+ n <- nameMaker (loc pd) rn+ setName rn n+ setType rn (STDatatype n)+ return ([rn], [rn])+ SubType rn _ -> do+ n <- nameMaker (loc pd) rn+ setName rn n+ return ([rn], [])+ External ns -> concatMapM' (\ rn@(UnQual ocn) -> do+ case externalFunctionForOccName ocn of+ Just b -> do+ setName rn (name b)+ return ([rn], [])+ Nothing -> do+ addErrors [mkErrorMessage (loc pd) (externalFunctionNotRecognised rn)]+ return ([], [])) ns+ FunBind rn ms _ -> do+ n <- nameMaker (loc pd) rn+ setName rn n+ return ([rn], [])+ NameType rn _ -> do+ n <- nameMaker (loc pd) rn+ setName rn n+ return ([rn], [])+ PatBind p e _ -> do+ renamePattern nameMaker p+ vs <- freeVars p+ return (vs, [])+ Transparent ns ->+ concatMapM' (\ rn@(UnQual ocn) -> do+ case transparentFunctionForOccName ocn of+ Just b -> do+ setName rn (name b)+ return ([rn], [])+ Nothing -> do+ addErrors [mkErrorMessage (loc pd) (transparentFunctionNotRecognised rn)]+ return ([], [])) ns+ Module (UnQual mn) args privDs pubDs -> do+ Just n <- lookupName (UnQual mn) True+ prefixNamesFromScope (args /= []) mn $ addModuleContext mn $ do+ env <- gets environment+ checkDuplicates' $ map FreeVarElement args+ ++ map FreeVarElement (pubDs ++ privDs)+ (privNames, privTypes) <-+ concatMapM' (insertBoundNames nameMaker) privDs+ (pubNames, pubTypes) <-+ concatMapM' (insertBoundNames nameMaker) pubDs+ addBoundModuleBoundNames n privNames pubNames+ addBoundModuleTypeNames n privTypes pubTypes+ let ns = privNames ++ pubNames+ tns = privTypes ++ pubTypes+ setNameVisibilityInModule n ns tns+ hideBoundNames privNames privTypes+ return (ns, tns)+ ModuleInstance (UnQual mn) nt args nm _ -> do+ Just n <- lookupName (UnQual mn) True+ minfo <- informationForModule (loc pd) nt+ prefixNamesFromScope False mn $ addModuleContext mn $ do+ let makeName rn = do+ n' <- nameMaker (loc pd) rn+ vis <- nameVisibilityInModule nt rn+ setNameWithVisibility rn n' vis+ Just oldN <- lookupMaybeHiddenName (joinName nt rn)+ False+ return (rn, (oldN, n'))+ privNameMap <- mapM makeName (privateBoundNames minfo)+ pubNameMap <- mapM makeName (publicBoundNames minfo)+ let privNames = map fst privNameMap+ pubNames = map fst pubNameMap+ nameMap = map snd $ privNameMap ++ pubNameMap+ makeType rn = do+ vis <- typeNameVisibilityInModule nt rn+ Just (RenamedType rnt _) <-+ lookupType (joinName nt rn)+ setTypeWithVisibility rn (substituteType nameMap rnt) vis+ return rn+ privTypes <- mapM makeType (privateTypeNames minfo)+ pubTypes <- mapM makeType (publicTypeNames minfo)+ hideBoundNames privNames privTypes+ return $! (privNames ++ pubNames, privTypes ++ pubTypes)+ TimedSection _ _ ds -> do+ (rns, rnts) <- addScope $ do+ mapM_ (\ n -> setName (UnQual (OccName n)) (builtInName n))+ timedNames+ (rns, trns) <- concatMapM' (insertBoundNames nameMaker) ds+ env <- gets environment+ let ns = map (\ rn -> (rn, fromJust (HM.maybeLookup env rn))) rns+ return $! (ns, trns)+ mapM_ (\(rn, n) -> setRenamedName rn n) rns+ return (map fst rns, rnts)+ _ -> return ([], [])++ -- | resetModuleContext must be called in ALL cases, apart from the+ -- module context, otherwise names are incorrectly qualified within+ -- patterns etc.+ renameRightHandSide :: PDecl -> RenamerMonad TCDecl+ renameRightHandSide pd = reAnnotate pd $ case unAnnotate pd of+ Assert e -> resetModuleContext $ do+ e' <- addScope $ rename e+ return $ Assert e'+ Channel rns e -> resetModuleContext $ do+ ns <- mapM renameVarRHS rns+ e' <- addScope $ rename e+ return $ Channel ns e'+ DataType rn cs -> resetModuleContext $ do+ n <- renameVarRHS rn+ cs' <- mapM (\ pc -> addScope $ reAnnotate pc $ case unAnnotate pc of+ DataTypeClause rn e -> do+ n' <- renameVarRHS rn+ e' <- rename e+ return $ DataTypeClause n' e') cs+ return $ DataType n cs'+ SubType rn cs -> resetModuleContext $ do+ n <- renameVarRHS rn+ cs' <- mapM (\ pc -> addScope $ reAnnotate pc $ case unAnnotate pc of+ DataTypeClause rn e -> do+ n' <- renameVarRHS rn+ e' <- rename e+ return $ DataTypeClause n' e') cs+ return $ SubType n cs'+ External rns -> resetModuleContext $ do+ ns <- mapM renameVarRHS rns+ return $ External ns+ FunBind rn ms ta -> resetModuleContext $ do+ n <- renameVarRHS rn+ addTypeScope $ do+ -- Must be done here in types are in scope in expressions+ ta' <- rename ta+ ms' <- mapM rename ms+ return $ FunBind n ms' ta'+ NameType rn e -> resetModuleContext $ do+ n <- renameVarRHS rn+ e' <- addScope $ rename e+ return $ NameType n e'+ PatBind p e ta -> resetModuleContext $ do+ p' <- renamePattern ignoringNameMaker p+ addTypeScope $ do+ -- Must be done here in types are in scope in expressions+ ta' <- rename ta+ e' <- addScope $ rename e+ return $ PatBind p' e' ta'+ Transparent rns -> resetModuleContext $ do+ ns <- mapM renameVarRHS rns+ return $ Transparent ns+ Module (UnQual mn) args privDs pubDs -> do+ n' <- renameModuleVar (UnQual mn)+ unhideModuleNames mn $ addModuleContext mn $ do+ -- We also now insert the arguments. We insert the module+ -- context to ensure they are not qualified.+ args' <- resetModuleContext $+ mapM (renamePattern internalNameMaker) args+ -- Insert the arguments are rename the reset+ privDs' <- mapM renameRightHandSide privDs+ pubDs' <- mapM renameRightHandSide pubDs+ let m = Module n' args' privDs' pubDs'+ addBoundModuleRenamedVersion n' $ reAnnotatePure pd m+ return m+ ModuleInstance (UnQual mn) nt args [] _ -> do+ n' <- renameModuleVar (UnQual mn)+ nt' <- renameModuleVar nt+ args' <- resetModuleContext $ mapM (addScope . rename) args+ minfo <- informationForModule (loc pd) nt+ unhideModuleNames mn $ addModuleContext mn $ do+ nm1 <- mapM (\ rn -> do+ Just old <- lookupMaybeHiddenName (joinName nt rn) False+ Just new <- lookupMaybeHiddenName rn False+ return (new, old)+ ) (publicBoundNames minfo ++ privateBoundNames minfo +++ publicBoundLabels minfo ++ privateBoundLabels minfo)+ nm2 <- mapM (\ rn -> do+ Just old <- lookupMaybeHiddenName (joinName nt rn) True+ Just new <- lookupMaybeHiddenName rn True+ return (new, old)+ ) (publicBoundModules minfo ++ privateBoundModules minfo)+ return $ ModuleInstance n' nt' args' (nm1 ++ nm2)+ (renamedDeclaration minfo)+ TimedSection Nothing f ds -> do+ f' <- addScope $ rename f+ tock <- renameVarRHS (UnQual (OccName "tock"))+ addScope $ do+ mapM_ (\ n -> setName (UnQual (OccName n)) (builtInName n))+ timedNames+ ds' <- mapM renameRightHandSide ds+ return $ TimedSection (Just tock) f' ds'+ PrintStatement s -> return $ PrintStatement s++renamePattern :: NameMaker -> PPat -> RenamerMonad TCPat+renamePattern nm ap =+ let+ renamePat :: PPat -> RenamerMonad TCPat+ renamePat ap = reAnnotate ap $ case unAnnotate ap of+ PConcat p1 p2 -> return PConcat $$ renamePat p1 $$ renamePat p2+ PDotApp p1 p2 -> return PDotApp $$ renamePat p1 $$ renamePat p2+ PDoublePattern p1 p2 -> + return PDoublePattern $$ renamePat p1 $$ renamePat p2+ PList ps -> return PList $$ mapM renamePat ps+ PLit l -> return $ PLit l+ PParen p -> return PParen $$ renamePat p+ PSet ps -> return PSet $$ mapM renamePat ps+ PTuple ps -> return PTuple $$ mapM renamePat ps+ PVar v -> do+ -- In this case, we should lookup the variable in the map and see if it is+ -- bound. If it is and is a datatype constructor, then we should return+ -- return that, otherwise we create a new internal var.+ mn <- lookupName v False+ case mn of+ Just n | isNameDataConstructor n -> do+ -- Just return the name+ return (PVar n)+ _ ->+ case v of+ Qual _ _ -> do+ loc <- gets srcSpan+ addErrors [mkErrorMessage loc (qualifiedVarNotAllowedInPat (PVar v))]+ return $ panic "unknown name evaluated"+ UnQual _ -> do+ -- Create the name+ n <- nm (loc ap) v+ setName v n+ return $ PVar n+ PWildCard -> return PWildCard+ in do+ checkDuplicates [ap]+ renamePat ap++data FreeVarElement = forall a b . FreeVars a => FreeVarElement (Annotated b a)++instance FreeVars FreeVarElement where+ freeVars (FreeVarElement a) = freeVars a++newtype ModuleNameCheck = ModuleNameCheck UnRenamedName++instance FreeVars ModuleNameCheck where+ freeVars (ModuleNameCheck n) = return [n]++checkModuleNameDuplicates :: [PDecl] -> RenamerMonad ()+checkModuleNameDuplicates ds =+ let+ extractModuleNames :: PDecl -> [Annotated () ModuleNameCheck]+ extractModuleNames (An loc _ (Module (UnQual mn) _ privDs pubDs)) =+ An loc () (ModuleNameCheck (UnQual mn))+ : map (\ (An a b (ModuleNameCheck n)) ->+ An a b (ModuleNameCheck (Qual mn n)))+ (concatMap extractModuleNames (privDs ++ pubDs))+ extractModuleNames (An loc _ (ModuleInstance n _ _ _ _ )) =+ [An loc () (ModuleNameCheck n)]+ extractModuleNames (An _ _ (TimedSection _ _ ds)) =+ concatMap extractModuleNames ds+ extractModuleNames (An loc _ (Channel ns _)) =+ [An loc () (ModuleNameCheck n) | n <- ns]+ extractModuleNames (An loc _ (DataType n cs)) =+ [An loc () (ModuleNameCheck n') | An loc _ (DataTypeClause n' _) <- cs]+ extractModuleNames _ = []+ in checkDuplicates $ concatMap extractModuleNames ds++checkDuplicates :: FreeVars a => [Annotated b a] -> RenamerMonad ()+checkDuplicates aps = checkDuplicates' (map FreeVarElement aps)++checkDuplicates' :: [FreeVarElement] -> RenamerMonad ()+checkDuplicates' aps = do+ fvss <- mapM freeVars aps+ let+ fvs = sort (concat fvss)+ gfvs = group fvs+ duped = filter (\l -> length l > 1) gfvs+ nameLocMap =+ concatMap (\(ns, FreeVarElement d) -> [(n, loc d) | n <- ns]) + (zip fvss aps)++ loc <- gets srcSpan+ if duped /= [] then+ throwSourceError (map (mkErrorMessage loc)+ (duplicatedDefinitionsMessage nameLocMap))+ else return ()++-- | Rename a variable on the right hand side of a definition.+-- +-- If the variable does not exist it returns an error thunk and adds an error+-- that will be raised when the monad is evaluated.+renameVarRHS :: UnRenamedName -> RenamerMonad Name+renameVarRHS n = do+ mn <- lookupName n False+ case mn of+ Just x -> return x+ Nothing -> do+ msg <- varNotInScopeMessage n False+ loc <- gets srcSpan+ addErrors [mkErrorMessage loc msg]+ return $ panic "error name evaluated"++renameModuleVar :: UnRenamedName -> RenamerMonad Name+renameModuleVar n = do+ mn <- lookupName n True+ case mn of+ Just x -> return x+ Nothing -> do+ msg <- varNotInScopeMessage n True+ loc <- gets srcSpan+ addErrors [mkErrorMessage loc msg]+ return $ panic "error name evaluated"++checkFieldsValid :: [PField] -> RenamerMonad ()+checkFieldsValid fs = do+ let+ chk [] = True+ chk (NonDetInput _ _ : fs) = chk fs+ chk (_ : fs) = chk' fs++ chk' [] = True+ chk' (NonDetInput _ _ : fs) = False+ chk' (_ : fs) = chk' fs+ when (not (chk (map unAnnotate fs))) $ do+ loc <- gets srcSpan+ throwSourceError $ [mkErrorMessage loc $ invalidFieldsErrorMessage fs]++renameFields :: [PField] -> RenamerMonad a -> RenamerMonad ([TCField], a)+renameFields fs inner = do+ checkDuplicates fs+ checkFieldsValid fs+ -- No duplicates, so we can just add one scope+ addScope (do+ -- We do the fields left to right, to ensure that the scoping is correct++ -- Recall that c?x$y is equiv to |~| y:... @ [] x:... @ ... and hence+ -- the nondet fields bind first.++ -- Firstly, we do the nondet fields.+ fsNonDet <- mapM (\afd -> + case unAnnotate afd of+ Output e -> return Nothing+ Input p me -> return Nothing+ NonDetInput p me -> do+ me' <- rename me+ p' <- renamePattern internalNameMaker p+ return $ Just $ reAnnotatePure afd $ NonDetInput p' me') fs++ fsDet <- mapM (\ afd ->+ case unAnnotate afd of+ Output e -> do+ e' <- rename e+ return $ Just $ reAnnotatePure afd $ Output e'+ Input p me -> do+ -- Rename me first, as it can't depend on p+ me' <- rename me+ p' <- renamePattern internalNameMaker p+ return $ Just $ reAnnotatePure afd $ Input p' me'+ NonDetInput p me -> return Nothing) fs+ + let + combineJusts :: [Maybe a] -> [Maybe a] -> [a]+ combineJusts [] [] = []+ combineJusts (Just x:xs) (Nothing:ys) = x:combineJusts xs ys+ combineJusts (Nothing:xs) (Just y:ys) = y:combineJusts xs ys++ fs' :: [TCField]+ fs' = combineJusts fsNonDet fsDet++ -- all fields renamed, now rename the inner thing+ a <- inner+ return (fs', a))++renameStatements :: [PStmt] -> RenamerMonad a -> RenamerMonad ([TCStmt], a)+renameStatements stmts inner = do+ checkDuplicates stmts+ -- No duplicates, so we can just add one scope+ addScope (do+ -- We do the stmts left to right, to ensure that the scoping is correct+ stmts' <- mapM (\ astmt -> reAnnotate astmt $ + case unAnnotate astmt of+ Generator p e -> do+ -- Rename e first, as it can't depend on p+ e' <- rename e+ p' <- renamePattern internalNameMaker p+ return $ Generator p' e'+ Qualifier e -> do+ e' <- rename e+ return $ Qualifier e'+ ) stmts+ -- all stmts renamed, now rename the inner thing+ a <- inner+ return (stmts', a))++instance Renamable (Match UnRenamedName) (Match Name) where+ rename (Match pss e) = addScope $ do+ checkDuplicates (concat pss)+ pss' <- mapM (mapM (renamePattern internalNameMaker)) pss+ e' <- rename e+ return $ Match pss' e'++instance Renamable (InteractiveStmt UnRenamedName) (InteractiveStmt Name) where+ rename (Bind ds) = do+ (ds',_) <- renameDeclarations True ds (return ())+ return $ Bind ds'+ rename (Evaluate e) = return Evaluate $$ rename e+ rename (RunAssertion a) = return RunAssertion $$ rename a++instance Renamable (CSPMFile UnRenamedName) (CSPMFile Name) where+ rename (CSPMFile ds) = do+ (ds', _) <- renameDeclarations True ds (return ())+ return $ CSPMFile ds'++instance Renamable (Assertion UnRenamedName) (Assertion Name) where+ rename (ASNot e) =+ return ASNot $$ rename e+ rename (Refinement e1 m e2 mopts) = + return Refinement $$ rename e1 $$ return m $$ rename e2 $$ rename mopts+ rename (PropertyCheck e1 p m) =+ return PropertyCheck $$ rename e1 $$ return p $$ return m++instance Renamable (ModelOption UnRenamedName) (ModelOption Name) where+ rename (TauPriority e) = return TauPriority $$ rename e++instance Renamable (Exp UnRenamedName) (Exp Name) where+ rename (App e es) = return App $$ rename e $$ rename es+ rename (BooleanBinaryOp op e1 e2) = return + (BooleanBinaryOp op) $$ rename e1 $$ rename e2+ rename (BooleanUnaryOp op e) = return+ (BooleanUnaryOp op) $$ rename e+ rename (Concat e1 e2) = return Concat $$ rename e1 $$ rename e2+ rename (DotApp e1 e2) = return DotApp $$ rename e1 $$ rename e2+ rename (If e1 e2 e3) = return If $$ rename e1 $$ rename e2 $$ rename e3+ rename (Lambda ps e) = do+ (ps', e') <- addScope (do+ ps' <- mapM (renamePattern internalNameMaker) ps+ e' <- rename e+ return (ps', e'))+ return $ Lambda ps' e'+ rename (Let ds e) = do+ (ds', e') <- addScope $ renameDeclarations False ds (rename e)+ return $ Let ds' e'+ rename (Lit l) = return $ Lit l+ rename (List es) = return List $$ rename es+ rename (ListComp es stmts) = do+ (stmts', es') <- renameStatements stmts (rename es)+ return $ ListComp es' stmts'+ rename (ListEnumFrom e) = return ListEnumFrom $$ rename e+ rename (ListEnumFromTo e1 e2) = return ListEnumFromTo $$ rename e1 $$ rename e2+ rename (ListEnumFromComp e stmts) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ ListEnumFromComp e' stmts'+ rename (ListEnumFromToComp e1 e2 stmts) = do+ (stmts', (e1', e2')) <- renameStatements stmts $ do+ e1' <- rename e1+ e2' <- rename e2+ return (e1', e2')+ return $ ListEnumFromToComp e1' e2' stmts'+ rename (ListLength e) = return ListLength $$ rename e+ rename (Map kvs) = return Map $$ rename kvs+ rename (MathsBinaryOp op e1 e2) = return + (MathsBinaryOp op) $$ rename e1 $$ rename e2+ rename (MathsUnaryOp op e) = return (MathsUnaryOp op) $$ rename e+ rename (Paren e) = return Paren $$ rename e+ rename (Set es) = return Set $$ rename es+ rename (SetComp es stmts) = do+ (stmts', es') <- renameStatements stmts (rename es)+ return $ SetComp es' stmts'+ rename (SetEnum es) = return SetEnum $$ rename es+ rename (SetEnumComp es stmts) = do+ (stmts', es') <- renameStatements stmts (rename es)+ return $ SetEnumComp es' stmts'+ rename (SetEnumFrom e) = return SetEnumFrom $$ rename e+ rename (SetEnumFromTo e1 e2) = return SetEnumFromTo $$ rename e1 $$ rename e2+ rename (SetEnumFromComp e stmts) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ SetEnumFromComp e' stmts'+ rename (SetEnumFromToComp e1 e2 stmts) = do+ (stmts', (e1', e2')) <- renameStatements stmts $ do+ e1' <- rename e1+ e2' <- rename e2+ return (e1', e2')+ return $ SetEnumFromToComp e1' e2' stmts'+ rename (Tuple es) = return Tuple $$ rename es+ rename (Var n) = return Var $$ renameVarRHS n++ rename (AlphaParallel e1 e2 e3 e4) = return+ AlphaParallel $$ rename e1 $$ rename e2 $$ rename e3 $$ rename e4+ rename (Exception e1 e2 e3) = return+ Exception $$ rename e1 $$ rename e2 $$ rename e3+ rename (ExternalChoice e1 e2) = return ExternalChoice $$ rename e1 $$ rename e2+ rename (GenParallel e1 e2 e3) = return+ GenParallel $$ rename e1 $$ rename e2 $$ rename e3+ rename (GuardedExp e1 e2) = return GuardedExp $$ rename e1 $$ rename e2+ rename (Hiding e1 e2) = return Hiding $$ rename e1 $$ rename e2+ rename (InternalChoice e1 e2) = return InternalChoice $$ rename e1 $$ rename e2+ rename (Interrupt e1 e2) = return Interrupt $$ rename e1 $$ rename e2+ rename (Interleave e1 e2) = return Interleave $$ rename e1 $$ rename e2+ rename (LinkParallel e1 ties stmts e2) = do+ e1' <- rename e1+ e2' <- rename e2+ (stmts', ties') <- renameStatements stmts (rename ties)+ return $ LinkParallel e1' ties' stmts' e2'+ rename (Prefix e1 fs e2) = do+ e1' <- rename e1+ (fs', e2') <- renameFields fs (rename e2)+ return $ Prefix e1' fs' e2'+ rename (Rename e1 ties stmts) = do+ e1' <- rename e1+ (stmts', ties') <- renameStatements stmts (rename ties)+ return $ Rename e1' ties' stmts'+ rename (SequentialComp e1 e2) = return SequentialComp $$ rename e1 $$ rename e2+ rename (SlidingChoice e1 e2) = return SlidingChoice $$ rename e1 $$ rename e2+ rename (SynchronisingExternalChoice e1 e2 e3) =+ return SynchronisingExternalChoice $$ rename e1 $$ rename e2 $$ rename e3+ rename (SynchronisingInterrupt e1 e2 e3) =+ return SynchronisingInterrupt $$ rename e1 $$ rename e2 $$ rename e3++ rename (ReplicatedAlphaParallel stmts e1 e2) = do+ (stmts', (e1', e2')) <- renameStatements stmts (do+ e1' <- rename e1+ e2' <- rename e2+ return (e1', e2'))+ return $ ReplicatedAlphaParallel stmts' e1' e2'+ rename (ReplicatedInterleave stmts e) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ ReplicatedInterleave stmts' e'+ rename (ReplicatedExternalChoice stmts e) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ ReplicatedExternalChoice stmts' e'+ rename (ReplicatedInternalChoice stmts e) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ ReplicatedInternalChoice stmts' e'+ rename (ReplicatedParallel e1 stmts e2) = do+ e1' <- rename e1+ (stmts', e2') <- renameStatements stmts (rename e2)+ return $ ReplicatedParallel e1' stmts' e2'+ rename (ReplicatedLinkParallel ties tiesStmts stmts e) = do+ (stmts', (e', ties', tiesStmts')) <- renameStatements stmts (do+ e' <- rename e+ (tiesStmts', ties') <- renameStatements tiesStmts (rename ties)+ return (e', ties', tiesStmts'))+ return $ ReplicatedLinkParallel ties' tiesStmts' stmts' e'+ rename (ReplicatedSequentialComp stmts e) = do+ (stmts', e') <- renameStatements stmts (rename e)+ return $ ReplicatedSequentialComp stmts' e'+ rename (ReplicatedSynchronisingExternalChoice e1 stmts e2) = do+ e1' <- rename e1+ (stmts', e2') <- renameStatements stmts (rename e2)+ return $ ReplicatedSynchronisingExternalChoice e1' stmts' e2'++instance Renamable (STypeScheme UnRenamedName) (STypeScheme Name) where+ rename (STypeScheme [] cs t) = do+ loc <- gets srcSpan+ -- Inject the type-variables we need+ tvars <- freeTypeVars t >>= return+ . nubBy (\ x y -> fst x == fst y)+ . sortBy (\ x y -> compare (fst x) (fst y))+ ns <- mapM (\ (rn, _) -> do+ n <- internalNameMaker loc rn+ setType rn $ STVar n+ return n) tvars+ mapM_ ( \ (An loc _ (c@(STypeConstraint _ n))) -> do+ n' <- renameTypeVar n+ case n' of+ Just (STVar n') | not (n' `elem` ns) -> + let msg = invalidTypeConstraintLocation c n'+ in addErrors [mkErrorMessage loc msg]+ _ -> return ()+ ) cs+ return STypeScheme $$ return ns $$ rename cs $$ rename t++instance Renamable (STypeConstraint UnRenamedName) (STypeConstraint Name) where+ rename (STypeConstraint c n) =+ return STypeConstraint $$ return c $$ do+ n' <- renameTypeVar n + case n' of+ Nothing -> return renameTypeVarThunk+ Just (STVar n) -> return n+ Just t -> do+ loc <- gets srcSpan+ let msg = invalidTypeConstraintVariable t+ addErrors [mkErrorMessage loc msg]+ return renameTypeVarThunk++instance Renamable (SType UnRenamedName) (SType Name) where+ rename (STVar n) = renameTypeVar' n+ rename (STExtendable t n) =+ return STExtendable $$ rename t $$ do+ n' <- renameTypeVar n+ case n' of+ Nothing -> return renameTypeVarThunk+ Just (STVar n) -> return n+ Just t -> do+ loc <- gets srcSpan+ let msg = invalidExtendableTypeVariable t+ addErrors [mkErrorMessage loc msg]+ return $ panic "renameSTExtendable: error thunk"+ rename (STSet t) = return STSet $$ rename t+ rename (STSeq t) = return STSeq $$ rename t+ rename (STDot t1 t2) = return STDot $$ rename t1 $$ rename t2+ rename (STMap t1 t2) = return STMap $$ rename t1 $$ rename t2+ rename (STTuple ts) = return STTuple $$ rename ts+ rename (STFunction args rt) = return STFunction $$ rename args $$ rename rt+ rename (STDotable t1 t2) = return STDotable $$ rename t1 $$ rename t2+ rename (STParen t) = return STParen $$ rename t++substituteType :: [(Name, Name)] -> SType Name -> SType Name+substituteType nm t =+ let+ m = M.fromList nm+ sub :: TCSType -> TCSType+ sub ad = reAnnotatePure ad (sub' (unAnnotate ad))+ sub' :: SType Name -> SType Name+ sub' (STVar n) = STVar (M.findWithDefault n n m)+ sub' (STExtendable t n) = STExtendable (sub t) (M.findWithDefault n n m)+ sub' (STSet t) = STSet (sub t)+ sub' (STSeq t) = STSeq (sub t)+ sub' (STDot t1 t2) = STDot (sub t1) (sub t2)+ sub' (STMap t1 t2) = STMap (sub t1) (sub t2)+ sub' (STTuple ts) = STTuple (map sub ts)+ sub' (STFunction args rt) = STFunction (map sub args) (sub rt)+ sub' (STDotable t1 t2) = STDotable (sub t1) (sub t2)+ sub' (STParen t) = STParen (sub t)+ sub' (STDatatype n) = STDatatype (M.findWithDefault n n m)+ in sub' t++renameTypeVarThunk :: a+renameTypeVarThunk = panic "renameTypeVar': error thunk evaluated"++renameTypeVar' :: UnRenamedName -> RenamerMonad (SType Name)+renameTypeVar' n = do+ mn <- renameTypeVar n+ case mn of+ Just n -> return n+ Nothing -> return renameTypeVarThunk++renameTypeVar :: UnRenamedName -> RenamerMonad (Maybe (SType Name))+renameTypeVar n = do+ mn <- lookupType n+ case mn of+ Just x | renamedTypeVisibility x == Public -> return $ Just $ renamedType x+ _ -> do+ msg <- typeVarNotInScopeMessage n+ loc <- gets srcSpan+ addErrors [mkErrorMessage loc msg]+ return Nothing++class FreeVars a where+ freeVars :: a -> RenamerMonad [UnRenamedName]++instance FreeVars a => FreeVars [a] where+ freeVars xs = concatMapM freeVars xs+ +instance FreeVars a => FreeVars (Annotated b a) where+ freeVars (An _ _ inner) = freeVars inner++instance FreeVars (Pat UnRenamedName) where+ freeVars (PConcat p1 p2) = do+ fvs1 <- freeVars p1+ fvs2 <- freeVars p2+ return $ fvs1++fvs2+ freeVars (PDotApp p1 p2) = freeVars [p1,p2]+ freeVars (PDoublePattern p1 p2) = do+ fvs1 <- freeVars p1+ fvs2 <- freeVars p2+ return $ fvs1++fvs2+ freeVars (PList ps) = freeVars ps+ freeVars (PLit l) = return []+ freeVars (PParen p) = freeVars p+ freeVars (PSet ps) = freeVars ps+ freeVars (PTuple ps) = freeVars ps+ freeVars (PVar n) = do+ mn <- lookupName n False+ case mn of+ Just n | isNameDataConstructor n -> return []+ _ -> case n of+ Qual _ _ -> return [] -- we pick the error up in renamePattern+ _ -> return [n]+ freeVars (PWildCard) = return []++instance FreeVars (Stmt UnRenamedName) where+ freeVars (Qualifier e) = return []+ freeVars (Generator p e) = freeVars p++instance FreeVars (Field UnRenamedName) where+ freeVars (Input p e) = freeVars p+ freeVars (NonDetInput p e) = freeVars p+ freeVars (Output e) = return []++instance FreeVars (Decl UnRenamedName) where+ freeVars (Assert _) = return []+ freeVars (External ns) = return ns+ freeVars (Channel ns _) = return ns+ freeVars (DataType n cs) =+ return $ n : [n' | DataTypeClause n' _ <- map unAnnotate cs]+ freeVars (SubType n _) = return [n]+ freeVars (FunBind n _ _) = return [n]+ freeVars (NameType n _) = return [n]+ freeVars (PatBind p _ _) = freeVars p+ freeVars (Transparent ns) = return ns+ freeVars (Module (UnQual n) _ _ expDs) = do+ ns <- freeVars expDs+ return $ UnQual n : map (Qual n) ns+ freeVars (TimedSection _ _ ds) = freeVars ds+ freeVars (ModuleInstance (UnQual n) nt _ _ _) = do+ return $ [UnQual n]+ freeVars (PrintStatement _) = return []++freeTypeVars :: PSType -> RenamerMonad [(UnRenamedName, SrcSpan)]+freeTypeVars st =+ let+ freeTypeVarsL = concatMapM freeTypeVars+ freeVars (STVar (Qual _ _)) = return []+ freeVars (STVar n) = do+ mt <- lookupType n+ return $! case mt of+ Just x | renamedTypeVisibility x == Public -> []+ Nothing -> [(n, loc st)]+ freeVars (STExtendable t (Qual _ _)) = freeTypeVars t+ freeVars (STExtendable t n) = do+ ns <- freeTypeVars t+ mt <- lookupType n+ return $! case mt of+ Just x | renamedTypeVisibility x == Public -> ns+ Nothing -> (n, loc st):ns+ freeVars (STSet t) = freeTypeVars t+ freeVars (STSeq t) = freeTypeVars t+ freeVars (STDot t1 t2) = freeTypeVarsL [t1, t2]+ freeVars (STMap t1 t2) = freeTypeVarsL [t1, t2]+ freeVars (STTuple ts) = freeTypeVarsL ts+ freeVars (STFunction args rt) = freeTypeVarsL (rt:args)+ freeVars (STDotable t1 t2) = freeTypeVarsL [t1, t2]+ freeVars (STParen t) = freeTypeVars t+ in freeVars (unAnnotate st)++-- ********************+-- Error Messages++type Error = Doc++duplicatedDefinitionsMessage :: [(UnRenamedName, SrcSpan)] -> [Error]+duplicatedDefinitionsMessage ns = duplicatedDefinitionsMessage' $+ let+ names = map fst ns+ dupNames = (map head . filter (\ g -> length g > 1) . group . sort) names+ in [(n, applyRelation ns n) | n <- dupNames]++duplicatedDefinitionsMessage' :: [(UnRenamedName, [SrcSpan])] -> [Error]+duplicatedDefinitionsMessage' nlocs = + map (\ (n, spans) ->+ hang (text "The variable" <+> prettyPrint n + <+> text "has multiple definitions at" <> colon) tabWidth+ (vcat (map prettyPrint (sort spans)))) nlocs++transparentFunctionNotRecognised :: UnRenamedName -> Error+transparentFunctionNotRecognised n =+ text "The transparent function" <+> prettyPrint n <+> + text "is not recognised."++externalFunctionNotRecognised :: UnRenamedName -> Error+externalFunctionNotRecognised n = + text "The external function" <+> prettyPrint n <+> + text "is not recognised."++varNotInScopeMessage :: UnRenamedName -> Bool -> RenamerMonad Error+varNotInScopeMessage n isModule = do+ mv <- lookupMaybeHiddenName n isModule+ if isJust mv then do+ vis <- currentVisibilityOfName n+ let n = fromJust mv+ return $+ (if isModule then text "The module " else empty) <>+ prettyPrint n <+> text "is not in scope"+ P.$$ tabIndent (+ text "Defined"+ <+> case vis of+ Public -> panic "Cannot not be in scope"+ Private -> text "privately"+ Instance -> text "inside a parameterised module"+ <+> case nameDefinition n of+ Unknown -> empty+ l -> parens (text "at" <+> prettyPrint l)+ P.$$ case vis of+ Public -> panic "Cannot not be in scope"+ Private -> text "Hint: move to the exports section"+ Instance -> text "Hint: create a module instance")+ else do+ env <- gets environment+ let availablePp =+ [(show $ prettyPrint rn, (rn, n))+ | (rn, RenamedName n b Public) <- HM.flatten env, b == isModule]+ suggestions = fuzzyLookup (show $ prettyPrint n) availablePp++ availableTransExtern = if isModule then [] else+ [(stringName b, b) | b <- builtins True,+ isTransparent b || isExternal b]+ builtinSuggestions = fuzzyLookup (show $ prettyPrint n) availableTransExtern+ return $+ (if isModule then text "The module " else empty) <>+ (prettyPrint n <+> text "is not in scope")+ P.$$ case suggestions of+ [] -> case builtinSuggestions of+ [] -> empty+ xs -> hang (text "Did you mean:") tabWidth (vcat (+ map (\ b ->+ prettyPrint (name b)+ <+> parens (text "import using" <+> quotes (+ (text $ if isTransparent b then "transparent" else "external")+ <+> prettyPrint (name b)+ ))) builtinSuggestions+ ))+ _ -> hang (text "Did you mean:") tabWidth (vcat (+ (map (\ (rn, n) -> + prettyPrint rn <+>+ case nameDefinition n of+ Unknown -> empty+ l -> parens (text "defined at" <+> prettyPrint l)+ ) suggestions)))++typeVarNotInScopeMessage :: UnRenamedName -> RenamerMonad Error+typeVarNotInScopeMessage n = do+ env <- gets typeEnvironment+ let mv = HM.maybeLookup env n+ if isJust mv then do+ let Just rnt = mv+ vis = renamedTypeVisibility rnt+ t = renamedType rnt+ return $+ (text "The type-variable" <+> prettyPrint n+ <+> text "is not in scope")+ P.$$ tabIndent (+ text "Defined"+ <+> case vis of+ Public -> panic "Cannot not be in scope"+ Private -> text "privately"+ Instance -> text "inside a parameterised module"+ <+> case t of+ STVar n | nameDefinition n /= Unknown ->+ parens (text "at" <+> prettyPrint (nameDefinition n))+ _ -> empty+ P.$$ case vis of+ Public -> panic "Cannot not be in scope"+ Private -> text "Hint: move to the exports section"+ Instance -> text "Hint: create a module instance")+ else do+ let availablePp = [(show $ prettyPrint rn, (rn, n)) |+ (rn, RenamedType n Public) <- HM.flatten env]+ suggestions = fuzzyLookup (show $ prettyPrint n) availablePp+ return $ + (text "The type-variable" <+> prettyPrint n <+> text "is not in scope")+ P.$$ case suggestions of+ [] -> empty+ _ -> hang (text "Did you mean:") tabWidth (vcat (+ (map (\ (rn, t) -> + prettyPrint rn <+>+ case t of + STVar n | nameDefinition n /= Unknown ->+ parens (text "defined at" <+> prettyPrint+ (nameDefinition n))+ _ -> empty+ ) suggestions)))++qualifiedVarNotAllowedInPat :: Pat UnRenamedName -> Error+qualifiedVarNotAllowedInPat p =+ prettyPrint p <+>+ text "is an invalid pattern as non-datatype/channel qualified names are not allowed"++invalidFieldsErrorMessage :: [PField] -> Error+invalidFieldsErrorMessage fs =+ hcat (map prettyPrint fs) <+>+ text "is not a valid field sequence as a $ occurs after a ? or a !."++invalidExtendableTypeVariable :: PrettyPrintable id => SType id -> Error+invalidExtendableTypeVariable t = + text "The type" <+> prettyPrint t+ P.$$ text "is not valid as the left hand side of =>*, which must be a type-variable."++invalidTypeConstraintVariable :: PrettyPrintable id => SType id -> Error+invalidTypeConstraintVariable t =+ text "The type" <+> prettyPrint t <+>+ text "cannot be constrainted using a type constraint"+ P.$$ text "as only type variables may be constrained."++invalidTypeConstraintLocation :: PrettyPrintable id => STypeConstraint id ->+ Name -> Error+invalidTypeConstraintLocation c typeVar =+ text "The type constraint" <+> prettyPrint c <+>+ text "cannot be specified at this location, since"+ P.$$ text "the type-variable it refers to, i.e." <+> prettyPrint typeVar <>+ text ", was bound in the type annotation at:"+ P.$$ tabIndent (prettyPrint (nameDefinition typeVar))
src/CSPM/TypeChecker.hs view
@@ -1,8 +1,10 @@ {-# LANGUAGE FlexibleContexts #-} module CSPM.TypeChecker ( typeCheck, typeCheckExpect,- typeOfExp, dependenciesOfExp,- + typeOfExp, typeOfName,++ ErrorOptions, modifyErrorOptions,+ initTypeChecker, TypeCheckMonad, TypeInferenceState, runTypeChecker, runFromStateToState,@@ -11,16 +13,15 @@ import Control.Monad.Trans import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax+import CSPM.DataStructures.Syntax hiding (getType) import CSPM.DataStructures.Types import CSPM.TypeChecker.BuiltInFunctions import qualified CSPM.TypeChecker.Common as TC import CSPM.TypeChecker.Compressor-import CSPM.TypeChecker.Dependencies-import CSPM.TypeChecker.Environment-import CSPM.TypeChecker.Expr-import CSPM.TypeChecker.InteractiveStmt-import CSPM.TypeChecker.Module+import CSPM.TypeChecker.Exceptions+import CSPM.TypeChecker.Expr()+import CSPM.TypeChecker.File()+import CSPM.TypeChecker.InteractiveStmt() import CSPM.TypeChecker.Monad import CSPM.TypeChecker.Unification import Util.Annotated@@ -57,6 +58,5 @@ Just t -> evaluateDots t >>= compress Nothing -> typeCheck exp >> typeOfExp exp --- | Returns the list of names that this expression depends on-dependenciesOfExp :: TCExp -> TypeCheckMonad [Name]-dependenciesOfExp exp = dependencies exp+typeOfName :: Name -> TypeCheckMonad TypeScheme+typeOfName = getType
src/CSPM/TypeChecker/BuiltInFunctions.hs view
@@ -5,8 +5,6 @@ import Control.Monad -import CSPM.DataStructures.Names-import CSPM.DataStructures.Types import CSPM.Prelude import CSPM.TypeChecker.Monad hiding (isDeprecated, isTypeUnsafe)
src/CSPM/TypeChecker/Common.hs view
@@ -2,13 +2,9 @@ module CSPM.TypeChecker.Common where import CSPM.DataStructures.Literals-import CSPM.DataStructures.Syntax import CSPM.DataStructures.Types-import CSPM.TypeChecker.BuiltInFunctions-import CSPM.TypeChecker.Exceptions import CSPM.TypeChecker.Monad import CSPM.TypeChecker.Unification-import Util.PrettyPrint -- a -> b <=> We can't have two instances that match on a but differ on b class TypeCheckable a b | a -> b where@@ -25,9 +21,11 @@ errorContext :: a -> Maybe ErrorContext instance TypeCheckable Literal Type where- errorContext a = Nothing- typeCheck' (Int n) = return TInt- typeCheck' (Bool b) = return TBool+ errorContext _ = Nothing+ typeCheck' (Int _) = return TInt+ typeCheck' (Bool _) = return TBool+ typeCheck' (Char _) = return TChar+ typeCheck' (String _) = return $ TSeq TChar ensureAreEqual :: TypeCheckable a Type => [a] -> TypeCheckMonad Type ensureAreEqual [] = freshTypeVar@@ -43,7 +41,7 @@ ensureIsSet :: TypeCheckable a b => a -> TypeCheckMonad b ensureIsSet e = do- fv <- freshTypeVarWithConstraints [Eq]+ fv <- freshTypeVarWithConstraints [CSet] typeCheckExpect e (TSet fv) ensureIsBool :: TypeCheckable a b => a -> TypeCheckMonad b@@ -53,8 +51,13 @@ ensureIsInt e = typeCheckExpect e TInt ensureIsChannel :: TypeCheckable a b => a -> TypeCheckMonad b-ensureIsChannel e = typeCheckExpect e TEventable+ensureIsChannel e = ensureIsExtendable e TEvent +ensureIsExtendable :: TypeCheckable a b => a -> Type -> TypeCheckMonad b+ensureIsExtendable e t = do+ tvref <- freshTypeVarRef []+ typeCheckExpect e (TExtendable t tvref)+ ensureIsEvent :: TypeCheckable a b => a -> TypeCheckMonad b ensureIsEvent e = typeCheckExpect e TEvent @@ -65,4 +68,3 @@ ensureHasConstraint c t = do fv1 <- freshTypeVarWithConstraints [c] unify fv1 t-
src/CSPM/TypeChecker/Compressor.hs view
@@ -61,7 +61,12 @@ mcompress (ListComp es stmts) = return ListComp $$ mcompress es $$ mcompress stmts mcompress (ListEnumFrom e) = return ListEnumFrom $$ mcompress e mcompress (ListEnumFromTo e1 e2) = return ListEnumFromTo $$ mcompress e1 $$ mcompress e2+ mcompress (ListEnumFromComp e stmts) =+ return ListEnumFromComp $$ mcompress e $$ mcompress stmts+ mcompress (ListEnumFromToComp e1 e2 stmts) =+ return ListEnumFromToComp $$ mcompress e1 $$ mcompress e2 $$ mcompress stmts mcompress (ListLength e) = return ListLength $$ mcompress e+ mcompress (Map kvs) = return Map $$ mcompress kvs mcompress (MathsBinaryOp op e1 e2) = return (MathsBinaryOp op) $$ mcompress e1 $$ mcompress e2 mcompress (MathsUnaryOp op e) = return (MathsUnaryOp op) $$ mcompress e@@ -73,6 +78,10 @@ mcompress (SetEnumComp es stmts) = return SetEnumComp $$ mcompress es $$ mcompress stmts mcompress (SetEnumFrom e) = return SetEnumFrom $$ mcompress e mcompress (SetEnumFromTo e1 e2) = return SetEnumFromTo $$ mcompress e1 $$ mcompress e2+ mcompress (SetEnumFromComp e stmts) =+ return SetEnumFromComp $$ mcompress e $$ mcompress stmts+ mcompress (SetEnumFromToComp e1 e2 stmts) =+ return SetEnumFromToComp $$ mcompress e1 $$ mcompress e2 $$ mcompress stmts mcompress (Tuple es) = return Tuple $$ mcompress es mcompress (Var n) = return (Var n) @@ -95,6 +104,12 @@ Rename $$ mcompress e1 $$ mcompress ties $$ mcompress stmts mcompress (SequentialComp e1 e2) = return SequentialComp $$ mcompress e1 $$ mcompress e2 mcompress (SlidingChoice e1 e2) = return SlidingChoice $$ mcompress e1 $$ mcompress e2+ mcompress (SynchronisingExternalChoice e1 e2 e3) =+ return SynchronisingExternalChoice $$ mcompress e1 $$ mcompress e2+ $$ mcompress e3+ mcompress (SynchronisingInterrupt e1 e2 e3) =+ return SynchronisingInterrupt $$ mcompress e1 $$ mcompress e2+ $$ mcompress e3 mcompress (ReplicatedAlphaParallel stmts e1 e2) = return ReplicatedAlphaParallel $$ mcompress stmts $$ mcompress e1 $$ mcompress e2@@ -109,25 +124,42 @@ mcompress (ReplicatedLinkParallel ties tiesStmts stmts e) = return ReplicatedLinkParallel $$ mcompress ties $$ mcompress tiesStmts $$ mcompress stmts $$ mcompress e+ mcompress (ReplicatedSequentialComp stmts e1) =+ return ReplicatedSequentialComp $$ mcompress stmts $$ mcompress e1+ mcompress (ReplicatedSynchronisingExternalChoice e1 stmts e3) =+ return ReplicatedSynchronisingExternalChoice $$ mcompress e1+ $$ mcompress stmts $$ mcompress e3 -instance Compressable (Module a) where- mcompress (GlobalModule ds) = return GlobalModule $$ mcompress ds+instance Compressable (CSPMFile a) where+ mcompress (CSPMFile ds) = return CSPMFile $$ mcompress ds instance Compressable (Decl a) where- mcompress (FunBind n ms) = return (FunBind n) $$ mcompress ms- mcompress (PatBind p e) = return PatBind $$ mcompress p $$ mcompress e+ mcompress (FunBind n ms ta) =+ return (FunBind n) $$ mcompress ms $$ mcompress ta+ mcompress (PatBind p e ta) =+ return PatBind $$ mcompress p $$ mcompress e $$ mcompress ta mcompress (Assert a) = return Assert $$ mcompress a mcompress (External ns) = return (External ns) mcompress (Transparent ns) = return (Transparent ns) mcompress (Channel ns me) = return (Channel ns) $$ mcompress me mcompress (DataType n cs) = return (DataType n) $$ mcompress cs+ mcompress (SubType n cs) = return (SubType n) $$ mcompress cs mcompress (NameType n e) = return (NameType n) $$ mcompress e+ mcompress (Module n args ds1 ds2) =+ return (Module n) $$ mcompress args $$ mcompress ds1 $$ mcompress ds2+ mcompress (ModuleInstance n nt args nm rnm) =+ return (ModuleInstance n) $$ return nt $$ mcompress args $$ return nm $$+ mcompress rnm+ mcompress (TimedSection mn f ds) =+ return TimedSection $$ return mn $$ mcompress f $$ mcompress ds+ mcompress (PrintStatement s) = return $ PrintStatement s instance Compressable (Assertion a) where mcompress (Refinement e1 m e2 opts) = return Refinement $$ mcompress e1 $$ mcompress m $$ mcompress e2 $$ mcompress opts mcompress (PropertyCheck e p m) = return PropertyCheck $$ mcompress e $$ mcompress p $$ mcompress m+ mcompress (ASNot a) = return ASNot $$ mcompress a instance Compressable (ModelOption a) where mcompress (TauPriority e) = return TauPriority $$ mcompress e@@ -171,3 +203,5 @@ mcompress l = return l instance Compressable Literal where mcompress l = return l+instance Compressable (STypeScheme a) where+ mcompress x = return x
src/CSPM/TypeChecker/Decl.hs view
@@ -2,63 +2,76 @@ module CSPM.TypeChecker.Decl (typeCheckDecls) where import Control.Monad-import Control.Monad.Trans import Data.Graph.Wrapper import qualified Data.Map as M import qualified Data.Set as S-import Data.List (nub, intersect, (\\), sortBy)+import Data.List (intersect, (\\), sortBy) +import CSPM.DataStructures.FreeVars import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax hiding (getType) import CSPM.DataStructures.Types import CSPM.PrettyPrinter-import CSPM.TypeChecker.BuiltInFunctions import CSPM.TypeChecker.Common-import CSPM.TypeChecker.Dependencies import CSPM.TypeChecker.Exceptions-import CSPM.TypeChecker.Expr+import CSPM.TypeChecker.Expr() import CSPM.TypeChecker.Monad-import CSPM.TypeChecker.Pat+import CSPM.TypeChecker.Pat() import CSPM.TypeChecker.Unification import Util.Annotated import Util.List-import Util.Monad import Util.PartialFunctions import Util.PrettyPrint -- | Type check a list of possibly mutually recursive functions typeCheckDecls :: [TCDecl] -> TypeCheckMonad () typeCheckDecls decls = do- namesBoundByDecls <- mapM (\ decl -> do- namesBound <- namesBoundByDecl decl- return (decl, namesBound)) decls- - let ++ -- Flatten the decls so that definitions in modules are also type-checked+ -- in the correct order.+ let flattenDecl :: TCDecl -> [TCDecl]+ flattenDecl (An a b (Module mn args ds1 ds2)) =+ [An a b (Module mn args+ (concatMap flattenDecl ds1)+ (concatMap flattenDecl ds2))]+ flattenDecl (d@(An _ _ (TimedSection _ _ ds))) =+ -- We need to type-check the function in the timed section, but we+ -- flatten the decls so that dependencies work out ok.+ d : concatMap flattenDecl ds+ flattenDecl x = [x]+ flatDecls = concatMap flattenDecl decls++ isInstance (An _ _ (ModuleInstance _ _ _ _ _)) = True+ isInstance _ = False++ instanceDecls = filter isInstance flatDecls+ -- | Map from declarations to integer identifiers- declMap = zip decls [0..]+ declMap = zip flatDecls [0..] invDeclMap = invert declMap+ + let+ namesBoundByDecls = concatMap (\ (decl, declId) ->+ case decl of+ An _ _ (TimedSection _ _ _) -> []+ _ -> [(declId, boundNames decl)]) declMap+ -- | Map from names to the identifier of the declaration that it is -- defined by. varToDeclIdMap = - [(n, apply declMap d) | (d, ns) <- namesBoundByDecls, n <- ns]+ [(n, declId) | (declId, ns) <- namesBoundByDecls, n <- ns] boundVars = map fst varToDeclIdMap- namesToLocations = [(n, loc d) | (d, ns) <- namesBoundByDecls, n <- ns] -- Throw an error if a name is defined multiple times when (not (noDups boundVars)) $ panic "Duplicates found after renaming." - -- We prebind the datatypes and channels as they can be matched on in - -- patterns (and thus, given a var in a pattern we can't decide if it- -- is free or a dependency otherwise).- mapM_ registerChannelsAndDataTypes (map unAnnotate decls)- -- Map from decl id -> [decl id] meaning decl id depends on the list of -- ids- declDeps <- mapM (\ decl -> do- deps <- dependencies decl+ declDeps <- mapM (\ (decl, declId) -> do+ let deps = freeVars decl let depsInThisGroup = intersect deps boundVars- return (apply declMap decl, mapPF varToDeclIdMap depsInThisGroup)- ) decls+ return (declId, mapPF varToDeclIdMap depsInThisGroup)+ ) declMap let -- | Edge from n -> n' iff n uses n'@@ -76,13 +89,56 @@ -- | Get the declarations corresponding to certain ids typeInferenceGroup = mapPF invDeclMap + -- | Checks that this SCC does not contain both a module and an+ -- instance of the module.+ checkSCCForModuleCycles :: [TCDecl] -> TypeCheckMonad ()+ checkSCCForModuleCycles decls =+ let + instances = [i | An _ _ (i@(ModuleInstance _ _ _ _ _)) <- decls]+ mods = [m | An _ _ (m@(Module _ _ _ _)) <- decls]++ instancesOfMod n =+ [i | i@(ModuleInstance _ nt _ _ _) <- instances, nt == n]++ checkMod (Module nm _ _ _) = + case instancesOfMod nm of+ [] -> return ()+ (ModuleInstance n _ _ instanceMap _ : is) -> do+ -- Find the cycle+ mapM_ (\ n -> do+ raiseMessageAsError $+ illegalModuleInstanceCycleErrorMessage nm n + (mapPF (invert varToDeclIdMap)+ (pathBetweenVerticies declGraph+ (apply varToDeclIdMap nm)+ (apply varToDeclIdMap n)))+ ) (map fst instanceMap)+ pathBetweenVerticies :: Ord i => Graph i v -> i -> i -> [i]+ pathBetweenVerticies g i i' =+ let+ -- Do a DFS+ findPath visited i =+ let scs = successors g i+ in if i' `elem` scs then ([i'], [])+ else check visited scs+ check visited [] = ([], visited)+ check visited (x:xs) =+ let (path, visited') = findPath visited x+ in case path of+ [] -> check visited' xs+ _ -> (x : path, visited')+ in i : fst (findPath [] i)+ in mapM_ checkMod mods+ -- When an error occurs continue type checking, but only -- type check groups that do not depend on the failed group. -- failM is called at the end if any error has occured. typeCheckGroups [] b = if b then failM else return () typeCheckGroups (g:gs) b = do- err <- tryAndRecover (do- typeCheckMutualyRecursiveGroup (typeInferenceGroup (S.toList g))+ err <- tryAndRecover True (do+ let ds = typeInferenceGroup $ S.toList g+ checkSCCForModuleCycles ds+ typeCheckMutualyRecursiveGroup ds return False ) (return True) if not err then typeCheckGroups gs b@@ -91,26 +147,28 @@ -- True to indicate that an error has occured so that failM is -- called at the end. else typeCheckGroups (gs \\ (reachableVertices sccgraph g)) True- + -- Start type checking the groups typeCheckGroups sccs False --- This method heavily affects the DataType clause of typeCheckDecl.--- If any changes are made here changes will need to be made to typeCheckDecl--- too+ let+ annotate (decl@(An _ psymbtable (Module _ _ ds1 ds2))) = do+ let ns = boundNames decl+ ts <- mapM getType ns+ setPSymbolTable (snd psymbtable) (zip ns ts)+ mapM_ annotate (ds1++ds2)+ annotate (decl@(An _ psymbtable (TimedSection _ _ ds))) = do+ let ns = boundNames decl+ ts <- mapM getType ns+ setPSymbolTable (snd psymbtable) (zip ns ts)+ mapM_ annotate ds+ annotate (decl@(An _ psymbtable _)) = do+ let ns = boundNames decl+ ts <- mapM getType ns+ setPSymbolTable (snd psymbtable) (zip ns ts) --- We have to prebind all datatype clauses and channel names so--- that we can identify when a particular pattern uses these clauses and--- channels. We do this by injecting them into the symbol table earlier--- than normal.-registerChannelsAndDataTypes :: Decl Name -> TypeCheckMonad ()-registerChannelsAndDataTypes (DataType n cs) = do- mapM_ (\ c -> case unAnnotate c of- DataTypeClause n' _ -> addDataTypeOrChannel n'- ) cs-registerChannelsAndDataTypes (Channel ns _) = - mapM_ addDataTypeOrChannel ns-registerChannelsAndDataTypes _ = return ()+ -- Add the type of each declaration (if one exists to each declaration)+ mapM_ annotate decls -- | Type checks a group of certainly mutually recursive functions. Only -- functions that are mutually recursive should be included otherwise the@@ -125,18 +183,16 @@ (_, DataType _ _) -> GT (_, _) -> EQ ds = sortBy cmp ds'- fvs <- liftM nub (concatMapM namesBoundByDecl ds)+ fvs = boundNames ds ftvs <- replicateM (length fvs) freshTypeVar zipWithM setType fvs (map (ForAll []) ftvs)- - -- The list of all variables bound by these declaration- fvs <- liftM nub (concatMapM namesBoundByDecl ds) -- Type check each declaration then generalise the types- nts <- generaliseGroup fvs (map typeCheck ds)- -- Add the type of each declaration (if one exists to each declaration)- zipWithM annotate nts ds+ nts <- generaliseGroup fvs $ map (\ d -> + case boundNames d of+ [] -> typeCheck d+ (n:_) -> addDefinitionName n (typeCheck d)) ds -- Compress all the types we have inferred here (they should never be -- touched again)@@ -144,8 +200,6 @@ t <- getType n t' <- compressTypeScheme t setType n t') fvs- where - annotate nts (An _ psymbtable _) = setPSymbolTable (snd psymbtable) nts -- | Takes a type and returns the inner type, i.e. the type that this -- is a set of. For example TSet t1 -> t, TTuple [TSet t1, TSet t2] -> (t1, t2).@@ -172,25 +226,45 @@ typeCheck' an = setSrcSpan (loc an) $ typeCheck (inner an) instance TypeCheckable (Decl Name) [(Name, Type)] where- errorContext (FunBind n ms) = Just $ + errorContext (FunBind n ms _) = Just $ -- This will only be helpful if the equations don't match in -- type text "In the declaration of:" <+> prettyPrint n- errorContext (p@(PatBind pat exp)) = Just $+ errorContext (p@(PatBind pat exp _)) = Just $ hang (text "In a pattern binding:") tabWidth (prettyPrint p) errorContext (DataType n cs) = Just $ text "In the declaration of:" <+> prettyPrint n+ errorContext (SubType n cs) = Just $+ text "In the declaration of:" <+> prettyPrint n errorContext (NameType n e) = Just $ text "In the declaration of:" <+> prettyPrint n errorContext (Channel ns es) = Just $ text "In the declaration of:" <+> list (map prettyPrint ns) errorContext (Assert a) = Just $ text "In the assertion:" <+> prettyPrint a+ errorContext (TimedSection _ _ _) = Nothing errorContext (Transparent ns) = Nothing errorContext (External ns) = Nothing+ errorContext (ModuleInstance n _ _ _ _) = Just $+ text "In the declaration of the module instance:" <+> prettyPrint n+ errorContext (Module _ _ _ _) = Nothing+ errorContext (PrintStatement _) = Nothing - typeCheck' (FunBind n ms) = do- ts <- mapM (\ m -> addErrorContext (matchCtxt m) $ typeCheck m) ms+ typeCheck' (FunBind n ms mta) = do+ let boundTypeVars =+ case mta of+ Just (An _ _ (STypeScheme boundNs _ _)) -> boundNs+ _ -> []+ ts <- local boundTypeVars $ do+ mta <- case mta of+ Just ta -> do+ ForAll _ t <- typeCheck ta+ return $ Just t+ Nothing -> return Nothing+ mapM (\ m -> addErrorContext (matchCtxt m) $ + case mta of+ Nothing -> typeCheck m+ Just ta -> typeCheckExpect m ta) ms ForAll [] t <- getType n -- This unification also ensures that each equation has the same number -- of arguments.@@ -200,9 +274,19 @@ matchCtxt an = hang (text "In an equation for" <+> prettyPrint n <> colon) tabWidth (prettyPrintMatch n an)- typeCheck' (PatBind pat exp) = do- tpat <- typeCheck pat- texp <- typeCheck exp+ typeCheck' (p@(PatBind pat exp mta)) = do+ (texp, tpat) <-+ case mta of+ Nothing -> do+ tpat <- typeCheck pat+ texp <- typeCheck exp+ return (tpat, texp)+ Just ta -> do+ -- todo: check+ ForAll _ typ <- typeCheck ta+ tpat <- typeCheckExpect pat typ+ texp <- typeCheckExpect exp typ+ return (tpat, texp) -- We evaluate the dots to implement the 'longest match' rule. For -- example, suppose we have the following declaration: -- datatype A = B.Integers.Integers@@ -214,7 +298,7 @@ -- to allow patterns such as: -- x.y = B disallowSymmetricUnification (unify texp tpat)- ns <- namesBoundByDecl' (PatBind pat exp)+ let ns = boundNames p ts <- mapM getType ns return $ zip ns [t | ForAll _ t <- ts] -- The following two clauses rely on the fact that they have been @@ -228,6 +312,8 @@ return [(n, TEvent) | n <- ns] typeCheck' (Channel ns (Just e)) = do t <- typeCheck e+ -- Events must be comparable for equality.+ ensureHasConstraint CEq t valueType <- evalTypeExpression t dotList <- typeToDotList valueType let t = foldr TDotable TEvent dotList@@ -235,8 +321,28 @@ ForAll [] t' <- getType n unify t' t) ns return $ [(n, t) | n <- ns]+ typeCheck' (SubType n clauses) = do+ -- Get the type fromthe first clause+ parentType <- freshTypeVar+ mapM_ (\ clause -> do+ let nclause = case unAnnotate clause of+ DataTypeClause x _ -> x+ (_, tsFields) <- typeCheck clause+ ForAll [] typeCon <- getType nclause+ (actFields, dataType) <- dotableToDotList typeCon+ -- Check that the datatype is the correct subtype.+ tvref' <- freshTypeVarRef []+ unify (TExtendable parentType tvref') dataType+ -- Check that the fields are compatible with the expected fields.+ zipWithM unify actFields tsFields+ ) clauses+ ForAll [] t <- getType n+ t' <- unify t (TSet parentType)+ return [(n, TSet parentType)] typeCheck' (DataType n clauses) = do- nts <- mapM (\ clause -> do+ ForAll [] t <- getType n+ unify t (TSet (TDatatype n))+ ntss <- mapM (\ clause -> do let n' = case unAnnotate clause of DataTypeClause x _ -> x@@ -244,8 +350,22 @@ (n', ts) <- typeCheck clause let texp = foldr TDotable (TDatatype n) ts t <- unify texp t- return (n', t)+ return ((n', t), ts) ) clauses+ let (nts, tcss) = unzip ntss+ tclauses = concat tcss+ tclauses <- mapM (\t -> compress t) tclauses+ -- We now need to decide if we should allow this type to be comparable+ -- for equality. Thus, we check to see if each of the fields in each of+ -- the constructors is comparable for equality.++ -- We mark the type for equality, as if the type depends only on itself+ -- (i.e. it is recursive), then it should be comparable for equality.+ markDatatypeAsComparableForEquality n+ b <- tryAndRecover False + (mapM_ (ensureHasConstraint CEq) tclauses >> return True)+ (return False)+ when (not b) $ unmarkDatatypeAsComparableForEquality n ForAll [] t <- getType n t' <- unify t (TSet (TDatatype n)) return $ (n, t'):nts@@ -256,7 +376,103 @@ typeCheck' (Transparent ns) = return [] typeCheck' (External ns) = return [] typeCheck' (Assert a) = typeCheck a >> return []+ typeCheck' (TimedSection (Just tn) f _) = do+ typeCheckExpect (Var tn) TEvent+ case f of+ Just f -> typeCheckExpect f (TFunction [TEvent] TInt) >> return ()+ Nothing -> return ()+ return []+ typeCheck' (Module n args pubDs privDs) = do+ let fvs = boundNames args+ local fvs $ do+ tpats <- mapM (\ pat -> typeCheck pat >>= evaluateDots) args+ typeCheckDecls (pubDs ++ privDs)+ tpats <- mapM (\ pat -> typeCheck pat >>= evaluateDots) args+ return [(n, TTuple tpats)] + typeCheck' (ModuleInstance n nt args nm (Just mod)) = do+ -- Check instance+ stk <- getDefinitionStack+ when (nt `elem` stk) $ raiseMessageAsError $+ illegalModuleInstanceCycleErrorMessage nt n $ nt :+ reverse (takeWhile (\n -> not (n == nt)) stk)++ ts <- getType nt+ (TTuple ts, sub) <- instantiate' ts+ targs <- zipWithM typeCheckExpect args ts+ let subName n = case safeApply (invert nm) n of+ Just n' -> n'+ Nothing -> n+ -- Set the types of each of our arguments+ nts <- mapM (\ (ourName, theirName) -> do+ ForAll xs t <- getType theirName+ t' <- substituteTypes sub t+ -- We also need to change any datatype according to name map+ let sub (TVar tvref) = do+ res <- readTypeRef tvref+ case res of + Left _ -> return $ TVar tvref+ Right t -> sub t+ sub (TSet t) = sub t >>= return . TSet+ sub (TSeq t) = sub t >>= return . TSeq+ sub (TDot t1 t2) = do+ t1 <- sub t1+ t2 <- sub t2+ return $! TDot t1 t2+ sub (TTuple ts) = mapM sub ts >>= return . TTuple+ sub (TFunction ts t) = do+ ts <- mapM sub ts+ t <- sub t+ return $! TFunction ts t+ sub (TDatatype n) = return $ TDatatype $! subName n+ sub (TDotable t1 t2) = do+ t1 <- sub t1+ t2 <- sub t2+ return $! TDotable t1 t2+ sub (TExtendable t tvref) = do+ t' <- sub t+ res <- readTypeRef tvref+ case res of+ Left _ -> return $ TExtendable t tvref+ Right t -> do+ tsub' <- sub t+ writeTypeRef tvref tsub'+ return $ TExtendable t' tvref+ sub TInt = return TInt+ sub TBool = return TBool+ sub TProc = return TProc+ sub TEvent = return TEvent+ sub TChar = return TChar+ sub TExtendableEmptyDotList = return TExtendableEmptyDotList++ t' <- sub t'+ setType ourName $ ForAll xs t'+ return (ourName, t')+ ) nm++ let An _ _ (Module _ _ privDs pubDs) = mod++ -- Mark datatypes as comparable as appropriate+ mapM_ (\ d -> case unAnnotate d of+ DataType n clauses -> do+ let n' = subName n+ tclauses <- mapM (\ (An _ _ (DataTypeClause n _)) -> do+ ForAll _ t <- getType (subName n)+ return t) clauses+ markDatatypeAsComparableForEquality n'+ b <- tryAndRecover False + (mapM_ (ensureHasConstraint CEq) tclauses >> return True)+ (return False)+ when (not b) $ unmarkDatatypeAsComparableForEquality n'+ _ -> return ()+ ) (privDs ++ pubDs)+ return nts+ typeCheck' (PrintStatement _) = return []++instance TypeCheckable TCAssertion () where+ errorContext an = Nothing+ typeCheck' an = setSrcSpan (loc an) $ typeCheck (inner an)+ instance TypeCheckable (Assertion Name) () where errorContext a = Just $ hang (text "In the assertion" <> colon) tabWidth (prettyPrint a)@@ -267,6 +483,7 @@ ensureIsProc e1 ensureIsProc e2 mapM_ typeCheck opts+ typeCheck' (ASNot a) = typeCheck a instance TypeCheckable (ModelOption Name) () where errorContext a = Nothing@@ -293,13 +510,14 @@ instance TypeCheckable TCMatch Type where errorContext an = Nothing typeCheck' an = setSrcSpan (loc an) $ typeCheck (inner an)+ typeCheckExpect an t = setSrcSpan (loc an) $ typeCheckExpect (inner an) t instance TypeCheckable (Match Name) Type where -- We create the error context in FunBind as that has access -- to the name errorContext (Match groups exp) = Nothing typeCheck' (Match groups exp) = do -- Introduce free variables for all the parameters- fvs <- liftM concat (mapM freeVars groups)+ let fvs = boundNames groups local fvs $ do tgroups <- mapM (\ pats -> mapM (\ pat -> -- We evaluate the dots here to implment the longest @@ -318,3 +536,76 @@ ) pats) groups return $ foldr (\ targs tr -> TFunction targs tr) tr tgroups+ typeCheckExpect (Match groups exp) tsig = do+ -- Introduce free variables for all the parameters+ let fvs = boundNames groups+ local fvs $ do+ -- Check that the function signature is of a plausible shape+ rt <- freshTypeVar+ argts <- mapM (flip replicateM freshTypeVar) (map length groups)+ unify tsig $ foldr (\ targs tr -> TFunction targs tr) rt argts++ -- The rest of the code is as before (comments before also apply)+ tgroups <- zipWithM (\ pats argts -> zipWithM (\ pat argt -> + typeCheckExpect pat argt >>= evaluateDots+ ) pats argts) groups argts + tr <- typeCheckExpect exp rt >>= evaluateDots+ tgroups <- mapM (\ pats -> mapM (\ pat -> + typeCheck pat >>= evaluateDots+ ) pats) groups+ return $ foldr (\ targs tr -> TFunction targs tr) tr tgroups++instance TypeCheckable TCSTypeScheme TypeScheme where+ errorContext an = Nothing+ typeCheck' an = setSrcSpan (loc an) $ typeCheck (inner an)+instance TypeCheckable (STypeScheme Name) TypeScheme where+ errorContext _ = Nothing+ typeCheck' (STypeScheme boundNs cs t) = do+ tvs <- mapM (\ n -> do+ let ncs = map (\ (STypeConstraint c _) -> c) $+ filter (\ (STypeConstraint _ n') -> n == n') $+ (map unAnnotate cs)+ t@(TVar tvref) <- freshRigidTypeVarWithConstraints n ncs+ setType n (ForAll [] t)+ return (typeVar tvref, constraints tvref)+ ) boundNs+ t' <- typeCheck t+ return $ ForAll tvs t'++instance TypeCheckable TCSType Type where+ errorContext _ = Nothing+ typeCheck' an = setSrcSpan (loc an) $ typeCheck (inner an)+instance TypeCheckable (SType Name) Type where+ errorContext _ = Nothing+ typeCheck' (STVar var) = getType var >>= \ (ForAll [] t) -> return t+ typeCheck' (STExtendable t var) = do+ t <- typeCheck t+ TVar tvref <- getType var >>= \ (ForAll [] t) -> return t+ return $ TExtendable t tvref+ typeCheck' (STSet t) = typeCheck t >>= return . TSet+ typeCheck' (STSeq t) = typeCheck t >>= return . TSeq+ typeCheck' (STDot t1 t2) = do+ t1' <- typeCheck t1+ t2' <- typeCheck t2+ return $ TDot t1' t2'+ typeCheck' (STMap t1 t2) = do+ t1' <- typeCheck t1+ t2' <- typeCheck t2+ return $ TMap t1' t2'+ typeCheck' (STTuple ts) = mapM typeCheck ts >>= return . TTuple+ typeCheck' (STFunction args rt) = do+ targs <- mapM typeCheck args+ trt <- typeCheck rt+ return $ TFunction targs trt+ typeCheck' (STDotable t1 t2) = do+ t1' <- typeCheck t1+ t2' <- typeCheck t2+ return $ TDotable t1' t2'+ typeCheck' (STParen t) = typeCheck t++ typeCheck' (STDatatype n) = return $ TDatatype n+ typeCheck' STProc = return TProc+ typeCheck' STInt = return TInt+ typeCheck' STBool = return TBool+ typeCheck' STChar = return TChar+ typeCheck' STEvent = return TEvent
src/CSPM/TypeChecker/Decl.hs-boot view
@@ -1,7 +1,6 @@ module CSPM.TypeChecker.Decl where import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Types import CSPM.TypeChecker.Monad typeCheckDecls :: [TCDecl] -> TypeCheckMonad ()
− src/CSPM/TypeChecker/Dependencies.hs
@@ -1,271 +0,0 @@-{-# LANGUAGE FlexibleInstances #-}-module CSPM.TypeChecker.Dependencies (- Dependencies, dependencies, namesBoundByDecl, namesBoundByDecl',- FreeVars, freeVars-) where--import Control.Monad-import Data.List (nub, (\\))--import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Types-import CSPM.TypeChecker.Exceptions-import CSPM.TypeChecker.Monad-import Util.Annotated-import Util.List-import Util.Monad---- This file exports two main type classes, Dependencies and FreeVars. The first--- computes what names a given expression/pattern/field/etc depends on.--- The second computes the free variables within each statement.--- Clearly these depend on each other heavily as a name is free iff--- it is not a dependency.--namesBoundByDecl :: AnDecl Name -> TypeCheckMonad [Name]-namesBoundByDecl = namesBoundByDecl' . unAnnotate-namesBoundByDecl' (FunBind n ms) = return [n]-namesBoundByDecl' (PatBind p ms) = freeVars p-namesBoundByDecl' (Channel ns es) = return ns-namesBoundByDecl' (DataType n dcs) = - let- namesBoundByDtClause (DataTypeClause n _) = [n]- in- return $ n:concatMap (namesBoundByDtClause . unAnnotate) dcs-namesBoundByDecl' (NameType n e) = return [n]-namesBoundByDecl' (External ns) = return ns-namesBoundByDecl' (Transparent ns) = return ns-namesBoundByDecl' (Assert _) = return []--class Dependencies a where- dependencies :: a -> TypeCheckMonad [Name]- dependencies xs = liftM nub (dependencies' xs)- dependencies' :: a -> TypeCheckMonad [Name]--instance Dependencies a => Dependencies [a] where- dependencies' xs = concatMapM dependencies xs-instance Dependencies a => Dependencies (Maybe a) where- dependencies' (Just x) = dependencies' x- dependencies' Nothing = return []-instance Dependencies a => Dependencies (Annotated b a) where- dependencies' (An _ _ inner) = dependencies inner--instance Dependencies (Pat Name) where- dependencies' (PVar n) = do- res <- isDataTypeOrChannel n- return $ if res then [n] else []- dependencies' (PConcat p1 p2) = do- fvs1 <- dependencies' p1- fvs2 <- dependencies' p2- return $ fvs1++fvs2- dependencies' (PDotApp p1 p2) = dependencies' [p1,p2]- dependencies' (PList ps) = dependencies' ps- dependencies' (PWildCard) = return []- dependencies' (PTuple ps) = dependencies' ps- dependencies' (PSet ps) = dependencies' ps- dependencies' (PParen p) = dependencies' p- dependencies' (PLit l) = return []- dependencies' (PDoublePattern p1 p2) = do- fvs1 <- dependencies' p1- fvs2 <- dependencies' p2- return $ fvs1++fvs2- -instance Dependencies (Exp Name) where- dependencies' (App e es) = dependencies' (e:es)- dependencies' (BooleanBinaryOp _ e1 e2) = dependencies' [e1,e2]- dependencies' (BooleanUnaryOp _ e) = dependencies' e- dependencies' (Concat e1 e2) = dependencies' [e1,e2]- dependencies' (DotApp e1 e2) = dependencies' [e1,e2]- dependencies' (If e1 e2 e3) = dependencies' [e1,e2, e3]- dependencies' (Lambda p e) = do- fvsp <- freeVars p- depsp <- dependencies p- fvse <- dependencies e- return $ (fvse \\ fvsp)++depsp- dependencies' (Let ds e) = do- fvsd <- dependencies ds- newBoundVars <- liftM nub (concatMapM namesBoundByDecl ds)- fvse <- dependencies e- return $ nub (fvse++fvsd) \\ newBoundVars- dependencies' (Lit _) = return []- dependencies' (List es) = dependencies es- dependencies' (ListComp es stmts) = do- fvStmts <- freeVars stmts- depsStmts <- dependencies stmts- fvses' <- dependencies es- let fvse = nub (fvses'++depsStmts)- return $ fvse \\ fvStmts- dependencies' (ListEnumFrom e1) = dependencies' e1- dependencies' (ListEnumFromTo e1 e2) = dependencies' [e1,e2]- dependencies' (ListLength e) = dependencies' e- dependencies' (MathsBinaryOp _ e1 e2) = dependencies' [e1,e2]- dependencies' (MathsUnaryOp _ e1) = dependencies' e1- dependencies' (Paren e) = dependencies' e- dependencies' (Set es) = dependencies es- dependencies' (SetComp es stmts) = do- fvStmts <- freeVars stmts- depsStmts <- dependencies stmts- fvses' <- dependencies es- let fvse = nub (fvses'++depsStmts)- return $ fvse \\ fvStmts- dependencies' (SetEnumComp es stmts) = do- fvStmts <- freeVars stmts- depsStmts <- dependencies stmts- fvses' <- dependencies es- let fvse = nub (fvses'++depsStmts)- return $ fvse \\ fvStmts- dependencies' (SetEnumFrom e1) = dependencies' e1- dependencies' (SetEnumFromTo e1 e2) = dependencies' [e1,e2]- dependencies' (SetEnum es) = dependencies' es- dependencies' (Tuple es) = dependencies' es- dependencies' (Var n) = return [n]- - -- Processes- dependencies' (AlphaParallel e1 e2 e3 e4) = dependencies' [e1,e2,e3,e4]- dependencies' (Exception e1 e2 e3) = dependencies' [e1,e2,e3]- dependencies' (ExternalChoice e1 e2) = dependencies' [e1,e2]- dependencies' (GenParallel e1 e2 e3) = dependencies' [e1,e2,e3]- dependencies' (GuardedExp e1 e2) = dependencies' [e1,e2]- dependencies' (Hiding e1 e2) = dependencies' [e1,e2]- dependencies' (InternalChoice e1 e2) = dependencies' [e1,e2]- dependencies' (Interrupt e1 e2) = dependencies' [e1,e2]- dependencies' (LinkParallel e1 links stmts e2) = do- ds1 <- dependencies [e1,e2]- ds2 <- dependenciesStmts stmts (concat (map (\ (x,y) -> x:y:[]) links))- return $ ds1++ds2- dependencies' (Interleave e1 e2) = dependencies' [e1,e2]- dependencies' (Prefix e1 fields e2) = do- depse <- dependencies' [e1,e2]- depsfields <- dependencies fields- fvfields <- freeVars fields- let fvse = nub (fvfields++depsfields++depse)- return $ fvse \\ fvfields- dependencies' (Rename e1 renames stmts) = do- d1 <- dependencies' e1- d2 <- dependenciesStmts stmts (es++es')- return $ d1++d2- where (es, es') = unzip renames- dependencies' (SequentialComp e1 e2) = dependencies' [e1,e2]- dependencies' (SlidingChoice e1 e2) = dependencies' [e1,e2]-- dependencies' (ReplicatedAlphaParallel stmts e1 e2) = - dependenciesStmts stmts [e1,e2]- dependencies' (ReplicatedInterleave stmts e1) = - dependenciesStmts stmts [e1]- dependencies' (ReplicatedExternalChoice stmts e1) = - dependenciesStmts stmts [e1]- dependencies' (ReplicatedInternalChoice stmts e1) = - dependenciesStmts stmts [e1]- dependencies' (ReplicatedLinkParallel ties tiesStmts stmts e) = do- d1 <- dependenciesStmts tiesStmts (es++es')- d2 <- dependenciesStmts stmts e- -- The ties may depend on variables bound by stmts too- fvsstmts <- freeVars stmts- return $ (d1 \\ fvsstmts)++d2- where (es, es') = unzip ties- dependencies' (ReplicatedParallel e1 stmts e2) = dependenciesStmts stmts [e1,e2]- - dependencies' x = panic ("TCDependencies.hs: unrecognised exp "++show x)---- Recall that a later stmt can depend on values that appear in an ealier stmt--- For example, consider <x | x <- ..., f(x)>. Therefore we do a foldr to correctly--- consider cases like <x | f(x), x <- ... >-dependenciesStmts :: Dependencies a => [TCStmt] -> a -> TypeCheckMonad [Name]-dependenciesStmts [] e = dependencies e-dependenciesStmts (stmt:stmts) e = do- depse <- dependenciesStmts stmts e- depsstmt <- dependencies stmt- fvstmt <- freeVars stmt- let depse' = nub (depsstmt++depse)- return $ depse' \\ fvstmt--instance Dependencies (Stmt Name) where- dependencies' (Generator p e) = do- ds1 <- dependencies p- ds2 <- dependencies e- return $ ds1++ds2- dependencies' (Qualifier e) = dependencies e--instance Dependencies (Field Name) where- dependencies' (Input p e) = dependencies e- dependencies' (NonDetInput p e) = dependencies e- dependencies' (Output e) = dependencies e--instance Dependencies (Decl Name) where- dependencies' (FunBind n ms) = do- fvsms <- dependencies ms- return $ fvsms- dependencies' (PatBind p e) = do- depsp <- dependencies p- fvsp <- freeVars p- depse <- dependencies e- return $ depsp++depse- dependencies' (Channel ns es) = dependencies es- dependencies' (DataType n cs) = dependencies [cs]- dependencies' (NameType n e) = dependencies' e- dependencies' (External ns) = return []- dependencies' (Transparent ns) = return []- dependencies' (Assert a) = dependencies a--instance Dependencies (Assertion Name) where- dependencies' (Refinement e1 m e2 opts) = do- d1 <- dependencies [e1, e2]- d2 <- dependencies opts- return $ d1++d2- dependencies' (PropertyCheck e1 p m) = dependencies [e1]- dependencies' (BoolAssertion e1) = dependencies [e1]- dependencies' (ASNot a) = dependencies a--instance Dependencies (ModelOption Name) where- dependencies' (TauPriority e) = dependencies' e- -instance Dependencies (Match Name) where- dependencies' (Match ps e) =- do- fvs1 <- freeVars ps- depsPs <- dependencies ps- fvs2 <- dependencies e- return $ (fvs2 \\ fvs1) ++ depsPs--instance Dependencies (DataTypeClause Name) where- dependencies' (DataTypeClause n Nothing) = return []- dependencies' (DataTypeClause n (Just e)) = dependencies' e---class FreeVars a where- freeVars :: a -> TypeCheckMonad [Name]--instance FreeVars a => FreeVars [a] where- freeVars xs = concatMapM freeVars xs- -instance FreeVars a => FreeVars (Annotated b a) where- freeVars (An _ _ inner) = freeVars inner--instance FreeVars (Pat Name) where- freeVars (PVar n) = do- res <- isDataTypeOrChannel n- return $ if res then [] else [n]- freeVars (PConcat p1 p2) = do- fvs1 <- freeVars p1- fvs2 <- freeVars p2- return $ fvs1++fvs2- freeVars (PDotApp p1 p2) = freeVars [p1,p2]- freeVars (PList ps) = freeVars ps- freeVars (PWildCard) = return []- freeVars (PTuple ps) = freeVars ps- freeVars (PSet ps) = freeVars ps- freeVars (PParen p) = freeVars p- freeVars (PLit l) = return []- freeVars (PDoublePattern p1 p2) = do- fvs1 <- freeVars p1- fvs2 <- freeVars p2- return $ fvs1++fvs2--instance FreeVars (Stmt Name) where- freeVars (Qualifier e) = return []- freeVars (Generator p e) = freeVars p--instance FreeVars (Field Name) where- freeVars (Input p e) = freeVars p- freeVars (NonDetInput p e) = freeVars p- freeVars (Output e) = return []
src/CSPM/TypeChecker/Exceptions.hs view
@@ -7,20 +7,18 @@ constraintUnificationErrorMessage, deprecatedNameUsed, unsafeNameUsed,+ illegalModuleInstanceCycleErrorMessage,+ ErrorOptions(..), defaultErrorOptions, ) where -import Data.Typeable-import Data.List (group, sort) import Prelude +import Data.List (nub, sort) import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax import CSPM.DataStructures.Types import CSPM.PrettyPrinter-import Util.Annotated import Util.Exception-import Util.PartialFunctions import Util.PrettyPrint type Error = Doc@@ -38,25 +36,48 @@ text "Cannot construct the infinite type:" <+> ppt1 <+> equals <+> ppt2 unificationErrorMessage :: [(Type, Type)] -> Error+unificationErrorMessage [] = panic "Empty unification stack during error" unificationErrorMessage unificationStack = let hd = head unificationStack lt = last unificationStack (it1, it2) = hd (t1, t2) = lt- [pit1, pit2, pt1, pt2] = prettyPrintTypes [it1, it2, t1, t2]+ ts = [it1, it2, t1, t2]+ [pit1, pit2, pt1, pt2] = prettyPrintTypes ts in sep [text "Couldn't match expected type" <+> pit1, nest 8 (text "with actual type" <+> pit2)] $$- if hd == lt then empty- else sep [text "whilst matching expected type" <+> pt1,- nest 8 (text "with actual type" <+> pt2)]+ (if hd == lt then empty+ else sep [text "whilst matching expected type" <+> pt1,+ nest 8 (text "with actual type" <+> pt2)])+ $$ tabIndent (printOrigins ts) +printOrigins :: [Type] -> Doc+printOrigins ts =+ let + typeVarRefs = concatMap (map fst . collectConstraints) ts+ rigidVars = nub $ sort $ filter isRigid typeVarRefs++ printOrigin (RigidTypeVarRef _ _ n) =+ sep [prettyPrint n <+> text+ "is the rigid type variable bound by the type signature at",+ nest 4 (prettyPrint (nameDefinition n))]+ in vcat $ map printOrigin rigidVars+ constraintUnificationErrorMessage :: Constraint -> Type -> Error constraintUnificationErrorMessage c t = hang (hang (text "The type") tabWidth (prettyPrint t)) tabWidth (text "does not have the constraint" <+> prettyPrint c)+ $$ tabIndent (printOrigins [t])+ $$ case t of+ TVar v | isRigid v -> + let n = rigidName v in+ text "Maybe try adding" <+> prettyPrint c <+> prettyPrint n+ <+> text "to the type-constraint at:"+ $$ nest 4 (prettyPrint (nameDefinition n))+ _ -> empty deprecatedNameUsed :: Name -> Maybe Name -> Error deprecatedNameUsed n Nothing = @@ -69,4 +90,24 @@ unsafeNameUsed n = text "The invocation of" <+> prettyPrint n <+> text "has not been type-checked."- <+> text "Therefore, a runtime type error may occur here."+ $$ text "Therefore, a runtime type error may occur."++illegalModuleInstanceCycleErrorMessage :: Name -> Name -> [Name] -> Error+illegalModuleInstanceCycleErrorMessage mName iName path = + fsep [text "The module" <+> prettyPrint mName,+ text "uses a definition in an instance" <+> prettyPrint iName,+ text "of itself, which is not allowed."]+ $$ text "The path by which the module calls its instance is:"+ $$ tabIndent (list (map prettyPrint path))++-- | A datatype used to hold which errors and warnings to actually emit.+data ErrorOptions = ErrorOptions {+ warnDeprecatedNamesUsed :: Bool,+ warnUnsafeNamesUsed :: Bool+ }++defaultErrorOptions :: ErrorOptions+defaultErrorOptions = ErrorOptions {+ warnDeprecatedNamesUsed = True,+ warnUnsafeNamesUsed = True+ }
src/CSPM/TypeChecker/Expr.hs view
@@ -2,24 +2,20 @@ module CSPM.TypeChecker.Expr () where import Control.Monad-import Control.Monad.Trans import Data.List +import CSPM.DataStructures.FreeVars import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax hiding (getType) import CSPM.DataStructures.Types-import CSPM.TypeChecker.BuiltInFunctions import CSPM.TypeChecker.Common import {-# SOURCE #-} CSPM.TypeChecker.Decl-import CSPM.TypeChecker.Dependencies import CSPM.TypeChecker.Exceptions-import CSPM.TypeChecker.Pat import CSPM.TypeChecker.Monad+import CSPM.TypeChecker.Pat() import CSPM.TypeChecker.Unification import Util.Annotated-import Util.Exception import Util.List-import Util.Monad import Util.PrettyPrint checkFunctionCall :: Doc -> [TCExp] -> [Type] -> TypeCheckMonad ()@@ -88,12 +84,12 @@ t <- typeCheck e1 t <- typeCheckExpect e2 t case op of - Equals -> ensureHasConstraint Eq t- NotEquals -> ensureHasConstraint Eq t- LessThan -> ensureHasConstraint Ord t- LessThanEq -> ensureHasConstraint Ord t- GreaterThan -> ensureHasConstraint Ord t- GreaterThanEq -> ensureHasConstraint Ord t+ Equals -> ensureHasConstraint CEq t+ NotEquals -> ensureHasConstraint CEq t+ LessThan -> ensureHasConstraint COrd t+ LessThanEq -> ensureHasConstraint COrd t+ GreaterThan -> ensureHasConstraint COrd t+ GreaterThanEq -> ensureHasConstraint COrd t return ()) >> return TBool typeCheck' (BooleanUnaryOp op e1) = do@@ -109,15 +105,14 @@ ensureIsBool e1 t2 <- typeCheck e2 typeCheckExpect e3 t2- typeCheck' (Lambda p exp) = do- fvs <- freeVars p- local fvs $ do+ typeCheck' (Lambda ps exp) = do+ local (boundNames ps) $ do tr <- typeCheck exp- targ <- typeCheck p- return $ TFunction [targ] tr- typeCheck' (Let decls exp) =+ targs <- mapM typeCheck ps+ return $ TFunction targs tr+ typeCheck' (Let decls exp) = do -- Add a new scope: typeCheckDecl will add vars into it - local [] $ do+ local (boundNames decls) $ do typeCheckDecls decls typeCheck exp typeCheck' (Lit lit) = typeCheck lit@@ -135,9 +130,22 @@ ensureIsInt lb ensureIsInt ub return $ TSeq TInt+ typeCheck' (ListEnumFromComp lb stmts) = do+ typeCheckStmts TSeq stmts $ do+ ensureIsInt lb+ return $ TSeq TInt+ typeCheck' (ListEnumFromToComp lb ub stmts) = do+ typeCheckStmts TSeq stmts $ do+ ensureIsInt lb+ ensureIsInt ub+ return $ TSeq TInt typeCheck' (ListLength e) = do ensureIsList e return $ TInt+ typeCheck' (Map kvs) = do+ k <- ensureAreEqual (map fst kvs)+ v <- ensureAreEqual (map snd kvs)+ return $ TMap k v typeCheck' (MathsBinaryOp op e1 e2) = do ensureIsInt e1 ensureIsInt e2@@ -148,19 +156,22 @@ typeCheck' (Paren e) = typeCheck e typeCheck' (Set es) = do t <- ensureAreEqual es- ensureHasConstraint Eq t+ ensureHasConstraint CSet t return $ TSet t typeCheck' (SetComp es stmts) = typeCheckStmts TSet stmts $ do t <- ensureAreEqual es+ ensureHasConstraint CSet t return $ TSet t typeCheck' (SetEnum es) = do- mapM ensureIsChannel es- return $ TSet TEvent+ fv <- freshTypeVarWithConstraints [CYieldable]+ mapM (flip ensureIsExtendable fv) es+ return $ TSet fv typeCheck' (SetEnumComp es stmts) = typeCheckStmts TSet stmts $ do- mapM ensureIsChannel es- return $ TSet TEvent+ fv <- freshTypeVarWithConstraints [CYieldable]+ mapM (flip ensureIsExtendable fv) es+ return $ TSet fv typeCheck' (SetEnumFrom lb) = do ensureIsInt lb return $ TSet TInt@@ -168,6 +179,15 @@ ensureIsInt lb ensureIsInt ub return $ TSet TInt+ typeCheck' (SetEnumFromComp lb stmts) = do+ typeCheckStmts TSet stmts $ do+ ensureIsInt lb+ return $ TSet TInt+ typeCheck' (SetEnumFromToComp lb ub stmts) = do+ typeCheckStmts TSet stmts $ do+ ensureIsInt lb+ ensureIsInt ub+ return $ TSet TInt typeCheck' (Tuple es) = do ts <- mapM typeCheck es return $ TTuple ts@@ -175,10 +195,10 @@ b <- isDeprecated n when b $ do r <- replacementForDeprecatedName n- addWarning (deprecatedNameUsed n r)+ addWarning warnDeprecatedNamesUsed (deprecatedNameUsed n r) b <- isTypeUnsafe n- when b $ addWarning (unsafeNameUsed n)+ when b $ addWarning warnUnsafeNamesUsed (unsafeNameUsed n) t <- getType n instantiate t@@ -237,13 +257,9 @@ ensureIsProc e2 return TProc typeCheck' (Prefix e1 fields e2) = do- fvsByField <- mapM (\f -> do- fvs <- freeVars f- return (f, fvs)) fields let + fvsByField = map (\f -> (f, boundNames f)) fields fvs = concatMap snd fvsByField- namesToLocations = - [(n, loc f) | (f, fvs) <- fvsByField, n <- fvs] -- Throw an error if a name is defined multiple times when (not (noDups fvs)) (panic "Dupes found in prefix after renaming.") @@ -273,16 +289,27 @@ ast <- mapM ensureIsChannel as zipWithM typeCheckExpect bs ast return TProc- ++ typeCheck' (SynchronisingExternalChoice e1 e2 e3) = do+ ensureIsProc e1+ typeCheckExpect e2 (TSet TEvent)+ ensureIsProc e3+ return TProc+ typeCheck' (SynchronisingInterrupt e1 e2 e3) = do+ ensureIsProc e1+ typeCheckExpect e2 (TSet TEvent)+ ensureIsProc e3+ return TProc+ -- Replicated Operators typeCheck' (ReplicatedAlphaParallel stmts alpha proc) = typeCheckReplicatedOp stmts $ do t1 <- typeCheck alpha unify (TSet TEvent) t1 ensureIsProc proc- typeCheck' (ReplicatedParallel alpha stmts proc) =+ typeCheck' (ReplicatedParallel alpha stmts proc) = do+ typeCheckExpect alpha (TSet TEvent) typeCheckReplicatedOp stmts $ do- typeCheckExpect alpha (TSet TEvent) ensureIsProc proc typeCheck' (ReplicatedLinkParallel ties tiesStmts stmts proc) = do typeCheckStmts TSeq stmts $ do@@ -298,6 +325,12 @@ typeCheckReplicatedOp stmts (ensureIsProc e1) typeCheck' (ReplicatedInternalChoice stmts e1) = typeCheckReplicatedOp stmts (ensureIsProc e1)+ typeCheck' (ReplicatedSequentialComp stmts e1) = do+ typeCheckStmts TSeq stmts (ensureIsProc e1)+ return $ TProc+ typeCheck' (ReplicatedSynchronisingExternalChoice e1 stmts e3) = do+ typeCheckExpect e1 (TSet TEvent)+ typeCheckReplicatedOp stmts $ ensureIsProc e3 typeCheck' x = panic ("No case for type checking a "++show x) @@ -308,17 +341,15 @@ checkInput p e = do t <- typeCheck e tp <- addErrorContext errCtxt (do- -- We don't enforce that tp is Inputable as users are free - -- to do what they wish when they specify the set where - -- the items come from. tp <- typeCheck p unify (TSet tp) t+ ensureHasConstraint CInputable tp return tp) tc tp chkInputNoSet p = do t <- addErrorContext errCtxt $ do t <- typeCheck p- ensureHasConstraint Inputable t+ ensureHasConstraint CInputable t tc t check (NonDetInput p (Just e)) = checkInput p e check (Input p (Just e)) = checkInput p e@@ -350,17 +381,8 @@ -- to ensure that clauses only depend on variables already bound. typeCheckStmts :: (Type -> Type) -> [TCStmt] -> TypeCheckMonad a -> TypeCheckMonad a typeCheckStmts typc stmts tc = do- fvsByStmt <- mapM (\stmt -> do- fvs <- freeVars stmt- return (stmt, fvs)) stmts- let - fvs = concatMap snd fvsByStmt- namesToLocations = - [(n, loc f) | (f, fvs) <- fvsByStmt, n <- fvs]- -- Throw an error if a name is defined multiple times- when (not (noDups fvs)) (panic "Dupes found in stmts after renaming.") -- Renaming ensures uniqueness, so introduce the free vars now.- local fvs (check stmts)+ local (boundNames stmts) (check stmts) where check [] = tc check (stmt:stmts) = typeCheckStmt typc stmt (check stmts)
+ src/CSPM/TypeChecker/File.hs view
@@ -0,0 +1,17 @@+{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}+module CSPM.TypeChecker.File where++import CSPM.DataStructures.Names+import CSPM.DataStructures.Syntax+import CSPM.TypeChecker.Common+import CSPM.TypeChecker.Decl+import CSPM.TypeChecker.Monad+import Util.Annotated++instance TypeCheckable (AnCSPMFile Name) () where+ errorContext _ = Nothing+ typeCheck' an = setSrcSpan (loc an) $ typeCheck' (inner an)++instance TypeCheckable (CSPMFile Name) () where+ errorContext _ = Nothing+ typeCheck' (CSPMFile ds) = typeCheckDecls ds
src/CSPM/TypeChecker/InteractiveStmt.hs view
@@ -3,14 +3,11 @@ import CSPM.DataStructures.Names import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Types import CSPM.TypeChecker.Common import CSPM.TypeChecker.Decl-import CSPM.TypeChecker.Expr-import CSPM.TypeChecker.Monad+import CSPM.TypeChecker.Expr() import CSPM.TypeChecker.Unification import Util.Annotated-import Util.PrettyPrint instance TypeCheckable TCInteractiveStmt () where errorContext a = Nothing@@ -18,7 +15,7 @@ instance TypeCheckable (InteractiveStmt Name) () where errorContext a = Nothing- typeCheck' (Bind decl) = typeCheckDecls [decl]+ typeCheck' (Bind decls) = typeCheckDecls decls typeCheck' (Evaluate exp) = typeCheck exp >>= evaluateDots >> return () typeCheck' (RunAssertion a) = typeCheck a >> return ()
− src/CSPM/TypeChecker/Module.hs
@@ -1,22 +0,0 @@-{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}-module CSPM.TypeChecker.Module where--import CSPM.DataStructures.Names-import CSPM.DataStructures.Syntax-import CSPM.DataStructures.Types-import CSPM.TypeChecker.Common-import CSPM.TypeChecker.Decl-import CSPM.TypeChecker.Monad-import Util.Annotated--instance TypeCheckable [TCModule] () where- errorContext _ = Nothing- typeCheck' ([m]) = typeCheck m--instance TypeCheckable TCModule () where- errorContext _ = Nothing- typeCheck' an = setSrcSpan (loc an) $ typeCheck' (inner an)--instance TypeCheckable (Module Name) () where- errorContext _ = Nothing- typeCheck' (GlobalModule ds) = typeCheckDecls ds
src/CSPM/TypeChecker/Monad.hs view
@@ -15,15 +15,19 @@ symmetricUnificationAllowed, disallowSymmetricUnification, getInError, setInError, resetWarnings, getWarnings, addWarning,+ markDatatypeAsComparableForEquality,+ datatypeIsComparableForEquality,+ unmarkDatatypeAsComparableForEquality,+ modifyErrorOptions,+ addDefinitionName, getDefinitionStack, raiseMessageAsError, raiseMessagesAsError, panic, manyErrorsIfFalse, errorIfFalseM, errorIfFalse, tryAndRecover, failM,- - addDataTypeOrChannel, isDataTypeOrChannel, ) where import Control.Monad.State+import Data.List ((\\)) import Prelude hiding (lookup) import CSPM.DataStructures.Names@@ -32,6 +36,7 @@ import CSPM.TypeChecker.Exceptions import Util.Annotated import Util.Exception+import qualified Util.Monad as M import Util.PrettyPrint -- *************************************************************************@@ -42,9 +47,6 @@ data TypeInferenceState = TypeInferenceState { -- | The type environment, which is a map from names to types. environment :: Env.Environment,- -- | List of names that correspond to channels and- -- datatypes - used when detecting dependencies.- dataTypesAndChannels :: [Name], -- | Location of the current AST element - used for error -- pretty printing srcSpan :: SrcSpan,@@ -58,22 +60,30 @@ -- | Stack of attempted unifications - the current one -- is at the front. In the form (expected, actual). unificationStack :: [(Type, Type)],+ -- | The stack of names that we are currently type-checking.+ definitionStack :: [Name], -- | Are we currently in an error state inError :: Bool,- symUnificationAllowed :: Bool+ symUnificationAllowed :: Bool,+ -- | The set of datatypes that can be compared for equality.+ comparableForEqualityDataTypes :: [Name],+ -- | The error options to use+ errorOptions :: ErrorOptions } newTypeInferenceState :: TypeInferenceState newTypeInferenceState = TypeInferenceState { environment = Env.new,- dataTypesAndChannels = [], srcSpan = Unknown, errorContexts = [], errors = [], warnings = [], unificationStack = [],+ definitionStack = [], inError = False,- symUnificationAllowed = True+ symUnificationAllowed = True,+ comparableForEqualityDataTypes = [],+ errorOptions = defaultErrorOptions } type TypeCheckMonad = StateT TypeInferenceState IO@@ -92,6 +102,9 @@ getState :: TypeCheckMonad TypeInferenceState getState = gets id +modifyErrorOptions :: (ErrorOptions -> ErrorOptions) -> TypeCheckMonad ()+modifyErrorOptions f = modify (\st -> st { errorOptions = f (errorOptions st)})+ getEnvironment :: TypeCheckMonad Env.Environment getEnvironment = gets environment @@ -113,16 +126,6 @@ return res -addDataTypeOrChannel :: Name -> TypeCheckMonad ()-addDataTypeOrChannel n = modify (\ st -> st { - dataTypesAndChannels = n:dataTypesAndChannels st- })--isDataTypeOrChannel :: Name -> TypeCheckMonad Bool-isDataTypeOrChannel n = do- ns <- gets dataTypesAndChannels- return $ n `elem` ns- getErrorContexts :: TypeCheckMonad [ErrorContext] getErrorContexts = gets errorContexts @@ -146,11 +149,14 @@ resetWarnings :: TypeCheckMonad () resetWarnings = modify (\st -> st { warnings = [] }) -addWarning :: Warning -> TypeCheckMonad ()-addWarning w = do- src <- getSrcSpan- let m = mkWarningMessage src w- modify (\ st -> st { warnings = m:(warnings st) })+addWarning :: (ErrorOptions -> Bool) -> Warning -> TypeCheckMonad ()+addWarning warningType w = do+ -- Check and see if the warning is enabled+ errorOpts <- gets errorOptions+ when (warningType errorOpts) $ do+ src <- getSrcSpan+ let m = mkWarningMessage src w+ modify (\ st -> st { warnings = m:(warnings st) }) getInError :: TypeCheckMonad Bool getInError = gets inError@@ -186,6 +192,16 @@ modify (\ st -> st { unificationStack = stk }) return a +addDefinitionName :: Name -> TypeCheckMonad a -> TypeCheckMonad a+addDefinitionName n prog = do+ modify (\st -> st { definitionStack = n : (definitionStack st) })+ a <- prog+ modify (\st -> st { definitionStack = tail (definitionStack st) })+ return a++getDefinitionStack :: TypeCheckMonad [Name]+getDefinitionStack = gets definitionStack+ symmetricUnificationAllowed :: TypeCheckMonad Bool symmetricUnificationAllowed = gets symUnificationAllowed @@ -197,6 +213,23 @@ modify (\st -> st { symUnificationAllowed = b }) return v +markDatatypeAsComparableForEquality :: Name -> TypeCheckMonad ()+markDatatypeAsComparableForEquality n =+ modify (\st -> st { + comparableForEqualityDataTypes = n : comparableForEqualityDataTypes st+ })++unmarkDatatypeAsComparableForEquality :: Name -> TypeCheckMonad ()+unmarkDatatypeAsComparableForEquality n =+ modify (\st -> st { + comparableForEqualityDataTypes = comparableForEqualityDataTypes st \\ [n]+ })++datatypeIsComparableForEquality :: Name -> TypeCheckMonad Bool+datatypeIsComparableForEquality n = do+ ds <- gets comparableForEqualityDataTypes+ return $ n `elem` ds+ -- Error handling -- | Report the error if first parameter is False.@@ -235,16 +268,15 @@ doc $$ trimAndRenderContexts (n-1) docs maxContexts = 3 -tryAndRecover :: - TypeCheckMonad a -> TypeCheckMonad a -> TypeCheckMonad a-tryAndRecover prog handler = tryM prog >>= \x ->+tryAndRecover :: Bool -> TypeCheckMonad a -> TypeCheckMonad a -> TypeCheckMonad a+tryAndRecover retainErrors prog handler = tryM prog >>= \x -> case x of Right a -> return a Left ex -> case ex of SourceError msgs -> do -- The errors will be discarded as the errors propogate up. -- Hence, we reset them.- setErrors msgs+ when retainErrors $ setErrors msgs handler UserError -> handler -- An exception type we don't want to interfer with@@ -258,12 +290,12 @@ -- Type Operations -- ************************************************************************* readTypeRef :: TypeVarRef -> TypeCheckMonad (Either (TypeVar, [Constraint]) Type)-readTypeRef (TypeVarRef tv cs ioref) = - do- mtyp <- readPType ioref- case mtyp of- Just t -> return (Right t)- Nothing -> return (Left (tv, cs))+readTypeRef (TypeVarRef tv cs ioref) = do+ mtyp <- readPType ioref+ case mtyp of+ Just t -> return (Right t)+ Nothing -> return (Left (tv, cs))+readTypeRef (RigidTypeVarRef tv cs _) = return $ Left (tv, cs) writeTypeRef :: TypeVarRef -> Type -> TypeCheckMonad () writeTypeRef (TypeVarRef tv cs ioref) t = setPType ioref t@@ -275,7 +307,7 @@ -- If we don't do this the error is deferred until later case Env.maybeLookup env n of Just symb -> return symb- Nothing -> panic "Name not found after renaming."+ Nothing -> panic $ "Name "++show n++" not found after renaming." -- | Get the type of 'n' and throw an exception if it doesn't exist. getType :: Name -> TypeCheckMonad TypeScheme@@ -345,6 +377,7 @@ return $ TFunction targs' tr' compress (TSeq t) = compress t >>= return . TSeq compress (TSet t) = compress t >>= return . TSet+compress (TMap t1 t2) = return TMap M.$$ compress t1 M.$$ compress t2 compress (TTuple ts) = mapM compress ts >>= return . TTuple compress (TDotable t1 t2)= do t1' <- compress t1@@ -355,4 +388,18 @@ t1' <- compress t1 t2' <- compress t2 return $ TDot t1' t2'+compress (tr @ (TExtendable t pt)) = do+ t <- compress t+ let extract (Just pt) (Left tv) = return $! TExtendable t pt+ extract _ (Right TExtendableEmptyDotList) = return t+ extract _ (Right (TVar pt')) = extractFromTExtendable pt'+ extract _ (Right (TDotable argt rt)) = do+ rt' <- extract Nothing (Right rt)+ argt' <- compress argt+ return $ TDotable argt' rt'+ extract _ (Right t) = panic ("Cannot extract from "++show t)++ extractFromTExtendable pt = readTypeRef pt >>= extract (Just pt)++ extractFromTExtendable pt compress t = return t
src/CSPM/TypeChecker/Pat.hs view
@@ -45,7 +45,9 @@ typeCheck' (PParen p1) = typeCheck p1 typeCheck' (PSet ps) = do t <- ensureAreEqual ps- ensureHasConstraint Eq t+ -- We require CEq here, not CSet as otherwise this would allow processes+ -- to be compared for equality.+ ensureHasConstraint CEq t return $ TSet t typeCheck' (PTuple ps) = do ts <- mapM typeCheck ps
src/CSPM/TypeChecker/Unification.hs view
@@ -1,11 +1,10 @@ module CSPM.TypeChecker.Unification ( generaliseGroup, instantiate, unify, unifyAll, evaluateDots,- typeToDotList,+ typeToDotList, dotableToDotList, substituteTypes, instantiate', ) where import Control.Monad-import Control.Monad.Trans-import Data.List (nub, (\\), intersect, group, sort)+import Data.List (nub, sort) import Prelude import CSPM.DataStructures.Names@@ -15,12 +14,11 @@ import CSPM.TypeChecker.Monad import Util.Exception import Util.Monad-import Util.PrettyPrint -- | Return the free type variables (and their constraints) for all 'TypeVar's -- that occur in 'Type'. freeTypeVars :: Type -> TypeCheckMonad [(TypeVar, [Constraint])]-freeTypeVars = liftM nub . freeTypeVars' +freeTypeVars = liftM (nub . sort) . freeTypeVars' freeTypeVars' :: Type -> TypeCheckMonad [(TypeVar, [Constraint])] freeTypeVars' (TVar tv) = do typ <- readTypeRef tv@@ -34,12 +32,23 @@ freeTypeVars' (TTuple ts) = liftM concat (mapM freeTypeVars' ts) freeTypeVars' (TDotable t1 t2) = liftM concat (mapM freeTypeVars' [t1,t2]) freeTypeVars' (TDot t1 t2) = liftM concat (mapM freeTypeVars' [t1,t2])+freeTypeVars' (TMap t1 t2) = liftM concat (mapM freeTypeVars' [t1,t2]) freeTypeVars' (TDatatype n1) = return [] freeTypeVars' TInt = return [] freeTypeVars' TBool = return [] freeTypeVars' TEvent = return []-freeTypeVars' TEventable = return []+freeTypeVars' TChar = return []+freeTypeVars' (TExtendable t pt) = do+ fvs1 <- freeTypeVars' t+ res <- readTypeRef pt+ case res of + Left (tv, cs) -> do+ return $ (tv, cs):fvs1+ Right t -> do+ fvs2 <- freeTypeVars' t+ return $ fvs1 ++ fvs2 freeTypeVars' TProc = return []+freeTypeVars' TExtendableEmptyDotList = return [] -- | Generalise the types of the declarations. The parameter 'names' gives the -- names that were bound by all the declarations that we are interested in. This@@ -74,20 +83,26 @@ -- | Instantiates the typescheme with some fresh type variables. instantiate :: TypeScheme -> TypeCheckMonad Type-instantiate (ForAll ts t) = do+instantiate ts = instantiate' ts >>= return . fst++instantiate' :: TypeScheme -> TypeCheckMonad (Type, [(TypeVar, Type)])+instantiate' (ForAll ts t) = do tvs <- mapM (freshTypeVarWithConstraints . snd) ts- foldM (\ x y -> substituteType y x) t (zip (map fst ts) tvs)- + let sub = (zip (map fst ts) tvs)+ t <- substituteTypes sub t+ return (t, sub)+ -- | Does 'a' occur somewhere in 't'. occurs :: TypeVar -> Type -> TypeCheckMonad Bool-occurs a (TVar (tvref @ (TypeVarRef tv _ _))) = do+occurs a (TVar tvref) = do res <- readTypeRef tvref case res of - Left (tv,cs)-> return $ a == tv- Right t -> occurs a t+ Left (tv, cs) -> return $ a == tv+ Right t -> occurs a t occurs a (TSet t) = occurs a t occurs a (TSeq t) = occurs a t occurs a (TDot t1 t2) = liftM or (mapM (occurs a) [t1,t2])+occurs a (TMap t1 t2) = liftM or (mapM (occurs a) [t1,t2]) occurs a (TTuple ts) = liftM or (mapM (occurs a) ts) occurs a (TFunction ts t) = liftM or (mapM (occurs a) (t:ts)) occurs a (TDatatype n) = return False@@ -96,7 +111,16 @@ occurs a TBool = return False occurs a TProc = return False occurs a TEvent = return False-occurs a TEventable = return False+occurs a TChar = return False+occurs a (TExtendable t pt) = do+ b <- occurs a t+ if b then return True else do + res <- readTypeRef pt+ case res of + Left (tv, cs) | a == tv -> return True+ Left _ -> return False+ Right t -> occurs a t+occurs a TExtendableEmptyDotList = return False -- | Unifys all types to a single type. The first type is used as the -- expected Type in error messages.@@ -111,35 +135,82 @@ -- constraint, or can be made to satsify the constraint by appropriate type -- substitutions, in which case the type substitutions are performed. unifyConstraint :: Constraint -> Type -> TypeCheckMonad ()+unifyConstraint c (TVar v) | isRigid v = do+ when (not (or (map (constraintImpliedBy c) (constraints v)))) $ do+ raiseMessageAsError $ constraintUnificationErrorMessage c (TVar v) unifyConstraint c (TVar v) = do res <- readTypeRef v case res of Left (tva, cs) -> - if c `elem` cs then return () else do- fv <- freshTypeVarWithConstraints (nub (c:cs))+ when (not (or (map (constraintImpliedBy c) cs))) $ do+ fv <- freshTypeVarWithConstraints (nub (sort (c:cs))) applySubstitution v fv return () Right t -> unifyConstraint c t-unifyConstraint c TInt = return ()-unifyConstraint Eq TBool = return () -- Bools are not orderable P524-unifyConstraint Inputable TBool = return ()-unifyConstraint c (TSeq t) = unifyConstraint c t-unifyConstraint Inputable (TDot t1 t2) = do+unifyConstraint c (TExtendable t pt) = do+ res <- readTypeRef pt+ case res of+ Left _ ->+ if c == CYieldable then+ safeWriteTypeRef pt TExtendableEmptyDotList+ else if c == CInputable then do+ unifyConstraint c t+ safeWriteTypeRef pt TExtendableEmptyDotList+ else + when (c /= CEq && c /= CSet) $ raiseMessageAsError $+ constraintUnificationErrorMessage c (TExtendable t pt)+ Right t -> do+ t' <- compress (TExtendable t pt)+ unifyConstraint c t'+unifyConstraint CYieldable (TDatatype n) = return ()+unifyConstraint CYieldable TEvent = return ()+unifyConstraint CYieldable (TDot t1 t2) = do t <- evaluateDots (TDot t1 t2) case t of- TDot t1 t2 -> mapM_ (unifyConstraint Inputable) [t1,t2]- _ -> unifyConstraint Inputable t-unifyConstraint c (TDot t1 t2) = mapM_ (unifyConstraint c) [t1,t2]-unifyConstraint c (TSet t) = return () -- All set elements must support comparison+ TDot _ _ -> raiseMessageAsError $+ constraintUnificationErrorMessage CYieldable t+ _ -> unifyConstraint CYieldable t+unifyConstraint CYieldable t =+ raiseMessageAsError $ constraintUnificationErrorMessage CYieldable t+unifyConstraint CSet TProc = return ()+unifyConstraint c TInt = return ()+unifyConstraint c TChar = return ()+ -- Bools are not orderable+unifyConstraint c TBool | c /= COrd = return ()+unifyConstraint CEq (TDatatype n) = do+ b <- datatypeIsComparableForEquality n+ if b then return ()+ else raiseMessageAsError $ constraintUnificationErrorMessage CEq (TDatatype n)+-- User data types are not orderable+unifyConstraint c (TDatatype n) | c /= COrd = return ()+unifyConstraint c TEvent | c /= COrd = return ()+unifyConstraint CInputable (TSeq _) = return ()+unifyConstraint CSet (TSeq t) = unifyConstraint CSet t+unifyConstraint CEq (TSeq t) = unifyConstraint CEq t+-- Ordering sequenecs means prefixing testing, which requires only equality+unifyConstraint COrd (TSeq t) = unifyConstraint CEq t+unifyConstraint CInputable (TTuple _) = return () unifyConstraint c (TTuple ts) = mapM_ (unifyConstraint c) ts-unifyConstraint Eq TEvent = return () -- Events comparable only-unifyConstraint Inputable TEvent = return ()-unifyConstraint Eq TEventable = return () -- ditto-unifyConstraint Eq (TDotable a b) = -- channels and datatypes are only dotable things- mapM_ (unifyConstraint Eq) [a,b]-unifyConstraint Eq (TDatatype n) = return ()- -- User data types are not orderable P524-unifyConstraint Inputable (TDatatype n) = return ()+-- Dotable types are not orderable (as events and datatypes are not). Nor are+-- they inputable. We can create sets of them though.+unifyConstraint CEq (TDotable a b) = unifyConstraint CEq a >> unifyConstraint CEq b+unifyConstraint CSet (TDotable a b) = unifyConstraint CSet a >> unifyConstraint CSet b+unifyConstraint CInputable (TDot t1 t2) = do+ t <- evaluateDots (TDot t1 t2)+ case t of+ TDot t1 t2 -> mapM_ (unifyConstraint CInputable) [t1,t2]+ _ -> unifyConstraint CInputable t+unifyConstraint c (TDot t1 t2) | c /= COrd =+ unifyConstraint c t1 >> unifyConstraint c t2+unifyConstraint CSet (TSet t) = unifyConstraint CSet t+unifyConstraint CInputable (TSet t) = return ()+unifyConstraint CEq (TSet t) = unifyConstraint CEq t+-- sets are comparable for equality/orderable iff their inner type is+-- comparable for equality (as set ordering means subset testing, which requires+-- only equality)+unifyConstraint COrd (TSet t) = unifyConstraint CEq t+unifyConstraint CInputable (TMap _ _) = return ()+unifyConstraint c (TMap k v) = unifyConstraint c k >> unifyConstraint c v unifyConstraint c t = raiseMessageAsError $ constraintUnificationErrorMessage c t @@ -154,6 +225,9 @@ return (t:ts1++ts2) _ -> return [t] +dotableToDotList :: Type -> TypeCheckMonad ([Type], Type)+dotableToDotList t = compress t >>= return . reduceDotable+ -- | Takes a 'TDotable' and returns a tuple consisting of: -- the arguments that it takes and the ultimate return type. Note -- that due to the way that TDotables are introduced the return type@@ -183,6 +257,10 @@ isDotable (TDotable _ _) = True isDotable _ = False +isExtendable :: Type -> Bool+isExtendable (TExtendable _ _) = True+isExtendable _ = False+ isSimple :: Type -> Bool isSimple a = not (isDotable a) && not (isVar a) @@ -234,11 +312,15 @@ ts <- combineTypeLists as bs return (t:ts) --- ASSUMPTION: argt is not a TDot, or a TDotable. +-- ASSUMPTION: argt is not a TDot -- Otherwise, if the head of one of the lists is dotable then we proceed -- as follows combineTypeLists ((a0@(TDotable argt rt)):a:as) (b:bs)+ | isDotable argt = do+ -- No choice but to unify a with argt+ unify argt a+ combineTypeLists (rt:as) (b:bs) | (isSimple a || (isVar a && as /= [])) = do -- By assumption a is not a TDot and so either, a is simple and -- hence we unify argt and a or, it is a var. Then, providing @@ -258,7 +340,7 @@ -- the end we still want the b:bs type list to be as short as -- possible (and thus don't need to extend it). Hence, we can -- use the evalTypeListList function.- t:ts <- evalTypeList (b:bs)+ t:ts <- evalTypeList LongestMatch (b:bs) -- The first type in this list must be equal to urt t1 <- unify urt t -- We want to set the var a to all the args, plus any extension@@ -278,12 +360,15 @@ -- Symmetric case of above combineTypeLists (a:as) ((TDotable argt rt):b:bs)+ | isDotable argt = do+ unify argt b+ combineTypeLists (a:as) (rt:bs) | (isSimple b || (isVar b && bs /= [])) = do unify b argt combineTypeLists (a:as) (rt:bs) | isVar b = do let (args, urt) = reduceDotable (TDotable argt rt)- t:ts <- evalTypeList (a:as)+ t:ts <- evalTypeList LongestMatch (a:as) t1 <- unify t urt combineTypeLists [b] (args++ts) return (t1:ts)@@ -303,7 +388,7 @@ -- stack in order to ensure error messages are helpful. unify :: Type -> Type -> TypeCheckMonad Type unify texp tact = do- text <- compress texp+ texp <- compress texp tact <- compress tact addUnificationPair (texp, tact) (unifyNoStk texp tact) @@ -315,14 +400,25 @@ res1 <- readTypeRef t1 res2 <- readTypeRef t2 case (res1, res2) of- (Left (tv1, cs1), Left (tv2,cs2)) -> do- fv <- freshTypeVarWithConstraints (nub (cs1 ++ cs2))- applySubstitution t1 fv- applySubstitution t2 fv- return fv- (Left _, Right t) -> unify (TVar t1) t- (Right t, Left _) -> unify t (TVar t2)- (Right t1, Right t2) -> unify t1 t2+ (Left (tv1, cs1), Left (tv2, cs2)) -> do+ let cs = nub $ sort $ cs1++cs2+ if isRigid t1 && isRigid t2 then do+ when (t1 /= t2) $ raiseUnificationError False+ return $ TVar t1+ else if isRigid t1 then do+ mapM_ (flip unifyConstraint (TVar t1)) cs+ applySubstitution t2 (TVar t1)+ else if isRigid t2 then do+ mapM_ (flip unifyConstraint (TVar t2)) cs+ applySubstitution t1 (TVar t2)+ else do+ fv <- freshTypeVarWithConstraints cs+ applySubstitution t1 fv+ applySubstitution t2 fv+ return fv+ (Left _, Right t) -> unify (TVar t1) t+ (Right t, Left _) -> unify t (TVar t2)+ (Right t1, Right t2) -> unify t1 t2 unifyNoStk (TVar a) b = do res <- readTypeRef a case res of@@ -344,9 +440,7 @@ unifyNoStk TBool TBool = return TBool unifyNoStk TProc TProc = return TProc unifyNoStk TEvent TEvent = return TEvent-unifyNoStk TEventable TEventable = return TEventable-unifyNoStk TEvent TEventable = return TEvent-unifyNoStk TEventable TEvent = return TEvent+unifyNoStk TChar TChar = return TChar unifyNoStk (TDatatype n1) (TDatatype n2) | n1 == n2 = return $ TDatatype n1 @@ -361,6 +455,10 @@ unifyNoStk (TSet t1) (TSet t2) = do t <- unify t1 t2 return $ TSet t+unifyNoStk (TMap k1 v1) (TMap k2 v2) = do+ k <- unify k1 k2+ v <- unify v1 v2+ return $ TMap k v unifyNoStk (TTuple ts1) (TTuple ts2) | length ts1 == length ts2 = do ts <- zipWithM unify ts1 ts2 return $ TTuple ts@@ -373,35 +471,55 @@ -- to get to this return type (argsA, rtA) = (reduceDotable . toNormalForm) a (argsB, rtB) = (reduceDotable . toNormalForm) b- -- The return type of the combined dotable must be the unified version- -- of the return types- rt <- unify rtA rtB- case (rtA, rtB) of- (TEventable, TEventable) -> panic "TC: double eventable"- (TEventable, _) -> do+ (TExtendable _ _, TExtendable _ _) -> do+ rt <- unify rtA rtB+ -- In this case we have two things of the form X=>Eventable,+ -- X'=> Eventable. WLOG suppose X'=X^Y. Then, we unify to X.Y=>Eventable.+ as <- evalTypeList LongestMatch argsA+ bs <- evalTypeList LongestMatch argsB+ let as' = map (snd . reduceDotable . toNormalForm) as+ bs' = map (snd . reduceDotable . toNormalForm) bs+ ts <- zipWithM unify as' bs'+ let ts' = drop (length ts) (if length as == length ts then bs else as)+ return $ TDotable (foldl1 TDot (ts++ts')) rtA+ (TExtendable _ _, _) -> do -- Firstly, evaluate each type list to reduce it; this means -- that it will not have any terms like TDotable TInt ..., TInt..- as <- evalTypeList argsA- bs <- evalTypeList argsB+ as <- evalTypeList LongestMatch argsA+ bs <- evalTypeList LongestMatch argsB -- As the left argument is eventable we compute what arguments- -- would be required to make it into a TEventable (by computing+ -- would be required to make it into a TExtendable (by computing -- the ultimate return types of each element). let as' = map (snd . reduceDotable . toNormalForm) as -- These must be equal to the argument types that are required to -- reach rtB, hence we unify.- zipWithM unify as' bs+ ts <- zipWithM unify as' bs+ let remainingArgs = drop (length as') bs+ unify rtA (foldr TDotable rtB remainingArgs) -- The most general type will have the arguments of bs, rather -- than the arguments of as (bs provide more information).- return $ TDotable (foldl1 TDot bs) rt- (_, TEventable) -> do- as <- evalTypeList argsA- bs <- evalTypeList argsB+ let ts' = drop (length ts) (if length as' == length ts then bs else as')+ args = ts ++ ts'+ return $ TDotable (foldl1 TDot args) rtB+ (_, TExtendable _ _) -> do+ rt <- unify rtA rtB+ as <- evalTypeList LongestMatch argsA+ bs <- evalTypeList LongestMatch argsB let bs' = map (snd . reduceDotable . toNormalForm) bs- zipWithM unify as bs'- return $ TDotable (foldl1 TDot as) rt+ ts <- zipWithM unify as bs'+ let remainingArgs = drop (length bs') as+ unify (foldr TDotable rtA remainingArgs) rtB+ -- The most general type will have the arguments of bs, rather+ -- than the arguments of as (bs provide more information).+ let ts' = drop (length ts) (if length bs' == length ts then as else bs')+ args = ts ++ ts'+ return $ TDotable (foldl1 TDot args) rtA (_, _) -> do- -- If neither is a TEventable then the args must be the same.+ -- The return type of the combined dotable must be the unified version+ -- of the return types+ rt <- unify rtA rtB+ -- If neither is a TExtendable then the args must be the same. -- Hence, unify the two argument lists. args <- combineTypeLists argsA argsB return $ TDotable (foldl1 TDot args) rt@@ -414,7 +532,7 @@ ts <- combineTypeLists a b return $ foldl1 TDot ts --- TDot + TEvent/TEventable/TDatatype/TDotable+-- TDot + TEvent/TExtendable/TDatatype/TDotable unifyNoStk (TDot t1 t2) (TDatatype n) = do b <- symmetricUnificationAllowed@@ -436,15 +554,28 @@ unify (TDotable t2 TEvent) t1 return TEvent -unifyNoStk (TDot t1 t2) TEventable = do+unifyNoStk (TDot t1 t2) (TExtendable t pt) = do b <- symmetricUnificationAllowed if not b then raiseUnificationError False else return ()- tl <- unify (TDotable t2 TEventable) t1+ tl <- unify (TDotable t2 (TExtendable t pt)) t1 return $ TDot tl t2 -unifyNoStk TEventable (TDot t1 t2) = do- tl <- unify (TDotable t2 TEventable) t1- return $ TDot tl t2+unifyNoStk (TExtendable t pt) (TDot t1 t2) = do+ -- We actually want the 'shortest match rule' here, so we inline a version+ -- of evalTypeList that does so.+ tl <- typeToDotList (TDot t1 t2)+ tl <- mapM (\x -> compress x >>= return . toNormalForm) tl+ -- We actually want the shortest match here since the expected type is+ -- extendable, and thus the user is most likely to want just to consume the+ -- first item.+ tl <- evalTypeList ShortestMatch tl+ -- Now, unify normally. If we still have a dot list then we fall back to+ -- the usual way (which will require the longest match rule).+ case foldr1 TDot tl of+ TDot t1 t2 -> do+ t1' <- unify (TDotable t2 (TExtendable t pt)) t1+ return $ TDot t1' t2+ tl -> unify (TExtendable t pt) tl unifyNoStk (TDot t1 t2) (TDotable argt rt) = do b <- symmetricUnificationAllowed@@ -456,15 +587,44 @@ unify (TDotable t2 (TDotable argt rt)) t1 return $ TDotable argt rt -unifyNoStk (TDotable argt rt) TEventable = do- unify TEventable rt- return $ TDotable argt rt-unifyNoStk TEventable (TDotable argt rt) = do- unify TEventable rt- return $ TDotable argt rt+unifyNoStk (TDotable argt rt) (TExtendable t pt) = do+ -- unify argt=>rt and pt=>*t.+ -- Check rt is of the form pt'=>*t.+ -- Args for pt thus become argt:pt'+ pt' <- freshTypeVarRef []+ rt' <- unify (TExtendable t pt') rt+ safeWriteTypeRef pt $! TDotable argt (TVar pt')+ return $! TDotable argt (TExtendable t pt')+unifyNoStk (TExtendable t pt) (TDotable argt rt) = do+ pt' <- freshTypeVarRef []+ rt' <- unify (TExtendable t pt') rt+ safeWriteTypeRef pt $! TDotable argt (TVar pt')+ return $! TDotable argt (TExtendable t pt') +unifyNoStk (TExtendable t1 pt1) (TExtendable t2 pt2) | pt1 == pt2 = do+ t <- unify t1 t2+ return $ TExtendable t pt1+unifyNoStk (TExtendable t1 pt1) (TExtendable t2 pt2) = do+ t <- unify t1 t2+ -- They need to use the same variable now+ if isRigid pt2 then safeWriteTypeRef pt1 (TVar pt2)+ else safeWriteTypeRef pt2 (TVar pt1)+ return $ TExtendable t pt1+unifyNoStk (TExtendable t1 pt) t2 = do+ t <- unify t1 t2+ safeWriteTypeRef pt TExtendableEmptyDotList+ return t+unifyNoStk t1 (TExtendable t2 pt) = do+ t <- unify t1 t2+ safeWriteTypeRef pt TExtendableEmptyDotList+ return t+ unifyNoStk t1 t2 = raiseUnificationError False +safeWriteTypeRef :: TypeVarRef -> Type -> TypeCheckMonad ()+safeWriteTypeRef (RigidTypeVarRef tv cs n) t = raiseUnificationError False+safeWriteTypeRef tvref t = writeTypeRef tvref t+ -- | Raises a unification error. If the passed flag is True then -- any dots are not evaluated in the error. This is to avoid infinite loops that -- can occur, for example, whilst unifiying:@@ -479,38 +639,42 @@ t1 <- compress t1 t2 <- compress t2 -- Try and tidy any dot lists- (t1, t2) <- tryAndRecover (do+ (t1, t2) <- tryAndRecover False (do t1 <- evaluateDots t1 t2 <- evaluateDots t2 return (t1, t2)) (return (t1,t2)) return (t1, t2)) ts raiseMessageAsError $ unificationErrorMessage cts- + -- Returns the type that we substitute for -- NB: in a quantified type we do not apply the substitution to any -- quantified variables applySubstitution :: TypeVarRef -> Type -> TypeCheckMonad Type-applySubstitution (tvref @ (TypeVarRef tv _ _)) typ = do+applySubstitution tvref typ = do t' <- compress typ- b <- occurs tv typ- (b, t) <- if b then do- t <- evaluateDots t'- b <- occurs tv t- return (b,t)- else return (b, typ)- errorIfFalse (not b)- (infiniteUnificationMessage (TVar tvref) t')- writeTypeRef tvref t- return typ+ b <- occurs (typeVar tvref) typ+ if b then do+ t <- evaluateDots t'+ if t == TVar tvref then return t else do+ b <- occurs (typeVar tvref) t+ errorIfFalse (not b) (infiniteUnificationMessage (TVar tvref) typ)+ safeWriteTypeRef tvref t+ return t+ else do+ safeWriteTypeRef tvref typ+ return typ +substituteTypes :: [(TypeVar, Type)] -> Type -> TypeCheckMonad Type+substituteTypes sub t = foldM (\ x y -> substituteType y x) t sub+ -- | Applies a subtitution directly to the type. This is used in -- type instantiation where we create a fresh type for each universal -- variable substituteType :: (TypeVar, Type) -> Type -> TypeCheckMonad Type-substituteType (tv, t) (b @ (TVar (a @ (TypeVarRef tv' cs ioref)))) = do- res <- readTypeRef a+substituteType (tv, t) (b @ (TVar tvref)) = do+ res <- readTypeRef tvref case res of- Left tva -> if tv == tv' then return t else return b+ Left (tv', _) -> if tv == tv' then return t else return b Right t' -> substituteType (tv, t) t' substituteType sub (TFunction targs tr) = do targs' <- mapM (substituteType sub) targs@@ -522,6 +686,8 @@ t2' <- substituteType sub t2 return $ TDot t1' t2' substituteType sub (TSet t) = substituteType sub t >>= return . TSet+substituteType sub (TMap t1 t2) =+ return TMap $$ substituteType sub t1 $$ substituteType sub t2 substituteType sub (TDotable t1 t2) = do t1' <- substituteType sub t1 t2' <- substituteType sub t2@@ -533,7 +699,18 @@ substituteType sub TBool = return TBool substituteType sub TProc = return TProc substituteType sub TEvent = return TEvent-substituteType sub TEventable = return TEventable+substituteType sub TChar = return TChar+substituteType sub TExtendableEmptyDotList = return TExtendableEmptyDotList+substituteType (sub@(tv, TVar spt)) (TExtendable t tvref) = do+ t' <- substituteType sub t+ res <- readTypeRef tvref+ case res of+ Left (tv', _) -> do+ let pt' = if tv == tv' then spt else tvref+ return $ TExtendable t' pt'+ Right t' -> do+ substituteType sub t'+ return $ TExtendable t' tvref -- | Takes a type and attempts to simplify all TDots inside -- by combining TDotable t1 t2 and arguments.@@ -544,8 +721,13 @@ Left (tv, cs) -> return $ TVar t Right t -> evaluateDots t evaluateDots (TSet t) = evaluateDots t >>= return . TSet+evaluateDots (TMap t1 t2) = return TMap $$ evaluateDots t1 $$ evaluateDots t2 evaluateDots (TSeq t) = evaluateDots t >>= return . TSeq evaluateDots (TTuple ts) = mapM evaluateDots ts >>= return . TTuple+evaluateDots (TExtendable t pt) = compress (TExtendable t pt) >>= \ t -> do+ case t of+ TExtendable t pt -> return $! TExtendable t pt+ t -> evaluateDots t evaluateDots (TFunction t1 t2) = do t1' <- mapM evaluateDots t1 t2' <- evaluateDots t2@@ -553,30 +735,54 @@ evaluateDots t = do ts <- typeToDotList t ts <- mapM (\t -> compress t >>= return . toNormalForm) ts- ts <- evalTypeList ts+ ts <- evalTypeList LongestMatch ts return $ foldr1 TDot ts +data TypeListMode = ShortestMatch | LongestMatch deriving Eq++evalTypeList m ts = mapM compress ts >>= \ ts -> evalTypeList' m ts+ -- Assumption, argument of TDotable is always simple -- and that result of TDotable is either another TDotable or -- simple.-evalTypeList :: [Type] -> TypeCheckMonad [Type]-evalTypeList (t:[]) = return [t]-evalTypeList ((TDot t1 t2):ts) = evalTypeList (t1:t2:ts)-evalTypeList (TDotable argt rt : arg : args)- | isVar arg && args == [] = do+evalTypeList' :: TypeListMode -> [Type] -> TypeCheckMonad [Type]+evalTypeList' _ (t:[]) = return [t]+evalTypeList' m ((TDot t1 t2):ts) = evalTypeList m (t1:t2:ts)+evalTypeList' m (TDotable argt rt : arg : args)+ | isVar arg && args == [] && m == LongestMatch = do let (args, urt) = reduceDotable (TDotable argt rt) -- Implement longest match rule unify arg (foldr1 TDot args) return [urt]+ | isVar arg && args == [] && m == ShortestMatch = do+ let (arg':args, urt) = reduceDotable (TDotable argt rt)+ -- Implement SHORTEST match rule+ unify arg' arg+ return [foldr TDotable urt args]+ | isExtendable arg = do+ let TExtendable rtA ptref = arg+ t <- unify argt rtA+ evalTypeList m (TExtendable rt ptref : args) | not (isDotable arg) = do -- Implement shortest match rule (if isVar ag) t <- unify argt arg- evalTypeList (rt:args)+ evalTypeList m (rt:args)+ | isDotable argt && isDotable arg = do+ unify argt arg+ evalTypeList m (rt:args) | isDotable arg = do let (argsA, rtA) = reduceDotable arg t <- unify argt rtA- evalTypeList (foldr TDotable rt argsA : args)+ evalTypeList m (foldr TDotable rt argsA : args)+evalTypeList' LongestMatch (TExtendable urt pt : args) = do+ args <- evalTypeList LongestMatch args+ safeWriteTypeRef pt $! foldr TDotable TExtendableEmptyDotList args+ return [urt]+evalTypeList' ShortestMatch (TExtendable urt pt : arg : args) = do+ res <- readTypeRef pt+ safeWriteTypeRef pt $! TDotable arg TExtendableEmptyDotList+ evalTypeList ShortestMatch (urt : args) -- If the first argument isn't a dotable we ignore it.-evalTypeList (t:ts) = do- ts <- evalTypeList ts+evalTypeList' m (t:ts) = do+ ts <- evalTypeList m ts return $ t:ts
+ src/Data/Graph/ST.hs view
@@ -0,0 +1,287 @@+{-# LANGUAGE BangPatterns #-}+-- | Graph algorithms in the ST monad.+module Data.Graph.ST (+ Graph, newGraph, newGraphNoDupeNodes,+ successorNodes,+ -- * SCC Computation+ SCC(..), sccs,+ -- * Relation Tools+ nonReflexiveRepresentativesForNodes,+) where++import Control.Monad+import Control.Monad.ST+import Data.Array.ST+import Data.Array.Unboxed+import Data.Hashable+import qualified Data.HashTable.Class as H+import qualified Data.HashTable.ST.Basic as B+import Data.List (sortBy)+import Data.STRef+import qualified Data.Set.MutableBit as BS++type HashTable s k v = B.HashTable s k v++data SCC a = AcyclicSCC a | CyclicSCC [a] deriving (Eq, Show)++nodesOfScc :: SCC a -> [a]+nodesOfScc (AcyclicSCC a) = [a]+nodesOfScc (CyclicSCC as) = as++-- | A graph of 'a's in the state thread s.+--+-- We store the successors in an unboxed array and store indexes into the+-- array for the index at which at a node's successors start. This is very+-- memory efficient and cache friendly.+data Graph s a = Graph {+ nodeMap :: HashTable s a Int,+ invNodeMap :: STArray s Int a,+ successorsArray :: UArray Int Int,+ successorStarts :: UArray Int Int,+ nodeCount :: Int+ }++-- a version of mapM that accumulates on the heap, not the stack.+mapM' f = go [] + where + go acc [] = return (reverse acc) + go acc (a:as) = do {x <- f a; go (x:acc) as} ++successorsForNode :: Graph s a -> Int -> [Int]+successorsForNode gr nid =+ map (\ix -> successorsArray gr!ix) [successorStarts gr!nid..(successorStarts gr!(nid+1) -1)]++successorNodes :: (Eq a, Hashable a) => Graph s a -> a -> ST s [a]+successorNodes graph node = do+ Just nid <- H.lookup (nodeMap graph) node+ mapM (readArray (invNodeMap graph)) (successorsForNode graph nid)++newGraph :: (Eq a, Hashable a) => [a] -> [(a, a)] -> ST s (Graph s a)+newGraph nodes edges = do+ nodeNumberTable <- H.new :: ST s (HashTable s a Int)++ nextNode <- newSTRef 0+ -- We firstly map each of the nodes to an int in [0, length nodes)+ mapM_ (\n -> do+ mnid <- H.lookup nodeNumberTable n+ case mnid of+ Just nid -> return ()+ Nothing -> do+ nid <- readSTRef nextNode+ H.insert nodeNumberTable n nid+ writeSTRef nextNode $! nid+1+ ) nodes+ nodeCount <- readSTRef nextNode++ -- The following requires mapM otherwise we might pop the stack+ intEdges <- mapM' (\(x,y) -> do+ Just ix <- H.lookup nodeNumberTable x+ Just iy <- H.lookup nodeNumberTable y+ return (ix,iy)+ ) edges++ invNodeNumberTable <- newArray_ (0, nodeCount-1) :: ST s (STArray s Int a)+ H.mapM_ (\ (a,aid) -> writeArray invNodeNumberTable aid a) nodeNumberTable++ let edgeCount = length edges+ !sortedEdges = sortBy (\ x y -> compare (fst x) (fst y)) intEdges+ successors :: UArray Int Int+ !successors = listArray (0, edgeCount-1) (map snd sortedEdges)+ -- nodeStarts[nodeCount] = edgeCount, to make everything easier.+ nodeStarts :: UArray Int Int+ !nodeStarts = listArray (0, nodeCount) (computeStarts (-1) 0 sortedEdges)+ computeStarts :: Int -> Int -> [(Int, Int)] -> [Int]+ computeStarts currentNode _ [] | currentNode == nodeCount = []+ computeStarts currentNode eix [] = eix : computeStarts (currentNode+1) eix []+ computeStarts currentNode eix ((n,_):es) | currentNode == n =+ computeStarts currentNode (eix+1) es+ computeStarts currentNode eix ((n,s):es) =+ eix : computeStarts (currentNode+1) eix ((n,s):es)++ return $! Graph {+ nodeMap = nodeNumberTable,+ invNodeMap = invNodeNumberTable,+ successorsArray = successors,+ successorStarts = nodeStarts,+ nodeCount = nodeCount+ }++newGraphNoDupeNodes :: (Eq a, Hashable a) => [a] -> [(a, a)] -> ST s (Graph s a)+newGraphNoDupeNodes nodes edges = do+ let nodeCount = length nodes+ edgeCount = length edges+ + nodeNumberTable <- H.newSized nodeCount :: ST s (HashTable s a Int)+ invNodeNumberTable <- newArray_ (0, nodeCount-1) :: ST s (STArray s Int a)+ -- We firstly map each of the nodes to an int in [0, length nodes)+ zipWithM (H.insert nodeNumberTable) nodes [0..]+ zipWithM (writeArray invNodeNumberTable) [0..] nodes+ -- The following requires mapM otherwise we might pop the stack+ intEdges <- mapM' (\(x,y) -> do+ Just ix <- H.lookup nodeNumberTable x+ Just iy <- H.lookup nodeNumberTable y+ return (ix,iy)+ ) edges++ let !sortedEdges = sortBy (\ x y -> compare (fst x) (fst y)) intEdges+ successors :: UArray Int Int+ !successors = listArray (0, edgeCount-1) (map snd sortedEdges)+ -- nodeStarts[nodeCount] = edgeCount, to make everything easier.+ nodeStarts :: UArray Int Int+ !nodeStarts = listArray (0, nodeCount) (computeStarts (-1) 0 sortedEdges)+ computeStarts :: Int -> Int -> [(Int, Int)] -> [Int]+ computeStarts currentNode _ [] | currentNode == nodeCount = []+ computeStarts currentNode eix [] = eix : computeStarts (currentNode+1) eix []+ computeStarts currentNode eix ((n,_):es) | currentNode == n =+ computeStarts currentNode (eix+1) es+ computeStarts currentNode eix ((n,s):es) =+ eix : computeStarts (currentNode+1) eix ((n,s):es)++ return $! Graph {+ nodeMap = nodeNumberTable,+ invNodeMap = invNodeNumberTable,+ successorsArray = successors,+ successorStarts = nodeStarts,+ nodeCount = nodeCount+ }++-- | An optimised implementation of Tarjan's SCC algorithm.+sccs :: (Eq a, Hashable a) => Graph s a -> ST s [SCC a]+sccs graph = do+ sccs <- intSccs graph+ mapM (\ scc -> case scc of+ AcyclicSCC xid -> do+ x <- readArray (invNodeMap graph) xid+ return $! AcyclicSCC x+ CyclicSCC xids -> do+ xs <- mapM (readArray (invNodeMap graph)) xids+ return $! CyclicSCC xs) sccs++-- | An optimised implementation of Tarjan's SCC algorithm.+--+-- Returns the SCCs according to a reverse topological sort of the DAG of the+-- SCCs (i.e. if an scc x has an edge to an scc y, then x preceeds y).+intSccs :: (Eq a, Hashable a) => Graph s a -> ST s [SCC Int]+intSccs graph = do+ let successors = successorsArray graph+ nodeStarts = successorStarts graph+ -- The DFS number of each node+ dfsNumber <- newArray (0, nodeCount graph-1) (-1) :: ST s (STArray s Int Int)+ -- The lowlink of each node.+ lowlink <- newArray (0, nodeCount graph-1) (-1) :: ST s (STArray s Int Int)+ -- The current strongly connected component+ pointStack <- newSTRef []+ -- A bitset represetning the set of nodes in the current SCC.+ stackSet <- BS.newSized (nodeCount graph-1)+ -- The next DFS number+ nextDFSNumber <- newSTRef 0+ -- The set of computed SCCs.+ computedSccs <- newSTRef []++ -- We use an explicit stack to avoid popping the Haskell stack. Invariant+ -- is that the given node/transition has not yet been visited.+ programStack <- newSTRef []++ let modifyStackTop nid tid = modifySTRef programStack (\ stk -> (nid, tid):tail stk)+ popStack = do+ _:stk <- readSTRef programStack+ modifySTRef programStack (\ _ -> stk )+ case stk of+ [] -> return ()+ (nid, tid):_ -> visitTransition' nid tid++ strongConnect nid = do+ ix <- readSTRef nextDFSNumber+ writeArray lowlink nid ix+ writeArray dfsNumber nid ix+ writeSTRef nextDFSNumber (ix+1)+ modifySTRef pointStack (\xs -> nid : xs)+ BS.insert stackSet nid++ modifySTRef programStack (\stk -> (nid, nodeStarts!nid) : stk)+ visitTransition nid (nodeStarts!nid)++ visitTransition nid tid | tid >= nodeStarts!(nid+1) = do+ -- Finish visitng this node+ ix <- readArray dfsNumber nid+ ourLowLink <- readArray lowlink nid+ when (ourLowLink == ix) $ do+ -- Found a new SCC - pop items off the stack+ let takeItems is [] = return (is, [])+ takeItems is (nid:nids) = do+ nodeNum <- readArray dfsNumber nid+ if nodeNum >= ix then takeItems (nid:is) nids+ else return (is, nid:nids)+ items <- readSTRef pointStack+ (scc, remaining) <- takeItems [] items+ mapM_ (BS.remove stackSet) scc+ writeSTRef pointStack remaining+ let !scc' = case scc of+ [x] | x `elem` successorsForNode graph x -> CyclicSCC [x]+ [x] -> AcyclicSCC x+ _ -> CyclicSCC scc+ modifySTRef computedSccs (\sccs -> scc' : sccs)+ popStack+ visitTransition nid tid = do+ let sid = successors!tid+ + dfsNum <- readArray dfsNumber sid+ if dfsNum == -1 then do+ -- Found a tree arc+ -- Record that we need to come back to here.+ modifyStackTop nid tid+ strongConnect sid+ else do+ b <- BS.member stackSet sid+ when b $ do+ theirNumber <- readArray dfsNumber sid+ ourLowLink <- readArray lowlink nid+ writeArray lowlink nid (min ourLowLink theirNumber) + visitTransition nid (tid+1)++ visitTransition' nid tid = do+ let sid = successors!tid+ ourLowLink <- readArray lowlink nid+ theirLowLink <- readArray lowlink sid+ writeArray lowlink nid (min ourLowLink theirLowLink)+ visitTransition nid (tid+1)++ mapM_ (\nid -> do+ num <- readArray dfsNumber nid+ when (num == -1) $ strongConnect nid) [0..nodeCount graph-1]+ readSTRef computedSccs++-- | Given a graph, computes the transitive (but not reflexive) closure of the+-- graph and then returns the relation (a,b) such that b is the representative+-- member for a. Note, no pairs of the form a == b are returned, even if there+-- is an edge from a to b. This is to minimise the size of the transitive+-- closure.+nonReflexiveRepresentativesForNodes :: (Eq a, Hashable a) => Graph s a -> ST s [(a, a)]+nonReflexiveRepresentativesForNodes graph = do+ sccs <- intSccs graph+ let sccCount = length sccs+ -- A map from node id to the id of the scc id+ sccForNode <- newArray (0, nodeCount graph-1) (-1) :: ST s (STUArray s Int Int)+ zipWithM (\ sccId scc ->+ mapM_ (\ nid -> writeArray sccForNode nid sccId) (nodesOfScc scc)+ ) [0..] sccs++ -- Map from scc id to node representative (of the scc)+ sccRepresentatives <- newArray (0, sccCount-1) (-1) :: ST s (STUArray s Int Int)+ zipWithM (\ sccId scc ->+ writeArray sccRepresentatives sccId (head (nodesOfScc scc))+ ) [0..] sccs++ -- Now, create the representative pairs+ xss <- mapM' (\nid -> do+ sccId <- readArray sccForNode nid+ sccRepr <- readArray sccRepresentatives sccId+ if sccRepr == nid then + -- don't include+ return []+ else do+ n <- readArray (invNodeMap graph) nid+ repr <- readArray (invNodeMap graph) sccRepr+ return [(n, repr)]+ ) [0..nodeCount graph-1]+ return $! concat xss
+ src/Data/Set/MutableBit.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE BangPatterns #-}+-- | Bit sets represent sets of integers by setting bit i to 1 iff i is in the+-- set. This means they can effeciently support many operations, like union+-- (bitwise or), intersection (bitwise and) etc. However, they obviously+-- can only represent sets of relatively small integers, as they require+-- O(max(S)) bits.+module Data.Set.MutableBit (+ -- * Mutable Bit Sets+ Set, + -- ** Creation+ newSized,+ -- ** Standard Operations+ member,+ insert,+ remove,+)+where++import Control.Monad.ST+import Data.Array.ST+import Data.Bits+import Data.Word+import Prelude hiding (map, mapM)+import qualified Prelude as P++type Bucket = Word64+type Set s = STUArray s Int Bucket++bucketBitCount :: Int+bucketBitCount = bitSize (undefined :: Bucket)++newSized :: Int -> ST s (Set s)+newSized maxVal = newArray (0, bucketCount-1) 0+ where bucketCount = 1+(maxVal `div` bucketBitCount)++member :: Set s -> Int -> ST s Bool+member set entry = do+ let (bucketIx, ixInBucket) = entry `divMod` bucketBitCount+ bucket <- readArray set bucketIx+ return $! testBit bucket ixInBucket++insert :: Set s -> Int -> ST s ()+insert set entry = do+ let (bucketIx, ixInBucket) = entry `divMod` bucketBitCount+ bucket <- readArray set bucketIx+ writeArray set bucketIx $! setBit bucket ixInBucket++remove :: Set s -> Int -> ST s ()+remove set entry = do+ let (bucketIx, ixInBucket) = entry `divMod` bucketBitCount+ bucket <- readArray set bucketIx+ writeArray set bucketIx $! clearBit bucket ixInBucket
src/Util/Annotated.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE FlexibleContexts, FlexibleInstances #-} module Util.Annotated where +import Data.Hashable import Prelude import Util.Exception import Util.Prelude@@ -45,18 +46,22 @@ srcSpanCol :: !Int } | Unknown+ -- | A builtin thing+ | BuiltIn deriving Eq srcSpanStart :: SrcSpan -> SrcLoc-srcSpanStart (SrcSpanOneLine f l sc ec) = SrcLoc f l sc-srcSpanStart (SrcSpanMultiLine f sl sc el ec) = SrcLoc f sl sc+srcSpanStart (SrcSpanOneLine f l sc _) = SrcLoc f l sc+srcSpanStart (SrcSpanMultiLine f sl sc _ _) = SrcLoc f sl sc srcSpanStart (SrcSpanPoint f l c) = SrcLoc f l c+srcSpanStart BuiltIn = NoLoc srcSpanStart Unknown = NoLoc srcSpanEnd :: SrcSpan -> SrcLoc-srcSpanEnd (SrcSpanOneLine f l sc ec) = SrcLoc f l ec-srcSpanEnd (SrcSpanMultiLine f sl sc el ec) = SrcLoc f el ec+srcSpanEnd (SrcSpanOneLine f l _ ec) = SrcLoc f l ec+srcSpanEnd (SrcSpanMultiLine f _ _ el ec) = SrcLoc f el ec srcSpanEnd (SrcSpanPoint f l c) = SrcLoc f l c+srcSpanEnd BuiltIn = NoLoc srcSpanEnd Unknown = NoLoc -- We want to order SrcSpans first by the start point, then by the end point.@@ -78,23 +83,28 @@ prettyPrint (SrcSpanPoint f sline scol) = text f <> colon <> int sline <> colon <> int scol prettyPrint Unknown = text "<unknown location>"+ prettyPrint BuiltIn = text "<built-in>" combineSpans :: SrcSpan -> SrcSpan -> SrcSpan-combineSpans s1 s2 | srcSpanFile s1 /= srcSpanFile s2 = - panic "Cannot combine spans as they span files"-combineSpans (SrcSpanOneLine f1 line1 scol1 ecol1) - (SrcSpanOneLine f2 line2 scol2 ecol2) = +combineSpans s1 s2 | srcSpanFile s1 /= srcSpanFile s2 = panic $ show $+ text "Cannot combine spans as they span files"+ $$ tabIndent (prettyPrint s1 $$ prettyPrint s2)+combineSpans (SrcSpanOneLine f1 line1 scol1 _) + (SrcSpanOneLine _ line2 _ ecol2) = if line1 == line2 then SrcSpanOneLine f1 line1 scol1 ecol2 else SrcSpanMultiLine f1 line1 scol1 line2 ecol2-combineSpans (SrcSpanOneLine f1 sline1 scol1 ecol1) - (SrcSpanMultiLine f2 sline2 scol2 eline2 ecol2) = +combineSpans (SrcSpanOneLine f1 sline1 scol1 _) + (SrcSpanMultiLine _ _ _ eline2 ecol2) = SrcSpanMultiLine f1 sline1 scol1 eline2 ecol2-combineSpans (SrcSpanMultiLine f1 sline1 scol1 eline1 ecol1)- (SrcSpanOneLine f2 eline2 scol2 ecol2) =+combineSpans (SrcSpanMultiLine f1 sline1 scol1 _ _)+ (SrcSpanOneLine _ eline2 _ ecol2) = SrcSpanMultiLine f1 sline1 scol1 eline2 ecol2-combineSpans (SrcSpanMultiLine f1 sline1 scol1 eline1 ecol1) - (SrcSpanMultiLine f2 sline2 scol2 eline2 ecol2) =+combineSpans (SrcSpanMultiLine f1 sline1 scol1 _ _) + (SrcSpanMultiLine _ _ _ eline2 ecol2) = SrcSpanMultiLine f1 sline1 scol1 eline2 ecol2+combineSpans s1 s2 = panic $ show $+ text "combineSpans: invalid spans combined"+ $$ tabIndent (prettyPrint s1 $$ prettyPrint s2) data Located a = L {@@ -123,11 +133,19 @@ instance (PrettyPrintable [b]) => PrettyPrintable [Annotated a b] where prettyPrint ans = prettyPrint (map unAnnotate ans) instance (PrettyPrintable b) => PrettyPrintable (Annotated a b) where- prettyPrint (An loc typ inner) = prettyPrint inner+ prettyPrint (An _ _ inner) = prettyPrint inner instance (PrettyPrintable a) => PrettyPrintable (Located a) where- prettyPrint (L loc inner) = prettyPrint inner+ prettyPrint (L _ inner) = prettyPrint inner instance Eq b => Eq (Annotated a b) where (An _ _ b1) == (An _ _ b2) = b1 == b2 instance Eq a => Eq (Located a) where (L _ b1) == (L _ b2) = b1 == b2++instance Ord b => Ord (Annotated a b) where+ compare a b = compare (unAnnotate a) (unAnnotate b)+instance Ord b => Ord (Located b) where+ compare a b = compare (locatedInner a) (locatedInner b)++instance Hashable b => Hashable (Annotated a b) where+ hash a = hash (unAnnotate a)
src/Util/Exception.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, TypeSynonymInstances #-}+{-# LANGUAGE CPP, DeriveDataTypeable, FlexibleInstances, ScopedTypeVariables,+ TypeSynonymInstances #-} module Util.Exception ( Exception, LibCSPMException(..),@@ -12,9 +13,13 @@ import Control.Exception import Control.Monad.State+import qualified Control.Monad.State.Strict as ST import Data.Typeable import Data.List++#if __GLASGOW_HASKELL__ < 705 import Prelude hiding (catch)+#endif import {-# SOURCE #-} Util.Annotated import Util.PrettyPrint@@ -71,7 +76,13 @@ deriving Typeable instance Show LibCSPMException where- show (Panic str) = "Internal inconsitancy error: "++str+ show (Panic str) =+ "panic: the program has detected an inconsistent internal state.\n"+++ " This means that there is a bug in libcspm, not a bug in your input script.\n\n"+++ " Please report this bug using the contact link at https://www.cs.ox.ac.uk/projects/fdr/.\n"+++ " In particular, please include the input script that caused this error and a brief\n"+++ " description of how to reproduce the problem. Please also include the following message:\n\n"+++ unlines (map (\ s -> " "++s) (lines str)) show (SourceError ms) = show (prettyPrint ms) show (UserError) = "An unknown error occured." @@ -91,19 +102,65 @@ -- | A class to allow catching of SourceErrors in arbitrary monads. class Monad m => MonadIOException m where- tryM :: (MonadIOException m) => m a -> m (Either LibCSPMException a)+ -- | Runs the action, catching any non-fatal LibCSPMExecptions (i.e. non-+ -- Panic).+ tryM :: MonadIOException m => m a -> m (Either LibCSPMException a)+ tryM prog = do+ ev <- tryM' prog+ case ev of+ Left (e@(Panic x)) -> throwException e+ _ -> return ev++ -- | Runs the action, catching all exceptions including panics.+ tryM' :: MonadIOException m => m a -> m (Either LibCSPMException a)++ -- | Converts arbitrary exceptions to panics, rethrowing them.+ convertExceptionsToPanics :: MonadIOException m => m a -> m a++ -- | Runs the action, running the finaliser if an exception is thrown. The+ -- exception is always rethrown.+ finally :: MonadIOException m => m a -> m () -> m a+ finally prog finaliser = do+ result <- tryM' $ do+ r <- prog+ finaliser+ return r+ case result of+ Left err -> finaliser >> throwException err+ Right result -> return result instance MonadIOException IO where- tryM prog = do+ tryM' prog = do r <- try prog case r of- Left (e@(Panic s)) -> throwException e- _ -> return r+ Right a -> return $ Right a+ Left (e :: LibCSPMException) -> return $ Left e + convertExceptionsToPanics prog = do+ r <- try prog+ case r of+ Left (e :: SomeException) -> throwException $+ case fromException e :: Maybe LibCSPMException of+ Just e -> e+ Nothing -> Panic (show e)+ Right a -> return a+ instance MonadIOException m => MonadIOException (StateT s m) where- tryM prog = + tryM' prog = StateT $ \st -> do- x <- tryM (runStateT prog st)+ x <- tryM' (runStateT prog st) case x of Right (a, s) -> return $ (Right a, s) Left e -> return $ (Left e, st)+ convertExceptionsToPanics prog = do+ StateT $ \st -> convertExceptionsToPanics (runStateT prog st)++instance MonadIOException m => MonadIOException (ST.StateT s m) where+ tryM' prog = + ST.StateT $ \st -> do+ x <- tryM' (ST.runStateT prog st)+ case x of+ Right (a, s) -> return $ (Right a, s)+ Left e -> return $ (Left e, st)+ convertExceptionsToPanics prog = do+ ST.StateT $ \st -> convertExceptionsToPanics (ST.runStateT prog st)
+ src/Util/FuzzyLookup.hs view
@@ -0,0 +1,114 @@+{-# LANGUAGE PatternGuards #-}+-- | Provides fuzzy string matching.+--+-- Taken from GHC (which is BSD licensed and thus compatible). Copyright+-- reproduced below:+--+-- (c) The University of Glasgow 2006+module Util.FuzzyLookup (+ fuzzyMatch, fuzzyLookup,+) where++import Data.Bits+import Data.Char+import qualified Data.IntMap as IM+import Data.List+import Data.Ord (comparing)+import Data.Word++fuzzyMatch :: String -> [String] -> [String]+fuzzyMatch key vals = fuzzyLookup key [(v,v) | v <- vals]++-- | Search for possible matches to the users input in the given list,+-- returning a small number of ranked results+fuzzyLookup :: String -> [(String,a)] -> [a]+fuzzyLookup user_entered possibilites+ = map fst $ take mAX_RESULTS $ sortBy (comparing snd)+ [ (poss_val, distance) | (poss_str, poss_val) <- possibilites+ , let distance = restrictedDamerauLevenshteinDistance+ poss_str user_entered+ , distance <= fuzzy_threshold ]+ where+ -- Work out an approriate match threshold:+ -- We report a candidate if its edit distance is <= the threshold,+ -- The threshhold is set to about a quarter of the # of characters the user entered+ -- Length Threshold+ -- 1 0 -- Don't suggest *any* candidates+ -- 2 1 -- for single-char identifiers+ -- 3 1+ -- 4 1+ -- 5 1+ -- 6 2+ --+ fuzzy_threshold = truncate $ fromIntegral (length user_entered + 2) / (4 :: Rational)+ mAX_RESULTS = 3++restrictedDamerauLevenshteinDistance :: String -> String -> Int+restrictedDamerauLevenshteinDistance str1 str2+ = restrictedDamerauLevenshteinDistanceWithLengths m n str1 str2+ where+ m = length str1+ n = length str2++restrictedDamerauLevenshteinDistanceWithLengths+ :: Int -> Int -> String -> String -> Int+restrictedDamerauLevenshteinDistanceWithLengths m n str1 str2+ | m <= n+ = if n <= 32 -- n must be larger so this check is sufficient+ then restrictedDamerauLevenshteinDistance' (undefined :: Word32) m n str1 str2+ else restrictedDamerauLevenshteinDistance' (undefined :: Integer) m n str1 str2++ | otherwise+ = if m <= 32 -- m must be larger so this check is sufficient+ then restrictedDamerauLevenshteinDistance' (undefined :: Word32) n m str2 str1+ else restrictedDamerauLevenshteinDistance' (undefined :: Integer) n m str2 str1++restrictedDamerauLevenshteinDistance'+ :: (Bits bv, Num bv) => bv -> Int -> Int -> String -> String -> Int+restrictedDamerauLevenshteinDistance' _bv_dummy m n str1 str2+ | [] <- str1 = n+ | otherwise = extractAnswer $+ foldl' (restrictedDamerauLevenshteinDistanceWorker+ (matchVectors str1) top_bit_mask vector_mask)+ (0, 0, m_ones, 0, m) str2+ where+ m_ones@vector_mask = (2 ^ m) - 1+ top_bit_mask = (1 `shiftL` (m - 1)) `asTypeOf` _bv_dummy+ extractAnswer (_, _, _, _, distance) = distance++restrictedDamerauLevenshteinDistanceWorker+ :: (Bits bv, Num bv) => IM.IntMap bv -> bv -> bv+ -> (bv, bv, bv, bv, Int) -> Char -> (bv, bv, bv, bv, Int)+restrictedDamerauLevenshteinDistanceWorker str1_mvs top_bit_mask vector_mask+ (pm, d0, vp, vn, distance) char2+ = seq str1_mvs $ seq top_bit_mask $ seq vector_mask $+ seq pm' $ seq d0' $ seq vp' $ seq vn' $+ seq distance'' $ seq char2 $+ (pm', d0', vp', vn', distance'')+ where+ pm' = IM.findWithDefault 0 (ord char2) str1_mvs++ d0' = ((((sizedComplement vector_mask d0) .&. pm') `shiftL` 1) .&. pm)+ .|. ((((pm' .&. vp) + vp) .&. vector_mask) `xor` vp) .|. pm' .|. vn+ -- No need to mask the shiftL because of the restricted range of pm++ hp' = vn .|. sizedComplement vector_mask (d0' .|. vp)+ hn' = d0' .&. vp++ hp'_shift = ((hp' `shiftL` 1) .|. 1) .&. vector_mask+ hn'_shift = (hn' `shiftL` 1) .&. vector_mask+ vp' = hn'_shift .|. sizedComplement vector_mask (d0' .|. hp'_shift)+ vn' = d0' .&. hp'_shift++ distance' = if hp' .&. top_bit_mask /= 0 then distance + 1 else distance+ distance'' = if hn' .&. top_bit_mask /= 0 then distance' - 1 else distance'++sizedComplement :: Bits bv => bv -> bv -> bv+sizedComplement vector_mask vect = vector_mask `xor` vect++matchVectors :: (Bits bv, Num bv) => String -> IM.IntMap bv+matchVectors = snd . foldl' go (0 :: Int, IM.empty)+ where+ go (ix, im) char = let ix' = ix + 1+ im' = IM.insertWith (.|.) (ord char) (2 ^ ix) im+ in seq ix' $ seq im' $ (ix', im')
src/Util/HierarchicalMap.hs view
@@ -20,6 +20,7 @@ update :: Ord a => HierarchicalMap a b -> a -> b -> HierarchicalMap a b update (HierarchicalMap (m:ms)) k v = HierarchicalMap ((M.insert k v m):ms)+update (HierarchicalMap []) _ _ = panic "HierarchicalMap.update: invalid map" updateMulti :: Ord a => HierarchicalMap a b -> [(a, b)] -> HierarchicalMap a b updateMulti m bs = @@ -32,18 +33,19 @@ Nothing -> throwException (ValueNotFoundException k) maybeLookup :: (Show k, Typeable k, Ord k) => HierarchicalMap k a -> k -> Maybe a-maybeLookup (HierarchicalMap []) k = Nothing+maybeLookup (HierarchicalMap []) _ = Nothing maybeLookup (HierarchicalMap (m:ms)) k = case M.lookup k m of Just v -> Just v Nothing -> maybeLookup (HierarchicalMap ms) k maybeLookupInTopLayer :: (Show k, Typeable k, Ord k) => HierarchicalMap k a -> k -> Maybe a-maybeLookupInTopLayer (HierarchicalMap []) k = Nothing-maybeLookupInTopLayer (HierarchicalMap (m:ms)) k = M.lookup k m+maybeLookupInTopLayer (HierarchicalMap []) _ = Nothing+maybeLookupInTopLayer (HierarchicalMap (m:_)) k = M.lookup k m popLayer :: Ord a => HierarchicalMap a b -> HierarchicalMap a b-popLayer (HierarchicalMap (m:ms)) = HierarchicalMap ms+popLayer (HierarchicalMap (_:ms)) = HierarchicalMap ms+popLayer _ = panic "HierarchicalMap.popLayer: invalid map" flatten :: Ord a => HierarchicalMap a b -> [(a, b)] flatten (HierarchicalMap ms) = h ms []@@ -52,7 +54,7 @@ h (m:ms) ks = l++(h ms ks') where l = [(k, v) | (k, v) <- M.toList m, not (k `elem` ks)]- ks' = map fst l++ks+ ks' = Prelude.map fst l++ks newLayer :: Ord a => HierarchicalMap a b -> HierarchicalMap a b newLayer (HierarchicalMap ms) = HierarchicalMap (M.empty : ms)@@ -71,3 +73,7 @@ -- | Creates a new map new :: Ord a => HierarchicalMap a b new = HierarchicalMap [M.empty]++map :: Ord k => (k -> a -> b) -> HierarchicalMap k a -> HierarchicalMap k b+map func (HierarchicalMap ms) =+ HierarchicalMap $ Prelude.map (M.mapWithKey func) ms
src/Util/List.hs view
@@ -1,4 +1,5 @@ module Util.List where+ import Data.List -- TODO: speed up@@ -9,7 +10,8 @@ -- | Replaces the last item in a list. Assumes the list is non empty. replaceLast :: [a] -> a -> [a] replaceLast [_] v = [v]-replaceLast (x:xs) v = replaceLast xs v+replaceLast (x:xs) v = x : replaceLast xs v+replaceLast _ _ = error "Unsupported call to replaceLast" cartesianProduct :: [[a]] -> [[a]] cartesianProduct vss = sequence vss
src/Util/Monad.hs view
@@ -3,28 +3,43 @@ concatMapM, andM, orM,- ($$)+ ($$),+ whenM, ) where -import Control.Monad- concatMapM :: (Monad m) => (a -> m [b]) -> [a] -> m [b]-concatMapM f xs = liftM concat (mapM f xs)+concatMapM f xs = + let+ cm [] accum = return accum+ cm (x:xs) accum = do+ ys <- f x+ cm xs (accum++ys)+ in cm xs []+{-# INLINE concatMapM #-} andM :: (Monad m) => [m Bool] -> m Bool andM [m] = m andM (m:ms) = do b <- m if b then andM ms else return False+andM _ = error "andM of empty list" orM :: (Monad m) => [m Bool] -> m Bool orM [m] = m orM (m:ms) = do b <- m if not b then orM ms else return True+orM _ = return False ($$) :: Monad m => m (a -> b) -> m a -> m b ($$) fm argm = do f <- fm arg <- argm return $ f arg++whenM :: Monad m => m Bool -> m () -> m ()+whenM bfunc func = do+ b <- bfunc+ case b of+ True -> func+ False -> return ()
+ src/Util/MonadicPrettyPrint.hs view
@@ -0,0 +1,133 @@+{-# LANGUAGE MultiParamTypeClasses #-}+module Util.MonadicPrettyPrint(+ module Util.MonadicPrettyPrintInternal,+ MonadicPrettyPrintable(..),+ prettyPrintPrec, prettyPrintBriefPrec, ppBinaryOp, ppBinaryOp',+ tabWidth,+ tabIndent,+ shortDouble,+ commaSeparatedInt,+ angles, bars, list, dotSep,+ speakNth,+ punctuateFront,+ ellipsis,+) where++import Control.Applicative hiding (empty)+import Numeric+import Util.MonadicPrettyPrintInternal+import Util.Precedence++class (Applicative m, Monad m) => MonadicPrettyPrintable m a where+ prettyPrint :: a -> m Doc+ -- | As prettyPrint, but yields a briefer description.+ prettyPrintBrief :: a -> m Doc++ prettyPrintBrief = prettyPrint++data Argument = LeftArg | RightArg++prettyPrintPrec :: (MonadicPrettyPrintable m a, Precedence a) =>+ a -> a -> m Doc+prettyPrintPrec ctxt op =+ maybeParen (precedence ctxt < precedence op) $ prettyPrint op++prettyPrintBriefPrec :: (MonadicPrettyPrintable m a, Precedence a) =>+ Int -> a -> m Doc+prettyPrintBriefPrec prec a =+ maybeParen (prec <= precedence a) $ prettyPrintBrief a++prettyPrintPrec' :: (MonadicPrettyPrintable m a, Precedence a) =>+ Argument -> a -> a -> m Doc+prettyPrintPrec' argt ctxt op =+ maybeParen (needsParen argt ctxt op) $ prettyPrint op++needsParen :: Precedence a => Argument -> a -> a -> Bool+needsParen argt ctxt op | precedence ctxt < precedence op = True+needsParen argt ctxt op | precedence ctxt > precedence op = False+needsParen argt ctxt op | not (sameOperator ctxt op) = True+needsParen LeftArg ctxt op | associativity ctxt /= AssocLeft = True+needsParen RightArg ctxt op | associativity ctxt /= AssocRight = True+needsParen _ _ _ = False++ppBinaryOp, ppBinaryOp' :: (MonadicPrettyPrintable m a, Precedence a) =>+ a -> m Doc -> a -> a -> m Doc+ppBinaryOp op opd p1 p2 =+ sep (sequence [prettyPrintPrec op p1, opd <+> prettyPrintPrec op p2])+ppBinaryOp' op opd p1 p2 =+ cat (sequence [prettyPrintPrec' LeftArg op p1,+ opd <> prettyPrintPrec' RightArg op p2])++-- | Maybe parenthesise the given document.+maybeParen :: (Applicative m, Monad m) => Bool -> m Doc -> m Doc+maybeParen False d = d+maybeParen True d = parens d++-- | The width, in spaces, of a tab character.+tabWidth :: Int+tabWidth = 4++-- | Pretty prints an integer and separates it into groups of 3, separated by+-- commas.+commaSeparatedInt :: (Monad m, Applicative m) => Int -> m Doc+commaSeparatedInt =+ let + breakIntoGroupsOf3 :: String -> [String]+ breakIntoGroupsOf3 (c1:c2:c3:c4:cs) = + [c3,c2,c1] : breakIntoGroupsOf3 (c4:cs)+ breakIntoGroupsOf3 cs = [reverse cs]+ in fcat . punctuate comma . sequence . reverse . map text+ . breakIntoGroupsOf3 . reverse . show++-- | Show a double `d` printing only `places` places after the decimal place.+shortDouble :: (Monad m, Applicative m) => Int -> Double -> m Doc+shortDouble places d = text (showGFloat (Just places) d "")++-- | Indent a document by `tabWidth` characters, on each line+-- (uses `nest`).+tabIndent :: (Monad m, Applicative m) => m Doc -> m Doc+tabIndent = nest tabWidth++-- | Surrounds a `Doc` with '<' and '>'.+angles :: (Monad m, Applicative m) => m Doc -> m Doc+angles d = char '<' <> d <> char '>'++-- | Surrounds a `Doc` with '|'.+bars :: (Monad m, Applicative m) => m Doc -> m Doc+bars d = char '|' <> d <> char '|'++-- | Separates a list of `Doc`s by '.'.+dotSep :: (Monad m, Applicative m) => m [Doc] -> m Doc+dotSep docs = fcat (punctuate (text ".") docs)++-- | Separates a list of `Doc`s by ','.+list :: (Monad m, Applicative m) => m [Doc] -> m Doc+list docs = fsep (punctuate (text ",") docs)++-- | Converts a number into 'first', 'second' etc.+speakNth :: (Monad m, Applicative m) => Int -> m Doc+speakNth 1 = text "first"+speakNth 2 = text "second"+speakNth 3 = text "third"+speakNth 4 = text "fourth"+speakNth 5 = text "fifth"+speakNth 6 = text "sixth"+speakNth n = hcat $ sequence [ int n, text suffix ]+ where+ suffix + | n <= 20 = "th" -- 11,12,13 are non-std+ | last_dig == 1 = "st"+ | last_dig == 2 = "nd"+ | last_dig == 3 = "rd"+ | otherwise = "th"+ last_dig = n `rem` 10++-- | Equivalent to [d1, sep <> d2, sep <> d3, ...].+punctuateFront :: (Monad m, Applicative m) => m Doc -> m [Doc] -> m [Doc]+punctuateFront sep dsm = dsm >>= \ds ->+ case ds of+ [] -> return []+ (x:xs) -> sequence [sep <> return x | x <- xs] >>= return . (x:)++ellipsis :: (Applicative m, Monad m) => m Doc+ellipsis = char '…'
+ src/Util/MonadicPrettyPrintInternal.hs view
@@ -0,0 +1,362 @@+-----------------------------------------------------------------------------+-- |+-- Module : Text.PrettyPrint.Reader+-- Copyright : (c) Warren Harris 2012+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Warren Harris <warrensomebody@gmail.com>+-- Stability : stable+-- Portability : portable+--+-- A wrapper around the John Hughes's and Simon Peyton Jones's Pretty+-- Printer combinators based on the ReaderT monad transformer, allowing+-- lookups to be performed during the pretty-printing process.+-----------------------------------------------------------------------------++-- Taken from https://github.com/haskell/pretty/pull/6 - merge back in when+-- finished++module Util.MonadicPrettyPrintInternal(+ -- * The document type+ P.Doc, P.TextDetails(..),++ -- * Constructing documents++ -- ** Converting values into documents+ char, text, ptext, sizedText, zeroWidthText,+ int, integer, float, double, rational,++ -- ** Simple derived documents+ semi, comma, colon, space, equals,+ lparen, rparen, lbrack, rbrack, lbrace, rbrace,++ -- ** Wrapping documents in delimiters+ parens, brackets, braces, quotes, doubleQuotes,++ -- ** Combining documents+ empty,+ (<>), (<+>), hcat, hsep,+ ($$), ($+$), vcat,+ sep, cat,+ fsep, fcat,+ nest,+ hang, punctuate,++ -- * Predicates on documents+ isEmpty,++ {-+ -- * Utility functions for documents+ first, reduceDoc,+ -- TODO: Should these be exported? Previously they weren't+ -- WH: These don't make sense because RDoc isn't exposed or otherwise used.+ -}++ -- * Rendering documents++ -- ** Default rendering+ render,++ -- ** Rendering with a particular style+ P.Style(..),+ P.style,+ renderStyle,+ P.Mode(..),++ -- ** General rendering+ fullRender,+) where++import Control.Applicative hiding (empty)+--import Control.Monad.Reader+--import Control.Monad.Trans.Class+import qualified Text.PrettyPrint.HughesPJ as P++--------------------------------------------------------------------------------+-- Operator fixity++infixl 6 <>+infixl 6 <+>+infixl 5 $$, $+$++-- ---------------------------------------------------------------------------+-- Values and Predicates on GDocs and TextDetails++-- | A document of height and width 1, containing a literal character.+char :: (Monad m, Applicative m) => Char -> m P.Doc+char c = return $ P.char c++-- | A document of height 1 containing a literal string.+-- 'text' satisfies the following laws:+--+-- * @'text' s '<>' 'text' t = 'text' (s'++'t)@+--+-- * @'text' \"\" '<>' x = x@, if @x@ non-empty+--+-- The side condition on the last law is necessary because @'text' \"\"@+-- has height 1, while 'empty' has no height.+text :: (Monad m, Applicative m) => String -> m P.Doc+text s = return $ P.text s++-- | Same as @text@. Used to be used for Bytestrings.+ptext :: (Monad m, Applicative m) => String -> m P.Doc+ptext s = return $ P.ptext s++-- | Some text with any width. (@text s = sizedText (length s) s@)+sizedText :: (Monad m, Applicative m) => Int -> String -> m P.Doc+sizedText l s = return $ P.sizedText l s++-- | Some text, but without any width. Use for non-printing text+-- such as a HTML or Latex tags+zeroWidthText :: (Monad m, Applicative m) => String -> m P.Doc+zeroWidthText s = return $ P.zeroWidthText s++-- | The empty document, with no height and no width.+-- 'empty' is the identity for '<>', '<+>', '$$' and '$+$', and anywhere+-- in the argument list for 'sep', 'hcat', 'hsep', 'vcat', 'fcat' etc.+empty :: (Monad m, Applicative m) => m P.Doc+empty = return P.empty++-- | Returns 'True' if the document is empty+isEmpty :: (Monad m, Applicative m) => m P.Doc -> m Bool+isEmpty doc = P.isEmpty <$> doc++-- | A ';' character+semi :: (Monad m, Applicative m) => m P.Doc+semi = return P.semi++-- | A ',' character+comma :: (Monad m, Applicative m) => m P.Doc+comma = return P.comma++-- | A ':' character+colon :: (Monad m, Applicative m) => m P.Doc+colon = return P.colon++-- | A space character+space :: (Monad m, Applicative m) => m P.Doc+space = return P.space++-- | A '=' character+equals :: (Monad m, Applicative m) => m P.Doc+equals = return P.equals++-- | A '(' character+lparen :: (Monad m, Applicative m) => m P.Doc+lparen = return P.lparen++-- | A ')' character+rparen :: (Monad m, Applicative m) => m P.Doc+rparen = return P.rparen++-- | A '[' character+lbrack :: (Monad m, Applicative m) => m P.Doc+lbrack = return P.lbrack++-- | A ']' character+rbrack :: (Monad m, Applicative m) => m P.Doc+rbrack = return P.rbrack++-- | A '{' character+lbrace :: (Monad m, Applicative m) => m P.Doc+lbrace = return P.lbrace++-- | A '}' character+rbrace :: (Monad m, Applicative m) => m P.Doc+rbrace = return P.rbrace++-- | @int n = text (show n)@+int :: (Monad m, Applicative m) => Int -> m P.Doc+int = return . P.int++-- | @integer n = text (show n)@+integer :: (Monad m, Applicative m) => Integer -> m P.Doc+integer = return . P.integer++-- | @float n = text (show n)@+float :: (Monad m, Applicative m) => Float -> m P.Doc+float = return . P.float++-- | @double n = text (show n)@+double :: (Monad m, Applicative m) => Double -> m P.Doc+double = return . P.double++-- | @rational n = text (show n)@+rational :: (Monad m, Applicative m) => Rational -> m P.Doc+rational = return . P.rational++-- | Wrap document in @(...)@+parens :: (Monad m, Applicative m) => m P.Doc -> m P.Doc+parens p = P.parens <$> p++-- | Wrap document in @[...]@+brackets :: (Monad m, Applicative m) => m P.Doc -> m P.Doc+brackets p = P.brackets <$> p++-- | Wrap document in @{...}@+braces :: (Monad m, Applicative m) => m P.Doc -> m P.Doc+braces p = P.braces <$> p++-- | Wrap document in @\'...\'@+quotes :: (Monad m, Applicative m) => m P.Doc -> m P.Doc+quotes p = P.quotes <$> p++-- | Wrap document in @\"...\"@+doubleQuotes :: (Monad m, Applicative m) => m P.Doc -> m P.Doc+doubleQuotes p = P.doubleQuotes <$> p++-- ---------------------------------------------------------------------------+-- Structural operations on GDocs++{-+-- | Perform some simplification of a built up @GDoc@.+reduceDoc :: (Monad m, Applicative m) => m P.Doc -> m P.RDoc+reduceDoc p = p >>= return . P.reduceDoc+-}++-- | List version of '<>'.+hcat :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+hcat l = P.hcat <$> l++-- | List version of '<+>'.+hsep :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+hsep l = P.hsep <$> l++-- | List version of '$$'.+vcat :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+vcat l = P.vcat <$> l++-- | Nest (or indent) a document by a given number of positions+-- (which may also be negative). 'nest' satisfies the laws:+--+-- * @'nest' 0 x = x@+--+-- * @'nest' k ('nest' k' x) = 'nest' (k+k') x@+--+-- * @'nest' k (x '<>' y) = 'nest' k z '<>' 'nest' k y@+--+-- * @'nest' k (x '$$' y) = 'nest' k x '$$' 'nest' k y@+--+-- * @'nest' k 'empty' = 'empty'@+--+-- * @x '<>' 'nest' k y = x '<>' y@, if @x@ non-empty+--+-- The side condition on the last law is needed because+-- 'empty' is a left identity for '<>'.+nest :: (Monad m, Applicative m) => Int -> m P.Doc -> m P.Doc+nest k p = P.nest k <$> p++-- | @hang d1 n d2 = sep [d1, nest n d2]@+hang :: (Monad m, Applicative m) => m P.Doc -> Int -> m P.Doc -> m P.Doc+--hang d1 n d2 = do d1' <- d1; d2' <- d2; return $ P.hang d1' n d2'+hang d1 n d2 = flip P.hang n <$> d1 <*> d2++-- | @punctuate p [d1, ... dn] = [d1 \<> p, d2 \<> p, ... dn-1 \<> p, dn]@+punctuate :: (Monad m, Applicative m) => m P.Doc -> m [P.Doc] -> m [P.Doc]+punctuate p l = --(liftA2 P.punctuate p (l >>= sequence)) >>= return . map return+ P.punctuate <$> p <*> l++-- ---------------------------------------------------------------------------+-- Vertical composition @$$@++-- | Above, except that if the last line of the first argument stops+-- at least one position before the first line of the second begins,+-- these two lines are overlapped. For example:+--+-- > text "hi" $$ nest 5 (text "there")+--+-- lays out as+--+-- > hi there+--+-- rather than+--+-- > hi+-- > there+--+-- '$$' is associative, with identity 'empty', and also satisfies+--+-- * @(x '$$' y) '<>' z = x '$$' (y '<>' z)@, if @y@ non-empty.+--+($$) :: (Monad m, Applicative m) => m P.Doc -> m P.Doc -> m P.Doc+p $$ q = (P.$$) <$> p <*> q++-- | Above, with no overlapping.+-- '$+$' is associative, with identity 'empty'.+($+$) :: (Monad m, Applicative m) => m P.Doc -> m P.Doc -> m P.Doc+p $+$ q = (P.$+$) <$> p <*> q++-- ---------------------------------------------------------------------------+-- Horizontal composition @<>@++-- We intentionally avoid Data.Monoid.(<>) here due to interactions of+-- Data.Monoid.(<>) and (<+>). See+-- http://www.haskell.org/pipermail/libraries/2011-November/017066.html++-- | Beside.+-- '<>' is associative, with identity 'empty'.+(<>) :: (Monad m, Applicative m) => m P.Doc -> m P.Doc -> m P.Doc+p <> q = (P.<>) <$> p <*> q++-- | Beside, separated by space, unless one of the arguments is 'empty'.+-- '<+>' is associative, with identity 'empty'.+(<+>) :: (Monad m, Applicative m) => m P.Doc -> m P.Doc -> m P.Doc+p <+> q = (P.<+>) <$> p <*> q++-- ---------------------------------------------------------------------------+-- Separate, @sep@++-- Specification: sep ps = oneLiner (hsep ps)+-- `union`+-- vcat ps++-- | Either 'hsep' or 'vcat'.+sep :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+sep l = P.sep <$> l++-- | Either 'hcat' or 'vcat'.+cat :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+cat l = P.cat <$> l++-- ---------------------------------------------------------------------------+-- @fill@++-- | \"Paragraph fill\" version of 'cat'.+fcat :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+fcat l = P.fcat <$> l++-- | \"Paragraph fill\" version of 'sep'.+fsep :: (Monad m, Applicative m) => m [P.Doc] -> m P.Doc+fsep l = P.fsep <$> l++-- ---------------------------------------------------------------------------+-- Selecting the best layout+{-+-- | @first@ returns its first argument if it is non-empty, otherwise its second.+first :: (Monad m, Applicative m) => m P.Doc -> m P.Doc -> m P.Doc+first p q = do p' <- p; q' <- q; return $ P.first p' q'+-}+-- ---------------------------------------------------------------------------+-- Rendering++-- | Render the @Doc@ to a String using the default @Style@.+render :: (Monad m, Applicative m) => m P.Doc -> m String+render doc = doc >>= return . P.render++-- | Render the @Doc@ to a String using the given @Style@.+renderStyle :: (Monad m, Applicative m) => P.Style -> m P.Doc -> m String+renderStyle s doc = doc >>= return . P.renderStyle s++-- | The general rendering interface.+fullRender :: (Monad m, Applicative m) =>+ P.Mode -- ^ Rendering mode+ -> Int -- ^ Line length+ -> Float -- ^ Ribbons per line+ -> (P.TextDetails -> a -> a) -- ^ What to do with text+ -> a -- ^ What to do at the end+ -> m P.Doc -- ^ The document+ -> m a -- ^ Result+fullRender m lineLen ribbons txt rest doc =+ doc >>= return . P.fullRender m lineLen ribbons txt rest++--------------------------------------------------------------------------------
src/Util/PartialFunctions.hs view
@@ -1,7 +1,5 @@ module Util.PartialFunctions where -import Data.List (nub)- import Util.Exception -- *********************************************************************
+ src/Util/Precedence.hs view
@@ -0,0 +1,23 @@+module Util.Precedence (+ Precedence(..),+ Associativity(..),+) where++-- | The associativity of an operator+data Associativity = AssocNone | AssocLeft | AssocRight+ deriving (Eq, Ord, Show)++class Precedence a where+ -- | Returns the binding strength of the operator. Higher numbers bind more+ -- loosely.+ precedence :: a -> Int+ precedence _ = 0++ -- | Returns the associativity of the operator.+ associativity :: a -> Associativity+ associativity _ = AssocNone++ -- | True if the two items are the same operator. This is used to decide+ -- when to paranthesise.+ sameOperator :: a -> a -> Bool+ sameOperator _ _ = False
src/Util/PrettyPrint.hs view
@@ -12,7 +12,6 @@ where import Numeric-import Text.Printf import Text.PrettyPrint.HughesPJ class PrettyPrintable a where@@ -79,5 +78,5 @@ -- | Equivalent to [d1, sep <> d2, sep <> d3, ...]. punctuateFront :: Doc -> [Doc] -> [Doc]-punctuateFront sep [] = []+punctuateFront _ [] = [] punctuateFront sep (x:xs) = x:[sep <> x | x <- xs]
tests/Main.hs view
@@ -1,15 +1,21 @@+{-# LANGUAGE MultiParamTypeClasses, ScopedTypeVariables #-} module Main (main) where +import Control.Exception import Control.Monad import Control.Monad.Trans import Data.List+import CSPM+import CSPM.Evaluator.ProcessValues+import CSPM.Evaluator.ValuePrettyPrinter+import Monad+import Prelude hiding (catch) import System.Directory import System.Exit (exitFailure, exitSuccess) import System.FilePath--import CSPM-import CSPM.Compiler.Processes-import Monad+import Test.Framework+import qualified Test.Framework.Providers.API as T+import Test.Framework.Runners.Console import Util.Annotated import Util.Exception import Util.Monad hiding (($$))@@ -24,14 +30,7 @@ main :: IO () main = do tests <- runSections- results <- sequence tests- let- failureCount = length results - successCount- successCount = length (filter id results)- putStrLn $ show $ - int failureCount <+> text "failures" - <+> int successCount <+> text "passes"- if failureCount == 0 then exitSuccess else exitFailure+ defaultMain tests getAndFilterDirectoryContents :: FilePath -> IO [FilePath] getAndFilterDirectoryContents fp = do@@ -48,11 +47,44 @@ else if takeExtension n == ".csp" then return [n] else return []) ns -runSections ::IO [IO Bool]+data LibCSPMTest = IOTestFunction (IO LibCSPMTestResult)+data LibCSPMTestRunning = LibCSPMTestRunning+data LibCSPMTestResult =+ LibCSPMTestResult RunResult RunResult [ErrorMessage] [ErrorMessage]+ | LibCSPMTestPanic String++instance Show LibCSPMTestRunning where+ show _ = "Running"+instance Show LibCSPMTestResult where+ show (LibCSPMTestResult r1 r2 _ _) | r1 == r2 = "OK"+ show (LibCSPMTestResult ErrorOccured PassedNoWarnings es ws) = + "Failed (test should have failed but passed)"+ show (LibCSPMTestResult ErrorOccured WarningsEmitted es ws) = + "Failed (test should have failed but only warned)"+ show (LibCSPMTestResult WarningsEmitted PassedNoWarnings es ws) =+ "Failed (test passed but should have emitted warnings)"+ show (LibCSPMTestResult WarningsEmitted ErrorOccured es ws) =+ "Failed (test failed but should have only emitted warnings)\n"+ ++ show (prettyPrint es)+ show (LibCSPMTestResult PassedNoWarnings WarningsEmitted es ws) =+ "Failed (test emitted warnings but should have passed)\n"+ ++ show (prettyPrint ws)+ show (LibCSPMTestResult PassedNoWarnings ErrorOccured es ws) =+ "Failed (test failed but should have passed)\n"+ ++ show (prettyPrint es)+ show (LibCSPMTestPanic es) = "Unexpected error\n"++es+instance T.TestResultlike LibCSPMTestRunning LibCSPMTestResult where+ testSucceeded (LibCSPMTestResult r1 r2 _ _) = r1 == r2+ testSucceeded (LibCSPMTestPanic _) = False+instance T.Testlike LibCSPMTestRunning LibCSPMTestResult LibCSPMTest where+ runTest topts (IOTestFunction func) = T.runImprovingIO $ T.liftIO func+ testTypeName _ = "Test Cases"++runSections :: IO [Test] runSections = do let testDir = "tests"- sections = ["parser", "prettyprinter", "typechecker", "evaluator"]+ sections = map fst testFunctions fs <- mapM (\section -> do shouldPassFiles <- getAndFilterDirectoryContents $ @@ -65,61 +97,46 @@ case lookup section testFunctions of Just test -> let- pf = [runTest (joinPath [testDir, section, "should_pass", f]) - test PassedNoWarnings | f <- shouldPassFiles]- ff = [runTest (joinPath [testDir, section, "should_fail", f]) - test ErrorOccured | f <- shouldFailFiles]- wf = [runTest (joinPath [testDir, section, "should_warn", f]) - test WarningsEmitted | f <- shouldWarnFiles]- in return $ pf++ff++wf+ mkTest dir1 f expectedResult =+ let path = joinPath [testDir, section, dir1, f]+ in T.Test f (IOTestFunction $ makeTest path test expectedResult)+ pf = [mkTest "should_pass" f PassedNoWarnings | f <- shouldPassFiles]+ ff = [mkTest "should_fail" f ErrorOccured | f <- shouldFailFiles]+ wf = [mkTest "should_warn" f WarningsEmitted | f <- shouldWarnFiles]+ in return [testGroup section (pf++ff++wf)] Nothing -> return [] ) sections return $ concat fs -runTest :: FilePath -> (FilePath -> Test a) -> RunResult -> IO Bool-runTest fp test expectedResult = do- putStr $ "Running test "++fp++"..."- s <- initTestState- res <- tryM $ runTestM s $ do- test fp- getState lastWarnings- let- failed :: Maybe Doc -> IO Bool- failed (Just e) = do- putStrLn "FAILED"- putStrLn $ show e- return False- failed Nothing = do- putStrLn "FAILED"- return False- passed = do- putStrLn "Passed"- return True- - shouldPass = expectedResult == PassedNoWarnings- shouldFail = expectedResult == ErrorOccured- shouldWarn = expectedResult == WarningsEmitted- case res of - Left (SourceError e) -> if shouldFail then passed else failed (Just (prettyPrint e))- Right [] -> if shouldPass then passed else failed Nothing- Right ws -> if shouldWarn then passed else failed (Just (prettyPrint ws))- _ -> failed (Just (text "Internal Error"))+makeTest :: FilePath -> (FilePath -> TestM a) -> RunResult -> IO LibCSPMTestResult+makeTest fp test expectedResult =+ catch (do+ s <- initTestState+ res <- tryM $ runTestM s $ do+ test fp+ getState lastWarnings+ return $! case res of + Left (SourceError e) -> LibCSPMTestResult expectedResult ErrorOccured e []+ Right [] -> LibCSPMTestResult expectedResult PassedNoWarnings [] []+ Right ws -> LibCSPMTestResult expectedResult WarningsEmitted [] ws+ ) (\ (e :: SomeException) -> return $ LibCSPMTestPanic (show e)) testFunctions = [ ("parser", parserTest), ("typechecker", typeCheckerTest), ("prettyprinter", prettyPrinterTest),- ("evaluator", evaluatorTest)+ ("evaluator", evaluatorTest),+ ("desugar", desugarTest) ] -typeCheckerTest :: FilePath -> Test ()+typeCheckerTest :: FilePath -> TestM () typeCheckerTest fp = do ms <- disallowErrors (parseFile fp) ms <- CSPM.renameFile ms typeCheckFile ms return () -parserTest :: FilePath -> Test ()+parserTest :: FilePath -> TestM () parserTest fp = do ms <- parseFile fp -- Force evaluation of the whole of ms. We can't just use seq@@ -127,14 +144,23 @@ -- the length of the string representing ms and then compute the length (length (show ms)) `seq` (return ()) -prettyPrinterTest :: FilePath -> Test ()+prettyPrinterTest :: FilePath -> TestM () prettyPrinterTest fp = do ms <- disallowErrors (parseFile fp) let str = show (prettyPrint ms) ms' <- parseStringAsFile str if ms /= ms' then throwException UserError else return () -disallowErrors :: Test a -> Test a+desugarTest :: FilePath -> TestM ()+desugarTest fp = do+ tms <- disallowErrors $ do+ ms <- parseFile fp+ rms <- CSPM.renameFile ms+ typeCheckFile rms+ dsms <- desugarFile tms+ return ()++disallowErrors :: TestM a -> TestM a disallowErrors a = do res <- tryM a case res of@@ -142,10 +168,10 @@ $$ tabIndent (text (show e)) Right v -> return v -evaluatorTest :: FilePath -> Test ()+evaluatorTest :: FilePath -> TestM () evaluatorTest fp = do let - evalExpr :: String -> Type -> Test Value+ evalExpr :: String -> Type -> TestM Value evalExpr s t = do tce <- disallowErrors $ do e <- parseExpression s@@ -154,22 +180,22 @@ desugarExpression tce evaluateExpression tce - dsms <- disallowErrors $ do+ CSPMFile ds <- disallowErrors $ do ms <- parseFile fp rms <- CSPM.renameFile ms tms <- typeCheckFile rms dsms <- desugarFile tms bindFile dsms- return dsms+ return $ unAnnotate dsms -- Extract all declarations of the form "test...", which should be of -- patterns of type :: Bool- mapM_ (\ (GlobalModule ds) -> mapM_ (\ d ->+ mapM_ (\ d -> case d of - PatBind p _ ->+ PatBind p _ _ -> case unAnnotate p of PVar n -> do- let OccName s = nameOccurrence n+ let s = show n when ("test" `isPrefixOf` s) $ do VBool b <- evalExpr s TBool when (not b) $@@ -182,7 +208,7 @@ (dropExtension fp)++"-"++s++"-expected.txt" expectedOutput <- liftIO $ readFile expectedOutputFile let output = prettyPrintAllRequiredProcesses proc- when (show output /= expectedOutput) $+ when (not (compareOutputs (show output) expectedOutput)) $ throwSourceError [mkErrorMessage (loc p) $ text "The output of" <+> prettyPrint n @@ -192,5 +218,33 @@ ] _ -> return () _ -> return ()- ) (map unAnnotate ds)- ) (map unAnnotate dsms)+ ) (map unAnnotate ds)++-- | Compares two strings for equality, allowing internal names to be different,+-- but consistently so.+compareOutputs :: String -> String -> Bool+compareOutputs s1 s2 =+ let+ hasNum :: String -> Bool+ hasNum [] = False+ hasNum (c:_) = '0' <= c && c <= '9'++ cmp :: [(String, String)] -> String -> String -> Bool+ cmp nameMap [] [] = True+ cmp nameMap [] _ = False+ cmp nameMap _ [] = False+ cmp nameMap ('i':xs) ('i':ys) | hasNum xs && hasNum ys =+ let+ isSpace ' ' = True+ isSpace _ = False++ (n1, xs') = break isSpace xs+ (n2, ys') = break isSpace xs+ in if n1 /= n2 then+ -- Check name map+ case lookup n1 nameMap of+ Just n2' -> n2 == n2' && cmp nameMap xs' ys'+ Nothing -> cmp ((n1, n2):nameMap) xs' ys'+ else cmp nameMap xs' ys'+ cmp nameMap (x:xs) (y:ys) = x == y && cmp nameMap xs ys+ in cmp [] s1 s2