packages feed

scyther-proof 0.10.0.0 → 0.10.0.1

raw patch · 24 files changed

+361/−924 lines, 24 filesdep ~filepathdep ~jsondep ~time

Dependency ranges changed: filepath, json, time

Files

CHANGES view
@@ -1,3 +1,6 @@+* 0.10.0.1+    - make it compile with GHC 7.10.1+ * 0.10.0.0     - upgraded dependency on Isabelle to Isabelle2014     - add support for explicit matching and non-matching steps in protocols
− dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs
@@ -1,623 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 1 "src/Scyther/Theory/Lexer.x" #-}---- Ignore the slew of warnings from definitions generated by Alex.--- NOTE: you should disable this line when working on this module to make sure--- that you don't miss important warnings.-{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-unused-binds #-}-{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-unused-imports #-}--module Scyther.Theory.Lexer where--import Control.Applicative-import Control.Monad-import Data.Word (Word8)-import qualified Codec.Binary.UTF8.String as UTF8--#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\xbb\x00\x00\x00\xa7\x01\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x00\x00\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x7e\x05\x00\x00\x00\x00\x00\x00\xef\x05\x00\x00\x7e\xff\xff\xff\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x6f\x06\x00\x00\xca\xff\xff\xff\xad\xff\xff\xff\x82\xff\xff\xff\x5f\xff\xff\xff\xaf\x06\x00\x00\x58\x07\x00\x00\x18\x07\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\xe4\xff\xff\xff\x18\x08\x00\x00\xd8\x07\x00\x00\x00\x00\x00\x00\xd8\x08\x00\x00\x98\x08\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x8e\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\xe6\xff\xff\xff\x00\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\xff\xff\x00\x00\x00\x00\xe9\xff\xff\xff\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x0a\x00\x00\xc1\x0a\x00\x00\x24\x0b\x00\x00\x87\x0b\x00\x00\xea\x0b\x00\x00\x4d\x0c\x00\x00\xb0\x0c\x00\x00\x13\x0d\x00\x00\x76\x0d\x00\x00\xd9\x0d\x00\x00\x3c\x0e\x00\x00\x9f\x0e\x00\x00\x02\x0f\x00\x00\x65\x0f\x00\x00\xc8\x0f\x00\x00\x2b\x10\x00\x00\x8e\x10\x00\x00\xf1\x10\x00\x00\x54\x11\x00\x00\xb7\x11\x00\x00\x1a\x12\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x1b\x00\x19\x00\x63\x00\x4c\x00\x43\x00\x42\x00\x38\x00\x37\x00\x36\x00\x2d\x00\x39\x00\x2f\x00\x2b\x00\x30\x00\x2c\x00\x31\x00\x2a\x00\x00\x00\x28\x00\x5a\x00\x4e\x00\x55\x00\x53\x00\x62\x00\x5b\x00\x4d\x00\x45\x00\x46\x00\x56\x00\x60\x00\x44\x00\x5f\x00\x5d\x00\x4b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x52\x00\x64\x00\x57\x00\x51\x00\x58\x00\x59\x00\x54\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x47\x00\x18\x00\x48\x00\x50\x00\x5e\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6f\x00\x6a\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x49\x00\x5c\x00\x4a\x00\x4f\x00\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\x00\x00\x17\x00\x1a\x00\x16\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2e\x00\x61\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x35\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x13\x00\x07\x00\x0b\x00\x0b\x00\x0b\x00\x0c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x3b\x00\x3a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1d\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\x08\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x06\x00\x0d\x00\x0d\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x78\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x77\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x76\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x68\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x69\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x75\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x74\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6d\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x73\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x70\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x71\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6c\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x79\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x67\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x66\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x65\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x88\x00\x89\x00\x3e\x00\x5c\x00\x88\x00\xac\x00\x2a\x00\x2a\x00\x2a\x00\x29\x00\x7d\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2f\x00\x2a\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\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\x2d\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\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\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x2d\x00\xc2\x00\xc3\x00\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\x2a\x00\x3e\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\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\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\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\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\xa8\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\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\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x10\x00\x10\x00\x12\x00\x12\x00\x14\x00\x14\x00\xff\xff\x1e\x00\x1e\x00\x24\x00\x24\x00\x27\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x33\x00\x33\x00\x33\x00\x29\x00\x29\x00\x29\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,121) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,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_10),AlexAcc (alex_action_10),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_15),AlexAcc (alex_action_15),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_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),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_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_44),AlexAcc (alex_action_45),AlexAcc (alex_action_46),AlexAcc (alex_action_47),AlexAcc (alex_action_48),AlexAcc (alex_action_49),AlexAcc (alex_action_50),AlexAcc (alex_action_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55)]-{-# LINE 93 "src/Scyther/Theory/Lexer.x" #-}----- | Lex a keyword-keyword :: Keyword -> AlexAction Keyword-keyword kw input len = return kw---- | Wrap a string into a keyword-scanString :: (String -> Keyword) -> AlexAction Keyword-scanString kw (_,_,_,input) len = return $ kw (take len input)--{---- | Scan a string until EOF is encountered.-alexScanTokens :: String -> Either String [Keyword]-alexScanTokens inp = runAlex inp gather-  where-  gather = do-    t <- alexMonadScan-    case trace (show t) t of-      EOF -> return [EOF]-      _   -> (t:) `liftM` gather---- | Scan a file.-scanFile f = do-   inp <- readFile f-   return $ alexScanTokens inp--}---- | Formal text types.-data TextType =-       TextBegin String-     | TextContent String-     | TextEnd-     deriving( Eq, Ord, Show )---- | Lexable Keywords-data Keyword =-    IDENT String-  | TEXT TextType-  | SQUOTE-  | DQUOTE-  | RIGHTARROW-  | LEFTARROW-  | LONGRIGHTARROW-  | LONGLEFTARROW-  | COMMA-  | DOT-  | COLON-  | QUESTIONMARK-  | BANG-  | AND-  | MID-  | DOLLAR-  | AT-  | SHARP-  | LPAREN-  | RPAREN-  | LBRACKET-  | RBRACKET-  | LBRACE-  | RBRACE-  | SLASH-  | BACKSLASH-  | TILDE-  | HAT-  | STAR-  | UNDERSCORE-  | MINUS-  | PLUS-  | EQUAL-  | LESS-  | GREATER-  | EOF-  | FORALL-  | EXISTS-  | LAND-  | LOR-  | LNOT-  | APPROX-  -- dummy keyword to get rid of overlapping pattern matches-  | DUMMY_KEYWORD-  deriving( Eq )--instance Show Keyword where-  show kw = case kw of-      IDENT i -> identifier i-      TEXT t -> txt t-      SQUOTE -> symbol "'"-      DQUOTE -> symbol "\""-      RIGHTARROW -> symbol "->"-      LEFTARROW -> symbol "<-"-      LONGRIGHTARROW -> symbol "-->"-      LONGLEFTARROW -> symbol "<--"-      COMMA -> symbol ","-      DOT -> symbol "."-      COLON -> symbol ":"-      QUESTIONMARK -> symbol "?"-      BANG -> symbol "!"-      AND -> symbol "&"-      MID -> symbol "|"-      DOLLAR -> symbol "$"-      AT -> symbol "@"-      SHARP -> symbol "#"-      LPAREN -> symbol "("-      RPAREN -> symbol ")"-      LBRACKET -> symbol "["-      RBRACKET -> symbol "]"-      LBRACE  -> symbol "{"-      RBRACE -> symbol "}"-      SLASH -> symbol "/"-      BACKSLASH -> symbol "\\"-      TILDE -> symbol "~"-      HAT -> symbol "^"-      STAR -> symbol "*"-      UNDERSCORE -> symbol "_"-      MINUS -> symbol "-"-      PLUS -> symbol "+"-      EQUAL -> symbol "="-      LESS -> symbol "<"-      GREATER -> symbol ">"-      EOF -> "end of file"-      FORALL -> symbol   "∀"-      EXISTS -> symbol   "∃"-      LAND -> symbol     "∧"-      LOR -> symbol      "∨"-      LNOT -> symbol     "¬"-      APPROX -> symbol   "≈"-      DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"-    where-      identifier i        = "identifier `" ++ i ++ "'"-      txt (TextBegin t)   = "start of `" ++ t ++ "'"-      txt (TextContent t) = "text `" ++ t ++ "'"-      txt (TextEnd)       = "start of text"-      symbol s            = "symbol `" ++ s ++ "'"-      keyword s           = "keyword `" ++ s ++ "'"---- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- The input type--type AlexInput = (AlexPosn,     -- current position,-                  Char,         -- previous char-                  [Word8],      -- remaining bytes of current char-                  String)       -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,bs,s) = c--alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)-alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))-alexGetByte (p,c,[],[]) = Nothing-alexGetByte (p,_,[],(c:s))  = let p' = alexMove p c-                                  (b:bs) = UTF8.encodeChar c-                              in p' `seq`  Just (b, (p', c, bs, s))---- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text.  It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.--data AlexPosn = AlexPn !Int !Int !Int-        deriving (Eq)--instance Show AlexPosn where-  show (AlexPn _ l c) = "line "++show l++" column "++show c--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)----- -------------------------------------------------------------------------------- Default monad---data AlexState = AlexState {-        alex_pos :: !AlexPosn,  -- position at current input location-        alex_inp :: String,     -- the current input-        alex_chr :: !Char,      -- the character before the input-        alex_scd :: !Int,       -- the current startcode-        alex_ocd :: !Int,       -- the old startcode before the comment started-        alex_cmt :: [String]    -- stack of begin comment identifiers-    }---- Compile with -funbox-strict-fields for best results!--runAlex :: String -> Alex a -> Either String a-runAlex input (Alex f)-   = case f (AlexState {alex_pos = alexStartPos,-                        alex_inp = input,-                        alex_chr = '\n',-                        alex_scd = 0,-                        alex_ocd = 0,-                        alex_cmt = []-             }) of-       Left msg -> Left msg-       Right ( _, a ) -> Right a--newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }--instance Functor Alex where-  fmap = liftM--instance Applicative Alex where-  pure  = return-  (<*>) = ap--instance Monad Alex where-  m >>= k  = Alex $ \s -> case unAlex m s of-                                Left msg -> Left msg-                                Right (s',a) -> unAlex (k a) s'-  return a = Alex $ \s -> Right (s,a)--alexGetPos :: Alex AlexPosn-alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)--alexGetInput :: Alex AlexInput-alexGetInput- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} ->-        Right (s, (pos,c,[],inp))--alexSetInput :: AlexInput -> Alex ()-alexSetInput (pos,c,_,inp)- = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of-                  s@(AlexState{}) -> Right (s, ())--alexError :: String -> Alex a-alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)--alexGetStartCode :: Alex Int-alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)--alexSetStartCode :: Int -> Alex ()-alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())--alexGetOldStartCode :: Alex Int-alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)--alexSetOldStartCode :: Int -> Alex ()-alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())--alexGetComments :: Alex [String]-alexGetComments = Alex $ \s -> Right (s, alex_cmt s)--alexSetComments :: [String] -> Alex ()-alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())--alexMonadScan = do-  inp <- alexGetInput-  sc <- alexGetStartCode-  case alexScan inp sc of-    AlexEOF -> alexEOF-    AlexError inp' -> alexError "lexical error"-    AlexSkip  inp' len -> do-        alexSetInput inp'-        alexMonadScan-    AlexToken inp' len action -> do-        alexSetInput inp'-        action inp len---- -------------------------------------------------------------------------------- Useful token actions--type AlexAction result = AlexInput -> Int -> Alex result---- just ignore this token and scan another one-skip :: AlexAction Keyword-skip input len = alexMonadScan---- ignore this token, but set the start code to a new value-begin :: Int -> AlexAction Keyword-begin code input len = do alexSetStartCode code; alexMonadScan---- | Begin a text starting of the given type.-beginText :: String -> Int -> AlexAction Keyword-beginText ty code _ _ = do-  alexSetStartCode code-  return $ TEXT $ TextBegin ty---- | End a text.-endText :: Int -> AlexAction Keyword-endText code _ _ = do-  alexSetStartCode code-  return $ TEXT TextEnd---- | Begin a comment starting with the given sign.-beginComment :: String -> Int -> AlexAction Keyword-beginComment cmtBegin code input len = do-  cmts <- alexGetComments-  alexSetComments $ cmtBegin : cmts-  if null cmts-    then alexGetStartCode >>= alexSetOldStartCode-    else return ()-  alexSetStartCode code-  alexMonadScan---- | End a comment that started with the given begin comment sign.-endComment :: String -> AlexAction Keyword-endComment cmtBegin input len = do-  cmts <- alexGetComments-  case cmts of-    [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."-    (cmt:cmts') -> do-      if cmt == cmtBegin-        then do-          alexSetComments cmts'-          if null cmts'-            then alexGetOldStartCode >>= alexSetStartCode-            else return ()-        else return ()-      alexMonadScan---- perform an action for this token, and set the start code to a new value--- andBegin :: AlexAction result -> Int -> AlexAction result-(action `andBegin` code) input len = do alexSetStartCode code; action input len--alexEOF :: Alex Keyword-alexEOF = return EOF------comment,text :: Int-comment = 1-text = 2-alex_action_2 =  beginComment "(*" comment -alex_action_3 =  beginComment "(*" comment -alex_action_4 =  beginComment "(*" comment -alex_action_5 =  endComment "(*" -alex_action_6 =  beginComment "/*" comment -alex_action_7 =  beginComment "/*" comment -alex_action_8 =  beginComment "/*" comment -alex_action_9 =  endComment "/*" -alex_action_10 =  skip -alex_action_11 =  beginText "text" text -alex_action_12 =  beginText "section" text -alex_action_13 =  beginText "subsection" text -alex_action_14 =  endText 0-alex_action_15 =  scanString (TEXT . TextContent) -alex_action_16 =  keyword FORALL -alex_action_17 =  keyword EXISTS -alex_action_18 =  keyword LAND -alex_action_19 =  keyword LOR -alex_action_20 =  keyword LNOT -alex_action_21 =  keyword APPROX -alex_action_22 =  keyword COMMA -alex_action_23 =  keyword LPAREN -alex_action_24 =  keyword RPAREN -alex_action_25 =  keyword LBRACKET -alex_action_26 =  keyword RBRACKET -alex_action_27 =  keyword LBRACE -alex_action_28 =  keyword RBRACE -alex_action_29 =  keyword SLASH -alex_action_30 =  keyword BACKSLASH -alex_action_31 =  keyword SQUOTE -alex_action_32 =  keyword DQUOTE -alex_action_33 =  keyword TILDE -alex_action_34 =  keyword HAT -alex_action_35 =  keyword EQUAL -alex_action_36 =  keyword COLON -alex_action_37 =  keyword DOLLAR -alex_action_38 =  keyword AT -alex_action_39 =  keyword SHARP -alex_action_40 =  keyword STAR -alex_action_41 =  keyword LESS -alex_action_42 =  keyword GREATER -alex_action_43 =  keyword QUESTIONMARK -alex_action_44 =  keyword BANG -alex_action_45 =  keyword AND -alex_action_46 =  keyword MID -alex_action_47 =  keyword DOT -alex_action_48 =  keyword UNDERSCORE -alex_action_49 =  keyword MINUS -alex_action_50 =  keyword PLUS -alex_action_51 =  keyword RIGHTARROW -alex_action_52 =  keyword LEFTARROW -alex_action_53 =  keyword LONGRIGHTARROW -alex_action_54 =  keyword LONGLEFTARROW -alex_action_55 =  scanString IDENT-{-# 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---------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define GTE(n,m) (tagToEnum# (n >=# m))-#define EQ(n,m) (tagToEnum# (n ==# m))-#else-#define GTE(n,m) (n >=# m)-#define EQ(n,m) (n ==# m)-#endif----data AlexAddr = AlexA# Addr#--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN-  narrow16Int# i-  where-        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)-        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-        low  = int2Word# (ord# (indexCharOffAddr# arr off'))-        off' = off *# 2#-#else-  indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN-  narrow32Int# i-  where-   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`-		     (b2 `uncheckedShiftL#` 16#) `or#`-		     (b1 `uncheckedShiftL#` 8#) `or#` b0)-   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))-   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))-   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))-   off' = off *# 4#-#else-  indexInt32OffAddr# arr off-#endif-------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a-  = AlexEOF-  | AlexError  !AlexInput-  | AlexSkip   !AlexInput !Int-  | AlexToken  !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))-  = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))-  = case alex_scan_tkn user input 0# input sc AlexNone of-	(AlexNone, input') ->-		case alexGetByte input of-			Nothing -> ----				   AlexEOF-			Just _ ->----				   AlexError input'--	(AlexLastSkip input'' len, _) ->----		AlexSkip input'' len--	(AlexLastAcc k input''' len, _) ->----		AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =-  input `seq` -- strict in the input-  let -	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))-  in-  new_acc `seq`-  case alexGetByte input of-     Nothing -> (new_acc, input)-     Just (c, new_input) -> ----      case fromIntegral c of { (I# (ord_c)) ->-        let-                base   = alexIndexInt32OffAddr alex_base s-                offset = (base +# ord_c)-                check  = alexIndexInt16OffAddr alex_check offset-		-                new_s = if GTE(offset,0#) && EQ(check,ord_c)-			  then alexIndexInt16OffAddr alex_table offset-			  else alexIndexInt16OffAddr alex_deflt s-	in-        case new_s of-	    -1# -> (new_acc, input)-		-- on an error, we want to keep the input *before* the-		-- character that failed, not after.-    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)-			new_input new_s new_acc-      }-  where-	check_accs (AlexAccNone) = last_acc-	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))---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-  = AlexAccNone-  | AlexAcc a-  | AlexAccSkip----- used by wrappers-iUnbox (I# (i)) = i-
scyther-proof.cabal view
@@ -1,6 +1,6 @@ build-type:         Simple name:               scyther-proof-version:            0.10.0.0+version:            0.10.0.1 license:            GPL license-file:       LICENSE category:           Security, Theorem Provers@@ -114,15 +114,15 @@         mtl           >= 2.1   && < 3.0,          cmdargs       >= 0.10.7 ,-        filepath      >= 1.2   && < 1.4 ,+        filepath      >= 1.2   && < 1.5 ,         directory     >= 1.0   && < 1.3 ,         process       >= 1.1   && < 1.3 ,-        time          >= 1.1   && < 1.5 ,+        time          >= 1.1   && < 1.6 ,          parsec        == 3.1.*  ,         pretty        >= 1.0   && < 1.2 ,         tagsoup       >= 0.12  && < 0.14 ,-        json          == 0.5.*  ,+        json          >= 0.5   && < 0.10 ,         uniplate      == 1.6.* ,         utf8-string   >= 0.3.7 
src/Control/Concurrent/ManagedThreads.hs view
@@ -1,4 +1,4 @@--- NOTE: The first part of this module is based on Chapter 24 from +-- NOTE: The first part of this module is based on Chapter 24 from -- "Real World Haskell Programming" cf: -- (http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html) @@ -87,7 +87,7 @@  -- | Extract the head of the list in the MVar if possible. takeHead :: MVar [a] -> IO (Maybe a)-takeHead v = +takeHead v =     modifyMVar v (return . extract)   where     extract []     = ([], Nothing)@@ -95,7 +95,7 @@  -- | Do a parallel sequencing of a list of IO commands using n worker threads -- and gather their results in a list again.-nParSequenceIO :: Int -> [IO a] -> IO [a] +nParSequenceIO :: Int -> [IO a] -> IO [a] nParSequenceIO n ios = do     inMv <- newMVar $ zip [(1::Int)..] ios     resMv <- newMVar []@@ -150,7 +150,7 @@     waitAll mgr   where     nCmds = length cmds-    displayThread ch i +    displayThread ch i       | nCmds < i = do return ()       | otherwise = do msg <- readChan ch                        display nCmds i msg@@ -158,7 +158,7 @@  -- | Like @nParCmd_@ but uses the number of processing cores+1 as a default for -- the number of worker treads. You can change their number by adding to the--- command line of a program linked with the threaded library: +-- command line of a program linked with the threaded library: --    +RTS -N<no-of-cores> -RTS parCmd_ :: (Int -> Int -> b -> IO ()) -> [Chan b -> IO a] -> IO () parCmd_ display cmds = nParCmd_ (numCapabilities+1) display cmds
src/Control/Monad/BoundedDFS.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, +{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts,              FunctionalDependencies, GeneralizedNewtypeDeriving #-} -- | A monad for implemented bounded depth-first-search and branch-and-bound -- search.@@ -6,7 +6,7 @@   -- * Costful operations     MonadCost(..) -  -- * Unbounded depth-first-search +  -- * Unbounded depth-first-search   , UnboundedDFS(..)    -- * Bounded depth-first-search@@ -91,16 +91,16 @@ execBoundedDFS m cond = fmap snd . runBoundedDFS m cond  -- | A branch and bound monad for finding results with the smallest costs.-newtype BranchAndBound c a = -  BranchAndBound { -    unBranchAndBound :: ReaderT (c -> Bool) (StateT c Maybe) a +newtype BranchAndBound c a =+  BranchAndBound {+    unBranchAndBound :: ReaderT (c -> Bool) (StateT c Maybe) a   }   deriving( Functor, Applicative, Monad )  -- | Run a branch and bound search. runBranchAndBound :: Cost c => BranchAndBound c a -> c -> Maybe (a, c)-runBranchAndBound m bound -  | zeroCost `lessEqCost` bound = +runBranchAndBound m bound+  | zeroCost `lessEqCost` bound =       runStateT (runReaderT (unBranchAndBound m) (`lessEqCost` bound)) zeroCost   | otherwise = mzero @@ -148,7 +148,7 @@  instance Cost c => MonadPlus (BranchAndBound c) where   mzero = BranchAndBound $ mzero-  m1 `mplus` m2 = BranchAndBound $ +  m1 `mplus` m2 = BranchAndBound $     (do -- see if m1 get's through         used <- get         x1 <- unBranchAndBound m1
src/Control/Monad/Label.hs view
@@ -82,7 +82,7 @@  -- | Execute a computation requiring consistent labels. execConsistentLabels :: ConsistentLabels k l a -> [l] -> ([l], M.Map k l)-execConsistentLabels m = snd . runConsistentLabels m +execConsistentLabels m = snd . runConsistentLabels m   
src/Data/Color.hs view
@@ -13,7 +13,7 @@   , red   , green   , blue-  +   -- ** Conversions   , rgbToGray   , hsvToGray@@ -85,7 +85,7 @@      | ub == g   = 60 * (2 + (b-r)/(ub-lb))      | otherwise = 60 * (4 + (r-g)/(ub-lb)) -  h' | h < 0 = h + 360 +  h' | h < 0 = h + 360      | otherwise = h    s  | ub == 0   = 0@@ -126,9 +126,9 @@ rgbToHex :: RealFrac t => RGB t -> String rgbToHex (RGB r g b) = ('#':) . showHex' r . showHex' g . showHex' b $ ""   where showHex' f-	  | i <= 15   = ('0':) . showHex i-	  | otherwise = showHex i-	  where +          | i <= 15   = ('0':) . showHex i+          | otherwise = showHex i+          where           i :: Int           i = max 0 (min 255 (floor (256 * f))) @@ -155,23 +155,23 @@ -- | From a list of group sizes build a function assigning every element a -- unique color, nicely distributed such that they are well differentiated both -- using color and monochrome displays.-genColorGroups :: RealFrac t => -                  ColorParams t +genColorGroups :: RealFrac t =>+                  ColorParams t                -> [Int]                -- ^ List of group sizes.                -> [((Int,Int),(HSV t))]-genColorGroups (ColorParams { -	      cpScale = scale -	    , cpZeroHue = zeroHue -	    , cpVBottom = vBot, cpVRange = vRan-	    , cpSBottom = sBot, cpSRange = sRan-	    }) groups = +genColorGroups (ColorParams {+              cpScale = scale+            , cpZeroHue = zeroHue+            , cpVBottom = vBot, cpVRange = vRan+            , cpSBottom = sBot, cpSRange = sRan+            }) groups =   do     (groupIdx, groupSize) <- zip [0.. ] groups     elemIdx <- [0..groupSize - 1]     let h = toShiftedGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)         v = vBot + vRan * toGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)         s = sBot + sRan * toGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)-        color = HSV (360*h) s v +        color = HSV (360*h) s v     return ((groupIdx, elemIdx), color)   where     nGroups :: Int@@ -182,9 +182,9 @@       0.5 * (1 - scale) + -- left margin             (h * scale)   -- position in margin       ) / (fromIntegral nGroups)-   +     toShiftedGroupHue g h =-      snd . properFraction $ toGroupHue g h + 1 + +      snd . properFraction $ toGroupHue g h + 1 +       (zeroHue/360) - toGroupHue 0 0.5  @@ -228,7 +228,7 @@ {-  colorTable :: Double -> (HSV Double -> HSV Double) -> [Int] -> Html-colorTable zeroHue conv groups = +colorTable zeroHue conv groups =   table . toHtml . besides $ map col [0..length groups-1]   where   col i = aboves [cell $ (td ! [getStyle i j]) (stringToHtml (show (i,j)))
src/Data/DAG/Simple.hs view
@@ -17,10 +17,10 @@ -- cyclic, then the result is at least some permutation of all elements of -- the given relation. toposort :: Ord a => [(a, a)] -> [a]-toposort dag = +toposort dag =     execWriter . foldM visit S.empty $ map fst dag ++ map snd dag-  where -    visit visited x +  where+    visit visited x       | x `S.member` visited = return visited       | otherwise            =           foldM visit (S.insert x visited) preds <* tell (pure x)@@ -30,10 +30,10 @@  -- | Compute the set of nodes reachable from the given set of nodes. reachableSet :: Ord a => [a] -> [(a,a)] -> S.Set a-reachableSet start dag = +reachableSet start dag =     foldl' visit S.empty start-  where -    visit visited x +  where+    visit visited x       | x `S.member` visited = visited       | otherwise            =           foldl' visit (S.insert x visited) succs@@ -42,17 +42,17 @@  -- | Is the relation cyclic. cyclic :: Ord a => [(a,a)] -> Bool-cyclic rel = +cyclic rel =     maybe True (const False) $ foldM visitForest S.empty $ map fst rel-  where +  where     visitForest visited x       | x `S.member` visited = return visited       | otherwise            = findLoop S.empty visited x -    findLoop parents visited x +    findLoop parents visited x       | x `S.member` parents = mzero       | x `S.member` visited = return visited-      | otherwise            = +      | otherwise            =           S.insert x <$> foldM (findLoop parents') visited next       where         next     = [ e' | (e,e') <- rel, e == x ]
src/Data/Table.hs view
@@ -40,11 +40,11 @@ ------------------------------------------------------------------------------  -- | Round a number to the given amount of decimals.-roundDecimal :: RealFrac a +roundDecimal :: RealFrac a              => Int  -- ^ Number of decimals after the decimal point              -> a -> a roundDecimal d n = fromIntegral ((round (multiplier * n))::Integer) / multiplier-  where +  where   multiplier :: RealFrac a => a   multiplier = 10 ^^ d @@ -72,7 +72,7 @@  -- | Convert a dense list to an 'IntMap' assuming the list has consecutive -- indexes starting from '0'.-fromDenseList :: [a] -> IM.IntMap a +fromDenseList :: [a] -> IM.IntMap a fromDenseList = IM.fromList . zip [0..]  ------------------------------------------------------------------------------@@ -86,7 +86,7 @@   deriving( Eq, Ord, Show )  -- | A table with aligned rows.-data Table a = Table { +data Table a = Table {     alignments :: IM.IntMap Alignment  -- ^ The alignment for each column   , headers    :: IM.IntMap a          -- ^ The headers for each column   , getCells   :: Cells a              -- ^ Cells indexed first by rows then by columns@@ -115,7 +115,7 @@ -- | Retrieve the contents of a cell if it exists. getCell :: (Int,Int) -> Table a -> Maybe a getCell (rowIdx, colIdx) = (IM.lookup colIdx =<<) . IM.lookup rowIdx . getCells-  + -- | View the index and the contents of the last cell. viewLastCell :: Table a -> Maybe ((Int, Int), a) viewLastCell t = do@@ -150,10 +150,10 @@ mapCells f = mapCellsAndHeaders f id  -- | Updtate the headers and the cells-mapCellsAndHeaders :: (Cells a -> Cells b) -                   -> (IM.IntMap a -> IM.IntMap b) +mapCellsAndHeaders :: (Cells a -> Cells b)+                   -> (IM.IntMap a -> IM.IntMap b)                    -> Table a -> Table b-mapCellsAndHeaders fCells fHeaders t = +mapCellsAndHeaders fCells fHeaders t =   t { headers = fHeaders (headers t), getCells = fCells (getCells t) }  @@ -178,7 +178,7 @@  -- | Set the contents of a cell. setCell :: (Int,Int) -> a -> Table a -> Table a-setCell idx@(rowIdx, colIdx) x +setCell idx@(rowIdx, colIdx) x   | rowIdx < 0 || colIdx < 0 = error $ "setCell: index out of range" ++ show idx   | otherwise                = mapCells (IM.alter changeRow rowIdx)   where@@ -191,9 +191,9 @@   Just rowIdx -> IM.insert (succ rowIdx) IM.empty cells   Nothing     -> IM.singleton 0 IM.empty --- | Append a cell at the end of the last row +-- | Append a cell at the end of the last row appendCell :: a -> Table a -> Table a-appendCell cell = mapCells $ \cells -> +appendCell cell = mapCells $ \cells ->   case IM.maxViewWithKey cells of     Just ((rowIdx,row),cellsNoRow) ->       case maxKey row of@@ -216,7 +216,7 @@ appendNumCell :: (Show a, RealFrac a )               => Int -- ^ Number of digits after the decimal point               -> a -> Table String -> Table String-appendNumCell dec x = +appendNumCell dec x =   alignLastCell AlignRight . appendCell (show $ roundDecimal dec x)  @@ -237,12 +237,12 @@  -- | Align the contents of each cell using the given aligment for each row. alignCellsBy :: [Aligner a] -> [[[a]]] -> [[[a]]]-alignCellsBy expanders = +alignCellsBy expanders =   transpose . zipWith alignBy (cycle expanders) . transpose . alignBy (flushLeftBy [[]])  -- | Convert a table to the body of a LaTeX table. toLaTeX :: (a -> String) -> Table a -> String-toLaTeX toStr t = +toLaTeX toStr t =   formatLines . map formatLine . alignCells . addHeaders . toList "" . fmap toStr $ t   where   addHeaders@@ -264,5 +264,5 @@ test = fromList $ [["simon","where","a"],["new","","world"],[],["order"]] test1 = setHeader 1 "URGH" .setHeader 1 "WORDL" . appendNumCell 2 10.2 . alignLastCell AlignRight . appendCell "w" $ test -latex = putStrLn . toLaTeX id +latex = putStrLn . toLaTeX id -}
src/Data/UnionFind.hs view
@@ -6,14 +6,14 @@   , map   , empty   , size-  , equate -  , fromList +  , equate+  , fromList   , equateList   , toList   , union-  , find -  , findWithDefault -  , equiv +  , find+  , findWithDefault+  , equiv   ) where  import Prelude hiding (map)@@ -71,18 +71,18 @@  -- | @equate x y uf@ inserts the equality @x = y@ into @uf@. equate :: Ord a => a -> a -> UnionFind a -> UnionFind a-equate x y (UnionFind uf) +equate x y (UnionFind uf)   | x == y    = UnionFind uf-  | otherwise = UnionFind $ +  | otherwise = UnionFind $       case (M.lookup x uf, M.lookup y uf) of          (Nothing, Nothing)            | x <= y    -> M.insert y x uf            | otherwise -> M.insert x y uf-         +          (Just xr, Nothing)            | xr <= x   -> M.insert y xr uf            | otherwise -> M.insert y x $ update xr x uf-         +          (Nothing, Just yr)            | yr <= y   -> M.insert x yr uf            | otherwise -> M.insert x y $ update yr y uf@@ -96,7 +96,7 @@         upd rep | rep == old_rep = new_rep                 | otherwise      = rep -fromList :: Ord a => [(a,a)] -> UnionFind a +fromList :: Ord a => [(a,a)] -> UnionFind a fromList = equateList empty  equateList :: Ord a => UnionFind a -> [(a,a)] -> UnionFind a@@ -106,7 +106,7 @@ toList = M.toList . unUnionFind  union :: Ord a => UnionFind a -> UnionFind a -> UnionFind a-union uf1 uf2 +union uf1 uf2   | size uf1 < size uf2 = equateList uf2 $ toList uf1   | otherwise           = equateList uf1 $ toList uf2 
src/Extension/Prelude.hs view
@@ -1,6 +1,59 @@+{-# LANGUAGE CPP #-} -- Functions that could/should have made it into the Prelude or one of the base libraries-module Extension.Prelude where+module Extension.Prelude+  (+  -- * Bool+    implies +  -- *  Lists+  , singleton+  , unique+  , sortednub+  , sortednubOn+  , nubOn+  , groupOn+  , sortOn+  , sortOnMemo+  , groupSortOn+  , eqClasses+  , eqClassesBy+  , splitBy+  , choose+  , leaveOneOut+  , keepFirst++  -- *  Pairs+  , swap+  , sortPair++  -- *  Either+  , isRight+  , isLeft++  -- *  Strings+  , Named+  , flushRightBy+  , flushRight+  , flushLeftBy+  , flushLeft++  -- *  IO+  , warning+  , putErr+  , putErrLn++  -- *  Applicative+  , oneOfList+  , oneOfSet+  , oneOfMap++  -- *  Monads+  , ifM+  , errorFree+  , errorFree1++  ) where+ import Data.Maybe import Data.List import qualified Data.Set as S@@ -39,7 +92,7 @@ sortednub = map head . group . sort  -- | //O(n*log n).// Sort list and remove duplicates with respect to a--- projection. +-- projection. sortednubOn :: Ord b => (a -> b) -> [a] -> [a] sortednubOn proj = map head . groupOn proj . sortOn proj @@ -51,9 +104,13 @@ groupOn :: Eq b => (a -> b) -> [a] -> [[a]] groupOn proj = groupBy ((==) `on` proj) +#if MIN_VERSION_base(4,8,0)+-- 'sortOn' is included in base >= 4.8.0+#else -- | sort on a projection of the data to sort sortOn :: Ord b => (a -> b) -> [a] -> [a] sortOn proj = sortBy (comparing proj)+#endif  -- | sort on a projection of the data to sort, memorizing the results of the -- projection in order to avoid recomputation.@@ -82,8 +139,8 @@ splitBy p = unfoldr split   where split [] = Nothing         split xs = let ~(w,r) = break p xs in case r of-	  []       -> Just $ (w,[])-	  (_:rest) -> Just $ (w,rest)+          []       -> Just $ (w,[])+          (_:rest) -> Just $ (w,rest)   -- | the list of all permutations of a given list@@ -93,17 +150,17 @@   -- where aux [] _ = []         -- aux (x:xs) ys = [x:p | p <- permutations (xs++ys)] ++ aux xs (x:ys) --- | the list of all combinations of n elements of a list. +-- | the list of all combinations of n elements of a list. -- E.g. choose 2 [1,2,3] = [[1,2],[1,3],[2,3]] choose :: Int -> [a] -> [[a]] choose 0 _      = [[]] choose _ []     = [] choose n (x:xs) = [x:xs' | xs' <- choose (n-1) xs] ++ choose n xs --- | build the list of lists each leaving another element out. +-- | build the list of lists each leaving another element out. -- (From left to right) leaveOneOut :: [a] -> [[a]]-leaveOneOut xs = +leaveOneOut xs =   zipWith (++) (map init . tail . inits $ xs) (map tail . init . tails $ xs)  @@ -116,12 +173,12 @@ -- Pairs -- ----------- --- | These functions were inspired by the ML library accompanying the +-- | These functions were inspired by the ML library accompanying the --   Isabelle theorem prover (<http://isabelle.in.tum.de/>)  -- | swap the elements of a pair swap :: (a, b) -> (b, a)-swap (x, y)	 = (y, x)+swap (x, y)      = (y, x)  -- | sort the elements of a pair sortPair :: Ord a => (a,a) -> (a,a)@@ -205,7 +262,7 @@  -- | Gather all error free computations. errorFree :: MonadPlus m => [m a] -> m [a]-errorFree ms = +errorFree ms =   catMaybes `liftM` sequence [(Just `liftM` m) `mplus` return Nothing | m <- ms]  -- | Gather all error free computations and ensure that at least one was error
src/Scyther/Equalities.hs view
@@ -89,7 +89,7 @@ -- Equalities ------------------------------------------------------------------------------ --- | Equalities over thread identifers. +-- | Equalities over thread identifers. -- -- Logically these are equalities between logical thread identifier variables. type TIDEq   = (TID, TID)@@ -109,7 +109,7 @@ -- equalities. type ArbMsgEqs = M.Map ArbMsgId Message --- | Equalities between different agent variables. +-- | Equalities between different agent variables. -- -- We do not have to reason about equalities between an agent variable and some -- other message because our semantics guarantees that agent variables are only@@ -125,10 +125,10 @@  -- | Equalities between messages. type MsgEq  = (Message, Message)-type MsgEqs = U.UnionFind Message +type MsgEqs = U.UnionFind Message  -- | Some representable equality.-data AnyEq = +data AnyEq =     TIDEq     !TIDEq   | TIDRoleEq !TIDRoleEq   | RoleEq    !RoleEq@@ -151,11 +151,11 @@ -- --        forall tid : ran(tideqs).     substTID eqs tid = tid --        forall tid : dom(roleeqs).    substTID eqs tid = tid---        forall (lid, lid') : avareqs. substLocalId eqs lid = lid +--        forall (lid, lid') : avareqs. substLocalId eqs lid = lid --                                    & substAVar eqs lid' = lid'---        forall (lid, m)    : mvareqs. substLocalId eqs lid = lid +--        forall (lid, m)    : mvareqs. substLocalId eqs lid = lid --                                    & substMsg eqs m = m---        +-- --     TODO: Complete properties for Agent ID's -- --        forall aid : dom(arbmeqs).    substAMID eqs aid = MArbMsg aid@@ -240,8 +240,8 @@     go (MTup m1 m2)   = MTup (go m1) (go m2)     go (MEnc m1 m2)   = MEnc (go m1) (go m2)     go (MSymK m1 m2)  = MSymK (go m1) (go m2)-    go (MShrK m1 m2)  = -        U.findWithDefault m' m' $ postEqs eqs +    go (MShrK m1 m2)  =+        U.findWithDefault m' m' $ postEqs eqs       where         m' = MShrK (go m1) (go m2)     go (MAsymPK m)    = MAsymPK (go m)@@ -345,7 +345,7 @@ -- | Convert a set of equalities ot the tuple with lists for each individual -- equality type. toLists :: Equalities -> ([TIDEq], [TIDRoleEq], [ArbMsgEq], [AVarEq], [MVarEq], [MsgEq])-toLists eqs = +toLists eqs =   (getTIDEqs eqs, getTIDRoleEqs eqs, getArbMsgEqs eqs   , getAVarEqs eqs, getMVarEqs eqs, getPostEqs eqs) @@ -353,8 +353,8 @@ -- -- POST: Order of equalities equal to order in result of 'toLists'. toAnyEqs :: Equalities -> [AnyEq]-toAnyEqs eqs = -  map TIDEq a ++ map TIDRoleEq b ++ map ArbMsgEq c ++ map AVarEq d ++ +toAnyEqs eqs =+  map TIDEq a ++ map TIDRoleEq b ++ map ArbMsgEq c ++ map AVarEq d ++   map  MVarEq e ++ map MsgEq f   where (a, b, c, d, e, f) = toLists eqs @@ -395,7 +395,7 @@ -- | Substitute and normalize the postponed equalities with respect to the -- other equalities. normPostEqs :: Equalities -> Equalities-normPostEqs eqs0 = +normPostEqs eqs0 =     eqs { postEqs = U.map (substMsg eqs) (postEqs eqs0) }   where     eqs = eqs0 { postEqs = U.empty }@@ -407,8 +407,8 @@ -- equalities over fresh messages. Bidirectional keys are handled by delaying -- their solution until only one solution is possible. solve :: Monad m => [AnyEq] -> Equalities -> m Equalities-solve ueqs eqs = -  -- trace ("SOLVE: " ++ render (fsep $ punctuate comma $ map sptAnyEq ueqs)) $ +solve ueqs eqs =+  -- trace ("SOLVE: " ++ render (fsep $ punctuate comma $ map sptAnyEq ueqs)) $   fst `liftM` solveRepeated ueqs eqs False  -- | Repeatedly solve unification equations until the solution doesn't change@@ -420,7 +420,7 @@ -- equalities has changed. solveRepeated :: Monad m => [AnyEq] -> Equalities -> Bool -> m (Equalities, Bool) solveRepeated [] eqs False = return (eqs, False)-solveRepeated [] eqs True  = +solveRepeated [] eqs True  =     solveRepeated (map MsgEq $ getPostEqs eqs) (eqs { postEqs = U.empty }) False solveRepeated (ueq:ueqs) eqs improved = do     (ueqs', eqs', improved') <- solve1 ueq eqs@@ -428,14 +428,14 @@  -- | Solve a single unification equation. solve1 :: Monad m => AnyEq -> Equalities -> m ([AnyEq], Equalities, Bool)-solve1 ueq eqs@(Equalities tideqs roleeqs aveqs mveqs arbmeqs posteqs) = +solve1 ueq eqs@(Equalities tideqs roleeqs aveqs mveqs arbmeqs posteqs) =  -- trace ("solve1: " ++ show (sptAnyEq ueq)) $   case ueq of     TIDEq (tid1, tid2) ->       let tid1' = substTID eqs tid1           tid2' = substTID eqs tid2           elimTID x y = return-            ( mkAnyEqs TIDRoleEq roleeqs ++ mkAnyEqs ArbMsgEq arbmeqs ++ +            ( mkAnyEqs TIDRoleEq roleeqs ++ mkAnyEqs ArbMsgEq arbmeqs ++               mkAnyEqs AVarEq aveqs ++ mkAnyEqs MVarEq mveqs ++               map MsgEq (U.toList posteqs)             , empty { tidEqs = M.insert x y tideqs }@@ -452,13 +452,13 @@       in         case M.lookup tid' roleeqs of           Just role' | role' /= role -> different "role" role role'-          _                          -> +          _                          ->             updateSolution (eqs { roleEqs = M.insert tid' role roleeqs })      RoleEq (role1, role2)       | role1 == role2 -> skipEq       | otherwise      -> different "role" role1 role2-            +     AVarEq (av1, av2) ->       let av1' = substAVar eqs av1           av2' = substAVar eqs av2@@ -473,18 +473,18 @@      ArbMsgEq (lhs, rhs) ->       let elimArbMsgId x y-            | x `elem` msgAMIDs y = case y of -                MInvKey _ -> postpone (MArbMsg x) y +            | x `elem` msgAMIDs y = case y of+                MInvKey _ -> postpone (MArbMsg x) y                   -- Here, we have to postpone the equality as 'x = inv(x)'                   -- has a solution.-                  -- +                  --                   -- This is a hacky solution. The real solution is to                   -- implement an occurs check strong enough to deal with the                   -- 'inv(inv(x)) = x' cancellation rule.                   --                   -- FIXME: Implement proper equational unification, as done                   -- in the tamarin-prover.-                _  -> noUnifier $ "occurs check failed for '" ++ show x ++ +                _  -> noUnifier $ "occurs check failed for '" ++ show x ++                                   "' in '" ++ show y ++ "'"             | otherwise =                 updateSolution (eqs {@@ -499,20 +499,20 @@           (lhs'          , (MArbMsg aid2)) -> elimArbMsgId aid2 lhs'           ((MArbMsg aid1), rhs'          ) -> elimArbMsgId aid1 rhs'           (lhs'          , rhs'          ) -> newEqs [MsgEq (lhs', rhs')]-    +     MVarEq (lhs, rhs) ->-      let elimMVar x y +      let elimMVar x y             | x `elem` msgFMV y = case y of-                MInvKey _ -> postpone (MMVar x) y +                MInvKey _ -> postpone (MMVar x) y                   -- Here, we have to postpone the equality as 'x = inv(x)'                   -- has a solution.-                  -- +                  --                   -- This is a hacky solution. The real solution is to                   -- implement an occurs check strong enough to deal with the                   -- 'inv(inv(x)) = x' cancellation rule.                 _ -> noUnifier $ "occurs check failed for '" ++ show x ++                                  "' in '" ++ show y ++ "'"-            | otherwise = +            | otherwise =                 updateSolution (eqs {                     mvarEqs =  M.insert x y $ M.map (substMsg elimEqs) mveqs                   })@@ -524,7 +524,7 @@           (lhs'            ,      (MMVar mv2)) -> elimMVar mv2 lhs'           (     (MMVar mv1), rhs'            ) -> elimMVar mv1 rhs'           (lhs'            , rhs'            ) -> newEqs [MsgEq (lhs', rhs')]-            +     MsgEq eq -> case (substMsg eqs *** substMsg eqs) eq of       -- The order of pattern matches ensures that message variables are always       -- substituted by arbitrary-message ids.@@ -575,7 +575,7 @@         | otherwise -> different "constant" c1 c2        (m1, m2) -> different "message" m1 m2-  +   where     skipEq              = return ([],   eqs , False)     newEqs ueqs         = return (ueqs, eqs , False)@@ -671,13 +671,13 @@ -- | Add a mapping from one arbitrary-message id to another arbitrary-message -- id, possibly overriding an existing mapping. addArbMsgIdMapping :: ArbMsgId -> ArbMsgId -> Mapping -> Mapping-addArbMsgIdMapping from to = mapMapping $ \eqs -> +addArbMsgIdMapping from to = mapMapping $ \eqs ->   eqs { arbmEqs = M.insert from (MArbMsg to) $ arbmEqs eqs }  -- | Add a mapping from one thread identifier to an other role, possibly -- overriding an existing mapping. addTIDRoleMapping :: TID -> Role -> Mapping -> Mapping-addTIDRoleMapping tid role = mapMapping $ \eqs -> +addTIDRoleMapping tid role = mapMapping $ \eqs ->   let tid' = substTID eqs tid   in  eqs { roleEqs = M.insert tid' role $ roleEqs eqs } @@ -770,14 +770,14 @@  {- -- | Convert the equalities for pretty printing.-sptEqualities :: Equalities -> +sptEqualities :: Equalities ->                  ([Doc], [Doc], [Doc]) -- ^ quantified variables, representable                                        --   equalities, non-representable equalities sptEqualities (Equalities tideqs roleeqs aveqs mveqs arbmeqs) =   ( map sptTID (M.keys roleeqs) ++     [ sptArbMsgId aid | (aid, Nothing) <- M.toList arbmeqs]-  , ppMapMaybe ppTIDRoleEq roleeqs ++ -    ppVarEqs ppAVar ppAVar                 aveqs ++ +  , ppMapMaybe ppTIDRoleEq roleeqs +++    ppVarEqs ppAVar ppAVar                 aveqs ++     ppVarEqs ppMVar sptMessage             mveqs ++     ppVarEqs ppAgent (maybe emptyDoc (either ppAgent ppAVar)) arbmeqs   , ppMap      ppTIDEq  tideqs ++
src/Scyther/Event.hs view
@@ -50,19 +50,19 @@  -- | Is the event order cyclic? cyclic :: EventOrder -> Bool-cyclic evord = +cyclic evord =   maybe True (const False) $ foldM visitForest S.empty (map fst evPairs)-  where +  where   evPairs = S.toList evord   visitForest visited x     | x `S.member` visited = return visited     | otherwise            = findLoop S.empty visited x    -- findLoop :: Ord n => S.Set n -> S.Set n -> n -> Maybe (S.Set n)-  findLoop parents visited x +  findLoop parents visited x     | x `S.member` parents = mzero     | x `S.member` visited = return visited-    | otherwise            = +    | otherwise            =         S.insert x `liftM` foldM (findLoop parents') visited next     where     next = [ e' | (e,e') <- evPairs, e == x ]@@ -82,7 +82,7 @@   existsPath visited (x:xs)     | x == to              = True     | x `S.member` visited = existsPath visited xs-    | otherwise            = +    | otherwise            =         existsPath (S.insert x visited) (next ++ xs)     where     next = [ e' | (e,e') <- evPairs, e == x ]@@ -116,7 +116,7 @@ eventTag :: (Event -> Doc) -- ^ Raw pretty printing function          -> (Doc -> Doc)   -- ^ Modifier for learn events          -> (Doc -> Doc)   -- ^ Modifier for step events-         -> Event -> Doc +         -> Event -> Doc eventTag pp ln _  ev@(Learn _)  = ln (pp ev) eventTag pp _  st ev@(Step _ _) = st (pp ev) @@ -133,29 +133,29 @@ isaRawEvent :: Bool -> IsarConf -> Mapping -> Event -> Doc isaRawEvent addParens conf _       (Learn m)       =     (if addParens then parens else id) $ isar conf m-isaRawEvent _         conf mapping (Step tid step) = +isaRawEvent _         conf mapping (Step tid step) =     nestShort 2 lparen rparen (fsep [isar conf tid <> comma, ppStep])   where     ppStep = isaRoleStep conf (threadRole tid (getMappingEqs mapping)) step  -- | Render an event in the Isar format.-isaEvent :: IsarConf +isaEvent :: IsarConf          -> Mapping   -- ^ A mapping of the logical variables. The thread id to                       -- role assigment is used for resolving steps to their                       -- abbreviated notation consisting of role name plus step                       -- label.          -> Event -> Doc-isaEvent conf m = +isaEvent conf m =     eventTag (isaRawEvent False conf m) (inSet "knows t") (inSet "steps t")-  where +  where     inSet set d = d <-> isaIn conf <-> text set  -- | Render an event order in the Isar format. See 'isaEvent' for an -- explanation of the mapping. isaEventOrd :: IsarConf -> Mapping -> (Event, Event) -> Doc-isaEventOrd conf m (e1, e2) = +isaEventOrd conf m (e1, e2) =     esplBefore conf (ppEv e1) (ppEv e2)-  where +  where     ppEv = eventTag (isaRawEvent True conf m) (text "Ln" <>) (text "St" <>)  instance Isar Event where@@ -171,7 +171,7 @@ -- possible). sptRawEvent :: Mapping -> Event -> Doc sptRawEvent _       (Learn m)       = sptMessage m-sptRawEvent mapping (Step tid step) = +sptRawEvent mapping (Step tid step) =     parens $ fsep [sptTID tid <> comma, ppStep]   where     ppStep = sptRoleStep (threadRole tid (getMappingEqs mapping)) step@@ -182,9 +182,9 @@  -- | Render an event order in security protocol theory format. sptEventOrd :: Mapping -> [Event] -> Doc-sptEventOrd m = +sptEventOrd m =     fcat . punctuate (text " < ") . map ppEv-  where +  where     ppEv = eventTag (sptRawEvent m) ((text "Ln" <>) . parens) (text "St" <>)  
src/Scyther/Formula.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-} module Scyther.Formula ( -- * Data Types     Atom(..)
src/Scyther/GoalFlow.hs view
@@ -32,7 +32,7 @@   isEncOrHash (MEnc _ _) = True   isEncOrHash (MHash _)  = True   isEncOrHash _          = False-  + -- | All flows between different protocols protoFlows :: Protocol -> [(((Role,RoleStep),Message),((Role,RoleStep),Message),Equalities)] protoFlows proto = do@@ -65,14 +65,14 @@ -- computing the msg-variable-nonces -- --   1. determine combined relation: roleOrd + msgFlow---   2. toposort +--   2. toposort --   3. in order of toposort, for every receive determine --      first received msg. vars --   4. for every first received msg. var, for every flow --      equating it, transfer assignments -- sptMsgVarAnn :: Protocol -> Doc-sptMsgVarAnn proto = +sptMsgVarAnn proto =   (if acyclic then emptyDoc else text "WARNING: full relation is cyclic") $-$   (fsep . punctuate (text " <") $ map ppStep steps)   where@@ -91,7 +91,7 @@      do guard (m2 == v)         extractTarget m1)     where-    extractTarget m = case m of +    extractTarget m = case m of       Fresh  _ -> return . Left $ m2       MsgVar _ -> return . Right $ m2       _        -> mzero -- TODO: Make this more precise; i.e. its not@@ -109,8 +109,8 @@     ann `S.union`     S.fromList [     where-    -inFlows :: Protocol -> Pattern -> ++inFlows :: Protocol -> Pattern ->            [(((Role,RoleStep),(Message,TID),(Message,TID),Equalities)] inFlows proto ptRecv = do   send@(_, Send _ ptSend) <- protoSteps proto@@ -129,7 +129,7 @@ -}  firstRecvs :: Role -> RoleStep -> S.Set Id-firstRecvs role recv@(Recv _ pt) = +firstRecvs role recv@(Recv _ pt) =   patFMV pt `S.difference`   (S.unions . map (patFMV . stepPat) $ takeWhile (/= recv) (roleSteps role)) firstRecvs _         _           = S.empty@@ -149,10 +149,10 @@  existsFlow :: Pattern -> Pattern -> Bool existsFlow ptSend ptRecv = or-  [ unifiable m1 m2 -  | m1 <- S.toList $ messageparts mSend, +  [ unifiable m1 m2+  | m1 <- S.toList $ messageparts mSend,     m2 <- S.toList $ submessages mRecv,-    isEncOrHash m1, +    isEncOrHash m1,     isEncOrHash m2   ]   where@@ -179,7 +179,7 @@   steps = protoSteps proto  sptProtoOrders :: Protocol -> Doc-sptProtoOrders proto = +sptProtoOrders proto =   text "role ord:" $-$   nest 2 (ppRel $ roleRel proto) $-$   text "flow rel:" $-$@@ -197,10 +197,10 @@   goalFlowAnalysis :: Theory -> Doc-goalFlowAnalysis (Theory _ items) = +goalFlowAnalysis (Theory _ items) =   vcat . intersperse (text "") $ [ analyzeProto p | ThyProtocol p <- items ]   where-  analyzeProto proto = +  analyzeProto proto =     sptProtocol proto $-$     text "" $-$     sptProtoOrders proto
src/Scyther/Message.hs view
@@ -105,21 +105,21 @@ -- | A fresh message. newtype Fresh = Fresh { getFresh :: LocalId }   deriving( Eq, Ord, Show, Data, Typeable )-   + -- | Denotations of messages as they occurr during reasoning. Note that we do -- not model agents, as in the proofs that we want to do no actual agent -- reference will be needed. -- -- Note: This is /no free algebra/ due to the nested equalities on thread -- identifiers and the key-inversion function. However, there is still a most--- general unifier. The easiest way to understand these messages is to map +-- general unifier. The easiest way to understand these messages is to map -- them to the corresponding Isabelle proof states.-data Message = +data Message =     MConst  Id          -- ^ A global constant.   | MFresh  Fresh       -- ^ A freshly generated message.   | MAVar   AVar        -- ^ A symbolically instantiated agent variable.-  | MMVar   MVar        -- ^ A symbolically instantiated message variable; +  | MMVar   MVar        -- ^ A symbolically instantiated message variable;                         --   @MVar (LocalId (Id \"v\", TID 1))@ corresponds to @s(|MV ''v'' tid1|)@.   | MArbMsg ArbMsgId    -- ^ An arbitrary message; i.e., a logical message variable.   | MHash   Message            -- ^ Hashing@@ -145,11 +145,11 @@  -- | The thread corresponding to an agent variable avarTID :: AVar -> TID-avarTID = snd . getLocalId . getAVar +avarTID = snd . getLocalId . getAVar  -- | The thread corresponding to an message variable mvarTID :: MVar -> TID-mvarTID = snd . getLocalId . getMVar +mvarTID = snd . getLocalId . getMVar  -- | Thread identifiers of a message. msgTIDs :: Message -> [TID]@@ -306,7 +306,7 @@ normMsg (MTup  m1 m2)         = MTup (normMsg m1) (normMsg m2) normMsg (MEnc  m1 m2)         = MEnc (normMsg m1) (normMsg m2) normMsg (MSymK m1 m2)         = MSymK (normMsg m1) (normMsg m2)-normMsg (MShrK m1 m2)  +normMsg (MShrK m1 m2)   | m1' < m2' = MShrK m1' m2'   | otherwise = MShrK m2' m1'   where@@ -323,7 +323,7 @@ splitNonTrivial :: Message -> [Message] splitNonTrivial (MTup m1 m2) = splitNonTrivial m1 `mplus` splitNonTrivial m2 splitNonTrivial m            = do-  guard (not $ trivial m) +  guard (not $ trivial m)   return m  @@ -335,7 +335,7 @@ -- | Textual symbolic application of the substitution. -- TODO: Remove hack about thread identifier to state assignment. esplSubst :: LocalId -> IsarConf -> Doc -> Doc-esplSubst (LocalId (_,tid)) conf var +esplSubst (LocalId (_,tid)) conf var   | tid == 0 = isarSubst conf <> parens var   | otherwise = text "s" <> parens var @@ -361,7 +361,7 @@ instance Isar Message where   isar conf x = case x of       (MConst i)    -> text "LC" <-> isar conf i-      (MFresh i)    -> isar conf i +      (MFresh i)    -> isar conf i       (MAVar i)     -> isar conf i       (MMVar i)     -> isar conf i       (MArbMsg i)   -> isar conf i@@ -381,9 +381,9 @@       split (MTup m1 m2) = m1 : split m2       split m = [m]       -- determine output parameters-      (n,ldelim,rdelim) +      (n,ldelim,rdelim)         | isPlainStyle conf = (3, text "{|", text "|}")-        | otherwise        = (2, symbol "\\<lbrace>", symbol "\\<rbrace>") +        | otherwise        = (2, symbol "\\<lbrace>", symbol "\\<rbrace>")   ------------------------------------------------------------------------------@@ -426,7 +426,7 @@   (MInvKey m)   -> text "inv" <> ppBetween 1 "(" ")" m   where   -- pretty print a tuple as right associate list-  ppBetween n lead finish m@(MTup _ _) = +  ppBetween n lead finish m@(MTup _ _) =     fcat . (text lead :) . (++[text finish]) . map (nest n) . punctuate (text ", ") . map sptMessage $ split m   ppBetween _ lead finish m = text lead <> sptMessage m <> text finish   -- split right associate nested tuples
src/Scyther/Protocol.hs view
@@ -57,7 +57,7 @@  -- * Output   , isaRoleStep-  , sptId +  , sptId   , sptLabel   , sptPattern   , sptRoleStep@@ -92,7 +92,7 @@   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )  -- | A message pattern.-data Pattern = +data Pattern =     PConst  Id                -- ^ A global constant.   | PFresh  Id                -- ^ A message to be freshly generated.   | PAVar   Id                -- ^ An agent variable.@@ -113,7 +113,7 @@   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )  -- | A role step.-data RoleStep = +data RoleStep =     Send Label Pattern              -- ^ A send step.   | Recv Label Pattern              -- ^ A receive step.   | Match Label Bool VarId Pattern  -- ^ A match or not-match step.@@ -121,15 +121,15 @@  -- | A role of a protocol. Its name has no operational meaning, but is carried -- along to allow for human readable printing.-data Role = Role { +data Role = Role {     roleName  :: String-  , roleSteps :: [RoleStep] +  , roleSteps :: [RoleStep]   }   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )  -- | A protocol. As for roles, its name has no operational meaning, but is -- carried along to allow for human readable printing.-data Protocol = Protocol { +data Protocol = Protocol {     protoName  :: String   , protoRoles :: [Role]   }@@ -299,14 +299,14 @@ -- | Pretty print a protocol ill-formedness. sptProtoIllformedness :: ProtoIllformedness -> Doc sptProtoIllformedness pif = case pif of-  NonUnique role -> +  NonUnique role ->     text $ "role '" ++ roleName role ++ "' contains duplicate steps."   UseBeforeBind role step v ->-    text (roleName role) <> colon <-> +    text (roleName role) <> colon <->     sptRoleStep Nothing step <> colon <->     text "message variable" <-> quotes (sptId v) <-> text "used before bound."   AccessibleLongTermKey role step _ ->-    text (roleName role) <> colon <-> +    text (roleName role) <> colon <->     sptRoleStep Nothing step <> colon <->     text "long-term keys must not be accessible." @@ -321,17 +321,17 @@ roleOrd :: Role -> RoleStepOrder roleOrd role = zip steps (tailDef [] steps)   where-  steps = zip (roleSteps role) (repeat role) +  steps = zip (roleSteps role) (repeat role)  -- | The order of role steps in the protocol such that every send step -- occurs before every receive step having the same label. labelOrd :: Protocol -> RoleStepOrder-labelOrd proto = -  [ (send, recv) | send@(Send l  _, _) <- steps, +labelOrd proto =+  [ (send, recv) | send@(Send l  _, _) <- steps,                    recv@(Recv l' _, _) <- steps, l == l' ]   where   steps = concat [ zip (roleSteps role) (repeat role) | role <- protoRoles proto ]- + -- | The combination of all role orders and the label order of the protocol. protoOrd :: Protocol -> RoleStepOrder protoOrd proto = labelOrd proto ++ concatMap roleOrd (protoRoles proto)@@ -373,7 +373,7 @@ -- | Pretty print a rolestep in ISAR format. If a role is given, then the label -- of the role step in this role is used to abbreviate the step name. isaRoleStep :: IsarConf -> Maybe Role -> RoleStep -> Doc-isaRoleStep conf optRole step = +isaRoleStep conf optRole step =   case optRole of     Just role | step `elem` roleSteps role -> -- abbreviate       text $ roleName role ++ "_" ++ stepLabel step@@ -419,7 +419,7 @@       -- determine output parameters       (n,left,right)         | isPlainStyle conf = (3, text "<|", text "|>")-        | otherwise         = (2, symbol "\\<langle>", symbol "\\<rangle>") +        | otherwise         = (2, symbol "\\<langle>", symbol "\\<rangle>")       -- extract a variable of a bi-directional key       keyVar (PAVar v) = parens $ text "AVar" <-> isar conf v       keyVar (PMVar v) = parens $ text "MVar" <-> isar conf v@@ -439,7 +439,7 @@       ppPat pt            = nestShort' "(" ")" (isar conf pt)  instance Isar Role where-  isar conf (Role name steps) = +  isar conf (Role name steps) =     text "role" <-> text name $-$     text "where" <-> text "\"" <> text name <-> text "=" $-$     nest 2 (@@ -455,7 +455,7 @@     text "protocol" <-> text name $-$     sep [text "where" <-> text "\"" <> text name <-> text "=", roleSet]     where-    roleSet = nestShort' "{" "}\"" +    roleSet = nestShort' "{" "}\""       (fsep $ punctuate comma $ map (text . roleName) roles)  @@ -486,7 +486,7 @@     (PAny)        -> char '_'   where     -- pretty print a tuple as right associate list-    ppBetween n lead finish pt@(PTup _ _) = +    ppBetween n lead finish pt@(PTup _ _) =       fcat . (text lead :) . (++[text finish]) . map (nest n) . punctuate (text ", ") . map sptPattern $ split pt     ppBetween _ lead finish pt = text lead <> sptPattern pt <> text finish     -- split right associate nested tuples@@ -496,7 +496,7 @@ -- | Pretty print a rolestep. If a role is given, then the label of the role -- step in this role is used to abbreviate the step name. sptRoleStep :: Maybe Role -> RoleStep -> Doc-sptRoleStep optRole step = +sptRoleStep optRole step =   case optRole of     Just role | step `elem` roleSteps role -> -- abbreviate       text $ roleName role ++ "_" ++ stepLabel step@@ -517,7 +517,7 @@  -- | Pretty print a role in SP theory format. sptRole :: Role -> Doc-sptRole(Role name steps) = +sptRole(Role name steps) =   text "role" <-> text name $-$   nestBetween 2 lbrace rbrace (     (vcat $ map (sptRoleStep Nothing) steps)
src/Scyther/Theory.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-} module Scyther.Theory (    -- * Theorems
src/Scyther/Theory/Dot.hs view
@@ -36,7 +36,7 @@  -- | Find a value and display the key in case it cannot be found. findShowError :: (Ord k, Show k) => k -> M.Map k v -> v-findShowError k = +findShowError k =   findWithError ("findShowError: key '"++show k++"' not in map.") k  -- | The style of an edge between two nodes of the same thread.@@ -111,13 +111,13 @@   threadsOfRole optRole = [ tid | (tid, optRole') <- roleeqs, optRole == optRole' ]    tidGroupEqs :: [[(TID, (Int, Int))]]-  tidGroupEqs = -    [(intruderTID, (0,0))] : -    [  [ (tid, (roleIdx, tidIdx)) +  tidGroupEqs =+    [(intruderTID, (0,0))] :+    [  [ (tid, (roleIdx, tidIdx))        | (tidIdx, tid) <- zip [0..] $ threadsOfRole optRole ]     | (roleIdx, optRole) <- optRoles ] -  getColor idx = +  getColor idx =       maybe (error $ "color of " ++ show idx ++ " not found") snd $       find ((idx ==) . fst) $ colors @@ -165,7 +165,7 @@  -- | Lift a unary operation to our custom dot monad. liftDot1 :: (Dot (a, DotState) -> Dot (b, DotState)) -> (MyDot a -> MyDot b)-liftDot1 f m = ReaderT $ \env -> StateT $ \s -> +liftDot1 f m = ReaderT $ \env -> StateT $ \s ->   f (runStateT (runReaderT m env) s)  -- | A lifted version of the @cluster@ method for constructing a graph cluster.@@ -191,7 +191,7 @@       color <- case ev of         Learn _    -> asks $ getColorWithDefault intruderTID . colorMap         Step tid _ -> asks $ getColorWithDefault tid         . colorMap-      nid <- liftDot $ node +      nid <- liftDot $ node         [ ("label", label)         , ("shape", shape)         , ("style", "filled")@@ -220,7 +220,7 @@   s <- get   put $ s { threadAtoms = M.fromList $ mapMaybe prepare info }   where-  prepare (optTid, optRole) = do +  prepare (optTid, optRole) = do     role <- optRole     tid  <- optTid     return (optTid, [AEq (E.TIDRoleEq (tid, role))])@@ -239,7 +239,7 @@ dotThreads quantified = do   threadInfo <- gets $ M.toList . threadAtoms   mapM_ (uncurry (dotThread quantified)) threadInfo-  + -- | Produce the dot code to for a single thread described by the list of -- atoms. dotThread :: Bool                             -- ^ True iff the thread is quantified@@ -312,8 +312,8 @@ -- | Produce the dot code of the facts. dotFacts :: Facts -> MyDot () dotFacts facts = do-  resetThreadAtoms $ -    map (\tid -> (Just tid, threadRole tid facts)) (quantifiedTIDs facts) +  resetThreadAtoms $+    map (\tid -> (Just tid, threadRole tid facts)) (quantifiedTIDs facts)   mapM_ dotAtom $ toAtoms facts   dotThreads True @@ -326,7 +326,7 @@   x <- local (tryNoteRole tid optRole) $ m   -- restore thread atoms   let optTid       = Just tid-      restoreAtoms = maybe (M.delete optTid) (M.insert optTid) +      restoreAtoms = maybe (M.delete optTid) (M.insert optTid)                            (M.lookup optTid (threadAtoms s))   modify $ \s' -> s' { threadAtoms = restoreAtoms $ threadAtoms s' }   -- return the result@@ -335,7 +335,7 @@ -- | Modify the thread to role assignment. tryNoteRole :: TID -> Maybe Role -> DotEnv -> DotEnv tryNoteRole _   Nothing     env = env-tryNoteRole tid (Just role) env = +tryNoteRole tid (Just role) env =   env { threadMapping = E.addTIDRoleMapping tid role (threadMapping env) }  -- | Produce the dot code of a formula without disjunctions.@@ -346,8 +346,8 @@ dotFormula (FExists (Left tid) inner) = do   localThreadInfo tid (findRole tid inner) $ do     dotFormula inner-    optAtoms <- gets $ M.lookup (Just tid) . threadAtoms -    maybe (return ()) (dotThread True (Just tid)) optAtoms +    optAtoms <- gets $ M.lookup (Just tid) . threadAtoms+    maybe (return ()) (dotThread True (Just tid)) optAtoms dotFormula (FExists (Right aid) inner) = do   _ <- liftDot $ node [("label", "some agent " ++ show aid)]   dotFormula inner@@ -387,7 +387,7 @@     dotFacts $ sePrem se   -- restore state before premise dotting because premise and conclusion should   -- not share nodes-  put s +  put s   _ <- myCluster $ do     liftDot $ attribute ("label","conclusion")     dotConclusion $ seConcl se@@ -395,7 +395,7 @@  -- | Dot a sequent with some marked events. dotSequentMarked :: S.Set Event -> Sequent -> Dot ()-dotSequentMarked markedEvs se = +dotSequentMarked markedEvs se =   runMyDot (threadColors se) (eqsToMapping $ sePrem se) markedEvs $ dotSequent se  -- | Convert a protocol to a dot graph.@@ -414,7 +414,7 @@    rMap = M.fromList $ zip (map roleName roles) [2..]   cMap = colorGroups intruderHue (replicate (length roles + 2) 1)-  getColor gIdx eIdx = +  getColor gIdx eIdx =      maybe (error "color not found") snd $ find (((gIdx, eIdx) == ) . fst) cMap   getRoleColor role = hsvToHex $ getColor (findShowError role rMap) 0 @@ -425,7 +425,7 @@       , ("fillcolor",color)       ] ++ attrs -  dotStep (role, step) = +  dotStep (role, step) =     mkNode (render $ sptRoleStep Nothing step) (getRoleColor role) []    dotSend stepMap send@(_, Send l _) = sequence_@@ -439,8 +439,8 @@         ids = roleId : map getStepId (roleSteps role)         mkEdge (from, to) = edge from to threadEdgeStyle     mapM_ mkEdge (zip ids (tail ids))-     + ------------------------------------------------------------------------------ -- Calling Graphviz' dot tool ------------------------------------------------------------------------------@@ -454,6 +454,6 @@ graphvizDotToPng dotTool dotFile pngFile msgChan = do   let cmd = dotTool ++ " -Tpng -o " ++ pngFile ++ " " ++ dotFile   writeChan msgChan cmd-  hProc <- runCommand cmd +  hProc <- runCommand cmd   _ <- waitForProcess hProc   return ()
src/Scyther/Theory/Html.hs view
@@ -65,7 +65,7 @@   , giTemplate    :: FilePath  -- ^ Path to template index.   , giOutDir      :: FilePath  -- ^ Path to the output directory.   , giMarkup      :: HtmlMarkup Doc -- ^ Document representing theory to output.-  , giProofScript :: FilePath -> String    +  , giProofScript :: FilePath -> String                                -- ^ A function mapping the output file name to a                                --   string representation of Isabelle/HOL                                --   certificate. The generation time will be@@ -95,7 +95,7 @@   where     info = PathInfo       { inputFileCopy   = filesDir info </> takeFileName (giInputFile input)-      , proofScriptFile = filesDir info </> +      , proofScriptFile = filesDir info </>           addExtension (takeBaseName (giInputFile input) ++ "_cert_auto") "thy"       , outDir          = giOutDir input       , imageDir        = "img"@@ -116,7 +116,7 @@ -- theories for exporting as JSON. jsGenerationInfo :: GenerationInput                  -> NominalDiffTime  -- ^ Proof script generation time.-                 -> Maybe (Bool, NominalDiffTime) +                 -> Maybe (Bool, NominalDiffTime)                                      -- ^ Proof checking time.                  -> JSObject JSValue jsGenerationInfo input genTime optCheckInfo = toJSObject $@@ -133,7 +133,7 @@     fileLink file = (toJSString (takeFileName file), toJSString file)     genTimeString = "generated in " ++ show genTime -    checkInfo Nothing                              = +    checkInfo Nothing                              =         [ ("certificateStatus", showJSON . toJSString $ genTimeString) ]     checkInfo (Just (success, checkTime)) =         [ ( "certificateStatus", showJSON . toJSString $ genTimeString ++ status) ]@@ -151,7 +151,7 @@   copyFile (giInputFile input) (mkAbsolute paths $ inputFileCopy paths)   -- timed proof script generation   putStr " generating proof script: " >> hFlush stdout-  genTime <- timed_ $ writeAbsolute (proofScriptFile paths) +  genTime <- timed_ $ writeAbsolute (proofScriptFile paths)                         (giProofScript input $ proofScriptFile paths)   putStrLn $ show genTime   -- timed isabelle check@@ -159,7 +159,7 @@     Nothing           -> return Nothing     Just machineCheck -> do       putStr " checking proof script: " >> hFlush stdout-      (optErrMsg, checkTime) <- timed $ +      (optErrMsg, checkTime) <- timed $         machineCheck (mkAbsolute paths $ proofScriptFile paths)       putStrLn $ show checkTime       -- write log file copy@@ -231,12 +231,12 @@ type Attributes = [(String,String)]  -- | Output a document surrounded by a tag.-withTag :: Document d => +withTag :: Document d =>            String      -- ^ Tag name         -> Attributes  -- ^ Name, value pairs for attributes (no escaping done!)         -> d           -- ^ Inner document         -> d-withTag tag atts d = +withTag tag atts d =   zeroWidthText ("<" ++ tag ++ attsStr ++ ">") <> d <> zeroWidthText ("</" ++ tag ++ ">")   where   attsStr | null atts = ""@@ -265,14 +265,14 @@   , htmlThmDefs     :: M.Map (String, String) HtmlSequent   , htmlThmRefs     :: M.Map Int HtmlSequent   , htmlGraphRefs   :: M.Map Int HtmlSequent-  , htmlExpls       :: M.Map String Int +  , htmlExpls       :: M.Map String Int   , htmlNextExplRef :: Int   }  type GraphDesc = String  newtype HtmlMarkup a = HtmlMarkup {-    unHtmlMarkup :: StateT HtmlMarkupState +    unHtmlMarkup :: StateT HtmlMarkupState                       (ConsistentLabelsT GraphDesc GraphIdx Identity) a   }   deriving( Functor, Applicative, Monad )@@ -342,7 +342,7 @@ emptyHtmlMarkupState = HtmlMarkupState M.empty M.empty M.empty M.empty M.empty 0  runHtmlMarkup :: HtmlMarkup a -> (a, (HtmlMarkupState, M.Map GraphDesc GraphIdx))-runHtmlMarkup m = +runHtmlMarkup m =   case runIdentity . flip runConsistentLabelsT [1..] .        flip runStateT emptyHtmlMarkupState . unHtmlMarkup $ m of     ((res, st), (_, sequentIdxs)) -> (res, (st, sequentIdxs))@@ -382,5 +382,5 @@    keyword tag d = withSpan [("class","kw-"++tag)] d -  + 
src/Scyther/Typing.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TypeSynonymInstances, DeriveDataTypeable, FlexibleInstances #-}+{-# LANGUAGE TypeSynonymInstances, DeriveDataTypeable, FlexibleInstances, FlexibleContexts #-} -- | Building typing invariants for security protocol in order to enable -- verification in an untyped model. module Scyther.Typing (@@ -38,7 +38,7 @@   data Type =-    AgentT +    AgentT   | ConstT Id   | NonceT Role Id   | HashT Type@@ -51,7 +51,7 @@   | SumT Type Type   deriving( Eq, Ord, Show, Data, Typeable ) --- | Partial normalization: rewrites with +-- | Partial normalization: rewrites with -- -- > SumT ty (KnownT _) = SumT (KnownT _) ty --@@ -82,11 +82,11 @@  -- | The TIDs of a type annotation. typeAnnTIDs :: TypeAnn -> [TID]-typeAnnTIDs (m, _, tid) = tid : msgTIDs m +typeAnnTIDs (m, _, tid) = tid : msgTIDs m  -- | The AMIDs of a type annotation. typeAnnAMIDs :: TypeAnn -> [ArbMsgId]-typeAnnAMIDs (m, _, _) = msgAMIDs m +typeAnnAMIDs (m, _, _) = msgAMIDs m  -- | Substitute a type annotation. substTypeAnn :: E.Equalities -> TypeAnn -> TypeAnn@@ -105,7 +105,7 @@ -- -- FIXME: This is quite a hack and could be done much better: do it! mscTyping :: Protocol -> Maybe Typing-mscTyping proto = +mscTyping proto =     (`execStateT` M.empty) $ foldM typeStep E.empty steps   where     roleeqs = M.fromList $ zip [1..] (protoRoles proto)@@ -247,13 +247,13 @@     SumT ty1 ty2  -> parens (sep [go ty1 <-> text "|", go ty2])  sptTypeAnn :: (TID -> Maybe Role) -> TypeAnn -> Doc-sptTypeAnn tidToRole (m,ty,i) = hsep +sptTypeAnn tidToRole (m,ty,i) = hsep     [sptMessage m, text "::", parens (sptType (tidToRole i) ty) <> sptTID i]  sptTyping :: Typing -> Doc-sptTyping = vcat . map ppTyEq . M.toList +sptTyping = vcat . map ppTyEq . M.toList   where-    ppTyEq ((v,role),ty) = +    ppTyEq ((v,role),ty) =       sep [ text $ getId v ++ "@" ++ roleName role           , nest 2 $ text "::" <-> sptType (Just role) ty ] @@ -261,7 +261,7 @@   isar conf = isaType conf Nothing  instance Isar Typing where-  isar conf = +  isar conf =       ($$ rbrack) . vcat . zipWith (<->) seps . map ppTyEq . M.toList     where       seps = map char $ '[' : repeat ','
src/System/Isabelle.hs view
@@ -33,7 +33,7 @@   let thyName     = takeBaseName thyFile       rootName    = "ROOT"       sessionName = "scyther-proof-" ++ thyName-  +   -- setup temporary directory   tmpDir <- createTempDirectory   copyFile thyFile (tmpDir </> addExtension thyName "thy")@@ -47,7 +47,7 @@       removeDirectoryRecursive tmpDir       return Nothing     else-      return (Just (errMsg out))        +      return (Just (errMsg out))   where   -- | Extract the error message from the isabelle output   errMsg str = case break ("***" `isPrefixOf`) (lines str) of
src/Text/Dot.hs view
@@ -7,67 +7,67 @@ -- Stability: unstable -- Portability: portable ----- This module provides a simple interface for building .dot graph files, for input into the dot and graphviz tools. +-- This module provides a simple interface for building .dot graph files, for input into the dot and graphviz tools. -- It includes a monadic interface for building graphs. -module Text.Dot -	( -	  -- * Dot-	  Dot		-- abstract-	  -- * Nodes-	, node-	, NodeId	-- abstract-	, userNodeId-	, userNode-	  -- * Edges-	, edge-	  -- * Showing a graph-	, showDot-	  -- * Other combinators-	, scope-	, attribute-	, nodeAttributes-	, edgeAttributes-	, graphAttributes-	, share-	, same-	, cluster-	  -- * Record specification-	, Record       -- abstract-	, field-	, portField-	, hcat-	, hcat'-	, vcat-	, vcat'-	  -- * Record node construction-	, record-	, record'-	, record_-	  -	, mrecord-	, mrecord'-	, mrecord_-	) where+module Text.Dot+        (+          -- * Dot+          Dot           -- abstract+          -- * Nodes+        , node+        , NodeId        -- abstract+        , userNodeId+        , userNode+          -- * Edges+        , edge+          -- * Showing a graph+        , showDot+          -- * Other combinators+        , scope+        , attribute+        , nodeAttributes+        , edgeAttributes+        , graphAttributes+        , share+        , same+        , cluster+          -- * Record specification+        , Record       -- abstract+        , field+        , portField+        , hcat+        , hcat'+        , vcat+        , vcat'+          -- * Record node construction+        , record+        , record'+        , record_ +        , mrecord+        , mrecord'+        , mrecord_+        ) where+ import Data.List (intersperse) import Control.Applicative import Control.Monad (ap, liftM)  data NodeId = NodeId String-	    | UserNodeId Int+            | UserNodeId Int  instance Show NodeId where   show (NodeId str) = str-  show (UserNodeId i) -	| i < 0     = "u_" ++ show (negate i)-	| otherwise = "u" ++ show i+  show (UserNodeId i)+        | i < 0     = "u_" ++ show (negate i)+        | otherwise = "u" ++ show i  data GraphElement = GraphAttribute String String-		  | GraphNode NodeId        [(String,String)]-		  | GraphEdge NodeId NodeId [(String,String)]-		  | Scope           [GraphElement]-		  | SubGraph NodeId [GraphElement]+                  | GraphNode NodeId        [(String,String)]+                  | GraphEdge NodeId NodeId [(String,String)]+                  | Scope           [GraphElement]+                  | SubGraph NodeId [GraphElement]  data Dot a = Dot { unDot :: Int -> ([GraphElement],Int,a) } @@ -81,20 +81,20 @@ instance Monad Dot where   return a = Dot $ \ uq -> ([],uq,a)   m >>= k  = Dot $ \ uq -> case unDot m uq of-			   (g1,uq',r) -> case unDot (k r) uq' of-					   (g2,uq2,r2) -> (g1 ++ g2,uq2,r2)+                           (g1,uq',r) -> case unDot (k r) uq' of+                                           (g2,uq2,r2) -> (g1 ++ g2,uq2,r2)  -- | 'node' takes a list of attributes, generates a new node, and gives a 'NodeId'. node      :: [(String,String)] -> Dot NodeId-node attrs = Dot $ \ uq -> let nid = NodeId $ "n" ++ show uq -			  in ( [ GraphNode nid attrs ],succ uq,nid)+node attrs = Dot $ \ uq -> let nid = NodeId $ "n" ++ show uq+                          in ( [ GraphNode nid attrs ],succ uq,nid)   -- | 'userNodeId' allows a user to use their own (Int-based) node id's, without needing to remap them. userNodeId :: Int -> NodeId userNodeId i = UserNodeId i --- | 'userNode' takes a NodeId, and adds some attributes to that node. +-- | 'userNode' takes a NodeId, and adds some attributes to that node. userNode :: NodeId -> [(String,String)] -> Dot () userNode nId attrs = Dot $ \ uq -> ( [GraphNode nId attrs ],uq,()) @@ -105,14 +105,14 @@ -- | 'scope' groups a subgraph together; in dot these are the subgraphs inside "{" and "}". scope     :: Dot a -> Dot a scope (Dot fn) = Dot (\ uq -> case fn uq of-			      ( elems,uq',a) -> ([Scope elems],uq',a))+                              ( elems,uq',a) -> ([Scope elems],uq',a))  -- | 'share' is when a set of nodes share specific attributes. Usually used for layout tweaking. share :: [(String,String)] -> [NodeId] -> Dot ()-share attrs nodeids = Dot $ \ uq -> +share attrs nodeids = Dot $ \ uq ->       ( [ Scope ( [ GraphAttribute name val | (name,val) <- attrs]-	       ++ [ GraphNode nodeid [] | nodeid <- nodeids ]-	       ) +               ++ [ GraphNode nodeid [] | nodeid <- nodeids ]+               )         ], uq, ())  -- | 'same' provides a combinator for a common pattern; a set of 'NodeId's with the same rank.@@ -120,12 +120,12 @@ same = share [("rank","same")]  --- | 'cluster' builds an explicit, internally named subgraph (called cluster). +-- | 'cluster' builds an explicit, internally named subgraph (called cluster). cluster :: Dot a -> Dot (NodeId,a)-cluster (Dot fn) = Dot (\ uq -> -		let cid = NodeId $ "cluster_" ++ show uq -		in case fn (succ uq) of-		    (elems,uq',a) -> ([SubGraph cid elems],uq',(cid,a)))+cluster (Dot fn) = Dot (\ uq ->+                let cid = NodeId $ "cluster_" ++ show uq+                in case fn (succ uq) of+                    (elems,uq',a) -> ([SubGraph cid elems],uq',(cid,a)))  -- | 'attribute' gives a attribute to the current scope. attribute :: (String,String) -> Dot ()@@ -147,7 +147,7 @@ -- 'showDot' renders a dot graph as a 'String'. showDot :: Dot a -> String showDot (Dot dm) = case dm 0 of-		    (elems,_,_) -> "digraph G {\n" ++ unlines (map showGraphElement elems) ++ "\n}\n"+                    (elems,_,_) -> "digraph G {\n" ++ unlines (map showGraphElement elems) ++ "\n}\n"  showGraphElement :: GraphElement -> String showGraphElement (GraphAttribute name val) = showAttr (name,val) ++ ";"@@ -160,16 +160,16 @@ showAttrs [] = "" showAttrs xs = "[" ++ showAttrs' xs ++ "]"     where-	-- never empty list-	showAttrs' [a]    = showAttr a-	showAttrs' (a:as) = showAttr a ++ "," ++ showAttrs' as+        -- never empty list+        showAttrs' [a]    = showAttr a+        showAttrs' (a:as) = showAttr a ++ "," ++ showAttrs' as         showAttrs' []     = error "showAttrs: the impossible happended"  showAttr :: (String, String) -> String showAttr (name,val) = name ++ "=\"" ++ concatMap escape val ++ "\""     where escape '\n' = "\\l"-	  escape '"'  = "\\\""-	  escape c    = [c]+          escape '"'  = "\\\""+          escape c    = [c]   ------------------------------------------------------------------------------@@ -220,10 +220,10 @@ renderRecord = render True   where   render _ (Field Nothing l) = return (escape l, const [])-  render _ (Field (Just p) l) = +  render _ (Field (Just p) l) =     Dot $ \uq -> let pid = "n" ++ show uq                      lbl = "<"++pid++"> "++escape l-		 in  ([], succ uq, (lbl, \nId -> [(p,NodeId (show nId++":"++pid))]))+                 in  ([], succ uq, (lbl, \nId -> [(p,NodeId (show nId++":"++pid))]))   render horiz (HCat rs) = do     (lbls, ids) <- liftM unzip $ mapM (render True) rs     let rawLbl = concat (intersperse "|" lbls)
src/Text/PrettyPrint/Class.hs view
@@ -11,7 +11,7 @@      ,  P.Mode(..)       , ($--$)-     , semi +     , semi      , colon      , comma      , space@@ -22,7 +22,7 @@      , rbrack      , lbrace      , rbrace-  +      , int      , integer      , float@@ -33,7 +33,7 @@      , parens      , brackets      , braces-  +      , hang      , punctuate ) where@@ -41,7 +41,7 @@ import Prelude import qualified Text.PrettyPrint.HughesPJ as P -infixl 6 <> +infixl 6 <> infixl 6 <-> infixl 5 $$, $-$, $--$ @@ -85,10 +85,10 @@  -- | Vertical concatentation of two documents with an empty line in between. ($--$) :: Document d => d -> d -> d-d1 $--$ d2 = +d1 $--$ d2 =    caseEmptyDoc d2 (caseEmptyDoc d1 (d1 $-$ text "" $-$ d2) d2) d1 -semi, colon, comma, space, equals, +semi, colon, comma, space, equals,   lparen, rparen, lbrack, rbrack, lbrace, rbrace :: Document d => d  semi  = char ';'