MicroHs 0.10.7.0 → 0.11.4.0
raw patch · 138 files changed
+12885/−8633 lines, 138 filesdep ~basedep ~deepseqdep ~directory
Dependency ranges changed: base, deepseq, directory, filepath, ghc-prim, haskeline, process, text, time
Files
- LICENSE +1/−1
- Makefile +52/−25
- MicroHs.cabal +21/−21
- README.md +57/−16
- generated/cpphs.c +1717/−1650
- generated/mhs.c +5289/−4997
- ghc/Compat.hs +0/−64
- ghc/MHSPrelude.hs +62/−1
- ghc/PrimTable.hs +7/−4
- hugs/Data/Integer.hs +26/−0
- hugs/MHSPrelude.hs +172/−0
- hugs/MicroHs/Instances.hs +5/−0
- hugs/PrimTable.hs +284/−0
- hugs/System/Compress.hs +4/−0
- hugs/System/Console/SimpleReadline.hs +14/−0
- hugs/System/IO/MD5.hs +14/−0
- hugs/System/IO/Serialize.hs +33/−0
- hugs/System/IO/TimeMilli.hs +6/−0
- lib/AllOfLib.hs +6/−0
- lib/Control/DeepSeq.hs +38/−8
- lib/Control/Exception.hs +6/−1
- lib/Control/Exception/Internal.hs +5/−3
- lib/Control/Monad.hs +9/−3
- lib/Data/Array.hs +2/−2
- lib/Data/Bits.hs +30/−3
- lib/Data/ByteString.hs +4/−4
- lib/Data/ByteString/Char8.hs +325/−0
- lib/Data/ByteString/Internal.hs +15/−13
- lib/Data/ByteString/Lazy/Char8.hs +325/−0
- lib/Data/Char.hs +6/−0
- lib/Data/Coerce.hs +9/−0
- lib/Data/Complex.hs +5/−5
- lib/Data/Constraint.hs +1/−1
- lib/Data/Either.hs +4/−4
- lib/Data/Enum.hs +23/−10
- lib/Data/Fixed.hs +1/−1
- lib/Data/FloatW.hs +1/−0
- lib/Data/Foldable.hs +2/−2
- lib/Data/IORef.hs +1/−1
- lib/Data/Int/Instances.hs +86/−62
- lib/Data/Integer.hs +39/−400
- lib/Data/Integer/Internal.hs +512/−0
- lib/Data/Integer_Type.hs +50/−29
- lib/Data/List.hs +141/−143
- lib/Data/List/NonEmpty.hs +2/−2
- lib/Data/List_Type.hs +5/−7
- lib/Data/Maybe.hs +5/−5
- lib/Data/Monoid.hs +4/−4
- lib/Data/Ord.hs +3/−0
- lib/Data/Proxy.hs +2/−2
- lib/Data/Ratio.hs +17/−6
- lib/Data/Text.hs +17/−4
- lib/Data/Text/IO.hs +10/−0
- lib/Data/Text/Lazy.hs +67/−0
- lib/Data/Text/Lazy/IO.hs +10/−0
- lib/Data/Traversable.hs +2/−2
- lib/Data/Tuple.hs +50/−40
- lib/Data/Typeable.hs +1/−1
- lib/Data/Word.hs +102/−73
- lib/Debug/Trace.hs +1/−1
- lib/Foreign/C/String.hs +29/−4
- lib/Foreign/ForeignPtr.hs +1/−1
- lib/Foreign/Ptr.hs +6/−6
- lib/Foreign/Storable.hs +1/−1
- lib/Primitives.hs +119/−106
- lib/System/Exit.hs +1/−1
- lib/System/IO.hs +6/−4
- lib/System/IO/Internal.hs +1/−1
- lib/System/IO/Serialize.hs +2/−2
- lib/Text/ParserCombinators/ReadP.hs +1/−1
- lib/dist-mcabal/autogen/Paths_libs.hs +2/−2
- lib/gmp/Data/Integer/Internal.hs +306/−0
- lib/gmp/Data/Integer_Type.hs +58/−0
- mhs/Compat.hs +0/−22
- mhs/MHSPrelude.hs +26/−0
- mhs/System/FilePath.hs +1/−1
- paths/Paths_MicroHs.hs +1/−1
- src/MicroHs/Abstract.hs +15/−0
- src/MicroHs/Builtin.hs +8/−0
- src/MicroHs/Compile.hs +22/−18
- src/MicroHs/CompileCache.hs +17/−3
- src/MicroHs/Deriving.hs +22/−15
- src/MicroHs/Desugar.hs +45/−29
- src/MicroHs/EncodeData.hs +8/−8
- src/MicroHs/Exp.hs +7/−0
- src/MicroHs/Expr.hs +182/−51
- src/MicroHs/FFI.hs +8/−3
- src/MicroHs/Flags.hs +7/−2
- src/MicroHs/Ident.hs +11/−2
- src/MicroHs/IdentMap.hs +14/−2
- src/MicroHs/Instances.hs +0/−1
- src/MicroHs/Interactive.hs +1/−0
- src/MicroHs/Lex.hs +67/−65
- src/MicroHs/List.hs +45/−15
- src/MicroHs/MRnf.hs +34/−0
- src/MicroHs/Main.hs +68/−47
- src/MicroHs/Package.hs +10/−0
- src/MicroHs/Parse.hs +87/−61
- src/MicroHs/State.hs +12/−74
- src/MicroHs/StateIO.hs +12/−13
- src/MicroHs/SymTab.hs +9/−3
- src/MicroHs/TCMonad.hs +40/−6
- src/MicroHs/TargetConfig.hs +4/−3
- src/MicroHs/Translate.hs +121/−115
- src/MicroHs/TypeCheck.hs +685/−242
- src/Text/ParserComb.hs +19/−12
- src/runtime/config-mingw-64.h +16/−0
- src/runtime/config-stm32f4.h +2/−0
- src/runtime/config-windows-64.h +26/−0
- src/runtime/eval.c +275/−47
- src/runtime/mhsffi.h +2/−0
- tests/BitCount.hs +149/−0
- tests/BitCount.ref +134/−0
- tests/Coerce.hs +28/−0
- tests/Coerce.ref +7/−0
- tests/EmptyCase.hs +12/−0
- tests/ForeignPtr.hs +1/−1
- tests/FunDep.hs +24/−0
- tests/FunDep.ref +1/−0
- tests/Interactive.hs +0/−6
- tests/ListTest.hs +7/−5
- tests/ListTest.ref +1/−0
- tests/LocalFix.hs +15/−0
- tests/LocalFix.ref +2/−0
- tests/Makefile +8/−0
- tests/NumUnder.hs +36/−0
- tests/NumUnder.ref +27/−0
- tests/PartRed.hs +93/−0
- tests/PartRed.ref +16/−0
- tests/PatBind.hs +17/−0
- tests/PatBind.ref +5/−0
- tests/PatSyn.hs +73/−9
- tests/PatSyn.ref +18/−0
- tests/PatSynE.hs +17/−0
- tests/Text.hs +6/−1
- tests/Text.ref +5/−0
- tests/TypeApp.hs +11/−0
- tests/TypeApp.ref +2/−0
LICENSE view
@@ -1,4 +1,4 @@-Copyright 2023,2024 Lennart Augustsson+Copyright 2023,2024,2025 Lennart Augustsson Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
Makefile view
@@ -1,3 +1,9 @@+# Define these 3 lines to use GMP for Integer.+# For MacOS with homebrew:+MHSGMPCCFLAGS=-DWANT_GMP=1 -L/opt/homebrew/lib -lgmp -I/opt/homebrew/include+MHSGMP=-ilib/gmp+MCABALGMP=-fgmp+# # installation prefix PREFIX=/usr/local # Unix-like system, 64 bit words@@ -6,24 +12,31 @@ CCWARNS= -Wall CCOPTS= -O3 CCLIBS= -lm-CCEVAL= $(CC) $(CCWARNS) $(CCOPTS) -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS)+CCEVAL= $(CC) $(CCWARNS) $(CCOPTS) $(MHSGMPCCFLAGS) -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS) # GHC= ghc GHCINCS= -ighc -isrc -ipaths GHCWARNS= -Wall -Wno-unrecognised-warning-flags -Wno-x-partial -Wno-deprecations GHCOPTS= -O-GHCEXTS= -DNOTCABAL -XScopedTypeVariables -XTypeSynonymInstances -XMultiParamTypeClasses -XFlexibleInstances -XBangPatterns+GHCEXTS= -DNOTCABAL -XScopedTypeVariables -XTypeSynonymInstances -XMultiParamTypeClasses -XFlexibleInstances GHCPKGS= -package mtl -package pretty -package haskeline -package process -package time -package ghc-prim -package containers -package deepseq -package directory -package text GHCTOOL= # -F -pgmF Tools/convertX.sh GHCOUTDIR= ghc-out GHCOUT= -outputdir $(GHCOUTDIR) GHCPROF= # -prof -fprof-late #-prof -fprof-auto-GHCFLAGS= $(GHCEXTS) $(GHCINCS) $(GHCWARNS) $(GHCOPTS) $(GHCTOOL) $(GHCPKGS) $(GHCOUT) $(GHCPROF)+GHCFLAGS= $(GHCEXTS) $(GHCINCS) $(GHCWARNS) $(GHCOPTS) $(GHCTOOL) $(GHCPKGS) $(GHCOUT) $(GHCPROF) -main-is MicroHs.Main #+# Hugs+HUGS= runhugs+FFIHUGS= ffihugs+HUGSINCS= '+Phugs:mhs:src:paths:{Hugs}/packages/*:hugs/obj' -98 +o +w++# EMCC=emcc -sALLOW_MEMORY_GROWTH -sTOTAL_STACK=5MB -sNODERAWFS -sSINGLE_FILE -DUSE_SYSTEM_RAW #-MHSINCNP= -i -imhs -isrc -ilib+MHSINCNP= -i $(MHSGMP) -imhs -isrc -ilib MHSINC=$(MHSINCNP) -ipaths +MAINMODULE=MicroHs.Main # .PHONY: clean bootstrap install ghcgen newmhs newmhsz cachelib timecompile exampletest cachetest runtest runtestmhs everytest everytestmhs nfibtest info @@ -32,6 +45,7 @@ targets.conf: echo [default] > targets.conf echo cc = \"$(CC)\" >> targets.conf+ echo ccflags = \"$(MHSGMPCCFLAGS)\" >> targets.conf echo conf = \"$(CONF)\" >> targets.conf echo '' >> targets.conf echo [emscripten] >> targets.conf@@ -40,7 +54,7 @@ newmhs: ghcgen targets.conf $(CCEVAL) generated/mhs.c -o bin/mhs- $(CC) $(CCWARNS) -g -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS) generated/mhs.c -o bin/mhsgdb+ $(CC) $(CCWARNS) $(MHSGMPCCFLAGS) -g -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS) generated/mhs.c -o bin/mhsgdb newmhsz: newmhs rm generated/mhs.c@@ -72,25 +86,25 @@ bin/mhsevalgdb: src/runtime/*.c src/runtime/config*.h @mkdir -p bin- $(CC) $(CCWARNS) -g src/runtime/eval-$(CONF).c $(CCLIBS) src/runtime/comb.c -o bin/mhsevalgdb+ $(CC) $(CCWARNS) $(MHSGMPCCFLAGS) -g src/runtime/eval-$(CONF).c $(CCLIBS) src/runtime/comb.c -o bin/mhsevalgdb # Compile mhs with ghc bin/gmhs: src/*/*.hs ghc/*.hs ghc/*/*.hs ghc/*/*/*.hs @mkdir -p bin- $(GHC) $(GHCFLAGS) src/MicroHs/Main.hs -main-is MicroHs.Main -o bin/gmhs+ $(GHC) $(GHCFLAGS) $(MAINMODULE) -o bin/gmhs # Compile mhs with ghc, with code coverage bin/cmhs: src/*/*.hs ghc/*.hs ghc/*/*.hs @mkdir -p bin- $(GHC) $(GHCFLAGS) -fhpc src/MicroHs/Main.hs -main-is MicroHs.Main -o bin/cmhs+ $(GHC) $(GHCFLAGS) -fhpc $(MAINMODULE) -o bin/cmhs # Generate distribution C file generated/mhs.c: bin/mhs src/*/*.hs @mkdir -p generated- bin/mhs -z $(MHSINC) MicroHs.Main -ogenerated/mhs.c+ bin/mhs -z $(MHSINC) $(MAINMODULE) -ogenerated/mhs.c ghcgen: bin/gmhs src/*/*.hs lib/*.hs lib/*/*.hs lib/*/*/*.hs- bin/gmhs $(MHSINC) MicroHs.Main -ogenerated/mhs.c+ bin/gmhs $(MHSINC) $(MAINMODULE) -ogenerated/mhs.c # generated/mcabal.c:@@ -98,7 +112,7 @@ # Flags to read local file system, generate a single .js file, and to avoid ioctl() mhs.js: src/*/*.hs src/runtime/*.[ch] targets.conf- bin/mhs $(MHSINC) -temscripten MicroHs.Main -o mhs.js+ bin/mhs $(MHSINC) -temscripten $(MAINMODULE) -o mhs.js # Make sure boottrapping works bootstrap: bin/mhs-stage2@@ -110,14 +124,14 @@ bin/mhs-stage1: bin/mhs src/*/*.hs @mkdir -p generated @echo "*** Build stage1 compiler, using bin/mhs"- bin/mhs -z $(MHSINC) MicroHs.Main -ogenerated/mhs-stage1.c+ bin/mhs -z $(MHSINC) $(MAINMODULE) -ogenerated/mhs-stage1.c $(CCEVAL) generated/mhs-stage1.c -o bin/mhs-stage1 # Build stage2 compiler with stage1 compiler, and compare bin/mhs-stage2: bin/mhs-stage1 src/*/*.hs @mkdir -p generated @echo "*** Build stage2 compiler, with stage1 compiler"- bin/mhs-stage1 -z $(MHSINC) MicroHs.Main -ogenerated/mhs-stage2.c+ bin/mhs-stage1 -z $(MHSINC) $(MAINMODULE) -ogenerated/mhs-stage2.c cmp generated/mhs-stage1.c generated/mhs-stage2.c @echo "*** stage2 equal to stage1" $(CCEVAL) generated/mhs-stage2.c -o bin/mhs-stage2@@ -129,7 +143,7 @@ # Use this cpphs for bootstrapping USECPPHS=bin/cpphs -bootstrapcpphs: bin/mhs cpphssrc/malcolm-wallace-universe $(USECPPHS)+bootstrapcpphs: bin/mhs cpphssrc/malcolm-wallace-universe MHSCPPHS=$(USECPPHS) bin/mhs -z -XCPP '-DMIN_VERSION_base(x,y,z)=((x)<4||(x)==4&&(y)<19||(x)==4&&(y)==19&&(z)<=1)' -icpphscompat -icpphssrc/malcolm-wallace-universe/polyparse-1.12/src -icpphssrc/malcolm-wallace-universe/cpphs-1.20.9 cpphssrc/malcolm-wallace-universe/cpphs-1.20.9/cpphs.hs -ogenerated/cpphs.c # Run test examples with ghc-compiled compiler@@ -137,11 +151,11 @@ cd tests; make alltest # Run test examples with mhs-compiled compiler-runtestmhs: bin/mhs+runtestmhs: bin/mhseval bin/mhs cd tests; make MHS=../bin/mhs cache; make MHS="../bin/mhs +RTS -H4M -RTS -CR" info test errtest # Run test examples going via JavaScript-runtestemscripten: bin/mhs+runtestemscripten: bin/mhseval bin/mhs cd tests; make MHS=../bin/mhs cache; MHSDIR=.. make MHS="../bin/mhs -CR -temscripten -oout.js" EVAL="node out.js" info test errtest @@ -152,13 +166,13 @@ # timecompile: bin/mhs- time bin/mhs +RTS -v -RTS $(MHSINC) MicroHs.Main+ time bin/mhs +RTS -v -RTS -s $(MHSINC) $(MAINMODULE) # timecachecompile: bin/mhs @-rm -f .mhscache time bin/mhs +RTS -v -RTS -CW AllOfLib- time bin/mhs +RTS -v -RTS -CR $(MHSINC) MicroHs.Main+ time bin/mhs +RTS -v -RTS -CR -s $(MHSINC) $(MAINMODULE) # cachelib:@@ -189,8 +203,8 @@ everytestmhs: bin/mhs bin/mhseval exampletest cachetest bootstrap runtestmhs nfibtest info bootcombtest: bin/gmhs bin/mhseval- bin/gmhs $(MHSINC) -ogmhs.comb MicroHs.Main- bin/mhseval +RTS -v -rgmhs.comb -RTS $(MHSINC) -omhs.comb MicroHs.Main+ bin/gmhs $(MHSINC) -ogmhs.comb $(MAINMODULE)+ bin/mhseval +RTS -v -rgmhs.comb -RTS $(MHSINC) -omhs.comb $(MAINMODULE) cmp gmhs.comb mhs.comb exampletest: bin/mhs bin/mhseval Example.hs@@ -205,7 +219,7 @@ rm -f .mhscache bin/mhs -CW AllOfLib bin/mhs -CR Example && bin/mhseval- bin/mhs +RTS -v -RTS $(MHSINC) -CR MicroHs.Main+ bin/mhs +RTS -v -RTS $(MHSINC) -CR $(MAINMODULE) rm -f .mhscache nfibtest: bin/mhs bin/mhseval@@ -213,8 +227,8 @@ ###### -VERSION=0.10.7.0-HVERSION=0,10,7,0+VERSION=0.11.4.0+HVERSION=0,11,4,0 MCABAL=$(HOME)/.mcabal MCABALMHS=$(MCABAL)/mhs-$(VERSION) MDATA=$(MCABALMHS)/packages/mhs-$(VERSION)/data@@ -228,7 +242,7 @@ @mkdir -p $(MCABALBIN) @mkdir -p $(MDIST) @echo 'module Paths_MicroHs where { import Prelude(); import MHSPrelude; import Data.Version; version :: Version; version = makeVersion [$(HVERSION)]; getDataDir :: IO FilePath; getDataDir = return "$(MDATA)" }' > $(MDIST)/Paths_MicroHs.hs- bin/mhs -z $(MHSINCNP) -i$(MDIST) MicroHs.Main -o$(MCABALBIN)/mhs+ bin/mhs -z $(MHSINCNP) -i$(MDIST) $(MAINMODULE) -o$(MCABALBIN)/mhs @mkdir -p $(MRUNTIME) cp targets.conf $(MDATA) cp src/runtime/*.[ch] $(MRUNTIME)@@ -257,6 +271,19 @@ minstall: bin/cpphs bin/mcabal $(MCABALBIN)/mhs cp bin/cpphs bin/mcabal $(MCABALBIN)- cd lib; PATH=$(MCABALBIN):"$$PATH" mcabal install+ cd lib; PATH=$(MCABALBIN):"$$PATH" mcabal $(MCABALGMP) install PATH=$(MCABALBIN):"$$PATH" mcabal install @echo $$PATH | tr ':' '\012' | grep -q $(MCABALBIN) || echo '***' Add $(MCABALBIN) to the PATH++#####+# Hugs+HUGS= runhugs+HUGSINCS= '+Phugs:src:paths:{Hugs}/packages/*:hugs/obj' -98 +o +w -h100m++generated/hmhs.c:+ @mkdir -p generated+ $(HUGS) $(HUGSINCS) hugs/Main.hs $(MHSINC) $(MAINMODULE) -ogenerated/hmhs.c++bin/hmhs: generated/hmhs.c+ @mkdir -p bin+ $(CCEVAL) generated/hmhs.c -o bin/hmhs
MicroHs.cabal view
@@ -1,13 +1,13 @@ cabal-version: 3.0 name: MicroHs-version: 0.10.7.0+version: 0.11.4.0 -- *** When changing the version number, also -- *** run 'sh updateversion.sh' -- *** Yeah, it stinks. synopsis: A small compiler for Haskell license: Apache-2.0 license-file: LICENSE-copyright: 2023,2024 Lennart Augustsson+copyright: 2023,2024,2025 Lennart Augustsson category: language author: lennart@augustsson.net maintainer: lennart@augustsson.net@@ -42,26 +42,23 @@ src/runtime/*.c src/runtime/*.h -- I would like to have these two only for ghc, but I can't figure out how.+-- But mcabal has a hack that recognizes lines that start with --MCABAL as valid lines.+--MCABALif impl(ghc)+--MCABAL data-files: lib/**/*.hs lib/**/*.hs-boot --- These files must not be installed for mhs!--- Cabal doesn't seem to understand this, so it never copies--- these files.---if impl(ghc)---xMHS if !impl(mhs)- source-repository head type: git location: https://github.com/augustss/MicroHs executable mhs default-language: Haskell2010- ghc-options: -Wall -Wno-unrecognised-warning-flags -Wno-x-partial -main-is MicroHs.Main+ ghc-options: -Wall -Wno-unrecognised-warning-flags -Wno-x-partial -fwrite-ide-info -Wno-deprecations+ -main-is MicroHs.Main main-is: MicroHs/Main.hs- default-extensions: ScopedTypeVariables TypeSynonymInstances MultiParamTypeClasses- FlexibleInstances BangPatterns+ default-extensions: ScopedTypeVariables TypeSynonymInstances MultiParamTypeClasses FlexibleInstances other-modules: MicroHs.Abstract MicroHs.Builtin MicroHs.Compile@@ -85,6 +82,7 @@ MicroHs.Lex MicroHs.List MicroHs.MakeCArray+ MicroHs.MRnf MicroHs.Package MicroHs.Parse MicroHs.State@@ -99,7 +97,6 @@ System.Console.SimpleReadline Data.Double Data.Integer- Compat PrimTable MHSPrelude System.IO.MD5@@ -110,15 +107,18 @@ autogen-modules: Paths_MicroHs if impl(ghc) hs-source-dirs: ghc src- build-depends: base >= 4.10 && < 4.22,- deepseq >= 1.1 && < 1.6,- filepath >= 1.1 && < 1.6,- ghc-prim >= 0.5 && < 0.12,- haskeline >= 0.8 && < 0.9,- time >= 1.1 && < 1.15,- process >= 1.6 && < 1.8,- directory >= 1.2 && < 1.5,- text >= 2.0 && < 2.3,+ build-depends: base >= 4.10 && < 4.30,+ deepseq >= 1.1 && < 1.8,+ filepath >= 1.1 && < 1.8,+ ghc-prim >= 0.5 && < 0.15,+ haskeline >= 0.8 && < 0.10,+ time >= 1.1 && < 1.20,+ process >= 1.6 && < 1.10,+ directory >= 1.2 && < 1.6,+ text >= 2.0 && < 2.5,++ if impl(hugs)+ hs-source-dirs: hugs src if impl(mhs) hs-source-dirs: mhs src
README.md view
@@ -27,7 +27,7 @@ Also note that there is no need to have a Haskell compiler to run MicroHs. All you need is a C compiler, and MicroHs can bootstrap, given the included combinator file. -To install `mhs` use `make install`. This will install `mhs` in `~/.mcabal` in the same+To install `mhs` use `make minstall`. This will install `mhs` in `~/.mcabal` in the same way as `mcabal` (MicroCabal) would have. It will install a compiler binary and a compiled base package. You will have to add `~/.mcabal/bin` to your `PATH`. @@ -47,12 +47,15 @@ * Kind variables need an explicit `forall`. * Always enabled extension: * BangPatterns+ * BinaryLiterals * ConstraintKinds * DefaultSignatures * DoAndIfThenElse * DuplicateRecordFields+ * EmptyCase * EmptyDataDecls * ExistentialQuantification+ * ExplicitNamespaces * ExtendedDefaultRules * FlexibleContexts * FlexibleInstance@@ -74,12 +77,15 @@ * NegativeLiterals * NoMonomorphismRestriction * NoStarIsType+ * NumericUnderscores * OrPatterns * OverlappingInstances * OverloadedRecordDot * OverloadedRecordUpdate * OverloadedStrings+ * PatternSynonyms * PolyKinds+ * PolymorphicComponents * RankNTypes * RecordWildCards * QualifiedDo@@ -87,11 +93,13 @@ * StandaloneDeriving * StandaloneKindSignatures * TupleSections (only pairs right now)+ * TypeApplications * TypeLits * TypeSynonymInstances * UndecidableInstances * UndecidableSuperClasses * ViewPatterns+ * The only extension that is not always on is `CPP`. * `main` in the top module given to `mhs` serves at the program entry point. * Many things that should be an error (but which are mostly harmless) are not reported. * Text file I/O uses UTF8, but the source code does not allow Unicode.@@ -161,6 +169,7 @@ * `-T` generate dynamic function usage statistics * `-z` compress combinator code generated in the `.c` file * `-l` show every time a module is loaded+* `-s` show compilation speed in lines/s * `-XCPP` run `cpphs` on source files * `-Dxxx` passed to `cpphs` * `-Ixxx` passed to `cpphs`@@ -168,7 +177,7 @@ * `-a` set package search path to empty * `-aDIR` prepend `DIR` to package search path * `-PPKG` create package `PKG`-* `-LFILE` list all modules in a package+* `-L[FILE]` list all modules in a package * `-Q FILE [DIR]` install package * `--` marks end of compiler arguments @@ -204,6 +213,7 @@ * `MHSCC` command use to compile C file to produce binaries. Look at the source for more information. * `MHSCPPHS` command to use with `-XCPP` flag. Defaults to `cpphs`. * `MHSCONF` which runtime to use, defaults to `unix-32/64` depending on your host's word size+* `MHSEXTRACCFLAGS` extra flags passed to the C compiler ### Compiler modules @@ -325,6 +335,23 @@ and use `-a` to control it. There is absolutely no checks for consistency among packages. There is also no compatibility between packages compiled with different versions of the compiler. +### Hackage+Hackage is full of great packages, unfortunately most of them contain some GHC specific code.+There is a handful packages that works with mhs out of the box, or have been converted:+* `containers`+* `cpphs`+* `hscolour`+* `mtl` changes not merged yet, use [github.com/augustss/mtl](https://github.com/augustss/mtl)+* `parsec` changes not merged yet, use [github.com/augustss/aprsec](https://github.com/augustss/parsec)+* `polyparse`+* `pretty`+* `time`+* `transformers`++Some of these might not have be released on hackage yet, but the github repo works.++Contributions to this list are very welcome.+ ## Files There is a number of subdirectories: * `Tools/` a few useful tools for compressions etc.@@ -351,6 +378,8 @@ * `-KSIZE` set stack size to `SIZE` entries, can be suffixed by `k`, `M`, or `G`, default is`100k` * `-rFILE` read combinators from `FILE`, instead of `out.comb` * `-v` be more verbose, flag can be repeated+* `-T` generate profiling stats (if compiled with `-T` as well)+* `-oFILE` just read the input, run garbage collection, and write out the resulting graph to file. For example, `bin/mhseval +RTS -H1M -v -RTS hello` runs `out.comb` and the program gets the argument `hello`, whereas the runtime system sets the heap to 1M cells and is verbose.@@ -360,6 +389,8 @@ When running the program directly (using `-r`) or when generating a `.comb` file only the functions in the table built into `src/runtime/eval.c` can be used. When generating a `.c` file or an executable any C function can be called. +There is a lot of missing FFI functionality compared to GHC.+ ### Records MicroHs implements the record dot extensions. So accessing a field `a` in record `r` is written `r.a`, as well as the usual `a r`.@@ -374,10 +405,11 @@ Note that record updates cannot change the type of polymorphic fields. -### Features+### Serialization The runtime system can serialize and deserialize any expression and keep its graph structure (sharing and cycles).-The only exceptions to this are C pointers (e.g., file handles), which cannot be serialized (except for `stdin`, `stdout`, and `stderr`).+The only exceptions to this are C pointers (e.g., file handles),+which cannot be serialized (except for `stdin`, `stdout`, and `stderr`). ### Memory layout Memory allocation is based on cells. Each cell has room for two pointers (i.e., two words, typically 16 bytes),@@ -401,8 +433,7 @@ portable to many platforms. It has mostly been tested with MacOS and Linux, and somewhat with Windows. -The code has mostly been tested on 64 bit platforms, so again, there are lurking problems-with other word sizes, but they should be easy to fix.+The code has been tested on 64- and 32-bit little-endian platforms. The `src/runtime/` directory contains configuration files for different platform. Use the appropriate `src/runtime/eval-`*platform*`.c`.@@ -412,6 +443,21 @@ do `make bootstrap`. This will recompile the compiler twice and compare the outputs to make sure the new compiler still works. +### Bootstrapping with Hugs+It is also possible to bootstrap MicroHs using Hugs. That means that+MicroHs can be built from scratch in the sense of [bootstrappable.org](https://bootstrappable.org/).+To compile with Hugs you need [a slightly patched version of Hugs](https://github.com/augustss/hugs98-plus-Sep2006)+and also the [hugs branch of MicroHs](https://github.com/augustss/MicroHs/tree/hugs).++## Using GMP for `Integer`+The default implementation of the `Integer` type is written is Haskell and is quite slow.+It is possible to use GMP [GNU Multi Precision](https://gmplib.org/) instead.+To use GMP you need to uncomment the first few line in the `Makefile`, and also+modify the definition that directs the C compiler where to find GMP.++***NOTE*** To switch between using and not using GMP you need to do `make clean`.+You might also need to do `make USECPPHS=cpphs bootstrapcpphs` if there are complaints.+ # Preprocessor Sadly, compiling a lot of Haskell packages needs the C preprocessor. To this end, the distribution contains the combinator code for `cpphs`.@@ -422,21 +468,16 @@ At the moment, the downloaded packages are forks of the original to make it compile with `mhs`. +To identify that it is MicroHs that is the compiler it defines the symbol `__MHS__`.+ # FAQ * * Q: When will it get _insert feature_?- * A: Maybe some time, maybe never.+ * A: Maybe some time, maybe never. But it doesn't hurt to ask for it. * * Q: Why are the error messages so bad? * A: Error messages are boring. * * Q: Why is the so much source code?- * A: I wonder this myself. 7000+ lines of Haskell seems excessive.- 2500+ lines of C is also more than I'd like for such a simple system.-* - * Q: Why are the binaries so big?- * A: The combinator file is rather verbose. The combinator file- for the compiler shrinks from 350kB to 75kB when compressed with upx.- The evaluator alone is about 70kB (26kB compressed with upx).--+ * A: I wonder this myself. 10000+ lines of Haskell seems excessive.+ 6000+ lines of C is also more than I'd like for such a simple system.
generated/cpphs.c view
@@ -1,1654 +1,1721 @@ static unsigned char data[] = {-122,76,90,49,162,128,0,0,31,118,55,46,48,10,55,57,50,10,65,32,-95,48,32,95,50,52,32,64,95,50,54,32,95,51,55,32,64,95,51,57,-32,1,64,64,224,22,4,1,52,50,224,22,13,64,8,128,22,1,49,49,-192,23,6,50,55,32,64,67,39,32,224,17,0,9,64,66,32,95,50,55,-32,95,49,50,160,15,8,64,83,32,83,32,95,50,51,51,64,4,29,53,-32,64,95,49,54,53,32,95,49,54,55,32,64,102,114,111,109,85,84,70,-56,32,34,45,45,99,112,112,34,64,45,1,64,73,64,95,2,50,53,50,-64,12,0,66,224,87,1,2,95,50,53,64,77,4,83,39,32,83,39,224,-196,0,5,64,64,67,39,66,32,64,113,4,53,54,32,95,50,64,51,224,-105,25,6,118,101,114,115,105,111,110,128,109,96,187,192,77,96,186,7,49,-32,64,67,32,95,49,52,96,64,0,52,96,64,192,69,7,79,32,35,51,-50,32,64,75,64,57,2,95,50,55,96,162,64,8,0,56,64,55,65,23,-224,159,60,2,104,101,108,161,10,224,156,12,65,19,224,150,5,224,60,1,-6,85,115,97,103,101,58,32,128,61,224,197,15,224,46,1,20,32,91,102,-105,108,101,32,46,46,46,93,32,91,32,45,68,115,121,109,32,124,128,7,-3,61,118,97,108,64,11,12,73,112,97,116,104,32,93,42,32,32,91,45,-79,64,45,4,93,92,49,48,38,96,96,224,87,17,17,92,57,38,92,57,-38,91,45,45,110,111,109,97,99,114,111,93,32,96,11,3,108,105,110,101,-96,10,64,8,5,112,114,97,103,109,97,96,14,224,10,2,3,116,101,120,-116,224,97,36,4,115,116,114,105,112,96,58,96,9,3,45,101,111,108,96,-13,5,104,97,115,104,101,115,128,109,4,97,121,111,117,116,96,10,3,117,-110,108,105,224,95,2,224,79,8,0,32,98,135,3,32,115,116,100,64,7,-8,45,111,112,116,105,111,110,115,32,96,59,7,105,110,99,108,117,100,101,-61,65,4,4,110,97,109,101,93,161,163,226,2,8,7,66,32,67,32,67,-39,32,83,99,23,128,8,160,9,160,12,96,13,224,29,0,0,39,97,219,-0,66,64,11,224,8,5,0,39,65,235,0,66,226,75,2,0,66,98,90,-226,74,3,1,56,48,224,91,0,224,38,3,163,130,98,46,160,15,226,50,-17,6,110,107,110,111,119,110,32,128,235,162,58,64,195,67,211,98,62,1,-50,56,64,70,224,67,19,10,44,32,102,111,114,32,118,97,108,105,100,160,-71,4,115,32,116,114,121,226,135,6,226,119,2,130,228,225,135,0,225,67,-2,3,56,50,32,35,96,181,128,0,64,135,97,10,225,7,2,64,153,225,-4,1,96,167,3,53,50,32,95,97,11,4,95,57,53,32,64,96,64,228,-185,1,193,9,224,127,1,18,65,116,32,109,111,115,116,32,111,110,101,32,-111,117,116,112,117,116,32,99,8,20,40,45,79,41,32,99,97,110,32,98,-101,32,115,112,101,99,105,102,105,101,100,130,137,224,157,1,131,245,64,0,-131,235,0,67,161,182,68,228,1,56,51,193,222,1,39,66,161,189,1,50,-53,64,127,97,152,2,95,55,54,129,182,5,49,56,32,95,49,56,128,72,-130,11,128,26,1,95,49,97,106,128,42,64,74,2,95,55,54,64,57,3,-95,55,54,53,128,6,0,54,128,71,0,57,64,235,160,0,9,58,55,57,-49,32,64,10,65,32,89,66,59,1,32,66,96,142,130,129,98,65,64,5,-226,100,0,4,66,32,95,51,53,96,68,64,185,128,188,224,9,11,160,65,-66,138,5,66,32,95,55,49,56,65,72,1,57,56,96,189,96,6,1,64,-66,96,111,1,80,32,69,12,192,119,161,16,64,251,128,65,2,32,61,61,-65,142,128,212,64,125,0,85,160,25,2,95,49,49,131,44,96,236,224,82,-42,129,60,224,82,68,97,187,224,82,25,1,95,55,193,164,128,72,160,2,-224,60,0,98,11,129,124,128,20,224,39,4,64,116,224,39,4,128,16,224,-17,0,66,71,224,16,6,225,135,0,0,83,101,203,0,48,67,78,3,51,-32,64,35,67,83,160,0,224,44,2,192,63,224,64,7,0,66,166,214,224,-62,0,164,173,64,0,195,99,128,104,226,192,4,164,132,66,19,0,80,96,-26,225,20,5,224,101,2,128,103,224,101,7,224,164,2,224,43,0,64,91,-5,83,32,95,55,56,57,72,79,0,53,192,33,224,133,7,224,82,1,97,-141,1,39,32,64,128,224,127,7,224,52,1,97,72,224,51,3,160,26,96,-53,104,160,2,57,32,64,130,13,1,95,49,99,136,129,182,96,48,163,42,-225,96,6,0,55,161,172,129,84,225,72,15,160,38,98,92,96,101,192,17,-128,130,224,175,5,96,40,192,129,160,135,160,6,0,58,99,214,3,10,65,-32,83,96,145,96,153,65,37,96,170,128,131,64,162,224,173,16,97,71,96,-38,224,167,13,0,54,163,17,98,116,137,163,96,91,97,52,1,95,55,100,-187,136,174,3,80,32,64,85,99,50,96,78,132,214,2,95,50,50,68,55,-233,13,5,1,52,57,169,13,5,64,64,64,85,32,65,64,9,3,95,55,-56,52,99,58,224,120,0,2,64,35,54,229,209,1,224,193,30,2,66,32,-90,128,198,224,196,7,0,56,96,35,224,189,1,1,95,55,128,17,64,0,-195,213,226,129,11,0,83,64,212,227,8,14,99,248,225,18,4,160,12,1,-55,56,96,242,1,55,50,192,43,230,253,12,3,47,92,57,50,230,199,1,-128,137,65,1,2,50,52,52,224,54,19,232,81,1,128,59,165,252,224,135,-7,1,55,56,75,163,1,50,52,71,23,229,245,0,75,35,4,67,32,95,-54,50,75,100,74,74,65,7,65,222,0,58,99,84,3,10,65,32,79,130,-100,224,118,11,169,148,134,215,1,55,55,64,84,224,45,20,73,173,192,44,-64,161,224,44,18,233,216,1,192,48,64,197,224,48,18,224,44,5,65,136,-224,44,18,74,28,192,42,65,152,224,42,18,106,12,192,43,65,31,224,43,-23,74,56,192,47,71,114,224,47,18,138,90,192,44,67,234,225,17,19,106,-124,192,44,65,162,224,44,18,106,158,192,43,68,52,225,151,20,2,119,97,-114,140,196,1,95,55,104,251,195,136,96,0,0,58,98,15,1,10,65,99,-205,134,219,1,85,32,64,21,0,55,224,21,2,65,156,128,21,0,54,96,-21,64,19,1,52,32,66,93,0,58,99,86,96,40,2,95,50,57,69,167,-73,111,0,51,65,117,0,58,67,224,224,67,1,66,17,128,67,0,51,160,-67,1,95,49,68,255,0,75,78,2,65,73,0,58,100,193,100,214,224,1,-8,3,39,32,95,55,64,216,64,101,64,92,141,28,1,55,54,64,112,130,-153,224,26,14,200,81,224,27,11,136,26,224,19,5,99,226,224,18,5,142,-155,74,75,0,50,64,16,224,27,8,224,17,5,132,100,224,112,13,105,79,-224,19,6,102,1,224,18,5,136,61,224,18,4,102,24,224,84,12,97,209,-65,59,137,219,65,105,0,48,193,153,134,37,3,80,32,35,57,160,17,64,-71,128,17,0,56,192,17,129,252,3,80,32,35,55,192,17,129,248,2,80,-32,35,193,225,64,183,128,17,0,53,192,17,129,243,3,80,32,35,54,192,-17,129,234,3,80,32,35,51,192,17,193,230,75,8,128,17,129,222,64,162,-192,17,224,180,0,192,179,65,203,80,124,1,54,56,137,132,199,122,169,40,-2,67,32,60,69,136,161,145,224,25,9,138,65,224,26,13,97,218,139,135,-231,202,0,160,26,173,14,0,85,70,206,69,248,233,235,1,97,224,98,167,-1,64,85,194,168,129,224,0,85,64,61,104,251,224,49,5,107,142,128,49,-128,37,134,66,133,125,128,0,224,132,13,167,98,224,87,15,136,0,224,87,-19,224,59,17,65,21,224,59,10,2,55,54,56,67,134,144,99,224,160,3,-225,67,15,98,134,224,189,13,163,131,225,66,10,109,110,225,66,15,224,44,-6,146,51,224,43,9,224,116,13,168,167,224,70,9,108,127,224,114,30,64,-36,224,114,12,225,3,14,194,70,224,25,9,136,63,224,168,11,99,248,224,-124,11,137,41,224,168,29,103,189,225,27,32,226,210,16,226,209,20,224,43,-6,226,203,2,225,27,6,192,115,227,98,5,225,0,16,226,219,1,224,97,-6,226,213,2,224,141,24,226,197,2,224,141,5,224,44,11,226,117,15,69,-90,1,49,55,197,63,1,64,58,96,6,70,116,0,39,100,116,107,75,173,-240,106,226,234,45,1,204,145,64,27,107,9,1,49,52,162,128,99,77,203,-9,224,16,3,106,232,160,17,69,15,99,113,96,116,199,115,224,1,9,108,-146,160,0,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,-5,224,11,2,192,8,109,221,128,0,0,58,103,147,101,192,71,197,2,57,-48,32,232,120,1,31,92,51,52,38,99,112,112,104,115,115,114,99,47,109,-97,108,99,111,108,109,45,119,97,108,108,97,99,101,45,117,110,105,85,92,-1,101,47,96,33,6,45,49,46,50,48,46,57,128,12,2,46,104,115,64,-58,4,44,56,48,58,49,138,239,102,23,80,208,2,10,65,32,65,99,0,-90,96,1,161,107,0,58,112,241,168,78,71,3,0,90,203,18,0,58,113,-18,96,51,128,49,224,51,3,134,155,241,127,3,65,255,246,154,0,193,185,-130,2,143,87,224,29,1,173,174,0,55,86,103,193,244,66,119,98,238,243,-96,2,1,95,55,78,178,1,95,55,81,216,87,41,143,21,1,55,54,171,-157,0,80,233,179,15,3,115,116,100,105,201,176,109,17,108,147,2,95,53,-51,98,110,0,58,114,1,71,35,2,53,51,55,151,153,0,58,96,38,96,-208,64,175,76,23,96,105,0,53,81,141,1,55,53,101,181,131,142,1,95,-53,86,151,141,200,247,48,0,2,53,51,51,225,184,2,15,85,84,70,45,-56,47,47,82,79,85,78,68,84,82,73,80,172,176,97,33,244,62,4,87,-234,96,209,0,50,99,73,3,64,64,95,53,115,104,0,58,96,225,1,10,-65,97,170,65,29,0,58,96,130,225,111,6,225,78,2,1,95,53,96,7,-97,64,224,22,2,160,204,225,77,0,128,93,248,47,2,64,88,131,71,96,-132,73,25,0,55,82,179,0,58,65,113,64,22,8,94,102,108,117,115,104,-98,32,58,96,22,65,50,64,170,97,139,0,58,97,155,131,247,160,216,225,-223,2,3,95,55,50,49,104,123,2,95,55,53,99,182,0,49,96,92,104,-13,0,58,97,247,128,57,226,61,13,129,230,68,1,227,78,1,224,182,3,-228,81,3,98,50,67,88,1,95,55,71,225,1,95,49,102,142,1,55,53,-197,74,135,204,64,4,169,251,1,55,48,96,68,239,28,0,234,152,1,0,-55,89,113,1,95,55,98,37,64,46,75,152,148,66,1,53,56,214,112,213,-240,1,56,52,64,218,130,147,203,96,0,54,82,182,128,63,128,75,2,64,-95,54,75,209,64,115,238,80,0,0,58,97,16,97,114,0,80,67,36,78,-96,2,75,32,79,138,117,99,10,0,58,96,87,226,140,1,76,15,111,122,-160,11,64,144,1,55,52,96,223,65,117,0,54,66,170,97,47,79,98,101,-181,0,55,90,63,64,6,162,86,2,55,53,48,97,176,162,227,180,191,227,-111,0,0,79,67,133,177,26,131,140,129,211,145,138,241,181,17,179,199,164,-216,115,13,227,237,0,239,251,8,207,82,198,22,145,172,224,119,0,2,64,-64,82,69,226,161,37,162,83,160,127,167,34,224,122,10,224,39,25,128,117,-96,114,128,40,100,121,66,7,210,44,224,144,27,224,180,28,130,123,0,58,-97,108,165,79,64,37,226,104,1,98,107,98,143,243,12,20,0,57,128,90,-129,72,225,70,1,138,94,228,102,1,10,98,101,103,105,110,123,99,111,100,-101,125,132,97,160,158,161,253,243,127,4,242,11,2,201,117,225,162,10,224,-120,9,241,88,22,2,101,110,100,224,128,3,224,130,7,226,128,0,228,138,-0,97,62,1,95,55,244,170,3,131,203,225,195,19,161,106,226,88,15,171,-117,96,30,128,96,211,213,3,95,51,48,50,98,224,181,252,64,208,1,56,-57,64,197,163,60,96,147,1,55,52,66,13,6,51,53,56,32,95,52,57,-165,151,0,57,129,211,1,95,55,139,241,224,200,0,224,100,2,96,57,123,-243,84,135,102,20,224,241,3,248,22,0,128,114,0,51,100,0,225,30,1,-107,95,160,44,225,52,14,0,58,96,8,70,5,0,50,230,6,0,64,55,-1,10,65,231,142,0,87,61,96,22,208,106,0,90,64,151,224,4,1,96,-6,168,111,0,58,96,231,224,37,11,0,90,66,209,160,34,133,210,136,34,-164,140,64,149,96,54,0,89,162,57,161,77,226,192,11,78,142,5,95,50,-48,54,32,95,69,48,3,95,49,57,53,110,152,96,0,2,66,32,82,160,-64,213,189,72,38,250,130,0,128,76,130,12,151,88,136,53,224,2,0,183,-109,224,21,13,164,176,224,2,0,224,43,0,224,15,2,134,71,162,96,64,-3,224,19,0,193,41,224,16,2,247,221,0,130,37,224,154,11,234,209,0,-192,83,228,255,2,96,96,0,80,101,208,69,224,128,24,2,95,50,50,66,-171,163,93,96,5,1,95,55,71,75,227,81,1,6,112,114,111,103,114,97,-109,99,79,224,21,1,5,99,111,109,109,101,110,146,175,228,141,1,119,139,-228,198,4,164,224,163,188,102,16,192,49,224,228,3,160,225,247,49,3,107,-178,4,67,32,95,57,52,129,186,172,138,224,61,3,193,17,161,14,161,11,-224,255,4,133,139,224,249,4,96,253,224,176,41,224,177,53,192,60,225,196,-46,162,89,128,157,96,30,67,66,227,83,0,225,198,26,225,176,3,225,220,-13,182,90,225,203,103,163,213,155,164,230,32,2,193,213,227,154,1,224,70,-19,0,58,96,142,104,74,161,53,96,60,160,5,230,174,2,230,53,12,76,-157,64,3,193,7,248,166,3,253,65,6,255,7,16,4,76,105,110,101,32,-192,64,193,65,128,47,4,64,95,49,51,49,94,169,193,75,224,71,19,0,-58,192,68,129,65,64,62,224,46,19,0,32,87,118,5,32,98,101,102,111,-114,192,126,102,140,255,115,5,64,36,0,46,255,114,4,192,208,97,179,224,-10,8,224,113,19,1,73,110,159,48,224,74,0,226,46,3,135,71,224,66,-23,2,32,97,116,128,183,225,47,163,96,0,226,5,199,0,58,100,38,99,-55,64,1,2,80,32,73,139,242,195,142,168,75,225,213,0,232,91,3,132,-194,224,219,10,232,128,4,224,14,0,64,67,0,58,108,37,177,37,76,58,-90,237,0,48,120,97,195,248,79,165,108,84,72,249,1,95,55,110,32,129,-8,67,139,75,39,103,222,184,64,99,210,0,55,141,69,79,54,236,216,0,-109,125,236,145,3,237,18,31,96,173,3,80,32,95,55,73,169,225,108,2,-217,97,0,58,110,5,176,183,1,75,52,240,136,7,64,32,64,85,128,32,-224,30,1,224,32,5,137,52,96,32,96,35,128,27,0,58,96,194,128,24,-0,51,224,57,2,224,59,2,64,35,0,54,225,65,0,105,1,194,148,100,-171,0,80,130,39,206,152,141,74,159,103,224,67,0,133,203,198,94,232,199,-7,160,21,96,18,192,88,141,151,224,35,7,224,41,3,224,43,1,96,136,-66,21,229,113,20,7,95,95,70,73,76,69,95,95,227,95,3,224,91,65,-2,76,73,78,224,91,21,166,204,224,91,43,2,68,65,84,224,91,80,2,-84,73,77,224,91,6,96,57,192,89,74,227,160,83,170,62,237,189,2,3,-67,32,95,54,130,240,96,34,66,245,82,51,2,95,55,50,232,194,1,128,-169,224,2,7,192,30,225,121,3,224,112,2,224,199,7,224,49,2,224,157,-15,224,85,0,224,14,3,207,222,196,94,224,30,0,230,119,0,224,179,12,-224,124,2,96,40,224,141,5,160,18,192,62,201,61,71,186,234,254,5,230,-156,1,232,224,1,100,11,150,71,192,5,141,93,225,40,1,0,79,128,155,-64,48,73,113,192,195,3,95,53,57,48,159,230,205,244,239,216,0,105,67,-227,175,1,224,173,4,224,175,1,224,22,65,225,178,13,160,25,97,15,69,-10,178,166,64,22,225,101,11,224,95,5,119,123,160,0,226,220,3,128,91,-192,35,96,91,224,59,4,226,249,12,227,20,0,129,71,161,51,125,196,1,-95,57,178,67,64,7,1,95,54,170,44,192,62,224,115,1,161,208,224,115,-0,128,88,243,156,3,96,15,1,54,51,70,54,96,16,230,92,7,230,77,-8,224,101,0,226,52,6,226,58,3,224,233,2,226,60,1,235,30,5,226,-64,16,227,106,4,98,68,224,56,1,110,253,129,43,1,95,54,107,184,226,-47,7,227,8,13,103,74,247,144,55,22,76,97,110,103,117,97,103,101,47,-80,114,101,112,114,111,99,101,115,115,111,114,47,67,64,34,8,47,77,97,-99,114,111,80,97,115,247,176,0,5,49,53,50,58,50,50,196,143,225,118,-6,3,95,53,48,51,160,9,0,54,230,114,2,3,95,55,50,53,66,112,-0,54,228,218,3,64,77,7,37,72,58,37,77,58,37,83,235,104,1,2,-95,55,51,243,130,0,226,151,19,224,114,49,6,100,32,37,98,32,37,89,-224,114,39,192,23,81,81,64,25,64,130,232,223,1,2,95,55,51,237,216,-5,224,46,16,0,51,113,218,145,193,0,55,233,15,0,224,123,16,227,204,-2,98,35,96,251,85,219,64,34,230,50,2,245,154,3,96,0,231,54,4,-96,21,226,126,3,231,225,7,160,2,224,39,12,226,249,0,224,137,9,224,-141,32,224,221,14,224,164,3,132,57,235,31,0,224,234,34,224,137,59,206,-115,233,89,1,233,101,4,138,215,161,53,128,10,192,113,225,226,0,64,85,-0,52,85,92,68,189,174,142,242,102,7,130,36,2,95,55,51,230,30,3,-128,81,119,225,96,148,0,51,98,29,225,140,0,1,95,54,92,83,129,118,-1,95,54,88,62,145,172,64,0,0,58,106,237,105,250,100,145,196,254,1,-95,50,117,38,96,163,248,146,1,171,171,169,252,96,61,147,54,203,233,0,-75,72,48,0,55,228,77,2,76,30,6,98,114,101,97,107,115,44,77,160,-228,92,70,6,72,97,115,104,68,101,102,76,130,164,93,3,50,53,58,54,-131,149,224,138,130,108,127,0,75,156,43,1,75,50,96,7,0,58,97,193,-252,117,0,98,37,0,58,99,206,252,189,0,192,19,140,220,228,175,1,1,-55,50,126,126,98,172,225,154,4,130,189,68,77,77,167,0,50,74,23,0,-48,144,209,0,48,185,152,0,58,100,169,5,10,65,32,73,32,58,96,41,-64,88,2,55,50,55,64,13,140,62,3,94,71,69,84,74,49,3,77,73,-76,76,96,36,140,60,114,12,225,74,1,16,100,101,102,97,117,108,116,84,-105,109,101,76,111,99,97,108,101,64,231,0,58,101,44,149,201,230,221,0,-228,227,3,67,74,0,49,204,52,0,58,69,95,162,58,99,21,131,202,98,-174,128,207,64,1,221,173,228,85,4,224,30,1,128,16,93,92,0,50,224,-40,1,227,207,1,122,48,235,32,12,2,79,32,35,77,113,131,156,224,57,-2,224,132,6,224,112,1,224,9,8,0,39,237,38,5,173,53,227,137,0,-139,65,246,66,9,224,5,3,103,218,168,183,246,78,15,224,233,0,229,131,-7,237,79,6,172,35,137,17,0,85,94,222,196,177,193,41,128,69,248,85,-0,225,17,11,0,49,228,231,3,229,21,1,159,39,225,146,1,160,10,1,-95,50,78,245,128,0,224,54,0,193,147,233,220,9,225,3,51,225,103,3,-244,237,0,230,103,10,234,41,12,225,23,14,224,83,4,225,29,27,0,52,-225,29,4,224,126,4,96,231,233,137,0,64,184,251,58,0,225,28,1,224,-110,1,226,215,4,224,200,9,160,2,224,29,1,166,209,231,142,6,224,188,-0,97,75,224,17,3,139,203,224,31,1,128,13,64,71,235,50,2,148,255,-2,95,54,55,225,196,0,220,103,231,83,2,237,152,7,224,1,1,238,122,-15,227,89,4,224,57,2,224,85,13,224,79,1,226,151,33,192,199,64,49,-235,222,0,193,134,160,106,245,215,1,1,49,53,245,216,6,224,54,3,224,-53,16,246,13,7,224,52,3,0,75,225,187,4,158,138,129,237,160,6,135,-93,224,38,2,64,16,64,98,160,67,227,58,2,0,89,97,73,0,83,83,-33,96,53,226,198,1,226,186,17,226,172,3,251,117,2,128,115,64,5,0,-58,109,153,231,211,42,100,243,0,58,104,139,101,243,1,56,52,135,210,128,-214,0,67,76,115,96,97,0,58,108,243,192,96,184,30,96,2,237,63,3,-240,71,3,133,225,162,4,2,64,95,55,94,216,2,95,55,49,139,104,70,-19,64,6,165,247,230,59,0,216,207,0,32,126,137,243,51,5,98,228,160,-4,230,108,1,64,177,244,210,19,7,35,105,110,99,108,117,100,101,103,252,-244,210,5,224,47,12,119,195,0,49,244,219,2,224,92,20,117,47,0,49,-224,91,3,224,152,0,0,53,67,19,224,87,18,64,254,189,140,225,153,1,-1,64,83,64,9,76,133,97,159,1,49,56,189,92,2,50,49,56,71,181,-208,37,224,185,13,3,57,50,38,47,160,94,161,97,65,182,245,40,5,162,-133,161,186,149,5,0,66,66,79,66,182,98,98,1,95,50,106,104,66,58,-64,42,0,58,64,117,130,27,5,52,54,32,75,32,85,228,110,0,227,198,-1,129,38,224,11,0,2,95,55,49,196,96,0,58,96,199,244,102,0,224,-46,1,224,61,17,192,8,221,220,64,75,244,228,0,96,144,65,54,192,17,-137,88,66,71,244,239,1,162,176,65,1,128,20,94,102,245,28,1,66,130,-226,200,0,231,224,3,132,166,136,6,229,160,2,225,47,1,196,196,195,3,-160,171,2,95,55,48,129,84,246,43,0,99,217,2,95,50,56,73,174,134,-20,225,112,2,99,19,67,227,1,95,55,75,152,227,140,0,0,54,141,217,-0,95,98,21,1,95,54,174,28,1,95,55,65,154,0,58,99,62,246,45,-1,161,11,96,206,183,120,76,10,170,38,0,54,171,255,98,141,118,211,1,-48,51,73,50,67,92,194,250,226,210,5,0,79,151,103,229,114,1,1,95,-55,76,104,0,58,96,207,106,49,5,48,57,32,95,53,57,76,107,96,209,-0,58,96,31,251,40,3,231,212,17,128,200,129,60,134,210,132,35,2,95,-54,55,66,222,97,64,216,204,64,177,128,13,229,198,2,96,35,2,54,52,-52,234,221,0,135,103,3,95,54,54,57,64,137,64,19,226,98,2,137,149,-225,191,1,225,200,4,230,128,4,232,177,1,225,147,0,64,201,228,180,0,-102,114,202,169,1,95,50,120,30,1,50,56,193,88,70,185,67,180,171,134,-4,50,55,48,32,95,72,49,228,50,21,31,85,110,109,97,116,99,104,101,-100,32,35,105,102,58,32,112,111,115,105,116,105,111,110,115,32,111,102,32,-111,112,101,110,12,32,99,111,110,116,101,120,116,32,97,114,101,58,228,48,-1,64,100,0,56,100,239,68,9,107,97,1,50,56,130,169,228,64,2,232,-130,1,238,145,3,231,72,2,224,251,1,202,170,69,104,224,61,8,224,42,-7,244,66,25,231,232,4,200,174,231,235,3,129,81,200,182,224,25,3,244,-1,0,224,69,9,224,72,0,224,184,7,96,75,224,146,13,163,215,168,10,-245,88,0,186,124,192,0,226,30,10,160,53,224,31,20,226,68,0,130,207,-224,171,2,164,30,224,36,6,224,71,16,160,43,224,146,2,224,41,15,224,-50,1,224,191,26,224,45,2,224,93,5,192,175,224,31,4,224,2,12,224,-52,4,224,191,23,224,56,17,99,56,224,42,2,224,5,6,225,61,7,224,-60,6,225,211,8,224,1,5,249,4,25,0,100,111,151,249,2,3,224,0,-0,224,189,6,224,152,3,224,14,9,224,152,72,4,117,110,100,101,102,224,-151,27,225,103,6,225,69,7,224,151,71,1,105,102,224,152,144,224,151,15,-227,123,3,224,151,12,192,11,227,213,0,128,0,224,143,19,224,190,7,224,-43,19,224,187,27,224,184,11,225,79,6,226,113,6,224,210,4,224,141,68,-2,101,108,115,227,17,12,224,143,113,225,31,13,172,69,121,26,64,2,64,-130,249,191,4,224,5,27,245,117,2,240,114,1,224,139,18,1,110,100,224,-140,1,201,223,231,236,67,96,96,84,132,128,100,231,194,5,231,130,14,192,-0,225,160,112,225,20,3,224,0,3,224,144,111,5,112,114,97,103,109,97,-224,145,11,243,129,0,226,50,8,192,10,128,122,143,90,224,22,3,192,146,-104,153,224,11,10,241,122,9,128,126,192,16,254,79,8,128,245,232,124,6,-250,23,5,238,232,0,96,40,87,163,187,240,108,51,224,212,0,160,0,233,-21,3,253,43,5,225,120,6,228,233,4,224,159,1,224,1,1,225,147,11,-224,39,11,64,1,228,221,26,143,89,225,142,9,231,223,6,229,137,12,224,-112,9,224,156,10,224,36,9,64,1,224,153,25,6,119,97,114,110,105,110,-103,224,153,8,226,153,4,226,168,6,224,125,65,4,101,114,114,111,114,224,-123,11,224,2,9,225,15,0,224,99,6,224,161,0,224,69,2,224,140,11,-228,220,29,80,165,224,143,7,224,73,7,209,186,132,246,124,112,252,157,1,-229,148,4,192,183,128,127,192,9,227,89,1,224,8,9,154,164,238,2,5,-140,12,3,95,49,52,56,64,112,0,57,85,63,1,50,57,96,113,128,85,-82,233,96,21,145,36,128,69,0,57,133,142,118,145,1,95,51,78,212,192,-202,160,27,144,52,128,0,224,219,1,225,219,6,225,240,2,228,24,1,224,-38,8,224,19,10,224,16,7,224,13,0,110,180,144,243,128,28,128,20,70,-27,1,51,48,78,53,6,51,53,56,32,95,52,57,145,227,96,0,227,233,-3,226,26,34,237,63,9,64,1,237,10,14,0,83,64,71,193,98,225,211,-1,65,45,238,203,2,192,0,225,225,12,231,82,4,231,8,3,193,167,252,-208,1,1,50,53,82,95,117,20,1,52,57,141,108,160,30,231,43,2,231,-45,19,0,87,131,181,20,58,32,117,110,107,110,111,119,110,32,100,105,114,-101,99,116,105,118,101,32,35,162,190,98,23,148,41,224,73,19,79,55,2,-105,110,32,231,106,11,224,237,9,166,49,98,12,224,207,0,226,84,12,226,-56,9,129,246,2,95,52,57,64,92,225,210,6,227,46,255,224,16,0,227,-46,15,128,31,160,45,227,48,11,119,11,1,95,50,92,107,160,0,225,106,-3,128,207,92,90,226,30,62,231,87,2,160,240,130,232,65,132,128,5,226,-224,4,231,205,27,96,31,226,101,3,163,81,227,78,1,128,197,227,42,3,-226,233,60,224,160,31,64,0,232,71,7,161,232,233,24,16,118,235,247,252,-1,226,41,1,226,228,0,129,248,224,131,1,96,50,0,53,73,17,96,144,-1,95,54,84,176,1,95,50,84,86,64,0,225,86,0,224,98,0,0,85,-161,101,192,86,228,145,3,121,184,224,193,1,128,145,64,5,149,79,247,183,-27,225,54,3,1,49,51,101,32,229,162,0,224,225,0,117,47,181,142,224,-92,2,117,174,163,249,224,0,0,224,234,1,160,9,161,110,129,34,224,172,-6,225,150,16,115,236,85,106,226,242,2,224,49,21,3,95,54,51,51,117,-104,192,106,224,49,35,128,16,64,0,226,244,1,229,244,3,225,206,1,225,-238,3,193,146,1,95,54,65,91,225,196,1,129,172,227,208,1,85,92,224,-119,2,160,34,100,206,130,16,224,41,15,64,21,65,255,4,67,32,95,54,-54,252,177,0,224,59,37,96,180,102,236,224,70,6,192,55,98,160,161,33,-128,13,128,6,64,102,160,86,2,95,54,55,183,152,225,197,11,228,212,2,-197,10,226,172,2,224,28,8,224,15,5,224,64,3,64,26,224,33,5,87,-188,119,198,228,63,1,101,57,96,18,129,152,228,33,0,226,237,9,247,210,-5,3,66,32,95,53,130,224,224,31,2,1,52,57,160,31,166,53,96,0,-224,230,8,76,241,136,42,2,95,50,53,64,123,224,68,2,128,93,134,160,-70,76,96,136,226,89,7,253,3,0,194,215,192,17,224,91,5,98,235,249,-47,0,224,116,24,224,58,17,193,61,162,37,128,217,202,223,96,20,228,160,-2,162,70,192,15,162,76,224,14,1,71,117,135,142,165,32,193,216,134,110,-192,107,97,97,135,157,1,55,48,229,208,1,1,55,48,230,150,0,0,52,-97,99,162,165,224,203,6,192,46,231,177,5,0,55,71,9,224,30,2,160,-159,128,19,224,14,5,160,184,162,84,160,9,96,8,167,105,121,100,225,228,-1,0,66,254,239,1,249,173,13,64,32,68,247,2,53,57,48,255,167,0,-110,202,1,64,35,89,248,128,0,225,130,1,64,252,1,56,50,228,6,1,-223,7,2,95,51,48,144,207,237,106,10,97,160,97,91,1,95,50,240,245,-2,226,234,1,231,48,12,233,156,16,225,17,6,192,100,230,139,14,165,16,-232,135,0,226,238,1,229,210,1,225,115,2,225,248,1,64,135,203,132,235,-184,4,139,175,224,49,4,225,146,0,224,77,5,160,31,248,195,4,224,30,-6,224,114,1,248,196,41,224,156,5,229,204,7,224,2,1,249,139,10,226,-93,0,224,90,10,138,141,224,90,0,239,221,9,224,32,3,224,206,8,140,-138,2,50,50,57,224,209,1,110,175,240,78,3,246,129,1,224,43,26,96,-39,224,30,17,192,73,224,0,1,228,0,2,237,99,7,224,166,2,224,195,-1,224,189,5,224,105,15,244,195,6,225,21,6,224,78,42,245,162,4,224,-173,5,224,77,1,224,74,1,0,67,224,74,17,243,188,5,128,46,99,45,-101,160,128,19,226,50,1,96,151,96,13,128,22,238,29,1,224,57,2,125,-236,128,34,66,61,192,122,93,244,0,64,132,56,96,80,97,103,128,101,64,-34,253,199,0,128,34,200,213,232,229,10,245,105,109,224,224,3,113,79,225,-110,0,160,115,0,56,224,234,13,225,12,24,161,104,196,90,231,24,0,160,-0,225,43,1,239,102,4,233,119,36,101,7,234,42,6,160,52,228,239,0,-232,203,0,195,214,194,72,227,4,1,233,1,0,224,240,19,230,226,1,137,-81,224,223,7,224,122,1,161,77,235,184,4,226,15,0,198,120,192,85,232,-12,12,231,243,13,228,152,5,99,189,239,199,4,226,190,2,231,185,2,97,-65,231,137,33,227,95,6,224,16,4,128,14,225,95,6,166,79,231,107,85,-231,73,0,231,74,10,231,71,11,231,70,5,161,30,241,170,0,71,58,225,-0,27,224,239,19,231,63,5,231,56,3,96,13,3,49,57,48,32,238,167,-2,31,51,52,38,99,112,112,104,115,115,114,99,47,109,97,108,99,111,108,-109,45,119,97,108,108,97,99,101,45,117,110,105,118,4,101,114,115,101,47,-96,33,30,45,49,46,50,48,46,57,47,76,97,110,103,117,97,103,101,47,-80,114,101,112,114,111,99,101,115,115,111,114,47,67,64,34,64,5,0,73,-69,227,2,46,104,115,64,89,4,44,54,56,58,53,131,238,0,58,96,145,-1,10,65,140,0,64,174,87,158,132,228,196,239,65,76,67,76,226,140,3,-194,142,0,58,97,186,3,10,65,32,80,65,22,0,50,64,228,164,11,231,-135,3,97,151,65,98,130,188,201,170,160,15,1,35,57,65,134,192,12,96,-43,233,204,0,0,58,96,8,96,159,239,63,4,1,95,50,160,52,64,54,-164,163,65,69,107,223,0,58,98,189,5,10,65,32,85,32,90,224,1,8,-225,183,3,0,58,106,124,96,93,99,0,65,225,5,54,49,50,32,64,73,-64,36,129,5,162,51,160,192,66,59,2,54,57,56,64,116,101,21,128,140,-1,54,57,128,213,128,230,1,32,79,65,59,0,80,65,237,192,216,240,143,-19,0,35,159,124,0,32,129,144,208,198,0,79,129,9,160,173,96,6,97,-155,132,140,128,171,128,204,64,3,98,156,96,180,226,74,12,97,244,2,48,-58,48,225,243,0,0,51,96,245,3,95,55,48,49,224,41,2,3,112,114,-101,68,96,138,0,100,64,39,0,58,96,189,1,10,65,103,51,146,105,64,-241,2,53,52,48,65,208,196,143,138,185,0,58,64,72,129,112,4,75,50,-32,75,52,225,106,6,0,58,97,25,128,30,0,51,192,30,160,28,0,58,-97,59,161,130,64,1,194,72,64,0,227,87,1,168,122,227,201,6,129,161,-224,25,15,233,96,2,224,29,13,233,129,3,224,33,16,224,36,3,224,37,-20,224,40,4,224,41,23,224,44,5,224,45,26,224,48,6,224,49,29,224,-52,7,128,53,239,107,8,233,133,8,237,245,0,224,0,1,193,138,224,55,-5,224,103,14,224,40,19,224,43,6,224,83,30,224,75,16,224,41,50,192,-232,199,213,165,174,244,188,6,224,5,9,236,9,0,225,21,3,192,1,0,-89,224,96,1,224,28,9,224,32,6,224,172,14,230,177,1,224,42,2,224,-74,11,172,149,192,155,233,92,1,192,5,224,105,2,192,67,230,232,5,192,-250,64,25,245,191,1,160,13,224,2,4,224,242,16,165,238,5,67,32,60,-32,64,35,237,111,3,224,67,9,128,218,192,34,224,70,5,160,203,128,70,-245,145,6,224,1,1,148,224,224,22,4,76,29,192,19,224,103,3,238,96,-6,224,13,5,97,94,230,162,9,64,0,65,32,0,85,82,74,101,217,102,-146,82,24,224,27,0,129,66,64,74,234,127,2,240,243,0,0,80,64,57,-156,88,239,163,1,224,193,3,64,1,224,197,0,224,25,4,0,82,224,198,-0,227,144,7,128,24,224,41,1,225,247,1,224,195,5,0,52,224,114,11,-255,129,0,224,64,5,96,196,239,45,5,244,113,1,224,232,17,192,234,150,-77,230,215,16,1,32,32,237,150,2,225,19,11,224,157,1,128,13,235,81,-1,97,123,130,0,135,241,136,110,224,0,4,224,201,1,128,1,239,96,9,-226,104,17,128,28,162,104,236,93,1,224,37,4,225,31,1,3,67,32,61,-61,224,39,17,193,200,225,178,8,229,61,0,224,81,1,252,118,0,224,100,-4,64,44,96,42,160,173,160,26,96,17,90,167,173,41,225,4,1,192,106,-240,168,8,192,36,64,61,76,78,2,95,50,57,170,107,226,147,12,224,78,-0,224,1,17,226,166,1,224,43,21,194,184,224,37,9,225,151,10,225,49,-0,224,1,1,226,206,15,235,205,1,224,47,6,253,192,13,226,212,13,242,-2,3,196,251,227,193,20,101,147,137,246,162,140,64,65,161,59,225,66,8,-162,185,229,80,4,224,239,47,227,127,2,224,239,27,194,102,227,196,6,224,-159,2,224,154,5,226,149,2,227,222,16,228,199,5,0,54,227,210,16,224,-93,9,224,248,121,224,68,2,224,248,55,0,52,224,248,19,231,170,6,224,-244,11,226,24,10,192,2,128,40,224,38,0,231,235,0,224,73,16,224,70,-27,160,108,224,65,11,224,62,4,224,53,2,193,97,225,20,2,226,238,2,-228,116,10,225,56,14,227,61,7,224,88,5,160,220,64,21,0,85,97,176,-1,54,55,79,120,1,54,55,100,154,0,67,77,41,247,210,2,224,100,70,-0,56,100,63,224,100,5,212,214,224,100,26,225,57,2,224,46,0,230,253,-3,224,88,5,229,100,17,226,47,3,133,229,225,172,0,64,14,161,123,65,-151,129,155,192,44,201,151,155,212,69,225,96,123,192,96,237,65,0,129,11,-237,36,10,192,64,161,30,129,226,242,217,4,224,38,0,144,160,168,238,165,-119,224,96,0,240,155,85,7,84,111,107,101,110,105,115,101,208,155,5,50,-49,53,58,49,51,245,137,7,224,1,5,235,67,3,224,31,11,224,35,7,-225,132,6,224,2,2,235,107,12,224,83,14,235,110,39,161,124,227,190,6,-64,43,235,114,67,150,117,128,0,228,71,10,224,74,35,235,189,255,235,189,-255,96,0,235,189,65,226,80,48,151,201,224,37,10,226,80,2,224,86,6,-235,126,8,96,78,225,139,8,232,74,13,1,49,50,227,84,1,224,43,2,-183,165,225,138,26,227,72,1,160,38,64,15,192,8,64,48,152,97,87,229,-1,56,49,96,61,247,229,9,225,156,15,1,45,123,232,142,8,224,251,13,-225,43,4,233,142,15,194,130,88,183,247,110,7,235,126,2,226,145,22,233,-145,14,225,6,7,96,42,225,69,32,1,49,50,224,63,1,226,209,55,1,-125,45,226,209,22,226,42,2,199,18,226,176,9,128,21,224,183,4,227,201,-13,224,248,11,227,201,33,224,248,3,192,59,226,63,23,252,53,7,225,11,-31,192,96,195,136,224,100,3,160,159,225,93,0,96,107,234,26,7,224,67,-1,192,1,229,229,62,135,153,229,229,13,224,47,2,228,122,5,0,56,97,-208,224,161,5,226,59,16,229,246,21,224,0,1,224,199,1,160,151,96,73,-240,115,21,224,52,6,231,104,6,240,78,2,163,191,232,17,2,224,76,1,-229,29,29,226,195,10,128,1,225,136,10,226,220,2,231,225,10,128,24,224,-102,8,226,223,8,121,122,224,90,9,194,223,225,19,7,224,198,1,224,45,-1,225,16,2,224,89,2,224,90,12,201,162,129,34,155,71,224,50,2,224,-44,3,227,39,10,64,99,1,95,54,127,155,64,14,162,24,250,119,2,224,-63,22,98,131,192,63,224,54,2,224,65,8,225,80,10,160,246,224,241,5,-64,144,224,194,11,160,129,227,136,29,96,53,226,230,25,225,53,0,64,1,-162,238,128,39,224,60,6,229,18,21,64,1,242,234,213,242,236,9,224,46,-18,242,239,5,224,40,6,228,22,10,225,57,0,224,1,1,227,89,15,242,-242,155,224,240,9,224,237,10,224,163,4,231,36,75,224,62,2,226,249,11,-229,224,9,1,56,50,233,69,4,231,4,4,64,0,224,112,1,64,1,224,-213,47,234,58,13,224,214,83,0,49,137,168,234,32,17,99,39,238,133,11,-226,164,47,244,167,166,224,94,8,224,252,122,224,68,2,224,252,55,244,171,-20,240,247,7,224,248,6,232,174,1,226,255,7,224,189,0,103,63,228,92,-3,237,140,2,224,53,4,225,83,13,224,31,1,225,80,15,0,51,234,74,-1,224,44,2,227,48,32,224,62,2,225,48,30,0,53,225,48,3,1,39,-39,225,48,5,224,110,1,224,207,68,0,83,226,99,12,2,66,32,90,226,-51,11,165,141,224,230,4,232,104,3,224,231,29,2,56,51,32,128,139,0,-79,128,7,244,169,0,128,0,224,155,2,225,184,87,135,194,237,246,11,192,-5,225,211,17,245,176,67,1,66,32,161,10,149,186,225,23,9,245,195,30,-225,47,6,227,70,45,237,64,4,224,95,22,228,89,0,160,95,228,208,8,-96,2,160,101,224,83,3,203,58,224,80,18,224,77,30,224,73,25,224,70,-27,193,243,224,65,10,224,62,4,224,53,2,162,42,64,12,194,47,248,167,-219,224,100,92,249,12,99,224,206,16,229,156,8,227,151,9,224,59,29,100,-240,70,157,64,64,0,52,228,240,8,227,100,6,96,28,226,141,0,64,14,-162,92,66,120,130,124,192,44,205,66,249,136,230,4,57,52,58,49,49,231,-29,1,236,21,5,224,239,3,192,1,249,113,1,224,25,7,192,1,229,40,-3,224,37,15,224,35,4,224,30,10,97,44,249,220,4,224,36,9,192,1,-250,3,5,229,101,7,224,2,0,132,110,160,11,224,162,26,225,201,2,167,-25,224,5,8,224,68,3,160,73,227,66,2,163,72,229,75,6,241,152,1,-224,1,1,229,110,16,224,156,16,165,59,242,27,8,64,0,230,18,3,229,-203,10,230,201,5,224,95,27,250,124,3,224,95,0,239,175,4,128,5,224,-106,20,224,97,20,234,110,3,224,38,8,99,51,5,67,32,67,32,61,61,-224,42,20,249,180,15,243,14,3,240,217,9,240,215,6,240,213,8,228,46,-0,236,36,9,243,32,21,224,64,4,160,195,236,30,14,162,52,246,178,22,-242,106,6,96,12,230,65,1,98,170,245,195,5,65,169,245,197,7,225,240,-13,241,23,3,226,59,2,164,171,128,1,225,52,10,225,104,7,242,19,1,-224,102,9,229,47,0,224,28,11,235,33,0,224,79,6,192,107,66,96,224,-31,9,166,217,230,173,0,235,76,17,228,21,10,225,247,8,193,68,202,194,-162,43,193,89,160,32,128,73,246,135,2,225,172,0,184,156,229,210,2,229,-211,1,224,105,5,247,40,1,226,139,64,245,172,22,224,64,4,225,43,10,-242,145,2,228,194,0,209,78,224,224,19,246,7,6,128,191,224,126,1,224,-13,4,129,71,224,117,12,64,113,225,80,2,253,207,3,234,4,1,128,0,-224,201,1,64,1,246,252,255,246,252,221,226,154,0,131,137,229,46,9,96,-207,246,97,8,224,0,1,192,166,160,170,164,60,167,164,227,139,13,224,52,-5,194,212,224,22,9,193,234,249,248,6,224,37,5,226,174,10,64,1,240,-31,4,224,134,4,225,39,0,160,25,64,220,226,195,6,128,21,247,117,39,-230,114,21,224,0,0,224,167,5,224,1,9,247,79,8,238,32,9,161,90,-224,166,0,225,99,12,194,90,225,145,5,224,42,11,224,123,1,227,141,16,-231,209,50,231,146,1,224,103,11,224,64,4,229,69,10,232,16,2,229,67,-3,181,187,253,166,2,230,21,13,224,83,13,224,146,11,0,83,255,94,32,-232,100,13,0,56,133,214,254,53,9,245,86,9,129,151,226,97,2,96,109,-199,16,232,21,14,224,149,3,232,18,1,224,21,1,96,25,225,253,2,224,-47,3,192,72,170,85,231,248,10,226,39,5,224,244,10,231,249,19,230,162,-5,195,62,231,246,6,224,163,1,160,16,192,58,128,148,132,193,249,66,7,-128,56,99,100,225,91,2,0,79,135,44,225,241,2,232,20,4,225,20,6,-244,67,3,193,123,200,226,226,226,19,129,37,224,69,3,224,92,6,232,55,-102,228,82,4,64,62,225,22,25,192,69,233,212,4,224,241,17,96,144,224,-165,8,194,172,251,110,15,228,41,6,224,67,17,103,83,224,67,2,247,16,-2,224,130,5,225,19,9,245,49,4,225,19,38,241,18,6,224,63,41,241,-17,9,226,186,5,224,182,3,224,202,0,98,61,192,212,230,37,0,224,16,-0,1,54,56,128,252,160,139,5,66,39,32,95,54,57,100,87,96,30,253,-150,0,64,0,230,79,17,225,50,5,64,11,225,140,6,228,14,0,227,173,-1,224,151,1,128,16,177,84,128,5,104,101,224,89,1,96,37,226,184,2,-224,173,1,194,72,231,32,16,192,93,244,23,27,227,189,2,224,119,1,128,-1,254,49,1,224,82,0,224,226,6,227,218,1,128,211,231,42,5,162,118,-224,67,1,224,61,7,224,64,2,224,61,22,163,68,224,59,11,224,55,4,-224,52,2,225,17,4,128,158,245,130,16,224,243,1,229,33,2,229,30,4,-225,80,13,244,158,11,224,76,71,192,223,96,51,226,142,9,160,217,128,204,-224,60,6,128,0,226,126,1,226,135,4,224,169,6,165,80,105,244,140,189,-128,98,237,242,14,128,52,230,241,1,224,100,8,228,223,12,226,235,0,96,-255,224,56,13,224,59,1,225,73,9,64,6,237,176,4,244,100,110,5,49,-55,49,58,49,50,232,90,4,108,182,229,101,1,1,50,51,129,165,233,33,-4,196,140,196,98,0,73,129,240,0,83,165,110,224,51,20,68,183,0,55,-224,59,2,2,64,95,49,100,178,0,83,85,216,0,50,64,24,2,52,54,-53,98,78,2,50,51,51,165,186,233,8,2,1,95,96,160,173,224,47,3,-0,54,224,47,17,0,39,224,48,0,224,33,15,7,40,41,44,91,93,59,-123,125,128,38,224,37,15,3,32,92,57,38,224,33,21,22,58,33,35,36,-37,38,42,43,46,47,60,61,62,63,64,92,57,50,38,94,124,45,126,192,-52,193,28,230,250,2,83,58,224,20,4,110,134,111,96,128,11,231,34,0,-1,58,54,65,44,1,10,65,162,244,130,132,98,228,163,5,130,245,67,63,-0,54,129,108,64,1,4,80,32,95,49,56,242,112,0,160,2,224,30,1,-225,231,20,224,215,1,3,108,105,110,101,226,33,0,224,71,50,5,112,114,-97,103,109,97,224,73,0,232,80,0,128,208,224,68,30,2,100,101,102,224,-142,1,132,83,193,67,224,52,17,4,117,110,100,101,102,128,51,193,16,64,-183,2,95,49,56,111,77,0,54,97,40,227,118,83,4,72,97,115,104,68,-96,185,195,120,3,56,56,58,53,96,145,0,90,64,191,4,54,56,53,32,-64,108,139,192,0,196,47,160,163,128,235,160,2,3,95,50,52,53,64,51,-0,56,64,238,133,108,162,9,97,252,193,249,224,208,102,0,57,160,208,233,-203,3,226,35,1,200,0,160,13,165,28,225,186,15,3,79,32,35,52,234,-132,4,238,170,0,130,222,225,10,0,120,97,162,131,199,87,76,47,97,58,-1,50,50,71,32,129,69,65,49,226,26,11,16,105,110,99,111,109,112,108,-101,116,101,32,109,97,99,114,111,32,98,96,8,105,116,105,111,110,58,92,-49,48,163,242,224,68,22,2,32,32,35,130,151,0,32,196,106,0,39,160,-46,100,245,224,54,5,224,219,4,3,95,50,57,54,224,28,7,234,41,8,-224,252,0,129,85,233,40,4,160,251,227,58,17,224,81,9,235,199,8,227,-202,31,64,74,0,49,224,74,2,226,144,1,161,148,64,65,232,143,5,228,-47,10,228,169,0,161,38,1,54,56,72,52,198,12,244,36,0,1,95,57,-164,184,224,96,1,237,208,0,102,110,192,76,163,13,64,46,227,13,0,128,-204,192,25,0,50,192,25,2,95,54,57,146,242,192,31,5,56,52,32,95,-53,56,203,85,232,46,4,102,167,171,67,64,8,2,51,48,49,64,48,0,-57,64,9,96,100,235,94,5,128,147,64,40,0,57,65,52,5,54,32,95,-53,57,48,229,222,5,197,204,2,95,50,57,236,179,0,195,224,64,108,1,-57,48,226,46,11,226,101,1,0,35,229,64,3,224,68,2,224,67,3,64,-203,224,67,20,229,204,1,224,65,2,64,187,96,191,65,21,67,82,129,31,-68,68,169,157,227,210,12,130,43,238,185,2,226,48,10,64,17,234,81,7,-196,11,196,5,224,76,1,137,47,234,229,1,2,95,49,52,65,99,199,113,-96,95,224,33,1,130,103,74,73,225,80,1,235,95,3,248,27,1,224,167,-22,225,31,2,0,35,230,159,1,195,105,128,108,228,209,22,242,35,7,224,-98,28,192,59,176,226,229,226,1,141,16,225,6,8,160,245,64,12,226,138,-6,224,12,2,128,0,164,45,224,53,0,163,216,225,74,8,225,73,8,225,-97,15,163,129,128,0,0,89,96,181,227,43,1,229,207,2,224,138,6,0,-58,110,144,2,10,65,32,106,224,0,58,96,71,3,10,65,32,75,160,13,-0,53,160,13,0,65,96,13,0,52,96,13,2,95,54,56,67,70,67,207,-224,4,0,0,58,99,185,64,28,4,50,52,54,32,75,75,230,10,32,67,-32,80,32,75,32,95,54,49,55,230,231,2,2,114,101,112,70,210,8,109,-101,110,116,44,32,97,116,32,230,247,88,3,50,53,58,54,129,208,224,139,-131,2,64,75,50,224,141,131,0,90,140,249,97,217,96,157,0,52,224,157,-131,66,93,0,50,226,93,15,102,29,64,8,69,158,64,9,201,174,96,12,-96,214,96,17,163,31,64,18,141,229,224,26,1,245,233,0,0,58,102,165,-99,12,120,91,224,4,1,151,174,0,58,96,100,1,10,65,224,29,7,224,-34,4,64,144,227,8,26,69,232,5,98,114,101,97,107,115,227,7,120,224,-138,113,1,64,90,225,172,0,97,67,193,167,65,163,89,219,225,156,0,0,-58,107,77,97,121,192,27,165,156,224,10,24,232,216,1,0,32,83,101,193,-233,64,88,160,79,64,44,224,7,11,224,70,2,224,59,2,1,58,54,64,-163,226,4,6,224,60,5,128,41,0,58,96,217,98,77,1,90,32,66,29,-0,58,116,15,96,57,2,80,32,35,69,152,0,85,69,57,91,176,1,10,-65,64,18,1,51,32,71,230,0,58,120,101,192,38,71,57,128,38,130,154,-65,189,79,158,0,58,113,198,226,171,1,128,96,64,25,224,213,10,64,144,-0,58,115,149,160,28,1,80,32,155,107,0,80,64,72,82,21,128,128,0,-53,160,128,0,55,128,225,0,80,121,127,128,17,128,202,3,80,32,35,54,-192,17,128,203,113,155,234,66,1,112,157,145,126,2,95,54,55,70,30,2,-53,57,51,73,108,0,57,66,117,233,253,1,170,131,129,41,144,97,2,58,-54,55,129,9,128,74,80,63,224,65,14,0,66,137,189,64,118,74,121,70,-213,231,211,0,0,64,64,47,138,154,96,86,2,58,54,55,193,77,0,66,-169,59,238,215,4,158,5,96,8,153,60,2,95,54,54,203,29,233,0,3,-200,92,248,87,8,128,207,96,8,4,95,54,54,32,95,170,226,224,60,7,-246,54,2,107,20,130,215,128,12,96,230,6,64,95,49,53,52,32,95,170,-237,244,109,0,96,86,0,55,224,83,0,243,162,0,96,89,192,70,224,44,-2,165,200,192,49,64,255,130,56,226,19,3,194,206,0,58,96,39,194,203,-98,102,64,252,160,45,107,95,1,51,54,104,204,107,151,193,56,225,125,7,-233,81,1,225,125,1,96,37,75,217,225,255,9,64,101,194,138,129,235,64,-44,77,141,2,95,54,51,107,179,201,173,116,184,96,138,238,43,27,31,67,-97,110,110,111,116,32,101,120,112,97,110,100,32,35,105,102,32,100,105,114,-101,99,116,105,118,101,32,105,110,32,102,1,105,108,238,0,4,206,2,2,-95,49,51,108,58,100,121,224,93,17,110,110,1,32,32,251,232,3,224,166,-1,2,66,32,95,65,2,106,230,97,238,97,153,64,183,0,53,65,68,112,-198,0,50,64,102,225,82,0,233,130,0,128,222,3,55,48,32,95,78,7,-224,227,23,31,87,97,114,110,105,110,103,58,32,116,114,97,105,108,105,110,-103,32,99,104,97,114,97,99,116,101,114,115,32,97,102,116,1,101,114,64,-248,239,21,29,143,80,97,46,3,115,105,111,110,225,35,59,225,28,2,130,-138,97,215,1,95,54,84,49,225,214,54,4,112,97,114,115,101,225,213,91,-227,184,3,225,213,24,64,20,171,240,225,222,11,1,95,54,84,251,225,229,-116,225,45,68,225,223,4,2,95,49,50,193,29,64,0,1,58,54,64,44,-108,32,193,5,64,8,1,52,52,64,99,0,51,237,109,14,1,47,47,128,-81,143,191,161,53,0,58,97,53,64,73,5,49,49,32,95,53,53,68,70,-2,54,54,52,97,122,224,17,1,2,51,50,56,64,10,64,103,0,48,192,-19,2,53,53,57,80,49,0,53,232,221,2,1,124,124,160,97,1,50,55,-64,26,64,62,68,125,160,43,162,153,225,161,1,0,32,96,213,96,77,96,-52,64,100,118,198,128,151,135,6,224,151,4,0,51,224,151,45,0,38,178,-187,224,151,15,240,62,1,224,151,16,142,118,96,151,173,154,1,51,50,96,-114,98,129,224,10,12,224,145,9,80,4,0,51,242,239,0,224,198,1,224,-150,7,96,232,96,233,224,135,0,129,229,224,54,5,2,54,54,49,225,15,-6,0,54,110,131,130,107,224,38,5,128,21,224,82,4,104,236,96,0,224,-44,7,247,140,1,0,52,120,85,2,50,48,54,67,76,64,31,2,49,57,-53,104,169,194,147,128,53,0,49,130,154,224,17,3,0,52,171,234,1,95,-53,78,194,224,221,1,194,6,0,58,96,228,225,72,28,225,94,31,225,240,-1,1,62,61,161,240,224,144,1,5,52,50,49,32,95,52,134,243,225,155,-14,65,60,193,155,224,200,1,1,53,50,224,55,1,224,117,21,0,60,224,-117,9,1,55,55,224,60,21,64,117,245,1,1,224,55,1,72,221,224,116,-29,0,61,224,116,9,225,185,1,224,61,24,0,33,224,61,9,105,223,192,-61,0,58,98,81,225,165,6,226,45,2,1,53,57,138,61,224,29,1,226,-144,7,66,43,226,144,38,227,126,5,98,63,128,50,0,58,96,6,224,141,-6,225,84,12,69,4,225,84,8,1,57,52,162,197,225,139,16,69,159,226,-1,10,224,55,2,0,58,96,209,225,16,17,64,120,225,16,20,0,53,65,-212,225,16,7,65,70,225,16,38,96,50,0,58,96,6,227,68,17,224,228,-13,226,230,11,0,54,103,46,225,27,20,220,189,224,54,4,70,114,1,54,-53,195,235,224,56,12,0,51,224,56,11,0,49,71,214,192,56,0,58,97,-21,101,236,67,165,0,54,138,159,0,52,224,33,0,3,95,54,52,55,224,-11,0,0,49,106,223,128,11,2,50,48,48,224,35,1,96,241,2,50,48,-56,192,17,109,58,64,9,106,253,1,83,32,85,214,238,67,0,0,80,137,-16,227,9,1,12,73,110,116,101,103,101,114,58,32,100,105,118,105,105,163,-3,98,121,32,48,231,247,0,206,127,108,186,64,64,83,243,122,90,0,49,-64,4,135,115,101,168,224,17,8,128,64,238,37,5,136,16,136,255,117,149,-64,39,248,14,0,192,16,184,238,140,252,105,40,226,37,0,105,240,84,96,-197,169,108,215,251,55,1,128,96,96,51,1,95,54,102,187,2,95,54,53,-108,89,128,23,64,96,173,17,1,53,52,76,143,0,65,64,27,1,95,54,-162,100,233,152,2,0,39,192,5,160,71,184,29,154,90,136,210,0,85,223,-177,96,56,2,95,54,53,65,191,149,62,2,95,51,48,199,245,96,0,0,-58,97,166,1,10,65,160,212,64,69,2,95,52,49,64,47,0,50,66,125,-0,58,96,59,253,220,3,64,9,0,89,161,114,224,19,0,238,71,0,64,-63,2,67,32,79,247,88,1,247,72,5,141,165,129,45,236,68,6,193,99,-160,98,118,14,98,148,1,50,48,165,56,129,30,143,60,64,28,67,86,224,-28,0,96,252,68,80,110,68,82,219,0,48,160,11,0,95,210,228,1,95,-51,150,41,185,29,130,13,0,58,97,110,141,143,224,208,1,207,133,174,188,-207,2,224,7,2,65,231,2,52,51,52,70,200,0,51,96,130,129,224,0,-80,97,150,96,118,128,6,193,158,96,26,78,87,64,21,64,59,0,48,71,-123,0,52,90,180,128,36,192,27,128,28,214,210,96,58,0,39,160,46,96,-26,108,53,226,155,0,139,134,128,12,188,112,239,165,5,243,238,1,64,69,-67,250,2,95,52,50,192,93,161,119,161,122,225,226,0,96,17,64,87,161,-190,162,150,176,127,128,95,160,163,128,220,160,12,65,117,128,37,66,184,96,-217,155,14,224,197,16,64,39,64,48,192,243,225,16,3,137,248,227,188,0,-204,111,0,53,160,202,80,224,98,15,240,57,0,98,225,113,219,99,118,1,-67,39,66,135,131,65,162,141,224,78,4,224,13,4,0,58,99,140,113,229,-228,135,6,7,108,97,115,116,58,32,91,93,100,121,129,41,2,85,32,64,-82,215,227,156,0,0,58,96,8,101,46,224,81,0,0,79,114,229,64,119,-0,58,97,10,227,66,0,133,23,0,75,98,121,134,185,99,235,0,58,97,-252,176,125,70,101,196,121,227,50,1,114,48,98,40,1,52,48,100,217,0,-52,187,180,128,14,0,58,100,14,160,103,129,248,5,95,50,48,55,32,64,-128,93,133,119,224,27,7,96,135,1,52,54,197,236,0,50,64,255,138,88,-136,237,1,95,49,67,51,0,58,102,1,96,170,1,75,51,115,211,121,50,-128,251,77,212,128,89,206,34,75,61,97,254,195,45,154,143,250,255,0,162,-100,66,96,250,249,2,109,40,0,35,171,214,192,51,162,141,250,189,2,128,-38,67,252,64,39,0,85,67,53,231,42,2,194,161,224,50,10,224,89,0,-154,211,224,89,16,0,49,130,129,96,89,74,162,224,89,1,128,19,74,126,-192,19,167,87,101,235,129,87,0,82,65,255,203,146,84,251,129,39,0,58,-104,136,116,51,64,216,1,95,54,68,52,70,49,98,245,96,49,178,33,1,-95,49,105,90,1,95,53,84,118,0,58,64,110,224,54,21,171,64,0,53,-84,64,224,53,1,162,113,224,108,17,172,188,0,53,84,33,224,54,1,211,-17,128,1,251,70,3,162,122,128,1,71,49,160,16,255,177,3,128,253,224,-47,0,231,59,0,134,49,198,12,224,2,1,212,87,224,91,4,193,249,224,-22,0,164,60,128,98,229,146,0,0,64,157,0,192,57,133,98,224,117,0,-230,112,4,224,162,0,70,31,130,90,105,95,96,61,64,27,1,95,51,67,-177,67,249,230,77,1,160,171,1,79,32,116,45,97,196,225,65,5,199,217,-0,58,97,93,135,64,234,101,6,233,248,11,0,54,102,51,233,119,2,0,-54,208,24,163,80,234,136,4,0,53,64,29,0,53,84,151,2,95,53,53,-73,72,189,26,64,220,238,165,7,162,210,3,95,53,54,52,160,51,145,174,-64,65,104,105,133,60,69,115,204,200,101,81,192,108,64,23,99,191,224,90,-59,0,58,96,8,129,21,224,209,5,99,43,166,190,223,6,103,77,245,73,-2,229,125,1,0,100,121,61,0,100,241,182,0,96,53,225,104,5,194,2,-224,100,3,75,145,240,91,8,0,56,80,155,129,75,225,86,5,65,216,67,-199,100,0,241,171,13,1,44,41,209,253,235,131,5,0,52,232,233,1,96,-137,162,164,225,85,2,161,58,69,26,2,95,53,48,92,250,0,51,79,127,-233,215,2,101,51,246,3,3,0,90,101,133,96,174,72,156,236,110,5,96,-0,227,103,2,225,16,10,224,18,10,225,32,7,228,182,1,66,215,165,6,-233,182,0,224,45,6,97,73,76,216,129,88,224,70,12,64,194,96,34,224,-171,7,224,93,9,224,189,7,230,14,13,98,9,225,139,12,226,19,5,230,-42,0,132,2,0,67,138,195,129,87,229,225,0,96,101,72,158,101,220,98,-110,75,171,197,107,224,179,0,65,210,0,56,237,29,9,225,168,0,224,5,-3,139,45,0,75,128,45,94,211,224,69,13,2,64,75,51,224,26,6,0,-57,224,26,1,84,31,224,26,13,68,101,0,48,232,134,2,252,153,70,7,-67,112,112,73,102,100,101,102,252,151,0,4,51,56,58,49,50,161,82,231,-220,0,165,169,129,79,235,14,1,160,13,64,10,225,83,0,107,182,65,85,-109,103,225,9,13,225,80,7,170,185,160,81,166,19,64,13,161,200,225,100,-7,64,24,252,119,1,224,111,38,64,214,64,1,67,140,197,141,98,181,92,-26,2,95,54,49,136,237,192,48,227,212,0,224,113,3,238,115,0,96,169,-224,69,1,131,47,96,72,194,33,2,32,95,54,106,226,211,119,224,89,10,-225,226,104,1,52,53,225,226,1,0,58,101,235,252,26,2,231,199,2,0,-80,137,18,134,157,227,166,0,231,84,6,71,78,137,41,234,168,4,192,21,-203,241,64,69,81,143,167,87,0,58,68,252,128,118,149,64,120,88,116,211,-0,52,86,247,65,209,0,51,67,47,101,137,225,26,1,2,39,96,95,128,-184,0,58,103,1,74,172,2,53,52,54,136,160,0,53,80,139,96,168,0,-95,140,85,97,229,64,23,0,56,228,53,3,25,69,120,112,101,99,116,101,-100,32,101,110,100,32,111,102,32,105,110,112,117,116,32,40,69,79,70,229,-218,0,0,58,103,156,252,47,16,86,42,107,3,226,14,3,175,114,228,168,-12,3,35,108,105,110,248,114,0,166,23,248,113,1,0,49,210,100,224,64,-7,81,162,242,18,2,96,43,0,51,100,172,248,111,0,64,141,138,24,80,-242,64,251,194,119,131,165,139,4,234,217,5,1,64,35,136,60,128,212,0,-80,66,161,101,175,161,226,193,164,128,26,1,51,48,128,135,243,127,0,1,-64,89,226,42,3,162,12,229,181,1,78,47,224,92,1,224,10,0,235,137,-13,93,27,129,18,203,140,227,241,0,235,143,10,169,104,64,26,75,127,64,-153,128,172,224,26,0,224,108,1,66,186,98,130,119,37,79,230,226,194,3,-140,125,232,118,1,236,131,15,192,87,224,204,6,224,159,13,169,145,175,9,-103,55,224,124,0,66,57,225,75,11,194,14,239,159,0,128,150,81,211,224,-134,9,128,86,96,117,195,70,224,107,17,225,210,4,128,0,2,58,54,51,-140,13,2,65,32,58,96,139,5,10,65,32,75,32,58,96,42,98,235,209,-205,128,235,130,72,224,144,12,67,29,165,170,225,6,8,139,79,0,95,178,-93,192,7,192,231,135,130,230,74,1,224,61,1,191,58,144,40,1,95,54,-159,212,2,58,54,50,238,202,0,104,30,201,30,112,185,197,131,134,24,96,-56,0,58,96,56,74,110,161,86,232,252,33,172,93,233,178,3,64,111,92,-14,235,8,10,107,5,234,72,0,160,145,234,18,19,96,123,250,194,7,163,-246,224,145,12,224,48,12,237,87,3,231,24,0,134,134,96,49,67,235,232,-227,5,97,22,194,243,167,87,225,139,3,231,90,6,144,207,101,173,96,131,-230,239,6,82,156,106,193,135,39,224,217,0,245,66,3,224,7,7,198,2,-129,211,231,23,14,128,0,231,8,101,2,51,55,55,231,8,0,0,58,97,-192,241,24,4,132,32,225,95,5,225,104,3,193,160,225,137,2,128,47,230,-203,0,254,94,1,0,56,164,143,66,233,203,38,82,165,1,95,54,99,202,-114,172,96,33,90,151,0,56,100,217,242,196,0,224,69,1,224,60,13,213,-209,128,143,97,85,160,47,230,142,14,5,109,97,99,114,111,32,166,142,194,-26,166,145,129,250,224,63,21,1,32,101,199,66,237,142,0,224,48,0,96,-73,230,213,1,224,169,6,230,228,10,224,86,2,23,97,114,103,117,109,101,-110,116,115,44,32,98,117,116,32,119,97,115,32,103,105,118,101,110,160,102,-224,89,5,160,244,194,55,162,68,165,156,64,2,2,95,50,56,100,166,64,-154,147,73,160,167,234,109,2,202,93,181,243,160,248,0,53,135,100,239,143,-3,160,96,98,182,95,240,197,236,125,145,101,30,2,53,57,48,106,135,231,-102,2,165,183,244,250,4,66,27,64,95,82,66,239,242,6,96,39,224,97,-9,68,91,184,31,1,95,54,93,206,193,76,165,246,133,141,101,70,0,53,-134,95,228,120,0,0,58,99,99,73,36,2,52,49,52,67,228,0,58,96,-64,178,16,71,224,0,75,67,236,0,55,227,114,2,4,101,120,112,97,110,-89,101,4,44,32,97,116,32,227,128,70,4,72,97,115,104,68,109,180,234,-139,0,2,53,58,54,129,221,224,137,129,109,195,224,139,128,0,51,225,23,-132,66,87,0,58,98,143,139,187,2,54,50,49,168,26,64,22,180,162,229,-65,0,224,9,1,99,87,0,54,117,171,121,213,0,95,71,143,2,95,53,-57,100,223,2,95,49,56,64,7,85,34,2,95,49,56,102,122,0,58,96,-88,232,149,3,74,223,96,38,160,85,216,168,67,181,224,53,2,136,214,226,-222,16,228,98,2,226,222,118,224,137,112,226,222,10,224,139,114,226,222,8,-224,139,114,216,204,0,58,101,96,226,70,19,2,114,101,112,64,129,64,167,-226,72,120,224,139,114,226,74,10,224,141,116,129,190,83,76,224,148,128,0,-58,107,40,133,44,1,52,57,64,152,106,245,0,54,89,119,0,58,64,165,-64,27,2,73,32,58,96,16,112,206,0,48,111,119,0,49,82,206,1,54,-49,149,245,0,55,97,102,139,46,85,120,224,11,0,0,55,192,11,0,58,-96,6,64,63,1,49,51,69,165,169,143,0,54,225,4,2,6,110,111,32,-102,105,101,108,201,180,96,29,144,87,0,53,64,69,128,105,0,51,88,91,-96,11,0,58,96,6,96,145,0,49,67,0,0,50,77,71,2,49,54,56,-224,81,2,25,67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,111,-110,46,73,110,116,101,114,110,97,108,64,98,224,39,1,10,82,101,99,83,-101,108,69,114,114,111,114,96,123,195,100,134,69,195,100,0,73,141,194,64,-28,163,135,252,93,0,0,58,106,149,177,143,122,201,147,238,86,131,69,249,-64,8,0,53,93,250,1,95,50,120,133,230,82,0,234,221,1,73,158,107,-96,146,92,238,114,3,198,134,96,37,109,133,1,57,51,64,10,97,173,176,-1,0,58,109,76,137,73,64,23,1,48,49,192,28,2,95,54,48,100,195,-144,141,64,126,2,95,49,53,106,242,0,48,98,135,160,35,97,99,160,11,-97,181,160,11,224,100,0,0,58,96,6,217,40,115,128,110,141,0,50,66,-63,2,95,54,48,128,136,243,99,3,243,139,3,3,95,54,48,56,95,77,-96,253,1,95,53,107,27,224,6,5,0,58,64,107,64,95,1,85,32,71,-199,0,52,94,107,96,21,249,158,2,187,5,224,114,4,224,101,6,0,54,-224,101,14,0,58,64,214,224,94,3,161,184,91,39,224,94,32,0,52,74,-249,224,94,15,130,223,225,208,0,224,69,3,128,60,0,49,225,1,8,0,-58,65,131,160,53,65,248,128,46,64,199,64,202,2,50,32,95,130,51,64,-212,96,9,157,17,129,241,224,66,1,200,236,92,45,0,49,89,135,0,58,-64,59,224,86,13,0,67,124,91,96,77,224,88,25,130,81,97,48,150,146,-247,111,0,64,29,226,13,0,1,95,53,92,174,136,235,83,118,140,208,179,-47,174,148,64,5,236,207,0,78,104,0,53,90,248,188,197,128,30,64,22,-224,155,0,193,206,225,2,14,173,77,160,170,125,36,224,40,13,178,135,2,-64,64,64,125,7,99,66,65,151,67,61,2,64,64,58,96,6,99,227,2,-95,53,57,113,32,2,57,55,32,64,22,130,116,5,35,49,48,49,32,58,-96,19,129,8,96,27,130,49,3,85,32,75,51,225,20,5,0,58,96,141,-0,10,84,234,0,58,97,18,96,37,0,65,96,51,193,163,234,44,0,109,-76,129,25,175,146,138,41,0,54,64,191,226,51,0,99,239,129,213,161,23,-128,103,129,222,192,144,234,137,10,145,131,146,98,170,137,110,63,113,33,211,-158,0,58,100,116,224,165,1,64,97,114,154,160,141,144,77,190,31,0,64,-78,163,195,55,1,95,53,190,150,2,95,53,56,176,96,119,65,96,35,226,-42,6,160,43,160,147,0,58,82,148,129,114,224,101,7,0,53,90,227,160,-101,99,252,224,101,0,249,209,1,146,141,224,103,19,197,82,225,83,0,126,-12,240,2,0,224,164,21,248,1,1,228,16,3,0,51,83,228,224,254,12,-99,116,0,66,89,97,224,85,20,128,12,78,255,230,116,1,31,87,104,101,-110,32,108,111,111,107,105,110,103,32,102,111,114,32,97,32,110,111,110,45,-101,109,112,116,121,32,115,101,113,28,117,101,110,99,101,32,119,105,116,104,-32,115,101,112,97,114,97,116,111,114,115,58,92,49,48,38,92,57,38,102,-166,0,58,97,123,135,186,116,67,102,27,179,220,0,48,207,99,117,142,244,-48,2,224,41,8,0,49,247,193,1,243,200,2,0,58,116,88,128,92,254,-175,3,71,122,149,31,130,89,230,171,6,132,233,254,17,1,241,169,22,241,-168,11,216,122,241,134,16,2,103,111,116,192,47,224,181,6,0,58,64,211,-64,180,121,116,0,89,100,108,65,153,0,83,224,164,3,240,214,7,0,64,-131,49,243,216,42,14,112,111,108,121,112,97,114,115,101,45,49,46,49,50,-47,64,43,5,84,101,120,116,47,80,64,19,201,106,4,49,48,57,58,55,-128,174,177,197,113,142,0,51,69,63,224,14,1,246,188,3,115,152,224,25,-12,97,124,64,213,64,25,248,13,8,83,196,96,57,165,140,248,161,9,110,-223,151,50,122,141,0,64,99,248,241,168,0,96,64,192,12,128,44,100,98,-97,102,0,50,72,111,1,53,55,181,120,224,134,51,68,0,224,133,31,96,-43,224,132,75,0,49,156,19,225,11,30,96,44,224,134,8,137,202,224,134,-52,0,55,166,236,224,133,27,96,43,224,132,16,130,235,240,209,1,101,197,-128,148,229,101,1,252,182,5,227,94,12,8,44,59,40,41,91,93,123,125,-96,195,98,230,157,0,116,145,229,23,0,71,221,224,99,6,253,35,3,0,-53,224,233,6,1,64,35,181,15,229,203,1,128,6,1,95,49,69,246,128,-97,157,10,165,132,228,55,19,13,66,97,100,32,99,104,97,114,97,99,116,-101,114,58,164,13,181,125,220,124,168,85,250,40,1,161,164,128,128,251,90,-0,213,104,252,3,15,140,133,160,33,136,211,161,100,160,46,160,71,224,214,-0,64,62,64,210,149,124,230,227,3,231,129,0,126,112,68,229,165,30,97,-234,96,103,231,159,1,225,232,0,162,18,193,241,192,91,213,143,224,48,8,-224,46,14,129,14,226,103,6,224,62,10,96,54,254,237,30,1,95,39,229,-135,1,160,215,224,98,27,96,79,105,128,165,20,128,47,3,64,67,32,79,-230,181,2,226,168,23,22,33,64,35,36,37,38,42,43,46,47,60,61,62,-63,92,57,50,38,94,124,58,45,126,160,145,129,226,193,223,170,119,97,220,-224,204,15,1,101,69,224,58,12,253,142,0,226,66,2,227,231,9,131,133,-224,110,4,226,14,8,192,130,225,135,11,226,22,12,231,53,16,0,43,231,-46,4,226,45,5,226,37,7,224,192,30,131,156,224,192,95,0,45,224,192,-35,224,140,76,0,79,139,220,221,1,224,136,31,196,162,224,221,19,3,109,-105,115,115,73,212,7,43,47,45,47,100,105,103,105,200,173,224,51,19,14,-97,102,116,101,114,32,101,32,105,110,32,102,108,111,97,224,50,27,6,108,-105,116,101,114,97,108,196,253,64,42,100,255,154,28,159,1,161,1,224,252,-20,224,81,1,2,46,46,46,227,207,1,64,0,227,153,0,160,0,0,89,-129,107,98,73,0,85,101,161,65,13,171,217,225,240,20,10,110,100,32,111,-102,32,105,110,112,117,116,64,227,197,176,224,47,15,2,115,116,114,65,65,-160,226,160,46,96,145,198,140,97,251,129,218,97,150,233,38,7,194,33,247,-231,10,64,213,109,98,97,245,167,22,97,251,107,178,97,223,87,233,234,17,-80,3,49,56,58,52,212,19,228,255,3,80,53,110,157,102,16,192,198,251,-50,5,64,36,95,234,1,53,48,64,39,230,240,2,65,140,114,116,128,60,-238,248,0,0,67,103,100,0,51,82,16,106,115,96,0,193,183,193,121,64,-91,225,173,13,160,166,0,58,107,249,115,191,236,12,1,0,54,64,10,0,-54,111,78,1,53,55,167,55,0,53,235,222,12,0,97,225,202,0,71,181,-128,83,101,137,234,247,7,236,59,2,224,70,1,3,98,105,110,100,194,49,-236,138,2,144,211,224,17,3,76,9,0,54,70,181,224,143,14,224,132,3,-4,32,104,97,115,32,116,115,3,110,97,108,32,198,200,65,141,224,150,41,-237,58,5,97,45,143,240,238,69,3,0,53,83,241,238,222,12,238,251,19,-0,58,64,213,143,163,142,87,0,58,96,71,237,152,8,64,240,162,231,237,-239,2,165,208,224,207,3,112,81,224,20,7,128,228,224,196,2,224,240,12,-225,206,14,0,44,109,145,0,39,232,11,0,224,152,14,134,117,224,138,4,-100,90,224,27,14,139,57,224,27,12,0,49,82,222,224,28,16,149,18,224,-28,15,133,23,224,28,14,169,130,224,28,13,224,144,18,97,83,224,27,14,-131,198,224,27,14,99,165,224,83,14,192,55,101,109,64,27,102,136,224,157,-15,231,19,0,224,28,10,237,246,0,64,24,0,52,68,46,239,164,5,229,-185,19,18,117,110,114,101,99,111,103,110,105,115,101,100,32,101,115,99,97,-112,101,240,157,1,1,105,110,226,8,4,1,58,32,73,133,195,221,233,203,-0,208,48,224,151,7,76,35,224,27,16,97,138,224,27,14,98,54,224,27,-14,97,165,224,27,14,97,109,224,27,13,0,55,210,58,224,27,11,97,91,-224,27,14,97,249,224,27,14,224,195,18,0,55,224,167,18,67,240,224,27,-16,106,104,224,27,14,177,129,228,193,7,81,200,85,15,230,206,78,5,51,-48,56,58,49,52,163,252,81,73,227,251,5,224,141,8,121,200,229,230,23,-196,137,0,35,130,216,236,1,13,0,39,66,110,1,86,84,228,120,0,224,-124,26,108,77,224,124,32,0,51,224,124,23,1,85,83,228,245,3,2,53,-53,53,224,4,18,224,154,22,111,221,230,254,34,224,67,12,66,57,225,91,-34,160,186,224,154,61,224,86,1,168,184,226,9,61,224,67,22,112,47,224,-154,32,199,160,224,242,25,226,40,37,124,227,224,174,27,225,228,59,224,242,-38,224,243,32,100,63,224,156,54,101,183,224,156,34,177,92,227,188,29,120,-70,227,188,33,128,248,227,188,17,4,83,79,72,39,32,160,9,192,8,1,-84,88,192,9,0,73,192,8,1,89,78,192,9,5,85,66,39,32,111,114,-160,12,0,80,240,251,1,228,119,73,138,23,224,186,17,0,82,228,119,9,-225,220,90,102,208,224,197,33,248,250,0,225,31,25,104,10,224,157,55,224,-67,28,226,122,1,228,253,1,225,101,15,2,78,85,76,225,240,1,2,78,-65,75,225,241,35,104,80,228,64,34,225,241,23,1,76,70,230,230,35,231,-99,37,174,249,224,123,16,0,72,231,98,82,84,100,224,124,20,0,71,226,-234,40,225,122,39,165,32,224,218,73,105,227,224,218,18,1,70,70,226,94,-1,0,70,224,230,1,232,74,20,225,249,60,224,67,22,230,96,37,216,128,-225,150,24,230,251,58,226,216,38,209,65,231,83,62,224,155,22,68,80,224,-155,33,168,49,224,243,63,229,95,22,231,150,38,193,211,225,56,25,77,139,-224,88,34,192,245,227,108,63,224,246,22,224,157,38,212,234,227,178,12,2,-111,110,101,83,21,99,173,0,69,232,39,0,2,69,79,84,192,9,1,78,-81,192,9,1,84,66,192,9,0,77,227,225,1,2,69,83,67,227,226,14,-224,197,23,234,52,59,226,0,37,0,49,225,10,2,224,88,59,224,224,59,-224,156,1,234,52,35,226,2,28,229,99,37,0,52,224,174,38,129,74,224,-85,23,85,208,224,85,35,134,92,224,86,25,228,149,37,183,5,224,86,25,-238,105,37,146,129,128,20,231,13,15,1,68,69,233,109,2,2,68,76,69,-224,12,2,6,67,91,49,46,46,52,93,227,62,9,228,67,23,239,15,38,-164,246,234,175,94,237,199,38,198,204,225,65,17,1,67,82,225,51,1,2,-67,65,78,225,46,40,228,104,106,250,92,0,233,125,72,233,124,23,0,66,-226,110,3,0,66,233,125,2,228,83,62,225,39,23,236,173,37,196,242,224,-207,17,1,65,67,236,159,2,2,95,50,55,186,38,0,49,95,195,0,52,-97,148,6,53,55,54,32,95,50,48,195,225,224,34,13,0,55,224,34,2,-90,143,224,36,9,86,101,1,95,48,160,152,98,90,66,201,245,239,1,3,-95,53,55,57,224,68,2,225,9,8,86,133,93,176,0,49,91,104,4,67,-32,95,52,50,90,154,106,116,0,35,122,202,2,67,32,95,64,134,160,18,-0,57,104,50,246,176,33,249,227,4,4,99,116,114,108,45,182,181,8,109,-97,108,102,111,114,109,101,100,150,166,0,94,129,44,246,167,3,64,86,193,-113,96,113,64,239,64,237,4,49,53,52,32,95,145,187,0,49,89,150,96,-5,128,172,193,112,225,170,1,187,122,224,17,3,128,40,224,17,2,152,48,-228,123,4,212,106,224,35,1,224,34,8,132,158,224,17,3,206,53,224,17,-1,224,88,8,195,7,227,114,7,224,234,2,158,253,68,33,225,103,6,253,-208,18,218,10,225,110,4,194,127,0,58,123,156,1,10,65,118,138,0,83,-66,249,1,53,55,226,227,4,6,100,101,99,105,109,97,108,96,47,65,96,-2,50,48,54,64,123,159,123,66,118,0,48,92,201,1,50,48,97,56,3,-95,49,57,53,94,176,160,200,0,54,102,209,0,53,67,64,0,58,66,106,-64,103,126,137,129,172,64,78,157,78,190,251,106,115,0,58,98,164,224,145,-18,2,111,99,116,224,143,37,161,87,0,53,148,41,192,142,0,55,224,100,-20,2,104,101,120,224,242,36,131,245,1,95,53,149,215,192,99,0,54,156,-90,227,70,3,5,95,49,52,57,32,35,126,185,100,102,0,57,71,162,153,-38,224,38,9,123,118,224,38,0,187,76,64,174,224,39,6,102,228,224,39,-0,153,33,3,95,50,50,53,248,70,2,8,100,105,103,105,116,84,111,73,-110,190,39,227,44,13,192,16,163,54,64,86,193,206,224,49,28,96,176,224,-49,22,64,39,96,255,65,33,0,53,129,133,0,39,127,237,98,18,98,21,-254,175,0,64,0,128,27,64,5,228,160,1,100,205,66,237,126,69,68,175,-224,44,2,128,42,227,52,1,153,134,0,39,93,223,2,32,66,39,96,5,-2,32,95,52,99,164,253,246,3,91,199,225,230,15,64,17,121,200,0,95,-64,196,224,37,17,160,129,1,95,50,105,245,64,46,96,52,2,51,57,51,-64,7,0,80,197,109,224,64,20,160,108,131,20,229,65,20,3,92,49,48,-38,227,223,0,108,245,6,114,32,109,111,114,101,32,197,49,255,86,7,0,-32,98,6,0,115,163,253,0,58,98,244,158,252,226,157,18,163,149,255,39,-0,1,95,50,82,10,131,222,224,14,0,226,185,28,226,181,25,64,104,159,-69,171,229,225,227,0,97,226,224,125,1,0,52,79,40,5,67,32,95,50,-51,51,64,65,65,203,231,102,2,1,96,95,196,224,230,211,3,64,98,167,-41,229,58,2,225,97,20,0,69,255,72,0,10,110,32,105,100,101,110,116,-105,102,105,101,191,71,91,83,225,104,5,1,79,32,102,65,221,76,1,58,-53,92,144,96,203,1,52,54,132,235,2,95,49,54,65,10,0,58,96,139,-96,25,1,54,54,100,132,64,1,0,80,64,146,71,190,130,183,197,218,1,-53,53,132,184,0,53,135,248,99,22,0,58,97,19,128,64,0,55,229,84,-0,98,111,1,95,53,140,246,2,54,32,89,100,220,5,83,32,73,32,64,-90,98,110,192,6,162,99,192,54,99,168,96,62,0,89,69,152,99,111,64,-13,64,61,224,59,1,166,123,131,186,99,127,96,103,64,0,2,89,32,66,-65,154,0,80,230,149,7,225,89,19,9,102,97,105,108,101,100,32,116,111,-32,124,183,3,32,97,110,121,79,180,20,116,104,101,32,112,111,115,115,105,-98,108,101,32,99,104,111,105,99,101,115,58,66,231,129,105,99,246,1,51,-32,122,30,65,202,3,56,52,32,85,99,218,129,128,224,112,19,224,69,2,-224,67,1,96,13,1,50,57,164,60,132,106,68,17,128,10,164,74,129,36,-224,19,2,0,83,161,15,228,178,1,159,253,224,35,3,225,62,8,224,28,-3,0,90,160,204,192,40,128,78,96,11,0,39,103,27,192,93,1,95,49,-109,231,0,80,160,65,192,73,226,70,0,66,12,103,85,128,69,0,80,70,-118,64,246,5,10,65,32,85,32,58,66,92,166,129,0,39,64,2,97,31,-0,49,196,191,0,90,96,1,224,82,0,0,53,68,217,128,119,96,40,69,-132,128,41,2,52,32,65,64,25,192,33,66,99,225,101,16,12,73,110,32,-97,32,115,101,113,117,101,110,99,101,225,114,15,133,117,101,148,66,237,73,-158,197,224,0,50,224,157,21,161,15,101,83,85,181,160,159,96,38,192,35,-65,2,134,87,98,14,133,128,0,51,98,29,224,88,17,0,58,96,133,128,-51,75,124,121,133,227,23,0,133,207,194,101,75,10,80,43,250,184,0,0,-53,193,141,165,35,1,32,85,195,232,64,106,68,165,1,57,57,128,86,0,-51,132,181,236,94,1,231,45,0,131,63,234,228,0,0,90,162,213,64,238,-160,95,96,0,0,58,96,11,97,222,0,75,96,196,0,58,97,167,96,16,-0,73,97,253,164,88,0,48,196,246,65,39,132,60,101,66,2,95,51,48,-160,240,0,53,233,145,0,235,247,6,64,247,3,83,32,64,82,227,203,3,-225,225,1,0,80,67,174,9,46,115,97,116,105,115,102,121,58,32,131,199,-237,6,7,96,95,130,155,99,62,68,218,1,52,56,161,21,224,75,1,6,-82,97,110,32,111,117,116,67,248,10,105,110,112,117,116,32,40,69,79,70,-41,137,121,202,28,64,73,130,209,1,95,51,76,128,101,14,224,153,12,0,-110,164,75,96,63,139,37,3,95,51,50,57,160,253,3,64,95,51,51,96,-62,64,11,0,58,96,6,163,57,229,5,1,102,95,161,1,163,210,227,201,-11,99,192,99,195,96,16,0,58,96,106,64,160,1,52,56,96,109,98,196,-170,231,229,50,0,0,58,96,173,64,37,97,36,99,92,224,35,2,96,234,-161,243,193,68,224,14,6,232,213,7,1,95,49,97,3,102,29,0,50,97,-239,128,10,193,36,64,114,130,145,0,95,192,18,224,238,5,229,244,9,0,-67,162,133,0,64,192,181,229,231,4,3,95,51,51,52,192,127,1,95,50,-147,133,160,103,167,180,0,51,225,80,3,136,254,142,149,172,19,97,30,76,-22,0,58,96,6,128,50,68,8,224,122,0,134,100,108,21,128,130,160,80,-102,211,224,74,8,64,11,0,58,96,6,1,10,65,99,215,0,85,96,16,-64,45,97,220,0,90,128,242,65,171,69,67,0,58,96,82,161,246,64,20,-224,28,6,130,103,2,73,32,58,96,192,64,157,103,79,0,52,67,88,67,-249,108,49,0,80,66,26,0,80,66,91,98,74,224,12,0,110,254,224,45,-0,129,235,130,83,133,83,230,49,6,96,197,129,120,133,15,96,140,69,168,-64,25,0,83,160,58,0,64,96,18,224,5,4,230,125,6,160,60,230,157,-2,230,139,14,129,195,224,35,1,224,116,2,194,231,224,114,0,105,163,244,-67,1,235,137,3,128,73,160,46,107,85,241,47,5,175,49,192,160,162,198,-134,83,2,49,56,50,128,46,100,214,64,5,96,91,165,44,3,64,64,64,-79,67,98,231,47,1,224,174,90,131,120,224,174,69,224,109,17,192,154,224,-42,0,224,118,44,96,61,66,136,167,16,231,137,2,2,79,32,35,66,186,-224,147,3,64,43,224,250,19,128,127,0,82,64,119,67,153,224,211,4,98,-159,0,39,96,2,99,163,98,234,128,39,224,132,36,225,23,1,64,1,0,-89,192,24,227,13,1,226,202,5,224,48,4,73,13,224,66,6,201,15,224,-63,9,70,247,245,128,0,161,246,224,194,1,101,220,2,95,50,53,71,138,-225,75,0,224,86,1,3,95,50,55,48,82,76,224,131,8,232,239,17,23,-87,97,114,110,105,110,103,58,32,67,97,110,39,116,32,102,105,110,100,32,-102,105,108,101,236,29,2,224,74,3,237,214,0,224,19,2,237,223,18,17,-51,52,38,32,105,110,32,100,105,114,101,99,116,111,114,105,101,115,73,81,-1,92,57,224,89,1,239,54,3,160,89,192,203,78,207,224,13,2,238,67,-18,224,80,2,225,210,32,224,183,20,18,49,48,38,32,32,65,115,107,101,-100,32,102,111,114,32,98,121,58,32,200,33,71,131,1,50,56,250,24,1,-198,213,97,180,165,75,224,88,16,6,109,105,115,115,105,110,103,97,97,224,-82,1,224,40,0,224,157,0,97,106,203,79,110,118,64,117,141,77,157,50,-129,55,67,110,110,68,64,143,224,39,6,0,51,105,241,224,157,3,235,134,-0,160,63,129,88,66,81,1,53,51,65,44,64,9,193,221,96,95,128,13,-2,95,53,52,70,166,169,205,131,117,160,19,128,0,113,207,68,201,1,95,-50,87,58,170,227,0,73,64,31,3,95,53,52,50,102,78,135,199,0,85,-170,189,2,95,53,52,131,130,0,58,96,31,166,168,108,199,0,95,105,108,-100,42,75,181,64,23,2,51,48,49,234,125,4,239,51,2,225,190,13,3,-57,50,38,47,239,64,0,173,29,0,58,96,114,1,10,65,224,93,0,224,-181,1,229,252,7,168,182,106,185,128,230,224,251,12,0,58,96,7,96,81,-0,58,65,64,167,47,225,131,1,73,23,64,8,1,95,53,117,44,65,159,-0,53,75,114,169,20,128,26,1,51,51,242,229,2,15,85,84,70,45,56,-47,47,82,79,85,78,68,84,82,73,80,128,196,135,129,228,25,1,1,95,-50,107,12,0,51,100,254,1,95,53,100,9,0,58,97,239,208,224,129,211,-108,58,224,145,4,1,95,53,76,71,96,80,134,119,197,80,79,232,3,64,-95,56,49,146,235,0,35,129,156,162,33,224,61,0,99,134,0,50,224,122,-1,226,93,6,225,52,0,183,189,128,241,192,181,128,167,224,199,3,97,30,-83,82,0,53,98,190,224,73,0,195,5,0,58,96,102,4,10,65,32,75,-51,69,210,0,58,96,38,7,10,65,32,94,103,101,116,98,65,114,170,180,-6,50,54,52,32,79,32,95,64,29,0,79,64,13,0,53,160,66,0,58,-97,1,181,36,128,230,0,50,64,51,226,51,12,225,121,13,244,132,6,20,-117,110,107,110,111,119,110,32,116,101,120,116,32,101,110,99,111,100,105,110,-103,236,58,2,97,209,65,135,64,123,130,241,138,15,81,178,1,53,51,65,-85,162,91,161,2,0,90,65,171,0,51,192,27,96,54,210,61,0,48,108,-115,78,35,1,95,53,82,49,67,79,135,89,0,85,64,47,138,56,64,54,-141,75,0,50,110,227,0,58,96,24,107,48,2,51,50,32,78,47,97,113,-0,49,130,10,0,85,96,35,1,95,49,110,27,100,203,75,1,96,92,2,-95,49,51,75,139,96,11,0,58,96,6,96,132,2,49,32,75,70,105,67,-30,1,54,56,225,8,2,23,67,111,110,116,114,111,108,46,69,120,99,101,-112,116,105,111,110,46,73,110,116,101,114,110,150,216,224,39,1,3,83,111,-109,101,224,35,0,97,40,161,153,64,215,106,198,161,31,148,41,139,69,73,-13,0,53,98,226,205,63,66,207,192,230,142,51,64,30,9,10,65,32,99,-97,116,99,104,32,58,96,63,130,251,226,238,4,67,121,0,49,203,153,66,-189,64,39,229,157,17,4,111,112,101,110,70,101,153,6,99,97,110,110,111,-116,32,64,16,165,165,225,224,1,96,126,235,29,0,227,237,5,64,109,163,-237,68,102,194,18,0,49,96,200,226,251,3,131,13,224,33,2,128,89,64,-90,130,55,229,204,6,85,236,228,6,7,65,47,134,4,224,5,0,0,83,-100,214,0,32,101,123,64,3,224,96,1,97,97,226,207,7,18,72,97,110,-100,108,101,32,97,108,114,101,97,100,121,32,99,108,111,115,207,10,227,187,-6,0,49,144,54,0,53,88,40,1,95,53,70,41,174,226,131,192,0,50,-98,190,0,58,96,212,131,176,0,65,67,176,64,22,99,127,0,66,78,110,-108,169,96,68,141,143,0,58,96,60,96,31,1,95,53,80,159,1,35,48,-64,52,64,29,11,10,65,32,65,46,119,114,105,116,101,32,58,96,26,67,-246,96,158,67,248,64,126,131,248,0,51,64,13,130,10,134,90,2,95,53,-48,67,106,2,49,52,32,64,76,128,101,64,187,10,10,65,32,116,111,70,-117,110,80,116,114,64,50,129,190,145,77,1,95,50,138,212,0,58,97,100,-173,134,130,101,65,200,129,139,225,142,4,3,64,95,53,48,110,254,73,200,-225,195,2,170,86,167,182,229,55,4,2,53,48,51,160,37,0,53,119,41,-2,95,53,48,199,103,133,69,71,127,120,94,67,225,229,123,0,110,200,119,-113,1,95,53,216,149,0,58,98,101,164,214,0,80,132,247,0,95,103,78,-160,5,101,1,0,58,96,47,227,98,0,228,116,3,1,95,53,90,16,128,-122,225,229,5,97,59,0,48,213,32,224,55,8,146,46,192,177,227,14,0,-162,126,0,95,68,241,128,160,64,177,78,135,4,79,46,112,101,114,93,10,-4,73,79,32,94,38,161,191,64,31,129,209,6,102,112,102,105,110,32,58,-64,118,128,14,2,110,101,119,64,14,129,208,8,94,97,100,100,95,70,73,-76,69,64,18,129,194,96,18,3,117,116,102,56,64,18,242,238,0,0,53,-87,157,64,166,64,89,165,117,64,32,129,188,202,91,225,188,0,232,247,3,-0,49,68,135,224,17,3,96,216,126,45,97,91,234,63,4,0,49,66,54,-100,191,224,23,7,0,57,198,180,224,24,5,88,68,224,23,8,227,125,1,-1,119,43,232,163,0,0,52,120,111,99,187,198,170,1,52,57,129,246,114,-237,225,111,3,194,34,226,120,8,0,58,98,149,101,252,1,49,48,98,255,-0,58,96,61,105,93,0,56,225,206,0,104,236,91,218,64,118,64,254,192,-6,0,49,70,137,128,118,0,58,96,6,99,52,4,73,110,116,32,58,96,-33,65,128,0,102,101,18,0,58,96,175,99,65,131,212,234,170,0,67,148,-162,37,228,151,0,1,95,51,65,171,200,83,122,167,155,81,160,18,2,58,-52,57,129,241,116,18,0,52,245,175,0,64,24,167,226,2,51,53,57,66,-232,97,22,130,138,1,54,50,224,11,0,2,52,56,48,187,195,2,52,56,-50,160,90,64,212,96,205,64,33,0,58,96,6,130,44,0,52,104,192,0,-51,81,96,0,58,64,34,128,22,85,97,90,75,0,66,99,13,0,51,121,-227,1,52,56,89,103,2,53,54,32,65,201,0,49,232,150,0,67,49,0,-51,90,76,0,80,64,165,165,218,155,13,96,246,114,141,67,87,75,108,227,-66,2,96,84,64,184,134,10,224,23,6,160,76,197,216,161,239,128,27,246,-52,0,160,24,192,52,1,95,52,94,147,128,21,82,54,129,131,102,21,4,-32,61,61,32,64,118,173,148,104,0,52,64,192,226,121,1,2,98,105,110,-197,230,224,61,0,173,134,240,162,0,233,48,13,65,11,0,51,233,162,1,-96,114,233,93,16,2,79,32,35,78,139,163,2,0,51,123,47,64,51,100,-180,64,12,225,54,0,224,237,1,240,36,4,65,162,169,15,116,153,96,33,-65,171,75,120,0,90,181,222,1,52,57,183,53,96,228,224,43,2,96,122,-2,95,51,52,104,196,0,51,103,148,96,37,235,180,0,64,39,130,119,70,-173,64,76,162,36,0,51,83,144,1,95,52,77,229,0,58,66,6,160,22,-98,26,105,226,116,53,225,139,0,64,18,0,52,95,144,231,136,1,112,107,-163,200,137,110,1,95,51,87,160,192,233,231,146,1,64,97,0,54,227,164,-1,184,88,0,83,107,158,140,159,2,67,32,60,87,171,64,44,224,25,12,-96,70,203,210,130,123,160,25,165,230,0,85,74,51,226,25,4,139,111,162,-186,232,124,0,160,43,96,131,226,74,6,64,99,160,48,128,36,192,219,192,-57,224,129,14,162,207,224,85,14,129,16,224,85,8,98,71,224,144,22,141,-252,224,58,19,236,230,2,224,145,3,100,115,224,171,12,164,183,224,112,14,-99,76,224,171,45,103,149,224,171,21,224,59,16,66,219,224,59,10,142,253,-160,0,165,185,98,103,0,58,96,6,226,77,0,110,228,70,205,99,221,66,-153,229,172,0,96,107,102,16,133,253,238,6,0,192,12,2,49,55,52,224,-17,0,1,64,75,111,114,169,247,64,65,114,145,107,145,224,23,0,224,24,-0,224,93,0,116,221,224,99,6,224,86,4,232,232,0,224,142,12,1,52,-56,64,117,224,47,4,224,24,2,0,52,108,173,160,21,129,1,133,237,64,-6,171,66,92,95,129,77,65,7,105,173,132,22,224,179,0,128,123,67,5,-128,17,96,96,96,23,96,84,68,6,120,34,96,6,100,7,0,85,227,29,-13,164,223,192,31,69,21,0,52,71,152,224,24,1,229,213,6,0,50,137,-134,96,91,132,229,0,80,169,90,103,224,68,135,82,244,0,52,81,33,4,-64,95,51,57,51,69,56,0,50,73,91,160,19,233,122,0,172,9,96,14,-140,233,96,66,224,63,2,96,108,160,10,3,49,57,53,32,219,181,97,10,-170,183,224,10,1,0,58,96,184,231,25,4,230,123,14,131,64,250,103,1,-254,122,0,108,172,117,177,227,235,2,160,27,97,34,160,49,229,42,4,230,-64,11,207,205,192,60,230,255,11,96,253,231,77,2,225,108,10,160,227,64,-0,114,152,0,58,72,53,99,39,69,236,3,95,52,55,56,69,235,64,80,-64,19,229,233,5,133,220,0,58,96,35,96,49,0,55,64,88,64,43,128,-10,0,52,156,167,128,10,96,53,128,10,74,97,128,10,70,211,192,10,128,-185,212,64,0,58,96,91,96,85,72,188,0,52,66,232,2,95,52,55,75,-193,96,36,137,206,224,142,0,1,57,49,161,186,230,124,4,160,58,206,81,-128,20,236,142,3,224,43,9,115,167,224,43,8,161,158,224,25,1,224,18,-1,1,52,54,169,87,98,13,128,185,222,165,250,139,1,191,196,64,28,188,-44,224,121,2,97,54,0,56,96,193,101,18,96,11,128,86,66,123,224,40,-5,224,55,11,116,155,160,10,181,5,231,130,3,1,52,51,194,215,224,196,-7,207,26,229,60,3,160,77,82,243,227,78,0,224,68,6,224,66,2,163,-148,96,217,132,8,225,83,4,64,145,65,210,224,199,5,225,173,4,224,74,-12,168,221,224,74,7,66,179,224,74,5,68,125,206,132,160,70,64,94,224,-233,8,225,171,2,2,95,52,55,213,163,0,58,98,87,225,171,2,0,80,-98,95,206,33,1,80,32,100,194,0,85,64,20,64,58,224,146,7,0,48,-101,75,0,50,69,111,1,95,52,68,205,225,73,6,75,166,225,141,8,1,-53,56,224,53,4,245,186,8,234,142,1,1,95,39,234,140,3,224,205,10,-69,152,235,4,0,0,58,99,66,192,183,64,73,128,183,131,70,224,168,6,-2,95,49,54,78,23,96,126,224,29,6,99,216,73,147,0,58,96,41,209,-115,138,132,3,52,57,32,35,101,182,96,233,85,18,106,101,0,58,96,48,-224,42,9,109,190,224,42,0,0,49,149,145,96,98,225,74,5,0,52,76,-199,1,52,54,64,74,0,83,141,235,97,16,136,9,0,79,241,153,2,1,-46,46,65,18,224,17,3,1,58,58,128,17,2,79,32,35,64,210,69,19,-96,12,75,32,224,12,0,166,221,224,57,5,1,60,45,224,75,7,1,45,-62,224,75,1,224,48,0,96,62,185,34,224,44,3,0,61,96,44,229,131,-0,161,167,226,207,3,0,52,64,144,224,20,8,126,92,65,5,130,227,97,-173,64,25,129,173,208,194,226,17,13,13,33,64,35,36,37,38,63,43,46,-47,60,61,62,63,87,207,4,94,124,58,45,126,64,136,0,58,97,62,139,-144,226,163,2,127,211,134,138,0,82,76,94,64,105,136,90,227,50,3,66,-148,226,101,9,226,90,2,0,53,223,120,224,91,4,64,222,205,217,237,36,-2,189,155,200,193,66,20,102,255,192,31,224,161,10,128,24,67,129,104,64,-227,208,4,224,151,17,237,33,1,237,78,0,0,58,96,202,227,168,9,1,-95,52,127,199,224,72,4,67,67,65,141,2,67,32,79,224,62,2,204,214,-1,80,32,106,219,97,150,64,37,225,150,18,8,44,59,40,41,91,93,123,-125,96,129,136,64,105,228,189,10,86,108,3,64,75,32,89,225,1,6,0,-89,96,238,69,204,0,64,231,95,1,224,58,6,121,126,228,248,5,65,54,-65,104,228,112,2,0,35,119,98,105,97,0,51,80,224,205,90,231,181,6,-224,91,15,193,23,205,128,225,93,4,224,20,3,0,52,78,6,193,179,143,-97,140,74,129,224,201,123,132,81,65,51,229,18,2,97,4,225,135,11,0,-51,77,140,195,77,130,58,152,20,83,198,225,240,1,123,141,97,100,208,186,-1,80,32,108,72,129,167,230,130,13,90,132,225,62,5,96,194,0,85,137,-141,232,214,1,162,106,1,51,55,91,92,110,184,105,68,128,200,224,201,8,-208,123,224,109,12,117,215,227,247,5,233,105,1,0,58,105,25,192,189,65,-76,128,189,242,166,0,225,229,8,230,88,7,65,179,224,95,4,83,150,237,-16,0,225,227,4,232,52,6,226,55,11,165,166,224,20,6,130,76,224,20,-5,0,49,84,61,224,21,9,103,204,224,21,9,128,152,224,21,7,68,255,-224,21,9,224,109,11,156,117,226,228,7,128,85,225,17,4,129,115,240,74,-8,193,163,224,17,3,130,127,224,17,2,96,100,224,17,4,85,50,224,35,-6,224,34,8,142,102,224,17,3,131,19,224,17,3,224,88,8,139,131,224,-16,2,161,173,225,163,7,74,138,104,217,224,95,8,229,25,5,105,149,216,-145,128,18,226,190,5,3,67,32,95,55,83,173,100,24,2,95,51,57,85,-25,109,40,0,49,116,51,1,52,52,64,4,173,240,227,147,9,73,185,141,-32,148,59,224,171,13,68,66,132,217,226,102,23,134,124,224,20,7,136,77,-224,20,6,226,35,11,148,33,224,20,7,226,55,11,105,230,224,20,7,105,-244,224,20,8,65,234,224,20,8,226,118,11,74,221,224,20,9,224,209,11,-75,254,224,20,9,224,209,11,161,163,224,20,6,224,209,11,109,209,224,20,-7,77,169,224,20,9,224,209,11,107,88,224,20,8,224,209,11,112,42,224,-20,8,224,209,11,83,157,224,20,9,224,209,11,84,64,224,20,9,224,209,-11,106,76,224,20,8,224,209,11,228,26,12,85,130,224,20,9,228,47,11,-107,153,228,47,10,227,249,8,126,80,224,17,4,177,93,224,17,3,227,215,-8,89,50,224,17,6,142,216,224,17,3,135,80,224,17,3,228,155,8,92,-244,224,17,6,228,84,8,156,99,224,17,4,228,138,9,228,192,9,224,179,-8,188,188,224,17,3,224,179,8,92,50,224,17,6,224,179,8,229,26,10,-229,97,26,229,62,9,224,178,8,229,61,15,224,16,1,224,175,8,224,174,-8,224,173,8,225,96,9,224,153,8,224,16,7,206,60,5,95,52,52,56,-32,79,176,160,233,99,0,2,52,52,57,236,36,2,2,83,79,72,109,195,-224,79,7,224,47,17,224,46,8,128,178,0,79,224,98,16,2,78,85,76,-224,51,7,96,161,224,49,17,2,83,84,88,224,49,7,96,245,224,49,17,-0,69,224,49,9,97,56,224,49,18,1,79,84,224,49,7,96,200,224,49,-18,1,78,81,224,49,7,97,190,224,49,17,2,65,67,75,224,49,7,98,-1,224,49,17,1,66,69,225,43,8,98,68,224,49,18,0,83,224,48,7,-98,134,224,48,17,0,72,224,247,8,98,200,224,48,17,1,76,70,225,242,-8,225,191,22,0,86,224,98,8,131,79,224,49,17,0,70,224,99,9,225,-241,22,1,67,82,224,49,8,225,241,22,1,83,73,224,49,8,225,191,22,-2,68,76,69,224,50,8,225,192,22,2,68,67,49,224,50,8,225,193,22,-2,68,67,50,224,50,8,225,195,22,2,68,67,51,224,50,8,225,197,22,-2,68,67,52,224,50,7,133,134,224,50,17,1,78,65,226,190,8,133,203,-225,99,18,1,89,78,224,50,8,227,186,24,0,66,224,50,8,225,201,22,-1,67,65,224,101,9,227,188,23,0,77,224,49,8,225,252,22,1,83,85,-224,151,9,225,252,22,2,69,83,67,224,50,8,225,252,22,0,70,227,190,-8,135,172,224,49,17,0,71,224,49,9,225,250,22,0,82,224,49,8,136,-52,224,49,17,0,85,224,49,9,225,248,23,0,80,224,49,8,225,247,22,-0,68,228,234,9,0,49,129,45,242,178,5,224,0,17,238,95,11,221,17,-0,58,111,64,242,17,13,1,83,39,146,18,145,253,122,191,123,159,224,75,-0,144,36,123,6,0,85,210,147,224,19,0,185,30,112,67,233,177,2,201,-172,143,162,242,65,14,82,63,64,0,88,201,0,58,65,14,64,161,0,80,-160,98,147,4,122,132,0,90,160,4,112,95,145,121,71,203,160,217,64,9,-79,134,1,52,52,122,37,0,54,143,161,128,9,4,49,49,49,52,49,101,-109,0,58,109,56,111,174,3,53,51,32,58,109,44,191,62,87,64,255,62,-1,64,163,213,25,237,185,1,246,164,14,250,218,26,0,58,109,244,64,120,-0,54,87,162,91,44,2,95,52,48,121,61,67,115,2,95,52,48,89,95,-0,52,67,76,74,245,106,249,120,219,142,4,0,52,143,42,0,52,123,205,-224,13,1,64,210,0,73,96,174,215,122,1,57,49,64,4,0,51,122,109,-181,88,0,58,96,39,224,29,2,0,50,224,29,6,186,58,224,59,1,1,-95,49,84,230,0,58,96,102,96,178,78,141,150,104,83,72,224,147,0,98,-191,122,229,1,52,51,96,208,0,51,64,196,1,55,56,224,34,0,0,55,-86,32,96,10,0,58,96,6,219,132,0,50,64,46,160,65,0,58,96,53,-147,167,192,16,129,149,224,42,2,192,27,64,28,129,167,123,157,254,249,0,-125,16,158,114,252,68,6,1,95,52,83,84,241,100,1,254,150,2,93,38,-131,26,64,94,96,38,97,169,64,104,64,97,245,30,0,147,39,156,23,98,-221,79,96,108,202,224,34,0,224,9,1,79,187,64,218,161,169,138,56,0,-52,67,248,0,58,65,61,64,89,0,75,83,50,0,58,96,19,3,10,65,-32,90,160,13,129,164,0,75,130,127,64,62,97,122,65,76,68,1,1,95,-52,69,3,0,58,97,134,225,70,7,64,31,0,58,96,31,193,24,243,138,-2,227,206,0,96,187,97,150,99,160,0,52,66,160,100,106,99,174,254,151,-3,0,58,96,81,99,12,80,31,226,23,0,96,25,129,155,0,83,129,70,-99,147,0,66,66,239,226,61,7,195,218,160,4,1,83,32,67,222,224,48,-32,193,221,253,142,4,182,159,224,207,1,158,32,244,120,4,224,237,4,110,-131,1,95,52,177,132,2,32,95,52,99,202,0,57,220,173,97,120,224,62,-1,160,110,128,113,164,176,160,116,193,222,64,90,192,25,160,123,224,117,22,-224,115,5,224,113,5,224,51,17,197,176,224,0,1,0,58,100,38,193,248,-2,52,49,51,64,84,97,192,160,16,0,52,65,221,67,138,2,50,49,56,-99,74,73,97,165,3,0,49,98,68,79,65,162,227,66,59,73,78,224,157,-5,0,58,96,119,101,68,1,49,57,64,67,1,57,52,178,68,242,79,1,-191,111,128,197,69,69,224,34,21,1,73,32,64,2,79,218,73,138,96,168,-192,139,64,62,224,96,0,160,46,149,217,0,89,225,100,0,192,56,160,230,-255,145,2,224,60,3,224,137,6,160,119,150,211,1,95,52,73,208,179,81,-113,122,225,16,4,217,101,225,251,0,160,75,0,50,192,44,161,234,224,70,-0,2,52,50,49,224,71,0,65,168,69,162,175,239,224,42,7,224,113,2,-224,41,6,0,58,96,8,163,95,1,75,52,132,1,128,23,132,18,224,23,-9,220,240,0,89,227,63,1,131,52,130,74,185,172,0,82,224,22,4,250,-9,2,64,146,162,60,224,1,1,68,173,96,0,224,20,11,224,17,8,224,-14,5,224,11,2,192,8,131,14,64,109,64,118,128,197,64,195,224,197,1,-66,114,101,88,98,8,102,55,76,58,0,58,98,171,192,222,128,181,0,58,-96,25,100,206,130,20,225,81,4,98,199,225,5,2,131,75,160,239,192,92,-226,20,4,162,96,68,238,134,219,64,33,225,81,3,64,64,70,16,228,138,-0,232,237,3,192,21,160,104,224,29,0,128,39,250,217,3,0,58,67,137,-128,88,72,4,1,50,53,233,220,2,4,102,111,108,100,108,141,9,64,249,-128,134,130,8,224,134,0,0,83,228,209,4,96,79,130,18,97,5,201,150,-68,150,211,26,101,180,97,16,251,17,1,192,176,194,24,98,152,136,203,153,-220,2,49,53,54,168,162,1,64,95,115,253,132,226,103,61,100,20,96,36,-1,50,48,224,36,7,197,9,227,124,2,2,67,32,95,86,150,195,122,0,-58,96,61,167,62,234,18,5,134,113,136,128,64,6,0,51,97,0,230,232,-1,72,244,67,130,65,214,68,137,199,179,64,15,64,9,199,173,2,95,49,-55,72,133,96,77,0,58,96,6,226,84,0,169,87,103,15,73,93,102,169,-0,73,198,26,138,73,230,102,4,128,113,233,25,2,96,153,230,240,1,96,-209,64,79,98,138,128,252,0,64,230,44,0,253,59,2,68,58,193,182,97,-118,232,152,3,130,37,224,86,2,197,188,65,31,230,227,0,128,8,168,137,-162,124,160,243,96,64,1,52,48,87,196,160,64,1,52,48,147,38,224,25,-3,131,249,64,14,251,246,0,160,145,128,102,224,174,9,224,124,7,233,8,-1,224,127,22,224,101,3,224,130,8,224,156,5,225,91,4,192,247,97,102,-0,48,227,28,2,24,92,51,52,38,46,47,108,105,98,47,68,97,116,97,-47,73,110,116,101,103,101,114,46,104,115,64,24,4,44,49,50,56,58,131,-57,0,58,97,227,102,164,1,48,52,166,187,0,58,96,111,163,36,97,126,-128,224,97,176,64,9,98,255,96,23,162,138,67,52,230,177,7,165,170,128,-53,64,47,64,57,228,22,4,196,201,192,7,2,80,32,95,71,184,0,75,-96,249,224,204,34,3,54,52,58,54,132,6,166,243,227,161,1,96,116,164,-95,64,15,131,177,108,148,227,162,4,1,48,52,253,121,0,228,157,0,163,-107,1,52,48,73,83,199,212,196,170,224,80,12,98,161,224,80,8,97,157,-96,69,97,110,196,207,131,65,100,120,0,54,65,56,229,136,0,0,83,105,-10,228,48,11,228,105,13,160,47,64,139,229,159,0,224,61,11,101,179,228,-108,4,224,79,11,228,154,18,232,20,3,0,58,96,208,164,40,64,200,65,-213,234,130,19,169,148,97,10,0,49,98,99,173,99,64,127,93,102,64,8,-2,51,48,49,229,136,10,0,64,128,32,64,51,229,11,0,136,100,172,35,-96,129,129,142,254,165,0,225,83,0,232,74,1,97,34,107,178,224,99,4,-227,214,0,0,89,160,36,191,193,226,66,3,194,183,101,65,194,175,191,230,-102,70,130,102,198,30,168,63,99,175,128,145,224,143,4,194,64,236,71,11,-192,146,96,246,230,239,4,6,108,116,87,46,99,109,112,162,233,161,19,160,-6,2,64,64,95,153,205,64,5,0,58,100,115,65,91,2,51,57,56,195,-211,100,41,227,211,2,164,180,194,108,231,0,6,162,239,231,2,8,227,73,-15,97,91,64,109,162,244,231,226,1,0,67,64,23,70,109,236,40,0,227,-161,44,224,91,2,227,161,8,224,95,5,227,161,30,224,80,3,97,63,96,-69,0,64,65,40,239,89,1,97,201,227,140,36,129,208,227,51,2,224,10,-1,0,58,96,97,1,10,65,69,26,0,58,96,173,146,58,0,51,91,156,-146,90,128,75,0,58,80,255,193,171,235,191,5,138,20,224,226,0,66,102,-99,12,1,95,50,170,167,225,98,1,205,95,162,147,64,5,64,140,224,243,-0,97,9,0,66,104,109,225,7,1,96,142,159,78,0,80,193,52,225,36,-2,65,56,69,230,225,229,0,229,232,0,0,58,96,197,128,179,98,214,192,-39,97,118,96,86,0,50,224,103,0,0,58,96,99,138,210,0,50,74,213,-96,36,0,58,96,34,243,78,13,195,189,242,59,0,161,251,234,111,1,162,-208,242,75,4,234,106,3,235,217,1,129,22,162,34,98,56,0,48,74,92,-102,195,169,118,224,69,16,129,135,243,121,12,160,27,115,126,64,92,96,102,-64,4,0,95,73,68,234,211,2,73,112,129,151,244,182,0,97,32,0,55,-69,0,127,13,208,139,1,95,50,126,158,244,54,5,0,58,115,53,234,17,-0,237,106,2,98,236,81,78,129,102,225,172,2,65,95,129,172,227,56,3,-224,58,38,132,103,224,58,44,188,216,194,147,224,67,0,224,56,25,188,205,-2,51,48,56,229,9,2,15,118,97,108,68,105,103,58,32,66,97,100,32,-98,97,115,101,133,18,71,76,128,83,70,77,76,220,0,51,95,116,0,35,-197,241,224,17,0,2,64,35,53,99,172,224,48,15,100,8,224,48,5,0,-49,114,159,0,64,69,37,224,49,11,0,54,69,123,224,49,5,0,55,134,-185,1,49,56,66,190,66,48,1,56,50,132,120,231,125,1,231,177,4,1,-95,49,67,136,96,5,128,78,254,14,0,224,61,39,132,199,224,61,12,224,-48,13,213,245,65,103,131,0,224,231,15,225,74,11,96,171,224,231,10,224,-107,23,224,99,34,86,196,224,99,42,0,58,67,217,100,147,224,206,34,97,-60,224,106,39,0,58,97,55,213,219,119,171,2,95,51,56,100,29,0,56,-79,151,0,49,64,193,2,95,51,56,67,211,0,51,70,41,117,213,128,114,-117,213,128,10,0,58,96,6,6,10,65,32,62,61,32,58,96,39,64,11,-64,10,0,54,96,10,0,60,64,10,134,26,3,105,99,109,112,64,13,178,-97,228,142,6,71,207,248,55,2,0,35,104,35,224,20,7,0,54,135,225,-224,20,5,151,215,224,21,7,0,55,98,113,224,42,7,123,219,119,90,224,-21,2,128,211,152,167,249,118,3,163,200,224,17,19,129,75,224,16,19,132,-189,224,16,7,1,58,51,69,38,211,204,230,58,7,132,117,201,212,185,150,-135,30,192,23,192,35,135,54,148,162,199,66,224,35,4,237,244,3,232,189,-2,233,208,6,0,39,68,195,224,21,2,224,66,0,102,119,243,166,9,166,-192,169,70,138,110,128,66,83,119,211,125,245,252,1,66,142,230,57,0,138,-180,141,141,237,140,24,97,32,251,43,0,166,185,150,225,241,221,11,225,104,-1,0,95,156,201,134,168,88,255,129,102,88,106,128,0,192,23,193,128,96,-25,1,95,51,81,189,64,0,120,27,224,48,1,96,143,2,58,51,56,231,-239,0,0,51,75,26,226,70,2,64,28,211,163,231,107,8,129,163,0,82,-219,53,231,29,3,0,58,96,72,227,17,7,81,127,231,109,17,167,101,224,-236,2,1,51,55,98,121,1,58,51,66,247,122,207,1,35,54,117,121,0,-58,96,25,107,89,84,184,0,51,118,33,96,133,187,65,1,51,50,67,204,-128,86,1,51,51,64,34,96,11,0,58,96,6,137,29,73,231,1,51,55,-83,80,70,240,69,62,1,95,51,120,145,97,98,0,58,64,152,64,41,71,-20,243,236,2,96,49,135,244,104,241,128,72,96,200,0,49,233,102,0,129,-223,0,51,102,122,104,121,2,51,55,51,233,220,2,89,9,1,51,55,238,-127,1,1,95,51,122,255,69,25,96,189,64,29,227,72,2,97,207,128,29,-74,251,0,51,157,108,0,58,96,42,129,152,0,50,69,55,3,54,54,32,-35,96,71,133,38,97,22,164,3,0,55,160,161,0,48,128,7,96,41,108,-93,64,246,1,95,51,186,66,64,82,225,235,6,69,166,1,51,54,64,69,-105,224,138,83,110,228,227,103,0,76,87,145,90,96,90,65,118,114,212,1,-51,54,242,104,0,96,120,129,74,0,51,193,73,0,58,64,42,129,193,0,-53,64,212,66,27,0,58,96,106,162,136,64,202,0,90,125,146,0,53,162,-81,64,198,228,92,5,128,158,96,103,204,79,64,5,229,7,3,96,255,99,-51,0,58,64,247,224,113,2,66,45,0,58,96,27,96,19,1,52,49,90,-20,0,51,84,150,64,22,165,207,160,156,84,211,96,104,129,249,1,95,51,-92,66,3,95,51,54,49,152,123,1,58,51,74,151,203,71,66,2,0,58,-96,27,160,202,128,44,70,122,1,58,51,70,178,236,212,0,246,103,8,2,-58,51,53,251,7,2,1,51,48,65,215,125,77,106,169,67,66,84,2,1,-51,53,214,112,192,244,66,140,2,66,32,80,97,90,64,77,172,111,238,254,-2,207,75,129,26,0,50,124,221,2,49,54,53,75,82,0,55,174,90,161,-69,235,34,4,224,236,0,226,83,7,64,205,196,195,97,134,129,40,235,38,-3,166,53,129,191,2,95,51,53,239,67,3,19,80,114,101,108,117,100,101,-46,114,101,97,100,58,32,110,111,32,112,97,114,202,63,154,130,3,95,51,-53,54,146,131,224,57,19,8,97,109,98,105,103,117,111,117,115,224,64,3,-65,33,130,43,66,64,64,13,129,248,101,182,128,16,129,245,110,0,64,158,-228,168,10,229,207,1,155,44,240,99,1,226,241,3,236,129,11,159,248,229,-179,9,0,58,97,30,194,108,1,95,51,74,24,0,58,96,51,224,19,2,-99,6,64,127,227,6,2,93,71,65,95,226,97,0,65,174,0,58,97,130,-96,184,163,114,228,74,2,64,167,143,114,160,131,174,145,2,95,51,51,84,-92,161,195,0,51,69,122,96,11,0,58,96,6,64,76,96,180,0,51,132,-39,131,130,196,36,128,196,0,95,123,162,128,64,90,110,132,60,0,95,100,-152,128,10,1,51,52,224,86,3,229,110,0,183,174,0,66,134,178,239,14,-0,224,18,3,1,66,39,181,154,161,46,0,52,129,182,128,147,0,50,160,-147,101,101,224,135,0,134,119,96,135,113,118,128,135,128,10,198,24,64,73,-163,229,192,18,229,87,2,132,202,225,30,5,130,176,129,30,64,11,0,58,-96,6,97,165,229,176,3,64,172,67,161,64,155,64,61,100,251,135,52,64,-6,224,47,4,138,198,131,153,83,21,224,49,2,132,113,64,6,5,10,65,-32,73,32,58,96,44,192,10,196,46,2,95,51,51,95,39,99,139,160,16,-80,163,231,207,5,0,58,96,36,192,232,121,19,103,162,224,5,0,101,29,-207,160,64,67,108,156,146,53,232,72,5,160,30,138,132,224,30,9,165,40,-249,189,1,230,155,4,100,68,224,46,2,121,220,132,242,2,95,51,51,151,-104,209,54,251,249,0,100,131,132,170,189,14,195,112,137,202,64,26,81,130,-224,21,1,69,49,103,94,228,177,1,193,23,160,165,224,24,0,161,217,169,-13,97,217,96,11,0,58,96,6,167,69,136,3,69,26,0,58,64,34,131,-110,231,251,0,0,58,96,25,165,118,226,180,0,99,155,0,51,130,29,0,-80,166,63,161,59,130,69,91,144,64,34,194,16,98,150,64,150,128,43,184,-159,234,240,0,234,220,1,224,19,2,128,114,213,1,224,32,2,224,9,10,-113,130,225,223,5,232,58,7,0,64,101,239,74,205,160,218,224,4,0,222,-95,96,58,65,167,68,235,224,57,8,224,179,7,129,169,226,102,0,162,96,-64,41,192,83,224,84,5,224,82,5,224,81,11,224,91,4,224,82,9,224,-183,3,224,58,17,226,239,5,224,59,20,225,114,9,224,9,2,102,1,160,-65,193,251,160,234,224,240,16,160,100,227,69,2,194,254,139,137,224,115,1,-160,224,97,163,98,185,97,47,128,127,1,95,51,95,94,1,51,50,100,45,-162,74,96,0,224,98,2,0,83,96,168,154,12,224,151,32,226,162,5,224,-100,2,131,170,178,85,225,7,0,161,10,224,13,22,99,166,130,124,224,252,-0,224,254,0,160,13,225,1,1,228,1,0,64,230,128,217,160,17,1,95,-49,101,181,225,19,8,224,248,6,64,4,224,98,22,245,157,0,192,97,162,-134,128,96,228,41,3,194,11,226,202,6,225,71,31,225,224,24,160,107,225,-214,21,226,202,21,192,9,195,224,226,192,4,224,49,32,224,176,2,228,22,-9,225,93,10,230,3,4,224,45,5,224,47,8,225,58,0,224,141,18,96,-139,226,35,5,193,63,224,142,23,252,140,16,5,84,101,120,116,47,80,73,-255,17,114,67,111,109,98,105,110,97,116,111,114,115,47,82,101,97,100,80,-252,156,0,3,53,49,58,51,252,156,0,64,0,174,35,96,108,174,35,96,-11,0,58,96,6,114,173,144,123,132,175,64,35,137,90,238,45,5,150,146,-0,58,64,64,134,48,1,75,51,169,159,64,46,192,70,66,63,98,120,192,-55,96,71,70,6,64,21,114,142,96,21,198,177,2,95,51,50,103,238,90,-179,192,85,140,87,64,23,230,152,0,238,150,1,64,61,134,95,0,51,135,-64,255,213,1,226,254,0,226,251,1,138,27,104,63,64,64,206,182,128,120,-71,40,98,155,2,95,51,50,73,249,96,11,0,58,96,6,198,253,162,216,-128,216,64,100,104,9,96,204,79,96,68,68,64,81,120,125,138,76,0,50,-253,136,5,97,69,86,100,64,42,130,107,224,42,14,241,55,8,209,248,72,-11,236,227,5,164,179,251,255,3,0,32,86,92,161,7,140,251,128,97,103,-165,224,164,23,224,212,1,90,96,192,24,224,186,39,162,204,224,241,46,195,-58,129,114,224,218,6,224,158,0,224,215,38,224,139,39,101,93,224,139,1,-130,189,129,86,97,252,96,137,221,69,225,151,1,230,70,1,224,184,2,64,-5,163,16,225,155,184,128,247,225,159,3,224,231,14,225,168,103,224,152,5,-123,103,131,254,235,84,1,236,141,1,97,162,102,147,167,103,224,174,1,68,-247,225,90,53,128,87,224,7,1,224,132,108,224,95,10,224,94,67,96,80,-128,181,224,222,110,78,238,1,50,53,231,28,2,31,115,116,105,109,101,115,-58,32,112,111,115,105,116,105,118,101,32,109,117,108,116,105,112,108,105,101,-114,32,101,120,112,101,3,99,116,101,100,103,13,0,58,69,227,141,0,109,-163,173,142,0,83,158,225,175,158,141,128,193,194,96,52,244,189,1,178,187,-0,58,70,121,198,153,64,165,0,58,96,46,242,235,0,128,40,64,82,224,-11,0,224,61,2,96,46,231,65,0,0,50,237,115,1,65,29,208,3,1,-49,56,145,124,76,68,0,95,142,128,144,6,141,214,112,6,103,62,144,6,-160,10,205,111,1,64,58,96,6,143,149,129,126,128,5,134,206,213,200,237,-53,0,190,48,79,224,64,120,233,236,7,224,28,7,239,18,11,140,237,224,-65,9,182,251,96,24,64,186,161,123,97,7,64,73,72,151,96,49,0,58,-96,6,224,178,0,105,177,135,202,66,86,226,53,0,192,75,71,168,199,203,-132,134,128,46,135,248,71,203,224,34,4,0,58,96,125,128,93,1,95,50,-64,105,128,121,135,239,64,6,110,212,0,58,96,67,115,77,128,1,121,84,-64,33,194,4,249,18,1,96,4,159,124,128,205,0,58,97,4,1,10,65,-225,212,1,0,58,97,39,96,78,224,57,6,224,87,0,210,254,224,87,6,-224,34,3,130,22,234,113,0,240,222,8,64,242,81,28,105,157,65,116,171,-235,133,24,160,14,0,85,163,141,160,38,230,197,3,169,136,0,67,129,148,-115,242,128,64,64,84,162,78,64,17,144,58,4,52,57,32,95,50,66,255,-67,135,118,87,85,181,161,61,0,48,243,3,0,212,78,70,19,161,243,0,-90,180,79,140,176,199,56,96,31,96,42,64,22,228,82,3,251,228,5,80,-120,130,87,132,103,225,40,1,128,228,106,110,0,48,238,54,0,224,38,10,-224,123,2,64,181,193,243,228,78,6,7,105,110,105,116,58,32,91,93,100,-50,68,29,225,90,0,224,114,4,193,54,224,115,1,0,58,96,9,97,36,-231,23,0,2,115,101,113,192,213,128,19,224,16,2,228,25,11,64,68,130,-105,0,83,91,91,2,50,52,52,160,254,246,192,2,224,170,1,3,35,108,-105,110,182,7,65,219,170,241,224,42,12,8,123,45,35,32,76,73,78,69,-32,246,119,0,139,29,69,109,95,188,64,7,74,245,1,95,51,71,174,0,-64,224,57,2,3,32,35,45,125,128,52,1,58,51,69,159,128,224,225,21,-1,67,37,213,129,235,101,0,98,133,0,50,64,13,131,126,3,95,50,57,-57,68,70,1,95,50,82,108,214,83,96,25,1,51,48,68,181,96,16,0,-58,96,51,96,96,243,42,0,225,123,1,208,59,98,82,242,238,0,0,58,-64,63,162,115,1,95,50,76,67,249,19,5,0,35,108,232,224,28,15,130,-247,224,18,4,101,16,64,86,227,118,0,198,39,101,53,183,177,0,50,94,-222,192,155,167,10,162,205,64,12,192,166,96,24,65,248,224,51,0,224,186,-2,128,53,148,65,175,157,128,81,0,58,65,45,64,124,88,233,134,158,224,-43,9,224,42,0,214,205,4,57,54,32,79,32,96,238,100,122,97,214,217,-94,1,50,57,112,254,1,50,57,83,240,64,41,128,25,225,94,0,208,44,-96,91,225,125,10,192,199,193,229,165,137,244,140,1,0,58,96,90,96,135,-1,50,56,162,91,224,161,0,197,59,98,117,0,49,66,214,128,140,128,121,-104,24,160,20,193,28,2,58,50,57,194,106,0,95,64,73,110,33,96,48,-231,53,1,224,1,3,168,42,160,137,231,92,0,224,37,6,224,39,4,64,-40,246,113,0,66,153,0,56,119,232,102,27,1,58,50,94,147,224,205,2,-97,236,100,237,96,38,197,177,89,96,1,50,56,166,88,1,49,51,88,173,-0,85,209,135,97,246,103,57,0,49,87,220,227,244,0,64,107,64,17,227,-97,2,3,32,97,116,32,67,202,163,156,226,54,2,128,63,1,51,55,70,-210,129,106,224,66,14,2,99,111,108,192,61,130,42,224,57,8,65,204,131,-232,224,61,8,15,92,49,48,38,32,32,32,32,117,115,101,100,32,98,121,-32,160,73,128,62,1,50,56,128,189,160,0,3,95,49,51,53,192,20,3,-95,49,51,56,192,11,0,58,96,6,97,50,1,56,52,155,124,4,53,32,-64,79,32,99,79,136,224,1,50,56,197,31,227,221,11,168,72,146,175,96,-45,246,105,0,97,121,91,30,0,49,121,118,0,58,127,60,250,242,0,1,-50,56,130,22,2,80,32,73,64,105,241,58,10,31,99,112,112,104,115,115,-114,99,47,109,97,108,99,111,108,109,45,119,97,108,108,97,99,101,45,117,-110,105,118,101,114,115,1,101,47,96,33,6,45,49,46,50,48,46,57,128,-12,209,76,3,55,57,58,49,164,254,1,50,56,130,88,87,191,128,147,96,-110,192,147,130,76,3,75,32,58,50,191,194,2,95,50,55,72,108,80,37,-1,58,50,223,196,1,53,48,102,114,95,18,1,95,50,95,119,92,240,66,-254,159,192,1,49,56,66,138,192,11,65,126,159,204,96,6,194,101,129,57,-225,194,4,10,69,120,105,116,83,117,99,99,101,115,115,197,225,131,248,127,-245,66,4,2,50,32,95,64,162,196,224,226,7,11,64,68,5,70,97,105,-108,117,114,166,85,224,36,1,228,89,2,97,247,70,151,66,87,0,35,148,-142,226,24,1,160,210,98,24,96,11,0,58,96,6,69,73,69,29,131,238,-1,49,57,255,191,0,105,185,128,16,128,73,0,58,96,178,97,42,126,166,-0,50,74,224,2,49,54,56,224,167,2,6,83,121,115,116,101,109,46,64,-174,64,167,224,192,5,2,67,111,100,128,189,162,116,65,105,165,6,0,83,-125,196,97,184,137,11,126,167,65,165,64,33,224,70,1,130,7,0,34,96,-27,188,178,4,50,55,48,32,95,90,183,2,58,50,55,230,111,0,68,207,-192,80,2,64,95,50,95,229,3,67,32,95,50,95,217,129,101,0,58,64,-54,128,125,2,95,50,53,65,205,132,249,64,33,0,58,96,47,102,97,161,-169,66,17,95,183,103,140,71,190,1,95,49,95,66,64,41,130,60,6,94,-112,117,116,98,32,58,96,27,96,148,5,54,52,32,79,32,95,65,56,0,-79,64,13,0,53,227,105,0,191,254,234,136,1,96,28,167,186,210,67,74,-185,132,147,125,198,128,10,229,163,6,95,126,228,144,3,224,242,4,143,118,-2,95,50,53,66,179,134,39,64,13,74,32,96,184,237,169,7,11,66,97,-100,32,72,97,110,100,108,101,32,109,193,165,129,57,123,39,96,166,129,173,-98,22,233,225,4,221,226,160,121,98,54,1,50,54,117,175,70,137,0,50,-68,71,230,71,2,128,76,129,216,2,95,57,51,65,52,129,201,3,102,112,-50,112,64,13,129,196,2,95,54,56,112,57,247,5,13,117,190,228,128,0,-163,233,224,6,12,224,42,2,64,15,164,29,224,42,29,160,28,224,49,10,-224,42,15,224,49,10,224,42,22,224,49,3,68,112,68,151,194,91,194,161,-130,133,73,159,65,146,91,196,0,58,65,203,129,142,0,95,70,195,82,12,-0,58,98,18,160,48,178,255,210,3,73,30,103,204,66,56,162,55,236,102,-1,96,8,117,162,132,51,98,116,0,58,67,22,128,78,0,85,131,61,118,-111,96,62,0,58,66,88,64,27,231,201,1,167,191,0,58,96,37,101,14,-162,18,0,95,70,54,226,187,4,224,179,2,99,80,71,9,232,102,1,1,-50,53,98,114,2,58,50,53,230,101,0,226,171,5,2,104,101,97,144,53,-0,75,96,243,130,73,183,207,166,190,128,255,235,220,2,161,1,237,169,0,-128,8,147,250,66,79,96,39,224,5,0,171,11,0,50,190,57,244,68,0,-114,193,225,85,0,98,247,104,127,96,40,1,95,50,94,246,192,45,64,42,-128,6,224,38,0,224,87,6,160,47,192,159,135,94,3,67,39,32,79,96,-33,0,57,164,48,128,30,152,248,0,50,75,11,0,50,93,255,2,64,95,-50,132,90,0,35,64,52,96,40,64,4,163,245,202,43,236,74,0,65,250,-68,101,225,67,1,1,45,79,168,72,96,71,166,60,162,11,160,64,224,52,-10,9,45,115,116,114,105,112,45,101,111,108,164,32,224,188,131,229,38,5,-224,192,19,196,221,225,169,255,225,169,105,193,171,168,113,239,23,12,6,45,-45,104,97,115,104,101,169,52,227,134,255,227,134,255,225,169,255,227,134,54,-74,200,136,128,224,6,3,234,86,3,244,8,2,167,43,116,13,225,180,1,-231,100,1,193,250,244,46,0,96,148,167,88,104,249,244,50,0,64,167,225,-65,0,244,98,0,160,210,128,52,145,206,192,35,105,246,96,99,173,63,128,-36,224,117,1,148,205,114,137,105,34,128,104,160,203,245,81,8,224,10,0,-160,137,160,22,64,0,240,138,2,128,156,96,222,96,64,65,89,224,195,10,-224,39,1,224,177,3,128,1,0,90,225,78,5,64,177,168,123,224,172,14,-241,190,7,192,78,129,135,225,81,11,98,35,229,66,13,0,111,195,99,2,-66,32,82,149,26,192,91,224,254,4,128,10,79,27,192,0,229,107,0,225,-203,9,221,73,194,15,226,3,0,160,7,225,242,23,96,35,246,82,23,0,-49,206,188,227,95,2,224,178,4,192,12,96,180,3,95,50,52,50,250,135,-4,225,187,34,128,196,226,114,0,154,30,225,192,2,245,235,25,3,97,110,-115,105,230,164,0,225,3,3,192,78,224,72,31,9,116,114,97,100,105,116,-105,111,110,97,196,46,160,255,162,40,224,61,21,1,115,116,139,21,160,0,-109,135,96,53,79,251,147,38,112,101,204,107,224,34,20,140,185,128,128,226,-123,46,0,120,226,123,4,229,48,2,224,77,44,4,105,110,99,108,117,238,-152,1,226,207,8,100,250,232,71,14,160,59,0,61,225,30,4,225,243,0,-225,161,2,128,144,224,139,24,0,80,232,146,6,225,231,6,163,38,246,215,-7,133,202,224,70,2,0,67,96,70,224,30,17,128,31,128,237,225,53,46,-0,65,225,131,11,224,250,51,3,45,104,101,108,231,184,0,224,73,53,83,-222,2,105,111,110,224,76,60,224,75,7,64,59,64,76,225,48,2,196,158,-241,82,0,227,87,0,228,22,12,198,102,238,34,1,135,95,225,169,0,135,-181,231,147,3,195,71,98,141,99,71,192,18,1,53,48,224,18,1,96,123,-98,179,225,23,30,224,45,67,225,189,4,227,255,6,1,53,49,224,164,0,-227,255,1,224,78,21,1,110,111,250,230,1,224,0,0,2,95,50,52,79,-208,144,235,68,106,225,35,2,225,46,3,104,109,224,85,9,2,68,85,73,-96,80,2,58,50,53,211,224,1,52,54,119,189,90,204,155,144,96,5,96,-103,128,114,0,58,96,188,224,43,3,178,160,128,46,224,41,1,0,58,97,-138,224,40,5,130,16,224,35,0,0,58,97,192,224,34,3,0,75,224,119,-5,97,48,229,30,0,0,58,101,55,241,165,0,252,55,8,0,58,96,43,-113,41,0,58,64,80,128,10,0,73,80,185,65,9,180,128,133,212,85,119,-0,58,69,229,128,22,176,203,66,135,91,210,165,181,192,18,1,66,39,96,-21,225,168,1,241,205,7,101,26,64,156,224,168,0,0,51,177,41,194,208,-3,32,95,55,55,214,122,145,139,247,246,0,65,107,103,85,99,32,3,53,-52,32,95,89,118,1,64,35,214,82,128,192,249,244,2,92,76,0,58,106,-94,96,17,0,65,96,31,129,107,96,31,65,242,0,58,99,50,242,53,0,-98,5,0,58,107,212,96,19,242,69,0,0,58,107,239,248,96,2,128,230,-0,58,108,12,180,26,1,95,50,94,117,179,47,99,144,0,58,96,6,1,-10,65,93,217,4,117,97,108,32,58,96,33,161,96,87,33,193,96,83,63,-192,22,0,49,96,16,220,218,157,6,99,1,186,108,64,32,98,11,90,108,-101,206,224,139,0,128,220,0,82,160,162,0,58,96,28,243,124,2,129,135,-220,32,64,158,91,41,243,24,52,94,5,96,72,225,29,0,243,24,5,2,-116,97,105,136,56,97,125,64,45,128,213,0,52,85,246,0,50,74,96,1,-95,50,160,171,129,41,2,73,32,58,96,16,248,253,2,0,50,68,5,0,-50,118,50,184,253,128,56,152,253,192,11,87,47,96,11,0,58,96,6,216,-253,2,95,49,53,64,202,160,61,0,52,224,155,3,6,101,114,114,111,114,-58,32,96,158,184,131,96,38,0,58,96,6,248,83,20,8,67,111,110,116,-114,111,108,46,69,64,66,64,64,224,26,1,96,18,2,67,97,108,128,246,-162,60,64,194,127,166,163,15,67,222,192,7,230,97,1,173,61,68,100,131,-43,65,109,0,50,91,135,131,231,171,130,98,8,1,95,50,203,142,120,156,-64,99,194,218,215,196,64,32,251,64,24,160,69,0,58,98,92,96,162,0,-85,225,195,7,16,109,100,53,67,111,109,98,105,110,101,58,32,101,109,112,-116,121,133,93,64,145,66,75,67,35,192,171,175,12,120,158,64,93,95,173,-0,49,64,89,1,64,89,96,128,64,152,102,230,66,142,237,3,1,194,146,-224,142,0,164,84,161,0,103,1,199,29,2,95,50,49,66,115,65,40,1,-54,48,164,3,0,95,94,78,1,95,50,154,171,128,0,0,58,97,55,89,-6,9,109,100,53,65,114,114,97,121,32,58,96,57,130,127,226,240,0,0,-57,66,34,64,161,1,95,50,139,223,100,139,248,181,1,248,73,4,2,95,-50,49,77,24,224,46,2,169,239,192,46,2,95,49,48,163,40,227,36,0,-2,95,50,49,170,219,0,58,96,201,162,227,64,20,121,206,64,211,172,18,-228,255,10,162,19,130,29,133,73,225,59,1,192,25,232,153,5,4,67,32,-95,54,54,160,67,2,95,50,48,64,10,100,35,2,57,53,32,128,82,64,-0,225,123,1,239,41,7,249,55,2,64,187,153,168,224,45,1,96,96,172,-187,229,131,7,226,161,0,99,80,249,93,1,224,43,10,194,137,224,38,0,-160,16,0,58,65,97,130,198,255,182,2,206,253,0,58,96,143,99,218,67,-147,1,50,48,64,216,194,5,129,255,0,35,127,151,94,93,0,58,97,161,-5,10,65,32,35,49,54,65,112,167,101,1,49,50,66,147,0,57,104,10,-0,48,102,227,0,57,96,126,0,57,68,145,64,80,65,52,192,92,64,11,-65,14,192,11,67,119,128,11,65,78,1,64,58,96,12,155,222,97,30,154,-20,137,230,238,176,6,225,113,3,65,180,242,88,0,65,247,103,23,0,48,-96,7,2,50,48,50,64,7,102,175,128,15,64,164,1,50,48,162,68,96,-17,0,53,128,33,131,77,224,33,7,241,207,0,94,128,224,38,16,224,71,-25,88,138,1,73,32,240,123,0,192,86,224,196,0,67,180,0,83,162,133,-96,192,89,28,224,78,16,128,22,99,182,66,147,224,40,16,130,167,199,211,-97,42,2,66,32,95,65,162,224,169,19,129,45,97,162,103,9,0,48,199,-192,3,75,32,75,52,226,64,0,0,58,96,29,224,23,1,96,51,0,58,-96,142,224,20,1,165,177,65,27,232,2,0,226,135,7,64,31,131,191,96,-146,0,58,96,143,224,45,20,130,182,226,17,0,113,147,98,196,2,64,95,-49,90,183,0,58,66,103,196,16,131,213,4,95,49,57,56,32,135,55,68,-84,224,27,10,64,122,66,183,227,47,0,224,190,0,96,30,130,237,0,50,-69,247,99,31,100,17,65,168,0,57,84,192,98,192,64,41,129,18,67,163,-71,55,225,127,1,0,58,96,39,102,18,128,117,108,118,129,236,201,171,200,-25,98,221,157,16,128,34,1,64,95,94,175,132,79,0,50,80,35,1,57,-48,230,81,2,29,92,51,52,38,46,47,108,105,98,47,68,97,116,97,47,-73,110,116,101,103,101,114,95,84,121,112,101,46,104,115,64,29,4,44,50,-56,58,49,171,197,128,69,0,57,99,182,100,52,0,85,129,235,224,18,1,-0,79,100,217,224,5,0,0,50,235,206,0,224,60,5,114,207,96,60,0,-89,160,210,67,177,69,47,0,57,192,199,96,218,132,197,65,17,100,26,0,-56,103,128,228,245,0,98,123,128,19,228,199,1,3,64,95,54,51,133,94,-0,58,97,88,7,10,65,32,114,101,109,32,58,96,65,95,91,64,10,130,-36,0,65,64,10,130,15,0,80,64,10,129,247,169,19,1,49,56,100,191,-0,49,65,176,0,58,65,52,64,27,2,73,32,58,96,16,233,19,1,0,-49,64,177,2,95,49,55,141,25,73,19,224,56,0,0,54,224,11,2,73,-172,96,11,0,58,96,6,166,250,74,64,196,96,2,95,49,56,130,6,64,-208,221,88,129,51,0,56,67,93,102,112,0,80,227,124,1,160,47,224,15,-8,64,65,130,45,235,52,3,96,28,98,184,181,45,174,216,0,55,64,147,-106,102,83,43,224,73,0,64,205,224,21,2,160,159,97,151,1,95,49,68,-205,99,251,96,212,137,206,0,56,105,239,96,169,97,27,0,55,65,40,129,-101,0,90,64,200,0,58,96,40,161,126,64,64,193,76,201,42,76,51,96,-109,171,194,97,228,173,168,0,90,166,233,224,14,1,192,189,237,105,0,171,-236,128,207,0,58,96,6,204,11,160,42,66,250,67,37,224,42,1,64,60,-0,58,96,6,192,42,64,177,2,95,49,55,70,79,96,43,6,10,65,32,-47,61,32,58,96,17,132,52,64,38,101,11,97,68,0,64,204,131,0,75,-65,247,237,109,5,237,130,5,212,104,136,56,205,130,237,132,1,134,116,132,-20,64,9,96,176,160,77,96,175,192,17,0,58,96,6,228,130,4,228,140,-3,128,59,169,1,108,139,96,60,100,128,1,55,49,64,202,226,239,1,0,-55,172,190,75,156,142,198,3,95,49,52,54,228,28,2,11,110,111,32,109,-97,116,99,104,32,97,116,32,132,1,96,32,139,164,79,156,162,245,75,176,-128,11,0,58,96,6,235,176,29,3,120,99,101,112,84,207,0,46,68,116,-0,114,180,214,224,39,1,2,80,97,116,64,22,0,77,64,128,0,70,204,-187,162,204,67,115,129,2,0,83,199,184,1,95,49,76,182,234,171,1,0,-49,109,169,224,15,3,68,120,0,51,112,173,161,89,138,231,77,103,244,31,-7,80,137,0,54,228,186,2,75,216,98,160,65,253,97,50,1,54,54,130,-177,64,45,98,191,0,58,64,18,226,202,2,89,99,225,92,1,86,210,242,-74,3,78,234,65,217,68,34,2,52,52,32,128,15,99,113,103,144,129,102,-121,170,0,51,210,63,224,39,2,161,135,225,43,1,6,39,92,57,50,38,-39,39,165,165,161,156,96,230,224,99,3,96,246,139,253,224,17,3,140,242,-234,180,3,224,168,1,0,64,160,35,134,78,64,156,164,146,98,6,128,158,-130,163,96,101,224,147,3,64,146,70,63,160,148,64,0,0,58,96,147,226,-187,0,75,61,227,23,3,136,198,166,182,1,95,49,81,140,160,108,4,53,-32,79,32,35,69,169,129,145,171,234,97,186,165,70,2,95,49,53,138,12,-0,54,135,4,0,32,77,17,131,1,0,90,65,11,234,234,3,224,163,5,-224,160,0,0,67,91,110,128,96,138,25,139,138,121,148,225,22,7,96,0,-4,79,32,80,32,35,242,158,4,64,79,0,97,96,79,96,27,0,56,224,-27,7,0,98,224,27,1,75,62,224,28,5,0,102,224,28,2,0,48,224,-28,7,147,195,128,28,0,51,224,28,7,110,247,128,28,0,57,224,27,7,-0,116,224,56,2,0,49,224,28,7,0,118,224,56,2,224,143,8,64,3,-227,116,1,225,193,0,132,77,69,198,65,76,165,21,159,98,1,49,52,89,-128,102,81,64,18,71,202,0,53,133,100,65,127,99,13,1,53,53,64,56,-204,0,240,21,0,193,189,0,53,96,70,100,79,96,17,0,58,96,6,104,-249,136,30,205,78,209,5,0,49,64,96,75,95,140,210,128,19,250,186,2,-160,127,64,87,137,63,226,230,3,1,53,50,205,156,192,64,97,121,226,96,-9,64,69,105,150,236,141,0,160,40,226,52,3,224,10,1,96,50,0,51,-160,58,173,109,96,250,129,28,128,123,81,49,224,74,4,0,58,96,102,237,-112,16,106,156,7,10,65,32,111,114,100,32,58,64,76,160,42,224,41,11,-131,101,2,99,104,114,64,41,237,197,0,75,126,235,128,0,64,252,64,23,-149,55,128,234,65,122,138,111,181,49,225,218,6,83,10,225,218,1,0,49,-114,113,0,58,99,167,3,10,65,32,60,71,40,181,29,198,248,0,58,96,-60,162,46,180,234,96,106,0,58,100,64,132,9,0,89,153,171,0,80,128,-6,206,183,0,58,96,145,96,47,1,49,57,64,47,168,89,135,209,118,141,-84,97,0,58,99,143,199,167,180,115,0,61,96,11,212,109,107,155,180,109,-100,94,98,119,100,22,83,236,132,65,102,4,133,93,96,15,130,135,130,130,-180,151,96,23,107,175,84,128,0,58,96,35,171,174,69,36,66,145,0,58,-96,26,96,43,200,33,194,143,74,92,189,74,138,253,200,1,224,32,4,255,-229,1,197,20,244,45,1,97,34,224,65,4,224,64,5,65,33,98,135,104,-94,129,228,181,19,172,19,224,169,2,140,177,181,19,242,168,0,96,30,161,-52,117,179,97,33,180,183,182,180,0,58,97,61,160,36,160,53,235,56,0,-242,122,0,110,93,151,228,65,74,66,236,81,114,1,95,49,85,8,96,51,-129,144,82,19,7,83,116,114,105,110,103,32,58,96,27,170,163,75,132,96,-46,67,191,138,176,64,222,160,26,141,30,113,224,0,95,106,244,0,58,96,-102,128,233,160,56,0,54,74,184,1,90,32,224,31,0,129,152,4,110,101,-119,67,65,128,112,2,76,101,110,64,115,129,33,224,224,4,181,0,76,30,-181,0,129,148,2,115,101,113,103,40,86,68,128,43,64,44,129,33,73,80,-180,172,193,150,128,1,114,22,225,173,3,224,20,3,224,17,8,224,14,5,-224,11,2,192,8,110,175,128,209,226,224,1,238,233,11,110,210,5,10,65,-32,79,32,58,99,82,99,74,0,48,72,140,1,95,49,111,174,224,8,0,-1,95,49,82,154,148,28,1,95,49,81,89,192,11,243,99,0,64,11,72,-83,192,11,99,6,83,214,0,58,96,18,65,200,4,112,111,107,101,87,132,-156,211,239,3,112,101,101,107,192,18,194,136,107,24,1,95,49,115,137,1,-95,49,71,5,0,58,64,90,160,201,111,56,144,12,96,34,224,50,3,177,-237,160,50,226,151,1,1,95,49,101,64,72,131,0,50,96,150,132,194,178,-159,4,116,111,73,110,116,64,128,129,45,3,116,111,80,116,69,21,178,131,-239,171,6,178,67,175,100,139,86,79,66,64,102,67,204,65,30,66,144,131,-144,0,95,105,97,0,95,78,26,170,30,240,236,14,96,52,130,69,99,156,-1,95,49,145,239,70,208,98,213,0,32,96,68,0,95,132,2,0,58,65,-142,160,70,229,178,5,177,9,110,248,115,88,72,97,0,58,97,196,5,10,-65,32,113,117,111,64,232,177,0,226,89,1,226,93,2,226,132,73,177,78,-97,40,164,177,0,95,244,182,1,0,95,80,252,163,190,224,21,1,163,196,-71,75,162,126,140,70,244,166,1,0,58,86,174,128,197,0,95,81,85,0,-95,71,191,0,58,96,39,66,87,5,102,114,101,101,32,58,177,110,135,207,-224,94,6,86,76,150,139,212,5,246,73,3,146,204,0,95,81,111,224,118,-3,0,58,177,170,237,79,1,64,167,133,128,96,249,219,107,181,39,108,112,-64,0,224,253,3,193,227,225,69,1,224,119,2,1,64,95,81,200,128,162,-133,144,0,57,251,60,8,102,71,178,10,3,85,32,75,51,227,216,5,0,-58,178,9,75,198,0,83,107,49,143,30,214,145,2,83,32,95,134,28,64,-190,224,95,11,128,94,243,82,9,232,61,0,177,38,68,226,0,58,177,39,-96,197,105,143,130,179,215,236,226,184,7,177,75,248,180,6,8,117,110,100,-101,102,105,110,101,100,74,76,0,58,177,100,243,159,15,177,103,2,95,54,-49,163,206,74,111,99,37,0,95,77,81,234,6,12,77,157,234,2,2,71,-121,64,1,1,95,56,201,222,96,37,233,227,2,64,37,96,19,96,10,0,-95,81,144,0,58,177,213,0,85,198,125,64,114,75,51,128,130,64,45,161,-65,0,80,96,12,97,123,244,65,1,132,14,96,175,65,112,186,39,218,85,-132,192,108,123,192,91,210,202,224,55,10,193,10,178,39,83,18,131,236,129,-5,192,13,124,180,225,105,5,179,189,14,58,32,117,110,115,117,112,112,111,-114,116,101,100,32,119,69,128,2,115,105,122,159,137,3,35,51,50,55,78,-196,9,64,35,50,49,52,55,52,56,51,54,73,161,0,58,178,115,243,140,-2,235,37,0,81,19,244,89,1,66,218,211,127,81,236,129,20,65,146,0,-50,225,33,0,129,143,184,227,98,111,178,144,4,105,110,118,32,58,178,136,-0,115,74,156,178,46,73,175,178,44,230,205,15,0,56,232,115,0,131,16,-165,18,178,73,4,95,54,55,32,95,80,206,0,95,80,222,0,95,113,46,-81,38,0,95,81,184,117,27,1,95,55,81,222,98,7,0,55,65,65,64,-9,0,58,178,124,132,30,99,48,132,43,96,37,1,55,32,239,246,0,178,-150,224,29,1,224,49,1,224,39,5,229,254,0,227,181,7,178,100,3,62,-61,32,58,178,87,2,62,32,58,178,85,75,56,177,211,2,60,32,58,177,-173,5,105,99,109,112,32,58,177,172,106,244,116,103,81,93,0,58,177,183,-74,241,177,109,65,64,177,19,2,80,32,58,176,164,196,127,164,188,193,74,-224,20,11,224,17,8,224,14,5,224,11,2,192,8,230,1,0,241,0,0,-236,179,11,177,18,4,110,101,103,32,58,177,16,2,42,32,58,176,4,2,-45,32,58,174,76,2,43,32,58,174,75,224,156,68,0,58,174,117,224,155,-2,193,143,174,129,170,45,68,221,66,50,77,97,96,12,166,113,1,64,58,-174,125,116,207,174,67,2,73,32,58,173,167,64,41,66,100,77,139,0,58,-173,157,64,29,252,90,0,173,135,8,94,109,97,108,108,111,99,32,58,173,-138,224,166,2,0,58,173,133,2,85,32,58,173,114,224,206,14,0,58,173,-101,64,19,0,95,116,83,0,95,99,184,237,112,0,67,54,136,197,173,114,-6,114,97,105,115,101,32,58,173,117,7,65,46,114,101,97,100,32,58,173,-118,13,73,79,46,103,101,116,65,114,103,82,101,102,32,58,205,105,3,51,-52,32,95,77,78,0,95,77,59,228,86,1,4,115,116,100,101,114,112,99,-0,58,173,133,2,73,79,46,128,20,1,32,58,173,126,128,59,70,11,224,-59,8,1,111,117,112,131,0,58,173,156,131,223,160,170,128,243,128,78,4,-111,117,116,32,58,173,167,4,95,51,56,32,58,173,119,2,73,32,58,173,-106,96,100,109,170,76,215,224,100,4,0,105,113,32,0,58,173,126,225,236,-2,0,58,173,2,128,99,3,105,110,32,58,172,244,129,104,140,177,208,58,-165,251,254,101,1,110,241,162,98,232,160,3,97,152,0,95,110,62,64,98,-129,21,225,215,3,173,55,204,142,1,51,48,102,74,194,92,143,101,173,71,-64,223,129,7,1,65,46,162,40,173,28,77,74,0,58,173,20,13,73,79,-46,112,101,114,102,111,114,109,73,79,32,58,172,237,94,190,128,241,118,128,-232,152,4,0,58,172,217,64,35,202,55,71,154,65,162,64,35,98,240,90,-210,225,210,0,3,62,62,32,58,172,205,0,95,64,78,65,205,143,23,233,-169,0,93,117,119,240,113,9,128,9,160,85,1,64,58,172,254,188,158,112,-58,175,94,112,255,112,45,172,180,128,35,96,32,117,187,192,32,0,95,99,-117,172,185,0,95,88,68,233,228,0,224,47,4,96,150,108,132,145,223,225,-14,0,172,122,232,94,1,195,241,172,128,120,203,0,58,236,112,3,230,77,-2,172,113,235,166,1,0,49,172,5,192,12,96,212,98,18,0,58,255,28,-3,143,42,239,21,1,194,122,172,115,1,95,51,98,24,110,192,130,0,74,-8,129,96,74,213,96,36,181,251,0,95,114,206,73,162,96,21,2,75,32,-58,230,83,0,69,249,96,11,2,66,32,58,226,211,0,7,114,101,116,117,-114,110,32,58,164,115,65,196,2,61,32,58,128,199,2,80,32,58,236,11,-7,229,65,37,0,58,229,148,3,228,146,9,229,93,2,64,239,0,58,64,-200,1,95,55,208,199,224,0,255,224,0,255,224,0,250,1,32,125,-};-unsigned char *combexpr = data;-int combexprlen = 32938;+122,76,90,49,220,133,0,0,31,118,55,46,48,10,56,51,52,10,65,32,+95,48,32,95,50,52,32,64,95,50,53,32,95,51,53,32,64,95,51,55,+32,1,64,64,224,22,4,1,52,48,224,22,13,0,50,224,22,0,1,49,+49,192,23,6,51,49,32,64,67,39,32,224,17,0,5,64,66,32,95,49,+50,160,11,7,83,32,83,32,95,50,51,54,64,4,0,56,96,45,0,57,+64,25,24,49,32,64,102,114,111,109,85,84,70,56,32,34,45,45,99,112,+112,34,32,64,64,64,64,73,64,90,1,50,53,64,97,96,70,224,100,0,+1,53,57,64,76,3,39,32,83,39,224,191,0,10,64,64,67,39,66,32,+66,32,95,50,54,64,38,0,50,96,58,224,105,23,6,118,101,114,115,105,+111,110,128,109,96,182,192,77,64,72,8,55,54,32,64,67,32,95,49,52,+64,64,64,5,7,79,32,35,51,50,32,64,75,96,91,0,55,96,150,8,+64,95,50,56,51,32,95,50,56,96,130,224,147,59,2,104,101,108,160,254,+224,144,12,65,7,2,52,56,32,224,49,1,6,85,115,97,103,101,58,32,+96,50,224,173,4,224,34,1,20,32,91,102,105,108,101,32,46,46,46,93,+32,91,32,45,68,115,121,109,32,124,128,7,3,61,118,97,108,64,11,12,+73,112,97,116,104,32,93,42,32,32,91,45,79,64,45,4,93,92,49,48,+38,64,84,224,75,6,17,92,57,38,92,57,38,91,45,45,110,111,109,97,+99,114,111,93,32,96,11,3,108,105,110,101,96,10,64,8,5,112,114,97,+103,109,97,96,14,224,10,2,3,116,101,120,116,224,85,24,4,115,116,114,+105,112,96,46,96,9,3,45,101,111,108,96,13,5,104,97,115,104,101,115,+128,97,4,97,121,111,117,116,96,10,3,117,110,108,105,224,83,1,224,78,+8,0,32,98,75,3,32,115,116,100,64,7,8,45,111,112,116,105,111,110,+115,32,96,58,7,105,110,99,108,117,100,101,61,64,235,4,110,97,109,101,+93,161,115,225,210,8,7,66,32,67,32,67,39,32,83,98,214,128,8,160,+9,160,12,96,13,224,29,0,0,39,97,171,0,66,64,11,224,8,5,0,+39,65,187,0,66,226,27,2,0,66,98,42,226,26,3,1,56,53,224,91,+0,224,38,3,193,250,128,10,225,253,6,6,110,107,110,111,119,110,32,128,+219,130,5,64,178,67,129,98,9,1,50,56,128,57,224,55,6,10,44,32,+102,111,114,32,118,97,108,105,100,160,59,4,115,32,116,114,121,226,70,5,+226,65,2,130,151,193,105,225,38,4,3,55,32,35,49,225,59,0,96,123,+96,237,224,234,2,64,141,224,231,1,96,155,5,53,53,32,95,55,56,64,+245,3,57,56,32,64,96,64,228,91,1,1,55,54,224,169,2,18,65,116,+32,109,111,115,116,32,111,110,101,32,111,117,116,112,117,116,32,98,205,20,+40,45,79,41,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,+100,96,156,224,152,2,64,111,128,0,131,153,0,67,161,69,68,134,0,56,+64,126,129,110,0,66,161,155,1,50,54,196,169,3,64,95,56,48,65,141,+7,95,50,50,50,32,95,49,56,128,72,129,233,128,26,2,95,49,56,160,+246,2,95,56,48,65,99,2,95,56,48,101,11,1,56,48,96,215,1,56,+48,68,164,2,64,95,56,68,50,192,0,9,58,56,51,51,32,64,10,65,+32,89,66,25,1,32,66,96,142,130,95,98,31,64,5,226,66,0,0,66,+69,144,96,164,64,185,128,188,224,9,11,160,65,66,104,9,66,32,95,55,+54,51,32,64,95,53,96,177,160,6,1,64,66,96,111,1,80,32,68,185,+192,119,161,16,64,251,128,65,2,32,61,61,65,137,128,212,64,125,0,85,+160,25,1,95,49,97,183,128,0,224,82,43,128,61,224,82,68,0,51,224,+82,29,1,95,56,129,205,192,72,160,2,224,60,0,98,11,129,124,128,20,+224,39,4,64,116,224,39,4,128,16,224,17,0,66,71,224,16,6,225,135,+0,0,83,101,133,0,51,67,73,4,54,32,64,35,52,66,76,128,0,224,+44,2,192,63,224,64,7,0,66,166,120,224,62,0,0,55,98,75,96,0,+195,94,128,104,226,192,4,164,98,66,19,0,80,96,26,225,20,5,224,101,+2,128,103,224,101,7,224,164,2,224,43,0,64,91,3,83,32,95,56,71,+215,1,95,51,135,139,224,133,10,224,82,1,97,141,1,39,32,64,128,224,+127,7,224,52,1,97,72,224,51,3,160,26,96,53,68,31,64,54,130,13,+2,95,49,54,64,150,129,182,96,48,163,42,225,96,6,128,153,193,84,225,+72,15,160,38,98,92,96,101,192,17,128,130,224,175,5,96,40,192,129,160,+135,160,6,0,58,99,214,3,10,65,32,83,96,145,96,153,3,32,95,56,+50,96,170,128,131,64,162,224,173,16,97,105,96,38,224,167,13,0,54,99,+247,162,116,164,127,65,47,2,95,56,50,68,107,136,87,3,80,32,64,85,+99,45,96,73,132,209,3,95,50,51,48,136,103,200,92,4,79,32,35,52,+57,136,181,64,0,2,85,32,65,64,9,3,95,51,48,49,99,53,224,115,+0,2,64,35,54,229,199,1,224,188,30,2,66,32,90,128,193,224,191,7,+102,202,69,35,0,50,64,178,193,98,132,180,225,148,9,96,44,0,83,64,+207,226,254,14,99,238,193,8,97,5,64,234,2,55,54,53,160,33,230,46,+1,3,47,92,57,50,230,163,1,96,115,64,230,2,50,52,57,160,42,233,+118,14,200,15,128,58,165,220,224,113,4,0,57,64,59,4,52,56,32,35,+49,65,96,96,0,74,160,3,67,32,95,54,64,135,105,211,69,238,64,29,+0,58,99,47,3,10,65,32,79,66,63,224,113,13,169,64,134,178,0,56,+100,209,224,45,20,73,89,192,44,68,212,224,44,18,233,132,1,192,48,65,+97,224,48,18,224,44,5,66,12,224,44,18,73,200,192,42,68,151,224,42,+18,105,196,192,43,65,31,224,43,23,73,240,192,47,66,53,224,47,18,138,+18,160,44,0,50,65,117,225,17,19,106,52,192,44,65,219,224,44,18,106,+86,192,43,67,121,225,151,20,2,119,97,114,140,65,2,95,56,50,65,196,+195,104,96,0,0,58,98,15,1,10,65,99,173,134,182,3,85,32,64,58,+98,77,224,21,0,64,98,128,21,0,56,96,21,64,19,1,52,32,66,93,+0,58,99,59,224,40,0,64,183,128,40,0,54,160,40,3,95,49,53,48,+67,219,1,95,49,99,100,0,58,100,129,100,150,224,1,8,3,39,32,95,+56,66,186,72,231,109,186,108,138,0,56,64,125,162,126,224,26,14,203,7,+224,27,11,134,49,224,19,5,66,62,224,18,6,100,0,106,238,72,255,224,+27,9,224,17,5,100,251,224,112,14,135,8,224,19,4,97,251,224,18,6,+100,201,224,18,5,168,99,224,84,10,97,182,65,59,0,52,225,126,0,0,+48,193,126,137,174,3,80,32,35,57,192,17,133,247,3,80,32,35,56,192,+17,131,234,3,80,32,35,55,192,17,129,243,2,80,32,35,193,198,64,183,+128,17,0,53,192,17,225,235,0,0,54,192,17,129,234,3,80,32,35,51,+192,17,193,230,74,200,128,17,129,222,64,162,192,17,224,180,0,192,179,65,+203,79,217,1,54,54,137,68,199,58,168,232,2,67,32,60,69,82,161,145,+224,25,9,138,1,224,26,13,97,40,139,71,231,138,0,160,26,172,172,0,+85,70,147,69,194,233,171,1,64,25,130,167,1,64,85,194,168,129,224,0,+85,64,61,104,187,224,49,5,64,102,160,49,128,37,134,12,133,98,128,0,+224,132,13,161,227,224,87,15,64,30,224,87,21,224,59,17,65,21,224,59,+10,2,56,49,49,132,28,135,123,224,160,1,225,67,15,98,192,224,189,13,+224,91,1,225,66,7,103,210,225,66,15,224,44,6,64,96,224,43,11,224,+116,13,168,103,224,70,9,102,205,224,114,30,99,194,224,114,11,225,3,14,+194,70,224,25,9,136,9,224,168,11,100,85,224,124,11,109,123,224,168,30,+137,193,225,27,31,226,210,16,226,209,20,224,43,6,226,203,2,225,27,6,+192,115,227,98,5,225,0,16,226,219,1,224,97,6,226,213,2,224,141,24,+226,197,2,224,141,5,224,44,11,226,117,15,69,90,1,49,55,98,252,64,+123,0,58,96,6,70,116,0,39,100,116,107,11,173,176,106,167,233,247,1,+204,81,64,27,106,206,1,49,53,96,240,112,159,0,51,64,128,167,61,224,+16,1,106,173,160,17,74,7,99,113,96,116,133,118,236,212,3,192,1,108,+82,160,0,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,+5,224,11,2,192,8,109,157,128,0,0,58,103,147,101,192,71,197,1,57,+48,243,21,3,30,51,52,38,99,112,112,104,115,115,114,99,47,109,97,108,+99,111,108,109,45,119,97,108,108,97,99,101,45,117,110,105,84,190,1,101,+47,96,33,6,45,49,46,50,48,46,57,128,12,2,46,104,115,64,58,4,+44,56,48,58,49,138,207,102,23,80,144,2,10,65,32,65,99,0,75,66,+193,0,58,112,169,96,122,138,239,0,90,204,105,0,58,112,202,96,43,0,+90,224,43,0,0,54,96,17,241,47,3,65,239,245,231,0,193,169,129,242,+143,7,224,29,1,173,94,2,55,57,57,225,228,1,66,103,98,222,242,238,+2,2,95,56,48,86,108,2,53,54,48,150,118,142,197,1,56,48,143,239,+1,64,80,233,136,15,3,115,116,100,105,201,133,0,48,64,72,108,77,1,+95,53,143,56,0,58,113,177,71,19,2,53,55,56,150,230,0,58,96,38,+96,208,65,147,2,95,56,48,78,224,1,56,48,64,254,131,118,1,95,53,+108,118,64,205,246,122,1,2,53,55,52,243,125,3,14,84,70,45,56,47,+47,82,79,85,78,68,84,82,73,80,172,119,97,25,243,196,4,87,47,96,+201,1,50,55,129,13,1,95,53,109,108,0,58,96,217,1,10,65,65,146,+0,50,96,148,131,73,225,101,3,225,68,2,1,95,53,110,124,97,54,224,+22,2,129,114,225,67,1,128,91,247,118,1,96,103,131,45,96,128,97,89,+0,58,97,105,131,181,160,174,225,173,2,1,95,55,67,200,64,102,0,55,+83,160,1,95,55,64,82,1,95,55,119,120,0,58,97,197,128,57,226,11,+13,96,234,0,55,142,3,195,12,224,142,3,228,15,3,98,0,97,130,2,+55,53,55,71,85,102,76,1,55,57,101,239,145,115,99,52,233,185,0,0,+55,78,205,109,214,133,29,234,86,1,0,55,85,178,2,95,55,56,129,182,+2,95,50,56,109,178,83,192,0,54,179,132,96,136,2,54,49,48,64,214,+137,1,171,25,0,55,68,108,128,58,128,70,64,103,160,6,241,21,0,0,+58,97,11,65,158,1,32,80,66,237,77,254,0,75,88,21,67,194,98,211,+0,58,96,86,162,85,64,106,160,133,64,142,64,11,64,139,0,55,117,145,+98,245,120,96,97,42,85,4,101,110,0,55,96,46,2,95,55,57,193,135,+0,57,66,172,97,14,96,120,148,56,227,56,0,0,79,67,78,176,147,131,+85,129,206,145,3,241,46,17,179,64,164,145,114,134,227,182,0,239,126,8,+206,240,197,207,145,37,224,119,0,2,64,64,82,69,155,161,37,162,78,160,+127,166,219,224,122,10,224,39,25,163,254,146,25,64,40,100,66,79,194,209,+165,224,144,27,224,180,28,130,118,0,58,97,108,165,16,64,37,226,99,1,+98,102,98,138,242,133,20,0,57,224,151,1,64,177,193,70,138,23,228,55,+1,10,98,101,103,105,110,123,99,111,100,101,125,132,50,160,158,161,253,242,+248,4,241,137,2,201,46,225,162,10,224,120,9,240,241,22,2,101,110,100,+224,128,3,224,130,7,226,128,0,228,93,0,97,62,2,95,55,57,162,11,+96,0,132,55,225,195,18,0,54,224,150,3,224,181,9,69,136,192,30,128,+96,211,78,1,95,51,69,158,128,247,72,46,64,208,0,57,64,55,0,54,+228,241,3,1,55,57,116,149,70,44,0,53,119,117,2,64,95,50,68,155,+131,56,96,123,224,200,0,224,100,2,96,57,70,102,116,0,164,26,224,241,+1,247,143,0,128,114,0,51,102,19,225,30,0,0,57,105,208,160,44,225,+52,14,0,58,96,8,69,214,0,50,133,215,96,53,3,10,65,32,90,160,+1,86,180,96,38,133,238,115,70,224,4,3,96,6,168,38,0,58,96,229,+224,37,11,0,90,66,207,160,34,133,203,3,75,32,75,51,64,110,64,142,+96,49,0,89,162,50,161,70,226,185,11,0,54,101,37,69,19,64,141,3,+95,49,57,56,110,74,96,0,2,66,32,82,160,64,213,47,71,232,249,239,+0,128,76,130,5,150,202,135,247,224,2,0,182,223,224,21,13,164,169,224,+2,0,224,43,0,224,15,2,134,59,162,89,64,3,224,19,0,193,36,224,+16,2,247,79,0,130,30,224,154,11,234,131,0,192,83,228,248,2,96,96,+0,80,101,201,69,217,128,24,1,95,50,81,170,212,227,96,5,3,95,55,+56,55,227,74,3,6,112,114,111,103,114,97,109,99,72,224,21,1,5,99,+111,109,109,101,110,146,70,228,134,1,118,253,228,191,4,164,217,163,181,102,+9,192,49,224,228,3,160,225,246,163,3,107,100,4,67,32,95,57,55,129,+186,172,60,224,61,3,193,17,161,14,161,11,224,255,4,133,132,224,249,4,+96,253,224,176,41,224,177,53,192,60,225,196,46,162,89,128,157,96,30,67,+61,227,78,0,225,198,26,225,176,3,225,220,13,181,241,225,203,103,68,65,+103,220,128,213,198,192,161,29,227,152,1,224,68,19,0,58,96,140,104,65,+161,51,96,60,160,5,230,165,2,230,44,12,76,77,64,3,193,5,248,27,+3,195,151,128,212,254,102,6,4,76,105,110,101,32,160,53,193,51,128,35,+4,64,95,49,51,52,64,203,193,61,224,59,8,0,58,160,56,129,39,64,+50,224,34,8,0,32,86,232,5,32,98,101,102,111,114,160,102,102,95,254,+186,5,64,35,0,46,254,185,4,192,172,97,141,224,10,8,224,101,8,1,+73,110,158,113,192,63,225,252,3,64,107,224,251,14,2,32,97,116,128,159,+224,255,138,96,0,225,177,163,0,58,99,172,98,191,64,1,2,80,32,73,+139,113,195,22,167,202,227,24,0,231,218,3,132,72,224,195,10,231,255,4,+224,14,0,64,67,0,58,107,164,176,93,75,185,2,55,32,95,74,143,1,+95,54,227,128,0,78,237,64,25,0,53,80,135,2,95,55,54,202,74,131,+25,74,166,103,100,172,94,0,56,64,60,0,55,79,100,2,95,55,56,64,+112,204,87,108,247,236,16,3,236,145,31,96,173,0,80,64,39,77,53,227,+181,1,216,126,0,58,109,127,239,239,1,175,200,96,24,136,156,0,85,128,+22,224,24,3,136,165,96,24,64,2,97,25,0,58,96,176,128,22,0,51,+168,191,160,49,64,27,241,133,3,0,89,193,126,64,1,134,82,97,138,173,+248,140,175,158,69,249,37,0,133,55,197,202,232,51,7,160,21,96,18,192,+88,140,252,224,35,7,224,41,3,224,43,1,96,136,65,251,228,223,20,7,+95,95,70,73,76,69,95,95,227,33,3,224,91,65,2,76,73,78,224,91,+21,166,56,224,91,43,2,68,65,84,224,91,80,2,84,73,77,224,91,6,+96,57,192,89,255,195,0,106,75,98,237,237,34,1,4,67,32,95,54,53,+203,221,143,221,158,210,224,163,2,224,2,7,192,30,225,115,3,224,106,2,+224,193,7,224,49,2,224,151,15,224,85,0,224,14,3,207,61,196,62,224,+30,0,230,3,0,224,173,6,224,118,2,234,112,6,224,18,2,128,56,64,+200,240,214,0,64,3,224,24,3,164,130,96,18,165,90,99,229,149,89,192,+5,152,97,225,34,1,0,79,128,149,64,48,72,209,192,189,3,95,54,51,+51,158,216,0,54,64,87,127,191,175,49,104,163,252,133,2,224,173,3,224,+175,1,224,22,65,225,172,13,160,25,97,15,97,80,141,151,64,22,225,95,+5,224,89,5,118,135,160,0,226,202,3,128,85,192,35,96,85,224,59,4,+226,231,12,227,2,0,129,65,161,45,96,137,0,95,81,202,68,157,114,222,+1,54,54,177,15,224,210,4,182,167,104,231,192,115,128,88,242,234,3,96,+15,1,54,55,99,65,64,16,230,48,7,230,33,8,224,101,0,226,46,6,+226,52,3,224,233,2,226,54,1,234,120,5,226,58,16,227,94,4,98,62,+224,56,1,110,82,129,43,1,95,54,129,131,226,41,6,226,252,7,103,24,+246,150,55,22,76,97,110,103,117,97,103,101,47,80,114,101,112,114,111,99,+101,115,115,111,114,47,67,64,34,8,47,77,97,99,114,111,80,97,115,246,+182,0,5,49,53,50,58,50,50,196,119,225,112,6,2,95,53,49,161,105,+65,90,230,90,0,2,95,55,55,83,212,0,55,234,182,8,7,37,72,58,+37,77,58,37,83,234,190,1,2,95,55,55,179,209,224,238,9,224,108,55,+6,100,32,37,98,32,37,89,224,108,33,65,222,96,18,64,117,232,154,1,+2,95,55,55,104,19,224,38,17,1,52,50,64,43,98,82,2,95,55,55,+249,198,2,224,101,6,227,158,2,97,251,96,223,64,30,244,182,3,232,182,+0,160,2,96,19,226,69,3,231,150,7,160,2,224,39,12,226,192,0,224,+120,9,224,124,15,224,181,8,224,141,3,131,233,234,139,0,224,194,17,224,+97,36,173,85,67,246,104,204,138,36,160,231,128,10,224,75,0,64,142,3,+95,52,51,49,97,126,205,92,241,50,7,141,106,2,95,55,55,64,97,245,+50,2,103,107,0,55,152,135,225,48,0,1,95,55,84,111,129,26,1,95,+54,73,255,144,113,64,0,0,58,106,44,105,83,247,148,4,1,95,50,119,+19,96,149,247,75,1,170,234,169,85,64,61,64,106,235,40,2,0,75,91,+147,0,49,227,190,2,75,93,6,98,114,101,97,107,115,44,76,162,227,205,+70,6,72,97,115,104,68,101,102,75,193,163,206,3,50,53,58,54,131,12,+224,138,130,107,190,0,75,154,178,1,75,50,96,7,0,58,97,186,202,231,+64,14,219,3,153,156,64,17,0,54,96,17,228,31,1,0,55,90,34,225,+143,3,66,49,89,226,76,213,0,50,73,95,118,237,2,35,49,48,89,108,+129,158,139,149,2,73,32,58,96,40,64,78,2,55,55,50,64,13,139,124,+3,94,71,69,84,73,121,3,77,73,76,76,96,36,139,124,112,192,225,57,+1,16,100,101,102,97,117,108,116,84,105,109,101,76,111,99,97,108,101,64,+214,0,58,100,146,148,118,230,55,0,228,86,3,67,20,1,49,53,248,171,+0,0,55,130,103,148,239,213,109,172,134,195,78,220,27,227,232,4,224,30,+1,128,16,91,210,68,143,160,40,227,138,1,120,221,234,104,12,2,79,32,+35,90,133,131,159,224,57,2,224,132,6,224,112,1,224,9,8,0,39,236,+110,5,172,125,163,114,202,137,244,246,9,224,5,3,245,2,27,224,233,0,+229,22,7,236,151,6,171,107,136,107,1,85,32,132,95,225,39,2,128,67,+247,0,0,225,15,11,237,189,2,228,206,3,157,147,225,144,1,160,10,1,+95,53,160,23,231,195,3,193,145,233,52,9,225,1,51,225,101,3,243,159,+0,229,248,10,233,129,12,225,21,12,224,81,4,225,27,27,0,52,225,27,+4,224,124,4,96,229,232,223,0,64,182,249,227,0,225,26,1,224,110,1,+226,211,4,224,198,9,160,2,224,29,1,166,119,231,29,6,224,188,0,97,+73,224,17,3,243,227,3,96,214,161,150,97,130,161,161,179,177,1,95,55,+179,254,64,0,234,172,0,224,105,1,236,226,6,224,1,1,237,190,15,227,+85,4,224,57,2,224,85,13,224,79,1,226,149,33,192,199,100,224,192,188,+193,134,160,106,244,137,1,1,49,53,244,138,6,224,54,3,224,53,16,244,+191,7,224,52,3,0,75,225,187,4,157,51,129,237,160,6,135,72,224,38,+2,64,16,64,98,160,67,227,56,2,91,103,81,110,0,73,167,126,226,196,+1,226,184,15,226,170,3,250,28,2,128,113,64,5,0,58,108,231,231,188,+42,104,151,0,58,104,109,69,237,94,163,103,187,128,212,0,67,75,199,165,+181,73,244,192,96,182,204,96,2,236,147,3,239,137,3,133,219,162,2,2,+64,95,55,64,106,191,201,2,95,55,54,158,116,0,54,97,42,160,179,108,+109,128,233,2,83,32,85,66,20,242,91,5,98,226,160,4,230,102,1,64,+177,179,101,240,79,12,7,35,105,110,99,108,117,100,101,103,229,180,39,192,+59,246,115,16,0,49,244,3,2,160,92,224,81,2,116,75,0,49,224,80,+1,224,140,1,0,53,65,251,224,75,18,64,242,129,184,225,141,2,5,64,+83,32,95,50,53,75,217,92,100,1,95,49,73,134,64,117,159,181,1,54,+53,175,103,224,173,13,3,57,50,38,47,160,94,161,85,65,170,0,54,243,+28,0,110,8,130,119,161,174,226,15,0,1,51,48,72,35,98,86,2,95,+50,51,102,246,160,42,0,58,64,117,135,253,5,53,49,32,75,32,85,228,+96,0,227,184,1,129,26,224,11,0,1,95,55,238,202,0,0,58,96,199,+243,156,0,224,46,1,224,61,17,192,8,220,121,64,75,244,16,0,128,144,+244,11,0,0,52,169,53,66,59,201,53,169,39,64,255,128,18,0,50,105,+75,1,64,58,98,111,226,181,0,231,199,3,132,145,135,237,229,139,2,225,+40,1,196,175,194,240,160,164,2,95,55,53,96,232,245,64,1,99,196,3,+95,50,57,49,195,53,225,105,3,99,0,67,206,1,95,55,75,40,227,121,+0,0,54,141,159,0,95,75,143,64,13,130,9,1,95,55,65,233,0,58,+99,43,245,66,1,161,4,96,206,182,141,80,83,86,64,175,244,96,69,160,+114,1,95,55,66,138,0,85,100,227,201,138,0,52,108,152,64,48,229,82,+0,1,95,55,83,39,0,58,96,195,106,12,4,53,52,32,95,54,69,197,+128,197,0,58,96,31,249,185,3,231,177,17,132,240,129,48,134,177,132,4,+2,95,55,49,108,227,128,93,129,243,64,165,128,13,229,165,2,96,35,2,+54,56,55,234,184,0,163,36,0,55,64,13,0,58,96,46,226,79,2,137,+112,225,179,1,225,188,4,230,95,4,232,142,1,225,135,0,64,201,228,149,+0,102,81,202,132,2,95,50,52,64,209,0,50,123,62,64,15,0,48,235,+92,1,4,50,55,53,32,95,64,30,228,14,9,31,85,110,109,97,116,99,+104,101,100,32,35,105,102,58,32,112,111,115,105,116,105,111,110,115,32,111,+102,32,111,112,101,110,12,32,99,111,110,116,101,120,116,32,97,114,101,58,+228,13,0,64,83,95,45,131,229,107,43,0,50,95,76,129,155,196,28,232,+80,1,134,7,98,212,224,227,6,202,109,0,85,229,225,1,232,135,3,224,+42,5,243,89,25,231,175,4,200,117,231,178,3,129,57,200,125,224,25,3,+243,30,0,224,69,9,224,72,0,224,184,7,96,75,224,146,13,163,179,167,+209,114,117,67,29,185,109,192,0,226,6,10,160,53,224,31,20,226,44,0,+130,183,224,171,2,163,250,224,36,6,224,71,16,160,43,224,146,2,224,41,+15,224,50,1,224,191,26,224,45,2,224,93,5,192,175,224,31,4,224,2,+12,224,52,4,224,191,23,224,56,17,99,32,224,42,2,224,5,6,225,61,+7,224,60,6,225,211,8,224,1,5,248,15,25,0,100,111,73,248,13,3,+224,0,0,224,189,6,224,152,3,224,14,9,224,152,72,4,117,110,100,101,+102,224,151,27,225,103,6,225,69,7,224,151,71,1,105,102,224,152,144,224,+151,15,227,123,3,224,151,12,192,11,227,213,0,128,0,224,143,19,224,190,+7,224,43,19,224,187,27,224,184,11,225,79,6,226,113,6,224,210,4,224,+141,68,2,101,108,115,227,17,12,224,143,113,225,31,13,172,14,120,55,64,+2,64,130,248,220,4,224,5,27,245,25,2,240,55,1,224,139,18,1,110,+100,224,140,1,201,187,231,212,51,96,80,84,38,96,84,231,170,5,231,113,+14,192,0,225,143,112,225,3,3,224,0,3,224,144,111,5,112,114,97,103,+109,97,224,145,11,243,51,0,226,33,8,192,10,128,122,143,16,224,22,3,+192,146,104,136,224,11,10,241,48,9,128,126,192,16,253,85,8,128,245,232,+107,6,233,112,4,65,20,239,138,2,87,68,186,252,107,254,224,212,0,160,+0,233,4,3,224,178,4,225,120,7,228,216,4,224,159,1,224,1,1,225,+147,11,224,39,11,64,1,228,204,26,143,17,225,142,9,231,206,6,229,120,+12,224,112,9,224,156,10,224,36,9,64,1,224,153,25,6,119,97,114,110,+105,110,103,224,153,8,226,153,4,226,168,6,224,125,65,4,101,114,114,111,+114,224,123,11,224,2,9,225,15,0,224,99,6,224,161,0,224,69,2,224,+140,11,228,203,29,80,104,224,143,7,224,73,7,209,114,100,229,82,26,0,+49,79,125,224,0,1,227,94,1,192,183,128,127,192,9,227,89,1,224,8,+4,64,201,205,204,139,238,2,95,49,53,94,79,1,50,57,68,238,1,50,+57,100,238,128,72,114,148,101,4,122,10,64,67,2,95,50,57,142,146,0,+66,99,37,1,51,48,252,141,2,160,27,143,235,224,211,6,225,205,6,225,+226,2,228,10,1,224,38,8,224,19,10,224,16,7,224,13,0,110,125,131,+212,128,28,128,20,70,1,1,51,48,65,135,5,51,54,48,32,95,53,64,+10,192,0,227,219,3,226,12,34,237,32,9,64,1,236,235,14,0,83,64,+71,225,97,0,225,197,0,65,44,238,148,2,192,0,225,211,12,231,51,4,+230,233,3,193,166,64,76,0,54,83,171,70,241,2,95,53,48,124,26,128,+22,231,8,0,128,15,231,11,5,0,87,131,148,20,58,32,117,110,107,110,+111,119,110,32,100,105,114,101,99,116,105,118,101,32,35,130,157,98,2,147,+191,224,61,8,78,241,2,105,110,32,231,60,10,224,205,9,166,3,97,236,+128,152,226,41,4,226,13,9,129,203,1,95,53,124,246,225,167,6,226,245,+255,128,2,226,245,4,128,31,160,45,226,247,11,118,122,2,95,50,51,225,+168,1,225,92,3,128,206,0,50,66,63,225,249,49,231,4,2,160,228,130,+163,65,119,128,5,194,162,128,168,231,122,26,96,31,226,64,3,163,12,227,+9,1,128,185,226,237,3,226,184,48,224,148,31,64,0,231,232,7,161,208,+232,185,16,118,80,247,85,1,226,17,1,226,190,0,129,224,224,131,1,96,+50,1,53,56,119,179,83,247,0,54,93,145,2,95,50,57,129,64,225,74,+1,224,98,0,0,85,161,89,192,86,228,64,3,121,15,224,193,1,128,145,+64,5,148,187,247,16,16,225,42,2,1,49,52,82,213,88,50,128,0,224,+213,0,151,179,148,238,224,80,2,117,14,163,199,224,0,0,224,222,1,160,+9,161,98,0,50,96,86,224,160,6,225,138,16,99,122,97,13,226,206,1,+224,49,21,3,95,54,55,54,116,212,192,106,224,49,35,128,16,64,0,226,+220,1,229,151,3,225,194,1,225,226,3,193,134,2,95,55,49,225,184,4,+129,160,227,172,1,84,200,224,119,2,160,34,100,169,130,4,224,41,15,64,+21,65,243,85,139,0,49,218,59,224,59,38,96,180,102,143,224,70,6,192,+55,98,148,161,33,128,13,128,6,64,102,160,86,2,95,55,49,152,105,225,+197,12,228,176,2,196,230,226,160,2,224,28,8,224,15,5,224,64,3,64,+26,224,33,5,69,2,133,169,228,39,0,64,18,99,251,164,124,228,9,0,+160,10,247,50,4,123,191,0,48,64,19,1,52,57,128,19,165,248,96,0,+224,206,8,76,110,135,181,1,95,50,123,100,233,224,2,128,80,134,99,70,+15,96,112,226,65,7,252,54,0,194,191,192,17,224,91,5,98,211,248,119,+0,224,116,24,224,58,17,193,37,162,13,128,217,202,92,96,20,228,124,2,+162,46,192,15,162,52,224,14,1,136,229,192,53,96,32,134,44,192,101,97,+79,135,90,0,55,65,79,160,232,0,55,96,251,64,45,2,95,52,51,64,+243,130,135,224,197,7,192,46,231,110,5,0,55,64,78,224,30,2,160,153,+128,19,224,14,5,160,178,162,54,160,9,96,8,167,39,120,178,226,223,3,+254,28,0,248,251,13,64,32,100,217,1,51,51,254,212,0,110,65,1,64,+35,228,211,1,225,124,1,64,252,0,56,96,76,131,232,222,52,2,95,51,+48,253,72,0,226,186,3,161,154,73,192,226,115,1,226,198,1,230,244,12,+232,111,6,225,0,5,192,83,230,80,14,164,225,232,52,0,226,215,1,229,+163,1,225,98,2,225,231,1,64,124,202,248,235,44,4,139,35,224,49,4,+225,129,0,224,77,5,160,31,248,24,4,224,30,6,224,114,1,248,25,41,+224,156,5,229,157,7,224,2,1,248,224,10,226,76,0,224,90,10,138,57,+224,90,0,239,67,9,224,32,3,224,206,8,139,254,0,50,80,109,192,209,+110,21,245,214,13,224,43,26,96,39,224,30,17,192,73,224,0,1,227,233,+2,236,215,7,224,166,2,224,195,1,224,189,5,224,105,15,244,24,6,225,+21,6,224,78,42,244,247,4,224,173,5,224,77,1,224,74,1,0,67,224,+74,17,243,34,5,128,46,99,44,101,137,128,19,226,50,1,96,151,96,13,+128,22,237,145,1,224,57,2,125,41,128,34,66,61,192,122,93,49,0,64,+132,39,96,80,97,103,128,101,64,34,253,4,0,128,34,200,166,232,182,10,+244,190,92,224,207,3,112,164,225,93,0,128,103,69,100,224,217,11,224,251,+24,161,87,196,73,230,240,0,160,0,225,26,1,238,201,4,233,55,36,97,+51,125,84,236,185,2,194,9,224,10,2,232,28,4,194,55,226,243,1,232,+193,0,224,240,19,230,192,1,137,17,224,223,7,224,122,1,161,77,235,108,+4,225,254,0,198,86,192,85,231,228,12,231,203,13,228,135,5,99,172,239,+74,4,226,173,2,97,148,231,93,34,224,186,1,231,64,18,230,51,9,231,+62,85,231,28,0,231,29,10,231,26,5,231,25,5,161,13,135,16,224,242,+26,224,225,19,231,21,5,231,14,3,96,13,2,49,57,48,238,65,3,31,+51,52,38,99,112,112,104,115,115,114,99,47,109,97,108,99,111,108,109,45,+119,97,108,108,97,99,101,45,117,110,105,118,4,101,114,115,101,47,96,33,+30,45,49,46,50,48,46,57,47,76,97,110,103,117,97,103,101,47,80,114,+101,112,114,111,99,101,115,115,111,114,47,67,64,34,64,5,0,73,69,185,+2,46,104,115,64,89,4,44,54,56,58,53,132,193,0,58,96,145,1,10,+65,139,167,64,174,86,218,132,186,196,197,65,62,65,80,226,115,3,194,117,+0,58,97,172,3,10,65,32,80,77,180,0,53,64,228,163,242,231,93,3,+96,233,65,90,130,163,201,111,160,15,0,35,96,81,192,12,145,144,201,145,+0,58,96,8,96,159,238,218,4,2,95,50,57,64,146,64,176,228,138,0,+65,69,107,134,0,58,98,174,5,10,65,32,85,32,90,224,1,2,0,75,+244,221,0,0,58,106,57,96,85,98,223,65,216,5,54,53,54,32,64,73,+64,33,128,253,194,29,128,184,99,4,96,208,75,173,171,179,2,95,55,52,+69,1,1,55,52,143,60,1,32,79,65,51,0,80,64,40,64,29,165,90,+245,158,12,80,33,0,35,158,159,0,32,129,136,208,77,0,79,129,1,162,+92,96,6,97,147,132,107,128,171,0,75,172,90,98,145,96,178,226,64,12,+97,234,2,48,58,48,193,233,64,94,1,10,65,64,158,0,54,224,41,2,+3,112,114,101,68,96,136,0,100,64,39,0,58,96,187,1,10,65,102,255,+145,226,0,54,79,94,74,100,97,241,96,4,138,116,0,58,64,72,129,102,+1,75,50,65,93,129,96,0,58,97,15,128,22,0,51,96,22,98,243,0,+58,97,44,161,115,64,1,194,49,64,0,227,64,1,168,57,227,164,6,129,+146,224,25,15,233,31,2,224,29,13,233,64,3,224,33,16,224,36,3,224,+37,20,224,40,4,224,41,23,224,44,5,224,45,26,224,48,6,224,49,29,+224,52,7,231,19,3,224,38,4,232,246,6,237,157,0,224,0,1,193,138,+224,55,5,224,103,14,224,40,19,224,43,6,224,83,30,224,75,16,224,41,+50,192,232,199,165,165,151,244,52,6,224,5,9,235,200,0,225,21,3,192,+1,0,89,224,96,1,224,28,9,224,32,6,224,172,14,230,140,1,224,42,+2,224,74,11,172,84,192,155,233,44,1,192,5,224,105,2,192,67,230,201,+5,192,250,64,25,245,55,1,160,13,224,2,4,224,242,16,165,215,5,67,+32,60,32,64,35,237,46,3,224,67,9,128,218,192,34,224,70,5,160,203,+128,70,139,46,224,37,10,148,100,224,22,4,75,220,192,19,224,103,3,238,+31,6,224,13,5,97,94,230,139,9,64,0,65,32,0,85,81,218,105,34,+102,123,81,179,224,27,0,129,66,64,74,65,98,98,10,69,219,0,49,74,+37,255,179,3,224,182,3,64,1,224,186,0,224,25,4,0,82,224,187,0,+227,133,7,128,24,224,41,1,225,236,1,224,184,5,138,43,224,44,7,225,+176,0,224,64,4,96,185,238,225,5,102,147,128,0,224,221,9,96,5,149,+188,236,14,5,1,32,32,236,233,0,224,252,11,224,134,1,128,13,234,255,+1,65,89,0,50,129,106,103,184,170,155,224,0,4,224,178,1,128,1,238,+253,9,226,70,17,128,28,162,70,236,11,1,224,37,4,225,8,1,3,67,+32,61,61,224,39,17,193,177,225,155,8,229,27,0,224,81,1,251,135,0,+224,100,4,64,44,96,42,160,173,160,26,96,17,89,240,172,215,225,4,1,+192,106,240,69,8,192,36,64,61,75,252,2,95,53,56,160,52,226,124,12,+224,78,0,224,1,17,226,143,1,224,43,21,194,161,224,37,9,225,151,10,+225,49,0,224,1,1,226,183,15,234,230,3,224,47,4,252,209,13,226,189,+13,241,159,3,196,217,227,159,9,233,186,2,130,129,65,47,193,48,225,55,+8,162,174,229,35,4,224,228,47,227,93,2,224,228,27,194,91,227,162,6,+227,35,2,224,154,5,226,138,2,227,188,9,228,154,0,67,111,227,186,12,+224,82,11,224,237,121,224,68,2,224,237,43,69,183,224,237,17,231,103,6,+224,233,11,226,2,10,192,2,128,40,224,38,0,231,168,0,224,73,16,224,+70,27,160,108,224,65,11,224,62,4,224,53,2,193,86,225,9,2,226,216,+2,228,83,10,225,45,7,128,5,224,77,11,160,209,64,21,0,85,142,155,+0,50,119,83,128,79,0,67,76,204,247,50,2,224,89,60,108,30,224,89,+5,212,60,224,89,15,225,24,2,194,67,96,4,224,67,2,229,23,17,226,+3,3,133,152,225,128,0,64,14,161,79,65,107,129,111,192,44,201,40,69,+57,0,82,236,165,0,77,117,226,216,2,236,170,8,192,53,160,253,129,171,+242,47,4,224,38,0,144,15,168,116,165,31,160,94,240,8,85,7,84,111,+107,101,110,105,115,101,208,8,5,50,49,53,58,49,51,244,204,7,224,1,+5,234,199,3,224,31,11,224,35,7,225,119,6,224,2,2,234,239,12,224,+83,14,234,242,39,161,122,227,133,6,64,43,234,246,67,241,189,0,128,229,+224,68,7,224,74,35,235,65,255,225,39,10,235,65,255,235,65,17,226,46,+48,243,2,0,226,46,18,224,86,6,235,2,8,96,78,225,116,8,231,228,+13,1,49,50,227,50,1,224,43,2,182,215,225,115,26,226,37,7,96,228,+192,8,64,48,151,147,94,1,0,50,116,126,247,23,10,225,143,4,1,45,+123,232,40,4,227,197,9,196,90,224,154,1,235,243,0,224,19,4,64,57,+194,95,87,221,246,159,7,234,246,2,226,110,22,233,31,14,227,32,11,225,+57,33,0,49,65,14,160,0,226,174,34,1,125,45,226,174,20,226,7,2,+198,203,226,141,9,128,21,224,160,4,227,143,13,224,225,11,227,143,33,224,+225,3,192,59,226,28,23,251,51,7,224,254,18,224,84,0,195,89,224,88,+3,160,147,117,132,122,68,128,139,233,144,5,224,67,1,192,1,229,148,62,+135,72,229,148,13,224,47,2,228,75,6,102,42,224,161,5,226,24,9,229,+165,17,224,0,1,224,188,1,160,140,96,62,239,189,21,224,52,6,231,12,+6,239,152,2,163,145,231,181,2,224,76,1,228,227,29,225,127,2,224,37,+5,225,125,10,226,197,2,231,133,10,128,24,224,102,8,226,200,8,185,18,+224,90,7,194,200,225,19,7,224,198,1,224,45,1,225,16,2,224,89,2,+224,90,12,201,70,129,34,154,88,224,50,2,224,44,3,227,16,10,64,99,+1,95,55,120,191,64,14,162,13,249,136,2,224,63,22,98,120,192,63,224,+54,2,224,65,8,225,80,10,160,246,224,241,5,64,144,224,194,11,160,129,+227,125,29,103,154,226,219,23,192,14,160,26,224,47,5,228,237,21,64,1,+242,38,213,242,40,9,224,46,18,242,43,5,224,40,6,228,8,10,225,57,+0,224,1,1,227,75,15,242,46,144,224,229,9,224,226,10,224,152,4,230,+244,75,224,62,2,226,224,9,229,188,0,69,235,232,242,2,230,212,3,224,+101,6,64,1,224,202,47,233,220,13,224,203,72,0,53,137,75,233,194,16,+163,39,237,250,10,226,131,47,243,205,155,224,83,8,224,241,122,243,209,84,+240,86,7,224,237,6,232,105,1,226,222,7,224,178,0,102,250,228,37,3,+237,13,2,224,53,4,225,72,13,224,31,1,225,69,15,0,51,115,149,224,+44,7,227,15,32,224,62,2,225,37,19,0,57,225,37,3,1,39,39,225,+37,5,224,99,1,224,196,68,0,83,226,77,12,2,66,32,90,226,29,11,+165,86,224,219,4,232,24,3,226,244,19,1,55,32,128,128,0,79,128,7,+244,40,0,224,101,7,225,162,88,135,117,237,109,11,192,5,225,189,17,244,+214,46,1,66,32,160,245,148,224,225,2,8,231,218,17,227,26,73,224,204,+2,224,95,24,228,34,0,160,95,228,153,8,96,2,160,101,224,83,3,202,+201,224,80,18,224,77,30,224,73,25,224,70,27,193,221,224,65,10,224,62,+4,224,53,2,162,20,64,12,194,25,247,161,197,224,89,81,247,251,77,224,+173,9,229,57,4,228,87,9,224,48,18,100,141,64,185,64,53,0,52,228,+141,8,227,23,6,224,180,1,66,29,64,14,162,15,66,43,130,47,192,44,+206,221,248,97,217,4,57,52,58,49,49,230,162,1,235,99,5,224,237,3,+192,1,248,74,1,224,25,7,192,1,228,206,3,224,37,15,224,35,4,224,+30,10,97,42,248,181,4,224,36,9,192,1,248,220,5,229,11,7,224,2,+0,132,20,160,11,224,162,26,225,199,2,166,169,224,5,8,224,68,3,160,+73,227,20,2,163,26,228,241,6,240,205,1,224,1,1,229,20,16,224,156,+16,164,225,241,80,8,64,0,229,184,3,229,113,10,230,111,5,224,95,27,+249,85,3,224,95,0,238,242,4,128,5,224,106,20,224,97,20,233,232,3,+224,38,8,164,91,3,67,32,61,61,224,42,20,248,152,15,242,67,3,240,+28,9,240,26,6,240,24,8,228,33,0,235,147,9,241,141,7,128,108,234,+77,31,248,174,7,1,39,32,232,63,13,224,69,3,224,154,3,96,12,229,+253,1,98,170,241,111,0,128,63,248,151,8,224,79,3,224,1,3,240,90,+3,226,59,2,164,169,128,1,225,52,10,225,104,7,241,86,1,224,102,9,+229,45,0,224,28,11,234,166,0,224,79,6,192,107,198,203,224,31,5,166,+160,230,127,2,234,209,15,228,21,10,225,247,8,193,68,202,82,162,43,193,+89,160,32,128,73,245,177,2,225,172,0,183,173,229,208,2,197,209,224,103,+5,246,80,1,226,137,64,244,223,22,224,64,4,225,41,10,241,210,2,228,+192,0,208,165,224,222,19,245,58,6,128,191,224,126,1,224,13,4,129,69,+224,117,12,64,113,225,78,2,252,166,3,233,168,1,128,0,224,201,1,64,+1,246,47,255,246,47,221,226,154,0,131,135,229,44,9,96,207,245,162,8,+224,0,1,192,166,160,170,164,58,167,162,227,139,13,224,52,5,194,212,224,+22,9,193,234,249,43,6,224,37,5,226,174,10,64,1,239,162,4,224,134,+4,225,39,0,160,25,64,220,226,195,6,128,21,246,182,39,230,112,21,224,+0,0,224,167,5,224,1,9,246,144,8,237,196,9,161,90,224,166,0,225,+99,12,194,90,225,145,5,224,42,11,224,123,1,227,141,16,231,207,50,231,+144,1,224,103,11,224,64,4,229,69,10,232,14,2,229,67,3,181,29,8,+95,50,51,57,32,95,50,52,49,236,165,4,224,165,2,224,83,13,224,146,+11,0,83,255,157,33,232,98,12,101,214,224,142,1,244,195,19,129,151,226,+97,2,96,109,199,14,232,19,14,224,149,3,232,16,1,224,21,1,96,25,+225,253,2,224,47,3,192,72,238,104,4,225,40,7,226,39,2,224,244,10,+231,247,19,230,162,5,195,62,231,244,6,224,163,1,160,16,192,58,128,148,+132,193,248,142,7,128,56,99,100,0,79,135,33,225,230,1,232,6,2,225,+6,6,243,184,3,193,109,200,210,226,212,19,129,23,224,69,3,224,92,6,+232,41,102,228,68,4,64,62,225,8,13,192,57,233,184,4,224,229,17,96,+132,224,153,8,194,146,250,149,15,228,15,6,224,67,17,103,57,224,67,2,+246,110,2,224,130,5,225,7,9,244,165,4,225,7,27,240,211,5,224,51,+30,240,209,8,226,136,5,224,158,3,224,178,0,98,25,192,188,229,243,0,+224,16,0,2,55,50,56,96,16,160,127,4,66,39,32,95,55,132,184,96,+30,252,165,0,64,0,230,29,17,225,26,5,64,11,225,116,6,227,220,0,+227,123,1,224,151,1,128,16,177,30,128,5,104,51,224,89,1,96,37,226,+148,2,224,173,1,194,48,230,238,16,192,93,243,148,27,227,151,0,224,117,+1,128,1,253,62,1,224,80,0,224,224,6,227,180,1,128,209,230,246,5,+162,92,224,67,1,224,61,7,224,64,2,224,61,22,163,42,224,59,11,224,+55,4,224,52,2,225,15,4,128,158,244,242,16,224,243,1,228,237,2,228,+234,4,225,78,14,244,47,10,224,76,71,192,223,96,51,226,140,9,160,217,+128,204,224,60,6,128,0,226,124,1,226,133,4,224,169,6,165,42,105,192,+140,137,128,98,237,188,12,128,50,230,187,1,224,98,8,228,195,12,226,231,+0,96,253,224,56,13,224,59,1,225,71,9,64,6,237,122,4,244,42,108,+5,49,55,49,58,49,50,232,34,4,108,126,229,71,1,2,50,51,56,232,+90,4,97,144,196,134,196,92,0,73,129,236,0,83,165,80,224,51,20,100,+177,0,51,224,59,1,2,64,95,49,104,210,1,83,39,64,56,64,24,2,+52,55,57,98,74,2,50,51,54,165,156,232,208,2,1,95,96,160,173,224,+47,2,1,56,48,224,47,17,0,39,224,48,0,224,33,15,7,40,41,44,+91,93,59,123,125,128,38,224,37,15,3,32,92,57,38,224,33,21,22,58,+33,35,36,37,38,42,43,46,47,60,61,62,63,64,92,57,50,38,94,124,+45,126,192,52,193,28,230,220,2,83,0,224,20,4,83,149,143,40,128,11,+231,4,0,7,58,55,52,51,32,64,10,65,162,240,130,130,98,224,163,1,+130,241,67,59,109,156,130,106,4,80,32,95,49,56,140,187,226,146,1,224,+30,1,225,231,20,224,215,1,3,108,105,110,101,226,33,0,224,71,50,5,+112,114,97,103,109,97,224,73,0,232,50,0,128,208,224,68,30,2,100,101,+102,224,142,1,132,79,193,67,224,52,17,4,117,110,100,101,102,128,51,193,+16,64,183,1,95,49,98,129,1,95,54,97,40,227,118,83,4,72,97,115,+104,68,96,185,195,120,3,56,56,58,53,96,145,0,90,64,191,4,55,50,+57,32,64,108,83,192,0,196,45,160,163,128,235,160,2,6,95,50,53,48,+32,95,55,66,39,1,95,49,66,251,243,225,0,97,252,193,249,224,208,102,+0,57,160,208,233,173,3,226,35,1,199,250,160,13,165,26,225,186,15,3,+79,32,35,52,234,101,4,238,114,0,130,222,225,10,0,120,39,162,131,199,+83,75,247,97,58,0,50,65,85,161,233,1,52,56,225,12,2,16,105,110,+99,111,109,112,108,101,116,101,32,109,97,99,114,111,32,98,85,8,105,116,+105,111,110,58,92,49,48,163,231,224,56,10,2,32,32,35,130,128,0,32,+163,213,0,39,160,34,100,221,1,52,56,73,226,224,184,0,3,95,55,51,+51,96,16,233,243,7,224,204,0,129,37,232,242,4,160,203,227,10,17,224,+80,9,235,121,8,227,154,31,64,74,238,187,3,226,96,1,161,100,64,65,+232,91,5,227,255,10,228,121,0,161,14,1,55,51,72,0,197,220,243,188,+0,1,95,57,139,138,103,156,128,96,237,104,0,102,62,192,76,194,221,116,+168,162,221,128,204,192,25,0,55,192,25,1,95,55,64,209,224,31,1,5,+54,49,48,32,95,54,180,104,132,28,231,250,0,65,161,0,54,171,13,64,+8,1,51,48,65,17,1,57,51,64,9,96,48,235,40,5,128,147,64,40,+0,57,65,52,0,54,64,87,0,51,229,174,5,197,156,2,95,53,49,242,+31,0,195,176,97,7,0,53,226,22,0,226,65,1,0,35,229,5,2,224,+56,2,224,55,4,0,52,224,55,11,229,133,0,224,53,2,64,163,96,167,+64,253,67,10,129,7,67,252,169,81,227,138,12,130,19,238,71,2,226,24,+10,64,188,234,5,7,195,195,195,189,224,76,1,136,229,234,153,1,2,95,+49,53,64,163,199,41,96,95,224,33,1,130,79,73,253,237,115,1,235,19,+3,247,153,1,224,167,22,225,30,2,0,35,230,87,1,195,81,128,108,228,+137,22,241,163,7,224,98,28,192,59,176,98,229,154,1,140,194,225,6,8,+160,245,64,12,226,114,5,224,12,3,128,0,164,21,224,53,0,163,192,225,+74,8,225,73,7,68,117,224,23,12,244,186,2,2,64,64,89,96,181,227,+19,1,229,135,2,224,138,6,0,58,110,66,6,10,65,32,75,50,32,58,+96,69,64,11,2,32,75,32,64,25,0,48,160,13,0,65,64,13,65,195,+1,10,65,65,204,1,48,32,99,228,224,4,1,0,58,99,159,64,28,4,+50,53,49,32,75,75,152,10,32,67,32,80,32,75,32,95,54,54,49,226,+221,2,2,114,101,112,70,136,8,109,101,110,116,44,32,97,116,32,230,173,+88,3,50,53,58,54,129,206,224,139,131,76,3,224,141,130,0,90,140,173,+97,217,96,157,0,52,224,157,131,66,93,0,55,226,93,14,101,67,65,218,+101,132,64,9,201,100,96,12,96,214,64,17,160,216,96,18,141,153,224,26,+1,227,56,0,0,58,102,139,2,10,65,32,65,15,0,90,68,144,192,4,+151,44,0,58,96,100,1,10,65,224,29,7,224,34,5,0,52,160,34,81,+145,101,192,3,95,53,49,50,99,34,139,216,227,34,23,69,255,5,98,114,+101,97,107,115,227,33,120,224,138,113,1,64,90,225,198,0,97,93,193,193,+65,86,89,115,225,182,0,0,58,107,29,161,112,128,27,165,180,224,10,24,+232,216,1,0,32,83,47,226,3,0,133,2,192,44,224,7,11,224,70,2,+224,59,2,0,58,96,163,226,30,6,224,60,5,128,41,0,58,96,217,98,+103,0,90,121,135,0,58,115,217,96,57,2,80,32,35,69,153,0,85,66,+48,91,72,1,10,65,64,18,1,51,32,71,254,0,58,119,253,192,38,66,+248,128,38,130,148,67,4,79,110,0,58,113,146,226,197,1,160,96,130,124,+224,144,11,0,58,115,95,160,28,1,80,32,155,3,0,80,96,72,129,10,+3,80,32,35,53,192,128,128,225,0,80,121,23,96,17,81,215,128,17,0,+54,192,17,128,203,113,105,234,66,1,112,109,145,76,3,95,55,49,53,73,+106,70,230,1,54,52,69,9,0,53,138,50,64,128,170,131,129,41,144,49,+1,58,55,64,6,239,19,0,80,15,224,65,14,73,250,67,102,170,121,70,+237,0,52,231,75,1,1,95,54,182,37,96,86,2,58,55,49,193,77,0,+66,169,83,238,167,4,157,157,96,8,152,212,1,95,55,143,170,233,24,6,+200,116,247,253,8,128,207,96,8,5,95,54,52,32,95,55,233,27,0,224,+60,4,246,0,2,162,145,64,189,96,224,72,87,2,55,32,95,215,247,103,+242,128,48,2,95,55,49,182,240,160,20,136,146,224,33,2,165,209,192,38,+64,238,196,188,226,2,1,194,189,0,58,96,39,194,186,98,85,64,235,196,+199,65,66,72,37,2,95,50,56,96,195,193,39,225,108,7,233,88,1,225,+108,1,96,37,225,238,13,64,101,194,121,129,218,118,197,75,245,0,54,143,+188,201,180,116,115,96,138,237,234,16,31,67,97,110,110,111,116,32,101,120,+112,97,110,100,32,35,105,102,32,100,105,114,101,99,116,105,118,101,32,105,+110,32,102,1,105,108,237,203,3,205,205,3,95,49,51,52,73,18,139,223,+224,81,5,110,33,1,32,32,251,88,2,224,142,1,3,66,32,95,48,65,+20,128,225,114,161,1,54,49,64,157,156,45,0,53,225,51,2,201,106,128,+190,3,55,53,32,95,247,179,2,224,113,5,31,87,97,114,110,105,110,103,+58,32,116,114,97,105,108,105,110,103,32,99,104,97,114,97,99,116,101,114,+115,32,97,102,116,1,101,114,64,216,238,180,17,142,227,97,2,3,115,105,+111,110,224,247,47,224,240,1,130,70,97,147,2,95,55,48,101,142,225,146,+41,4,112,97,114,115,101,225,145,78,227,75,3,225,145,17,64,13,171,148,+225,154,11,1,95,55,141,223,225,161,90,225,1,56,225,155,3,2,95,49,+50,192,241,64,0,1,58,55,72,110,72,97,224,224,0,96,8,0,57,174,+198,236,236,12,1,47,47,128,80,143,38,161,16,0,58,97,16,64,73,4,+49,49,32,95,53,107,230,1,55,48,176,252,224,17,0,0,51,76,7,0,+53,111,53,96,8,64,19,6,54,48,49,32,95,54,50,224,178,3,1,124,+124,160,97,1,54,50,74,86,64,163,128,38,162,80,229,247,1,160,68,99,+65,64,217,68,92,96,141,64,40,224,141,7,0,55,224,141,45,0,38,177,+243,224,141,10,165,158,224,141,14,141,225,96,141,172,234,1,51,50,96,35,+64,113,224,10,13,224,135,9,79,111,0,51,207,111,224,188,2,224,140,2,+96,217,96,218,224,129,0,129,204,224,49,5,1,55,48,176,116,224,17,2,+212,19,224,38,7,128,21,224,212,5,170,175,224,83,9,246,170,1,0,52,+130,52,81,106,1,52,53,113,164,1,57,56,103,247,194,122,128,53,0,49,+72,166,224,17,5,0,53,171,109,3,95,54,50,57,64,248,224,220,2,97,+242,0,58,96,228,225,67,28,225,89,31,225,225,1,1,62,61,161,225,224,+144,1,2,52,51,56,64,195,161,68,225,150,12,1,54,50,225,150,1,224,+200,2,68,11,160,55,224,117,21,0,60,224,117,9,100,72,224,60,18,64,+117,244,251,0,224,55,2,72,43,224,116,29,0,61,224,116,9,225,185,1,+224,61,24,0,33,224,61,9,105,45,192,61,0,58,98,81,225,165,6,226,+45,3,0,51,137,139,224,29,1,226,144,7,66,105,226,144,38,224,18,4,+130,63,128,50,0,58,96,6,224,141,6,225,84,12,89,64,225,84,8,1,+57,55,162,197,225,139,16,0,52,243,8,0,226,1,4,224,55,2,0,58,+96,209,225,16,16,2,54,56,54,225,16,23,65,212,225,16,8,100,229,225,+16,37,64,50,0,58,96,6,227,68,17,224,228,13,226,230,11,0,53,99,+29,225,27,20,0,55,226,167,11,136,21,175,62,228,237,14,224,56,11,1,+49,53,96,196,229,79,0,138,3,1,95,49,100,39,74,97,2,95,54,56,+224,33,0,2,95,54,57,86,11,128,11,0,50,70,164,224,11,0,75,83,+128,11,1,55,48,86,36,0,50,64,98,128,17,108,136,64,9,106,92,1,+83,32,85,60,237,145,0,0,80,136,179,227,9,1,12,73,110,116,101,103,+101,114,58,32,100,105,118,105,105,57,3,98,121,32,48,167,105,237,205,1,+108,8,64,64,83,89,121,120,86,33,75,157,179,102,224,17,9,128,64,237,+115,5,135,235,245,177,1,247,197,3,3,32,95,54,57,129,23,128,37,104,+220,1,95,54,108,1,2,95,54,57,101,105,128,42,98,29,192,36,171,254,+160,12,0,83,171,147,66,6,0,85,83,187,128,79,233,41,0,109,132,64,+5,160,88,183,65,153,78,136,131,0,85,84,0,128,0,0,67,64,73,245,+190,0,160,0,0,58,97,113,1,10,65,160,194,64,58,1,95,52,74,7,+1,95,50,64,62,0,58,96,49,252,197,3,64,9,0,89,161,61,224,19,+0,237,96,0,64,63,2,67,32,79,246,137,1,246,121,5,192,219,173,33,+235,134,3,128,238,128,69,152,154,71,170,3,57,32,95,53,213,40,141,79,+142,85,120,226,0,51,224,28,2,96,241,100,27,98,54,106,235,192,12,2,+95,49,57,197,70,0,51,99,204,216,57,129,219,0,58,97,95,140,188,224,+211,1,206,161,173,216,206,30,224,7,2,71,95,0,52,105,231,1,52,53,+99,250,129,196,0,80,97,142,64,16,160,6,193,150,96,26,77,69,64,21,+64,59,127,143,1,52,53,162,94,64,32,160,49,96,28,192,216,96,58,0,+39,160,46,96,26,168,68,250,58,1,143,144,0,83,251,92,0,238,193,5,+243,36,1,64,69,107,61,0,52,69,90,224,117,0,143,219,150,193,224,253,+1,0,39,96,254,161,193,97,122,0,54,132,188,192,95,160,163,128,220,160,+12,98,99,196,226,0,57,96,217,154,42,224,197,16,64,39,64,48,192,243,+225,16,3,227,134,2,139,250,65,109,96,197,81,219,98,13,239,86,0,121,+245,112,242,104,217,1,67,39,66,133,1,95,54,65,249,162,139,224,77,3,+224,13,5,0,58,99,144,112,252,228,80,6,15,108,97,115,116,58,32,101,+109,112,116,121,32,108,105,115,116,100,74,129,44,2,85,32,64,81,246,128,+98,67,73,96,8,100,255,224,89,0,0,79,114,4,64,127,0,58,97,13,+227,72,0,132,232,0,75,98,124,134,138,99,223,0,58,97,255,175,173,68,+24,220,120,227,56,1,113,79,98,43,0,52,80,246,65,133,138,220,128,14,+0,58,100,9,2,10,65,32,88,56,64,45,255,62,1,249,87,1,192,93,+96,70,158,174,131,186,228,148,0,243,104,11,64,133,234,84,1,1,49,55,+96,125,138,85,67,102,234,85,5,128,116,133,105,0,67,131,153,129,166,96,+48,133,88,64,47,166,116,96,0,64,60,0,58,101,54,161,39,130,187,1,+95,50,74,114,129,29,132,171,224,27,7,97,71,0,56,204,91,1,50,53,+64,246,138,233,137,126,1,95,49,68,197,0,58,102,146,97,106,3,75,51,+32,75,65,53,0,58,70,250,160,81,1,95,55,70,214,67,23,195,225,154,+119,250,231,0,163,24,67,20,250,225,2,109,145,0,35,66,152,164,188,129,+96,193,181,252,127,4,1,35,49,163,213,0,85,71,31,73,223,167,172,193,+159,224,50,10,224,89,0,154,187,224,89,16,188,98,96,89,106,119,224,89,+0,128,19,106,195,168,26,135,216,114,81,129,71,0,82,66,175,193,189,84,+202,131,50,1,58,54,73,9,116,2,64,215,1,95,54,66,42,83,139,78,+85,161,191,193,240,0,54,108,224,0,54,84,51,0,58,64,109,224,54,21,+128,212,1,95,54,130,194,192,53,131,9,224,108,18,192,191,147,83,192,54,+227,50,1,64,1,251,45,3,226,196,0,226,200,0,128,16,255,128,3,128,+253,224,47,0,195,113,64,2,101,78,229,0,1,128,2,212,38,224,91,4,+193,248,224,22,0,164,239,128,98,230,69,0,0,64,156,231,192,57,134,21,+224,117,0,231,38,4,224,162,0,67,59,130,89,105,224,96,61,64,27,1,+95,51,68,81,68,177,244,205,0,192,171,2,79,32,64,84,13,97,196,225,+65,5,198,84,0,58,97,93,135,246,234,230,6,234,121,12,0,55,127,193,+201,248,130,29,234,253,4,2,54,48,55,66,82,67,215,1,54,48,95,211,+181,36,64,208,238,56,2,162,192,2,95,54,48,84,67,64,46,64,70,1,+50,54,96,105,137,121,130,240,212,56,165,248,192,103,64,23,0,48,129,38,+224,85,52,0,58,96,8,128,255,224,199,5,149,103,225,231,1,98,46,228,+245,0,149,19,230,31,1,0,100,120,246,0,100,170,97,160,53,225,82,5,+193,236,240,37,4,239,77,5,1,54,51,99,143,129,60,225,71,4,65,189,+78,70,99,228,241,248,13,1,44,41,210,73,235,233,5,225,167,0,128,0,+194,137,225,75,2,98,84,3,95,53,49,56,65,174,73,105,167,185,132,19,+245,194,6,0,90,69,84,1,53,48,96,214,96,139,236,206,3,96,0,227,+70,2,225,5,10,224,18,10,225,21,7,228,149,1,66,182,164,228,234,75,+0,224,45,12,65,72,224,65,12,66,31,134,149,224,166,6,224,88,9,224,+184,7,229,231,13,97,249,225,128,12,226,3,5,230,3,0,131,220,0,67,+139,83,129,82,229,186,0,139,218,87,64,64,118,98,94,127,205,165,69,224,+179,0,65,199,0,56,237,120,9,225,163,0,224,5,3,139,189,0,75,128,+45,94,150,224,69,13,1,64,75,64,103,224,26,3,0,57,224,26,1,66,+105,224,26,13,68,63,0,48,233,24,2,252,66,70,7,67,112,112,73,102,+100,101,102,252,64,0,4,51,56,58,49,50,161,82,0,75,234,239,0,128,+233,227,103,1,133,83,224,10,0,225,81,0,168,168,120,229,225,7,15,225,+78,7,171,68,160,81,165,235,64,13,161,198,225,98,7,64,24,252,30,1,+224,111,38,67,79,64,1,67,144,197,101,98,179,91,169,1,95,54,82,196,+229,111,8,224,113,6,238,204,0,96,169,224,69,1,197,28,109,6,130,31,+94,14,67,113,211,208,224,89,10,225,224,104,1,52,53,225,224,1,0,58,+101,212,251,193,2,231,159,2,0,80,136,233,69,16,227,164,2,231,44,6,+71,38,134,8,235,48,4,192,21,167,140,96,69,64,252,172,121,0,58,68,+245,128,118,149,153,120,108,85,215,1,95,52,64,144,65,209,90,235,133,124,+225,26,1,2,39,96,95,128,184,0,58,102,229,74,116,2,53,56,56,136,+120,0,53,80,240,96,168,108,247,97,227,65,107,0,48,228,49,3,25,69,+120,112,101,99,116,101,100,32,101,110,100,32,111,102,32,105,110,112,117,116,+32,40,69,79,70,229,203,0,0,58,103,114,251,229,15,0,54,75,124,106,+201,226,12,3,175,243,224,103,1,0,35,95,247,0,32,128,82,165,252,248,+151,1,0,49,98,100,208,40,81,226,210,82,160,31,91,225,1,49,54,112,+169,192,146,137,214,76,84,64,225,194,93,131,139,138,193,234,150,5,1,64,+35,92,49,192,188,0,80,70,103,225,200,3,193,138,160,26,0,51,99,50,+64,49,162,150,140,195,162,16,161,242,229,153,1,78,160,224,92,1,224,10,+0,235,70,13,221,122,96,33,237,68,1,229,145,0,224,44,4,170,212,98,+55,75,60,64,153,128,172,224,26,0,224,108,1,66,160,98,91,64,217,112,+87,226,168,3,140,58,232,74,1,236,64,15,192,87,224,204,6,224,159,13,+129,84,129,211,129,246,224,124,1,66,33,225,75,11,194,2,240,16,0,206,+16,224,134,11,128,86,131,120,225,56,0,224,107,16,224,242,3,128,0,2,+58,54,55,139,203,2,65,32,58,96,139,3,10,65,32,75,64,10,222,37,+210,65,128,235,130,72,224,144,12,158,123,225,6,13,87,116,122,240,152,183,+160,7,192,231,135,102,230,48,1,224,61,1,190,216,131,161,2,95,54,55,+96,70,2,58,54,55,238,120,0,104,2,200,253,0,54,157,20,133,105,133,+254,96,56,0,58,96,56,74,66,161,86,232,219,33,172,27,233,139,3,101,+178,0,57,96,119,234,215,2,106,212,234,28,0,160,140,233,230,19,161,161,+230,104,3,224,135,16,224,43,7,237,6,3,230,239,0,134,93,96,44,67,+220,232,184,5,97,7,194,228,167,46,225,124,3,231,49,6,145,46,206,152,+230,198,8,64,250,65,82,166,254,224,207,0,245,114,3,224,7,7,197,217,+129,196,230,238,14,128,0,230,223,101,2,51,55,55,230,223,0,0,58,97,+182,240,183,4,132,17,225,95,5,225,104,6,180,126,212,132,189,69,195,132,+83,198,133,208,0,51,82,130,130,65,109,180,1,54,54,64,39,145,88,112,+214,2,53,32,95,109,140,243,33,1,254,165,1,224,60,13,128,42,162,33,+83,16,194,44,230,93,4,5,109,97,99,114,111,32,128,226,194,4,166,96,+129,228,224,51,10,1,32,101,198,250,128,55,224,136,0,190,147,230,152,1,+224,145,6,192,91,224,74,2,23,97,114,103,117,109,101,110,116,115,44,32,+98,117,116,32,119,97,115,32,103,105,118,101,110,128,90,224,77,5,160,208,+194,9,132,40,165,94,64,2,1,95,54,132,249,64,141,247,146,4,234,21,+2,202,5,101,160,193,179,3,95,53,56,48,65,155,204,22,66,231,160,95,+98,135,0,53,228,110,1,108,123,132,224,2,54,51,51,106,47,91,165,167,+40,165,121,245,45,4,65,246,64,95,81,193,224,98,5,128,39,224,97,9,+65,47,99,95,67,76,71,187,193,63,165,184,133,79,101,8,0,56,134,33,+228,63,0,0,58,99,52,72,204,2,52,50,56,67,181,0,58,96,64,177,+144,71,162,0,75,64,83,0,49,225,130,2,4,101,120,112,97,110,89,102,+4,44,32,97,116,32,227,81,70,4,72,97,115,104,68,109,90,234,51,0,+2,53,58,54,130,54,224,137,129,109,105,224,139,128,67,206,225,23,129,66,+87,0,58,98,143,228,251,4,224,9,1,99,64,0,54,110,243,195,134,99,+62,88,157,1,95,54,135,250,182,74,84,146,182,170,64,83,138,136,232,71,+0,246,230,1,128,71,216,203,67,165,224,53,2,244,95,1,226,206,12,228,+80,2,226,206,118,224,137,112,226,206,10,224,139,114,226,206,8,224,139,114,+0,32,112,133,0,58,101,78,226,68,19,2,114,101,112,64,127,64,165,226,+70,120,224,139,114,226,72,10,224,141,116,152,209,82,224,224,148,128,0,58,+106,231,144,126,0,52,85,245,0,53,73,104,1,95,54,76,214,0,58,64,+165,64,27,2,73,32,58,96,16,103,151,71,150,2,95,54,53,103,214,120,+10,2,95,49,55,65,102,128,56,2,49,56,54,224,11,2,224,80,0,0,+58,96,6,64,63,4,49,51,53,32,75,182,139,0,52,252,229,3,6,110,+111,32,102,105,101,108,201,148,96,29,144,7,86,26,160,105,0,52,76,57,+96,11,0,58,96,6,96,145,0,57,67,0,0,50,76,176,1,49,54,233,+156,3,25,67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,111,110,+46,73,110,116,101,114,110,97,108,64,98,224,39,1,10,82,101,99,83,101,+108,69,114,114,111,114,96,123,97,165,0,58,96,226,227,100,2,0,73,141,+114,64,28,99,133,1,75,51,65,33,74,99,177,32,122,48,147,125,73,81,+69,240,64,8,0,54,80,210,1,95,50,185,53,198,34,234,171,0,73,133,+141,98,238,27,8,198,125,96,37,0,53,102,141,64,79,81,18,1,54,53,+173,89,1,58,54,77,4,97,6,0,51,68,169,0,52,66,92,96,28,1,+95,54,73,216,160,11,0,49,124,136,0,49,64,132,1,95,54,129,231,160,+35,88,4,160,11,0,53,97,92,160,11,64,76,96,11,0,58,96,6,216,+165,115,15,110,54,0,50,111,130,0,54,191,196,242,242,3,243,26,3,3,+95,54,53,50,95,103,143,37,0,54,96,216,224,6,5,0,58,64,107,64,+95,0,85,68,221,1,75,52,94,130,96,21,250,27,0,160,117,224,114,6,+224,101,6,94,1,224,101,11,0,58,64,214,224,94,3,193,221,175,55,224,+94,29,1,52,56,224,94,16,66,166,128,94,96,93,167,230,74,217,224,94,+1,224,91,5,96,82,1,52,51,225,23,8,0,58,65,153,160,53,66,14,+128,46,64,126,64,129,0,53,158,177,141,59,224,49,1,0,54,162,127,91,+153,0,49,66,178,0,58,64,42,224,69,13,255,3,3,224,71,7,129,227,+97,36,0,90,158,151,64,21,129,153,96,73,1,51,55,213,230,83,11,140,+163,178,196,96,13,177,174,236,209,1,2,95,49,53,76,45,188,24,128,30,+64,22,224,130,0,204,187,191,138,255,148,7,177,72,160,162,124,119,161,1,+100,24,191,171,96,217,76,145,99,24,96,180,130,56,76,151,0,51,112,169,+65,100,0,58,96,35,1,10,65,83,60,2,49,32,58,96,19,161,181,1,+64,58,96,39,255,147,6,64,116,0,10,84,102,0,58,96,249,96,29,127,+254,0,51,193,113,233,246,0,109,6,129,0,175,39,137,243,91,51,110,244,+130,67,115,48,97,163,160,254,97,98,64,21,224,136,2,129,134,224,92,2,+209,14,145,222,170,83,109,249,112,172,211,26,0,58,100,71,224,165,2,163,+61,192,141,143,216,189,89,0,64,78,93,195,10,2,95,54,48,128,66,2,+95,54,51,176,191,118,163,96,35,162,9,160,35,160,139,0,58,82,13,129,+98,224,93,7,1,54,48,98,107,96,93,99,199,224,93,0,249,43,1,146,+11,224,95,11,197,21,225,67,0,125,76,239,159,0,224,148,13,247,75,1,+227,203,3,0,51,64,203,224,230,12,99,42,0,66,88,171,224,77,12,130,+115,239,229,5,31,87,104,101,110,32,108,111,111,107,105,110,103,32,102,111,+114,32,97,32,110,111,110,45,101,109,112,116,121,32,115,101,113,28,117,101,+110,99,101,32,119,105,116,104,32,115,101,112,97,114,97,116,111,114,115,58,+92,49,48,38,92,57,38,102,82,0,58,97,91,135,102,0,48,243,7,0,+179,61,0,48,206,253,69,255,243,140,3,224,41,8,207,120,249,199,5,0,+58,115,180,128,92,253,223,3,67,64,148,123,130,57,230,94,6,131,125,253,+76,1,128,16,224,249,5,241,41,10,177,93,241,7,6,2,103,111,116,160,+35,224,157,6,0,58,64,187,64,156,120,158,0,89,100,27,65,121,0,83,+224,140,3,240,88,7,0,64,130,249,243,43,42,14,112,111,108,121,112,97,+114,115,101,45,49,46,49,50,47,64,43,5,84,101,120,116,47,80,64,19,+200,254,4,49,48,57,58,55,128,173,177,71,113,16,0,51,66,1,224,14,+1,246,0,3,68,113,224,25,13,64,228,213,124,247,81,9,159,241,246,95,+0,247,229,10,0,50,177,242,145,102,0,57,81,102,67,56,209,42,96,64,+192,12,128,44,100,42,97,102,2,51,48,48,82,52,214,244,224,134,50,72,+181,224,133,31,96,43,224,132,75,0,49,155,61,225,11,30,96,44,224,134,+8,181,215,224,134,51,91,143,224,133,31,96,43,224,132,16,130,235,240,106,+1,101,141,128,148,229,53,1,251,224,5,255,220,12,8,44,59,40,41,91,+93,123,125,96,195,97,230,101,0,116,19,228,247,0,71,140,224,99,6,252,+77,2,64,171,251,24,6,0,57,250,34,0,165,155,128,6,1,95,49,80,+165,128,97,156,54,165,100,228,31,8,13,66,97,100,32,99,104,97,114,97,+99,116,101,114,58,132,1,212,242,167,191,167,248,249,96,1,161,152,128,116,+250,146,0,212,222,251,59,15,96,176,192,33,136,118,161,88,160,46,160,71,+224,202,0,64,62,113,213,116,242,230,167,3,231,61,0,125,142,161,207,225,+222,0,96,103,231,91,1,225,220,0,162,6,193,229,192,91,213,5,224,48,+8,224,46,14,129,14,226,91,6,224,62,10,96,54,254,11,30,1,95,39,+229,122,0,192,215,224,98,27,64,79,64,101,96,11,65,130,128,47,3,64,+67,32,79,230,145,2,226,156,23,22,33,64,35,36,37,38,42,43,46,47,+60,61,62,63,92,57,50,38,94,124,58,45,126,160,145,129,226,193,223,170,+26,97,220,224,204,15,1,101,69,224,58,12,252,198,0,226,66,2,227,219,+9,215,166,224,110,2,226,14,8,192,130,225,135,11,226,22,12,231,17,5,+0,43,231,10,3,226,33,5,226,25,7,224,180,30,131,132,224,180,84,0,+45,224,180,34,224,128,65,0,79,139,109,194,75,224,124,30,196,114,224,197,+8,3,109,105,115,115,73,129,7,43,47,45,47,100,105,103,105,168,113,224,+39,8,14,97,102,116,101,114,32,101,32,105,110,32,102,108,111,97,224,38,+15,6,108,105,116,101,114,97,108,164,181,64,30,100,183,79,94,164,188,216,+162,224,204,8,224,68,1,2,46,46,46,227,123,1,96,229,195,69,160,0,+0,89,190,227,65,57,0,85,101,65,64,221,171,73,225,168,9,10,110,100,+32,111,102,32,105,110,112,117,116,64,191,165,80,224,35,4,2,115,116,114,+65,5,160,190,128,34,96,121,198,20,97,167,129,134,97,78,232,174,7,193,+205,247,8,10,77,52,0,50,99,68,64,68,166,158,97,179,64,135,129,151,+87,3,233,153,80,3,49,56,58,52,211,47,228,147,3,110,40,0,50,65,+138,250,64,0,64,0,250,60,4,64,36,0,55,65,95,96,39,230,132,2,+126,207,113,0,96,60,225,157,0,0,67,102,236,2,51,48,51,69,7,203,+253,129,159,234,144,5,225,160,13,160,166,0,58,107,105,114,219,254,226,2,+81,63,72,162,2,95,53,57,199,119,0,56,229,54,3,235,89,0,0,97,+225,201,0,71,72,163,167,225,182,7,115,79,235,171,1,224,70,1,3,98,+105,110,100,128,51,235,250,4,143,241,224,17,3,0,53,191,191,224,143,15,+224,132,3,4,32,104,97,115,32,115,143,3,110,97,108,32,198,92,65,141,+224,150,41,236,170,5,97,45,0,54,142,154,237,173,2,2,54,50,52,131,+31,238,54,8,238,83,19,0,58,64,213,175,60,0,50,78,244,64,69,237,+6,7,96,238,162,229,237,93,2,165,110,224,205,3,111,148,224,20,7,128,+226,224,194,2,224,238,12,225,204,14,0,44,109,22,0,39,231,157,0,224,+152,14,134,19,224,138,4,132,126,224,27,13,138,191,224,27,12,0,49,129,+24,224,28,14,157,221,224,28,15,229,229,0,224,28,11,169,20,224,28,13,+224,144,18,144,232,224,27,13,131,196,224,27,14,99,163,224,83,14,192,55,+101,83,64,27,102,62,224,157,15,251,145,0,224,28,10,237,124,0,64,24,+0,52,81,171,239,18,5,229,159,8,18,117,110,114,101,99,111,103,110,105,+115,101,100,32,101,115,99,97,112,101,240,0,1,1,105,110,225,253,4,1,+58,32,73,12,97,251,233,81,2,207,146,224,139,7,145,229,224,27,14,97,+126,224,27,14,98,42,224,27,14,97,153,224,27,14,97,97,224,27,13,0,+55,97,22,224,27,14,214,190,224,27,11,209,196,224,27,11,224,195,18,115,+36,224,27,14,69,244,224,27,16,245,169,0,224,27,10,97,79,228,179,9,+0,56,157,221,230,192,79,5,51,48,56,58,49,52,163,240,80,195,227,239,+5,224,141,8,66,185,229,216,24,196,125,0,35,130,204,235,135,13,0,39,+66,109,1,86,84,228,108,0,224,124,26,65,62,224,124,33,83,244,224,124,+20,1,85,83,228,233,3,0,53,85,231,224,4,16,224,154,22,111,87,230,+240,33,224,67,13,66,57,225,91,34,160,186,224,154,61,224,86,1,166,248,+226,9,61,224,67,22,67,71,224,154,33,244,239,0,224,242,24,226,40,37,+210,11,224,174,24,225,228,59,224,242,38,224,243,32,100,63,224,156,54,101,+183,224,156,34,210,55,227,188,28,113,149,227,188,33,171,194,227,188,16,4,+83,79,72,39,32,160,9,192,8,1,84,88,192,9,0,73,192,8,1,89,+78,192,9,5,85,66,39,32,111,114,160,12,0,80,240,129,1,228,119,73,+144,161,224,186,17,0,82,228,119,9,225,220,90,102,208,224,197,33,177,102,+225,31,27,104,10,224,157,55,224,67,28,226,122,1,228,253,0,225,101,16,+2,78,85,76,225,240,1,2,78,65,75,225,241,35,104,80,228,64,34,225,+241,23,1,76,70,230,230,35,231,99,37,142,29,224,123,17,0,72,231,98,+82,89,199,224,124,20,0,71,226,234,40,225,122,39,165,32,224,218,73,105,+227,224,218,18,1,70,70,226,94,1,0,70,224,230,1,232,74,20,225,249,+60,224,67,22,230,96,37,148,128,227,159,26,230,251,58,226,216,38,243,99,+0,224,155,24,224,242,28,224,155,22,68,80,224,155,33,218,61,233,38,92,+231,150,39,193,211,225,56,25,77,139,224,88,34,192,245,227,108,63,224,246,+22,224,157,38,185,191,227,178,13,2,111,110,101,83,7,99,173,0,69,232,+39,0,2,69,79,84,192,9,1,78,81,192,9,1,84,66,192,9,0,77,+227,225,1,2,69,83,67,227,226,14,224,197,23,234,52,59,226,0,37,0,+49,225,10,1,224,88,60,224,224,59,224,156,1,234,52,35,226,2,28,229,+99,37,0,52,224,174,38,129,74,224,85,23,0,53,230,181,38,134,92,224,+86,25,228,149,37,0,49,135,142,224,86,25,238,105,37,146,117,96,20,231,+13,16,1,68,69,233,109,2,2,68,76,69,224,12,2,6,67,91,49,46,+46,52,93,227,62,9,228,67,23,239,15,38,164,246,234,175,94,237,199,38,+198,204,225,65,17,1,67,82,225,51,1,2,67,65,78,225,46,40,228,104,+106,196,102,233,125,73,233,124,23,0,66,226,110,3,0,66,233,125,2,228,+83,62,225,39,23,236,173,37,196,242,224,207,17,1,65,67,236,159,2,154,+20,127,69,1,54,48,89,12,0,49,64,53,194,223,224,29,8,1,50,48,+224,29,2,218,82,224,31,0,86,74,1,95,48,160,137,154,89,0,49,64,+208,213,224,3,95,54,50,50,224,63,2,224,250,8,86,106,93,63,0,49,+68,139,8,67,32,95,52,51,56,32,95,51,123,88,0,35,150,199,3,32,+95,55,53,224,18,0,0,57,104,35,246,149,22,249,187,4,4,99,116,114,+108,45,182,154,8,109,97,108,102,111,114,109,101,100,150,139,0,94,97,18,+246,140,3,125,145,224,204,2,96,226,64,225,4,49,53,55,32,95,119,189,+2,95,49,54,64,252,64,5,128,160,160,0,225,143,2,187,81,224,17,3,+128,40,224,17,2,152,9,228,96,4,180,79,224,35,2,224,34,8,129,69,+224,17,3,174,26,224,17,2,224,88,8,162,236,227,87,8,224,234,2,158,+140,68,6,225,91,6,253,143,7,217,216,225,98,4,162,89,0,58,123,103,+1,10,65,118,99,0,83,66,210,0,54,70,222,224,61,1,6,100,101,99,+105,109,97,108,129,117,0,39,66,21,0,48,64,111,158,254,10,66,32,95,+50,48,55,32,64,95,50,48,96,176,3,95,49,57,56,94,98,160,188,97,+106,1,95,54,70,217,0,58,66,82,186,216,0,53,76,143,186,205,157,25,+155,200,1,73,32,96,143,0,49,224,143,20,2,111,99,116,224,141,37,161,+73,0,54,104,100,224,140,0,0,48,224,100,20,2,104,101,120,224,240,36,+131,204,1,95,54,116,53,192,99,71,121,92,35,227,44,3,5,95,49,53,+50,32,35,64,236,124,190,71,116,1,35,53,152,253,224,38,9,123,65,224,+38,0,187,23,64,174,224,39,6,102,187,224,39,0,152,248,3,95,50,50,+57,226,3,2,8,100,105,103,105,116,84,111,73,110,189,240,227,30,13,192,+16,163,40,64,86,193,204,224,49,28,96,176,224,49,22,64,39,96,255,65,+33,0,56,129,133,0,39,127,182,191,247,157,44,0,95,126,120,64,0,128,+27,64,5,228,134,1,100,179,1,48,55,190,14,93,76,160,115,64,38,128,+42,227,38,1,153,93,1,39,66,65,197,1,66,39,96,5,2,32,95,52,+107,15,253,191,3,131,71,225,230,13,64,17,121,159,1,95,53,123,95,224,+37,15,160,129,1,95,50,117,163,64,164,96,52,0,51,69,1,2,66,32,+80,197,83,224,64,20,160,108,131,18,229,39,9,3,92,49,48,38,227,209,+0,108,193,5,114,32,109,111,114,101,131,208,192,55,224,47,1,0,32,97,+250,0,115,227,238,0,66,232,158,185,226,145,18,65,249,0,58,99,49,160,+42,1,50,51,129,188,1,52,32,65,51,128,14,226,173,28,226,169,25,64,+104,159,2,136,210,225,215,1,97,214,224,125,1,0,52,86,46,0,67,64,+13,0,54,167,115,231,49,3,1,96,95,199,43,230,173,2,0,54,65,110,+230,120,22,0,69,254,247,0,10,110,32,105,100,101,110,116,105,102,105,101,+190,246,91,14,225,87,4,1,79,32,102,22,221,6,1,58,54,89,26,96,+186,1,56,56,132,204,1,95,49,96,228,0,58,96,122,64,25,2,54,48,+56,100,103,64,1,0,80,64,133,64,203,130,154,197,175,0,53,103,33,1,+95,53,127,22,162,249,0,58,97,2,128,64,0,57,229,53,0,98,82,2,+95,53,57,108,3,2,54,32,89,100,191,5,83,32,73,32,64,75,65,111,+96,4,162,66,192,50,99,135,98,135,0,89,69,117,99,78,64,13,64,57,+192,55,198,74,129,144,96,10,213,76,2,89,32,66,65,131,0,80,225,71,+24,9,102,97,105,108,101,100,32,116,111,32,124,96,3,32,97,110,121,79,+93,20,116,104,101,32,112,111,115,115,105,98,108,101,32,99,104,111,105,99,+101,115,58,66,196,97,87,99,199,1,53,32,121,198,64,11,3,49,48,32,+85,99,171,129,110,224,100,8,224,57,1,224,55,1,97,243,0,53,157,99,+196,47,67,214,128,10,164,15,129,10,224,19,2,0,83,96,14,228,116,0,+128,2,128,20,224,55,2,225,36,4,224,26,3,0,90,161,41,192,38,128,+76,96,11,0,39,102,220,192,91,1,95,49,100,11,0,80,160,64,194,57,+226,38,1,134,238,97,157,64,62,74,172,159,71,132,246,193,3,64,52,0,+58,65,31,128,45,128,115,0,80,70,103,0,48,134,103,2,85,32,58,66,+106,166,114,0,39,64,2,96,59,0,49,196,176,0,75,101,13,1,95,54,+131,153,64,157,130,79,0,48,99,35,0,85,64,31,0,65,224,33,3,66,+105,225,125,5,12,73,110,32,97,32,115,101,113,117,101,110,99,101,225,138,+14,133,82,101,113,99,193,0,54,194,116,69,146,224,137,12,161,33,101,40,+89,39,160,139,170,137,128,35,64,230,132,184,97,14,133,85,0,51,229,177,+0,224,80,5,0,58,96,117,128,43,3,54,32,95,50,104,98,227,5,0,+133,156,193,85,106,189,0,49,250,92,2,1,54,48,64,75,0,58,64,210,+129,74,0,85,193,144,2,90,32,90,69,151,2,51,48,49,235,249,5,198,+241,131,37,234,153,0,0,90,162,199,64,109,160,85,96,0,0,58,96,11,+97,176,0,75,96,228,0,58,97,129,96,16,0,73,97,207,163,247,0,48,+196,197,65,21,132,28,101,17,1,95,51,224,230,0,194,59,235,160,7,64,+237,3,83,32,64,82,227,177,3,225,198,1,159,236,8,115,97,116,105,115,+102,121,58,32,131,184,236,160,7,96,95,130,109,99,60,100,186,0,48,161,+11,224,75,1,6,82,97,110,32,111,117,116,67,233,10,105,110,112,117,116,+32,40,69,79,70,41,197,51,137,221,1,64,58,96,148,64,73,2,51,50,+51,64,71,0,53,64,168,224,153,10,0,110,164,60,130,86,106,218,2,95,+51,51,96,219,101,26,1,51,51,96,62,64,11,0,58,96,6,163,11,228,+233,1,0,83,202,89,67,202,227,193,9,99,184,99,187,98,94,0,58,96,+98,96,226,72,115,96,248,192,77,64,190,133,16,0,58,96,165,64,37,96,+177,166,82,192,35,128,226,129,235,232,159,0,224,14,6,232,144,7,1,95,+49,70,45,133,245,77,170,192,10,96,48,100,23,96,6,64,114,192,18,224,+230,5,229,208,9,0,67,162,125,65,54,96,181,229,197,4,1,95,51,71,+52,166,117,1,50,54,224,114,0,0,58,96,18,97,153,225,72,3,136,185,+142,53,163,23,0,57,160,250,64,50,166,217,0,51,68,99,224,122,1,102,+66,191,15,96,130,128,80,134,171,224,74,8,64,11,0,58,96,6,2,10,+65,32,67,90,0,85,128,16,194,210,0,90,128,242,65,171,69,59,0,58,+96,82,161,238,64,20,224,28,5,64,118,5,10,65,32,73,32,58,96,192,+103,54,64,141,1,54,32,64,28,129,227,71,126,128,170,1,95,51,73,198,+160,183,1,95,51,139,128,224,45,0,129,235,66,66,134,22,129,222,230,39,+2,96,197,129,120,132,237,96,140,69,114,64,25,0,83,160,58,0,64,96,+18,224,5,4,230,115,6,160,60,230,147,2,230,129,14,129,195,224,35,1,+224,116,2,194,229,224,114,0,73,106,243,213,2,230,245,2,160,73,160,46,+102,91,240,193,5,161,159,192,160,162,198,134,37,2,49,56,50,128,46,100,+206,64,5,96,91,198,171,2,64,64,79,68,203,198,221,224,174,92,0,52,+175,18,224,174,67,224,109,17,192,154,224,42,0,224,118,44,96,61,66,136,+166,246,2,79,32,35,64,93,224,136,5,224,238,20,128,115,0,82,64,107,+67,88,224,199,4,98,147,0,39,96,2,99,151,98,222,128,39,224,120,24,+224,255,1,64,1,0,89,192,23,226,245,1,226,178,5,224,48,4,72,237,+224,66,6,200,239,224,63,9,70,215,244,250,0,161,222,192,182,3,95,50,+54,49,71,160,224,98,8,1,95,50,82,79,0,52,224,24,10,232,161,5,+23,87,97,114,110,105,110,103,58,32,67,97,110,39,116,32,102,105,110,100,+32,102,105,108,101,235,201,1,224,62,3,237,101,0,224,19,2,237,110,7,+17,51,52,38,32,105,110,32,100,105,114,101,99,116,111,114,105,101,115,72,+247,1,92,57,224,77,0,238,185,3,160,77,160,73,0,53,142,194,224,13,+0,0,50,237,198,6,224,68,1,225,154,20,224,147,9,18,49,48,38,32,+32,65,115,107,101,100,32,102,111,114,32,98,121,58,32,135,49,5,49,51,+52,32,95,50,171,198,224,60,0,83,203,134,148,130,16,1,52,56,77,68,+244,117,9,6,109,105,115,115,105,110,103,97,48,160,81,244,158,3,224,144,+2,207,145,161,209,70,232,96,97,2,95,53,54,169,202,130,166,97,98,0,+50,97,182,224,39,6,94,59,129,110,192,157,235,34,0,160,63,102,77,72,+112,72,4,225,88,0,225,101,0,1,95,53,98,215,169,97,131,29,160,19,+128,0,113,38,68,101,1,95,50,70,18,170,101,82,99,64,39,0,52,101,+234,135,99,0,85,102,127,0,90,64,111,147,171,0,58,96,31,230,68,0,+67,203,0,54,235,152,0,75,35,64,23,0,51,112,165,160,222,238,150,15,+84,177,0,47,161,228,204,163,0,58,96,102,2,10,65,32,109,90,97,247,+129,77,228,57,0,97,202,64,107,0,58,96,50,1,10,65,224,124,0,224,+212,1,229,183,7,97,48,132,119,161,5,225,26,12,0,58,96,7,96,81,+0,58,65,94,166,234,225,154,1,72,210,64,105,2,95,53,50,65,114,65,+182,1,53,55,136,242,192,35,3,95,53,55,52,226,142,2,15,85,84,70,+45,56,47,47,82,79,85,78,68,84,82,73,80,128,238,135,60,227,236,1,+0,95,94,41,1,95,53,121,35,66,39,110,227,98,6,107,101,1,95,53,+87,63,161,223,226,38,2,65,78,136,101,65,43,197,17,152,215,1,55,57,+146,91,0,35,129,244,129,68,224,61,1,68,53,73,184,192,116,226,110,6,+225,46,0,151,18,176,172,192,175,128,161,224,193,3,65,24,0,53,128,78,+97,80,192,73,240,11,0,96,102,4,10,65,32,75,51,69,147,0,58,96,+38,9,10,65,32,94,103,101,116,98,32,58,96,202,106,67,5,54,57,32,+79,32,95,80,70,0,79,68,215,0,48,160,66,0,58,97,1,180,148,128,+230,1,50,51,66,184,227,170,11,225,115,13,243,244,6,20,117,110,107,110,+111,119,110,32,116,101,120,116,32,101,110,99,111,100,105,110,103,235,231,2,+97,203,0,51,65,97,0,58,65,209,130,10,67,118,0,54,74,157,0,55,+226,85,1,193,81,0,90,64,175,224,27,0,96,54,170,10,0,52,140,32,+65,151,1,95,53,113,215,0,73,102,122,3,50,32,64,85,64,47,161,237,+130,204,3,85,32,75,50,110,106,0,58,96,24,106,229,2,51,53,32,77,+202,97,113,0,49,205,216,99,106,0,49,67,165,132,220,96,122,64,92,2,+95,49,52,75,23,96,11,0,58,96,6,96,132,2,57,32,75,70,61,0,+52,67,44,229,48,3,23,67,111,110,116,114,111,108,46,69,120,99,101,112,+116,105,111,110,46,73,110,116,101,114,110,150,72,224,39,1,3,83,111,109,+101,224,35,0,97,40,161,153,64,215,106,123,161,31,145,0,138,250,72,194,+0,53,90,64,1,95,52,96,168,0,58,65,62,224,230,0,109,224,96,30,+9,10,65,32,99,97,116,99,104,32,58,96,63,147,88,226,238,4,67,115,+0,55,203,78,2,95,53,54,76,145,83,113,224,160,1,6,111,112,101,110,+70,105,108,173,31,226,203,1,0,58,99,178,99,213,67,12,78,70,96,57,+171,47,64,179,136,62,167,106,146,141,1,95,53,70,9,136,31,64,167,64,+3,200,46,131,44,100,176,231,39,2,241,141,7,166,36,96,128,130,9,228,+75,8,64,209,164,75,68,196,194,118,0,49,127,29,227,95,3,131,113,224,+33,2,117,161,96,90,130,54,183,170,99,25,0,53,80,40,75,186,68,30,+183,57,116,37,224,32,6,0,52,96,101,224,19,6,98,188,1,95,53,105,+209,1,95,53,131,253,224,119,0,120,132,96,138,96,114,1,95,50,66,162,+3,95,53,53,57,97,83,130,105,5,94,102,108,117,115,104,67,212,64,22,+213,77,228,181,1,80,80,228,255,7,196,196,135,24,224,5,0,78,175,64,+4,64,118,64,3,224,135,4,64,186,97,166,99,86,97,49,225,124,1,23,+104,67,108,111,115,101,58,32,72,97,110,100,108,101,32,97,108,114,101,97,+100,121,32,99,64,21,175,205,228,208,5,85,115,97,145,128,77,134,234,228,+213,1,141,5,0,58,97,22,132,197,0,65,64,242,64,22,97,9,0,66,+79,56,109,115,96,51,131,148,0,58,96,60,129,41,1,53,53,90,167,0,+48,96,52,130,141,6,65,46,119,114,105,116,101,65,39,130,140,0,94,96,+157,97,56,130,46,135,122,1,95,53,112,22,2,53,49,32,64,62,160,87,+129,244,7,116,111,70,117,110,80,116,114,64,50,198,184,123,117,98,227,65,+18,226,227,10,161,100,224,9,6,102,195,66,242,164,152,226,239,3,160,6,+0,58,97,106,224,81,0,104,226,128,144,224,14,5,224,11,2,192,8,136,+189,0,58,96,95,112,80,3,52,54,32,58,96,145,100,154,78,255,68,31,+0,58,64,23,128,18,133,50,82,119,2,95,53,52,97,162,1,49,55,80,+36,100,70,2,95,49,56,72,123,192,11,192,62,64,63,208,24,197,50,192,+154,148,146,248,235,8,184,241,176,52,193,20,64,174,75,165,105,94,160,19,+96,31,101,125,1,95,53,99,36,2,95,49,52,230,79,3,227,238,0,160,+43,96,30,224,36,16,234,40,4,64,46,66,231,230,215,13,101,101,224,84,+28,128,174,192,197,128,230,224,183,5,98,214,224,106,22,148,23,224,98,5,+1,32,40,128,98,224,134,9,75,143,234,254,2,224,130,0,96,115,70,146,+161,188,102,146,96,11,0,58,96,6,193,164,0,75,140,85,0,57,71,10,+245,153,0,2,67,32,60,190,44,224,18,6,84,220,224,19,8,64,224,233,+250,0,160,19,153,110,175,73,160,19,68,209,0,85,224,212,2,0,105,70,+230,3,114,117,112,116,196,17,224,28,3,14,114,101,115,111,117,114,99,101,+32,118,97,110,105,115,104,192,34,224,35,4,5,116,105,109,101,111,117,188,+52,224,110,8,66,144,224,45,3,7,117,110,115,117,112,112,111,114,122,154,+3,112,101,114,97,231,71,0,224,38,4,12,104,97,114,100,119,97,114,101,+32,102,97,117,108,192,91,224,243,8,67,143,224,243,7,104,146,224,132,6,+65,240,224,243,5,14,97,112,112,114,111,112,114,105,97,116,101,32,116,121,+112,135,45,224,35,6,11,118,97,108,105,100,32,97,114,103,117,109,101,221,+20,224,34,4,245,21,3,224,115,8,68,165,224,44,3,13,112,114,111,116,+111,99,111,108,32,101,114,114,111,114,224,111,9,5,115,121,115,116,101,109,+224,29,3,224,240,9,225,247,10,225,246,10,225,245,10,225,244,7,1,117,+110,149,218,12,105,101,100,32,99,111,110,115,116,114,97,105,110,220,1,224,+40,4,2,115,101,114,224,147,4,224,210,4,1,101,114,110,15,6,111,110,+32,100,101,110,105,225,10,15,226,2,7,6,105,108,108,101,103,97,108,225,+254,19,2,101,110,100,86,46,78,101,225,251,14,225,230,10,225,229,7,226,+188,0,5,101,120,104,97,117,115,226,224,21,3,98,117,115,121,225,201,14,+224,86,6,12,100,111,101,115,32,110,111,116,32,101,120,105,115,162,22,224,+31,3,199,101,96,30,221,84,96,0,196,11,64,168,196,11,149,46,64,6,+196,11,3,95,49,53,52,197,93,112,213,64,136,135,146,236,156,3,239,242,+8,135,228,0,45,96,112,143,229,0,53,68,147,160,121,128,109,64,83,0,+58,96,6,228,121,4,228,233,8,1,48,120,128,183,71,13,1,51,53,70,+3,0,52,67,68,1,95,53,105,44,2,64,95,53,100,130,224,209,1,135,+31,128,99,167,36,203,181,75,106,0,53,75,173,1,95,53,101,103,1,53,+51,69,52,0,50,119,75,96,77,2,95,50,48,96,171,160,11,0,53,224,+11,1,119,15,128,11,0,53,76,131,0,58,96,12,8,10,65,32,117,114,+101,109,32,58,96,73,64,13,3,113,117,111,116,64,14,167,86,1,49,50,+128,177,88,250,128,183,97,44,88,95,128,71,1,64,58,96,144,219,5,115,+6,134,222,137,124,65,111,76,81,136,105,238,90,4,224,22,1,102,85,74,+128,3,95,49,57,48,225,58,2,82,13,10,46,47,108,105,98,47,68,97,+116,97,47,76,69,10,103,101,114,95,84,121,112,101,46,104,115,64,29,4,+44,54,48,58,49,162,23,128,69,0,57,79,167,149,90,70,177,0,79,64,+129,186,34,161,133,224,34,2,224,26,3,224,23,2,212,64,1,95,49,151,+193,0,49,88,182,0,58,96,239,171,24,1,95,53,106,253,75,6,68,157,+155,22,130,99,91,56,96,7,0,56,70,129,123,226,96,66,1,56,32,134,+88,97,129,113,15,75,78,129,56,65,14,3,54,52,32,95,111,57,132,239,+1,66,32,143,41,0,95,95,164,128,148,0,53,224,9,0,1,54,51,191,+220,187,11,224,46,12,64,36,220,201,96,113,139,57,246,31,2,233,170,1,+128,23,125,71,168,189,225,172,1,0,95,79,40,128,223,224,241,41,128,12,+128,115,118,127,132,15,68,18,224,96,1,77,59,224,96,46,128,254,88,204,+224,100,1,128,224,160,216,192,215,224,102,5,64,213,100,4,224,100,22,224,+144,47,240,26,6,18,78,117,109,101,114,105,99,46,115,104,111,119,73,110,+116,65,116,66,97,76,75,7,110,101,103,97,116,105,118,101,231,24,7,129,+32,128,2,138,69,170,117,224,231,3,64,5,224,196,31,247,48,0,1,50,+51,224,23,3,224,84,62,77,149,224,23,2,224,254,32,232,191,3,1,98,+97,188,134,192,149,119,18,226,174,6,194,164,0,83,81,214,202,22,246,14,+0,108,31,224,49,5,194,105,160,83,192,11,226,117,8,224,70,4,74,231,+192,49,151,107,131,43,160,22,225,73,12,244,74,2,224,10,2,224,55,2,+225,95,3,0,51,92,11,140,20,177,116,186,10,225,81,16,0,58,100,110,+241,116,20,0,83,104,243,4,46,73,79,46,69,200,98,224,28,1,1,73,+79,241,103,12,77,12,191,25,82,107,80,83,96,22,166,111,1,54,54,97,+3,103,54,188,111,71,57,224,9,1,128,29,92,222,128,240,175,247,106,168,+64,0,2,95,49,55,240,7,0,0,58,96,6,147,145,2,56,32,58,96,+63,142,247,0,58,112,174,228,156,0,239,217,1,71,27,98,122,141,57,240,+169,0,182,117,162,18,224,47,1,119,245,108,121,113,3,134,236,0,50,224,+44,1,101,251,1,32,95,67,204,174,146,128,214,97,118,1,95,53,85,49,+64,6,131,112,1,64,58,113,75,180,32,0,80,148,65,0,95,71,38,192,+5,116,75,0,58,96,47,242,172,0,243,190,3,1,95,53,129,21,162,121,+240,26,2,111,126,128,226,183,123,224,55,4,97,47,224,177,0,242,117,0,+164,209,0,95,65,158,160,160,134,64,15,73,79,46,112,101,114,102,111,114,+109,73,79,32,94,38,99,143,244,64,31,133,244,4,102,112,102,105,110,65,+102,130,67,4,102,112,110,101,119,64,14,129,253,8,94,97,100,100,95,70,+73,76,69,64,18,129,249,96,18,2,117,116,102,97,167,207,243,1,95,53,+76,239,64,166,1,64,58,65,102,129,26,0,58,96,21,146,137,243,93,5,+148,203,64,172,192,224,96,11,129,76,238,33,1,0,79,80,95,213,215,224,+23,7,0,57,199,157,224,24,5,71,142,224,23,8,226,237,1,1,119,43,+164,73,1,95,53,104,177,110,159,242,149,0,98,157,1,95,53,103,139,225,+95,3,194,18,226,104,8,0,58,98,133,105,13,1,49,51,101,224,0,58,+96,61,163,34,192,221,120,32,119,64,169,210,192,6,131,4,96,118,0,58,+96,6,113,103,1,73,110,73,103,64,33,114,225,84,106,64,15,129,162,130,+240,103,225,181,4,132,82,101,22,195,15,136,163,180,98,91,205,164,118,224,+47,2,130,38,77,199,99,120,1,51,50,180,89,216,238,65,204,100,0,146,+104,250,100,0,229,95,0,99,26,194,119,0,48,88,253,130,124,1,67,32,+232,104,0,192,18,1,58,53,67,88,164,78,1,75,52,64,2,132,192,2,+58,53,48,130,45,1,95,51,92,110,1,51,54,74,138,70,75,87,13,74,+174,128,11,2,52,57,52,168,185,2,52,57,54,160,90,3,64,95,53,48,+80,102,96,33,0,58,96,6,162,139,64,139,1,95,51,82,163,0,58,64,+34,128,22,69,91,65,129,0,66,99,108,0,51,82,174,3,95,53,48,49,+82,15,0,48,80,87,0,57,240,87,1,67,144,0,51,72,216,0,80,64,+165,0,95,149,31,230,13,0,97,103,134,110,250,47,1,98,219,96,84,64,+184,68,2,224,23,8,160,76,149,74,227,190,0,128,27,219,18,192,24,192,+52,2,95,52,57,98,164,64,21,71,138,129,131,65,120,3,67,32,61,61,+173,158,2,95,53,48,97,53,0,53,226,231,3,2,98,105,110,206,38,224,+61,0,231,10,1,100,118,241,150,14,65,11,0,51,235,20,3,128,110,224,+44,16,81,95,163,112,0,51,167,120,98,131,128,12,225,54,0,224,237,1,+255,130,4,65,162,0,54,130,1,0,53,76,171,96,33,65,171,77,60,84,+142,128,219,132,228,0,58,96,228,224,43,1,157,155,2,95,51,52,89,230,+1,95,51,173,44,0,58,96,46,187,87,0,48,131,52,103,48,0,58,64,+76,162,36,0,51,84,212,2,95,53,48,99,177,76,193,128,22,66,26,64,+85,1,95,51,117,85,193,139,96,18,0,52,66,34,162,240,160,5,161,21,+0,52,76,243,96,255,146,254,64,233,64,50,150,56,0,58,96,101,196,17,+71,234,70,204,64,229,239,105,4,97,232,224,25,12,97,45,246,180,2,224,+25,1,102,142,97,220,0,85,226,23,5,128,135,162,184,247,191,0,160,43,+96,131,226,72,6,148,220,130,140,96,36,192,217,140,36,64,0,224,129,12,+97,114,224,85,16,132,227,224,85,8,98,69,224,144,22,143,188,224,58,19,+238,50,2,224,145,3,100,113,224,171,12,167,113,224,112,14,99,74,224,171,+45,143,150,224,171,20,224,59,16,100,50,224,59,9,158,189,160,0,134,38,+130,101,0,58,96,6,226,77,0,114,147,239,87,1,128,3,196,38,164,77,+69,9,160,86,100,154,192,12,2,49,55,52,224,17,0,1,64,75,64,16,+128,134,230,55,2,123,56,224,23,0,224,24,0,224,93,0,182,209,224,99,+4,224,86,4,233,69,0,224,142,12,0,52,70,40,224,47,5,224,24,2,+0,52,225,3,1,193,1,101,235,96,6,185,234,67,113,129,77,65,7,106,+10,104,0,224,179,1,128,123,67,5,197,106,150,152,64,138,93,51,96,107,+96,85,198,42,119,200,227,29,9,164,221,192,31,69,19,0,52,75,173,224,+24,1,229,211,6,110,26,64,0,0,58,70,181,132,145,128,36,104,77,107,+237,64,230,89,183,74,56,113,78,0,50,114,0,128,19,233,215,0,96,110,+76,110,140,25,192,66,224,63,2,175,82,128,112,64,254,171,8,224,10,1,+0,58,96,172,231,11,4,230,109,14,175,134,198,111,204,220,99,103,97,199,+227,223,4,160,27,97,22,160,49,229,28,4,230,50,11,0,53,230,95,1,+224,131,14,160,241,231,63,2,225,96,10,78,140,160,0,101,106,0,58,72,+39,99,27,69,222,1,95,52,72,39,0,58,96,80,64,19,229,219,5,133,+206,0,58,96,35,96,49,66,133,0,51,65,42,128,10,0,52,66,89,192,+10,64,193,128,10,124,130,160,10,224,32,1,97,140,1,52,57,161,238,64,+85,173,38,1,51,56,96,30,96,111,0,56,92,183,96,36,138,47,224,142,+0,1,57,51,161,185,230,110,4,160,58,97,219,198,80,236,223,4,224,43,+9,83,253,224,43,9,161,158,224,25,1,224,18,1,1,52,56,97,108,2,+95,52,56,164,169,0,58,96,165,162,36,90,197,130,1,155,83,0,58,96,+38,224,188,6,129,54,96,193,99,215,96,11,131,205,66,123,224,40,5,224,+55,11,155,87,128,10,227,152,0,231,116,1,1,53,55,194,214,224,196,7,+106,140,226,102,0,133,48,160,77,1,55,57,195,86,64,0,224,68,5,224,+66,2,237,233,0,0,58,97,59,224,217,6,96,145,64,38,224,199,5,225,+173,4,224,74,12,0,54,224,74,13,65,98,224,74,5,66,23,206,213,160,+70,64,94,224,233,8,225,171,2,2,95,52,56,163,116,64,105,227,208,1,+65,171,0,80,66,95,64,30,172,37,100,182,0,85,96,20,163,2,224,123,+3,0,50,101,63,127,169,1,95,52,67,73,225,73,6,68,45,225,141,8,+0,55,224,53,4,1,56,48,96,53,1,50,51,118,216,64,53,234,128,1,+1,95,39,234,126,3,224,205,10,134,5,170,246,0,58,99,66,192,183,64,+232,128,183,131,70,224,168,6,1,95,49,81,158,0,58,96,126,224,29,6,+67,1,0,52,85,41,0,58,96,41,160,29,102,114,3,95,49,53,50,181,+25,64,233,73,255,0,35,99,177,0,58,96,48,224,42,9,102,22,224,42,+0,128,169,0,58,96,98,225,74,5,0,52,102,154,0,55,65,150,181,174,+97,16,135,253,0,79,241,134,2,1,46,46,65,18,224,17,3,1,58,58,+128,17,3,79,32,35,54,172,127,96,12,68,148,224,12,0,87,218,160,13,+224,57,1,0,60,120,128,224,17,3,1,45,62,224,75,1,224,48,0,96,+62,107,37,224,44,5,0,61,96,44,229,131,0,161,167,226,207,3,0,52,+77,0,224,20,9,99,68,0,58,100,251,193,173,64,248,97,173,64,49,111,+248,226,17,13,22,33,64,35,36,37,38,63,43,46,47,60,61,62,63,92,+57,50,38,94,124,58,45,126,64,136,0,58,97,62,139,130,226,163,2,0,+53,97,83,99,230,0,82,76,80,64,79,136,78,227,50,3,66,148,226,101,+9,226,90,2,71,229,224,91,9,152,175,141,203,237,22,2,80,15,232,181,+2,66,20,102,255,192,31,224,161,10,128,24,67,129,104,52,227,208,4,224,+151,17,237,19,0,64,23,129,137,0,58,96,202,227,168,9,1,95,52,101,+80,224,72,4,67,67,65,141,248,166,2,0,58,102,157,193,150,64,101,129,+150,131,38,225,150,15,8,44,59,40,41,91,93,123,125,96,129,136,64,105,+228,189,10,82,225,3,64,75,32,89,225,1,6,0,89,96,238,69,204,0,+64,231,95,1,224,58,6,111,173,228,248,5,65,54,121,42,228,112,1,0,+35,99,46,105,85,0,51,77,166,205,76,231,181,6,224,91,15,193,23,141,+114,225,91,4,224,18,1,0,52,67,24,193,175,143,79,140,58,129,220,201,+107,132,77,65,47,0,52,225,47,0,129,0,225,131,10,73,251,246,41,3,+64,90,145,102,97,10,225,236,0,0,95,82,40,97,96,208,168,0,80,153,+2,97,163,64,69,225,117,11,65,246,225,58,4,96,194,0,85,137,137,232,+210,1,162,102,2,51,55,56,64,4,103,124,66,201,128,200,224,201,8,137,+53,226,200,5,224,109,0,1,64,90,226,176,5,1,95,52,239,173,2,0,+58,105,21,192,189,68,11,128,189,175,149,225,225,10,230,84,7,131,170,224,+95,2,83,242,237,0,0,225,223,4,232,48,6,226,51,11,165,162,224,20,+6,130,72,224,20,5,0,49,66,83,224,21,9,103,200,224,21,9,65,235,+224,21,9,128,174,224,21,7,224,109,11,96,230,226,224,8,128,85,225,17,+4,129,115,240,56,8,193,163,224,17,3,130,127,224,17,2,184,24,224,17,+2,83,178,224,35,6,224,34,8,105,98,224,17,4,193,121,224,17,1,224,+88,8,138,29,224,16,2,144,79,225,163,8,74,134,104,213,224,95,8,229,+21,5,105,145,104,250,226,193,0,226,190,5,0,67,124,89,1,95,52,71,+122,73,20,0,52,205,24,92,185,3,95,52,53,56,67,121,170,222,227,147,+10,76,72,77,125,217,60,224,171,12,68,62,132,213,226,102,23,100,54,224,+20,8,136,73,224,20,6,226,35,11,110,30,224,20,8,226,55,11,148,57,+224,20,6,103,115,224,20,8,114,139,224,20,7,226,118,11,70,253,224,20,+9,224,209,11,103,241,224,20,8,224,209,11,73,4,224,20,9,224,209,11,+161,205,224,20,5,73,184,224,20,9,224,209,11,107,84,224,20,8,224,209,+11,107,22,224,20,8,224,209,11,75,159,224,20,9,224,209,11,109,21,224,+20,8,224,209,11,106,72,224,20,8,224,209,11,228,26,12,110,243,224,20,+8,228,47,11,107,149,228,47,10,227,249,8,154,40,224,17,3,91,85,224,+17,6,227,215,8,180,40,224,17,3,102,94,224,17,4,134,15,224,17,3,+228,155,8,90,78,224,17,6,228,84,8,187,125,224,17,3,228,138,9,228,+192,9,224,179,8,135,88,224,17,4,224,179,8,188,118,224,17,3,224,179,+8,229,26,10,229,97,26,229,62,9,224,178,8,229,61,15,224,16,1,224,+175,8,224,174,8,224,173,8,225,96,9,224,153,8,224,16,7,128,169,103,+210,2,50,32,79,176,156,233,95,0,2,52,54,51,254,50,3,1,79,72,+109,191,224,79,7,224,47,17,224,46,8,128,178,0,79,224,98,16,2,78,+85,76,224,51,7,96,161,224,49,17,2,83,84,88,224,49,7,96,245,224,+49,17,0,69,224,49,9,97,56,224,49,18,1,79,84,224,49,7,96,200,+224,49,18,1,78,81,224,49,7,97,190,224,49,17,2,65,67,75,224,49,+7,98,1,224,49,17,1,66,69,225,43,8,98,68,224,49,18,0,83,224,+48,7,98,134,224,48,17,0,72,224,247,8,98,200,224,48,17,1,76,70,+225,242,8,225,191,22,0,86,224,98,8,131,79,224,49,17,0,70,224,99,+9,225,241,22,1,67,82,224,49,8,225,241,22,1,83,73,224,49,8,225,+191,22,2,68,76,69,224,50,8,225,192,22,2,68,67,49,224,50,8,225,+193,22,2,68,67,50,224,50,8,225,195,22,2,68,67,51,224,50,8,225,+197,22,2,68,67,52,224,50,7,133,134,224,50,17,1,78,65,226,190,8,+133,203,225,99,18,1,89,78,224,50,8,227,186,24,0,66,224,50,8,225,+201,22,1,67,65,224,101,9,227,188,23,0,77,224,49,8,225,252,22,1,+83,85,224,151,9,225,252,22,2,69,83,67,224,50,8,225,252,22,0,70,+227,190,8,135,172,224,49,17,0,71,224,49,9,225,250,22,0,82,224,49,+8,136,52,224,49,17,0,85,224,49,9,225,248,23,0,80,224,49,8,225,+247,22,0,68,228,234,9,188,191,242,174,5,224,0,17,238,95,11,221,1,+0,58,111,64,242,13,13,1,83,39,146,14,145,249,122,175,123,143,224,75,+0,144,36,122,246,0,85,210,143,224,19,0,185,26,112,67,233,177,2,201,+172,143,162,242,61,14,82,59,64,0,80,170,0,58,65,14,64,161,0,80,+160,98,147,0,122,116,0,90,160,4,112,95,145,117,71,203,192,217,178,60,+1,52,53,86,254,1,54,48,143,161,128,9,4,49,49,49,52,49,101,109,+0,58,109,56,111,174,3,53,54,32,58,109,44,159,44,64,55,64,10,159,+44,77,100,64,13,246,160,29,250,202,26,0,58,109,244,64,120,96,159,68,+101,1,95,52,68,5,1,95,52,95,236,1,95,52,68,68,1,95,52,88,+4,74,245,106,249,1,56,48,238,4,0,0,52,97,163,1,95,52,97,52,+224,13,1,67,173,0,73,96,174,0,54,160,213,0,57,65,122,75,102,84,+252,147,27,0,58,96,39,224,29,2,154,135,224,29,1,186,54,224,59,1,+1,95,49,77,223,0,58,96,102,64,25,0,54,78,141,130,173,0,52,118,+100,87,206,2,95,52,52,86,142,0,52,154,184,118,57,1,55,54,224,176,+0,0,55,97,16,64,10,0,58,96,6,83,131,155,25,224,5,2,160,78,+144,255,162,166,128,6,0,58,96,80,224,52,27,224,59,2,0,58,96,139,+224,52,20,224,98,2,160,59,0,58,96,198,224,52,27,224,112,2,0,58,+97,1,116,87,0,66,98,163,188,166,93,134,158,232,211,78,188,186,1,95,+52,106,17,2,95,52,48,131,138,255,12,2,4,85,32,95,52,48,98,37,+93,83,170,56,64,97,162,47,0,54,65,84,0,52,98,237,89,223,0,58,+97,136,220,201,0,50,66,60,64,25,120,19,64,31,192,148,243,140,2,254,+128,16,236,168,0,99,176,112,34,110,241,128,127,130,22,83,222,226,26,2,+96,25,130,22,0,83,128,195,99,150,0,66,66,242,226,64,7,195,221,160,+4,1,83,32,67,225,224,48,32,193,90,253,141,4,182,158,224,208,1,158,+19,244,123,4,224,238,4,110,92,1,95,52,135,9,65,96,1,50,53,67,+174,187,241,1,64,75,96,210,160,60,160,108,128,111,164,177,160,114,215,39,+64,88,192,25,160,121,224,115,22,224,113,5,224,111,3,224,49,17,94,41,+224,0,5,0,58,100,37,193,245,1,52,50,67,93,0,48,96,45,160,16,+0,56,69,113,126,107,1,50,50,127,156,70,155,165,2,0,51,87,68,1,+52,48,237,4,1,66,56,132,123,224,155,3,0,58,96,119,101,67,1,51,+51,64,67,68,212,97,243,108,253,122,12,224,17,4,0,73,118,94,3,95,+52,51,52,160,21,3,95,52,51,53,224,10,1,0,55,65,226,97,220,113,+28,64,18,0,57,224,18,6,0,58,96,150,133,103,161,119,225,132,1,67,+55,99,65,102,211,68,195,101,155,0,64,96,35,65,58,64,5,83,90,1,+52,51,66,180,192,41,0,52,87,75,192,41,96,235,64,149,246,166,1,224,+60,20,82,5,224,59,17,0,58,64,193,195,20,2,75,52,32,129,205,0,+58,96,113,128,196,163,213,224,86,20,96,85,118,200,96,85,0,58,65,41,+129,218,0,89,227,25,1,131,14,130,40,185,133,0,82,224,22,4,249,226,+2,64,106,132,192,151,25,0,89,129,56,128,1,81,86,215,135,194,210,121,+211,225,8,4,1,32,64,65,237,193,111,97,232,96,49,102,92,65,2,224,+159,3,224,82,1,192,76,133,1,96,66,87,111,77,10,3,95,49,57,56,+151,227,160,164,200,121,224,1,3,88,122,224,153,2,224,20,5,224,17,8,+224,14,5,224,11,2,192,8,131,143,96,109,132,162,0,85,97,165,67,92,+0,58,67,5,129,37,99,47,102,186,73,241,0,58,99,41,192,222,128,216,+0,58,96,25,101,73,129,81,213,146,98,181,99,69,225,165,2,131,201,161,+18,192,92,227,45,9,64,0,199,88,64,33,225,81,3,64,64,0,85,225,+222,0,224,18,0,137,106,192,21,160,104,224,29,0,128,39,251,82,3,0,+58,68,7,128,88,72,129,1,50,57,234,89,2,17,102,111,108,100,108,49,+58,32,101,109,112,116,121,32,108,105,115,116,106,104,68,3,0,54,96,146,+226,132,6,0,83,229,87,4,96,91,0,54,194,229,160,134,0,85,248,229,+6,102,59,97,29,251,151,1,192,189,194,197,99,29,105,85,100,128,0,49,+130,117,231,117,0,100,145,64,22,167,6,133,118,100,137,1,52,48,97,69,+2,67,32,95,119,0,128,13,96,151,166,245,231,185,3,230,223,2,136,240,+64,6,97,217,69,99,167,86,73,100,68,101,65,201,64,254,217,136,64,15,+104,213,171,56,1,95,49,126,228,96,77,0,58,96,6,226,71,1,137,199,+0,49,96,89,130,96,102,230,163,184,106,185,230,211,4,128,113,233,137,2,+96,153,231,93,1,128,209,168,251,134,114,64,59,165,22,253,167,2,101,29,+161,157,97,92,232,130,3,130,24,224,86,2,198,45,187,244,129,39,229,112,+1,64,196,72,121,96,55,1,52,49,91,46,128,155,104,146,147,211,124,73,+162,149,161,25,224,46,3,160,102,160,44,231,145,3,224,184,11,224,134,15,+233,2,0,224,137,8,192,90,224,134,27,224,181,2,225,11,5,160,73,161,+11,97,122,0,48,227,35,2,21,92,51,52,38,46,47,108,105,98,47,68,+97,116,97,47,73,110,116,101,103,101,114,96,7,6,114,110,97,108,46,104,+115,64,33,3,44,53,52,58,144,207,0,58,97,255,103,49,0,49,89,189,+71,72,0,58,96,121,163,39,97,154,128,242,97,204,64,9,99,1,96,23,+233,120,0,75,89,121,177,98,213,133,57,212,175,226,4,0,64,59,228,39,+4,134,125,128,5,227,238,8,19,105,109,112,111,115,115,105,98,108,101,58,+32,120,115,32,62,61,32,121,115,96,179,1,75,50,65,8,224,245,42,3,+57,48,58,54,132,50,134,59,130,111,128,211,226,116,0,227,220,3,166,240,+227,219,2,81,193,166,245,228,213,0,203,106,82,16,232,138,0,196,226,224,+80,12,134,163,224,80,7,97,206,96,69,65,151,64,24,230,109,0,0,83,+105,169,104,68,196,71,225,110,8,132,77,164,120,196,150,196,126,224,55,1,+64,124,224,14,3,228,153,1,2,95,49,57,139,58,0,58,96,132,164,33,+65,230,65,176,234,232,19,169,254,96,190,0,53,229,77,11,64,82,0,54,+196,227,1,95,50,70,200,170,142,66,87,227,71,3,129,134,203,228,0,50,+121,194,166,32,160,120,198,129,83,229,132,98,96,53,0,80,64,197,1,53,+32,98,29,172,141,195,100,108,159,165,165,193,151,227,183,2,163,213,68,244,+99,154,0,64,142,182,148,119,96,17,204,212,0,58,96,7,206,79,130,245,+1,52,48,110,73,0,48,103,142,104,54,0,52,79,167,1,95,52,84,233,+142,79,96,73,142,79,96,10,0,58,96,6,7,10,65,32,117,62,61,32,+58,96,40,96,12,64,11,133,55,1,117,60,96,24,131,154,3,117,60,32,+58,96,95,64,11,2,99,109,112,64,13,130,28,0,75,143,233,64,219,64,+13,0,50,64,25,129,102,0,75,66,82,0,58,97,16,99,220,1,48,51,+227,220,0,68,58,227,220,2,164,207,130,97,231,12,9,162,208,231,14,8,+227,42,15,97,224,64,110,162,213,231,251,1,68,210,95,197,236,187,1,227,+130,45,224,91,1,227,130,9,224,95,4,227,130,31,224,80,2,130,195,64,+69,65,165,64,24,227,130,6,131,94,227,93,0,101,153,231,218,2,224,11,+3,0,58,96,71,209,47,92,244,1,95,56,128,158,98,42,0,48,195,189,+66,98,177,46,227,54,7,99,211,141,2,92,161,0,58,96,47,103,160,138,+223,234,169,5,163,104,0,48,130,53,2,42,32,58,96,105,1,10,65,64,+25,0,58,97,20,147,55,0,51,67,230,147,87,113,226,2,64,58,51,64,+206,201,24,107,124,160,243,174,31,225,73,0,172,114,3,83,32,95,50,127,+21,0,64,170,215,128,56,99,87,235,148,3,107,78,193,90,97,112,0,66,+104,251,225,110,1,96,142,0,53,97,251,0,80,193,155,225,139,2,100,45,+64,225,194,76,224,231,1,96,197,236,178,2,192,39,97,221,96,86,236,160,+2,96,99,139,77,0,50,75,80,96,36,0,58,96,34,244,75,13,197,54,+243,56,0,162,98,234,239,1,163,56,243,72,4,234,234,3,236,249,1,129,+22,162,137,98,0,0,50,74,220,0,54,66,6,169,50,224,69,16,129,135,+224,160,6,167,251,128,25,116,123,64,92,164,213,2,66,32,95,64,37,235,+83,2,73,253,129,151,245,179,0,97,32,0,55,71,240,127,224,209,134,165,+111,245,51,5,0,58,116,50,234,158,0,238,218,2,99,83,81,74,129,102,+225,172,2,65,95,129,172,128,133,224,58,44,131,197,224,58,44,189,213,194,+147,224,67,0,224,56,25,128,243,2,95,51,49,232,95,3,15,118,97,108,+68,105,103,58,32,66,97,100,32,98,97,115,101,136,68,0,83,137,24,134,+171,109,92,0,51,67,165,0,35,80,196,205,110,96,17,1,64,35,67,172,+224,48,17,100,76,224,48,5,0,49,132,131,69,141,224,49,11,98,30,224,+49,5,0,55,96,242,2,95,49,56,68,51,66,48,68,108,204,121,98,102,+232,7,0,144,222,0,49,86,167,96,5,128,78,255,11,0,224,61,39,133,+11,224,61,12,224,48,13,97,32,130,153,0,51,138,208,224,231,15,225,74,+11,96,171,224,231,10,224,107,23,224,99,34,85,79,224,99,42,0,58,67,+217,133,159,224,206,33,173,159,224,106,37,0,58,97,55,232,136,0,132,23,+0,56,128,5,142,6,102,105,67,205,2,95,51,56,68,104,72,136,128,114,+104,136,128,10,0,58,96,6,0,10,168,136,96,40,96,12,64,11,134,46,+72,123,96,82,3,10,65,32,105,104,123,96,102,119,108,228,145,5,72,58,+99,94,128,142,0,35,168,54,224,20,5,121,74,224,20,7,152,215,224,21,+7,100,152,224,42,8,124,219,231,43,2,96,21,138,36,153,167,250,118,3,+163,203,224,17,19,129,78,224,16,19,132,192,224,16,7,2,58,51,56,210,+82,230,61,10,132,120,106,220,103,47,122,150,135,33,192,23,192,35,135,57,+149,161,199,69,224,35,4,238,122,3,233,39,2,245,129,6,0,39,68,198,+224,21,2,224,66,0,102,122,245,8,7,199,210,129,75,128,85,77,160,64,+66,139,2,246,231,2,96,4,66,145,230,60,0,0,89,160,93,147,71,65,+135,102,203,108,144,140,33,237,254,2,97,32,192,58,198,188,151,223,226,228,+3,192,151,225,104,1,128,136,102,169,69,180,129,100,84,189,128,0,192,23,+193,126,96,25,1,95,51,161,226,103,68,64,73,160,48,96,141,2,58,51,+56,231,240,0,1,51,56,96,168,251,231,1,1,58,51,73,162,232,13,9,+64,175,129,161,0,82,220,51,231,30,3,0,58,96,72,227,15,7,91,3,+231,110,17,236,214,1,224,49,0,0,56,168,212,68,6,123,205,0,35,129,+1,0,58,96,25,64,94,1,51,50,75,194,121,206,96,133,188,63,1,51,+51,64,118,128,86,1,51,51,64,34,96,11,0,58,96,6,137,30,73,232,+1,51,55,74,46,70,241,92,47,1,95,51,83,190,124,173,64,150,64,39,+118,15,138,12,64,42,135,238,104,235,128,65,96,193,103,59,203,62,96,17,+134,25,96,10,246,161,3,76,150,0,51,74,199,195,33,0,51,121,229,69,+19,96,182,64,29,227,63,2,97,200,128,29,0,50,97,180,141,109,96,42,+161,174,3,54,56,32,35,87,105,133,27,64,243,154,204,0,51,66,122,192,+138,224,40,0,142,60,0,54,97,127,162,49,0,58,96,190,225,223,2,115,+31,0,51,103,54,105,213,138,72,77,4,238,36,2,2,32,95,51,135,137,+96,98,97,225,66,234,0,51,233,229,0,0,58,96,120,129,64,0,51,151,+78,0,58,64,40,129,179,0,53,64,205,66,13,0,58,96,104,160,203,65,+11,0,90,126,130,157,91,0,58,96,196,228,76,4,128,156,212,120,251,213,+1,228,247,3,96,253,144,45,64,245,224,113,2,66,31,0,58,96,27,96,+19,1,52,51,91,1,0,51,110,195,0,58,96,28,224,156,2,91,118,96,+104,175,156,0,51,65,60,1,95,51,70,114,67,52,1,58,51,191,112,107,+58,65,251,0,58,96,27,192,202,96,44,70,230,1,58,51,190,191,138,150,+246,213,8,1,58,51,190,183,129,241,1,48,57,64,145,108,187,135,1,0,+51,94,189,1,58,51,190,206,160,238,100,199,0,89,118,12,66,89,64,77,+172,98,184,81,192,97,64,5,129,26,0,50,88,202,3,95,50,51,57,74,+211,190,33,130,176,64,33,235,21,2,224,236,0,226,81,7,64,205,164,179,+129,134,129,40,168,119,96,11,132,219,161,191,3,95,51,53,55,234,44,2,+19,80,114,101,108,117,100,101,46,114,101,97,100,58,32,110,111,32,112,97,+114,202,50,155,113,1,95,51,77,3,80,168,224,57,19,8,97,109,98,105,+103,117,111,117,115,224,64,3,1,64,58,97,39,2,10,65,32,66,64,64,+13,205,214,0,90,101,190,0,58,64,81,64,16,109,243,255,83,0,228,154,+5,229,191,1,156,27,166,48,226,239,6,236,116,11,108,108,229,163,8,0,+58,97,28,194,106,1,95,51,80,208,0,58,96,49,224,19,2,99,4,191,+142,195,4,80,163,65,93,226,95,0,65,172,0,58,97,128,96,182,163,110,+228,65,2,64,165,105,89,192,153,174,130,2,95,51,51,72,224,161,193,0,+51,69,106,96,11,0,58,96,6,64,76,96,178,0,53,132,35,131,128,196,+32,143,202,1,95,49,64,166,191,33,64,63,100,56,1,95,50,228,67,0,+2,95,51,52,224,86,2,191,114,248,18,1,0,66,134,162,238,255,0,224,+18,3,1,66,39,181,235,161,46,191,122,128,147,118,180,133,2,71,127,128,+135,96,218,160,135,64,159,160,135,128,10,96,251,64,10,0,58,96,6,225,+42,0,0,55,225,42,0,142,194,64,12,225,30,4,128,85,129,30,166,244,+64,6,97,165,229,167,3,64,172,74,36,64,155,64,61,67,171,65,59,64,+47,193,233,229,185,3,195,151,0,67,110,123,224,49,0,132,111,191,133,2,+73,32,58,96,44,192,10,196,44,1,95,51,69,214,0,58,99,137,160,16,+65,51,231,191,5,0,58,96,36,192,232,88,92,135,146,224,5,0,101,27,+207,145,96,67,98,45,100,209,232,56,5,160,30,97,33,224,30,10,165,38,+250,34,1,230,146,4,68,66,224,46,3,122,65,132,240,1,95,51,92,100,+161,118,66,2,253,10,0,100,129,132,168,122,135,227,110,1,137,184,64,26,+81,115,224,21,1,69,47,103,85,228,175,1,193,23,160,165,224,24,0,161,+217,168,253,97,217,96,11,0,58,96,6,129,80,167,243,93,164,0,58,64,+34,163,110,99,145,189,185,192,123,98,175,99,150,189,146,0,80,166,56,161,+54,130,64,101,178,0,58,96,240,232,154,1,65,149,128,43,249,24,7,138,+97,181,234,192,19,128,114,216,20,224,32,2,224,9,10,113,110,225,218,5,+232,44,7,0,64,101,232,68,143,103,131,97,115,192,17,131,139,1,95,51,+86,49,100,226,224,55,8,224,177,7,129,162,226,95,0,162,89,64,41,192,+83,224,84,5,224,82,5,224,81,11,224,91,4,224,82,9,224,181,1,224,+56,17,226,230,5,224,57,18,225,108,9,224,9,2,101,244,160,63,193,245,+160,230,224,236,16,96,98,227,56,2,194,241,139,108,224,113,1,160,218,97,+155,98,172,186,234,99,103,2,51,50,52,64,4,146,96,130,66,96,0,224,+96,0,0,83,96,164,154,95,224,147,30,226,150,5,224,96,2,131,153,178,+53,225,1,0,161,4,224,13,22,99,149,130,112,97,96,224,237,0,109,218,+128,13,224,253,1,227,240,0,96,244,149,20,219,219,175,239,225,15,6,224,+244,4,64,97,224,96,22,245,123,0,192,95,162,122,128,94,228,22,3,194,+3,226,190,6,225,67,29,225,216,24,160,105,225,206,21,226,190,21,192,9,+195,208,226,240,25,224,49,11,224,176,2,228,6,9,225,89,8,229,236,4,+224,43,5,224,45,6,225,52,0,224,137,18,96,135,226,27,5,193,59,224,+138,21,252,178,10,124,148,2,48,58,48,252,147,0,64,0,173,209,96,67,+173,209,96,11,0,58,96,6,114,92,144,39,132,116,64,35,64,98,237,219,+6,182,65,0,58,64,64,229,238,0,64,134,0,58,96,46,192,70,66,16,+98,73,192,55,96,71,93,254,64,21,105,248,96,21,198,111,2,95,51,51,+103,172,0,51,135,172,96,85,140,19,64,23,128,17,108,80,64,53,134,26,+92,15,233,15,0,162,40,171,173,66,59,105,204,153,151,64,158,206,94,99,+206,70,216,98,96,2,95,51,50,72,142,96,11,0,58,96,6,198,178,162,+157,128,202,65,20,103,185,96,190,78,96,68,5,64,80,71,4,91,37,96,+7,253,113,4,97,55,76,135,64,42,130,50,224,42,14,240,213,8,209,150,+71,187,236,145,5,164,116,128,152,96,252,1,83,32,85,253,128,162,97,112,+144,185,0,50,91,174,224,164,25,224,212,1,0,49,75,253,160,24,224,186,+39,168,49,224,241,46,195,3,129,114,224,218,6,224,158,0,224,215,38,224,+139,39,196,233,227,153,4,129,86,97,252,96,137,169,89,225,151,2,230,7,+1,224,184,2,64,5,163,2,225,155,184,128,247,225,159,3,224,231,14,225,+168,103,224,152,5,123,8,133,205,235,4,1,236,61,1,97,162,102,88,167,+40,224,174,1,0,50,253,163,1,225,90,46,128,87,224,7,1,224,132,108,+224,95,10,224,94,67,96,80,128,181,224,222,110,78,158,1,50,57,230,231,+2,31,115,116,105,109,101,115,58,32,112,111,115,105,116,105,118,101,32,109,+117,108,116,105,112,108,105,101,114,32,101,120,112,101,3,99,116,101,100,102,+255,0,58,69,227,140,176,109,83,173,62,0,83,158,130,175,78,141,48,193,+194,96,52,0,54,160,52,133,143,0,80,102,124,253,236,2,64,14,212,69,+128,1,195,30,224,11,0,224,59,2,96,81,231,49,0,0,50,211,207,70,+159,207,175,88,129,76,67,75,247,174,44,143,178,141,130,111,178,77,10,175,+178,160,10,206,182,64,76,212,28,163,171,128,5,134,202,213,107,103,41,64,+123,189,205,102,253,131,236,160,28,137,173,224,28,7,238,190,11,140,160,224,+65,9,182,151,64,24,71,240,97,234,174,123,96,73,79,194,96,49,0,58,+96,6,224,178,0,138,205,156,178,0,66,226,49,2,192,75,71,164,199,198,+132,130,128,46,138,179,90,249,224,34,4,0,58,96,125,128,93,1,95,50,+104,209,64,121,96,35,0,58,96,6,110,133,0,58,96,67,114,247,128,1,+120,238,64,33,194,0,248,172,1,96,4,159,25,128,205,0,58,97,4,1,+10,65,193,210,0,58,97,37,96,76,224,55,6,224,85,0,130,4,224,85,+8,224,34,3,130,20,234,52,0,240,136,8,64,240,255,203,0,97,114,133,+21,133,18,160,14,0,85,163,135,160,38,230,191,3,169,116,0,67,129,146,+98,115,128,64,113,27,130,153,64,17,143,228,1,52,55,65,62,146,32,73,+33,0,58,117,93,161,59,0,48,242,173,0,211,246,70,13,161,241,0,90,+179,247,140,109,64,130,167,44,131,24,168,201,244,36,4,251,124,2,202,236,+196,97,225,40,1,96,228,64,85,1,95,51,68,58,128,0,224,38,10,224,+123,2,2,64,58,51,68,93,144,119,228,72,5,15,105,110,105,116,58,32,+101,109,112,116,121,32,108,105,115,116,100,52,68,31,225,98,0,224,122,4,+193,62,224,123,1,0,58,96,9,97,44,231,25,0,2,115,101,113,192,221,+128,19,224,16,2,228,29,11,64,68,0,54,129,74,90,251,2,50,52,57,+161,6,246,112,2,224,178,1,3,35,108,105,110,181,183,65,227,103,118,0,+56,224,210,2,8,123,45,35,32,76,73,78,69,32,96,35,107,121,75,19,+69,99,0,57,139,130,0,50,75,86,2,95,51,48,97,99,224,56,1,3,+32,35,45,125,128,87,2,58,51,48,217,71,225,9,2,67,31,181,39,235,+90,1,66,129,64,72,195,120,2,95,51,48,68,149,149,238,128,15,68,198,+96,15,0,58,96,41,96,86,242,198,0,225,101,1,207,228,98,68,242,138,+0,0,58,64,63,162,101,1,95,50,76,119,248,173,5,0,35,108,167,224,+28,15,108,123,224,18,5,66,191,96,86,244,42,1,0,48,65,14,0,54,+65,104,160,165,194,254,230,45,0,0,85,224,169,0,192,175,231,11,2,171,+162,174,78,0,64,224,211,1,128,17,96,32,243,123,5,164,221,236,150,1,+0,58,96,131,98,0,225,110,4,3,95,50,57,56,239,150,2,96,61,128,+241,96,53,97,208,225,79,6,226,223,5,5,102,111,108,100,114,49,226,225,+8,226,156,0,0,83,164,121,130,154,119,136,224,10,2,135,229,128,105,216,+17,98,80,0,49,65,44,100,20,0,57,133,240,96,217,160,20,193,188,2,+58,50,57,195,26,0,95,65,57,71,84,0,58,96,48,199,8,197,117,77,+221,192,103,231,101,0,224,29,0,224,31,2,64,32,251,189,0,65,177,125,+229,133,224,2,58,50,57,130,41,3,95,50,51,50,70,19,84,57,0,49,+68,187,0,58,96,38,197,120,88,207,1,50,57,216,12,5,51,53,32,75,+32,85,209,11,64,2,134,254,0,49,187,225,129,13,64,107,64,17,227,44,+2,3,32,97,116,32,67,137,131,102,194,15,224,63,2,0,48,65,200,129,+170,224,66,14,2,99,111,108,192,61,130,76,224,57,8,66,75,137,31,224,+61,8,15,92,49,48,38,32,32,32,32,117,115,101,100,32,98,121,32,160,+73,128,62,1,50,57,235,195,0,128,20,85,194,128,20,2,95,49,52,65,+189,96,11,0,58,96,6,133,23,98,116,226,106,1,162,170,131,46,2,95,+50,56,151,48,96,7,160,47,65,89,90,109,0,49,152,187,126,125,250,65,+0,1,50,56,129,250,2,80,32,73,80,211,240,166,10,31,99,112,112,104,+115,115,114,99,47,109,97,108,99,111,108,109,45,119,97,108,108,97,99,101,+45,117,110,105,118,101,114,115,1,101,47,96,33,6,45,49,46,50,48,46,+57,128,12,2,46,104,115,112,221,3,55,57,58,49,164,169,1,50,56,130,+79,87,16,128,147,96,110,192,147,167,160,2,32,58,50,191,164,1,95,50,+95,49,1,50,56,98,48,191,155,2,95,52,56,99,57,94,220,2,95,50,+56,105,91,1,49,55,66,206,64,38,73,125,66,106,192,11,71,17,96,11,+0,58,96,6,194,69,132,204,225,162,4,10,69,120,105,116,83,117,99,99,+101,115,115,219,168,97,229,0,50,95,125,68,150,3,53,53,32,95,95,41,+196,149,225,231,11,64,68,5,70,97,105,108,117,114,165,244,224,36,1,0,+79,132,11,139,51,3,95,49,51,55,162,55,0,35,243,187,0,161,248,160,+210,97,248,96,11,0,58,96,6,72,103,68,1,163,190,0,50,191,11,137,+129,160,16,128,73,0,58,96,178,97,42,0,57,65,104,0,50,83,166,1,+49,54,230,118,3,6,83,121,115,116,101,109,46,64,174,64,167,224,192,5,+2,67,111,100,128,189,96,171,0,58,97,105,171,60,0,83,125,19,100,56,+136,178,90,112,0,58,65,165,64,33,224,70,1,130,7,0,34,96,27,186,+158,4,50,55,53,32,95,121,231,1,50,55,130,5,169,4,192,80,2,64,+95,50,95,236,0,67,64,42,94,121,97,101,0,58,64,54,128,125,2,95,+50,54,196,180,128,33,0,58,96,47,105,127,64,29,95,113,96,7,71,242,+0,49,94,160,64,33,130,52,6,94,112,117,116,98,32,58,96,27,96,140,+0,54,65,144,0,95,75,175,0,79,64,50,0,48,161,152,0,58,96,69,+234,37,2,96,26,167,91,209,218,69,109,229,130,8,229,105,6,96,126,228,+102,2,224,232,4,143,13,2,95,50,54,64,47,100,58,64,244,1,54,52,+64,4,158,98,230,23,5,11,66,97,100,32,72,97,110,100,108,101,32,109,+193,155,96,37,95,242,129,241,0,54,129,163,179,103,233,126,2,221,41,160,+121,98,44,1,50,54,70,7,129,53,1,54,55,98,61,192,32,128,76,188,+155,3,57,54,32,58,96,32,65,219,2,112,50,112,64,13,129,186,2,95,+54,54,103,43,246,95,13,117,30,228,118,0,163,223,224,6,12,224,42,2,+127,103,132,19,224,42,29,160,28,224,49,10,224,42,15,224,49,10,224,42,+22,224,49,3,68,102,76,159,149,85,96,6,163,21,65,71,104,141,74,3,+103,55,0,54,162,152,1,32,95,92,250,81,163,0,58,98,18,160,48,178,+150,209,154,0,80,132,96,0,50,207,143,203,101,130,87,98,118,129,197,223,+126,0,58,67,10,128,76,0,85,131,49,85,246,64,60,0,58,66,84,64,+25,71,147,103,137,0,58,96,27,100,248,162,6,0,95,81,248,226,175,4,+224,167,2,134,75,226,199,0,0,53,98,97,1,58,50,82,215,235,146,11,+3,104,101,97,100,232,176,8,0,75,64,238,64,57,97,2,119,42,168,242,+128,250,200,207,220,232,115,122,129,66,1,95,50,64,156,75,89,98,184,104,+22,96,18,1,95,50,126,75,224,25,4,193,119,128,33,224,34,0,203,68,+3,67,39,32,79,96,28,0,53,184,101,128,138,2,95,50,52,70,33,93,+4,64,28,0,55,68,2,0,35,192,35,216,4,137,21,167,95,235,217,12,+1,45,79,167,195,96,66,165,215,199,137,224,49,13,9,45,115,116,114,105,+112,45,101,111,108,128,58,224,169,116,224,171,28,160,167,225,116,255,225,116,+58,224,173,23,4,104,97,115,104,101,168,129,227,6,255,227,6,255,227,6,+196,64,0,233,30,0,242,109,2,176,84,114,114,251,82,8,110,225,134,72,+242,147,0,207,181,154,135,0,95,242,151,2,64,174,161,25,96,38,185,254,+137,126,128,52,0,67,143,237,160,35,104,190,248,160,6,224,117,4,147,50,+112,252,103,234,176,167,224,85,0,243,182,5,224,10,0,160,137,160,22,64,+0,159,118,224,154,0,96,220,96,62,243,89,5,224,193,0,224,39,1,224,+175,3,128,1,104,18,225,76,1,170,110,255,179,0,224,170,9,240,220,2,+224,0,0,160,131,108,96,225,79,9,98,7,225,224,13,0,111,129,224,64,+65,0,82,142,147,192,91,224,252,4,128,10,76,74,192,0,251,148,5,128,+202,160,121,219,166,194,13,226,1,0,212,145,225,240,22,96,35,244,181,23,+0,49,205,120,171,188,224,178,8,192,12,96,180,2,95,50,52,248,228,5,+225,187,34,128,196,226,112,0,152,125,225,192,2,244,70,25,3,97,110,115,+105,193,103,224,212,1,224,78,2,224,72,31,9,116,114,97,100,105,116,105,+111,110,97,164,7,192,255,162,40,224,61,21,1,115,116,153,168,160,0,108,+77,64,53,0,53,76,218,0,53,70,158,0,49,78,122,235,49,0,224,34,+20,139,127,128,128,226,123,46,0,120,226,123,4,229,6,0,224,77,46,4,+105,110,99,108,117,237,94,1,226,207,8,100,229,229,82,3,160,48,0,61,+225,19,2,228,88,1,225,149,2,128,132,224,127,24,0,80,224,71,0,226,+48,0,224,69,9,107,41,245,60,3,133,162,224,70,2,0,67,96,70,224,+30,17,128,31,128,225,225,41,46,0,65,225,119,11,224,250,51,3,45,104,+101,108,167,101,224,73,55,82,142,2,105,111,110,224,76,60,224,75,7,64,+59,64,76,225,48,2,196,146,240,12,0,227,75,0,228,10,12,198,88,140,+243,64,64,100,123,225,169,1,135,136,231,107,3,195,59,77,185,131,59,224,+18,0,118,226,128,18,96,123,98,167,225,12,18,224,33,44,225,154,5,227,+207,5,117,2,227,207,6,224,66,10,1,110,111,249,6,1,192,0,2,95,+50,53,212,143,132,46,224,243,2,224,254,3,64,41,225,155,10,2,68,85,+73,96,79,2,58,50,53,210,96,1,53,49,118,29,88,247,153,175,96,5,+96,103,128,114,0,58,96,176,224,43,3,177,42,128,46,224,41,1,0,58,+97,90,224,40,5,129,224,224,35,0,0,58,97,144,224,34,3,0,75,224,+119,5,97,36,230,47,0,0,58,100,251,240,47,0,250,86,8,0,58,96,+43,111,183,0,58,64,80,128,10,0,73,111,72,210,129,175,67,66,64,123,+254,133,98,192,18,1,66,39,96,21,225,133,1,240,66,7,96,120,138,188,+65,174,106,182,128,154,87,61,148,94,162,146,1,32,95,83,172,148,236,144,+19,249,39,0,65,93,103,11,98,226,3,53,55,32,95,119,213,0,35,212,+196,96,178,64,30,216,54,89,53,0,58,105,253,96,17,0,65,96,31,129,+134,159,95,128,31,248,73,1,159,112,107,79,128,17,115,234,64,174,246,203,+2,128,232,0,58,107,130,97,132,1,52,48,129,45,66,37,161,70,84,108,+225,70,1,83,235,178,185,2,95,50,51,96,66,113,206,99,117,0,58,96,+6,1,10,65,92,13,4,117,97,108,32,58,96,33,161,174,2,95,50,51,+136,193,64,131,0,58,113,225,248,211,1,124,251,216,211,64,39,96,141,88,+211,101,165,192,167,64,38,3,10,65,32,82,160,190,0,58,96,28,242,13,+2,129,165,218,120,96,144,214,174,241,181,42,92,50,96,67,129,12,241,181,+8,3,116,97,105,108,241,181,8,97,153,64,57,128,220,254,76,8,64,66,+64,27,2,73,32,58,96,16,247,139,2,0,50,122,49,90,50,215,139,179,+99,119,139,192,11,224,80,0,0,58,96,6,215,139,2,95,49,53,84,249,+160,61,231,98,4,6,101,114,114,111,114,58,32,96,158,183,17,96,38,0,+58,96,6,246,225,20,8,67,111,110,116,114,111,108,46,69,64,66,64,64,+224,26,1,96,18,2,67,97,108,137,1,100,100,0,58,96,194,123,210,163,+52,213,228,64,7,230,63,1,134,76,0,95,99,100,130,26,0,50,66,248,+67,199,171,79,98,10,2,95,50,50,163,93,147,208,0,58,64,160,130,139,+150,85,64,30,227,211,3,253,90,4,131,183,235,159,0,0,58,98,92,220,+110,225,200,5,9,109,100,53,67,111,109,98,105,110,101,161,206,133,99,64,+143,66,75,158,4,123,203,109,239,0,48,65,38,96,177,0,89,96,116,64,+251,102,177,66,130,236,192,1,252,255,5,164,78,64,71,0,49,75,9,198,+226,2,95,50,50,65,6,97,15,0,56,164,6,0,95,92,121,2,95,50,+49,214,75,128,190,130,133,8,94,109,100,53,65,114,114,97,121,66,63,226,+102,0,226,222,0,0,57,66,9,64,42,2,95,50,49,97,9,100,142,247,+52,1,96,192,247,96,1,0,49,89,63,224,46,2,169,168,192,46,2,95,+49,48,65,129,227,22,5,0,49,247,46,0,64,200,162,202,64,20,120,67,+64,211,171,203,229,2,10,206,53,224,106,0,225,53,3,192,25,232,94,5,+2,67,32,95,87,211,96,67,3,95,50,49,48,129,35,4,95,49,57,56,+32,128,82,64,0,225,117,1,238,224,7,247,182,2,64,62,109,188,224,45,+2,96,96,172,116,229,134,7,226,141,0,142,116,224,70,0,224,43,10,194,+119,224,38,0,160,16,0,58,65,97,226,178,0,221,213,0,58,96,135,99,+185,0,50,69,60,0,49,68,226,193,253,129,247,0,35,96,238,92,95,0,+58,97,153,4,10,65,32,35,49,88,72,64,28,128,57,67,238,127,198,1,+49,48,108,105,95,194,2,95,50,48,192,80,64,11,64,34,192,11,0,53,+224,11,1,96,164,128,11,65,70,64,98,131,73,214,77,152,139,137,163,238,+97,6,225,105,3,65,172,128,50,161,239,65,110,69,96,66,229,64,148,71,+98,70,185,96,15,70,44,1,50,48,162,60,96,17,0,57,128,33,131,63,+224,33,7,192,139,0,95,78,56,224,38,16,224,71,25,81,139,93,144,97,+200,192,84,224,194,0,67,164,0,83,162,123,96,190,73,7,224,76,16,128,+22,99,172,66,137,224,40,16,130,157,199,204,97,40,3,66,32,95,57,224,+90,19,96,93,65,43,97,160,0,49,97,148,200,203,0,75,66,55,128,192,+0,58,96,27,224,21,1,96,49,0,58,96,140,224,42,2,128,20,65,23,+96,20,68,192,194,123,64,23,232,87,0,64,101,64,133,224,37,12,0,54,+194,18,128,2,113,48,98,176,71,142,0,57,96,58,130,152,227,185,1,4,+95,50,48,50,32,135,2,0,48,220,84,224,27,5,128,114,130,109,136,184,+224,174,1,128,238,4,114,101,109,32,58,98,204,130,230,0,53,69,214,99,+24,100,2,65,163,0,57,94,180,98,185,64,54,128,250,99,172,107,72,193,+122,0,58,96,39,185,60,228,144,1,91,137,100,56,236,59,1,1,32,95,+93,2,168,1,100,236,69,22,255,190,8,23,46,47,108,105,98,47,68,97,+116,97,47,73,110,116,101,103,101,114,95,84,121,112,101,46,191,161,1,52,+53,223,161,169,233,0,57,134,212,0,95,111,175,1,54,49,228,174,1,160,+30,101,234,64,28,130,49,76,231,132,218,132,75,116,64,142,77,0,67,99,+97,167,61,100,227,64,239,95,233,160,83,170,186,96,69,128,13,0,79,64,+215,0,79,238,86,2,97,56,110,241,224,21,1,2,95,49,57,133,230,66,+154,65,48,218,109,2,95,49,57,72,140,0,56,76,91,0,57,113,230,128,+31,168,112,1,56,52,97,98,1,95,56,66,6,96,32,7,10,65,32,97,+110,100,32,58,96,55,128,66,0,56,65,141,160,33,130,12,0,80,64,31,+129,251,0,75,64,10,129,240,0,65,64,10,129,238,169,48,0,49,68,247,+72,235,128,60,129,224,2,73,32,58,96,16,233,48,1,0,49,93,174,1,+95,49,94,91,169,48,224,56,0,83,168,192,11,224,80,0,0,58,96,6,+167,48,74,74,196,158,1,95,49,65,74,64,31,202,174,0,85,132,29,2,+95,49,56,65,31,102,166,0,80,227,188,1,160,47,224,15,8,64,65,129,+11,171,111,96,23,191,90,135,136,142,206,98,201,106,133,68,220,224,68,0,+200,8,160,21,160,154,97,225,2,95,49,56,162,77,1,49,56,98,35,0,+56,65,232,0,58,96,159,65,17,1,53,53,65,30,129,91,0,90,64,190,+0,58,96,39,161,105,64,59,193,66,235,206,3,96,104,171,206,254,244,7,+224,14,5,192,184,178,144,96,145,75,248,128,202,0,58,96,6,204,23,160,+42,73,37,0,55,103,111,192,42,130,100,64,6,192,42,65,31,3,95,49,+55,53,96,139,129,58,3,47,61,32,58,96,17,132,124,64,38,99,1,159,+20,204,185,0,75,206,245,131,79,162,255,237,186,2,212,77,136,100,237,186,+17,198,178,96,176,160,77,96,175,192,17,0,58,96,6,228,202,4,228,212,+2,160,59,255,12,2,0,58,96,60,100,187,1,55,49,64,202,129,134,66,+251,0,55,196,212,1,51,53,174,231,2,95,49,52,234,136,3,11,110,111,+32,109,97,116,99,104,32,97,116,32,132,74,96,32,96,7,1,51,56,64,+81,130,235,75,195,128,11,0,58,96,6,235,195,29,3,120,99,101,112,84,+180,0,46,68,189,0,114,180,187,224,39,1,2,80,97,116,64,22,0,77,+64,128,2,70,97,105,235,215,3,99,105,129,2,0,83,199,236,1,95,49,+76,190,163,38,77,135,192,10,64,128,0,52,65,158,69,105,228,122,0,78,+204,96,5,80,149,0,54,228,129,0,107,218,98,138,0,54,162,65,129,28,+86,119,162,72,113,251,78,119,65,153,98,94,1,55,32,128,15,99,44,98,+30,129,38,68,183,66,46,96,91,224,39,3,161,71,224,235,1,6,39,92,+57,50,38,39,39,165,174,161,92,96,175,224,99,3,98,16,139,227,224,17,+3,133,135,234,160,3,224,168,1,0,64,160,35,133,186,64,156,161,22,97,+198,128,158,130,99,96,101,224,147,3,64,146,70,72,160,148,64,0,0,58,+96,147,226,123,0,75,41,226,215,3,136,188,166,218,1,95,49,70,74,160,+108,97,102,69,95,129,102,171,214,97,132,225,163,0,0,54,102,127,1,49,+54,99,6,67,95,64,229,66,193,0,90,64,28,96,197,166,138,224,163,5,+224,160,0,230,73,2,138,13,139,118,121,57,225,22,7,96,0,5,79,32,+80,32,35,55,242,127,3,64,79,0,97,96,79,96,27,0,56,224,27,7,+0,98,224,27,1,73,13,224,28,5,0,102,224,28,2,0,48,224,28,7,+147,139,128,28,0,51,224,28,7,110,202,128,28,0,57,224,27,7,143,198,+128,56,0,49,224,28,7,0,118,224,56,2,224,143,8,64,3,227,52,1,+225,193,0,0,54,229,134,0,65,76,164,213,158,140,1,49,53,89,37,102,+12,64,18,3,50,32,64,35,74,127,64,53,203,230,1,53,56,64,56,196,+81,239,232,0,225,189,0,96,70,100,15,96,17,0,58,96,6,110,230,104,+35,237,58,0,240,223,0,0,54,76,50,1,55,57,172,190,128,19,250,95,+2,64,30,64,69,132,170,64,67,226,230,2,0,53,205,204,224,64,0,97,+121,226,96,9,64,69,105,145,236,141,0,160,40,226,52,3,224,10,1,64,+50,84,84,96,7,173,89,96,250,129,28,128,123,84,189,224,74,4,0,58,+96,102,237,92,8,106,156,4,10,65,32,111,114,72,143,0,53,234,236,1,+224,33,2,131,85,2,99,104,114,64,33,129,160,0,85,106,138,135,85,180,+183,149,3,128,213,68,36,134,14,180,177,225,197,6,82,104,225,197,1,106,+138,64,43,129,184,1,117,60,70,212,244,155,0,198,40,180,161,66,26,180,+158,96,107,0,58,100,44,131,245,0,89,153,60,0,80,128,6,206,143,0,+58,96,146,139,31,0,50,64,47,231,82,2,0,49,82,205,1,95,49,65,+206,0,58,99,123,199,83,180,28,0,61,96,11,241,72,0,96,37,128,165,+191,151,83,126,68,2,83,161,132,45,133,186,96,121,97,14,130,115,130,110,+180,58,96,39,105,142,84,47,0,58,96,35,170,73,84,3,66,125,0,58,+96,26,96,43,199,205,194,123,107,41,160,10,139,15,167,173,224,32,4,237,+191,0,229,0,0,243,243,1,97,34,224,65,4,224,64,5,64,240,98,115,+104,10,130,61,180,203,135,202,224,169,3,108,165,96,246,242,108,1,96,28,+161,50,117,140,97,31,180,123,182,127,0,58,97,59,205,135,128,36,129,104,+178,62,96,100,65,61,83,208,81,61,1,95,49,98,55,64,40,129,131,81,+222,7,83,116,114,105,110,103,32,58,96,27,170,61,75,25,96,46,106,35,+97,168,64,209,160,26,141,148,113,171,0,95,106,137,0,58,96,102,128,220,+128,56,84,118,77,227,224,31,0,129,139,4,110,101,119,67,65,128,112,4,+76,101,110,32,58,96,39,224,213,7,180,167,75,168,180,114,129,135,2,115,+101,113,103,7,85,239,128,43,64,44,129,22,72,239,180,13,193,137,128,1,+113,225,225,160,3,224,20,3,224,17,8,224,14,5,224,11,2,192,8,191,+199,64,120,226,211,1,238,200,3,110,177,3,10,65,32,79,64,144,214,13,+0,48,72,99,1,95,49,78,251,0,64,224,8,0,2,95,49,48,93,183,+115,217,0,95,94,215,224,11,1,67,87,192,11,72,42,192,11,97,194,83,+134,0,58,96,18,65,192,4,112,111,107,101,87,132,123,179,159,4,94,112,+101,101,107,160,18,179,50,170,175,1,95,49,82,30,64,72,99,173,179,68,+207,23,143,219,96,34,224,50,4,133,249,160,50,226,132,1,1,95,49,101,+29,72,90,114,21,116,62,0,58,96,39,7,10,65,32,116,111,73,110,116,+64,128,129,37,3,116,111,80,116,68,252,177,248,239,138,5,96,98,227,25,+0,189,67,0,39,206,122,64,8,1,95,49,101,131,131,123,0,95,134,139,+131,119,105,203,240,163,5,176,185,96,50,130,59,99,133,1,95,49,80,136,+65,197,128,64,1,67,32,96,66,0,95,110,146,1,64,58,65,140,160,68,+229,151,0,176,185,114,241,115,28,72,49,0,58,97,189,5,10,65,32,113,+117,111,64,225,176,184,226,74,1,226,78,2,226,117,73,241,3,3,164,149,+244,114,2,1,95,49,80,200,163,176,224,22,1,163,182,245,102,6,244,99,+3,0,58,86,101,128,198,1,95,49,81,25,0,95,70,166,0,58,96,40,+66,82,3,102,114,101,101,64,235,167,236,138,109,224,96,5,86,11,150,74,+211,204,246,8,3,144,85,1,95,49,81,62,224,121,3,0,58,96,177,236,+238,4,64,171,133,105,96,254,219,56,128,49,151,154,160,98,245,129,1,165,+103,193,72,224,119,2,1,64,95,81,150,128,162,133,119,0,57,250,254,8,+134,46,177,217,111,75,99,205,0,58,177,208,75,146,0,83,106,253,142,170,+214,73,2,83,32,95,80,139,65,111,130,78,224,88,7,96,87,176,228,146,+240,168,17,176,216,68,199,0,58,176,206,96,182,105,141,98,162,247,156,0,+226,167,7,176,240,248,82,6,8,117,110,100,101,102,105,110,101,100,74,16,+0,58,176,255,243,99,7,177,11,0,95,72,218,99,179,105,205,67,12,0,+95,73,241,233,194,12,65,111,233,190,2,71,73,64,1,2,95,56,48,224,+37,3,233,159,2,64,37,96,19,96,10,0,95,71,73,0,58,177,121,2,+66,32,95,80,25,0,95,81,97,0,58,177,130,0,85,97,186,77,126,113,+254,146,95,0,80,96,7,97,114,225,113,0,0,95,80,109,64,120,70,94,+81,152,128,0,0,58,177,174,83,103,131,162,74,202,224,13,1,70,211,225,+43,6,179,76,14,58,32,117,110,115,117,112,112,111,114,116,101,100,32,119,+69,47,2,115,105,122,158,239,86,251,77,91,71,137,178,4,0,89,162,158,+237,135,3,243,17,1,194,142,215,220,81,151,129,11,65,81,0,48,192,12,+129,78,1,56,55,128,231,98,30,178,35,4,105,110,118,32,58,178,15,0,+115,74,39,177,217,73,62,177,213,4,115,104,108,32,58,177,128,2,43,32,+58,177,125,3,45,32,58,56,129,94,2,73,32,58,177,120,230,147,7,241,+132,0,66,217,100,218,241,136,0,2,53,32,95,114,214,79,214,0,95,80,+48,0,95,80,64,0,95,112,144,80,136,2,95,55,54,235,131,0,0,55,+160,9,0,58,177,125,131,227,98,252,131,240,96,37,0,53,131,164,69,152,+177,122,224,29,1,224,49,1,224,39,5,128,235,227,121,2,177,144,3,62,+61,32,58,177,14,2,62,32,58,176,232,74,220,176,229,2,60,32,58,176,+228,5,105,99,109,112,32,58,208,156,74,152,78,202,0,95,79,229,0,58,+176,77,74,149,175,245,65,85,174,234,2,80,32,58,173,50,196,60,164,119,+194,97,224,20,11,224,17,8,224,14,5,224,11,2,192,8,229,193,0,173,+148,236,67,5,173,126,4,110,101,103,32,58,173,124,2,42,32,58,173,90,+2,45,32,58,173,30,2,43,32,58,172,130,224,148,68,0,58,172,193,199,+149,64,17,225,225,0,73,206,68,153,66,26,76,138,96,12,166,31,1,64,+58,172,217,116,15,172,216,2,73,32,58,172,207,64,41,102,74,84,155,172,+198,64,29,128,224,64,9,128,224,8,94,109,97,108,108,111,99,32,58,172,+160,224,158,2,0,58,172,168,2,85,32,58,172,164,224,198,14,0,58,172,+161,64,19,0,95,142,91,76,140,0,58,172,170,104,26,108,65,172,162,6,+114,97,105,115,101,32,58,172,164,7,65,46,114,101,97,100,32,58,172,167,+13,73,79,46,103,101,116,65,114,103,82,101,102,32,58,172,174,4,95,51,+50,32,95,108,139,75,200,228,78,1,4,115,116,100,101,114,111,225,0,58,+172,156,2,73,79,46,128,20,1,32,58,172,151,96,59,108,215,224,59,8,+1,111,117,112,1,0,58,172,172,0,75,149,201,172,43,128,73,4,111,117,+116,32,58,172,30,4,95,51,54,32,58,172,27,2,73,32,58,172,20,128,+95,67,179,76,0,224,95,4,0,105,112,153,0,58,172,41,3,75,52,32,+58,172,35,128,91,3,105,110,32,58,172,11,129,89,0,95,116,91,236,230,+0,253,189,2,108,11,162,70,232,59,3,97,132,0,95,76,0,66,75,172,+68,225,195,3,236,27,6,0,50,185,48,162,72,76,1,1,64,58,172,31,+93,219,128,250,1,65,46,162,20,172,13,76,208,0,58,172,14,13,73,79,+46,112,101,114,102,111,114,109,73,79,32,58,172,1,117,162,232,37,2,0,+58,172,14,0,95,64,192,66,134,96,123,124,250,90,20,225,4,0,3,62,+62,32,58,171,179,0,95,64,66,69,8,118,38,80,75,96,248,75,130,111,+8,1,95,50,72,87,128,9,160,85,95,41,96,59,187,234,73,22,163,37,+139,173,99,38,171,172,128,35,96,32,116,209,192,32,0,95,101,85,171,190,+1,95,55,88,160,224,47,12,96,150,122,116,145,181,129,25,87,102,194,229,+164,81,0,58,171,167,119,212,0,58,171,146,131,222,138,217,240,83,0,171,+26,0,49,171,119,192,12,96,199,206,42,224,61,1,142,137,208,87,195,82,+171,126,1,95,51,97,243,110,40,129,219,71,255,129,81,73,94,96,36,181,+66,0,95,69,156,69,155,128,232,2,75,32,58,201,37,79,11,128,205,2,+66,32,58,164,81,9,79,46,114,101,116,117,114,110,32,58,128,201,97,181,+2,61,32,58,128,197,2,80,32,58,226,192,3,228,30,0,229,0,32,0,+58,226,178,1,228,89,11,231,83,0,0,50,143,100,64,200,1,95,56,118,+130,224,0,255,224,0,255,224,0,255,224,0,31,1,32,125,+};+unsigned char *combexpr = data;+int combexprlen = 34276; #include "mhsffi.h" static struct ffi_entry table[] = { { 0,0 }
generated/mhs.c view
@@ -1,5001 +1,5293 @@ static unsigned char data[] = {-122,76,90,49,15,134,1,0,26,118,55,46,48,10,50,48,52,51,10,65,-32,95,48,32,95,50,51,32,64,95,50,48,57,32,64,66,224,15,2,6,-49,56,32,64,64,66,32,224,18,4,16,55,32,64,64,64,83,39,32,66,-32,64,66,39,32,67,32,83,64,50,6,83,32,67,39,32,83,39,128,10,-9,64,95,49,50,50,32,95,50,50,48,64,10,28,52,55,32,95,49,52,-57,32,64,102,114,111,109,85,84,70,56,32,34,45,45,118,101,114,115,105,-111,110,34,64,75,14,64,64,67,39,66,32,85,32,95,50,54,32,95,50,-53,64,101,1,49,50,96,52,224,57,9,8,77,105,99,114,111,72,115,44,-32,160,64,0,32,96,65,128,47,2,50,54,49,224,58,19,16,44,32,99,-111,109,98,105,110,97,116,111,114,32,102,105,108,101,224,67,6,2,50,54,-50,128,141,3,64,90,32,75,128,9,2,83,39,32,64,154,2,64,67,32,-224,209,25,6,110,117,109,101,114,105,99,224,217,6,2,66,32,80,128,211,-128,157,224,91,2,129,87,65,46,96,101,64,5,1,95,55,64,197,1,51,-32,96,120,65,13,65,139,5,50,50,52,32,95,50,64,59,0,67,64,19,-3,52,32,64,35,96,72,64,26,193,47,64,12,224,247,16,6,102,108,97,-103,115,32,61,128,229,3,64,95,49,49,96,140,0,57,192,133,0,67,128,-125,161,231,5,83,32,95,50,55,48,64,27,128,146,224,23,4,96,119,224,-23,10,97,55,65,40,0,66,66,21,224,184,0,8,55,53,32,64,85,32,-75,32,65,160,106,0,67,66,44,0,39,65,64,1,56,57,64,98,128,121,-0,80,96,9,64,192,1,57,57,65,250,8,52,54,49,32,95,52,54,50,-32,224,193,1,11,99,111,109,109,97,110,100,45,108,105,110,101,64,197,2,-35,48,32,96,3,3,64,64,64,75,65,149,0,48,64,244,2,57,57,52,-224,210,0,64,19,0,49,96,173,96,100,98,217,1,49,54,128,255,1,50,-48,97,97,1,85,32,193,137,64,162,193,147,128,45,128,152,3,95,50,48,-52,64,100,162,234,2,32,95,52,97,137,1,48,51,98,3,98,44,64,34,-97,153,97,16,128,60,129,205,1,95,49,64,38,227,8,3,64,149,2,51,-56,49,192,13,6,79,32,35,52,54,32,64,128,120,2,95,49,52,64,188,-3,67,39,32,79,129,58,65,216,0,48,67,140,224,13,6,192,7,224,55,-5,96,0,9,58,50,48,52,50,32,64,10,65,32,65,103,224,1,15,7,-83,32,95,49,56,56,56,32,65,62,2,95,49,50,128,97,1,79,32,224,-141,3,128,133,98,242,0,55,226,71,3,3,47,108,105,98,98,67,128,123,-224,24,1,3,111,117,116,46,67,90,195,138,96,168,224,6,20,96,181,224,-6,0,160,20,0,54,65,150,224,6,0,224,27,3,224,106,1,6,100,101,-102,97,117,108,116,64,105,64,239,0,49,96,239,2,66,32,89,97,118,97,-165,0,83,194,81,65,133,4,67,32,64,64,80,99,177,97,38,227,104,0,-64,23,195,126,132,182,227,223,25,163,208,224,69,53,0,118,224,69,60,0,-113,224,69,60,0,114,224,69,60,0,108,224,69,60,1,67,82,224,70,61,-0,87,224,70,61,224,69,60,0,84,224,69,60,3,88,67,80,80,224,72,-60,0,122,224,69,60,0,81,224,69,3,195,112,198,12,128,85,232,2,30,-0,111,224,73,0,64,58,0,82,96,66,229,117,2,197,109,1,50,52,64,-64,231,154,0,224,117,56,2,112,116,99,224,120,21,128,97,224,126,0,0,-53,224,126,0,102,224,165,21,4,95,49,57,51,53,101,211,0,79,197,195,-224,157,14,161,88,64,14,64,30,128,33,192,25,64,10,193,128,224,10,1,-224,208,9,0,49,64,134,1,35,52,64,113,192,183,0,66,137,121,225,192,-3,232,170,4,128,50,1,49,48,192,51,165,16,64,34,160,49,69,38,102,-94,96,247,0,67,230,223,0,71,190,198,223,198,95,232,181,2,224,197,84,-192,162,224,197,15,128,49,225,177,21,224,190,1,225,177,4,0,52,96,68,-225,176,6,224,206,109,168,154,224,206,14,226,249,14,224,170,110,137,53,224,-170,23,99,18,224,170,9,224,176,1,192,102,160,168,224,13,0,224,171,24,-224,41,1,160,57,224,16,0,2,66,32,90,224,16,5,169,188,224,192,4,-0,54,76,192,160,37,226,50,17,0,56,226,50,13,0,53,108,235,226,50,-8,224,219,127,0,55,73,41,160,37,224,219,69,226,98,99,0,56,139,200,-128,36,226,97,8,108,25,192,202,0,57,228,152,2,77,8,224,180,91,229,-87,13,0,57,111,4,229,86,36,236,54,3,229,86,125,224,196,0,128,48,-225,121,6,226,70,5,224,189,2,226,70,5,64,73,229,85,10,192,113,128,-125,225,29,1,224,201,5,0,67,224,201,62,0,55,228,165,20,226,67,3,-0,51,112,34,226,67,10,227,98,13,160,139,237,132,0,65,49,239,107,19,-7,85,110,107,110,111,119,110,32,79,115,1,58,32,136,104,205,73,224,53,-7,4,79,32,35,49,48,161,54,238,190,4,224,0,2,193,239,65,2,97,-62,129,253,112,30,64,83,64,91,0,56,65,199,224,130,1,0,46,136,223,-224,34,20,137,123,224,25,11,0,97,233,28,0,129,230,175,154,128,72,225,-228,2,228,113,19,233,50,36,129,92,227,43,7,0,50,225,165,2,0,48,-161,220,224,39,11,114,43,224,39,26,231,74,1,224,39,21,224,186,1,224,-39,11,0,39,224,40,1,232,100,2,224,20,1,231,5,1,160,61,224,108,-21,224,46,8,224,39,14,233,143,3,224,39,16,2,49,56,56,229,30,3,-224,79,19,230,17,1,224,39,21,224,79,2,3,54,50,32,95,82,22,64,-102,192,9,2,55,55,32,146,137,224,64,5,0,83,224,64,11,65,58,1,-55,53,128,57,83,105,0,51,210,197,227,179,2,101,56,111,214,0,48,111,-214,6,95,52,50,53,32,75,32,81,158,131,251,224,1,17,108,200,224,0,-4,224,47,38,224,44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,-29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,-192,8,96,5,100,97,0,56,233,130,0,224,0,5,0,58,130,33,225,233,-3,0,90,224,145,4,224,1,11,225,233,255,224,29,11,224,26,17,224,23,-14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,96,5,225,231,17,-65,230,0,56,225,230,5,224,119,3,170,231,225,198,22,225,248,255,224,29,-13,224,26,17,224,23,14,225,173,11,65,167,0,55,225,167,15,236,141,6,-224,1,15,225,164,255,224,29,11,224,26,17,224,23,14,224,20,11,227,102,-12,65,185,0,54,227,97,17,227,99,1,225,191,255,224,32,15,224,29,20,-224,26,17,225,148,10,65,146,0,53,225,146,19,225,148,2,225,149,255,224,-32,15,224,29,20,225,123,9,65,122,0,52,225,122,21,128,1,225,128,1,-225,131,214,225,35,6,65,32,0,51,225,32,27,192,1,225,40,4,64,0,-224,46,21,225,44,11,224,130,2,64,126,156,167,224,126,26,224,122,6,224,-40,17,128,1,225,165,100,225,86,4,64,213,156,141,225,84,28,225,82,7,-224,43,19,64,1,224,216,56,224,172,3,64,171,237,98,6,224,71,15,224,-167,5,224,37,15,192,1,227,36,141,226,254,5,0,58,148,71,224,252,21,-224,246,2,224,28,9,224,1,5,228,24,179,224,35,26,224,32,23,229,127,-8,65,95,235,238,18,224,1,11,228,95,8,224,85,2,64,78,234,149,10,-64,50,224,86,23,225,153,246,224,29,20,224,26,17,224,23,14,224,20,11,-224,17,8,224,14,5,224,11,2,238,29,15,65,221,0,54,226,44,25,226,-32,3,224,31,11,224,1,3,225,245,214,225,73,7,65,65,234,104,12,97,-51,224,80,13,224,1,1,225,44,214,224,32,23,224,29,20,224,26,17,224,-23,14,224,20,11,224,17,8,224,14,5,227,23,14,65,212,138,194,90,125,-153,34,152,149,1,50,50,117,122,248,67,0,151,71,120,23,4,95,48,32,-95,50,92,17,2,95,49,57,126,234,152,43,85,85,128,9,224,32,0,215,-150,1,52,48,87,22,153,193,96,14,5,51,32,95,53,54,57,182,211,0,-48,117,189,1,56,50,149,166,119,239,0,80,64,138,249,9,2,249,7,17,-11,67,97,110,110,111,116,32,102,105,110,100,32,216,81,2,66,32,85,218,-15,3,32,95,55,55,192,173,1,51,52,96,97,2,95,50,48,124,145,224,-10,4,88,77,1,50,32,97,15,138,177,64,126,1,50,49,128,58,224,245,-9,0,50,64,20,120,151,87,50,0,50,118,133,96,92,224,40,4,1,50,-48,65,68,161,3,224,135,0,192,216,0,53,64,12,217,178,4,79,32,35,-53,56,248,173,0,224,124,5,224,46,2,225,7,17,0,32,224,253,0,0,-89,124,26,64,73,128,121,3,67,39,32,89,151,24,187,39,161,168,117,53,-89,227,115,87,2,95,49,48,215,38,1,67,39,89,56,64,189,0,49,186,-157,224,113,12,3,46,112,107,103,128,115,249,99,3,97,208,89,44,129,223,-0,64,161,246,65,88,139,139,188,199,160,145,120,235,187,159,250,1,0,88,-54,1,52,56,97,247,160,6,0,49,87,199,65,10,123,73,160,21,64,83,-139,9,122,130,120,188,90,231,129,153,225,174,3,155,155,96,38,225,134,0,-225,192,2,97,110,193,194,219,150,1,50,49,120,143,1,50,49,158,251,226,-142,30,22,103,101,116,68,105,114,101,99,116,111,114,121,67,111,110,116,101,-110,116,115,58,32,99,130,164,3,111,112,101,110,225,166,0,129,150,154,208,-0,66,64,5,226,55,3,0,49,99,171,219,147,65,44,65,201,0,83,97,-167,224,156,12,224,243,6,2,50,48,49,97,125,224,24,9,0,49,124,103,-219,114,225,246,3,226,168,8,65,57,64,28,160,250,0,49,162,144,225,149,-0,100,86,190,95,65,139,139,233,10,94,99,95,100,95,110,97,109,101,32,-58,128,133,64,19,6,114,101,97,100,100,105,114,96,18,137,179,0,75,224,-151,5,2,51,53,53,156,108,227,38,13,253,9,19,64,107,221,1,125,126,-125,120,0,56,128,170,224,83,46,6,118,101,114,115,105,111,110,224,86,2,-1,50,53,91,68,1,50,48,66,96,224,86,48,13,99,111,109,112,105,108,-101,114,58,32,109,104,115,45,128,91,1,95,53,66,130,224,81,47,6,100,-101,112,101,110,100,115,224,168,2,0,53,65,225,123,35,2,48,32,85,99,-242,253,23,0,97,26,224,78,10,1,79,32,126,126,131,198,128,233,129,220,-0,56,70,28,130,26,226,25,3,96,151,224,131,1,15,101,120,112,111,115,-101,100,45,109,111,100,117,108,101,115,58,162,225,166,11,227,112,3,0,85,-100,23,128,211,224,79,17,4,111,116,104,101,114,224,77,7,192,60,128,144,-229,30,1,0,95,193,38,64,8,229,29,24,64,36,130,32,1,52,52,223,-201,96,0,66,152,139,253,128,182,0,66,224,163,7,227,30,0,228,48,9,-8,39,32,95,49,51,52,32,95,54,64,13,1,95,50,124,114,130,37,229,-187,30,15,66,117,105,108,100,105,110,103,32,112,97,99,107,97,103,101,160,-172,129,119,101,180,164,38,231,92,7,68,25,66,147,94,196,0,51,97,87,-229,230,2,68,47,196,246,133,97,228,99,1,1,95,53,193,217,102,9,160,-48,0,39,224,5,8,224,255,3,192,131,225,1,38,225,3,4,128,15,225,-8,16,3,87,114,105,116,225,7,10,134,159,66,194,227,11,20,2,32,116,-111,193,230,1,49,57,90,9,224,0,0,225,1,0,96,233,128,133,224,221,-6,161,223,0,39,96,2,92,76,94,27,224,71,1,160,65,135,44,96,8,-201,48,1,67,32,103,69,65,134,135,173,0,52,66,163,94,75,5,64,64,-64,85,32,65,64,6,1,95,50,97,25,224,21,6,2,64,95,55,71,243,-226,37,0,1,48,48,169,70,164,189,228,109,1,64,16,128,9,129,64,225,-197,6,192,185,225,154,37,225,155,38,6,67,111,109,112,114,101,115,69,22,-3,32,116,105,109,225,156,0,129,88,225,158,0,64,66,1,49,51,64,61,-96,241,65,184,1,51,54,191,142,0,64,225,172,3,1,109,115,226,229,0,-134,176,224,202,1,2,32,95,56,82,226,64,86,0,54,102,164,6,50,51,-49,32,95,51,56,96,165,195,185,64,50,102,203,64,9,0,48,161,118,131,-200,0,54,169,193,233,9,1,225,172,1,168,240,239,216,1,128,7,231,9,-4,142,5,65,202,65,2,2,95,51,57,168,109,64,111,68,33,197,85,1,-53,49,97,177,1,95,50,101,93,2,49,52,51,135,81,71,160,105,54,1,-64,35,164,100,167,48,131,65,0,80,227,206,1,98,142,224,50,4,101,136,-161,7,169,22,99,199,0,85,96,165,0,90,64,13,0,90,202,82,66,41,-169,31,1,50,53,137,108,64,180,162,74,3,95,49,53,56,64,20,64,15,-0,54,73,139,96,21,0,67,232,68,2,224,163,3,0,73,64,9,85,45,-224,174,2,160,79,232,246,1,226,30,19,195,178,103,249,104,236,9,102,32,-116,104,101,32,102,111,114,109,96,20,0,45,199,83,195,162,98,37,106,98,-197,138,65,98,140,141,195,160,64,1,236,225,30,224,11,2,192,8,74,232,-160,86,203,212,64,1,2,95,49,56,65,237,102,4,128,231,96,21,1,51,-54,172,158,102,91,1,51,55,66,109,65,42,0,56,72,177,2,95,49,53,-72,161,160,77,138,201,66,96,202,190,162,76,65,94,229,83,5,205,25,195,-164,1,67,32,139,16,225,86,1,225,67,2,14,107,103,80,97,116,104,32,-105,115,32,101,109,112,116,121,228,254,0,130,165,129,245,96,6,0,79,66,-54,0,79,236,47,0,192,27,128,140,96,110,134,198,231,128,5,228,40,20,-64,19,75,91,1,54,50,131,173,0,35,195,13,97,28,228,38,32,6,73,-110,115,116,97,108,108,229,197,10,64,124,168,136,229,194,17,0,105,235,32,-1,64,105,230,115,0,234,40,5,196,117,70,220,224,13,1,229,229,0,224,-245,4,3,95,49,57,57,97,239,231,239,0,131,119,97,7,128,50,225,34,-10,64,53,238,159,0,166,32,231,91,4,108,59,200,132,225,128,2,161,160,-135,170,232,60,26,161,118,0,35,131,122,232,48,30,4,99,114,101,97,116,-232,38,2,224,109,6,65,103,224,244,2,67,248,100,30,64,204,165,136,129,-141,96,218,64,201,0,52,64,32,64,16,104,74,133,97,1,95,53,99,2,-106,162,168,91,237,219,6,64,116,97,208,96,57,235,118,2,234,98,22,224,-113,3,235,87,4,240,5,1,64,0,0,90,135,45,96,192,64,71,1,57,-57,229,225,0,141,246,71,78,0,90,160,1,195,9,64,29,184,114,133,8,-64,208,3,50,48,48,56,110,131,64,116,160,26,0,52,70,38,64,25,0,-55,128,25,140,150,194,18,0,80,111,28,5,32,95,52,57,49,32,101,28,-225,135,12,1,46,47,161,130,135,209,167,222,64,84,0,54,128,84,182,80,-3,50,48,48,53,96,5,0,49,128,22,0,54,160,107,64,18,99,115,66,-18,66,215,64,28,166,100,241,83,0,64,36,68,172,1,50,48,65,123,64,-33,197,35,96,198,101,170,167,42,2,95,54,57,239,59,1,64,41,187,125,-96,65,224,127,2,187,21,230,5,1,1,95,52,64,98,64,26,129,89,130,-221,71,124,228,222,0,131,107,227,96,0,129,228,89,221,0,64,129,36,0,-64,167,64,174,18,128,6,64,81,129,141,163,0,195,199,3,67,32,95,51,-64,32,2,95,50,57,98,144,224,30,15,0,52,130,105,224,30,6,1,95,-53,65,3,169,148,227,101,2,1,95,50,71,131,209,232,1,64,58,131,196,-64,125,167,249,238,115,3,96,227,240,52,0,69,233,1,57,57,71,129,0,-53,131,44,0,75,238,241,1,65,255,163,156,236,118,0,163,96,89,225,105,-87,97,140,3,49,57,57,55,96,233,228,231,13,67,4,0,55,229,180,1,-72,158,129,227,229,203,1,129,246,239,240,0,129,106,232,31,4,134,177,129,-16,229,83,2,230,14,3,132,135,161,143,0,85,64,124,171,236,224,9,1,-65,26,194,241,0,80,192,33,64,191,66,184,96,198,128,27,0,89,230,196,-0,0,66,64,135,137,34,64,17,224,54,2,224,141,0,160,87,0,54,96,-59,2,94,109,107,111,241,129,85,1,10,65,237,224,2,4,85,115,97,103,-101,111,3,2,32,91,45,200,23,0,93,64,11,6,110,117,109,101,114,105,-99,224,19,3,0,118,64,4,0,113,64,4,0,108,64,4,0,114,64,4,-5,67,91,82,124,87,93,64,9,3,88,67,80,80,64,7,3,68,68,69,-70,64,7,4,73,80,65,84,72,64,8,0,84,64,4,0,122,64,4,0,-105,192,18,4,111,70,73,76,69,64,8,1,97,91,96,18,64,10,0,76,-96,10,3,124,80,75,71,96,14,0,80,64,8,12,32,91,45,81,32,80,-75,71,32,91,68,73,82,96,22,5,116,84,65,82,71,69,96,82,26,111,-112,116,99,32,79,80,84,73,79,78,93,32,91,77,79,68,85,76,69,78,-65,77,69,46,46,124,96,94,0,34,129,63,245,84,1,237,177,3,230,206,-9,1,52,53,69,248,230,185,0,224,42,1,101,11,101,34,116,203,233,244,-0,230,86,5,76,167,64,64,135,147,230,141,0,0,67,136,3,162,12,181,-12,138,66,128,1,238,7,9,230,219,3,162,129,231,100,1,199,103,224,17,-4,224,20,0,238,157,3,175,55,174,61,96,81,160,116,232,135,38,236,164,-45,16,116,111,112,32,108,101,118,101,108,32,100,101,102,110,115,58,32,96,-0,238,70,1,230,176,2,5,49,56,50,54,32,35,70,232,236,178,5,165,-196,230,196,11,232,167,2,7,40,117,110,112,114,117,110,101,214,116,224,89,-4,224,76,1,1,95,55,64,96,67,247,0,49,233,172,2,96,0,225,52,-15,239,120,9,232,59,30,228,156,1,153,153,225,53,3,160,66,132,149,242,-6,15,224,222,2,0,61,192,214,65,39,67,191,224,187,5,226,3,2,99,-246,244,197,1,64,8,76,180,64,54,137,112,194,114,226,184,4,101,123,0,-51,70,120,65,32,229,104,7,224,52,1,240,177,15,213,51,226,178,0,233,-197,13,226,96,73,9,102,105,110,97,108,32,112,97,115,115,130,90,226,96,-4,163,195,97,101,160,71,0,56,194,100,160,15,239,26,17,224,100,2,239,-26,4,236,75,4,228,43,3,227,162,1,225,3,1,99,144,161,111,109,231,-0,56,69,201,232,176,2,3,99,111,109,98,192,92,163,195,224,53,27,192,-50,225,149,9,1,49,50,229,216,2,3,109,104,115,99,224,44,1,224,45,-0,68,121,128,13,225,151,0,235,29,6,0,32,135,185,224,53,4,225,210,-4,231,211,0,224,130,10,194,24,192,25,224,27,2,2,50,49,54,224,158,-2,4,77,72,83,67,67,225,90,1,131,20,226,203,1,96,24,242,42,2,-224,20,1,224,90,2,229,194,8,97,229,1,57,57,130,93,186,27,176,146,-3,49,57,48,52,224,126,2,6,105,110,99,108,117,100,101,225,219,2,224,-88,3,226,178,1,224,89,41,3,99,98,105,116,226,51,3,227,146,7,161,-113,229,156,5,230,107,1,3,95,49,57,50,243,46,0,224,145,1,128,1,-129,188,224,25,9,255,42,0,228,200,2,229,239,2,209,102,224,8,23,227,-204,2,237,49,38,245,98,10,227,185,19,5,69,120,101,99,117,116,248,41,-0,240,127,11,227,5,1,250,63,5,177,23,225,163,1,97,166,226,155,1,-0,53,243,156,3,164,4,224,200,1,174,43,224,199,10,1,51,56,64,125,-1,57,51,192,102,130,225,192,209,250,105,22,13,99,111,109,109,97,110,100,-32,102,97,105,108,101,100,192,214,192,133,227,29,7,229,16,80,1,67,32,-152,212,1,97,116,84,24,229,16,91,192,0,129,108,225,144,0,226,233,1,-171,213,0,57,84,246,252,190,17,2,36,73,78,224,84,5,224,77,12,224,-70,25,2,79,85,84,224,71,3,228,80,3,128,253,0,52,228,217,10,199,-139,224,21,3,231,144,20,14,45,119,32,45,87,97,108,108,32,45,79,51,-32,45,73,225,236,3,227,233,3,224,85,0,224,84,27,7,47,115,114,99,-47,114,117,110,245,205,3,225,87,6,232,212,1,66,16,122,90,196,129,224,-85,15,224,156,3,224,135,1,224,47,7,1,79,32,116,109,232,86,0,224,-173,25,8,45,68,95,95,77,72,83,95,95,230,94,8,224,91,23,232,157,-5,224,209,0,2,55,54,52,224,60,14,0,57,240,168,0,160,45,224,144,-12,0,39,225,51,0,1,95,53,90,59,128,146,161,57,193,136,225,131,35,-4,47,101,118,97,108,188,21,161,134,224,71,4,224,69,17,1,46,99,192,-139,165,53,192,227,97,177,66,195,211,52,224,25,6,150,18,224,228,18,1,-47,42,231,207,1,226,142,2,10,36,73,78,32,45,108,109,32,45,111,32,-227,0,7,224,0,7,64,125,163,239,164,215,87,172,81,124,128,27,161,57,-96,0,242,160,4,224,11,0,249,133,0,198,105,228,83,1,3,95,49,57,-54,146,56,0,57,144,71,160,113,112,144,249,126,1,2,49,57,57,101,194,-119,51,0,67,88,94,81,57,74,215,80,97,231,73,3,3,109,97,105,110,-224,205,2,77,202,145,67,93,74,64,2,143,148,109,95,225,147,1,1,50,-54,160,94,224,153,0,228,216,4,226,101,12,80,116,130,101,88,162,76,117,-154,20,225,101,2,0,125,192,137,64,29,0,85,242,228,2,235,129,2,0,-89,64,18,224,13,0,245,13,2,181,16,96,49,224,17,4,232,212,0,232,-234,7,224,48,2,224,51,10,224,57,3,234,59,3,224,29,17,224,65,3,-144,29,227,179,1,130,221,224,45,11,128,41,224,37,8,234,57,3,247,82,-4,64,53,2,95,56,52,66,32,142,225,0,67,112,153,1,56,56,134,72,-4,95,49,55,55,32,134,218,1,95,51,98,43,169,87,0,53,155,164,1,-75,52,161,119,224,158,6,71,64,0,56,71,0,1,95,56,183,248,224,29,-3,169,20,224,231,6,225,2,2,192,40,233,28,4,106,199,173,22,224,34,-4,224,62,0,104,54,96,118,224,33,3,2,95,56,53,237,75,3,96,99,-132,105,65,6,3,83,32,95,53,83,135,1,95,55,66,170,192,0,96,40,-218,245,146,70,233,97,1,160,97,233,98,2,142,60,160,23,0,95,120,242,-224,111,0,225,10,9,128,23,97,4,192,163,224,167,4,192,158,234,20,7,-192,186,193,21,131,141,1,55,53,167,243,184,114,103,30,96,210,164,50,128,-216,160,12,155,231,227,82,12,238,168,1,227,126,4,160,0,226,65,0,0,-67,97,249,0,50,246,56,6,241,53,5,64,97,0,82,66,61,0,51,132,-188,244,15,0,97,8,238,167,0,96,214,241,88,4,84,5,229,166,15,1,-65,32,228,90,1,224,141,1,149,186,226,149,1,161,61,96,21,229,202,2,-224,238,9,94,60,166,167,228,118,11,228,72,2,4,64,92,49,48,38,192,-123,0,67,150,42,64,47,2,79,32,35,65,77,239,220,3,163,177,143,163,-160,9,131,83,238,138,3,2,95,55,56,64,169,97,7,161,66,96,4,64,-30,129,94,67,88,192,87,0,80,247,165,0,225,110,1,132,242,192,13,65,-66,0,85,64,50,224,32,0,3,85,32,75,51,224,48,4,247,236,11,64,-124,224,19,8,237,161,0,170,233,105,127,125,166,160,15,1,57,51,229,252,-1,0,57,102,8,117,196,231,96,19,1,78,111,82,80,2,105,110,105,106,-229,2,102,111,117,75,120,1,111,114,236,76,0,145,82,100,99,131,223,70,-56,220,37,98,182,0,49,124,93,2,95,49,56,86,208,64,29,151,104,0,-75,175,115,129,108,128,166,201,113,74,115,96,175,1,49,32,118,43,254,202,-6,195,212,130,124,197,59,133,27,225,18,3,130,172,254,226,5,194,192,224,-102,36,162,16,164,228,224,116,0,96,184,148,102,225,137,6,224,115,4,96,-114,241,224,2,131,217,97,21,250,71,3,72,30,225,137,19,0,35,175,69,-3,32,92,51,52,162,210,232,192,10,73,197,226,216,2,64,80,0,48,109,-233,224,80,9,7,109,104,115,102,102,105,46,104,128,75,64,41,1,51,51,-79,115,109,211,225,118,24,175,7,225,26,5,224,13,0,100,79,192,36,224,-46,2,224,10,6,164,120,225,162,5,129,44,129,48,225,54,0,225,41,0,-208,6,0,55,190,179,131,205,224,224,12,31,115,116,97,116,105,99,32,115,-116,114,117,99,116,32,102,102,105,95,101,110,116,114,121,32,116,97,98,108,-101,91,93,32,2,61,32,123,96,251,163,192,224,96,4,120,211,115,162,169,-177,0,79,233,43,2,4,123,32,48,44,48,136,164,224,22,3,1,125,59,-224,17,7,224,122,8,1,42,120,64,11,96,128,1,32,61,128,136,96,52,-227,215,1,187,244,224,67,1,23,85,110,105,109,112,108,101,109,101,110,116,-101,100,32,70,70,73,32,102,101,97,116,117,114,177,78,195,101,1,57,56,-65,62,1,95,53,65,194,0,54,65,79,2,50,51,50,193,204,64,29,113,-66,2,49,57,55,176,238,225,223,1,65,124,226,228,1,230,179,3,233,97,-1,147,103,97,253,168,127,193,242,163,12,167,101,122,103,64,5,186,117,64,-95,163,22,227,29,1,198,49,243,28,1,227,196,1,64,56,4,61,61,32,-64,35,100,152,224,30,0,135,112,166,52,97,169,249,143,1,124,41,2,49,-57,56,192,49,194,52,1,67,39,90,24,0,83,100,100,2,83,32,73,128,-140,72,241,229,182,2,225,118,0,68,151,155,174,148,21,224,245,1,169,106,-160,23,96,9,160,246,0,83,224,248,4,154,170,97,111,226,140,12,5,100,-121,110,97,109,105,204,82,64,85,90,159,1,57,56,71,224,225,27,5,224,-87,37,6,119,114,97,112,112,101,114,224,87,8,72,43,224,87,1,225,95,-1,224,79,23,131,52,236,9,2,97,77,1,95,54,254,248,0,181,54,161,-21,193,133,234,236,1,76,190,1,56,57,64,103,240,57,15,196,114,163,249,-130,124,67,202,0,57,71,91,1,95,49,104,231,96,28,0,85,188,158,160,-23,169,229,224,132,12,235,145,1,192,146,203,49,225,66,14,69,41,232,71,-0,224,64,0,194,253,224,93,0,128,66,246,40,3,225,74,6,156,157,141,-167,229,2,0,227,70,1,102,225,225,129,4,0,66,72,38,64,212,100,87,-252,190,2,226,6,5,225,178,33,3,118,97,108,117,245,92,1,224,104,10,-110,105,131,15,142,254,226,22,0,224,140,6,224,17,4,160,209,192,139,226,-252,1,104,235,133,227,226,97,3,64,40,232,106,23,232,107,20,1,98,97,-104,91,11,101,105,103,110,32,105,109,112,111,114,116,32,168,101,244,178,11,-0,58,131,243,104,74,0,65,104,89,64,177,96,14,0,75,128,14,157,202,-96,162,64,14,0,54,168,149,128,1,149,197,224,13,11,231,228,1,0,32,-73,193,192,107,157,203,224,107,0,156,231,224,107,0,0,51,96,14,229,251,-3,5,71,69,84,82,65,87,230,17,7,10,71,69,84,84,73,77,69,77,-73,76,76,114,46,224,27,3,2,97,99,111,115,238,224,19,4,2,100,100,-95,93,94,224,23,11,3,117,116,102,56,224,23,8,0,115,143,198,224,19,-4,1,116,97,224,19,12,0,50,224,20,7,4,99,97,108,108,111,99,251,-224,21,4,3,108,111,115,101,121,59,224,21,4,224,171,9,2,101,120,112,-224,18,7,4,102,108,117,115,104,224,59,8,3,102,111,112,101,224,145,8,-2,102,114,101,98,196,224,19,3,2,103,101,116,224,60,8,5,103,101,116,-101,110,118,224,21,7,7,105,115,119,105,110,100,111,119,224,148,8,2,108,-111,103,224,18,7,0,109,224,230,12,7,109,100,53,65,114,114,97,121,224,-23,10,0,66,225,129,11,7,109,100,53,83,116,114,105,110,224,94,9,3,-101,109,99,112,224,70,9,4,101,109,109,111,118,224,225,8,1,112,117,224,-225,9,225,194,10,3,115,113,114,116,224,19,8,4,121,115,116,101,109,224,-21,7,225,235,10,5,116,109,112,110,97,109,224,122,8,1,117,110,225,94,-11,5,117,110,108,105,110,107,224,166,8,4,101,101,107,80,116,102,101,224,-22,4,2,111,107,101,224,22,14,3,87,111,114,100,224,69,11,224,23,11,-66,204,4,108,122,55,55,95,87,81,4,114,101,115,115,111,224,82,8,224,-34,0,1,100,101,224,36,21,2,114,108,101,224,70,22,64,33,224,69,23,-2,98,119,116,224,69,22,64,33,224,69,19,64,235,4,95,117,105,110,116,-227,162,8,65,29,224,25,14,192,51,1,49,54,224,52,16,224,26,10,192,-53,0,51,227,208,8,224,53,0,224,26,10,192,53,1,54,52,224,53,16,-224,26,10,64,53,224,212,16,224,211,16,224,210,17,224,209,17,224,208,17,-224,207,17,224,206,17,224,205,17,3,117,115,104,111,227,92,9,129,3,224,-26,13,64,53,224,52,17,224,51,17,65,82,225,107,16,224,207,15,224,205,-15,224,97,13,1,108,111,228,143,9,128,98,224,25,12,64,51,224,50,16,-224,49,16,1,117,108,224,102,18,224,103,17,224,104,17,224,51,16,1,102,-108,224,255,13,224,23,10,5,115,105,122,101,111,102,225,25,11,160,25,224,-100,11,192,26,224,27,11,70,163,1,100,105,227,215,8,103,13,224,23,10,-3,114,101,97,100,224,46,11,2,95,100,95,229,124,11,1,99,104,224,44,-10,1,109,107,224,20,10,4,103,101,116,99,119,229,50,8,6,103,101,116,-95,98,117,102,224,180,11,3,98,95,114,100,224,27,17,1,119,114,192,27,-234,249,0,224,0,74,73,18,146,5,79,73,111,81,1,50,55,75,214,175,-88,2,55,32,95,82,8,234,217,2,238,156,1,2,95,57,57,192,30,0,-54,73,246,1,57,56,224,30,4,96,91,146,67,2,95,52,56,235,23,0,-2,57,55,57,141,182,224,5,5,160,24,2,95,49,48,74,55,2,95,49,-50,74,134,160,6,224,45,25,224,52,3,224,45,18,224,84,3,160,52,224,-45,25,224,98,4,0,53,77,48,160,232,0,54,112,223,96,11,64,234,142,-150,5,115,99,109,112,32,58,128,66,121,148,0,90,113,60,0,90,175,16,-140,174,117,183,0,57,118,81,141,181,0,55,111,245,96,5,64,75,65,64,-107,2,0,89,111,207,0,32,88,46,0,52,109,108,237,192,3,192,11,175,-100,141,154,64,10,84,136,65,128,172,35,184,61,123,82,154,130,64,98,139,-116,224,155,9,79,217,77,9,236,0,19,0,123,114,219,178,220,0,83,243,-26,1,224,48,16,64,46,9,44,32,109,104,115,95,97,100,100,114,189,32,-211,21,224,38,1,1,125,44,128,25,128,174,224,129,25,224,128,43,224,123,-25,193,154,225,2,26,224,128,77,226,16,4,65,171,0,54,162,75,162,166,-225,161,0,0,90,117,77,225,189,1,246,89,0,206,4,148,247,96,8,150,-113,3,49,57,54,49,98,219,224,166,14,225,158,2,112,214,111,213,3,54,-54,32,64,154,160,98,114,128,184,114,58,96,29,64,69,0,57,124,95,224,-17,5,80,5,64,46,238,106,15,1,57,48,112,39,224,124,1,206,83,16,-38,32,109,117,115,116,32,98,101,32,80,116,114,47,70,117,110,170,186,77,-229,224,181,12,2,40,72,115,128,37,0,41,193,66,224,40,4,131,13,96,-5,224,249,7,240,92,7,125,175,207,1,175,42,193,51,162,21,97,1,97,-19,160,43,129,26,209,26,1,55,49,242,149,1,243,126,1,129,128,129,169,-129,69,83,38,160,90,97,56,242,74,0,113,8,1,57,55,65,27,160,103,-181,119,126,79,226,99,19,0,59,98,95,64,15,8,95,85,110,105,116,40,-115,44,32,162,108,249,125,11,2,79,32,35,64,7,224,250,0,128,191,249,-203,16,0,52,254,13,0,255,164,3,1,50,53,70,39,224,139,10,224,122,-0,4,32,95,54,57,53,97,24,134,86,65,249,2,55,48,48,225,54,0,-224,134,6,0,95,66,236,225,133,2,229,28,5,67,12,143,223,228,30,21,-65,7,1,116,111,194,200,193,199,129,1,0,57,119,209,224,61,19,225,56,-36,64,146,144,99,67,159,133,63,117,25,135,12,102,68,0,85,129,191,3,-50,32,95,51,116,71,65,13,101,235,96,61,144,146,255,230,6,11,80,114,-105,109,105,116,105,118,101,115,46,40,98,213,64,41,135,169,99,101,0,56,-64,130,230,23,1,128,123,102,0,64,24,166,18,162,142,128,60,167,138,81,-227,0,49,64,34,0,54,92,191,64,24,134,184,227,187,5,71,193,183,221,-0,58,129,139,224,162,20,1,73,79,160,162,64,56,97,157,0,85,130,230,-225,15,2,128,144,148,27,192,31,243,198,0,225,57,10,180,69,64,29,0,-85,166,222,100,216,199,165,225,78,3,128,43,244,145,1,128,139,134,226,146,-44,226,43,21,99,51,196,59,96,105,67,175,226,49,5,230,145,22,226,52,-1,226,111,6,253,231,2,224,63,19,227,48,2,96,56,227,158,7,64,208,-0,54,96,208,69,149,155,71,101,230,164,57,2,67,32,60,161,100,134,19,-247,164,3,160,124,97,115,0,90,64,4,0,85,166,56,224,36,3,165,224,-85,202,192,89,226,182,9,101,230,201,46,224,30,10,229,209,6,229,187,3,-226,56,2,192,18,128,0,224,115,2,102,216,0,95,84,2,202,108,130,171,-1,49,57,129,217,186,102,253,43,19,166,85,225,106,19,17,78,111,116,32,-97,32,118,97,108,105,100,32,67,32,116,121,112,101,253,38,0,2,49,50,-53,97,235,65,109,132,104,96,70,0,79,137,130,224,74,9,227,3,2,4,-70,108,111,97,116,116,71,245,253,13,224,31,2,0,64,224,79,27,0,73,-141,33,224,76,13,192,28,224,73,28,209,202,224,74,13,224,29,0,224,75,-17,3,68,97,116,97,96,69,96,4,112,58,224,75,17,128,30,224,76,17,-132,206,224,63,13,70,182,224,62,22,0,83,115,77,8,46,73,79,46,72,-97,110,100,108,151,79,225,1,13,194,102,227,67,0,108,224,156,245,226,29,-17,0,70,136,133,8,46,67,46,84,121,112,101,115,46,128,67,66,121,237,-164,3,3,67,67,104,97,238,2,8,1,67,83,224,21,12,0,85,224,43,-13,240,127,11,1,67,85,224,22,13,161,239,224,42,5,224,20,11,0,76,-239,33,10,1,67,85,224,21,12,5,80,116,114,100,105,102,238,126,8,3,-67,83,105,122,239,6,8,1,67,83,224,21,12,0,76,224,110,14,224,22,-12,1,84,105,143,94,238,207,10,67,110,135,68,230,99,17,228,75,1,64,-45,231,52,23,224,42,2,135,53,229,189,21,3,118,111,105,100,235,157,2,-233,12,20,224,53,1,8,40,105,110,116,32,115,41,32,123,229,187,6,224,-33,1,0,59,158,125,160,226,135,130,100,228,169,230,0,51,110,105,1,57,-52,69,86,64,105,96,9,103,198,2,49,32,35,69,91,101,86,0,53,105,-11,64,65,135,171,64,18,64,141,2,57,53,56,103,159,64,31,3,10,65,-32,94,245,159,10,78,139,64,37,193,1,0,50,69,90,0,52,230,207,1,-79,240,0,51,128,131,101,55,64,248,69,94,160,23,198,204,64,18,80,12,-192,19,69,159,0,49,160,14,64,13,75,13,1,50,55,111,28,104,144,1,-95,49,96,210,64,100,224,58,4,64,31,137,126,255,15,0,80,27,2,49,-57,53,69,230,1,50,49,231,243,1,224,31,7,0,50,64,164,1,56,56,-74,60,64,9,2,55,55,32,170,64,224,163,3,224,166,5,97,58,64,9,-235,202,0,192,213,0,95,112,211,96,116,235,233,3,224,30,7,224,194,2,-64,228,225,19,0,130,75,0,57,102,42,122,120,224,65,0,224,232,1,0,-56,167,41,224,22,6,2,49,57,53,138,224,193,61,224,0,3,65,171,136,-180,0,94,153,204,97,189,0,54,96,17,123,235,1,53,52,129,239,134,154,-83,122,1,67,65,152,220,2,76,101,110,96,44,131,69,1,94,103,146,118,-96,18,163,42,5,56,52,32,75,32,95,124,63,192,7,0,95,65,79,160,-231,1,95,57,112,206,160,11,107,177,160,11,130,105,109,223,3,39,32,95,-52,98,159,4,57,56,32,64,95,66,188,64,12,93,244,1,51,49,157,37,-128,239,92,68,128,30,1,95,51,64,23,64,134,178,102,224,134,18,106,33,-160,134,128,11,128,134,128,11,128,134,144,233,192,134,1,49,57,67,144,224,-136,5,99,43,201,130,1,57,53,66,45,160,137,64,5,64,137,131,134,0,-94,84,161,1,80,116,131,33,131,87,0,94,65,81,160,18,64,88,73,108,-143,57,106,14,72,114,64,114,125,166,227,21,9,143,119,1,95,57,97,8,-64,65,195,118,64,51,0,54,126,32,75,132,236,201,0,64,71,68,14,128,-170,3,52,32,64,95,77,99,142,11,64,14,253,170,0,66,250,98,78,64,-224,128,58,130,19,0,94,155,182,96,174,130,18,0,94,90,167,96,15,162,-8,244,76,3,96,23,130,13,163,93,0,55,237,11,3,0,79,228,228,13,-30,115,116,97,116,105,99,32,117,110,115,105,103,110,101,100,32,99,104,97,-114,32,100,97,116,97,91,93,32,61,32,123,100,222,101,210,114,138,206,23,-84,73,1,49,57,96,208,64,7,2,49,32,35,105,207,1,64,66,253,123,-4,1,125,59,96,62,224,20,5,224,105,5,10,42,99,111,109,98,101,120,-112,114,32,61,96,117,128,49,159,36,229,155,19,69,154,192,58,5,108,101,-110,32,61,32,165,163,224,165,2,235,155,2,142,119,2,79,32,35,69,75,-240,48,2,161,111,198,67,179,144,0,83,99,142,141,122,96,16,94,151,224,-7,1,229,51,1,243,143,3,243,142,5,1,95,55,129,16,128,95,173,156,-2,55,54,52,241,97,1,224,160,6,133,81,76,22,0,52,160,161,64,56,-130,184,3,85,32,75,52,160,2,0,90,160,1,231,101,1,0,58,134,102,-192,38,192,32,224,1,7,231,150,7,64,54,130,193,3,95,53,54,53,66,-59,0,51,130,176,3,85,32,75,50,224,69,16,224,73,11,128,75,0,54,-192,60,0,51,224,169,6,224,48,4,64,41,239,225,1,97,112,129,89,225,-118,8,140,134,76,194,161,108,81,103,224,19,4,177,110,192,63,128,11,65,-91,118,159,135,226,111,39,0,64,145,140,113,96,128,130,200,140,0,57,110,-149,71,172,74,142,86,3,0,75,64,40,144,155,64,65,64,144,214,86,2,-50,32,95,166,50,2,95,49,53,100,186,0,51,68,24,64,79,131,117,230,-68,3,72,43,85,142,2,95,49,57,96,63,198,239,230,23,0,79,144,205,-96,96,86,175,23,0,57,79,183,96,7,207,218,0,51,130,157,0,75,97,-163,130,73,0,90,77,83,64,14,164,216,158,131,64,32,64,108,132,215,230,-210,4,64,134,101,83,232,19,2,2,50,49,54,233,191,3,0,67,168,201,-129,77,224,37,14,6,77,72,83,67,79,78,70,160,42,129,142,96,2,64,-16,129,164,128,122,180,155,146,240,224,8,3,64,137,69,200,1,49,57,69,-111,197,203,0,39,175,146,229,110,0,238,3,2,5,50,50,52,32,95,50,-198,25,4,49,51,52,32,95,73,106,2,64,95,50,74,38,206,216,136,250,-168,15,3,95,53,49,53,64,59,234,160,4,11,111,117,108,100,32,110,111,-116,32,102,105,110,141,18,132,102,160,138,224,43,3,4,105,110,32,102,105,-140,124,226,237,3,161,26,231,220,2,192,188,96,214,0,55,224,65,2,4,-100,101,102,97,117,155,30,3,64,95,52,52,99,231,228,197,9,1,99,99,-225,73,0,0,32,96,37,224,103,3,145,24,225,32,4,64,105,233,171,7,-96,146,225,42,34,225,43,8,237,42,18,9,117,110,100,32,116,97,114,103,-101,116,239,66,1,100,179,74,29,4,49,57,50,49,32,67,55,96,12,70,-179,67,37,224,11,0,224,0,2,192,207,225,59,5,225,61,2,150,208,235,-54,0,181,10,160,168,225,61,27,139,207,0,51,72,104,0,50,128,137,240,-101,1,224,59,22,233,223,3,104,2,161,135,224,83,42,1,111,110,109,110,-224,0,0,225,90,17,4,117,110,105,120,45,130,28,230,4,1,0,95,82,-210,96,0,67,200,235,213,1,67,92,0,80,99,239,65,24,230,15,5,1,-75,52,198,113,64,30,0,54,230,199,5,65,156,211,145,211,142,227,179,1,-186,103,101,29,147,122,164,142,96,225,129,23,196,182,145,159,3,95,49,57,-48,155,252,96,109,133,200,231,13,1,235,95,0,2,49,57,48,72,120,228,-26,1,128,126,1,95,50,64,50,64,13,224,45,4,0,53,96,44,184,233,-96,44,132,72,66,8,130,162,161,157,226,245,0,226,193,4,225,100,17,2,-67,97,110,67,238,4,112,97,114,115,101,162,190,224,255,0,227,66,53,224,-122,0,162,205,230,181,1,187,179,227,160,93,2,82,101,97,195,159,0,115,-100,176,9,46,32,80,111,115,115,105,98,108,101,192,22,195,183,232,109,0,-99,160,227,165,3,0,89,98,40,68,230,245,177,3,168,233,231,66,1,160,-0,227,192,5,225,0,9,68,199,83,162,224,164,1,160,136,0,46,227,29,-0,66,58,135,128,129,240,161,144,98,103,0,53,142,248,0,49,217,163,2,-95,49,54,64,43,116,139,0,52,79,234,116,236,212,241,132,30,88,50,98,-44,97,61,71,85,0,83,164,78,82,8,0,52,120,152,200,132,224,51,4,-225,90,19,9,65,109,98,105,103,117,111,117,115,58,225,63,0,0,55,75,-77,170,250,229,4,3,136,19,64,0,64,217,173,142,2,49,49,52,133,192,-230,33,1,0,50,85,224,65,81,225,245,0,0,35,189,176,98,33,64,254,-1,50,56,230,66,2,0,84,97,56,162,183,224,34,3,90,213,0,50,246,-59,0,162,96,108,188,0,49,96,33,225,220,0,0,35,85,93,96,187,224,-57,11,224,46,3,229,202,24,160,74,96,0,2,95,49,49,97,165,176,191,-0,50,108,11,96,12,65,0,136,173,0,83,139,31,4,49,52,32,64,90,-216,47,163,8,64,116,127,110,246,202,1,192,193,131,21,78,107,139,84,199,-220,224,193,4,235,32,0,224,46,4,69,5,240,50,1,98,238,171,100,64,-219,64,105,0,80,192,85,235,164,0,130,1,169,165,64,223,64,191,137,97,-64,41,132,116,109,67,221,97,0,79,98,174,235,192,0,1,52,57,77,188,-1,49,53,97,205,225,185,1,3,58,92,49,48,190,60,129,157,236,204,22,-2,32,32,102,71,106,227,171,2,0,50,66,181,162,107,0,54,169,40,168,-174,224,72,21,6,101,120,112,101,99,116,101,224,75,3,105,11,4,95,49,-51,51,57,229,218,1,236,252,2,64,17,98,177,90,49,69,233,119,145,224,-12,4,1,57,48,65,125,1,57,48,153,46,65,87,64,6,165,234,224,7,-0,146,172,67,186,64,78,128,62,97,91,1,54,53,114,57,64,62,186,201,-248,186,1,138,236,0,51,98,67,0,56,68,77,160,39,224,211,1,1,101,-111,167,84,65,146,2,95,50,50,67,121,96,151,184,45,96,116,172,201,99,-150,160,180,71,183,0,54,75,233,166,181,224,211,7,0,49,97,186,128,190,-96,8,0,54,128,191,135,98,2,95,49,54,146,239,129,60,96,38,64,29,-0,54,224,104,18,118,119,0,57,99,40,2,95,51,55,225,63,4,2,57,-32,35,133,231,1,49,57,67,18,96,74,216,128,2,54,53,50,192,246,224,-245,1,3,118,97,108,117,106,127,225,48,7,96,68,103,212,97,15,251,19,-0,64,81,172,214,101,73,1,50,52,64,85,1,54,54,225,122,1,123,64,-99,184,224,106,5,4,92,57,50,38,110,224,106,10,71,233,252,225,0,64,-106,163,180,128,107,196,231,225,84,3,224,244,9,0,57,192,244,160,7,96,-19,64,188,64,66,178,50,3,49,57,49,48,76,186,64,35,225,16,17,2,-107,101,121,224,163,10,130,62,193,14,96,241,225,15,2,130,217,100,136,224,-249,2,198,4,163,88,70,116,0,57,134,93,0,75,128,81,231,134,0,252,-229,9,134,106,142,32,96,31,0,90,65,106,64,119,136,218,128,120,0,48,-131,3,0,80,64,213,66,122,128,213,3,52,56,32,80,101,100,0,53,93,-133,0,52,96,180,167,55,84,101,0,95,162,128,64,162,105,196,196,115,226,-108,2,226,214,5,167,153,230,97,1,97,244,64,72,159,93,1,67,32,225,-145,3,160,154,130,192,238,170,6,1,50,56,83,103,1,50,57,64,248,64,-161,231,213,0,96,233,233,46,4,1,95,51,129,222,224,34,0,162,21,64,-91,202,16,168,3,65,111,131,54,0,48,162,153,71,122,0,56,68,62,82,-156,2,49,57,32,130,206,5,54,32,95,54,50,56,96,29,106,33,1,95,-52,162,175,96,43,128,90,239,97,1,147,166,65,219,224,196,3,64,107,0,-48,97,45,192,169,224,197,7,239,113,4,0,50,66,124,214,145,224,223,5,-1,49,57,65,87,224,224,9,224,79,8,128,152,130,196,149,208,1,100,105,-116,91,64,63,211,156,192,18,130,138,70,11,80,242,244,118,2,0,80,104,-19,68,214,233,68,1,107,46,71,23,170,78,65,246,85,146,171,209,96,165,-201,150,2,58,49,56,85,142,204,21,70,217,64,18,130,117,73,53,0,56,-68,1,98,157,64,23,236,64,0,241,222,16,128,1,241,228,9,96,62,162,-61,3,32,67,32,80,97,140,138,213,103,14,1,95,52,103,66,152,219,72,-101,232,154,5,0,56,125,196,160,51,160,14,180,151,0,35,67,179,192,112,-67,196,117,66,105,201,159,8,105,207,255,8,4,99,108,138,62,224,25,6,-97,172,126,220,255,56,4,66,217,0,85,200,71,96,161,171,157,224,195,5,-1,49,56,164,177,224,196,1,64,0,106,162,255,77,3,96,101,68,139,224,-62,28,0,85,73,14,96,44,235,241,2,84,145,98,255,64,61,161,14,0,-56,142,1,224,17,0,66,206,1,56,53,64,4,67,48,0,56,240,96,3,-192,9,234,31,0,96,36,160,58,100,5,1,56,57,211,73,137,105,225,69,-9,193,2,224,219,5,96,21,101,241,129,135,224,34,10,98,123,224,34,4,-225,74,9,0,55,78,193,225,10,5,66,65,166,245,85,10,64,162,100,31,-96,169,138,52,66,178,0,53,68,227,0,53,66,213,4,64,95,51,48,50,-91,41,161,22,160,32,69,203,139,64,1,50,48,87,134,0,64,224,23,8,-2,54,53,53,120,153,64,22,224,24,4,4,49,49,49,52,49,163,252,0,-48,225,79,3,3,117,116,102,56,93,200,5,58,32,98,97,100,32,221,210,-226,74,3,0,83,201,126,64,147,132,52,65,154,130,89,106,173,0,50,119,-16,227,192,0,224,46,18,106,173,74,207,160,46,224,44,33,224,41,32,131,-80,98,116,100,2,98,153,160,168,135,36,224,27,20,224,26,4,160,20,97,-13,225,8,28,77,180,224,216,84,224,187,47,224,184,22,0,49,67,58,224,-139,40,224,111,12,221,35,0,67,64,74,64,39,66,231,217,158,1,80,32,-100,66,117,197,99,174,186,73,99,44,64,63,96,223,131,71,1,54,52,98,-247,117,17,64,17,198,195,133,212,128,46,224,28,15,96,206,224,28,3,105,-6,131,91,131,149,206,144,192,20,0,49,236,109,0,192,183,99,210,64,152,-96,76,224,152,0,109,98,248,191,10,88,85,197,204,64,14,248,206,1,101,-28,128,232,231,164,0,240,232,0,236,212,17,31,87,101,108,99,111,109,101,-32,116,111,32,105,110,116,101,114,97,99,116,105,118,101,32,77,105,99,114,-111,72,115,44,32,7,118,101,114,115,105,111,110,32,99,175,1,95,50,80,-65,0,50,95,73,225,243,0,232,36,1,0,52,87,105,176,111,192,20,242,-229,1,1,51,54,87,213,0,56,136,116,96,38,70,213,0,53,100,168,100,-231,64,7,96,50,75,13,168,13,172,133,65,90,81,219,1,49,56,105,74,-0,49,80,171,232,59,0,64,250,173,101,5,52,50,53,32,75,32,70,137,-128,1,81,103,128,130,224,1,19,119,94,224,0,4,224,47,38,224,44,35,-224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,26,17,224,23,-14,224,20,11,224,17,8,65,200,165,157,224,0,2,0,58,129,222,250,190,-0,224,1,19,225,179,9,225,230,255,224,32,15,224,29,20,224,26,17,224,-23,14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,77,153,224,0,-5,66,3,173,211,68,197,0,51,68,17,2,95,49,56,92,214,68,83,128,-15,0,51,81,191,102,55,192,34,69,47,100,100,101,102,110,147,0,56,109,-173,0,52,73,243,2,95,52,53,100,41,224,82,2,224,44,0,101,31,244,-22,2,10,121,112,101,32,39,58,113,117,105,116,39,69,19,64,8,13,44,-32,39,58,104,101,108,112,39,32,102,111,114,32,64,9,136,188,224,78,6,-118,125,0,51,78,28,64,124,101,17,224,101,15,31,87,65,82,78,73,78,-71,58,32,67,111,109,112,105,108,101,100,32,119,105,116,104,32,71,72,67,-44,32,115,111,32,108,20,105,109,105,116,101,100,32,102,117,110,99,116,105,-111,110,97,108,105,116,121,46,170,139,67,59,166,68,65,44,177,80,225,27,-0,0,52,84,61,75,134,1,56,52,109,236,128,249,156,114,224,33,2,1,-49,56,148,123,229,174,1,129,71,97,154,225,74,2,165,168,160,38,1,49,-56,125,76,96,35,64,99,246,173,1,64,26,64,80,224,227,1,4,46,109,-104,115,105,96,179,224,19,1,1,62,32,128,196,77,104,96,197,158,148,128,-208,203,7,66,26,231,102,2,1,35,53,190,113,225,238,3,70,43,146,30,-129,11,224,195,4,64,21,0,53,126,116,225,127,15,1,66,121,113,253,225,-76,4,161,79,0,54,237,131,0,0,95,111,232,96,228,162,134,134,111,155,-75,64,184,226,78,25,17,85,110,114,101,99,111,103,110,105,122,101,100,32,-99,111,109,109,97,189,28,224,87,10,195,22,122,54,64,10,70,189,141,228,-155,193,64,119,64,25,3,85,32,64,95,116,118,0,64,87,122,0,90,97,-153,227,9,14,248,236,32,247,145,0,192,165,244,226,8,117,46,0,52,111,-31,224,191,15,64,0,64,140,2,53,51,57,131,159,78,140,0,53,117,102,-105,48,160,62,65,116,105,197,65,111,140,177,0,79,111,123,224,151,10,67,-127,168,122,2,54,32,95,116,104,224,119,1,176,41,224,60,16,2,99,108,-101,172,104,224,61,0,228,84,3,1,54,48,64,19,200,126,227,206,7,0,-52,66,217,64,196,104,121,1,52,53,110,66,104,120,232,141,1,0,51,149,-129,232,189,3,1,95,51,156,19,225,31,12,224,169,16,4,114,101,108,111,-97,130,25,224,170,0,227,176,5,100,200,227,199,9,163,223,227,198,24,2,-95,52,53,74,72,226,42,12,96,233,224,213,0,224,233,3,225,20,4,165,-133,225,247,14,224,218,16,4,100,101,108,101,116,131,110,224,125,8,97,131,-64,8,79,128,120,10,162,53,66,117,66,68,128,26,156,217,226,73,3,65,-95,0,54,146,199,224,145,11,224,140,16,2,116,121,112,224,138,11,65,188,-112,97,224,73,33,1,107,105,163,201,224,73,8,0,56,112,31,224,73,33,-230,80,0,79,240,228,81,14,64,86,226,86,16,204,15,99,79,143,235,224,-93,1,0,67,131,206,0,115,121,53,102,215,0,32,96,0,96,9,171,229,-96,26,130,130,64,26,160,9,5,109,111,100,117,108,101,128,28,99,73,96,-55,128,9,9,97,108,108,32,100,101,102,105,110,105,70,159,128,35,129,232,-3,32,100,32,32,192,9,224,32,0,4,40,115,41,32,100,96,36,65,128,-1,32,101,64,72,4,115,104,111,119,32,96,14,3,111,102,32,101,96,28,-65,83,0,32,96,159,224,28,4,0,116,96,28,65,38,128,186,7,116,104,-105,115,32,116,101,120,96,23,2,101,120,112,128,152,2,32,32,101,87,214,-2,97,116,101,89,166,2,114,101,115,76,182,64,33,3,100,101,102,110,160,-33,11,97,100,100,32,116,111,112,32,108,101,118,101,224,192,3,186,81,65,-63,206,67,227,103,8,97,126,227,103,13,1,49,56,109,236,166,184,163,167,-229,106,6,1,79,32,115,38,129,171,66,111,132,187,0,80,227,167,5,64,-74,69,26,0,75,227,231,13,229,219,22,67,185,111,46,0,56,71,27,0,-52,146,4,0,55,235,104,3,64,225,207,15,192,63,125,194,134,213,0,89,-67,113,79,63,0,79,146,123,128,173,230,150,6,198,154,224,13,1,0,85,-224,13,2,96,25,241,210,0,149,103,149,139,77,239,103,214,0,51,130,202,-255,1,11,97,76,0,56,101,85,0,56,126,69,96,177,252,52,0,0,50,-245,61,2,64,24,213,247,230,215,17,98,67,230,201,0,128,38,129,18,224,-53,19,1,32,61,160,51,193,208,225,189,4,64,122,65,190,227,103,4,74,-56,0,95,102,171,64,29,138,194,226,69,89,134,107,226,69,78,85,67,194,-69,166,14,128,0,64,225,217,71,226,69,51,226,55,64,97,61,125,212,226,-54,2,64,190,201,202,0,52,93,2,1,52,54,104,125,103,237,0,73,129,-167,136,125,3,85,32,75,51,194,87,64,21,133,67,3,80,32,95,53,106,-100,96,5,64,23,219,149,226,54,15,133,49,130,58,128,37,0,52,70,212,-224,48,17,0,40,224,49,14,224,33,1,5,41,32,119,104,101,114,101,30,-12,105,109,112,111,114,116,32,80,114,101,108,117,100,224,17,3,18,83,121,-115,116,101,109,46,73,79,46,80,114,105,110,116,79,114,82,117,196,248,25,-97,117,108,116,32,78,117,109,32,40,73,110,116,101,103,101,114,44,32,68,-111,117,98,108,101,41,224,32,3,9,73,115,83,116,114,105,110,103,32,40,-128,7,224,28,4,0,83,69,138,2,40,40,41,96,20,131,21,97,12,243,-86,0,226,226,12,193,198,98,29,1,64,83,108,58,0,55,83,232,129,164,-107,211,178,60,231,56,0,66,254,66,54,226,203,12,1,64,90,131,35,72,-48,73,30,225,249,0,0,90,236,157,0,115,91,153,252,160,110,0,57,164,-74,0,54,168,251,227,117,63,136,130,224,169,14,66,131,147,32,72,187,135,-195,1,49,56,153,17,224,103,3,228,91,17,211,200,224,174,4,227,181,7,-1,52,55,123,239,64,105,0,83,77,134,201,155,173,144,224,47,5,72,122,-96,157,160,82,179,176,224,66,1,224,32,0,243,124,9,163,95,64,244,129,-129,0,57,109,91,132,24,226,228,16,2,79,32,35,78,97,96,213,64,52,-182,38,128,224,133,183,121,225,174,92,64,91,1,83,32,64,113,65,149,91,-197,132,22,2,95,49,51,120,106,161,189,224,24,1,0,80,166,6,128,13,-164,88,64,13,0,39,132,125,206,177,164,38,128,18,64,54,196,46,0,54,-242,128,5,148,203,66,66,65,91,79,190,196,217,222,213,230,99,17,19,114,-97,110,115,108,97,116,101,58,32,110,111,116,32,102,111,117,110,100,32,131,-41,187,182,134,73,0,51,91,224,129,1,65,67,97,226,0,89,194,189,0,-83,252,143,0,81,24,128,19,187,100,142,5,0,80,123,172,175,33,129,142,-129,161,164,184,197,80,131,121,64,78,64,17,250,145,4,130,182,224,32,18,-245,155,0,224,32,15,136,180,161,93,250,179,3,192,24,127,212,67,146,191,-93,251,96,15,5,100,121,110,115,121,109,164,78,219,94,2,95,49,48,95,-220,160,0,224,99,8,96,157,0,85,225,167,54,65,163,6,32,112,114,105,-109,111,112,193,163,151,104,1,50,49,64,48,204,209,0,67,68,60,108,122,-67,29,66,46,236,235,0,224,253,10,129,88,96,253,96,248,252,107,0,226,-184,0,65,212,225,77,8,194,154,227,0,0,224,28,3,103,112,224,105,8,-96,21,81,51,164,131,224,116,3,0,57,135,131,224,31,5,225,30,40,70,-84,5,115,115,105,98,108,101,208,2,129,32,0,55,192,209,66,190,179,162,-78,169,89,117,144,28,97,228,65,198,3,54,32,95,57,67,227,217,164,96,-50,136,48,237,5,6,2,79,32,35,65,88,162,192,237,36,8,2,79,32,-35,73,104,96,30,0,79,224,30,13,0,53,160,30,64,4,237,98,16,1,-67,39,205,170,224,67,11,64,154,96,67,65,164,224,30,10,192,98,90,154,-224,98,16,0,83,128,98,99,175,224,67,9,69,99,96,67,68,127,224,197,-10,0,51,160,30,67,208,224,61,10,192,30,67,147,224,30,10,192,160,67,-254,224,30,10,193,65,69,60,224,191,16,0,66,128,191,69,62,224,67,10,-89,96,96,67,73,166,224,98,10,201,229,0,82,224,98,19,1,75,50,96,-98,0,75,66,19,224,36,17,0,51,128,36,70,160,224,36,17,0,52,128,-36,66,239,225,244,18,0,66,161,245,226,89,13,68,59,96,180,0,43,224,-30,13,193,85,0,45,224,30,13,192,242,0,42,224,131,19,2,113,117,111,-146,190,64,8,224,40,19,1,114,101,133,12,2,114,101,109,224,38,19,0,-117,224,80,0,96,9,224,42,20,192,82,64,8,224,40,19,2,110,101,103,-96,39,2,110,101,103,224,38,19,212,185,2,97,110,100,224,38,19,0,111,-147,112,1,111,114,224,36,19,0,120,160,37,0,120,224,38,21,2,105,110,-118,96,38,2,105,110,118,224,38,19,2,115,104,108,96,38,2,115,104,108,-224,38,21,128,116,1,115,104,224,116,20,0,97,192,39,64,8,224,79,20,-2,117,98,116,93,46,128,84,160,12,224,48,19,1,61,61,96,42,69,199,-224,36,17,0,47,128,36,0,47,224,36,10,68,139,195,135,0,60,224,67,-19,0,60,128,67,0,60,224,67,14,194,185,0,62,224,67,19,0,62,128,-67,0,62,224,172,20,1,117,60,130,97,224,141,20,0,117,160,142,0,117,-224,143,11,224,38,2,0,62,128,37,224,149,20,0,117,160,150,0,117,224,-151,21,1,111,114,130,171,1,111,114,226,171,20,0,99,161,233,0,99,225,-232,21,1,102,43,96,37,0,102,228,39,10,224,36,2,0,45,128,36,228,-45,10,224,36,2,0,42,128,36,228,51,20,1,102,47,128,36,0,47,224,-36,20,162,76,0,102,226,77,21,0,102,162,78,0,102,226,79,11,224,38,-2,129,199,0,102,225,199,20,0,102,161,199,0,102,225,199,21,0,102,129,-199,0,102,225,199,20,0,102,161,199,0,102,225,199,21,0,102,196,155,64,-8,224,40,20,84,48,128,41,116,58,224,42,19,1,114,101,183,105,96,9,-224,42,19,3,105,116,111,102,96,41,64,8,224,40,19,2,115,101,113,96,-39,2,115,101,113,224,38,22,1,117,97,164,171,96,10,224,44,19,224,43,-1,224,42,24,2,115,99,109,150,65,64,8,224,208,20,192,40,64,8,224,-40,19,1,114,110,128,248,1,114,110,224,247,20,3,73,79,46,62,161,201,-128,10,224,44,24,224,43,1,224,42,22,5,114,101,116,117,114,110,192,46,-128,13,224,50,22,0,112,80,253,192,49,96,12,224,48,22,7,115,101,114,-105,97,108,105,122,152,18,224,16,3,224,56,22,1,100,101,224,58,8,224,-18,2,224,117,23,2,116,100,105,224,216,0,96,12,224,48,25,1,111,117,-224,216,0,128,13,224,50,25,1,101,114,132,220,224,13,0,224,50,22,7,-103,101,116,65,114,103,82,101,129,248,224,16,3,225,118,23,7,101,114,102,-111,114,109,73,79,225,122,0,192,16,224,113,23,0,99,224,106,0,0,99,-224,42,19,3,114,97,105,115,129,103,96,9,224,42,19,4,99,97,116,99,-104,96,42,96,9,224,42,19,238,129,2,128,10,224,44,19,4,110,101,119,-67,65,147,28,1,76,101,129,188,224,18,5,224,60,19,3,112,101,101,107,-192,42,96,58,224,16,3,224,56,31,192,118,224,19,6,224,62,19,2,116,-111,73,163,15,96,9,224,42,21,1,80,116,130,46,96,9,224,42,21,1,-68,98,132,151,96,9,224,42,21,2,70,117,110,224,88,1,128,12,224,48,-19,5,65,46,97,108,108,111,130,22,160,11,224,46,21,0,115,195,129,128,-10,224,44,21,229,248,0,128,10,224,44,21,2,119,114,105,188,181,160,11,-224,46,21,167,142,64,8,224,40,19,2,98,115,43,136,76,64,8,224,40,-23,0,46,224,41,0,0,46,224,42,23,224,84,1,224,85,22,160,167,64,-8,224,40,21,168,56,64,8,224,40,21,136,58,1,98,115,232,59,20,1,-98,115,168,60,64,8,224,40,21,134,34,1,98,115,230,32,20,1,98,115,-166,118,64,8,224,40,21,198,242,96,9,224,42,21,3,112,97,99,107,160,-43,64,10,224,44,21,1,117,110,224,46,2,128,12,224,48,21,4,108,101,-110,103,116,132,156,192,12,224,48,21,3,115,117,98,115,163,60,192,12,224,-48,19,192,9,96,48,224,22,0,224,48,18,1,116,111,224,46,0,128,10,-224,44,19,3,104,101,97,100,224,46,0,192,12,224,142,20,0,112,171,54,-0,112,235,55,21,1,112,50,129,159,64,8,224,40,21,1,110,101,169,226,-64,9,224,42,21,0,102,167,97,96,9,123,9,147,12,224,0,100,82,245,-0,54,154,131,86,137,87,235,187,178,179,132,119,21,243,144,17,1,32,61,-84,168,0,110,153,208,147,139,224,56,0,0,50,109,202,248,55,5,82,168,-252,147,4,2,95,105,116,103,149,64,27,154,211,243,255,0,155,208,244,14,-19,253,3,21,64,82,155,14,224,110,4,160,108,154,27,4,95,49,54,51,-48,64,5,0,52,91,69,6,49,54,57,53,32,95,49,116,33,65,7,1,-49,50,128,43,216,236,116,165,0,52,120,152,88,10,2,95,52,50,124,120,-0,53,121,62,156,126,148,230,186,97,64,59,152,71,9,95,52,50,53,32,-75,32,85,32,75,184,11,64,65,88,87,90,141,248,119,3,64,75,224,151,-9,0,56,86,115,224,144,1,90,154,129,178,213,124,248,99,0,181,144,128,-144,0,56,161,10,0,75,128,53,221,15,152,137,152,108,224,59,1,124,221,-128,10,64,220,85,160,0,52,64,153,117,251,0,80,120,3,0,79,157,117,-161,105,90,148,192,94,83,117,2,90,32,83,184,37,1,85,32,96,14,0,-67,64,48,161,251,65,38,118,194,213,243,64,0,192,109,97,87,2,53,51,-57,89,211,0,50,160,36,0,35,153,83,224,38,8,1,49,56,193,47,160,-242,87,106,1,48,48,152,113,2,50,55,56,192,99,193,173,0,56,86,18,-3,95,54,57,56,151,148,130,225,0,54,87,50,96,202,192,110,0,64,122,-10,192,0,248,219,0,128,236,192,107,182,165,93,167,0,49,185,51,193,69,-227,59,0,94,154,96,64,224,17,6,64,117,0,56,225,233,0,97,143,0,-54,186,98,2,75,32,90,64,215,97,109,96,24,131,36,0,89,250,66,0,-153,113,0,67,119,121,254,90,6,64,46,195,55,254,212,0,161,185,250,81,-0,225,203,0,148,105,97,52,156,132,247,251,5,64,181,0,55,92,148,0,-49,123,171,128,64,64,78,159,195,226,111,3,224,54,1,97,68,64,221,157,-34,187,69,224,130,1,96,113,250,230,1,162,116,255,28,2,64,194,131,167,-120,94,153,148,220,0,3,67,32,95,50,86,29,1,95,50,85,223,225,245,-4,192,34,64,160,188,14,160,117,252,65,4,2,53,48,52,184,184,188,129,-95,116,252,134,2,2,95,49,54,120,119,96,0,193,49,89,238,0,55,252,-131,0,161,183,225,59,0,224,92,0,163,107,0,67,162,45,97,237,0,49,-99,42,0,80,68,5,66,123,193,8,65,199,99,11,153,13,161,71,224,105,-5,160,97,122,58,1,95,52,125,161,1,95,55,153,37,253,55,4,129,51,-222,221,162,155,192,69,2,95,51,52,64,158,64,30,224,210,0,96,32,160,-180,66,105,188,87,64,174,64,100,64,77,196,227,156,217,187,230,224,2,0,-128,47,255,49,0,224,8,0,160,24,224,25,11,155,158,96,0,224,71,0,-224,29,3,224,61,2,224,33,2,224,42,3,224,69,6,224,37,11,224,2,-4,224,40,1,224,113,17,224,23,0,224,44,2,99,95,224,2,23,224,48,-4,225,31,8,128,34,224,17,6,224,49,41,96,17,224,53,3,225,189,0,-224,1,9,224,94,5,225,27,23,224,2,3,224,56,5,224,57,4,225,9,-24,225,6,5,225,249,16,224,61,15,224,125,9,224,65,42,224,68,11,225,-40,2,224,55,12,224,2,7,224,64,9,224,134,6,159,172,224,86,2,224,-145,22,224,86,15,225,184,9,224,1,7,0,83,230,135,3,0,35,230,34,-1,224,0,2,224,195,13,224,2,17,225,103,12,224,138,40,196,65,224,0,-4,224,108,13,224,2,21,224,138,57,231,155,2,224,0,1,225,177,3,192,-108,161,182,224,96,6,224,177,19,224,89,8,224,143,13,224,1,1,224,153,-5,198,197,224,0,3,226,209,12,224,2,19,224,131,54,233,83,3,192,0,-224,116,25,192,2,227,82,15,224,131,37,166,82,224,65,32,224,114,11,224,-47,19,225,119,8,137,152,224,0,5,224,223,19,224,2,9,224,126,52,231,-138,0,224,63,15,224,115,28,224,106,13,128,1,224,112,6,136,254,224,0,-3,224,97,13,192,2,226,228,19,224,118,34,228,143,9,224,115,31,224,118,-52,227,240,9,227,75,14,195,240,224,92,8,224,41,7,224,80,5,224,130,-11,128,1,229,3,6,227,223,8,227,220,11,228,117,28,224,129,5,224,124,-13,225,7,8,224,126,7,230,156,1,96,44,225,19,7,225,13,16,227,228,-9,224,122,9,224,124,7,0,57,224,123,4,224,202,3,231,31,10,136,183,-224,14,15,224,154,1,224,110,3,192,142,224,19,3,225,126,6,227,228,1,-224,73,3,64,38,141,15,2,95,49,51,141,202,1,50,54,76,183,1,53,-57,64,180,110,154,111,91,224,19,2,228,48,4,224,129,1,64,67,235,128,-1,64,0,193,72,128,108,144,9,75,30,110,48,236,181,0,224,69,3,235,-92,12,234,85,8,224,255,7,0,67,77,200,2,51,56,49,160,235,2,64,-35,57,224,91,0,224,88,21,160,152,224,83,0,192,43,231,50,6,198,21,-192,46,64,14,224,40,12,163,107,224,37,0,224,34,10,129,58,208,178,224,-25,3,229,247,5,0,73,192,13,173,200,64,5,233,79,2,96,126,142,196,-224,220,3,97,116,64,16,1,64,80,225,59,1,226,230,8,130,64,160,236,-98,95,224,248,1,224,25,2,77,94,172,219,161,79,225,208,3,224,74,10,-226,205,11,65,10,192,139,224,18,2,226,44,5,2,95,50,50,237,148,3,-226,55,17,240,12,0,144,141,224,106,6,113,120,224,16,20,77,145,224,16,-4,143,149,1,55,50,242,217,2,31,92,51,52,38,109,104,115,47,83,121,-115,116,101,109,47,67,111,110,115,111,108,101,47,83,105,109,112,108,101,82,-101,97,7,100,108,105,110,101,46,104,115,64,39,5,44,49,54,50,58,53,-147,58,224,89,4,163,91,225,121,1,224,237,17,224,142,5,238,127,18,224,-41,9,226,210,10,225,231,0,228,95,0,64,5,225,148,8,227,49,8,192,-62,130,185,192,65,128,8,130,208,66,74,227,224,5,226,154,1,224,2,0,-239,237,11,224,120,3,224,67,4,242,89,0,112,106,4,32,95,53,55,57,-82,174,224,239,1,226,8,2,96,133,160,5,64,141,224,137,3,243,136,2,-81,118,1,32,95,111,240,144,159,160,71,64,53,177,240,100,189,243,81,3,-224,42,3,64,41,64,235,226,105,12,224,0,1,224,204,0,145,99,224,243,-10,161,103,97,69,224,171,2,64,20,224,244,2,128,146,80,165,224,173,4,-196,63,162,247,242,115,0,160,64,64,229,224,253,1,128,43,128,5,224,48,-5,224,55,1,100,77,164,82,224,6,3,225,148,10,241,164,2,192,87,130,-10,193,121,227,142,18,224,168,2,128,44,225,172,9,100,85,225,110,2,224,-181,9,224,174,5,224,127,0,166,247,160,175,162,158,224,147,1,128,107,134,-196,1,95,52,102,0,160,6,225,140,1,231,59,0,128,15,245,167,5,225,-3,12,226,185,2,227,150,1,3,49,56,52,57,149,180,224,234,1,228,212,-10,98,147,148,8,162,145,96,246,236,231,0,229,87,2,1,64,64,84,88,-148,27,225,58,1,224,241,2,161,75,227,96,5,1,85,32,237,51,1,227,-41,8,226,63,3,231,112,6,224,95,12,225,12,2,226,214,9,224,105,2,-224,32,2,227,238,15,225,51,31,97,195,243,186,9,211,214,225,55,15,224,-220,8,224,22,2,225,196,4,96,115,228,166,1,224,171,9,226,139,5,0,-66,163,148,228,136,0,165,82,164,60,161,128,70,203,244,165,0,133,29,226,-136,0,128,27,225,105,0,163,104,224,63,3,128,240,71,87,224,67,15,0,-67,135,45,224,70,9,226,2,0,228,249,5,226,185,14,227,188,8,195,99,-131,169,164,249,228,194,19,161,193,228,171,2,160,159,132,174,195,112,225,164,-5,228,197,2,215,228,120,100,193,83,250,124,12,6,92,56,38,32,92,56,-38,199,69,153,248,182,254,248,15,0,164,97,128,149,0,82,224,10,1,224,-192,10,193,247,227,21,7,234,125,12,192,20,128,204,226,174,5,174,41,224,-26,5,231,148,4,98,114,64,163,231,208,0,132,152,65,195,169,250,102,109,-248,58,3,64,23,248,71,1,99,121,96,4,161,178,164,221,96,249,68,204,-65,71,71,163,196,205,166,196,0,50,64,22,134,230,0,54,138,84,230,210,-1,230,47,3,98,61,107,222,64,137,98,227,97,78,110,23,2,95,52,52,-198,220,86,185,187,97,1,50,52,64,92,64,225,0,58,129,74,64,20,232,-106,2,0,55,232,10,6,122,56,0,54,160,169,2,52,32,95,109,233,172,-51,91,241,1,64,35,128,167,2,50,48,55,233,102,2,12,103,101,116,82,-97,119,32,102,97,105,108,101,100,129,251,225,72,3,2,95,51,48,97,98,-64,130,155,164,7,94,71,69,84,82,65,87,32,64,17,155,128,5,85,32,-75,50,32,65,151,118,90,116,64,167,122,216,64,254,3,95,51,57,55,128,-193,154,4,64,25,186,113,160,250,0,56,128,30,153,244,3,95,49,50,57,-96,90,0,51,96,14,226,86,0,224,216,8,2,95,49,56,155,80,195,0,-225,6,23,0,50,66,201,193,2,99,17,254,20,1,227,13,10,12,83,97,-118,105,110,103,32,99,97,99,104,101,32,190,7,0,49,123,240,73,173,123,-91,2,95,51,53,193,182,64,236,1,49,32,192,16,64,191,221,142,2,56,-52,48,96,207,152,142,160,172,250,12,2,0,51,97,36,1,52,54,99,42,-228,69,6,64,181,64,72,0,35,66,103,194,230,250,8,1,1,51,53,64,-138,1,56,51,130,118,230,247,9,64,27,64,86,1,95,51,64,125,160,151,-130,92,160,135,121,151,0,50,64,19,160,46,69,107,0,58,128,54,14,10,-65,32,73,79,46,115,101,114,105,97,108,105,122,101,64,196,64,30,66,1,-18,97,100,100,95,108,122,55,55,95,99,111,109,112,114,101,115,115,111,114,-96,30,226,14,0,4,51,32,75,52,32,93,49,224,1,5,233,232,1,160,-141,65,193,162,213,1,51,55,65,142,2,52,49,55,94,64,193,199,192,23,-97,237,0,50,77,77,164,206,0,51,111,2,64,21,67,97,0,75,130,176,-96,42,165,166,64,92,130,112,253,102,0,0,51,133,86,1,55,57,67,124,-186,37,64,62,224,35,1,98,18,226,19,18,13,42,42,42,32,69,120,99,-101,112,116,105,111,110,58,130,21,96,69,130,172,162,133,160,201,92,118,0,-52,67,194,0,52,174,143,129,247,224,231,3,132,48,194,17,225,1,4,128,-50,166,106,224,88,3,197,208,161,1,91,84,128,176,0,52,79,31,224,171,-1,2,46,104,115,237,15,0,134,124,225,77,1,128,114,224,69,1,224,15,-1,1,52,55,102,103,133,112,98,18,0,50,70,46,192,194,97,127,225,106,-0,64,125,76,181,0,85,162,78,197,68,227,145,2,224,178,0,65,14,1,-64,95,135,202,224,31,8,65,156,133,252,224,92,5,229,61,0,96,0,65,-104,220,34,128,172,195,36,0,52,67,231,1,49,56,106,115,1,49,54,196,-175,64,82,66,92,6,52,50,53,32,75,32,85,233,94,0,1,95,52,191,-112,64,35,131,14,237,167,0,239,192,2,64,251,0,56,104,23,0,32,66,-83,192,61,224,7,3,72,64,166,51,64,14,235,97,5,227,98,2,228,138,-13,199,204,226,122,2,167,102,226,124,12,14,99,111,109,98,105,110,97,116,-111,114,115,58,92,49,48,167,167,1,95,55,132,57,100,158,224,187,0,160,-221,65,187,224,221,14,96,155,0,51,113,82,128,30,226,29,2,97,247,1,-49,56,65,76,0,53,127,235,231,220,4,193,210,191,156,226,185,6,2,49,-56,49,128,143,64,27,190,200,227,151,2,193,61,192,81,196,178,192,121,225,-51,9,0,51,96,223,229,191,5,227,3,5,225,65,35,2,112,105,108,69,-213,14,117,115,101,100,32,98,111,111,116,32,109,111,100,117,108,165,224,2,-64,95,52,245,29,0,225,209,1,225,23,18,238,185,2,226,211,11,111,210,-226,209,2,128,185,0,85,99,34,64,254,227,222,0,65,12,226,60,38,225,-7,4,224,250,25,17,116,111,116,97,108,32,105,109,112,111,114,116,32,116,-105,109,101,32,64,0,128,245,64,121,200,149,4,49,56,50,54,32,122,156,-166,237,134,57,224,72,1,0,109,228,85,1,129,205,233,117,4,244,34,2,-64,14,130,3,64,7,137,139,1,95,52,103,55,160,181,2,55,54,52,64,-4,135,145,1,49,56,180,205,211,112,66,190,134,110,232,49,2,100,242,67,-249,64,221,136,89,96,40,134,120,167,2,201,235,97,82,106,238,97,78,2,-95,49,51,64,116,235,35,1,141,6,0,73,104,125,65,104,132,88,226,206,-7,137,220,64,64,128,213,106,78,138,3,163,56,226,191,2,97,171,228,193,-1,1,49,56,103,183,194,10,226,11,2,202,14,163,68,0,80,135,26,98,-114,98,25,161,90,110,13,247,153,0,114,62,130,44,130,67,3,95,50,51,-50,82,63,96,123,129,35,1,49,56,196,2,138,160,245,222,1,129,111,2,-49,56,50,228,252,0,64,148,135,175,71,174,73,192,96,21,135,18,0,85,-231,183,10,64,29,233,151,0,65,106,230,81,17,162,192,1,52,48,72,221,-0,53,96,254,96,14,3,51,32,95,53,131,209,0,39,64,14,102,92,88,-19,64,152,160,170,194,45,194,220,0,48,65,206,226,220,19,17,67,97,110,-110,111,116,32,102,105,110,100,32,112,97,99,107,97,103,227,208,8,163,118,-227,102,1,230,152,0,231,75,2,201,38,1,95,53,182,30,64,239,134,113,-231,87,2,3,112,107,103,34,130,51,166,95,226,158,0,107,196,1,95,53,-69,84,64,30,171,198,3,49,56,49,53,73,29,66,188,98,98,97,24,226,-102,0,0,51,166,229,249,130,0,227,57,0,128,11,1,95,52,130,129,128,-13,65,212,76,149,182,79,229,59,37,193,10,232,108,7,0,56,234,92,2,-225,27,8,0,52,98,93,225,126,19,0,91,64,10,161,112,228,75,3,0,-50,64,217,224,16,0,161,35,97,143,4,79,32,79,32,35,76,15,66,88,-130,92,4,79,32,35,57,51,244,10,1,224,124,0,162,56,224,124,16,132,-210,69,211,229,194,8,226,163,13,129,235,79,8,65,218,233,47,10,128,54,-68,182,231,24,8,1,95,53,64,210,209,24,65,112,128,83,228,1,4,227,-7,5,236,192,17,225,150,6,164,175,230,2,34,206,250,230,2,30,1,32,-40,225,162,6,236,207,8,65,132,67,2,193,132,96,84,224,12,0,230,199,-4,64,154,72,253,231,199,2,247,97,4,225,13,215,241,178,1,235,157,13,-138,154,1,95,53,245,96,0,100,7,69,11,200,58,160,84,2,49,56,49,-205,190,226,79,12,227,213,34,227,173,29,227,48,1,110,218,0,100,227,55,-8,235,132,4,209,12,71,188,1,53,55,166,204,0,56,135,70,4,95,49,-55,55,32,168,136,133,44,73,27,230,28,1,233,215,49,224,197,35,105,197,-224,195,6,227,249,40,0,45,64,69,208,252,131,253,194,73,230,125,24,234,-70,3,102,134,3,111,117,110,100,206,28,230,128,2,204,46,226,55,27,1,-49,56,113,28,226,56,4,0,55,242,76,0,65,105,136,241,136,140,65,78,-0,55,129,145,140,252,136,238,71,250,134,125,128,50,0,54,231,237,0,231,-211,1,64,23,207,38,192,1,230,155,2,1,57,57,65,45,237,134,0,128,-31,224,192,3,225,98,0,193,95,2,95,53,55,209,19,195,237,64,5,228,-31,1,250,64,4,226,35,37,237,48,4,235,251,10,225,163,17,6,112,97,-114,115,105,110,103,193,149,192,0,213,151,196,186,125,132,224,181,2,150,23,-246,29,0,224,173,69,226,83,19,64,175,1,101,100,237,230,3,100,157,0,-55,174,184,224,189,5,224,195,1,224,19,0,160,207,252,60,0,252,66,6,-224,200,3,163,43,64,200,165,174,224,203,1,229,175,1,213,2,0,55,68,-188,2,95,52,57,139,180,0,51,92,185,170,126,229,235,1,131,50,128,15,-224,225,16,195,48,7,97,109,101,32,100,111,101,115,99,58,12,97,103,114,-101,101,32,119,105,116,104,32,102,105,160,29,225,179,0,161,113,133,172,131,-86,224,96,9,0,79,152,220,130,220,232,11,2,225,48,10,221,141,224,21,-6,137,132,227,5,19,226,217,4,253,116,4,231,5,3,228,124,6,65,24,-65,116,0,54,78,62,0,55,177,222,97,80,228,2,7,0,53,79,181,99,-184,254,75,1,227,123,0,224,1,3,68,78,224,28,16,191,114,224,28,13,-64,1,224,223,20,224,53,16,234,60,8,1,55,53,224,165,4,129,79,238,-5,1,251,232,4,163,96,224,91,3,224,35,2,224,114,7,224,26,4,225,-166,11,225,175,1,224,235,19,240,187,12,229,107,2,97,131,0,57,90,12,-0,75,244,159,6,225,231,16,225,240,4,228,20,37,195,42,228,20,43,9,-116,121,112,101,32,99,104,101,99,107,228,26,4,232,193,1,2,55,54,49,-64,204,64,71,224,53,1,0,45,64,0,224,45,1,224,221,6,225,85,17,-225,121,1,226,10,12,231,95,4,160,194,234,33,2,194,241,125,75,207,228,-224,0,1,224,81,11,226,208,4,226,181,47,226,37,18,226,151,0,224,186,-53,224,153,15,64,1,224,192,4,224,40,19,224,198,23,224,200,16,225,149,-0,224,81,7,224,224,3,110,65,224,73,8,230,228,0,224,73,3,224,64,-7,224,2,4,224,70,3,224,30,10,224,69,1,224,143,12,226,64,1,224,-27,7,209,74,224,92,22,192,32,229,108,14,128,37,128,93,111,18,224,8,-12,232,104,76,227,165,19,6,100,101,115,117,103,97,114,231,189,5,131,153,-213,169,224,0,3,237,64,9,233,32,3,233,44,4,225,25,0,228,117,6,-64,0,96,211,225,30,4,224,223,19,226,210,1,225,146,1,133,18,167,203,-224,24,4,235,132,26,4,100,111,110,101,32,228,96,1,224,141,5,231,179,-5,224,91,2,224,89,17,0,44,224,76,1,128,42,237,166,7,177,169,160,-29,232,102,18,0,115,205,232,64,43,232,66,4,224,72,4,224,69,21,1,-32,43,192,143,224,65,16,224,62,28,224,197,12,238,102,6,224,0,5,128,-111,99,76,226,26,18,226,228,12,233,214,32,1,95,51,66,20,170,25,96,-17,92,150,233,218,1,4,95,52,54,52,32,224,205,1,10,73,110,116,101,-114,97,99,116,105,118,101,161,20,96,93,0,53,96,54,226,95,5,227,65,-45,3,108,111,97,100,238,151,10,225,17,0,228,121,1,97,253,195,241,227,-67,0,192,14,225,16,5,66,254,164,50,139,15,228,60,0,194,251,249,25,-2,96,58,243,21,1,164,141,83,124,82,23,243,238,3,64,161,0,52,75,-154,144,127,245,227,8,226,238,4,241,65,5,192,198,97,225,224,94,2,72,-137,117,140,128,37,71,210,182,183,3,64,95,55,55,64,107,230,146,2,128,-171,224,32,0,224,45,4,64,0,78,63,246,247,0,224,16,11,224,32,8,-0,83,64,251,0,53,64,150,0,89,246,153,0,214,150,193,13,182,87,64,-190,80,25,1,56,49,228,136,0,231,48,3,64,37,132,242,86,76,226,224,-0,194,211,193,86,228,46,0,144,106,81,33,129,242,1,95,57,142,242,123,-128,254,63,8,224,157,11,251,154,1,171,1,224,10,4,224,187,4,65,105,-192,0,224,234,11,141,23,194,103,7,67,32,67,32,61,61,32,64,121,26,-128,86,143,205,247,99,5,225,187,4,224,244,1,64,210,128,56,79,161,0,-57,173,200,75,226,161,55,79,134,151,118,3,95,49,54,51,87,198,0,54,-68,19,64,6,0,50,80,0,119,39,2,49,56,49,65,90,64,7,0,50,-118,97,64,61,191,61,1,49,54,95,196,4,95,49,54,53,57,64,12,0,-53,64,40,157,150,224,185,0,160,60,1,51,50,120,37,66,139,160,39,227,-121,1,2,101,111,102,131,117,64,198,2,95,50,50,68,163,96,136,249,148,-2,64,123,153,41,1,49,51,115,44,96,121,164,99,73,73,0,54,125,202,-195,70,2,49,54,51,100,233,135,82,161,250,0,32,206,117,1,49,54,95,-164,96,231,97,16,0,54,147,121,2,67,32,79,229,16,0,64,114,183,104,-224,231,3,0,57,68,55,1,56,48,76,124,196,88,224,174,1,129,113,127,-122,228,185,3,3,77,97,105,110,96,223,0,79,192,170,68,223,224,36,6,-0,109,192,36,160,128,64,127,183,201,68,77,225,104,1,0,49,224,52,3,-110,205,96,54,225,141,5,0,52,96,234,224,19,1,100,248,129,212,225,231,-3,0,51,127,197,193,243,3,53,53,32,35,96,44,64,11,96,115,90,110,-192,24,129,73,192,13,198,190,224,254,4,1,67,39,65,64,64,34,0,56,-193,71,132,39,224,192,16,3,119,104,101,114,229,206,1,138,160,225,107,11,-225,215,0,225,113,8,193,115,226,40,0,66,179,130,208,128,238,224,5,74,-224,126,0,2,95,49,56,64,10,0,51,154,108,67,2,0,52,98,133,225,-88,7,224,242,3,3,100,97,116,97,129,177,2,49,55,51,100,166,2,95,-49,55,161,118,224,88,2,224,99,12,1,49,52,92,155,224,93,19,5,110,-101,119,116,121,112,162,18,1,49,55,139,224,225,231,10,0,54,96,166,224,-101,16,96,202,128,11,64,65,64,73,122,100,1,49,54,96,73,0,55,64,-229,1,95,54,100,133,1,50,50,76,72,132,32,245,161,4,165,76,1,49,-48,111,175,0,54,110,40,161,166,224,242,0,224,130,18,64,48,224,232,18,-224,229,35,0,55,167,203,225,174,8,0,54,90,12,64,32,0,57,128,65,-224,140,13,0,54,71,113,229,32,7,0,55,64,31,1,55,48,67,200,227,-32,3,64,19,192,8,128,117,224,214,4,0,53,72,133,224,214,19,138,219,-160,216,1,56,48,134,211,226,24,28,83,32,224,88,3,224,11,27,224,124,-6,5,102,111,114,101,105,103,132,134,224,152,18,84,240,0,51,96,123,0,-54,229,245,1,224,47,7,4,99,99,97,108,108,224,73,12,3,99,97,112,-105,163,242,67,228,101,16,224,32,4,4,117,110,115,97,102,196,21,192,34,-1,55,55,193,195,0,55,102,247,224,199,5,97,116,225,232,3,225,37,13,-0,56,150,155,224,28,11,72,79,227,228,4,94,180,160,54,1,50,56,103,-7,225,16,6,3,110,102,105,120,128,225,65,127,224,45,1,126,117,224,45,-12,0,114,224,211,0,224,92,3,92,127,224,46,12,160,45,96,28,96,151,-65,104,228,72,2,2,105,103,105,97,144,231,112,6,107,59,0,49,112,70,-71,79,87,171,125,188,171,117,3,53,56,32,95,67,23,249,80,13,88,166,-160,32,224,33,8,174,70,160,91,65,39,224,36,4,224,0,0,227,29,0,-159,96,0,54,230,62,2,226,202,16,226,213,15,0,50,226,177,21,3,99,-108,97,115,157,63,65,252,122,224,196,15,161,199,224,60,6,3,53,32,35,-49,192,30,96,164,226,11,17,0,54,65,115,130,108,226,109,8,130,15,224,-33,3,224,232,6,230,164,3,232,134,0,1,95,49,84,182,1,95,49,202,-171,224,246,16,74,190,228,37,20,5,110,115,116,97,110,99,229,0,1,164,-105,128,94,1,56,48,135,14,224,94,17,230,68,22,5,100,101,102,97,117,-108,196,133,99,127,128,43,130,10,70,10,208,11,232,94,3,0,54,228,19,-7,110,120,109,209,1,50,50,100,35,0,52,66,17,224,103,1,1,40,41,-195,62,233,208,1,194,65,0,54,96,92,0,55,64,76,96,222,226,71,6,-227,226,18,229,97,22,230,56,3,133,95,228,74,14,193,68,224,92,0,0,-85,97,91,98,60,224,95,18,5,112,97,116,116,101,114,197,68,1,56,48,-203,128,224,174,15,230,91,8,224,91,32,163,101,143,216,225,29,3,230,132,-22,0,52,91,146,230,19,31,7,100,101,114,105,118,105,110,103,229,202,12,-226,135,4,229,127,4,228,224,2,69,116,0,80,72,40,133,69,228,117,11,-232,102,0,231,99,5,224,12,17,225,209,15,224,24,5,1,114,111,171,28,-225,235,0,230,185,13,230,205,25,5,110,111,109,105,110,97,230,207,13,6,-112,104,97,110,116,111,109,192,104,224,130,6,11,101,112,114,101,115,101,110,-116,97,116,105,111,192,65,170,168,158,181,74,214,2,80,32,35,141,146,0,-80,109,96,66,19,236,120,6,100,211,110,144,209,68,145,212,224,185,8,235,-114,12,201,10,235,100,9,0,55,139,58,64,22,227,210,29,65,207,101,103,-235,145,0,235,141,4,141,105,78,193,0,32,142,235,173,141,65,222,143,7,-0,79,128,91,0,56,118,134,112,209,80,5,106,80,1,49,49,91,230,237,-2,0,96,0,224,205,9,1,55,55,225,95,2,1,60,45,161,81,224,216,-16,179,58,224,26,0,96,216,1,55,52,100,113,224,216,3,94,73,227,6,-17,236,168,2,96,207,0,57,112,169,74,57,0,51,64,8,0,90,64,49,-75,9,220,149,224,147,0,225,33,10,241,126,5,113,217,114,47,124,226,177,-221,96,0,66,10,0,54,191,61,0,83,65,84,86,93,2,67,32,60,182,-42,224,18,6,64,56,224,18,6,117,125,232,27,3,155,226,123,233,1,85,-32,232,55,6,163,11,128,27,2,95,55,49,70,220,193,235,128,184,224,44,-2,140,13,224,44,15,224,42,4,131,217,160,42,0,75,64,40,165,19,72,-109,224,174,4,65,32,240,59,5,224,58,3,161,200,136,197,160,108,224,116,-2,112,59,224,90,0,65,58,0,53,227,95,0,131,97,133,208,225,119,3,-64,37,144,255,160,35,96,75,163,132,176,229,236,51,7,205,171,108,51,64,-39,208,152,96,64,110,172,160,64,144,62,148,221,226,0,0,224,14,6,96,-208,226,116,1,224,107,0,113,231,76,47,232,202,2,229,84,2,0,55,141,-156,2,55,57,53,226,163,2,5,83,79,85,82,67,69,164,135,232,127,4,-0,53,163,87,103,182,96,76,224,135,7,232,253,5,98,254,64,121,224,158,-15,180,144,160,37,115,61,96,85,224,118,5,97,184,96,141,136,68,0,51,-227,95,17,0,97,201,197,0,54,100,42,224,50,0,235,171,23,230,103,2,-65,250,224,86,7,2,104,105,100,198,187,224,155,13,232,105,0,112,240,0,-55,86,49,165,48,232,105,2,224,100,22,8,113,117,97,108,105,102,105,101,-100,128,103,65,250,177,185,240,53,24,1,83,39,116,200,2,49,55,57,96,-87,1,55,57,207,101,66,198,232,22,20,241,171,2,0,56,143,125,128,19,-199,128,232,110,13,96,96,224,95,0,234,163,13,224,46,4,74,41,1,49,-54,71,185,1,64,58,129,30,2,10,65,32,85,19,84,134,64,17,230,196,-1,213,2,64,7,131,92,96,109,96,47,96,21,192,50,0,54,243,201,0,-225,88,0,83,232,0,83,96,139,129,140,133,167,0,85,134,231,228,191,13,-128,31,0,90,176,129,138,96,96,0,64,98,131,250,133,158,228,114,1,64,-25,131,238,66,253,230,17,1,64,39,0,50,64,159,77,43,96,138,100,149,-166,197,132,49,165,181,117,190,251,14,0,224,30,0,96,162,87,216,192,14,-125,146,64,8,213,204,224,16,0,182,22,224,67,1,98,2,230,24,6,231,-57,0,230,59,4,64,30,0,80,67,124,244,166,1,181,234,246,163,2,192,-10,232,39,3,224,234,1,199,143,104,14,96,11,226,87,9,0,53,131,26,-128,41,97,25,250,15,6,165,132,99,246,230,244,4,150,151,242,17,0,241,-241,3,128,250,232,45,11,128,255,64,10,150,210,248,230,5,96,0,65,184,-133,142,231,228,6,84,160,194,40,96,95,232,1,4,135,221,232,252,1,97,-99,129,216,121,176,160,51,232,244,2,224,19,0,232,250,11,153,202,0,66,-242,200,1,224,211,23,1,95,56,176,180,128,193,134,40,229,130,1,234,120,-13,228,240,16,114,108,100,176,72,187,1,55,57,128,147,230,79,10,229,165,-2,162,1,130,80,97,155,161,85,132,247,224,78,8,224,126,4,230,151,13,-224,77,0,1,39,66,66,135,226,140,2,73,86,131,160,180,37,74,225,73,-221,123,165,1,95,57,238,245,0,128,38,65,18,183,97,229,39,4,224,5,-26,225,229,3,65,21,230,214,6,224,173,0,2,64,95,57,101,176,0,51,-226,227,8,176,187,160,246,225,196,6,138,142,229,70,16,165,180,96,36,99,-11,112,231,160,51,229,188,1,234,99,9,2,95,49,55,101,73,96,9,89,-120,229,109,6,109,151,229,244,30,143,25,67,102,230,175,5,230,7,5,224,-96,4,3,54,32,95,54,76,70,1,95,54,113,41,224,105,23,99,91,238,-101,0,224,105,16,67,152,225,43,17,1,95,57,73,134,224,199,17,92,88,-128,75,224,139,15,177,108,129,169,224,221,18,1,57,48,70,77,101,231,224,-110,10,0,49,126,145,227,54,1,224,57,9,102,84,224,57,10,0,51,131,-117,224,56,11,1,49,51,89,162,225,177,32,225,71,7,165,103,224,211,5,-67,21,232,61,0,224,87,20,0,49,126,56,194,10,227,23,7,231,255,13,-148,255,196,73,0,50,131,81,226,161,5,67,69,234,40,8,227,81,2,1,-49,49,242,157,11,247,108,2,0,56,101,28,227,82,7,2,49,55,56,190,-183,233,78,3,1,55,56,136,96,237,211,4,1,46,46,173,211,226,111,12,-0,49,98,188,0,58,131,74,1,10,65,156,248,64,14,136,137,232,107,5,-64,115,136,8,2,56,53,32,64,15,0,54,192,15,0,48,105,239,100,161,-2,49,55,56,107,202,64,35,228,142,2,224,225,5,5,55,55,32,79,32,-35,88,47,100,236,227,184,5,0,52,117,194,0,55,135,6,160,8,64,79,-253,91,0,228,210,20,1,55,55,128,69,0,55,133,144,1,55,55,76,68,-64,7,133,76,1,55,56,196,59,125,126,96,92,252,150,7,96,71,224,145,-2,68,222,64,49,129,122,225,112,2,85,186,65,72,241,226,4,0,111,161,-111,251,127,11,1,55,54,175,71,240,30,29,97,246,110,200,100,62,168,69,-253,35,6,0,51,173,165,64,204,135,20,64,63,97,16,246,226,5,4,81,-117,97,108,68,96,157,238,171,12,182,227,96,155,105,98,160,18,96,116,234,-142,3,104,188,232,155,0,106,43,1,95,49,106,106,70,137,225,9,9,192,-71,201,45,144,189,0,66,93,216,66,13,1,50,53,76,153,224,63,0,2,-79,32,35,94,63,240,180,2,192,220,230,222,5,231,90,22,1,95,56,115,-32,0,51,237,36,17,0,105,159,38,227,99,0,224,43,4,224,55,5,185,-86,228,101,0,224,74,7,2,116,104,101,190,110,224,77,59,2,101,108,115,-243,104,1,160,77,227,32,4,78,127,224,245,15,0,55,247,227,22,224,245,-0,162,144,97,124,228,49,5,1,45,62,162,193,236,212,14,65,139,197,84,-224,132,14,66,18,224,132,18,1,108,101,247,14,1,131,22,168,33,224,184,-19,213,168,129,18,0,58,131,209,224,132,17,0,57,97,37,224,80,18,1,-99,97,161,102,225,179,13,224,45,6,0,111,225,55,6,138,180,64,133,133,-41,229,194,10,107,235,64,18,226,174,6,225,202,2,0,49,81,70,67,244,-100,185,170,53,224,73,4,199,176,226,7,11,114,227,224,225,29,224,181,4,-128,183,197,204,224,153,11,139,34,190,136,139,250,96,136,96,56,0,54,96,-56,67,202,0,49,71,177,0,89,109,97,67,175,68,22,76,10,173,224,0,-32,135,33,148,159,0,49,237,105,5,160,131,166,34,229,39,2,104,194,229,-58,6,139,83,136,219,133,1,107,6,229,5,2,3,64,95,53,51,95,23,-109,72,128,90,166,45,224,90,4,0,50,224,90,7,231,179,12,138,85,237,-0,7,231,222,18,236,186,0,224,150,8,229,43,0,0,83,147,153,133,200,-77,37,147,119,0,55,155,234,79,37,192,195,139,0,225,33,0,211,55,230,-244,21,224,5,9,226,39,1,182,13,144,118,224,24,11,130,20,235,68,63,-66,168,192,24,235,68,25,107,65,235,58,29,1,55,54,171,103,96,19,235,-39,21,2,49,55,54,236,169,13,203,40,72,156,96,76,249,8,3,0,55,-77,196,224,173,8,224,96,15,251,246,10,224,96,2,0,54,197,218,224,96,-4,64,118,225,14,18,130,15,225,111,31,132,52,130,130,225,99,19,4,32,-95,57,48,57,71,109,106,167,138,57,228,54,19,7,112,114,105,109,105,116,-105,118,229,29,0,143,119,66,141,232,95,20,2,115,116,114,180,30,232,95,-6,129,191,255,67,0,64,118,128,166,64,82,135,213,117,238,93,73,74,107,-64,22,235,181,0,96,167,97,153,0,67,188,254,145,32,3,95,52,54,52,-234,68,4,64,54,65,117,250,5,2,97,26,118,63,97,174,227,72,2,170,-171,225,219,12,136,150,1,49,54,111,97,233,239,4,232,164,4,0,52,234,-188,0,129,122,231,28,0,64,171,224,132,2,97,60,160,132,0,54,228,148,-9,67,47,236,31,1,224,9,21,242,96,12,128,120,241,173,6,102,46,132,-116,160,59,224,13,20,197,175,225,4,0,228,211,0,142,221,209,135,165,209,-160,6,194,132,224,147,14,230,181,0,224,94,11,66,185,65,83,224,59,5,-236,185,11,224,70,9,225,145,0,128,70,131,83,236,244,13,235,48,9,224,-213,2,241,116,9,160,101,224,169,3,1,95,56,109,85,224,227,9,0,49,-68,187,96,121,64,44,107,217,226,10,5,224,74,9,1,49,55,108,49,224,-243,38,224,240,3,64,66,133,50,224,239,15,224,237,4,192,234,224,226,3,-66,135,217,204,2,80,32,35,65,254,131,115,64,88,226,183,1,101,96,162,-182,230,132,11,229,22,13,1,51,50,142,130,228,245,4,143,165,1,55,53,-237,208,0,144,61,224,54,3,109,243,225,99,6,234,49,27,224,125,7,233,-44,2,64,184,228,175,0,224,178,18,0,48,152,133,0,55,250,28,3,225,-237,9,239,143,4,229,179,5,139,142,245,32,11,64,167,0,48,129,66,243,-155,11,224,68,1,251,11,9,228,156,15,1,54,52,225,96,9,162,129,80,-135,226,129,4,64,19,192,8,0,50,163,176,225,3,13,0,52,231,135,24,-238,226,4,4,101,102,97,117,108,193,144,208,255,224,107,6,64,244,133,196,-248,30,8,1,53,55,233,135,7,1,55,53,131,67,227,161,1,238,228,5,-108,214,96,83,77,50,220,7,229,19,14,224,170,3,254,105,2,130,58,236,-211,12,64,87,134,31,229,107,4,100,221,96,157,65,244,246,12,5,127,122,-0,80,67,155,64,64,99,90,70,159,224,137,1,226,44,0,96,93,198,18,-235,110,17,224,196,6,228,96,30,224,114,13,64,113,0,54,231,87,2,64,-46,131,227,66,171,231,87,3,163,154,66,84,64,29,241,98,6,228,99,4,-1,60,45,195,129,145,189,1,56,53,76,224,96,249,64,58,196,35,2,55,-53,49,82,27,64,88,128,15,146,27,79,211,64,28,131,14,0,53,227,14,-4,224,250,5,242,27,27,152,206,182,251,64,79,168,46,226,82,3,77,77,-236,72,12,141,102,167,0,248,174,3,176,159,248,171,10,153,248,0,50,87,-239,177,139,161,52,236,144,30,64,163,64,170,3,10,65,32,85,236,13,1,-255,167,1,0,83,224,18,6,74,60,233,66,5,139,188,113,234,137,67,160,-126,224,39,7,224,38,3,91,206,224,38,0,81,208,184,52,64,140,233,14,-0,130,7,66,34,233,181,6,130,124,117,200,64,113,1,85,32,224,164,6,-67,245,224,48,4,132,6,224,48,0,160,134,224,161,13,224,37,10,225,39,-0,206,152,194,132,135,223,236,34,21,133,149,0,54,184,136,224,19,1,96,-80,0,54,163,10,99,12,99,58,134,215,66,99,160,24,96,26,159,214,141,-178,253,117,0,67,107,227,72,0,129,87,96,22,162,239,224,139,9,64,110,-101,14,0,49,128,40,186,168,65,57,92,212,154,167,200,26,100,85,96,224,-0,50,163,193,139,27,130,110,98,236,96,24,65,0,160,143,227,58,18,229,-165,6,2,114,105,118,223,175,225,77,0,159,159,141,170,69,167,228,81,5,-228,225,3,65,154,229,34,1,230,66,0,229,63,14,67,65,227,129,7,68,-191,234,198,11,233,22,6,228,253,13,167,112,164,252,88,55,229,22,4,131,-254,65,73,232,243,7,0,67,122,79,242,172,2,0,51,195,120,170,210,227,-242,1,230,45,18,245,189,12,96,174,230,159,10,149,49,0,80,97,205,93,-111,96,154,253,113,0,187,227,96,25,64,132,2,95,49,49,71,42,3,67,-32,95,56,67,6,3,79,32,35,51,244,240,4,64,178,131,158,113,78,107,-122,97,62,130,65,224,2,0,0,83,160,49,128,214,128,1,64,37,98,52,-4,48,54,32,95,52,95,185,160,0,224,36,3,64,1,127,65,96,0,64,-73,157,194,107,226,224,5,13,224,114,4,96,15,254,199,2,98,215,165,61,-100,240,254,200,5,128,38,254,201,2,157,241,254,206,2,203,218,255,198,3,-64,96,128,108,224,27,1,160,125,224,119,3,96,122,160,221,72,199,111,118,-172,173,0,83,65,2,1,49,32,145,94,96,32,65,130,66,216,97,128,113,-0,1,95,56,99,212,229,253,0,0,49,88,102,191,122,140,235,255,64,9,-134,13,157,253,3,95,54,57,53,129,167,119,28,0,67,65,73,133,246,102,-93,64,8,96,16,82,255,0,39,214,242,0,52,86,2,0,57,105,55,0,-79,187,77,129,254,96,169,253,48,0,64,0,1,95,52,68,255,192,159,64,-83,64,45,87,60,1,57,51,193,225,224,79,3,225,12,2,0,50,110,173,-247,151,9,18,66,97,100,32,71,65,68,84,32,114,101,115,117,108,116,32,-116,121,112,162,244,224,59,1,104,166,1,55,51,64,218,3,80,32,95,57,-85,239,2,95,52,50,97,188,1,49,50,103,69,66,179,192,51,161,155,99,-121,160,0,66,196,197,200,108,191,0,51,128,81,133,65,224,160,11,0,79,-144,217,163,7,226,52,0,113,146,64,142,128,126,101,48,224,217,15,1,58,-58,128,199,225,158,0,128,57,96,190,96,95,0,49,227,103,2,67,36,224,-146,0,64,174,0,54,229,168,1,96,179,0,64,90,253,0,85,130,254,130,-61,0,54,87,44,198,175,98,166,97,247,195,35,0,95,64,25,96,123,66,-83,71,127,96,108,121,95,225,90,0,64,66,1,50,56,104,226,208,65,224,-76,5,224,70,8,0,75,224,70,3,224,67,17,224,49,4,0,65,224,120,-2,96,0,97,212,139,119,97,215,96,113,223,125,224,170,0,224,108,0,224,-68,1,192,60,153,230,96,58,97,45,245,186,10,65,113,229,95,6,140,20,-235,236,6,94,196,128,200,224,61,4,98,231,161,37,229,123,3,105,181,238,-81,5,1,51,50,96,25,248,182,15,225,178,1,224,96,4,163,85,192,28,-229,197,7,224,26,2,196,105,224,11,0,192,8,226,224,1,129,5,203,48,-71,211,246,29,7,231,37,2,224,10,13,237,128,4,142,185,97,26,193,12,-161,82,96,240,135,13,224,82,24,224,93,11,101,37,162,91,96,8,192,111,-129,131,132,96,64,24,241,11,6,224,142,10,65,119,96,15,168,227,96,15,-65,7,169,13,225,110,4,0,56,133,3,224,19,0,109,46,0,55,72,244,-64,6,64,216,225,131,9,97,95,64,80,204,62,225,88,11,225,55,1,96,-187,235,216,0,133,252,224,31,5,242,99,9,136,67,138,172,226,85,4,224,-54,1,81,10,75,13,1,32,89,129,53,152,222,166,121,128,181,134,28,228,-241,3,201,86,237,224,15,239,179,41,167,75,224,29,2,224,191,1,166,20,-65,42,202,16,224,120,16,97,138,195,1,64,49,251,189,19,224,49,5,65,-166,0,58,129,89,235,147,2,245,18,2,145,60,96,148,66,4,234,30,7,-97,146,64,64,245,126,5,1,54,57,98,238,138,141,130,77,64,36,235,249,-0,129,176,93,241,64,12,0,52,128,131,0,54,224,66,5,225,77,3,226,-37,20,234,201,9,118,104,227,55,29,64,2,0,79,64,215,147,136,78,230,-167,159,66,18,64,75,109,153,228,175,3,89,179,255,223,29,223,67,246,209,-5,232,15,2,70,192,224,68,0,130,20,96,111,96,8,96,230,235,140,12,-66,29,225,42,2,225,230,17,74,171,227,63,2,179,160,225,23,22,131,6,-66,248,228,52,9,192,69,161,189,224,15,0,64,148,240,92,5,225,158,4,-233,143,9,242,87,1,130,36,229,54,13,128,55,192,42,0,51,227,231,3,-99,70,64,126,104,53,96,128,240,162,0,0,50,112,162,64,25,228,180,7,-68,240,230,54,7,129,192,239,229,12,251,216,6,64,144,65,222,136,34,155,-213,64,104,195,161,177,11,88,18,161,201,64,29,195,141,66,150,0,58,128,-22,224,150,7,167,185,226,101,3,129,178,101,70,224,157,15,253,20,8,66,-247,227,66,3,224,5,8,229,2,2,252,53,101,238,138,11,128,13,167,154,-224,96,3,0,54,86,213,224,8,0,118,222,227,225,4,96,60,252,82,28,-104,18,192,19,139,62,65,38,132,135,0,83,81,169,130,238,142,82,0,55,-79,169,0,64,169,42,92,188,0,54,97,192,64,237,208,33,250,193,1,64,-43,129,107,251,43,11,7,108,105,116,101,114,97,108,34,96,46,241,88,11,-224,18,5,64,213,241,69,4,129,115,187,82,134,144,112,56,64,36,123,238,-96,174,130,250,224,34,20,172,51,1,64,83,173,121,160,112,64,57,224,53,-15,0,57,100,121,241,215,13,224,145,21,0,48,64,6,160,0,65,34,241,-90,3,225,56,1,131,166,96,21,128,77,96,21,247,202,5,128,5,187,197,-230,142,1,69,65,234,17,8,64,39,165,52,224,41,15,0,61,224,41,0,-96,219,64,111,247,176,6,234,106,4,224,46,0,213,10,0,54,86,62,98,-22,64,58,252,187,0,224,58,10,224,147,0,245,69,1,203,194,0,58,128,-167,224,58,4,136,30,242,251,28,108,228,224,19,3,96,80,176,72,102,199,-233,138,2,97,20,142,72,228,84,3,78,71,224,97,4,229,69,0,131,134,-228,104,14,2,83,32,95,183,42,0,49,99,34,128,122,214,243,109,79,224,-46,1,227,201,2,144,173,142,61,66,74,66,127,172,152,254,66,7,128,228,-244,255,2,137,236,165,101,163,147,77,182,130,208,162,128,114,68,64,9,224,-126,12,137,187,64,170,0,54,225,118,5,225,111,16,128,30,242,51,4,4,-102,111,114,97,108,99,200,225,212,2,97,54,199,17,191,168,199,93,214,224,-231,228,0,231,195,13,70,137,226,69,16,174,232,224,112,2,89,23,226,69,-0,231,105,5,116,137,233,108,0,0,48,171,178,71,50,128,36,233,108,2,-97,217,189,79,192,135,255,243,20,4,76,73,100,101,110,122,9,225,176,6,-162,140,131,192,225,225,1,178,41,101,90,98,22,145,31,1,49,53,112,97,-0,50,96,116,108,19,133,213,0,50,72,17,0,50,103,129,64,162,229,220,-1,64,8,228,100,2,145,87,3,64,64,64,75,129,191,130,26,96,190,227,-199,6,234,120,3,96,243,96,36,227,177,6,0,57,155,99,64,71,0,58,-128,50,225,1,17,0,85,225,1,48,0,39,70,189,80,164,96,246,224,213,-35,96,160,186,79,82,127,138,156,226,182,2,103,17,71,90,226,126,0,0,-54,68,22,66,36,129,64,67,232,224,19,4,64,84,131,176,251,90,1,231,-212,4,128,145,226,170,4,182,146,64,76,64,56,251,59,4,245,100,5,237,-114,0,64,152,228,133,1,224,39,13,100,65,239,154,7,224,42,11,152,205,-224,81,7,228,207,3,189,147,96,39,147,181,235,148,2,65,169,149,88,109,-214,225,184,0,176,135,0,85,82,0,129,183,203,167,96,155,0,35,68,233,-229,105,0,128,12,193,85,130,61,162,166,240,92,7,65,41,216,113,148,80,-0,85,96,46,193,69,131,181,113,118,64,14,199,6,65,103,148,61,161,229,-104,31,236,152,0,71,39,101,3,140,143,0,54,118,119,64,63,231,48,11,-224,5,15,225,231,3,70,202,248,87,19,4,109,111,100,117,108,148,48,66,-92,96,236,235,159,13,146,92,64,36,175,165,166,169,149,254,234,31,30,0,-56,144,114,128,19,234,12,0,236,14,13,96,97,224,96,0,229,86,9,64,-57,224,46,3,77,118,202,227,224,26,11,225,5,18,6,112,97,116,116,101,-114,110,229,134,0,148,20,224,152,21,224,78,18,0,116,213,131,224,142,1,-224,190,25,92,200,250,1,21,255,167,3,160,163,66,26,133,19,0,90,160,-1,152,10,64,23,229,6,6,0,56,161,182,133,43,74,218,0,58,128,157,-224,36,4,129,114,0,56,112,40,96,37,229,43,17,136,252,229,39,19,138,-245,88,102,69,7,0,83,163,119,102,1,245,241,12,243,244,1,128,47,195,-169,224,49,7,233,105,5,192,111,128,53,229,111,0,97,64,224,23,21,129,-2,240,167,6,105,165,231,58,9,97,26,231,58,18,0,81,230,57,28,192,-215,231,46,56,224,211,22,132,153,0,79,226,62,2,2,99,97,115,98,147,-224,19,4,3,108,97,115,115,224,20,7,3,100,97,116,97,224,19,8,226,-123,1,224,22,5,252,148,1,224,23,4,0,111,224,17,7,1,101,108,224,-125,9,233,107,1,224,21,6,2,101,105,103,99,138,224,22,3,1,105,102,-224,17,8,3,109,112,111,114,224,146,8,0,105,224,57,9,3,110,102,105,-120,224,20,12,224,123,8,96,21,0,114,224,21,9,4,115,116,97,110,99,-224,191,8,1,108,101,224,125,8,229,77,1,224,21,3,3,110,101,119,116,-164,17,224,22,3,0,111,224,210,8,228,134,2,224,22,4,6,114,105,109,-105,116,105,118,224,65,8,2,116,104,101,224,44,8,224,105,11,253,9,0,-178,135,224,0,11,66,53,134,179,132,71,123,0,0,85,196,76,69,64,228,-39,2,244,50,2,66,142,234,208,7,1,46,46,64,108,228,224,7,128,5,-112,33,230,179,4,98,253,137,159,228,160,2,102,28,198,41,130,251,64,135,-234,191,20,5,83,121,109,79,112,101,97,192,239,135,8,215,22,232,24,4,-227,151,2,64,23,232,23,3,103,152,195,109,195,104,0,67,187,243,93,229,-0,51,250,125,2,224,89,5,235,45,37,99,238,96,96,0,55,69,245,132,-6,228,7,17,0,55,136,162,224,153,1,234,96,23,97,54,235,55,0,225,-54,11,228,186,36,104,181,224,169,1,228,143,30,134,139,232,245,0,74,86,-96,204,72,157,237,48,11,106,237,138,133,119,163,237,243,14,183,184,238,32,-4,0,67,238,244,4,128,127,64,103,169,126,226,186,0,73,102,70,146,0,-54,102,86,138,86,188,33,225,4,10,142,160,234,71,4,225,211,0,230,166,-4,193,127,206,209,160,128,230,100,0,130,243,163,12,130,235,121,178,64,36,-0,54,230,137,10,134,128,64,29,174,66,0,54,226,168,5,1,64,35,73,-226,2,64,95,57,75,250,64,38,238,46,0,225,234,12,227,34,49,143,201,-231,198,1,227,38,2,129,10,224,23,4,118,246,227,63,19,247,23,3,227,-95,51,231,81,11,227,82,53,226,202,18,97,96,133,10,229,95,3,143,192,-224,17,3,1,60,45,224,17,7,133,19,224,17,3,136,237,0,79,239,241,-5,128,14,232,220,0,193,1,64,119,132,250,64,231,0,50,159,13,136,55,-110,117,64,31,131,227,115,161,237,66,1,148,7,237,40,3,129,24,248,190,-9,236,226,6,64,81,131,181,0,83,195,246,1,50,52,227,86,1,178,57,-140,205,195,127,0,51,64,63,133,172,131,34,130,94,64,25,162,74,64,28,-64,6,66,28,225,11,3,4,101,109,112,116,121,230,161,2,96,80,224,96,-2,98,0,65,232,97,165,65,175,253,7,2,87,177,224,21,0,64,38,192,-24,160,147,99,191,119,90,64,15,67,45,128,98,64,209,131,98,0,54,163,-221,64,17,171,38,154,234,96,7,129,117,108,252,0,50,77,144,65,12,65,-43,64,15,65,12,68,73,64,42,243,157,0,64,102,225,42,1,237,14,15,-224,12,0,64,36,64,63,211,98,0,90,128,188,0,90,161,88,224,7,3,-210,228,108,130,167,171,160,48,231,174,3,77,162,228,110,3,0,53,164,110,-145,2,66,215,64,29,239,91,3,79,125,179,220,101,157,96,197,229,103,0,-67,51,76,25,5,50,48,48,32,95,56,247,213,3,237,245,28,240,179,1,-248,14,12,155,140,224,107,0,0,85,226,23,2,1,91,93,104,73,247,244,-17,128,11,163,159,167,1,64,226,131,164,244,172,17,166,57,166,52,64,49,-131,94,241,47,3,149,5,230,158,12,64,52,225,66,7,240,158,2,255,8,-6,66,88,0,53,64,50,251,91,2,64,68,131,95,226,233,5,67,176,131,-35,100,195,0,90,240,43,17,0,67,123,181,240,40,3,96,85,68,73,226,-70,1,224,4,4,226,31,0,70,50,231,143,11,0,53,97,228,224,240,11,-0,53,185,69,231,143,29,224,88,5,102,51,225,193,2,128,106,64,176,239,-22,11,64,108,0,54,193,24,231,174,6,128,83,231,175,3,161,58,166,109,-0,53,65,131,2,52,54,50,86,64,70,38,102,42,64,38,231,214,9,132,-144,231,214,4,231,85,3,96,0,64,138,249,248,20,0,85,233,58,39,244,-34,10,233,57,21,67,185,165,213,1,66,39,167,29,165,29,0,53,64,249,-239,19,3,246,132,1,153,167,100,244,226,114,5,64,90,97,89,229,96,8,-65,92,65,218,64,5,226,128,1,193,202,192,2,0,66,224,177,0,128,237,-224,190,3,229,253,2,197,135,230,1,22,224,156,3,226,230,40,131,175,233,-210,78,233,208,4,233,207,10,0,53,246,136,1,1,56,32,83,248,0,53,-97,204,0,80,96,17,0,57,64,80,248,242,7,99,41,104,105,0,85,147,-225,160,72,132,3,0,75,66,177,0,58,128,59,4,10,65,32,80,32,64,-11,202,180,225,171,12,129,32,113,94,160,78,128,40,198,41,225,186,5,97,-183,192,30,97,182,225,196,77,133,203,97,194,224,22,0,225,182,1,194,84,-64,220,246,158,0,0,67,226,108,0,1,90,32,224,74,1,64,34,0,54,-96,34,90,32,96,14,245,109,0,2,54,32,95,212,116,71,191,64,27,131,-37,0,85,181,109,64,21,161,57,225,55,4,118,52,225,50,1,193,25,193,-19,128,7,97,255,224,27,0,64,59,119,3,131,81,200,78,232,70,0,254,-63,0,168,128,64,125,174,163,141,133,0,52,101,46,229,224,5,226,231,12,-0,80,225,45,6,1,95,49,96,64,169,197,233,212,4,128,39,143,72,98,-87,0,50,229,91,1,64,128,194,156,192,20,225,8,8,225,217,0,192,182,-130,12,193,229,3,51,32,64,89,125,178,64,104,64,39,66,62,194,88,64,-7,0,89,233,128,4,67,159,129,30,133,253,128,0,194,80,67,55,224,29,-1,104,66,97,167,192,37,96,17,195,166,192,143,96,0,73,110,99,219,136,-71,231,81,3,64,229,180,223,87,106,161,144,0,58,128,110,106,179,96,153,-228,211,2,227,32,22,227,20,0,229,6,3,96,24,72,86,2,55,32,95,-175,91,224,51,2,64,15,224,45,2,128,21,105,42,224,47,8,234,167,4,-166,121,131,18,64,0,64,182,245,105,0,1,51,53,96,5,117,135,131,102,-64,5,64,34,131,49,2,35,49,48,192,0,68,36,64,40,162,234,64,144,-0,80,128,42,166,180,0,51,227,2,14,225,248,6,194,139,97,215,64,16,-129,248,163,15,129,58,224,225,1,239,115,1,138,140,128,0,0,95,98,141,-105,191,64,128,131,143,100,198,64,90,99,155,0,73,128,155,131,29,0,85,-96,26,130,168,3,85,32,75,52,96,113,64,18,240,41,3,193,101,224,13,-5,71,238,112,55,94,147,69,243,2,58,49,54,69,157,97,6,224,39,1,-99,201,65,145,96,20,104,28,104,114,1,49,54,103,224,161,23,0,52,111,-124,64,20,129,143,174,76,160,53,75,243,0,52,110,61,195,231,227,75,1,-128,57,161,64,0,50,103,134,246,209,9,8,65,109,98,105,103,117,111,117,-115,157,226,160,46,0,55,75,159,226,250,0,2,95,49,49,231,240,2,64,-218,164,245,233,108,1,64,156,90,102,90,6,170,74,224,121,23,4,58,92,-49,48,38,224,116,3,224,41,16,11,32,32,102,111,117,110,100,58,32,32,-32,32,160,48,132,31,224,119,0,104,175,142,2,104,190,76,5,169,115,237,-196,3,2,69,79,70,237,194,4,224,114,7,79,245,0,48,198,42,224,145,-21,8,101,120,112,101,99,116,101,100,58,160,145,4,66,32,95,53,49,109,-153,2,51,51,57,241,105,1,225,53,1,131,28,240,210,8,64,162,224,18,-6,100,143,224,18,5,64,149,130,47,224,19,2,65,99,65,133,224,150,1,-3,84,82,97,119,161,32,224,24,5,160,248,192,24,224,218,19,2,123,45,-35,160,210,113,47,0,55,224,246,4,2,35,45,125,192,71,224,163,8,66,-158,224,162,6,70,130,224,161,6,1,73,110,202,143,224,164,8,3,84,66,-114,97,150,196,128,27,165,130,225,29,6,102,147,224,18,5,141,255,224,121,-4,66,190,64,93,67,41,242,141,6,125,198,224,23,11,111,158,231,223,0,-224,151,1,6,125,32,108,97,121,111,117,160,180,225,41,2,224,23,4,128,-111,99,42,0,95,115,30,1,55,50,136,164,224,25,4,224,20,1,225,225,-7,224,195,9,137,138,192,57,0,49,136,203,224,18,4,0,50,71,64,192,-23,193,218,235,121,44,96,0,66,166,0,54,229,173,0,133,149,0,53,115,-188,232,19,0,0,53,80,67,231,174,2,0,53,81,130,131,43,0,54,64,-218,115,101,76,223,128,209,96,4,68,189,205,165,65,106,96,95,0,89,105,-180,135,3,167,92,136,102,64,99,0,55,192,150,234,70,0,234,3,2,161,-54,243,227,4,167,145,224,46,30,99,77,96,32,160,42,224,39,15,132,245,-160,85,224,39,17,139,120,224,206,4,161,200,172,169,244,117,3,205,82,101,-195,160,130,71,126,244,157,5,140,218,97,87,0,53,86,27,64,29,0,53,-83,216,98,21,192,236,224,111,25,224,71,0,192,110,96,204,224,110,15,128,-230,224,77,5,102,100,3,95,49,48,54,74,254,65,246,64,48,2,95,54,-50,129,217,227,165,0,96,52,64,163,201,77,130,33,65,206,64,182,64,201,-3,55,53,32,95,66,46,3,95,49,56,56,192,9,2,55,55,32,160,209,-102,117,80,1,226,144,0,3,95,53,49,48,227,164,7,160,168,160,255,144,-138,225,150,5,116,115,96,29,150,15,192,29,103,98,167,68,225,58,29,139,-64,193,58,226,5,12,134,114,224,158,0,1,95,53,72,121,1,35,49,165,-252,224,50,35,101,205,226,15,5,224,41,13,0,57,128,150,64,232,175,142,-0,53,93,248,128,8,171,243,192,223,151,14,160,251,0,49,76,116,97,23,-224,245,20,132,77,64,23,193,90,170,141,64,8,128,206,98,140,129,102,224,-106,0,137,116,96,25,81,223,160,71,228,23,2,194,191,235,128,1,224,138,-23,106,135,194,76,242,41,4,129,217,194,26,79,104,226,83,7,192,101,128,-176,68,238,82,2,98,186,230,244,11,4,108,105,110,101,32,230,245,0,162,-119,1,51,56,69,94,130,119,132,50,173,125,224,211,0,76,141,100,236,165,-14,1,50,48,133,29,96,12,0,55,99,34,3,67,32,95,57,68,71,160,-145,96,61,0,51,64,29,143,250,65,72,0,57,96,202,128,37,96,102,128,-43,197,59,181,251,225,51,30,228,94,29,165,48,225,188,7,97,165,0,57,-97,68,101,176,248,229,4,225,203,10,228,139,3,128,153,130,233,96,9,162,-59,204,203,236,184,0,195,19,133,169,96,86,75,83,64,121,64,241,228,98,-8,160,92,205,225,245,23,0,98,103,96,78,129,14,224,227,6,1,64,35,-74,139,96,86,97,19,226,138,28,196,69,128,123,224,21,7,0,49,120,245,-225,131,25,135,226,229,115,23,224,38,0,0,83,108,167,225,170,16,176,234,-96,77,114,59,0,48,224,196,4,96,220,64,21,64,243,113,222,80,218,113,-54,224,70,8,128,28,224,37,38,80,244,224,37,17,78,239,87,136,227,125,-4,204,45,128,0,64,156,216,211,101,19,225,83,4,224,233,7,193,44,65,-23,224,29,4,99,5,130,52,115,117,230,99,4,204,175,234,214,16,17,85,-110,114,101,99,111,103,110,105,122,101,100,32,105,110,112,117,116,203,185,233,-94,5,98,235,225,108,16,98,49,192,194,129,222,128,135,141,138,96,234,64,-167,205,140,67,238,224,161,2,224,142,1,19,73,108,108,101,103,97,108,32,-67,104,97,114,32,108,105,116,101,114,97,108,170,71,225,119,18,64,90,225,-119,19,226,208,1,1,95,49,128,206,224,201,21,226,54,7,225,234,42,224,-114,9,225,193,2,227,173,10,227,132,16,97,69,133,123,227,250,0,167,226,-241,29,4,247,193,1,112,176,228,178,7,255,113,7,107,111,232,143,37,128,-123,147,193,224,0,2,3,95,49,54,49,133,137,65,82,64,90,0,50,149,-208,244,142,0,224,194,3,1,49,54,232,4,4,192,195,224,181,2,96,228,-224,181,6,224,180,69,224,75,0,64,63,128,162,224,98,1,160,79,224,32,-1,169,89,225,162,17,75,190,145,54,66,81,101,2,243,112,1,89,185,232,-188,4,0,32,118,85,201,67,0,85,236,104,1,115,194,64,237,102,253,88,-83,208,48,188,166,64,154,246,86,0,225,79,8,198,107,230,113,0,194,24,-195,144,224,16,2,234,236,14,225,35,0,224,39,2,0,83,218,124,224,20,-0,64,1,179,134,224,115,4,129,205,147,141,224,123,2,212,176,234,108,7,-203,83,228,240,0,0,52,105,183,229,236,2,130,237,0,85,226,246,1,87,-174,224,238,0,64,0,192,44,96,171,193,104,162,129,226,39,53,65,25,181,-19,224,201,1,169,92,65,119,192,228,133,119,231,137,1,226,201,0,162,199,-130,86,1,52,56,144,4,245,103,1,128,82,194,210,192,52,224,174,6,192,-194,192,179,224,191,32,227,163,6,224,166,2,228,48,14,196,43,128,168,160,-181,227,111,17,224,95,0,66,149,217,206,234,126,0,136,115,193,21,233,77,-2,0,50,143,92,3,95,50,51,49,210,9,242,133,3,1,108,101,112,50,-224,18,3,3,119,104,101,114,112,249,224,20,3,1,100,111,224,17,7,1,-111,102,242,190,2,224,177,0,105,62,194,226,128,110,224,50,1,0,105,96,-50,133,226,84,131,249,247,8,108,90,154,60,145,48,227,44,5,0,49,97,-27,160,32,142,6,224,0,0,225,232,1,136,71,197,234,105,120,140,145,65,-109,65,60,149,71,67,250,97,28,172,63,224,15,1,99,43,224,30,2,76,-171,224,136,4,200,0,96,77,149,130,225,134,0,206,179,106,78,0,39,196,-48,108,238,64,154,228,45,5,130,20,114,84,160,108,0,52,74,119,224,14,-0,202,127,237,125,7,116,98,164,59,224,27,0,129,109,3,95,53,54,56,-142,198,225,119,1,1,46,46,243,40,1,227,87,0,224,153,3,172,44,227,-220,4,106,77,100,69,166,54,142,59,242,42,0,65,114,128,78,68,171,129,-254,247,169,3,130,226,129,65,1,48,49,145,245,224,25,1,202,177,177,28,-64,18,174,216,235,94,9,163,44,0,56,102,162,1,53,56,73,32,99,125,-241,57,0,227,55,29,224,171,18,200,115,64,132,100,240,97,174,240,212,37,-238,163,8,224,230,0,236,96,1,97,91,236,108,7,239,132,14,130,204,161,-160,96,225,0,52,98,25,0,80,128,57,65,82,199,167,161,96,64,61,208,-178,250,52,1,226,129,5,224,214,10,128,139,224,214,7,226,176,0,224,214,-120,64,40,224,214,26,160,151,131,132,240,180,0,224,145,39,161,251,224,152,-19,160,139,224,138,18,226,198,19,0,54,66,182,64,6,99,112,226,187,30,-0,58,137,238,89,234,236,137,0,99,238,236,94,2,96,148,130,190,1,55,-50,229,167,2,21,92,51,52,38,115,114,99,47,77,105,99,114,111,72,115,-47,76,101,120,46,104,115,64,21,6,44,52,51,54,58,49,52,176,106,227,-227,0,225,211,9,224,11,2,207,52,67,11,229,19,6,131,9,137,123,128,-199,1,95,54,64,29,2,51,57,49,83,181,0,55,73,74,1,95,54,115,-147,64,0,104,225,233,83,2,129,62,225,197,0,133,34,224,107,0,194,132,-225,220,1,233,69,11,128,59,225,143,5,96,81,65,140,229,159,5,224,84,-1,226,47,4,226,32,17,0,64,138,19,161,199,72,18,224,217,13,113,135,-81,172,224,29,12,130,2,0,49,72,69,66,0,228,207,10,128,33,2,53,-32,67,116,234,2,54,49,55,224,68,8,1,95,49,112,156,157,52,136,147,-224,108,12,224,86,7,193,145,104,214,232,175,5,225,24,60,224,219,25,234,-189,1,193,206,135,7,234,204,0,247,43,21,195,97,226,8,18,172,56,131,-107,0,51,96,127,225,66,11,224,35,0,225,169,17,224,33,28,128,242,0,-52,161,172,225,132,12,96,13,192,14,225,173,31,225,59,13,2,95,55,50,-104,193,68,59,204,249,65,153,0,51,79,207,128,85,99,81,132,120,131,74,-167,189,231,211,0,242,248,2,133,24,73,21,196,230,132,211,64,22,1,56,-53,128,30,85,206,247,6,0,224,8,0,129,22,96,48,64,17,224,48,16,-224,42,37,64,29,0,85,195,249,234,203,5,98,156,1,95,52,105,18,224,-164,22,133,230,86,125,224,115,24,129,95,129,94,106,51,98,61,225,33,2,-160,18,0,66,99,55,224,195,27,224,41,33,224,237,2,97,157,128,117,66,-77,0,54,160,47,224,193,27,160,26,224,42,29,1,64,58,99,11,140,57,-225,249,44,64,64,0,54,202,239,163,198,232,78,2,225,168,0,0,50,91,-53,224,84,19,224,147,0,225,172,28,192,45,225,175,3,192,119,109,192,3,-49,54,49,50,64,42,210,234,226,243,2,131,159,160,154,231,206,1,0,51,-64,99,224,48,1,224,101,1,224,181,28,64,21,225,231,23,225,233,5,224,-134,77,65,143,156,196,231,190,1,225,143,11,227,56,23,225,142,58,221,69,-224,136,1,225,161,3,224,140,3,69,174,128,79,0,52,224,149,30,224,150,-50,64,118,237,112,2,224,146,5,129,150,0,51,224,62,5,225,63,0,201,-192,100,191,226,91,7,169,19,197,109,143,127,224,43,8,103,23,224,248,1,-0,48,98,164,192,106,224,212,42,248,227,3,224,131,120,224,59,0,224,107,-0,241,21,3,110,84,0,55,234,135,2,31,68,97,116,97,46,73,110,116,-101,103,114,97,108,46,94,58,32,110,101,103,97,116,105,118,101,32,101,120,-112,111,110,101,0,110,112,136,1,64,58,131,40,134,222,96,229,96,139,226,-51,19,128,169,193,22,103,9,94,165,224,218,15,192,46,224,206,4,224,45,-30,98,85,64,162,148,22,3,85,32,75,50,96,45,64,18,145,147,96,154,-64,14,144,101,71,130,2,80,32,35,114,112,0,80,128,24,144,48,160,24,-96,126,128,24,87,172,4,10,65,32,95,54,103,216,0,73,149,207,196,200,-232,230,5,144,212,121,171,241,33,6,232,44,0,0,95,92,2,1,53,54,-248,128,13,4,92,57,50,38,110,184,113,124,42,92,99,9,83,32,95,55,-49,50,32,95,54,54,73,189,182,76,236,93,4,64,44,72,231,86,38,137,-97,74,1,112,173,1,48,48,97,159,0,55,76,166,4,95,49,54,48,54,-163,114,0,85,64,22,253,44,1,247,84,0,96,99,163,107,101,11,192,35,-96,87,3,56,50,52,32,170,222,234,165,3,243,127,8,0,48,96,0,128,-32,138,131,192,206,0,89,209,89,193,72,196,9,234,100,24,169,219,234,99,-17,188,175,160,65,142,25,160,19,99,136,1,67,32,244,60,1,248,81,2,-137,142,144,116,113,126,73,246,64,16,221,129,224,221,7,177,145,102,37,0,-32,171,243,128,20,192,110,0,85,228,230,0,128,7,65,120,176,210,66,79,-202,37,78,18,119,217,1,90,32,89,84,161,129,210,90,235,217,4,202,108,-134,161,0,67,90,220,65,249,0,90,96,189,129,238,224,100,2,128,102,200,-81,156,58,229,97,2,100,144,1,95,50,159,58,109,127,2,95,53,51,128,-58,183,93,83,193,227,11,1,97,43,163,11,230,213,4,225,181,1,204,149,-128,13,224,30,3,0,89,129,45,224,17,2,151,127,224,17,4,192,69,224,-21,3,245,157,2,240,214,0,224,104,3,226,53,0,224,26,0,224,61,1,-226,82,0,64,249,192,53,226,57,0,224,33,1,184,10,238,139,0,192,2,-160,23,224,42,4,224,21,0,192,147,237,37,0,224,95,2,128,40,224,186,-2,244,78,2,242,169,15,213,9,192,38,160,84,224,174,0,184,0,131,153,-160,0,224,109,76,249,11,15,126,208,224,36,2,161,85,224,103,0,229,8,-16,193,66,96,30,160,35,254,144,2,195,164,96,44,224,12,0,150,74,224,-23,0,224,0,1,224,111,51,178,74,224,85,5,132,126,224,50,0,128,93,-210,28,77,147,228,74,3,225,116,0,96,20,111,179,2,49,54,48,241,27,-0,146,30,216,50,225,161,3,210,70,210,59,68,134,188,35,227,4,4,195,-71,160,230,226,109,1,226,207,3,224,36,5,229,37,11,192,221,226,181,0,-224,53,27,230,157,0,224,53,36,207,109,224,106,37,211,141,160,231,225,206,-12,197,202,225,198,12,161,184,225,233,4,220,188,161,226,225,93,2,224,33,-3,113,35,180,49,224,96,20,233,34,6,13,98,97,100,32,115,116,114,105,-110,103,32,103,97,112,215,179,97,225,132,49,101,148,0,39,69,149,96,74,-255,198,5,11,117,110,116,101,114,109,105,110,97,116,101,100,127,203,1,47,-83,128,75,255,210,3,234,195,1,161,74,64,15,225,175,24,224,46,30,161,-15,224,92,31,161,161,227,23,2,116,84,225,40,10,111,156,128,10,225,147,-66,106,220,149,196,234,230,1,235,56,1,192,7,135,60,70,148,138,151,233,-1,0,225,2,12,66,81,99,168,231,44,0,96,230,64,8,64,26,64,70,-138,59,103,151,225,255,5,3,66,97,100,32,73,154,5,32,101,115,99,97,-112,123,131,128,201,101,95,225,65,10,128,202,224,33,18,0,57,100,39,224,-32,19,101,237,224,99,19,96,182,224,133,21,189,78,224,33,18,218,169,224,-33,17,224,135,23,75,210,224,66,21,158,164,224,100,20,98,66,70,89,230,-181,16,128,202,64,22,128,34,109,88,64,8,152,66,1,95,53,73,138,5,-53,57,57,32,64,35,88,31,66,153,224,18,1,2,64,35,57,148,127,133,-148,130,2,3,66,32,95,51,65,67,108,97,201,235,66,84,0,50,64,122,-2,52,50,32,128,72,162,35,228,181,1,96,117,127,187,118,201,64,207,64,-76,133,176,238,164,2,245,74,6,98,248,228,238,0,192,26,224,23,2,2,-95,57,56,105,251,131,5,164,92,0,79,162,181,100,89,169,244,128,144,96,-38,107,184,131,129,224,164,2,224,103,3,247,94,0,224,96,6,224,84,8,-224,83,24,227,58,8,128,31,163,184,202,240,160,18,0,56,224,17,0,192,-35,0,54,224,17,4,231,255,4,97,254,224,86,1,232,9,0,224,21,12,-100,157,224,22,10,67,13,224,22,9,150,239,224,21,7,67,124,224,66,10,-129,255,160,22,68,16,223,205,0,89,193,66,161,214,198,187,233,59,4,229,-84,5,251,188,2,0,53,200,20,225,151,5,96,51,199,48,235,157,1,235,-160,0,193,187,114,37,141,116,96,0,136,164,64,95,96,68,236,211,1,96,-42,119,229,192,42,64,123,167,73,226,249,3,130,247,224,234,5,143,21,0,-79,133,68,238,152,9,2,78,85,76,100,245,97,194,224,37,16,2,83,79,-72,128,37,64,172,224,37,17,1,84,88,128,37,64,132,224,37,16,0,69,-192,37,64,162,224,37,17,1,79,84,128,37,67,170,224,37,17,1,78,81,-128,37,68,5,224,37,16,2,65,67,75,128,37,69,20,224,37,16,1,66,-69,161,9,65,212,224,37,17,0,83,128,36,66,127,224,36,16,0,72,160,-187,66,232,224,36,16,1,76,70,161,82,225,121,20,0,86,160,74,99,74,-224,37,16,0,70,192,75,225,121,20,1,67,82,160,37,225,121,20,1,83,-79,160,37,225,121,20,1,83,73,160,37,225,121,20,2,68,76,69,160,38,-225,122,20,2,68,67,49,160,38,225,123,20,2,68,67,50,160,38,225,125,-20,2,68,67,51,160,38,225,127,20,1,68,67,157,136,0,35,101,55,224,-38,16,1,78,65,162,60,0,50,226,251,21,1,89,78,160,38,226,252,22,-0,66,160,38,225,131,20,1,67,65,192,77,226,254,21,0,77,160,37,225,-132,20,1,83,85,192,115,225,132,20,2,69,83,67,160,38,225,132,20,0,-70,163,0,0,50,225,131,20,0,71,192,37,225,130,20,0,82,160,37,71,-232,224,37,17,0,85,192,37,225,128,21,0,80,160,37,225,127,20,0,68,-195,228,114,21,203,156,224,0,20,69,68,148,65,1,95,52,72,120,65,108,-72,126,160,6,78,29,0,49,64,154,64,12,0,55,128,6,0,56,72,183,-0,57,232,164,0,2,95,54,48,224,11,0,0,58,128,7,5,10,65,32,-62,61,32,64,12,146,51,0,62,96,11,145,216,0,60,96,11,0,54,96,-11,3,105,99,109,112,96,14,177,158,81,223,233,61,2,0,52,65,56,224,-20,8,65,39,224,20,7,114,204,224,20,8,66,132,224,20,7,0,49,98,-154,224,21,9,66,99,224,106,8,137,145,224,20,5,0,53,64,231,0,67,-104,108,224,106,2,66,123,1,95,49,98,15,1,95,49,82,134,224,7,55,-65,21,246,183,0,212,116,71,153,189,130,243,20,1,108,149,3,67,32,61,-61,232,205,1,135,165,0,85,64,12,64,8,0,90,213,248,231,184,0,199,-250,103,142,233,181,0,199,184,96,216,105,112,226,101,12,2,99,97,115,172,-75,233,96,6,0,53,175,197,248,218,0,130,16,204,159,64,1,170,63,106,-74,139,82,211,89,232,130,0,75,72,3,67,32,60,32,180,156,200,57,224,-234,7,224,28,0,128,232,181,236,234,212,3,192,250,224,34,1,242,39,1,-160,68,139,94,224,67,7,225,5,2,226,52,3,192,0,107,189,171,138,2,-49,53,54,118,161,1,53,54,66,129,177,153,224,106,95,65,92,137,235,226,-164,7,96,34,226,228,9,226,207,11,142,97,224,63,7,224,41,11,0,51,-131,57,224,175,7,226,250,48,64,190,248,213,1,80,140,162,191,130,35,117,-187,96,36,164,159,82,186,214,210,106,35,1,51,32,215,183,64,54,3,58,-49,53,56,132,123,108,10,118,149,202,196,130,86,202,192,172,38,130,186,1,-53,56,130,187,224,77,1,96,162,192,41,147,4,170,134,115,44,211,15,0,-39,234,195,2,120,86,217,251,64,136,183,43,88,202,69,138,237,115,0,128,-14,237,255,1,69,91,143,85,65,86,69,104,207,33,224,35,6,81,155,224,-35,1,171,43,64,105,215,46,224,242,2,98,106,224,242,35,227,75,2,224,-241,48,0,54,224,241,0,224,181,2,0,52,64,89,224,181,0,0,53,64,-152,64,43,133,238,224,179,0,225,23,0,226,90,4,0,64,224,61,1,224,-19,3,242,20,4,224,222,29,160,165,224,222,52,133,139,121,104,88,115,205,-16,96,69,128,53,145,26,204,203,141,59,64,98,0,57,71,42,102,160,236,-215,0,251,252,1,64,90,229,31,2,225,61,20,130,201,224,38,9,226,62,-13,143,240,226,66,23,242,49,6,7,100,105,103,105,116,84,111,73,189,60,-240,100,14,250,97,1,112,110,97,151,211,5,224,49,27,96,176,224,49,22,-64,39,96,255,97,34,206,209,100,36,101,32,121,215,97,233,227,103,6,65,-169,226,51,6,113,69,64,45,221,42,0,89,99,130,144,241,64,4,0,85,-128,50,98,26,186,219,65,187,166,118,207,69,242,199,6,128,189,194,80,64,-95,91,129,128,141,230,133,4,194,43,229,56,5,154,198,98,125,194,57,1,-49,53,98,117,66,42,64,77,219,111,242,92,0,242,136,0,231,165,27,4,-83,79,85,82,67,140,159,160,204,195,37,64,103,143,150,184,16,92,224,64,-20,98,56,160,19,1,54,57,74,13,0,52,132,75,3,95,54,50,56,249,-202,2,64,205,224,174,5,144,137,128,210,64,186,196,148,97,106,104,123,160,-186,176,95,225,76,0,0,53,97,236,252,168,5,161,89,232,229,3,246,167,-19,15,85,110,99,108,111,115,101,100,32,123,45,32,99,111,109,109,223,249,-136,131,228,39,5,242,220,0,243,175,14,231,125,0,129,248,232,152,0,225,-194,13,0,52,129,194,240,164,0,97,15,129,24,86,107,97,78,253,189,12,-224,149,38,192,103,224,148,28,130,243,224,149,25,227,114,1,224,150,7,234,-36,5,169,145,226,251,11,224,46,30,165,177,163,75,224,233,3,224,84,4,-242,213,1,224,177,6,192,158,224,26,0,64,6,195,163,224,18,2,160,247,-227,147,1,66,137,0,54,98,137,0,85,138,10,129,18,254,68,0,128,185,-3,95,52,54,50,192,101,225,173,10,64,68,134,175,0,85,225,113,0,128,-50,67,81,242,184,0,131,94,64,205,172,139,224,72,2,100,238,67,59,135,-104,64,81,166,78,132,131,230,76,3,254,225,1,128,100,224,74,5,128,60,-230,48,16,230,9,5,151,172,105,107,3,95,49,55,50,229,230,2,12,92,-51,52,38,108,105,98,47,68,97,116,97,47,89,218,2,46,104,115,64,19,-4,44,49,48,53,58,144,172,97,91,246,104,0,224,128,0,229,172,17,192,-109,230,18,0,128,171,229,185,4,98,9,133,185,68,129,128,196,235,179,20,-130,78,192,25,236,29,4,128,99,235,105,61,224,69,10,129,110,224,69,7,-186,133,130,203,141,61,224,91,5,229,144,17,4,109,111,100,117,108,237,56,-1,237,36,2,162,200,235,231,12,135,241,237,255,0,141,58,166,152,237,15,-10,96,173,160,88,65,101,198,241,0,80,150,61,0,85,97,123,64,95,231,-7,2,163,198,64,52,224,13,0,127,42,96,102,0,39,250,87,9,6,108,-97,121,111,117,116,76,144,184,97,0,225,163,9,109,225,160,25,224,2,0,-128,47,132,40,225,207,8,166,92,228,86,1,246,111,1,224,59,0,224,56,-12,251,128,0,128,27,229,22,1,161,25,224,31,6,111,22,207,14,216,107,-192,7,64,247,223,38,1,53,53,64,146,0,85,65,200,185,81,98,5,200,-23,70,147,96,37,121,188,138,42,224,58,5,192,0,224,151,14,192,34,224,-150,2,206,192,225,68,0,66,98,249,135,4,247,132,5,215,135,196,217,160,-36,224,24,2,225,47,0,200,237,194,168,71,121,224,127,1,228,130,3,217,-222,96,43,66,200,162,136,96,42,224,251,1,68,9,96,252,162,170,225,3,-18,96,128,224,51,12,113,77,96,117,224,52,4,135,230,192,63,64,11,133,-10,227,106,0,128,28,64,7,227,196,0,250,195,2,231,88,14,130,46,203,-153,228,96,7,251,197,3,65,117,67,220,163,104,161,137,97,61,101,94,0,-52,161,20,164,37,192,122,225,22,13,96,35,224,226,9,140,171,64,199,251,-34,2,224,237,3,129,186,133,15,162,0,193,161,231,114,2,129,237,64,192,-225,29,1,224,159,0,128,233,224,158,26,160,108,225,185,5,129,237,193,108,-64,88,191,52,224,165,3,224,95,50,128,186,192,95,192,69,128,101,226,94,-15,234,198,0,64,22,163,150,128,0,128,97,230,13,14,225,77,1,99,103,-228,232,1,100,167,96,25,218,153,130,54,160,10,129,90,230,54,5,233,95,-3,228,247,1,227,222,1,227,95,1,234,217,15,192,59,132,109,225,22,6,-226,249,3,227,247,1,163,250,224,198,0,131,222,192,13,244,205,11,224,31,-1,226,24,1,230,253,11,129,229,224,138,12,171,230,163,107,1,48,49,241,-128,2,224,208,6,128,169,197,18,235,160,5,134,46,7,32,101,114,114,111,-114,32,125,102,52,224,101,2,128,95,133,99,229,105,1,224,154,24,228,33,-5,161,79,96,43,64,23,113,194,228,136,8,234,172,1,194,107,161,177,102,-237,97,71,161,103,245,58,0,192,16,130,31,130,59,193,116,131,151,224,13,-9,226,9,1,5,67,32,95,51,56,49,165,107,193,44,224,171,3,131,93,-151,87,163,176,230,66,13,161,92,131,45,151,155,64,47,225,100,1,5,115,-121,110,116,97,120,129,100,225,98,30,72,9,142,99,64,139,135,38,168,32,-205,191,64,22,64,150,160,22,0,54,233,204,3,97,99,137,204,64,145,192,-47,64,181,160,46,138,228,104,232,64,14,138,182,4,85,32,75,32,65,139,-156,67,209,1,10,65,120,204,0,53,68,38,2,90,32,85,170,16,233,228,-4,224,18,6,132,139,224,18,4,151,146,232,20,9,65,106,232,6,5,160,-105,1,64,85,73,82,0,64,64,7,133,119,192,15,224,69,6,64,227,105,-231,230,62,5,160,45,224,60,1,165,188,224,169,6,65,245,224,80,6,181,-66,224,18,3,65,142,160,65,224,80,7,224,41,6,129,137,160,41,234,63,-3,65,75,139,79,108,52,1,75,32,79,177,131,167,96,52,66,122,64,35,-202,13,97,168,100,35,129,191,69,102,3,10,65,32,73,89,139,66,48,204,-154,99,25,82,73,112,253,0,52,109,97,2,90,32,90,67,139,0,52,76,-194,0,89,96,73,64,135,233,67,1,203,191,230,46,5,192,166,0,53,130,-89,173,74,232,106,0,224,12,0,230,230,4,202,149,164,191,192,39,227,101,-0,227,162,0,96,8,110,79,0,53,168,214,224,70,3,99,53,123,16,64,-22,167,237,229,84,3,64,36,67,218,99,153,71,139,227,131,1,246,242,1,-2,53,53,52,96,5,99,124,182,237,104,124,160,6,64,39,231,198,0,193,-14,228,103,6,162,137,150,96,192,117,224,7,3,164,70,228,168,1,228,79,-0,168,130,64,183,64,60,224,33,12,128,27,224,26,6,129,40,160,137,100,-114,232,248,0,224,38,13,132,106,103,206,164,44,162,106,194,113,184,229,96,-12,96,11,248,246,0,134,36,98,158,67,226,226,200,2,3,39,32,95,56,-78,148,96,123,129,15,225,14,4,161,82,192,31,0,85,68,12,66,103,107,-111,77,122,166,188,0,51,85,45,224,0,3,225,168,2,225,163,6,88,98,-4,95,52,54,52,32,229,36,1,10,77,104,115,46,66,117,105,108,116,105,-110,133,35,2,49,54,52,67,50,64,53,0,49,144,128,225,205,0,224,58,-6,5,80,114,101,108,117,100,173,190,66,200,0,54,98,200,0,75,99,50,-196,254,128,1,231,154,3,233,166,1,0,32,152,207,96,59,133,24,229,69,-0,133,46,64,194,160,69,160,44,64,20,239,63,1,236,34,1,226,217,3,-195,55,194,218,232,209,3,192,125,130,215,164,74,96,26,80,170,165,14,148,-189,135,79,125,91,64,33,230,246,2,195,48,160,96,227,65,1,227,185,2,-236,119,1,96,23,224,25,11,96,251,231,32,3,224,182,0,220,122,228,13,-1,195,235,96,174,64,32,64,154,0,50,99,150,6,53,52,48,32,95,57,-57,72,137,226,14,1,1,95,52,153,179,67,182,65,91,64,7,148,210,99,-245,1,95,52,216,52,192,32,194,150,224,15,1,130,174,161,28,98,82,1,-51,51,96,83,128,134,64,18,160,28,1,53,51,102,109,96,160,0,95,192,-21,0,67,81,181,0,49,226,158,1,1,67,39,79,91,64,25,133,30,193,-60,227,175,1,64,219,97,160,64,11,224,5,0,151,180,99,90,163,109,64,-4,165,232,193,38,163,100,224,170,1,0,53,151,242,169,173,0,48,132,148,-0,48,67,110,96,0,163,158,225,37,3,3,54,32,95,52,119,93,64,231,-200,103,210,80,0,51,70,75,2,95,49,49,65,25,68,1,130,40,1,50,-48,66,40,3,95,49,50,49,96,108,141,208,160,102,64,6,236,229,0,160,-95,0,57,128,39,193,41,65,144,132,94,109,90,141,82,97,216,97,162,160,-174,192,72,3,95,49,52,48,161,179,192,84,130,182,161,149,224,20,3,230,-132,11,160,116,129,40,194,122,224,141,0,227,61,4,230,165,0,163,39,162,-170,64,153,3,56,32,95,52,120,59,0,64,230,233,14,190,200,64,10,210,-180,192,7,192,11,224,141,1,224,107,2,227,18,1,1,95,52,92,24,224,-0,7,194,190,0,53,97,84,68,6,211,45,0,73,64,186,0,83,231,106,-6,224,7,13,224,205,2,64,18,134,98,132,10,227,160,2,224,2,7,224,-140,0,128,15,227,217,1,224,36,12,224,37,20,224,40,4,224,41,34,238,-80,0,0,39,132,25,237,168,17,228,243,0,160,55,192,1,178,104,102,212,-231,58,1,224,5,3,231,70,4,196,237,224,66,1,99,216,161,227,164,127,-240,168,0,66,181,0,49,89,15,195,236,163,148,122,127,65,184,196,93,3,-95,55,54,52,64,12,84,21,224,22,2,192,228,224,88,3,224,85,9,160,-50,233,229,3,0,95,222,153,64,0,197,55,224,2,17,226,246,3,225,27,-2,161,55,225,115,5,224,28,19,225,178,3,193,135,193,26,230,37,4,224,-20,0,224,8,2,1,95,55,183,169,197,2,128,2,161,110,224,197,3,64,-15,226,32,3,90,56,226,167,1,194,240,225,252,2,173,180,160,42,192,19,-197,216,96,129,160,172,226,107,7,192,92,160,62,192,195,98,28,224,5,3,-193,65,224,57,3,162,49,224,25,10,160,2,224,25,17,226,169,1,225,112,-3,192,164,64,19,226,247,1,225,39,5,133,249,106,120,233,3,5,160,68,-96,86,224,80,0,228,211,2,224,224,8,66,112,96,61,128,39,134,204,64,-53,202,129,228,57,0,64,126,0,95,125,84,72,27,230,221,7,224,28,16,-2,95,49,53,197,162,128,0,198,192,234,36,1,130,29,225,241,3,227,225,-2,224,210,5,160,247,224,128,7,224,215,0,224,236,3,224,218,0,198,242,-224,249,2,200,90,226,93,11,226,192,1,228,2,2,226,92,255,226,92,45,-226,90,1,96,0,226,2,14,225,67,3,64,13,226,8,31,224,165,6,96,-26,193,4,231,205,4,128,155,192,149,201,187,247,208,3,64,0,96,149,64,-106,227,2,13,123,94,224,120,8,224,136,10,237,237,3,128,57,142,115,227,-105,19,128,212,128,185,0,51,114,41,0,57,97,53,226,238,7,230,203,2,-160,3,234,94,5,225,76,2,224,90,1,232,140,3,98,147,225,175,3,242,-242,1,226,246,3,200,179,229,234,1,161,6,140,73,227,142,16,64,84,239,-238,8,243,206,5,128,179,64,40,80,83,130,177,232,136,1,232,146,3,130,-200,192,208,225,42,3,224,98,1,226,82,6,233,158,1,224,89,8,163,79,-64,251,64,66,65,62,199,84,224,82,4,224,77,16,225,209,1,161,174,171,-164,235,160,2,224,74,6,203,112,252,5,11,11,110,111,116,32,101,120,112,-111,114,116,101,100,252,11,0,96,0,73,230,209,160,0,82,64,107,110,251,-204,124,81,114,1,57,51,202,144,2,95,52,57,75,194,130,44,161,125,66,-109,160,7,224,121,12,1,58,32,128,111,2,95,52,50,161,68,0,58,136,-125,81,237,225,43,4,229,37,0,237,233,0,226,217,5,194,15,232,26,4,-161,197,229,119,7,224,24,2,163,223,229,137,6,226,123,0,224,11,1,1,-83,32,200,54,229,129,28,162,162,228,209,0,97,230,251,98,11,215,252,192,-13,163,22,128,16,224,181,2,229,159,3,192,155,227,36,4,228,101,2,96,-56,140,49,0,56,230,248,5,225,30,2,96,102,225,59,0,230,102,7,224,-38,50,163,32,134,86,96,38,228,26,21,225,38,14,0,50,224,235,3,246,-251,0,164,12,224,21,14,165,118,161,10,129,228,88,134,133,108,247,201,7,-225,73,1,225,180,25,198,55,128,48,225,180,5,224,145,2,237,95,1,224,-13,11,247,170,14,161,41,230,41,2,108,45,224,184,1,224,0,3,230,25,-0,224,182,28,196,252,224,129,22,224,171,77,224,170,37,217,182,224,128,22,-224,170,84,227,216,53,194,92,224,151,13,233,132,1,160,13,227,217,45,155,-87,0,53,162,201,160,74,3,95,49,48,53,167,215,96,48,0,55,145,103,-227,253,9,241,92,1,1,95,56,112,228,163,36,197,20,128,8,103,207,163,-220,224,163,0,247,247,0,64,125,148,204,241,22,5,192,109,195,102,229,130,-5,229,150,1,128,27,225,4,0,70,29,1,56,49,206,158,128,67,209,122,-1,90,32,192,166,97,160,84,33,0,50,116,130,82,39,230,34,3,192,87,-160,116,160,108,192,17,233,196,0,192,17,96,209,100,45,154,192,242,242,1,-3,32,95,51,57,64,129,230,226,26,230,215,19,15,117,110,100,101,102,105,-110,101,100,32,109,111,100,117,108,101,230,231,8,111,130,98,172,0,79,96,-15,224,187,1,96,2,97,255,65,104,0,54,232,217,10,224,242,5,160,37,-0,95,91,76,86,94,162,5,247,40,0,160,46,64,102,170,60,98,60,1,-95,54,202,67,179,157,168,52,0,75,224,57,0,192,63,65,110,219,123,225,-94,1,224,89,1,224,2,0,162,195,224,21,6,160,223,194,215,99,131,144,-100,87,30,128,133,224,31,4,193,119,106,157,183,118,225,32,2,171,61,0,-53,225,147,0,212,106,96,192,224,244,0,224,215,0,64,190,0,54,226,45,-1,236,249,3,212,1,96,149,225,25,7,192,199,131,227,130,35,226,171,4,-226,156,6,128,70,180,198,0,51,235,207,1,226,82,0,96,137,151,149,0,-80,87,161,64,31,247,91,8,65,20,160,20,236,122,5,163,217,1,50,51,-115,251,224,11,2,193,52,64,12,138,36,64,142,196,176,169,177,234,174,2,-160,65,128,0,224,48,16,224,40,7,66,104,0,55,72,255,64,163,151,255,-162,11,235,47,7,162,28,224,9,4,224,29,1,224,9,4,233,118,1,233,-128,2,224,210,0,138,214,132,115,106,200,88,21,102,209,98,62,162,37,149,-125,114,214,0,95,118,119,114,242,0,52,129,152,129,197,1,95,50,65,148,-2,53,50,57,96,30,0,57,245,64,1,97,243,0,48,86,75,179,22,97,-2,249,226,3,96,4,160,21,224,23,10,139,186,245,135,13,166,137,228,229,-1,168,147,132,115,251,150,1,161,92,232,155,9,224,148,6,224,128,0,96,-15,225,215,6,224,7,9,230,199,27,224,166,2,96,16,231,49,1,238,181,-3,161,181,166,237,128,81,194,130,69,174,193,78,0,67,130,248,96,50,224,-222,7,224,0,3,81,141,129,127,2,95,53,51,67,185,2,95,53,51,64,-54,160,118,225,172,15,196,189,225,175,36,225,23,5,238,175,4,97,34,130,-105,0,80,225,195,13,224,84,1,129,78,193,5,129,0,192,39,227,166,7,-128,195,103,32,178,117,226,2,30,160,228,224,85,26,239,194,1,226,88,45,-72,33,0,54,122,147,156,248,224,239,8,228,51,6,193,249,193,75,226,53,-1,224,13,5,199,88,96,153,160,43,236,27,2,236,30,1,226,71,5,160,-34,224,61,0,126,16,227,84,15,235,243,0,226,240,7,160,132,224,10,2,-225,175,1,133,97,225,49,6,70,137,172,157,166,166,233,73,1,169,65,193,-72,1,95,56,129,115,225,63,1,122,169,2,95,53,51,161,91,128,98,224,-218,0,224,155,9,240,235,17,192,54,242,50,1,195,121,225,50,0,193,39,-133,16,64,52,224,93,2,0,83,160,53,123,67,226,119,3,0,85,96,43,-235,95,4,1,95,55,67,111,0,85,101,240,160,215,227,191,1,64,0,226,-148,12,224,165,26,160,145,64,168,228,19,6,224,79,6,228,36,2,224,0,-2,64,178,111,22,252,232,5,229,0,52,99,236,242,145,20,194,49,224,211,-9,234,249,2,224,211,9,97,204,224,85,32,160,82,225,105,8,224,0,1,-225,18,13,3,64,64,95,57,133,29,2,49,48,56,104,231,130,108,131,90,-224,5,0,92,239,1,53,53,66,139,131,231,224,6,5,192,7,98,26,103,-29,73,83,2,95,51,54,98,12,123,208,96,21,101,82,199,51,71,225,155,-218,3,85,32,75,52,96,227,64,18,146,6,64,209,71,111,96,78,197,169,-64,59,0,52,167,188,132,181,2,95,52,57,167,168,169,197,194,156,135,201,-0,55,69,221,137,123,130,65,158,109,64,92,128,56,64,9,224,57,26,160,-222,98,206,210,224,99,153,0,58,128,233,1,10,65,137,226,99,35,77,251,-96,99,96,11,138,172,128,13,228,1,1,228,133,2,255,97,5,173,96,128,-142,3,54,32,95,56,69,63,225,141,2,64,45,1,56,54,137,143,192,76,-0,67,96,100,65,63,64,155,229,136,2,224,99,0,96,96,3,95,49,49,-48,64,213,235,188,2,131,4,224,22,1,224,59,0,128,192,161,204,0,48,-95,12,129,23,0,49,73,147,193,2,64,113,2,95,57,48,76,149,0,48,-96,23,221,187,1,52,54,166,57,229,92,1,132,78,130,164,98,173,0,49,-95,82,68,224,134,32,236,226,7,4,79,32,35,57,55,195,210,2,95,49,-49,106,232,136,39,64,133,197,37,6,95,56,51,57,32,95,55,65,167,3,-95,49,56,56,64,10,64,9,2,55,55,32,240,146,0,96,115,224,28,7,-97,215,224,60,18,96,205,1,35,49,222,130,68,52,107,45,1,95,53,96,-224,132,254,128,177,75,115,2,95,49,49,158,174,3,95,52,49,49,130,21,-204,201,2,95,52,56,98,74,96,49,0,52,97,123,224,36,1,0,54,158,-217,65,220,138,156,162,36,231,152,0,161,241,183,77,163,247,0,83,97,246,-65,89,65,120,1,51,32,238,14,1,1,45,62,141,254,130,24,96,31,64,-151,67,143,64,158,197,32,160,68,128,71,164,98,224,74,7,0,61,160,74,-226,103,2,64,36,137,73,160,72,229,146,3,160,76,160,162,192,79,3,79,-32,35,49,66,123,192,121,227,4,5,192,41,137,151,200,125,171,111,226,172,-2,229,221,2,80,148,2,52,50,48,139,169,96,8,66,23,162,14,128,34,-225,32,5,1,51,53,163,44,161,16,96,15,64,114,66,211,224,48,11,160,-182,3,56,53,57,52,192,116,225,78,20,224,207,1,224,248,6,1,56,54,-69,47,225,42,3,225,69,11,193,25,225,26,1,174,44,224,16,1,98,26,-238,244,28,193,63,161,76,195,226,225,79,18,66,103,78,233,131,233,97,80,-65,90,1,53,55,180,136,64,37,227,227,6,227,79,55,101,174,232,254,4,-225,249,28,64,25,64,159,193,239,226,9,0,200,100,100,159,68,85,64,170,-102,201,96,93,100,97,66,135,0,48,196,79,67,121,143,31,192,81,100,80,-160,6,64,29,143,49,129,201,2,95,49,49,174,143,66,165,224,22,2,0,-53,64,93,64,22,142,166,227,58,1,10,80,114,105,109,105,116,105,118,101,-115,46,99,69,64,35,134,232,133,111,224,115,2,66,189,224,129,8,96,48,-135,6,0,75,234,139,0,0,83,163,177,130,173,224,5,4,76,192,151,236,-194,7,1,95,53,65,122,102,164,0,52,64,175,0,51,97,191,220,148,128,-37,131,186,224,41,21,64,137,71,119,100,201,252,16,0,3,66,32,95,54,-110,253,0,50,120,168,146,53,100,225,0,35,81,1,228,224,2,64,150,135,-223,105,85,218,123,96,26,133,32,72,23,64,236,97,165,225,66,12,164,211,-99,54,101,69,1,54,50,194,89,229,240,14,224,79,21,164,216,224,79,25,-98,179,160,172,0,54,161,141,0,75,128,214,130,61,129,18,5,55,55,32,-95,56,53,119,247,2,50,50,49,160,11,80,69,170,104,66,217,0,48,224,-34,0,1,49,52,233,225,4,224,64,18,65,144,231,137,1,224,65,0,114,-135,71,68,187,137,224,65,6,1,49,53,135,199,1,53,50,160,44,192,80,-224,202,0,130,219,224,120,18,1,53,48,64,185,64,32,224,116,0,77,200,-0,53,192,45,0,80,103,200,2,53,49,57,238,5,3,160,16,96,42,66,-228,2,57,53,52,82,143,160,230,169,28,0,73,66,59,236,44,4,96,124,-108,44,142,36,230,81,3,178,172,96,204,164,56,96,149,243,175,1,224,76,-11,0,49,66,175,160,77,235,187,0,96,146,0,55,102,9,108,223,179,41,-241,214,0,238,4,9,247,122,20,195,147,64,7,204,6,239,184,9,232,242,-4,64,17,196,168,224,0,4,160,20,160,44,226,40,1,225,111,1,65,124,-192,11,65,157,64,223,65,19,0,50,240,179,4,233,204,0,225,239,1,169,-85,2,64,95,50,137,192,129,255,132,196,220,212,101,116,106,241,0,56,160,-8,64,87,2,49,48,56,132,156,140,18,96,217,117,78,240,52,4,160,249,-164,151,5,67,32,60,32,64,35,200,167,193,10,225,57,0,192,24,97,150,-128,1,224,237,0,67,45,68,66,119,117,96,0,160,158,140,219,162,15,227,-3,4,0,49,107,38,128,128,160,77,226,234,5,166,255,68,179,0,52,107,-214,142,216,248,170,5,224,167,10,193,58,0,85,204,98,208,18,224,126,2,-149,159,0,54,247,136,3,13,116,121,112,101,32,115,105,103,110,97,116,117,-114,101,137,58,128,151,240,72,4,224,215,4,224,209,12,64,41,168,7,224,-112,5,1,51,52,235,188,2,224,72,3,227,254,5,151,247,225,96,23,225,-52,0,226,51,7,224,128,0,1,95,54,103,67,225,53,11,128,0,224,54,-3,66,87,135,5,224,116,10,1,49,53,163,145,69,114,192,51,187,8,99,-159,162,18,229,40,6,0,49,140,68,228,17,3,136,219,102,224,3,49,48,-56,50,71,219,249,39,2,236,69,10,225,159,1,24,67,97,110,110,111,116,-32,115,97,116,105,115,102,121,32,99,111,110,115,116,114,97,105,110,116,217,-49,235,102,0,140,108,1,57,56,68,114,224,81,19,4,92,49,48,38,32,-64,0,14,102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,249,130,-0,2,49,52,57,223,130,161,34,136,4,3,67,32,95,56,97,178,105,99,-141,114,64,29,135,241,227,237,11,229,139,4,0,95,228,25,1,241,121,6,-129,55,1,55,50,230,247,2,27,92,51,52,38,115,114,99,47,77,105,99,-114,111,72,115,47,84,121,112,101,67,104,101,99,107,46,104,115,64,27,7,-44,49,50,57,56,58,49,57,128,178,2,85,32,90,97,133,1,49,56,64,-96,66,72,79,246,1,49,48,224,199,1,172,143,226,113,1,166,195,142,95,-0,51,73,184,164,147,70,16,193,236,177,72,224,172,57,2,51,48,52,224,-172,0,217,178,177,181,227,34,1,134,0,192,0,226,144,4,1,53,49,66,-255,64,226,225,68,1,226,128,23,164,72,224,29,5,98,45,1,53,49,202,-176,1,54,56,231,11,3,98,219,176,159,225,41,2,74,184,0,52,193,31,-227,124,12,73,88,74,0,242,205,5,206,3,111,41,96,188,240,177,7,96,-10,208,208,96,12,1,49,53,65,195,0,53,64,237,224,160,10,224,19,12,-230,139,1,64,0,0,58,135,207,130,144,1,49,53,75,113,102,26,96,24,-207,13,224,139,0,164,37,0,50,109,22,64,33,137,220,0,83,168,163,224,-228,3,163,243,0,90,229,94,1,228,48,9,188,187,160,204,229,131,3,225,-78,4,226,96,2,100,18,1,49,54,121,161,140,82,160,61,224,96,4,225,-212,9,229,59,4,0,49,145,107,129,64,224,177,3,204,146,98,89,104,203,-236,107,1,64,110,1,95,56,66,9,192,0,160,89,0,53,65,95,1,95,-55,200,103,2,49,50,56,189,90,64,184,108,158,0,56,103,100,193,109,0,-54,97,50,136,137,241,55,3,166,13,182,220,130,137,245,217,3,229,29,1,-214,110,209,85,136,234,180,23,241,66,4,237,172,0,2,49,53,49,90,236,-81,106,0,35,97,222,64,25,0,54,69,84,109,198,171,83,194,84,64,73,-192,92,226,57,4,224,76,15,64,215,173,105,1,54,57,69,66,0,53,96,-133,96,39,65,238,0,55,65,238,192,13,77,147,1,95,49,81,56,64,25,-72,133,224,39,1,224,53,5,76,169,224,13,1,116,89,96,13,64,110,234,-222,1,100,146,0,48,65,133,67,87,65,10,1,55,53,139,223,236,58,15,-64,77,194,193,173,235,226,155,1,0,50,64,245,0,75,226,173,8,84,158,-82,19,148,213,230,237,0,228,75,5,228,109,1,194,129,229,230,5,0,50,-105,116,139,240,228,23,9,0,95,85,20,244,141,2,128,160,221,28,130,228,-132,143,141,202,0,54,68,97,64,34,230,111,0,75,222,1,64,95,66,98,-64,22,134,104,128,101,0,48,74,15,86,25,0,50,65,84,1,49,54,96,-142,0,54,65,187,182,22,0,58,134,131,231,218,13,168,79,66,161,105,66,-98,169,137,85,0,64,195,179,138,41,234,38,6,204,218,224,25,9,99,18,-224,25,12,193,87,98,240,230,71,0,96,21,0,85,163,21,192,115,128,144,-131,29,96,9,71,73,195,108,224,67,9,96,25,78,164,229,162,4,224,43,-13,96,185,71,120,129,85,161,163,114,141,224,58,6,230,4,0,224,141,1,-193,15,224,211,0,162,120,192,179,224,105,4,224,27,2,204,108,215,243,109,-29,248,9,0,203,203,224,98,0,160,38,224,13,6,229,15,0,246,157,0,-103,8,229,81,1,238,109,0,139,237,192,63,134,127,102,190,0,51,236,114,-6,236,69,4,246,95,6,224,125,0,162,206,246,100,9,224,96,2,182,100,-160,44,131,75,160,12,176,100,2,49,48,49,68,64,120,19,227,111,1,128,-0,234,35,4,182,163,249,8,4,246,151,5,224,121,1,96,96,183,98,224,-69,6,0,50,69,170,224,69,6,128,131,0,56,195,170,160,136,229,251,2,-97,230,224,97,2,225,183,17,130,173,226,31,0,225,134,5,129,113,161,160,-226,101,2,225,84,2,108,85,204,5,225,206,1,193,185,224,40,1,225,191,-16,225,193,4,100,65,225,199,14,225,166,1,248,77,18,224,37,5,192,34,-134,134,193,91,129,94,225,122,0,65,123,248,94,0,225,207,1,225,204,39,-226,25,20,226,132,5,193,233,224,142,4,251,131,3,185,90,251,121,22,111,-242,173,194,161,164,187,207,231,160,5,135,162,224,187,4,129,171,230,136,3,-96,188,72,37,136,42,99,254,137,203,100,0,149,89,192,0,226,142,37,105,-206,226,66,9,128,73,237,137,7,107,75,156,250,64,245,224,31,6,99,140,-224,69,1,241,93,1,170,156,238,170,1,225,108,0,111,33,128,171,235,226,-1,2,63,63,63,171,189,2,95,49,52,103,41,209,200,226,160,11,160,0,-70,130,202,114,225,207,0,238,218,16,227,62,5,227,16,1,227,35,2,229,-42,4,64,17,128,33,224,52,3,224,58,4,160,59,229,28,1,224,28,4,-225,244,0,224,2,8,192,32,128,104,239,251,5,227,247,11,160,70,90,7,-102,79,229,110,7,228,176,11,218,44,161,136,130,192,224,236,1,120,32,224,-160,0,226,143,8,130,116,119,228,226,90,5,229,162,0,96,122,228,103,2,-241,20,1,227,92,2,224,197,8,226,46,5,225,124,3,224,157,4,225,69,-0,225,138,3,212,217,182,45,246,52,0,224,36,1,226,208,6,225,127,3,-230,183,3,225,67,8,241,52,3,253,17,15,1,49,52,79,230,171,58,164,-125,99,88,75,19,120,79,1,49,49,148,72,224,147,0,97,148,172,118,227,-237,5,224,189,0,1,95,56,80,65,229,123,6,229,82,0,64,116,163,181,-129,97,232,199,7,96,219,164,83,64,16,96,218,132,230,3,95,55,54,52,-79,85,130,54,225,64,18,64,4,192,141,239,119,40,4,55,48,58,51,49,-163,185,64,154,64,126,76,222,133,138,225,16,3,1,95,56,75,193,225,106,-28,254,93,4,225,112,9,231,174,2,64,252,212,203,109,125,224,238,25,0,-65,224,238,51,4,54,57,58,50,53,224,238,0,246,30,2,227,249,1,226,-192,5,227,34,2,226,192,17,64,244,214,46,64,7,128,213,166,57,192,38,-214,15,0,32,226,73,5,69,3,254,82,0,228,251,8,130,123,128,143,229,-139,7,1,49,50,66,122,160,17,142,72,64,23,166,218,164,137,226,111,1,-64,184,229,31,2,199,29,234,149,1,206,65,128,31,200,137,194,207,128,45,-160,19,231,35,1,192,230,162,242,237,27,16,64,11,228,242,7,241,33,5,-135,84,96,24,98,62,1,53,48,140,130,96,10,230,225,3,225,74,0,225,-48,10,0,51,95,208,193,31,1,53,48,64,111,109,37,90,140,1,50,57,-154,145,160,68,65,120,0,54,193,120,237,50,1,237,51,1,0,53,156,114,-109,51,96,45,174,240,86,117,1,75,32,76,153,224,1,13,139,148,192,0,-64,86,133,114,64,66,238,196,0,235,93,1,161,68,0,55,96,16,1,52,-57,228,214,0,245,2,4,105,5,64,6,2,50,56,49,226,241,2,5,101,-120,112,111,114,116,98,207,64,93,0,51,96,93,83,236,244,64,6,104,145,-2,50,48,55,224,58,2,6,116,121,81,73,100,101,110,128,60,1,64,85,-89,194,192,164,213,240,225,23,0,0,55,97,84,226,133,14,212,82,216,140,-250,82,4,104,13,97,114,224,58,4,224,55,10,226,46,4,0,52,129,116,-224,51,37,0,57,195,8,224,51,33,0,53,143,121,251,76,9,66,212,114,-231,0,73,114,206,165,163,227,43,1,96,54,226,194,4,243,132,4,104,249,-225,229,0,224,142,13,1,49,50,123,142,227,27,13,99,103,231,77,3,232,-150,1,232,98,0,224,2,1,160,183,224,47,7,192,5,227,39,10,0,50,-66,137,224,0,1,226,190,3,249,28,5,225,241,5,192,98,230,7,1,105,-223,219,116,103,193,145,157,0,56,250,196,1,165,225,247,107,12,87,186,7,-97,32,99,108,97,115,115,32,183,93,0,52,180,36,225,148,6,224,166,7,-225,39,2,224,28,13,227,134,1,224,54,9,227,162,2,64,14,237,43,4,-224,2,3,225,9,3,233,11,3,129,3,224,5,0,213,183,114,51,117,184,-224,32,6,0,80,203,84,0,32,159,83,116,46,71,186,82,29,150,214,224,-10,13,235,207,8,151,199,65,100,102,98,225,102,1,132,46,0,56,83,163,-0,64,225,96,2,26,115,117,112,101,114,102,108,111,117,115,32,105,110,115,-116,97,110,99,101,32,98,105,110,100,105,110,103,231,6,1,225,10,2,224,-1,11,235,146,19,224,58,4,194,122,238,12,0,0,39,192,8,193,72,224,-100,0,64,25,224,112,0,128,55,240,177,6,224,142,4,2,95,49,50,116,-8,64,0,226,230,6,203,11,224,79,6,128,18,224,93,1,128,16,224,13,-4,128,10,230,117,4,169,236,231,164,7,64,0,167,235,224,104,4,224,158,-1,226,171,7,170,0,224,2,6,192,168,224,30,3,226,99,2,103,161,0,-66,96,37,65,15,248,50,10,224,252,24,192,88,163,136,187,235,224,178,4,-133,212,0,49,64,178,236,13,2,240,49,8,0,49,98,130,225,23,4,170,-2,192,78,239,96,4,105,196,96,46,69,83,79,113,224,60,6,71,87,0,-54,100,248,0,52,244,239,1,160,150,128,52,225,158,1,218,121,224,31,0,-1,52,52,230,113,0,224,192,1,128,69,224,19,3,0,50,170,88,224,19,-2,216,53,232,160,0,132,160,1,50,56,98,194,224,58,1,0,52,148,70,-64,184,225,249,1,68,174,226,1,1,138,202,0,57,78,253,163,192,234,63,-25,226,110,1,224,23,1,162,251,144,120,233,72,6,64,164,123,155,192,222,-234,108,6,234,76,5,128,0,226,153,3,172,66,168,53,100,19,0,57,137,-61,68,82,0,49,226,210,4,70,231,150,50,225,26,3,97,164,229,180,2,-165,219,160,14,0,49,103,205,161,52,139,178,3,83,32,95,54,87,140,64,-147,0,35,174,193,253,35,1,0,58,128,140,120,41,2,32,95,54,64,213,-64,28,0,55,86,177,96,35,64,25,0,55,65,114,108,66,64,20,139,14,-228,195,1,68,184,0,34,128,26,0,54,168,225,104,221,75,101,1,52,53,-226,103,1,1,52,54,64,155,155,82,0,57,88,201,241,144,3,69,192,99,-17,74,6,161,4,113,136,129,74,1,95,52,97,111,64,99,137,230,133,205,-0,52,121,201,99,140,81,200,91,57,160,19,64,41,169,205,200,36,167,244,-65,223,246,4,2,214,242,161,249,160,25,169,42,0,85,154,226,232,24,3,-113,254,162,123,130,186,232,128,11,128,62,232,127,18,228,97,3,224,92,2,-192,202,96,99,201,178,163,7,233,182,2,172,194,2,52,57,50,228,129,8,-224,94,60,160,90,194,32,138,184,3,95,49,52,56,78,74,88,171,64,21,-138,135,242,133,4,233,65,25,242,240,0,96,115,230,185,7,1,52,52,131,-85,228,186,4,234,209,3,206,129,64,92,228,6,0,96,83,200,240,0,83,-141,5,64,57,237,243,7,96,28,99,203,224,60,2,1,95,54,220,153,246,-54,1,192,56,230,57,6,64,16,70,142,129,124,111,50,1,95,55,221,51,-192,0,132,43,231,248,7,131,228,227,51,1,9,109,97,108,102,111,114,109,-101,100,32,71,244,11,100,97,108,111,110,101,32,100,101,114,105,118,231,249,-1,192,145,225,12,3,233,239,6,130,182,136,201,164,222,0,32,233,238,0,-98,6,226,246,15,96,49,248,245,8,77,53,126,38,224,249,5,164,245,226,-105,6,224,44,14,125,30,161,10,128,27,225,13,14,234,121,24,12,100,97,-116,97,47,110,101,119,116,121,112,101,32,234,126,6,225,175,2,165,192,64,-65,245,180,3,66,162,140,38,99,42,0,56,68,27,126,105,64,24,197,87,-229,243,1,69,40,65,93,102,63,1,50,50,109,146,0,52,79,116,64,59,-66,199,198,244,224,209,12,165,209,224,209,19,2,67,97,110,96,212,65,228,-224,206,0,126,29,0,52,233,175,3,130,119,250,183,0,64,8,97,81,230,-31,4,0,58,128,207,5,10,65,32,79,32,80,224,110,13,11,68,97,116,-97,46,66,111,117,110,100,101,100,192,7,96,116,77,190,64,172,224,57,21,-3,69,110,117,109,96,4,192,51,0,55,65,119,224,51,21,224,4,0,224,-51,0,64,171,224,103,22,3,113,46,69,113,224,47,0,65,103,224,47,21,-4,73,120,46,73,120,224,47,0,224,199,25,2,79,114,100,64,3,192,49,-0,56,65,215,224,49,21,82,150,3,97,98,108,101,224,8,0,224,59,0,-225,1,20,11,71,72,67,46,71,101,110,101,114,105,99,115,192,8,224,167,-29,29,76,97,110,103,117,97,103,101,46,72,97,115,107,101,108,108,46,84,-72,46,83,121,110,116,97,120,46,76,105,102,144,1,64,126,66,36,224,68,-16,17,84,101,120,116,46,82,101,97,100,46,73,110,116,101,114,110,97,108,-96,13,224,60,0,67,112,224,60,21,3,83,104,111,119,96,4,224,51,0,-69,23,232,188,4,66,118,216,16,231,55,0,137,48,105,45,205,68,3,49,-52,54,51,232,32,2,224,84,0,226,224,2,251,151,0,160,10,227,135,0,-248,213,5,130,174,0,56,196,225,137,168,165,8,233,181,5,224,68,1,195,-207,64,61,224,17,0,224,20,3,224,21,7,224,24,1,224,25,11,224,28,-1,224,29,4,224,83,1,96,5,230,42,6,224,48,16,224,2,3,236,110,-0,165,201,236,146,11,150,165,72,216,224,83,26,224,80,2,129,35,224,81,-9,2,32,95,55,71,99,203,237,225,164,1,7,115,104,111,119,115,80,114,-101,130,180,224,108,20,204,14,192,103,224,1,1,105,107,224,25,12,239,210,-0,224,22,14,224,104,11,142,145,246,211,3,224,201,4,0,67,109,143,128,-5,236,145,0,64,84,2,95,56,55,105,114,0,39,109,171,129,23,0,85,-107,152,235,138,6,224,220,11,128,2,192,34,224,169,1,232,95,0,161,238,-230,130,2,98,251,67,48,254,144,1,224,230,6,224,234,4,224,28,22,224,-253,3,128,28,128,114,224,2,0,231,96,1,224,67,14,224,65,8,239,231,-0,224,8,18,205,209,64,57,160,231,97,90,130,218,0,52,66,215,0,85,-227,211,2,66,46,4,80,97,114,101,110,194,46,192,113,128,83,105,5,160,-52,2,79,32,35,84,47,161,123,129,44,0,57,107,244,75,226,226,73,4,-194,177,128,140,96,58,0,51,224,58,1,64,35,224,102,2,237,147,0,225,-126,5,206,174,1,85,32,247,51,1,225,235,7,251,70,5,144,237,225,77,-2,161,10,64,90,193,6,64,8,226,109,0,64,5,162,36,226,22,2,243,-147,1,64,9,132,166,128,156,138,115,89,69,128,165,3,79,32,35,49,86,-204,224,215,2,224,253,0,224,250,2,79,253,224,34,6,239,137,1,64,1,-180,134,128,59,224,119,29,67,244,192,83,1,85,32,254,229,2,96,113,0,-49,83,29,192,30,105,13,64,131,254,224,8,2,64,85,32,89,230,174,204,-1,55,55,160,209,0,48,236,135,4,96,10,64,4,225,212,1,108,122,0,-52,159,111,64,203,186,190,224,32,1,0,55,87,255,226,102,7,2,83,116,-114,235,20,1,161,236,1,48,48,133,17,224,58,1,226,162,13,228,209,3,-226,121,5,224,50,2,65,106,0,54,224,187,0,1,95,57,96,91,142,96,-177,88,1,49,49,178,222,239,178,5,240,192,0,3,95,52,54,52,97,63,-0,49,226,173,3,103,47,218,60,0,83,100,163,3,49,52,56,53,65,80,-1,55,52,138,72,234,44,5,64,136,225,68,0,65,91,65,187,64,20,225,-180,1,69,95,138,151,64,92,0,54,237,130,0,0,50,193,230,65,175,0,-54,64,12,64,31,143,43,96,120,65,89,5,95,49,51,49,32,35,116,131,-64,93,64,185,1,35,49,106,124,64,44,143,46,130,89,64,50,243,239,1,-64,162,254,250,4,231,166,16,98,136,236,60,7,64,19,147,52,97,116,70,-204,128,17,96,101,230,142,13,3,114,101,97,100,225,187,0,128,45,176,70,-69,220,211,25,96,64,64,217,242,77,4,124,208,65,176,224,78,1,4,101,-114,114,111,114,130,7,82,35,65,225,130,68,224,113,9,0,32,139,165,2,-102,105,110,171,48,226,203,3,128,4,226,5,4,97,59,143,33,0,75,90,-151,192,249,160,163,64,29,143,41,2,75,32,90,146,84,237,54,1,245,185,-15,232,89,0,232,86,7,228,198,3,135,237,232,168,0,252,60,2,232,49,-0,163,30,129,35,128,114,243,116,2,245,70,9,224,91,5,226,8,0,225,-162,13,6,116,121,112,101,82,101,112,161,35,196,159,212,188,0,79,123,238,-228,228,2,160,91,160,135,131,12,64,214,99,246,0,49,138,55,225,181,6,-8,109,107,84,121,67,111,110,65,112,192,100,238,240,0,224,64,37,224,162,-0,104,188,68,133,227,227,0,96,175,132,77,131,86,224,40,36,1,95,54,-92,138,2,54,50,53,226,145,0,226,39,3,238,26,4,64,0,66,11,206,-146,235,63,34,204,191,160,155,64,1,235,62,41,166,36,226,80,6,225,240,-7,227,162,2,227,184,2,226,6,20,5,99,111,109,112,97,114,141,37,102,-51,0,55,79,100,129,166,160,150,235,181,14,235,191,4,248,113,2,107,111,-235,89,0,128,5,170,218,128,68,160,74,233,241,8,64,58,100,104,240,168,-4,235,196,1,98,120,65,145,97,190,234,86,1,239,216,1,102,156,197,250,-212,151,228,96,27,1,60,62,235,55,2,160,161,128,73,67,92,224,81,43,-225,87,4,64,0,199,116,224,57,24,1,69,81,192,52,200,157,225,199,0,-193,53,193,50,97,41,227,170,7,224,95,23,1,76,84,233,244,4,224,90,-14,75,124,160,87,225,144,4,224,93,23,0,71,192,93,160,47,139,185,232,-114,23,160,37,224,29,5,232,235,2,227,148,0,229,188,6,131,148,146,14,-1,75,51,96,196,230,247,8,229,211,8,64,51,79,211,227,200,39,176,233,-96,0,227,199,136,1,61,61,227,194,0,101,91,122,48,237,237,0,149,120,-138,253,227,215,3,172,40,203,145,227,145,10,237,126,2,64,55,237,139,8,-227,158,92,1,38,38,227,158,71,193,46,64,0,227,153,32,2,84,114,117,-227,208,0,226,208,22,226,201,15,233,11,0,65,96,227,97,0,227,194,6,-224,135,23,3,70,97,108,115,192,136,128,49,227,31,20,83,151,85,46,65,-144,151,187,129,156,130,18,78,143,183,14,111,253,98,28,226,16,0,108,175,-96,10,232,120,1,132,44,129,202,156,116,231,41,4,160,28,204,186,85,34,-0,49,75,2,96,0,124,1,0,57,90,53,106,208,1,56,56,154,64,4,-95,49,55,55,32,150,196,120,222,0,55,186,79,140,108,192,199,203,140,0,-89,128,157,0,80,64,159,0,55,227,160,2,5,102,111,108,100,114,49,232,-209,2,131,220,109,103,227,176,15,176,165,64,94,0,54,235,65,35,64,229,-235,65,12,227,216,2,129,236,98,10,122,219,132,126,129,177,64,112,251,11,-0,1,49,52,75,21,128,52,236,87,9,224,224,1,9,87,97,114,110,105,-110,103,58,32,99,246,141,10,227,246,0,129,115,0,57,117,44,224,77,19,-4,32,121,101,116,44,160,60,65,202,90,18,226,62,11,204,89,130,211,74,-226,98,147,130,47,64,32,139,62,65,54,5,73,79,46,112,101,114,89,27,-0,73,204,50,67,145,2,55,32,95,79,48,90,179,129,78,0,49,160,16,-96,62,139,95,168,46,196,72,132,174,116,23,129,145,209,33,224,13,9,231,-38,0,124,68,0,50,96,165,175,25,229,144,75,128,77,229,144,24,64,9,-247,129,0,96,80,143,209,164,178,222,159,108,75,172,80,218,184,231,230,8,-96,110,131,126,228,71,0,0,66,205,8,207,18,96,214,0,54,65,190,99,-92,176,28,230,62,30,1,116,111,224,171,42,228,42,5,243,191,8,192,120,-224,171,8,128,195,196,78,224,183,13,228,215,2,226,147,7,231,165,22,224,-199,0,130,93,139,177,0,85,72,30,164,89,102,161,198,167,64,34,136,63,-232,11,36,249,146,3,96,0,226,150,5,226,119,3,242,173,5,226,133,11,-228,85,2,64,23,235,108,1,224,16,0,224,13,13,203,119,224,92,0,226,-200,9,224,47,6,128,2,171,141,162,107,214,101,238,118,0,130,240,99,141,-244,198,2,238,83,1,162,68,227,37,7,0,82,230,228,3,224,23,2,224,-51,19,2,66,32,82,80,240,125,195,230,195,1,128,5,226,164,9,2,109,-97,120,97,119,162,166,224,31,9,1,105,110,224,31,2,252,173,7,0,85,-254,185,1,167,96,240,139,3,128,244,97,61,71,10,166,228,0,53,74,39,-230,144,9,226,186,3,130,67,91,147,103,99,128,220,128,62,64,236,193,206,-226,0,9,240,53,7,227,79,5,240,18,5,160,176,1,50,50,102,38,192,-47,225,191,0,131,125,79,80,128,150,228,243,1,149,10,160,66,0,49,82,-231,224,233,0,199,222,2,95,49,48,128,54,96,18,2,53,52,48,127,97,-193,172,231,107,0,97,147,96,113,224,152,3,235,1,13,192,200,224,190,1,-0,89,96,151,162,213,128,226,97,37,151,13,224,50,3,128,47,128,121,224,-227,0,192,52,128,46,194,158,138,193,195,6,128,209,97,37,113,16,224,15,-0,163,233,129,209,6,49,49,50,56,32,95,51,123,81,97,237,83,56,236,-224,2,149,45,1,49,49,180,220,225,76,1,224,107,10,96,103,225,44,2,-64,79,118,211,96,72,2,49,52,54,128,67,64,9,248,91,2,225,112,1,-227,234,2,229,62,2,162,128,241,222,8,160,153,0,52,99,44,160,72,227,-233,0,66,130,137,230,2,85,32,90,201,169,64,20,137,51,105,42,86,5,-0,52,64,60,128,11,64,91,64,14,160,20,96,45,0,54,96,45,127,74,-0,83,105,194,0,48,224,129,0,99,64,193,137,83,133,0,54,64,245,112,-46,224,234,1,225,73,1,64,77,180,191,133,84,230,60,1,67,114,99,86,-1,50,53,131,122,64,43,244,190,1,230,253,2,255,169,9,230,5,0,129,-42,255,173,35,161,160,73,33,224,58,9,248,170,4,255,215,6,64,158,136,-226,123,32,136,165,232,162,0,2,67,32,60,85,135,64,42,237,75,1,5,-67,32,67,32,61,61,192,23,229,147,4,226,107,2,97,82,195,58,197,136,-3,32,95,49,56,64,43,64,57,137,115,141,202,224,54,1,160,200,100,252,-241,43,5,224,81,48,160,77,192,237,137,145,129,98,192,58,0,95,161,173,-131,2,2,95,55,53,235,29,0,96,61,141,115,100,61,1,57,57,68,214,-1,50,50,195,102,216,123,0,89,228,71,0,232,82,11,0,90,97,89,172,-144,168,100,68,2,227,252,5,224,57,1,64,1,235,217,0,137,57,132,70,-163,131,251,103,1,224,0,0,64,218,136,14,131,119,229,8,0,192,79,96,-241,229,159,17,228,221,1,254,115,0,199,39,224,2,1,96,40,224,78,1,-254,179,1,224,39,6,254,179,11,224,37,0,106,247,128,29,96,68,224,61,-16,160,62,224,29,7,96,2,100,162,230,48,4,96,0,235,48,1,250,245,-2,230,110,4,252,85,1,232,190,8,136,58,160,218,227,168,1,0,54,68,-66,226,139,4,239,255,7,230,156,0,165,134,0,48,98,77,97,112,1,49,-52,96,160,0,67,253,26,2,224,65,2,224,165,2,102,49,224,5,4,163,-132,244,97,5,231,20,5,1,54,52,196,154,193,23,251,133,10,64,8,203,-125,128,7,224,125,2,64,150,192,57,234,228,20,99,231,0,50,68,218,133,-127,133,103,0,56,243,71,0,241,53,1,225,166,2,231,38,2,163,90,224,-100,43,168,144,192,95,96,77,163,46,4,64,95,50,51,49,195,139,230,71,-0,252,15,3,192,51,224,243,2,224,2,0,129,254,225,255,0,129,91,224,-18,6,194,22,226,204,5,224,60,11,234,99,2,226,32,1,128,2,232,195,-7,227,207,0,98,234,193,211,197,121,64,39,155,132,96,249,202,11,64,22,-129,238,100,232,151,254,252,111,1,232,3,1,225,63,7,208,221,231,249,4,-225,121,9,237,61,4,64,108,97,68,241,212,0,202,84,241,207,6,160,105,-96,12,229,171,0,225,42,3,224,2,6,193,77,224,247,3,225,85,18,254,-255,8,225,100,90,136,131,225,100,60,225,11,9,227,203,2,230,195,1,164,-105,225,129,8,77,63,224,68,5,227,223,66,64,10,247,7,1,227,238,48,-227,239,8,224,12,3,128,166,235,175,2,247,130,23,192,63,172,41,192,69,-227,233,8,96,159,94,210,232,59,7,228,66,20,228,31,11,226,185,3,192,-39,65,123,214,159,143,33,1,49,51,69,210,233,132,1,6,114,101,99,83,-101,108,69,253,187,1,244,39,6,234,224,6,251,151,0,71,166,207,146,195,-84,224,40,0,127,171,224,99,1,2,103,101,116,207,131,224,77,3,0,58,-128,156,1,10,65,224,42,2,6,115,101,116,70,105,101,108,78,29,64,30,-139,45,224,30,1,13,68,97,116,97,46,82,101,99,111,114,100,115,46,83,-224,43,5,139,68,224,117,4,224,30,3,0,54,224,74,19,2,72,97,115,-224,43,3,211,243,96,218,150,179,97,74,0,51,128,30,235,6,1,160,28,-128,6,64,26,138,130,0,85,230,220,3,225,200,7,227,103,16,64,63,137,-212,66,80,83,34,1,48,54,128,85,252,208,0,74,218,248,15,4,234,195,-0,97,174,234,195,15,98,130,67,99,128,210,128,156,192,23,224,1,1,233,-85,19,230,54,8,160,11,192,31,128,87,226,240,1,230,158,3,245,164,2,-224,43,2,192,5,131,202,2,49,52,52,66,203,255,47,9,163,12,252,233,-0,175,174,194,207,173,44,4,49,48,57,52,32,146,149,108,237,153,75,128,-51,64,40,146,45,0,90,143,32,160,6,64,4,160,10,3,95,49,55,50,-226,27,2,27,92,51,52,38,115,114,99,47,77,105,99,114,111,72,115,47,-84,121,112,101,67,104,101,99,107,46,104,115,64,27,6,44,49,49,56,49,-58,51,214,197,96,143,64,138,0,56,67,221,238,154,7,225,100,7,67,42,-241,253,6,100,25,165,68,192,2,238,165,2,240,176,6,224,5,3,170,203,-224,92,0,126,24,229,172,7,224,17,9,234,188,0,192,56,225,39,19,224,-39,6,224,99,0,224,82,14,234,230,6,233,249,4,225,12,5,234,155,20,-160,43,231,28,4,199,25,2,49,48,57,163,29,192,40,192,110,229,171,0,-235,30,1,174,201,194,72,134,246,239,189,12,231,0,18,194,176,128,128,1,-52,52,97,186,135,89,1,56,54,229,205,0,237,60,1,206,127,129,0,133,-248,162,145,225,99,12,225,106,0,192,202,237,32,4,121,243,128,0,225,87,-0,179,154,129,109,135,19,128,108,173,129,160,20,171,90,65,6,0,50,80,-103,96,124,166,6,229,234,3,165,216,227,3,1,7,110,111,77,101,116,104,-111,100,230,26,2,235,167,0,224,248,22,130,10,226,23,5,160,13,224,23,-4,98,187,238,44,1,224,248,10,225,36,12,193,13,163,185,1,52,48,136,-231,195,202,0,56,80,47,241,144,1,244,58,0,224,163,25,232,112,1,227,-11,18,66,5,232,165,3,66,23,227,171,1,224,162,6,165,213,199,40,178,-84,128,6,64,5,118,238,66,139,225,119,1,12,80,114,105,109,105,116,105,-118,101,115,46,61,62,129,119,0,58,130,193,128,66,105,55,101,205,230,5,-1,143,118,233,85,0,0,67,89,184,236,77,3,224,25,17,96,91,135,101,-227,149,0,96,25,224,11,2,192,8,97,146,64,47,219,226,196,204,0,48,-154,38,99,174,81,146,114,108,66,41,1,95,49,80,165,233,10,2,1,95,-53,71,40,82,178,223,227,69,245,70,241,6,52,50,53,32,75,32,85,228,-29,2,192,1,151,172,96,0,224,28,9,128,1,230,133,0,224,37,18,224,-35,4,224,32,23,64,211,162,54,128,165,252,5,0,231,34,14,0,83,66,-55,132,234,141,210,199,1,242,122,3,163,174,65,177,224,28,4,96,65,132,-97,231,207,0,64,19,230,38,1,130,79,178,56,131,47,231,64,9,0,51,-99,199,228,209,4,105,241,229,44,6,128,157,200,13,235,112,5,224,23,5,-195,144,132,238,231,152,8,224,73,68,65,100,233,87,2,225,102,7,0,52,-152,152,161,184,64,15,97,52,130,79,96,60,137,121,226,146,5,76,130,162,-141,99,118,130,141,64,45,169,103,226,117,7,130,107,192,13,224,1,7,226,-102,72,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,226,217,4,-96,0,65,14,251,127,0,3,32,75,52,32,89,128,224,1,1,231,143,2,-96,42,235,244,2,225,164,7,0,49,182,42,128,112,66,145,109,247,225,164,-1,66,161,225,164,18,0,51,127,23,225,164,0,64,61,225,164,9,97,162,-224,234,3,224,1,3,225,161,187,224,14,5,225,175,9,97,26,229,130,8,-0,55,97,106,171,111,252,190,1,71,30,126,30,168,39,235,137,2,102,20,-65,183,128,15,80,144,99,144,163,171,224,67,1,74,86,246,72,1,65,167,-65,161,229,11,11,141,41,136,124,224,63,0,64,48,0,52,160,12,237,24,-0,246,236,1,64,43,105,212,0,48,77,193,64,44,0,53,140,231,198,51,-229,18,1,97,7,66,164,73,192,249,96,0,69,38,217,110,170,160,224,172,-2,0,48,111,153,235,112,8,65,67,0,54,161,67,0,89,201,154,65,115,-69,90,172,184,229,199,12,132,179,224,33,18,135,11,200,206,224,191,4,192,-25,249,163,2,133,158,224,187,1,224,49,5,160,109,165,247,80,40,197,50,-224,44,11,224,43,1,232,25,1,174,160,232,143,0,64,247,238,221,1,69,-162,166,180,235,57,5,235,117,0,0,95,64,61,128,13,98,4,96,34,133,-217,128,125,225,206,0,96,160,71,243,0,51,95,205,247,218,2,224,96,33,-1,49,52,65,172,128,103,236,72,2,224,56,40,96,148,236,49,6,96,24,-2,95,53,55,134,70,97,7,230,110,1,88,194,128,166,192,107,67,124,202,-12,0,80,105,55,64,66,1,95,51,113,77,224,252,25,1,95,52,177,167,-163,77,237,19,5,180,27,224,203,1,224,2,4,79,253,224,73,1,64,0,-236,222,1,224,60,0,244,51,9,224,52,5,224,112,2,96,48,237,70,6,-224,44,4,225,103,3,224,39,1,224,36,5,0,66,96,35,224,234,10,1,-95,52,80,218,131,133,96,249,161,106,130,114,65,102,135,152,136,248,227,103,-0,96,78,0,64,224,113,2,227,79,16,226,11,0,227,146,16,129,210,160,-197,224,33,12,224,231,0,128,105,160,129,224,32,2,191,113,187,151,251,79,-2,0,49,179,98,66,0,0,51,109,51,2,49,52,49,196,122,227,132,11,-227,133,2,130,30,128,104,251,221,4,64,67,80,42,0,49,175,72,164,181,-251,172,2,225,239,0,229,134,2,194,214,128,138,160,156,96,138,195,230,210,-96,133,101,228,24,4,3,95,49,51,50,80,151,0,51,74,174,236,108,1,-2,98,105,110,82,243,229,86,1,229,37,5,142,233,68,119,0,52,85,204,-0,51,224,58,3,2,78,117,109,240,254,0,224,240,0,196,118,130,61,218,-212,225,83,9,143,143,225,83,9,224,129,6,225,177,17,163,134,132,235,141,-178,160,121,186,115,143,17,3,95,49,52,50,193,145,192,1,253,45,3,1,-55,57,67,221,225,211,3,227,13,4,128,48,98,248,251,162,3,237,120,3,-224,28,7,225,3,32,140,55,64,8,167,168,224,249,2,231,113,5,235,246,-0,227,53,0,98,80,224,91,15,101,120,0,67,226,79,5,224,16,11,232,-42,7,126,115,1,56,54,225,227,3,5,102,117,110,100,101,112,97,230,0,-90,242,180,12,224,83,3,131,219,227,134,3,128,8,239,72,14,129,177,224,-184,3,2,64,95,54,78,138,226,24,4,199,231,224,45,11,0,49,74,54,-224,46,13,224,171,9,227,172,11,192,90,129,94,225,184,4,224,101,0,96,-102,137,23,224,102,9,96,0,226,128,1,232,16,14,96,42,228,192,18,228,-4,2,224,159,5,192,24,160,159,225,45,9,96,133,224,151,12,224,77,10,-128,135,232,31,6,227,40,7,226,210,0,228,174,4,0,48,141,62,0,52,-96,42,128,44,225,0,1,167,223,224,60,1,229,87,2,160,114,232,105,0,-227,169,57,225,122,2,129,17,227,137,16,224,202,9,64,99,140,145,1,49,-52,138,170,136,51,226,41,3,224,172,131,133,205,235,126,9,168,195,224,187,-8,226,248,6,230,40,3,101,252,96,142,228,236,0,71,155,143,6,128,192,-0,80,183,63,128,139,0,32,137,193,64,36,216,125,229,108,1,252,170,6,-64,104,0,48,68,57,100,66,120,184,0,56,64,98,80,117,239,227,0,226,-115,2,129,75,225,81,6,1,49,48,156,36,229,127,26,227,170,3,225,245,-29,102,46,229,107,1,1,50,50,224,49,2,101,76,0,48,65,19,225,198,-6,1,52,55,180,236,225,104,3,227,141,15,197,117,1,49,49,146,248,1,-48,57,81,117,226,0,2,224,92,8,168,115,224,92,10,235,97,1,228,146,-13,160,124,0,54,133,235,139,104,224,122,19,96,0,65,201,239,187,1,174,-94,225,234,6,65,39,226,15,3,226,227,1,224,36,3,143,150,0,83,64,-99,65,79,160,119,64,25,238,149,1,1,80,32,132,111,0,80,128,24,0,-54,224,87,5,197,120,224,87,5,204,151,0,90,64,241,2,90,32,64,86,-225,64,23,203,167,225,41,3,233,4,8,64,40,210,2,224,103,0,237,89,-0,224,240,12,96,51,195,1,237,249,0,97,111,236,9,2,239,76,4,1,-50,56,98,164,192,98,126,182,160,13,112,151,235,62,2,229,96,8,194,224,-197,35,192,96,231,133,5,161,220,161,213,224,104,5,234,21,0,131,29,224,-29,0,234,39,6,224,40,1,237,57,4,232,63,0,2,95,49,49,64,198,-253,232,4,65,196,204,218,80,22,80,83,68,52,99,45,5,48,48,32,85,-32,65,160,91,232,8,11,97,73,132,38,79,199,1,52,32,64,15,226,108,-1,66,73,96,74,130,13,73,253,224,25,2,98,100,160,25,177,241,74,199,-254,67,6,247,22,2,8,67,111,110,115,116,114,97,105,110,158,85,64,55,-194,120,64,79,67,87,0,85,128,78,0,54,96,22,136,134,131,78,252,69,-0,225,16,3,96,26,224,5,0,97,4,206,180,216,24,161,168,231,213,7,-164,173,167,217,224,39,11,226,130,2,231,145,8,224,27,2,131,240,98,249,-245,65,1,118,84,225,230,1,148,156,230,72,5,96,177,253,95,5,64,26,-1,67,32,248,238,28,160,75,233,163,16,224,141,4,79,36,228,145,1,152,-112,160,214,224,26,13,249,21,0,0,83,90,172,154,178,185,174,244,84,1,-249,48,9,128,119,225,44,8,197,222,0,85,64,165,128,37,169,83,188,225,-129,36,232,127,10,160,25,99,67,225,75,5,128,11,161,102,224,27,0,192,-29,225,32,1,225,108,17,193,109,160,0,224,105,83,128,29,201,103,147,246,-2,51,51,57,249,204,1,253,152,1,128,0,248,62,6,96,53,255,225,15,-128,126,103,10,0,52,99,171,253,27,7,68,99,122,66,247,188,8,166,180,-0,90,143,221,236,82,5,227,113,0,104,27,1,51,57,133,9,1,48,57,-69,9,228,70,3,64,117,78,98,224,85,0,3,85,32,75,50,64,76,0,-80,65,237,254,23,1,226,86,1,157,171,175,157,164,5,242,216,1,224,233,-18,202,175,101,28,64,119,0,51,131,116,111,68,169,112,0,67,160,230,192,-88,242,41,1,224,90,21,225,216,2,245,28,15,224,37,5,96,205,116,161,-224,153,1,128,2,226,40,4,125,40,227,96,1,64,15,64,185,64,173,131,-207,71,42,105,133,0,53,71,11,131,93,224,47,5,236,165,2,96,59,64,-177,224,232,5,224,73,17,129,4,135,93,0,75,96,145,217,219,192,99,211,-88,183,234,96,47,135,89,224,47,7,1,66,32,224,43,11,202,98,252,81,-20,71,63,252,81,16,0,52,149,70,64,76,134,120,3,85,32,75,51,248,-205,5,228,116,1,0,58,128,46,252,119,15,196,95,224,19,3,224,1,3,-227,239,1,224,37,17,224,35,4,224,32,23,224,29,20,224,26,17,224,23,-14,248,50,7,64,237,135,88,67,212,73,227,65,46,0,54,103,34,69,140,-103,181,1,50,55,121,192,0,48,239,254,3,2,100,102,108,103,98,64,39,-0,54,167,74,64,105,67,228,228,155,1,98,195,68,130,227,146,5,130,78,-248,70,16,235,71,24,0,52,94,34,202,204,0,48,74,97,160,243,130,33,-228,59,3,0,51,162,193,230,242,1,233,207,2,227,235,0,64,19,166,75,-215,86,235,104,4,198,175,246,184,0,96,247,132,83,195,61,75,115,236,237,-25,96,210,249,149,2,64,204,64,170,64,79,132,74,245,102,3,237,65,23,-164,225,64,68,0,50,129,179,131,137,231,204,0,233,251,3,64,37,107,21,-225,31,0,64,48,131,138,231,250,1,224,9,1,161,206,232,249,0,228,124,-1,224,25,1,104,44,226,108,0,232,221,11,231,137,2,224,46,20,149,103,-228,233,6,224,47,19,204,194,224,92,0,134,75,224,47,16,139,97,224,198,-10,233,198,16,165,123,64,24,196,82,249,176,7,226,40,0,235,221,27,229,-117,2,226,119,0,96,39,225,164,6,100,197,160,26,235,79,3,250,16,2,-224,32,0,224,152,8,224,231,0,128,31,104,111,224,36,0,193,39,96,29,-240,182,7,192,119,67,194,64,19,96,125,69,170,231,99,1,66,131,2,53,-51,55,98,89,150,86,1,49,49,225,136,0,110,102,64,126,228,37,1,1,-36,120,246,7,1,192,141,161,103,228,0,7,241,37,5,158,45,240,222,7,-0,49,178,100,225,185,0,224,67,4,2,95,49,49,76,27,1,49,49,90,-197,226,24,6,175,8,225,128,1,224,252,13,172,221,0,49,190,156,192,22,-224,77,7,226,102,19,228,140,1,225,158,13,224,31,5,97,158,241,57,4,-225,24,6,143,187,157,4,239,187,6,224,142,1,225,9,7,96,94,224,170,-2,77,213,66,56,135,212,1,49,50,144,95,192,133,64,131,226,154,3,225,-19,5,8,66,32,95,57,53,53,32,95,54,71,104,2,54,50,53,69,126,-128,62,136,17,0,80,237,146,2,2,79,32,35,73,165,167,76,231,83,1,-227,207,5,225,53,11,171,141,225,100,1,224,40,15,233,168,6,224,40,3,-235,222,5,227,159,2,225,102,8,226,5,8,225,111,3,160,70,65,38,0,-48,131,4,1,50,55,65,127,111,18,0,57,101,172,236,147,1,140,96,193,-108,131,60,160,5,64,3,224,117,1,224,114,6,224,120,9,66,221,161,150,-128,179,224,183,0,224,67,21,224,73,20,224,74,2,224,76,0,229,0,5,-160,62,240,118,1,226,215,4,226,83,5,66,70,131,128,224,66,11,194,142,-236,198,7,226,151,7,129,44,160,168,160,79,229,26,6,192,69,160,66,97,-72,224,78,0,236,249,4,3,95,49,49,55,133,18,160,29,229,47,4,0,-56,98,245,192,0,199,237,224,178,4,229,123,5,163,25,224,141,5,229,168,-15,160,44,224,120,23,64,29,235,19,4,225,171,5,0,51,164,121,228,107,-1,224,48,24,160,8,224,48,0,227,94,0,227,12,16,172,94,128,26,228,-115,10,86,145,0,56,164,88,224,77,0,225,130,2,195,186,225,133,0,130,-75,225,81,2,96,123,228,142,1,192,58,68,247,67,24,235,97,0,192,182,-173,178,96,221,164,111,1,48,56,252,127,5,18,97,100,32,102,105,110,97,-108,32,100,111,32,115,116,97,116,101,109,101,177,214,226,95,4,239,38,0,-224,16,6,228,34,0,232,122,3,228,138,2,229,198,7,144,229,224,74,5,-233,219,0,225,128,0,65,127,238,222,0,160,236,192,245,160,2,224,29,3,-218,244,96,90,96,101,224,8,43,141,151,230,139,1,239,146,1,227,197,7,-226,171,0,192,66,96,68,135,171,227,125,1,192,15,128,32,238,219,4,109,-84,0,54,109,72,238,2,5,160,0,128,50,160,125,232,31,9,224,33,4,-0,67,134,58,192,22,193,33,227,79,2,76,90,225,71,0,174,97,128,164,-135,177,96,36,103,146,0,50,138,235,65,126,96,8,238,199,0,0,80,210,-62,66,197,134,138,0,56,140,102,224,58,5,97,222,129,204,96,253,192,247,-136,181,0,52,252,218,4,2,97,105,108,162,103,64,173,1,95,57,73,117,-2,95,49,48,137,124,255,33,11,96,142,231,24,0,233,11,0,224,85,4,-2,62,62,61,128,44,233,39,11,0,98,194,215,193,33,226,84,0,226,9,-5,226,18,13,229,189,1,160,34,225,243,65,225,112,0,224,209,12,225,37,-0,230,154,9,234,200,4,78,92,175,217,192,79,160,0,128,142,243,21,2,-196,157,160,2,224,24,1,232,7,4,165,254,228,249,11,224,39,4,161,144,-229,33,24,162,165,224,130,2,224,211,11,225,119,9,96,17,0,66,64,87,-64,216,0,55,225,29,3,9,70,114,111,109,84,104,101,110,84,111,226,75,-2,0,66,177,69,1,39,66,116,247,227,56,4,224,125,23,224,119,0,160,-72,224,115,18,162,104,224,101,83,160,213,224,99,13,225,151,24,233,239,4,-225,151,18,231,18,2,224,179,12,192,173,64,18,224,169,14,96,167,224,159,-4,224,77,2,196,19,227,110,0,232,173,4,228,151,0,86,196,246,210,0,-166,240,148,129,224,144,4,233,133,11,96,22,232,28,2,135,108,0,52,111,-194,160,99,161,2,198,163,224,17,1,225,20,2,97,19,224,14,0,128,1,-224,109,0,213,54,160,80,194,148,204,78,232,230,6,132,14,2,49,50,54,-140,18,83,207,144,22,95,201,225,33,3,224,217,4,103,164,97,98,255,223,-0,193,16,101,129,193,45,177,41,128,41,224,148,0,224,81,1,224,137,1,-102,64,96,133,235,100,13,171,99,97,218,128,99,181,222,2,49,51,50,251,-189,5,168,67,2,95,49,51,160,226,224,51,11,0,52,161,212,229,167,0,-128,60,228,122,2,200,214,193,246,231,76,15,249,81,5,161,97,169,45,109,-96,0,51,109,229,225,90,11,97,74,226,13,4,82,14,98,40,69,35,156,-66,192,0,224,160,10,225,242,11,194,187,231,87,1,243,132,5,224,165,40,-226,246,0,226,53,9,239,142,2,205,33,144,39,192,21,192,206,110,42,224,-203,2,96,0,229,214,1,234,79,7,229,180,11,160,46,192,214,192,51,224,-48,10,166,80,227,71,0,228,117,15,162,184,224,87,5,64,44,96,7,224,-41,3,221,142,129,126,229,241,1,128,84,235,65,6,97,111,225,42,1,97,-167,97,38,65,85,0,57,142,178,240,202,9,237,236,6,226,122,5,161,206,-224,29,0,226,119,8,225,210,8,226,166,0,225,219,2,128,138,2,49,49,-52,197,34,1,95,57,69,31,0,95,67,106,128,123,225,185,2,1,95,54,-209,93,224,249,2,128,123,96,70,227,97,7,226,116,7,237,28,5,208,60,-226,238,5,200,5,96,0,225,134,4,202,193,225,140,11,245,146,5,229,134,-6,229,114,10,224,42,5,165,7,235,194,4,246,135,0,160,107,226,235,6,-160,17,226,236,3,100,207,146,149,224,213,9,234,229,1,192,30,192,129,192,-13,108,147,192,24,250,38,12,238,48,0,236,78,13,224,18,4,129,250,160,-48,230,61,1,96,2,182,162,224,69,4,96,18,224,39,4,224,154,2,198,-252,149,228,227,164,6,224,2,0,192,157,224,195,1,160,57,225,166,1,194,-153,224,67,6,224,153,0,224,67,27,225,71,2,224,35,3,194,106,247,165,-6,224,39,8,129,114,224,19,3,238,29,0,238,240,5,225,240,5,160,54,-128,137,228,111,2,225,59,0,224,135,0,192,196,224,114,8,192,14,96,53,-243,240,4,224,245,9,224,50,6,64,86,161,123,224,70,3,98,223,224,75,-5,227,59,1,224,59,1,224,244,11,224,79,69,225,2,6,194,44,0,83,-64,72,152,145,158,101,67,32,225,151,0,224,46,3,224,40,11,200,67,2,-95,49,51,187,181,224,0,2,229,90,16,100,195,131,229,237,191,19,8,114,-111,109,83,116,114,105,110,103,246,125,0,224,219,5,224,95,5,237,55,2,-228,195,5,1,49,56,237,65,1,224,62,3,224,16,0,223,191,227,105,6,-228,161,2,213,121,0,67,237,143,1,224,0,2,224,88,1,226,224,8,227,-76,1,224,125,10,224,191,2,229,7,11,226,206,83,224,195,0,224,50,16,-193,241,225,243,6,86,31,65,248,243,24,1,193,53,64,161,162,6,65,221,-1,51,54,101,23,0,51,128,47,0,57,228,85,2,226,23,59,6,82,97,-116,105,111,110,97,207,223,226,25,153,226,27,10,228,82,0,224,39,5,227,-183,1,228,235,7,226,34,16,226,35,13,230,116,0,224,131,2,229,189,0,-224,113,13,192,1,226,47,17,224,56,12,230,36,6,224,121,1,224,45,4,-0,83,226,75,7,2,49,51,57,241,105,0,237,64,5,224,67,36,232,238,-1,224,135,2,233,118,7,225,10,8,224,73,11,196,205,224,56,6,227,4,-8,1,49,51,237,167,1,228,249,1,227,8,21,1,56,56,64,11,0,56,-197,36,135,249,226,87,0,133,77,0,56,96,49,0,57,73,92,128,48,169,-102,64,126,0,48,136,103,0,51,89,153,224,109,17,224,59,9,128,0,227,-114,58,6,73,110,116,101,103,101,114,227,113,150,193,142,79,159,5,75,32,-95,50,50,51,64,126,0,50,64,54,65,135,160,105,252,163,2,1,49,54,-170,107,224,171,4,3,95,49,49,54,159,157,0,49,198,227,227,85,5,128,-173,0,83,167,161,233,40,3,233,34,1,224,228,1,233,28,13,192,29,193,-199,233,22,9,192,33,129,36,225,33,2,226,211,0,226,71,0,169,253,193,-30,148,237,226,57,3,0,48,252,113,0,224,121,18,232,230,8,224,121,61,-239,15,2,216,160,80,22,248,172,0,64,0,228,195,4,217,217,228,209,1,-225,63,1,205,194,64,119,137,12,224,28,2,97,227,96,182,67,43,250,83,-1,64,199,233,61,1,226,152,9,0,51,112,238,254,42,10,229,84,3,128,-91,161,56,224,115,1,240,20,2,161,48,231,217,22,238,55,1,225,102,5,-192,160,225,7,8,227,71,33,227,55,1,227,64,5,226,191,1,192,208,241,-14,1,241,23,4,254,130,21,224,85,0,225,238,1,1,49,48,229,197,0,-192,95,128,74,224,104,9,224,196,6,222,192,226,135,1,195,81,128,99,229,-200,7,226,165,0,239,116,5,152,30,251,183,2,163,204,2,49,50,51,143,-48,64,13,85,174,0,80,244,59,0,97,46,0,90,224,53,6,1,64,64,-228,80,0,2,95,54,50,133,64,231,164,3,225,172,9,228,18,0,237,136,-6,4,32,95,56,52,48,95,97,0,48,196,159,192,202,161,100,228,66,4,-2,95,54,51,131,240,226,53,4,226,47,5,0,50,146,82,224,127,2,192,-108,224,41,4,2,83,32,73,184,115,130,232,225,48,5,242,177,5,0,85,-67,188,97,63,208,228,2,64,95,52,115,93,68,252,237,153,4,226,0,2,-197,125,96,0,90,25,93,183,3,80,32,95,57,66,144,255,87,0,226,180,-9,97,144,0,49,101,113,116,28,0,52,99,155,225,34,1,225,241,0,241,-31,4,226,23,1,129,175,164,47,64,160,64,54,240,248,5,185,11,224,182,-1,98,24,0,50,81,42,180,154,65,146,96,4,0,57,230,220,3,22,116,-99,69,120,112,114,58,32,99,97,110,110,111,116,32,104,97,110,100,108,101,-58,32,134,232,148,221,0,55,135,202,1,49,51,64,240,65,137,244,225,4,-224,92,9,2,79,32,35,66,123,130,109,160,55,163,177,64,16,224,60,2,-2,58,49,52,68,121,1,10,65,192,67,0,49,134,172,3,49,53,48,32,-96,28,0,48,96,28,161,169,230,159,2,144,252,96,21,230,204,2,0,49,-158,35,112,230,1,52,57,64,83,129,172,0,58,133,12,96,102,2,48,52,-51,104,150,96,96,104,201,224,22,3,75,217,64,22,0,55,224,22,5,72,-118,64,22,0,54,96,22,225,60,1,13,80,114,105,109,105,116,105,118,101,-115,46,87,111,114,91,71,64,37,0,53,224,106,6,0,49,128,22,0,52,-160,22,2,51,54,53,201,12,64,12,64,246,73,89,64,102,101,125,64,14,-67,211,140,54,0,95,96,10,91,253,236,78,1,96,38,64,82,0,51,224,-82,5,66,141,64,61,84,186,224,68,0,100,5,233,240,2,0,53,64,149,-0,53,194,74,0,51,119,195,224,31,19,65,240,224,31,16,68,41,3,49,-51,57,49,124,182,0,50,70,239,0,54,64,132,224,57,1,130,66,224,223,-3,97,178,106,14,96,41,2,95,57,55,213,193,224,21,5,138,216,224,59,-4,160,110,128,230,224,45,1,4,95,49,55,55,32,164,171,2,38,48,46,-164,196,224,56,4,224,45,13,224,44,31,96,36,192,44,65,119,0,50,97,-119,0,83,224,1,1,2,39,32,95,84,159,208,181,134,0,64,9,96,27,-176,107,96,5,224,11,3,64,112,0,48,100,178,0,80,131,229,0,65,193,-9,0,53,128,30,5,56,54,32,64,85,32,165,182,224,8,0,229,80,4,-0,39,96,63,199,217,106,198,96,60,128,45,224,76,16,96,26,87,42,224,-41,26,96,214,224,47,35,224,43,38,225,51,122,0,49,94,44,225,52,162,-225,53,11,231,100,4,160,17,199,81,225,53,46,224,238,36,224,189,36,0,-85,128,168,75,37,128,45,141,194,225,38,28,224,59,8,2,49,51,56,225,-100,33,96,61,0,90,168,40,224,68,3,69,9,224,67,25,96,51,68,218,-224,42,24,228,150,3,234,129,0,224,111,3,224,68,27,224,111,46,68,164,-135,88,0,66,93,247,128,123,205,155,238,173,3,128,27,128,77,1,51,52,-224,77,0,224,117,26,66,65,224,117,0,233,233,2,203,195,64,106,227,101,-0,224,102,2,70,57,224,101,53,225,185,38,160,66,224,211,51,236,58,2,-195,118,226,176,22,192,116,224,41,34,139,84,225,172,2,64,45,144,177,128,-234,96,52,77,161,192,52,224,15,11,0,51,74,160,224,85,0,66,7,137,-67,196,30,193,146,0,89,209,127,129,152,226,21,17,0,50,177,201,72,85,-64,197,228,57,3,128,195,64,0,225,92,16,192,34,225,83,5,132,162,66,-34,64,177,64,20,127,40,128,192,227,203,10,224,104,1,224,34,25,0,58,-129,3,137,130,73,23,146,15,92,51,227,33,1,224,142,1,64,46,234,5,-0,224,46,10,96,178,224,46,5,138,29,0,83,96,137,0,51,191,160,64,-67,64,15,96,137,224,102,0,64,45,0,54,96,45,4,85,32,90,32,90,-130,246,64,20,138,35,2,102,47,32,64,12,138,25,64,206,224,33,2,169,-219,0,52,104,242,74,37,0,55,233,227,0,97,53,138,56,105,227,224,19,-4,0,52,91,138,224,18,1,1,56,48,98,128,224,18,7,97,67,224,20,-8,0,56,96,83,160,19,234,120,2,233,153,2,96,155,136,255,3,85,32,-75,52,224,177,3,196,112,97,162,64,56,0,64,99,44,1,95,53,113,1,-64,33,130,138,192,211,129,49,0,54,138,180,147,186,3,51,55,49,32,71,-255,74,109,108,79,0,51,106,7,169,123,113,53,224,204,3,77,226,116,159,-0,54,105,189,224,43,3,224,39,2,1,38,49,137,185,160,25,160,14,64,-28,0,56,107,153,64,35,96,206,172,103,128,140,1,80,32,128,40,128,162,-128,59,192,73,2,64,89,32,83,98,160,80,199,131,224,211,1,0,55,107,-29,192,74,128,16,0,95,64,27,160,0,64,116,130,115,3,105,116,111,102,-66,3,64,49,97,26,3,56,32,95,53,109,4,66,102,192,211,64,7,106,-153,1,51,55,149,7,80,59,64,6,66,109,0,53,76,233,160,39,0,54,-128,109,64,11,64,84,130,122,2,102,62,61,96,98,162,115,0,62,96,12,-130,115,1,102,60,128,26,130,108,1,102,60,96,12,129,221,3,102,110,101,-103,96,14,129,214,1,102,42,96,12,129,193,1,102,45,64,12,65,185,64,-12,0,43,96,12,128,207,65,7,225,255,1,238,194,0,226,8,3,226,15,-1,84,100,3,10,65,32,73,96,63,128,171,128,63,240,33,0,64,8,94,-12,64,32,128,190,3,85,32,75,50,100,131,64,18,128,196,65,138,115,23,-0,85,97,206,84,233,96,21,244,142,1,101,71,101,184,101,99,224,2,0,-97,144,128,114,192,46,178,213,193,171,160,143,224,198,0,176,82,224,30,5,-240,146,0,84,35,161,1,206,172,82,33,128,45,182,227,224,86,19,212,15,-224,86,47,130,139,192,218,192,25,128,104,69,49,134,188,166,96,230,95,1,-224,246,1,147,254,225,56,6,224,32,3,146,123,167,18,224,32,11,145,58,-224,219,10,192,24,112,203,166,212,143,181,74,55,247,228,3,0,53,248,211,-0,160,45,224,28,12,224,98,10,213,27,224,52,9,241,180,0,198,215,244,-194,9,224,54,10,113,102,224,26,14,241,109,1,209,151,66,122,163,58,240,-32,11,2,73,110,116,144,31,64,58,224,36,4,3,68,97,116,97,64,30,-88,96,4,95,84,121,112,101,192,12,160,47,163,115,224,84,11,5,70,108,-111,97,116,87,128,39,64,228,113,44,193,155,135,209,146,179,1,95,52,121,-58,182,158,64,45,240,249,7,0,54,128,68,131,146,224,108,12,2,67,104,-97,160,146,64,44,224,60,2,1,49,51,145,54,95,57,163,195,66,187,225,-161,1,98,186,0,50,164,201,82,79,245,45,5,243,236,4,0,51,97,77,-96,22,243,177,2,68,4,128,183,131,243,233,36,0,243,49,2,2,95,49,-48,122,161,234,118,1,244,71,4,111,26,224,44,0,100,164,1,51,53,193,-24,128,14,1,54,32,165,217,70,211,227,38,1,161,82,164,48,197,238,187,-27,66,70,167,4,160,6,128,189,1,67,39,73,99,224,232,4,110,107,96,-201,173,162,128,229,119,124,0,67,128,24,64,0,160,70,105,17,224,78,3,-97,65,87,172,225,206,0,96,183,243,22,1,224,222,1,65,208,162,188,64,-10,0,50,129,158,168,82,0,55,190,197,146,151,64,28,66,54,0,32,64,-129,66,228,0,79,179,186,5,90,32,95,57,54,49,224,106,1,0,75,71,-80,0,52,100,0,224,10,1,64,64,130,207,71,181,0,80,65,13,96,215,-243,172,3,85,190,192,69,226,27,1,0,90,161,161,225,164,5,243,187,8,-194,58,246,173,4,2,95,55,52,236,113,7,244,29,5,132,246,192,106,196,-248,149,242,182,97,203,208,96,96,245,118,3,224,149,0,98,176,128,127,1,-50,52,64,31,100,95,167,235,0,50,181,22,1,50,50,71,131,0,52,77,-109,97,141,224,15,4,171,23,2,48,56,50,227,128,0,244,253,2,227,100,-1,12,101,120,105,115,116,101,110,116,105,97,108,115,32,85,134,25,97,108,-108,111,119,101,100,32,105,110,32,112,97,116,116,101,114,110,32,98,105,110,-100,105,110,103,252,129,0,227,64,14,115,166,71,153,225,58,15,2,49,48,-48,229,95,0,0,64,74,147,248,7,5,224,17,8,65,225,132,129,108,52,-64,84,167,74,172,60,160,5,96,18,161,79,247,124,3,160,87,220,196,64,-65,166,48,69,250,193,168,249,120,4,247,46,7,2,56,57,53,65,51,97,-126,253,150,2,2,99,110,83,161,13,195,160,225,209,2,249,107,2,225,245,-0,195,64,70,112,97,172,228,15,2,64,22,135,70,98,53,206,194,96,12,-225,15,4,64,93,199,144,231,152,2,224,34,3,228,47,0,89,119,192,32,-65,136,1,56,55,75,116,131,67,237,113,4,1,95,56,73,117,128,49,68,-34,160,36,183,213,132,85,97,62,215,144,65,228,96,174,224,104,1,131,20,-164,129,160,6,128,0,64,57,67,9,225,176,0,165,58,227,50,2,0,49,-150,84,225,192,2,247,115,6,127,23,65,146,225,128,4,0,68,226,142,0,-160,158,161,203,193,136,131,67,150,58,228,74,2,225,178,11,251,39,13,250,-43,2,225,98,18,240,118,0,100,83,232,185,0,227,245,0,192,246,224,76,-1,0,67,64,15,128,72,128,14,96,56,96,19,97,141,72,146,96,92,129,-130,161,78,197,224,229,232,0,226,91,6,224,58,18,228,167,0,225,233,25,-225,210,22,227,19,9,64,0,64,197,189,230,227,142,0,128,217,67,106,129,-72,225,215,2,131,9,0,49,122,30,161,101,131,235,89,192,99,235,123,33,-231,190,10,86,231,228,124,19,135,191,128,25,225,177,2,129,24,160,99,204,-43,179,201,230,219,2,160,71,224,94,13,227,177,9,100,201,224,106,7,0,-67,161,100,192,109,136,210,160,109,224,255,4,1,51,52,98,143,224,110,14,-197,72,224,95,7,232,139,0,64,126,167,58,65,100,0,85,227,219,0,224,-102,8,224,21,13,160,124,64,19,69,151,225,31,1,137,71,136,112,192,93,-193,40,227,180,3,70,150,232,9,1,233,117,1,225,84,3,129,148,137,116,-192,108,128,18,236,53,0,224,88,6,155,245,64,250,64,247,0,50,78,69,-251,241,4,104,152,141,209,1,49,51,231,166,0,225,196,7,192,32,125,84,-96,213,137,185,70,96,64,167,64,17,136,144,235,147,0,130,170,0,67,73,-9,193,73,228,81,9,226,109,2,102,38,80,184,231,91,9,227,232,0,173,-68,193,19,226,205,4,225,25,3,234,173,12,130,207,130,74,64,26,96,30,-225,169,0,128,195,233,62,1,134,211,0,50,126,61,0,67,224,168,2,237,-182,4,0,50,78,180,224,201,5,83,196,70,23,0,49,172,166,225,233,8,-98,126,113,39,1,50,48,64,237,131,97,224,40,14,253,14,0,0,50,75,-42,234,20,6,201,54,129,27,229,81,6,100,201,66,220,134,98,160,0,64,-227,209,217,224,178,1,0,56,75,235,239,76,1,226,149,3,1,51,51,235,-224,1,229,117,2,224,15,0,171,68,193,101,2,95,53,52,80,180,64,217,-224,154,0,106,162,235,199,2,132,138,128,10,0,95,125,134,96,103,112,77,-227,114,0,224,80,1,1,54,56,247,119,0,96,20,0,53,76,159,162,162,-1,55,49,65,206,96,11,160,46,0,52,126,75,229,202,7,2,95,50,55,-74,133,1,48,50,128,150,128,186,234,39,3,129,64,0,50,85,30,229,177,-2,64,21,3,80,32,95,56,128,83,64,201,0,51,82,67,191,157,101,194,-226,12,7,0,75,226,9,15,233,189,9,234,87,1,224,0,1,227,237,0,-65,185,224,166,9,66,57,99,149,130,120,230,186,0,224,86,1,225,65,3,-65,85,2,57,32,95,116,125,192,90,169,244,141,20,199,76,230,77,0,164,-155,225,129,0,73,18,160,10,163,124,160,13,198,149,234,25,0,192,201,224,-44,11,231,187,0,224,61,2,173,210,224,66,3,204,4,224,53,0,192,69,-224,70,15,228,6,2,234,161,1,169,142,224,137,7,128,219,164,122,192,63,-96,10,108,65,97,83,95,15,233,56,0,112,31,225,159,8,141,198,227,221,-1,67,79,203,79,98,251,128,71,64,23,66,166,213,87,128,2,151,198,64,-26,199,50,226,43,8,1,50,48,225,189,1,235,236,7,104,209,97,193,138,-208,0,66,84,214,194,37,215,248,193,21,171,149,68,186,2,50,51,49,226,-4,0,128,90,208,75,128,223,225,70,3,166,164,163,150,160,132,0,50,104,-88,134,62,71,21,96,4,0,57,234,60,3,16,103,101,116,83,117,112,101,-114,67,108,97,115,115,101,115,58,32,138,73,80,76,86,32,200,215,193,142,-174,47,235,122,9,64,7,128,142,134,15,107,28,68,62,79,200,106,120,0,-48,87,20,206,125,64,42,0,83,65,32,0,57,64,180,206,234,128,94,164,-117,224,0,5,97,190,235,179,0,65,137,181,169,1,49,48,87,124,150,65,-80,56,97,157,161,13,225,19,8,225,180,2,115,182,97,173,232,82,8,227,-203,1,232,244,4,193,216,0,48,86,51,166,148,91,171,77,63,133,167,224,-78,12,64,151,241,144,1,1,83,32,96,201,229,177,0,97,188,128,57,106,-249,237,173,5,128,22,224,182,2,230,85,0,1,49,51,100,208,162,124,0,-48,64,12,160,186,231,60,0,103,6,0,51,100,241,139,119,64,13,80,49,-136,43,128,208,1,48,48,97,157,0,49,66,189,64,31,128,120,96,198,1,-50,56,194,124,96,14,89,30,225,170,2,209,23,128,162,245,35,8,224,7,-3,192,133,193,185,136,128,101,140,133,161,64,20,136,131,65,32,204,54,224,-66,5,0,49,115,49,96,42,135,234,96,148,91,85,65,127,0,53,128,68,-135,32,153,227,167,164,166,85,64,29,131,238,0,90,128,82,168,251,65,11,-161,154,224,111,3,182,236,73,155,137,25,108,210,163,154,238,222,1,229,76,-8,193,134,128,30,229,76,5,226,148,0,176,156,0,57,212,215,230,241,0,-234,43,0,64,46,242,97,5,230,218,1,0,67,102,97,161,132,165,102,234,-211,1,232,0,3,103,98,228,101,1,243,165,14,224,157,1,224,60,2,232,-173,1,98,55,194,118,65,23,246,242,1,224,58,3,170,114,243,19,3,227,-70,12,73,233,147,232,149,203,128,181,160,61,104,6,238,155,1,85,39,242,-249,3,65,144,131,245,0,75,227,23,7,167,175,0,57,165,111,232,66,0,-224,239,2,110,249,160,46,1,50,49,134,4,64,40,224,156,1,160,140,225,-35,3,0,50,104,119,229,204,4,128,135,0,54,164,125,66,129,64,185,0,-52,98,128,64,218,209,161,233,101,1,225,126,0,105,114,224,23,1,226,65,-0,135,81,167,191,164,27,194,100,230,248,5,192,68,226,96,0,162,146,151,-64,215,94,228,93,0,224,46,21,161,4,64,29,196,140,234,21,3,224,43,-4,0,50,163,192,240,184,0,239,196,2,224,40,5,240,192,2,196,140,228,-215,1,224,28,2,113,9,162,154,192,255,194,255,226,180,1,1,95,57,223,-115,64,1,167,89,0,49,131,56,96,52,71,84,225,239,0,0,80,239,210,-1,5,95,56,55,51,32,79,228,101,3,169,246,2,49,51,49,65,200,198,-112,197,45,246,0,0,0,39,128,58,228,235,4,230,128,1,1,51,49,166,-155,175,153,230,38,9,175,76,128,82,226,55,3,225,15,1,97,27,164,101,-88,11,230,238,2,241,66,0,233,220,8,161,94,192,250,199,143,227,249,11,-238,144,4,160,141,165,161,242,236,2,227,152,7,237,194,2,226,49,2,233,-132,0,230,86,2,192,117,225,150,0,245,183,3,103,23,0,49,247,209,0,-128,61,160,199,224,111,2,134,143,67,55,68,80,166,145,225,59,42,228,45,-2,128,40,224,236,2,64,1,247,9,23,224,234,2,234,181,8,107,68,197,-91,129,50,224,75,6,224,45,3,193,41,128,43,224,2,3,229,150,6,245,-247,0,193,23,225,88,3,240,98,2,247,13,6,228,18,0,98,117,235,54,-4,0,95,90,251,225,187,5,130,29,107,30,0,49,77,66,229,87,4,225,-101,40,224,178,0,160,0,246,112,0,228,97,22,225,98,1,128,235,160,46,-224,40,9,201,64,228,50,8,224,25,0,1,85,32,196,215,160,64,128,225,-245,64,7,226,250,2,224,36,1,231,220,1,227,52,3,225,67,1,64,46,-225,67,14,161,207,176,136,70,47,0,49,105,64,65,160,1,53,55,80,12,-1,57,56,106,235,228,103,1,224,0,1,224,121,3,128,7,174,25,227,119,-4,64,57,118,150,224,70,8,78,194,224,149,4,224,87,2,225,41,9,225,-253,8,160,38,225,31,4,0,52,199,99,131,118,234,188,1,227,228,4,97,-86,227,213,4,100,143,66,189,224,142,2,145,184,224,154,1,160,56,224,150,-5,166,100,128,141,227,152,2,224,10,0,224,200,8,240,129,2,224,199,1,-231,236,3,168,127,224,175,22,167,57,228,143,7,101,233,254,242,2,230,109,-0,228,156,6,244,226,5,96,229,0,67,64,21,118,95,96,145,247,8,8,-227,56,2,130,238,73,46,177,255,128,6,64,125,0,54,100,244,0,54,225,-55,2,224,0,1,130,225,231,251,2,227,98,3,160,119,224,25,1,163,60,-230,62,0,128,199,96,135,128,43,247,204,1,231,215,15,243,117,2,160,186,-97,144,224,32,1,97,106,132,218,64,32,193,144,227,118,4,70,1,64,11,-65,84,0,57,106,117,225,61,2,220,7,225,248,5,224,170,8,136,80,192,-22,160,25,224,241,0,225,219,4,225,220,2,128,227,230,114,8,96,50,1,-49,49,183,35,0,66,72,69,142,143,192,135,225,187,2,135,105,0,83,113,-184,72,97,65,167,76,65,200,32,192,17,0,75,254,85,1,1,95,54,68,-13,64,18,144,24,64,0,130,25,192,0,226,213,10,129,165,96,254,248,183,-1,229,72,1,238,6,3,129,1,225,51,3,161,114,229,48,2,192,64,161,-185,167,208,200,51,233,146,5,160,121,224,146,8,192,24,216,99,235,168,6,-0,48,250,42,5,225,191,4,128,10,242,101,0,192,119,0,80,229,88,5,-139,60,110,111,0,85,144,5,0,50,206,83,4,95,52,54,52,32,240,135,-1,5,110,101,103,97,116,101,250,198,1,132,90,80,131,96,128,251,173,1,-224,135,6,128,232,193,46,161,40,2,32,95,54,79,114,193,94,196,34,229,-250,0,237,129,6,224,107,15,225,88,0,231,190,10,195,48,232,86,16,192,-161,228,24,4,231,212,10,103,159,224,55,4,226,155,2,0,67,250,153,0,-225,0,5,204,170,224,151,8,78,220,224,63,27,96,103,242,33,29,4,116,-99,80,97,116,210,23,152,147,159,114,114,34,0,57,113,12,247,242,4,224,-76,9,2,79,32,35,79,180,244,241,0,64,55,0,56,244,52,0,128,203,-163,212,169,209,97,41,79,176,117,186,91,202,107,247,0,52,224,152,3,1,-61,61,162,46,224,35,18,2,84,114,117,226,84,1,224,165,4,77,173,144,-136,64,125,76,69,236,218,1,232,211,7,244,189,4,232,247,0,237,1,15,-237,41,1,229,188,2,224,39,10,229,20,2,227,153,8,224,27,0,229,121,-1,224,35,8,247,90,2,200,168,77,68,244,254,7,192,196,224,73,1,128,-195,96,41,240,131,2,224,249,3,236,37,2,249,243,13,130,236,224,94,3,-192,96,224,59,3,194,248,170,211,231,163,7,96,137,129,92,232,53,8,147,-1,165,45,66,213,253,7,2,224,36,6,3,85,32,75,51,226,244,2,178,-151,192,0,64,228,73,166,0,80,180,206,1,95,52,140,108,96,0,224,188,-1,233,38,6,0,51,239,27,2,224,223,6,224,51,3,234,67,3,160,56,-0,50,144,15,0,50,226,133,3,3,98,105,110,100,228,218,1,224,82,17,-204,111,224,96,1,97,51,234,44,4,0,56,245,146,3,224,71,6,160,19,-194,200,231,91,2,224,69,4,64,21,229,52,1,96,31,103,45,97,208,64,-14,232,217,3,100,163,196,69,224,100,0,194,112,236,224,11,1,49,57,198,-87,128,1,236,99,7,230,168,0,232,106,0,247,12,1,242,224,6,64,98,-249,186,5,224,0,0,224,252,8,162,190,227,196,2,192,102,64,0,224,23,-7,230,54,4,192,33,226,243,9,237,147,3,237,153,1,229,199,7,230,133,-10,131,247,0,95,69,2,0,54,128,184,224,248,1,128,5,92,6,160,28,-226,188,8,192,33,1,48,56,226,71,4,17,116,111,111,32,109,97,110,121,-32,97,114,103,117,109,101,110,116,115,162,85,224,47,18,2,102,101,119,224,-46,8,224,239,3,225,10,2,192,2,226,42,4,234,86,20,234,95,1,225,-207,1,152,229,128,19,170,73,64,3,226,9,7,183,106,225,199,0,166,5,-224,111,0,231,50,0,224,117,18,224,135,10,224,187,3,144,210,160,196,192,-103,64,1,227,46,1,226,195,2,228,176,3,236,11,4,236,228,10,224,72,-7,224,177,2,226,43,6,224,189,7,64,6,224,49,6,225,92,1,225,12,-1,96,37,129,18,224,38,0,99,37,167,126,160,151,222,31,131,35,224,0,-3,192,69,129,102,224,173,2,224,186,5,225,246,2,224,128,3,96,165,224,-140,0,226,17,7,134,251,194,57,132,76,97,227,226,42,10,96,61,227,43,-4,192,153,144,151,129,166,230,19,6,163,71,65,191,235,177,0,64,1,224,-41,9,224,225,0,128,17,189,35,185,100,128,52,0,83,192,167,171,12,65,-201,0,85,72,128,238,246,1,192,116,224,182,0,231,99,6,230,67,2,104,-183,200,67,64,44,114,178,0,90,102,148,114,209,3,54,32,95,55,97,139,-235,162,1,65,159,241,64,7,136,139,230,139,2,227,44,0,163,197,233,82,-22,227,228,1,11,66,97,100,32,112,97,116,116,101,114,110,32,251,188,3,-233,97,0,72,233,0,51,182,174,0,51,247,4,1,105,249,64,27,153,78,-1,80,32,64,11,217,64,0,65,128,26,153,49,97,78,226,176,1,231,126,-6,225,148,3,77,18,94,233,128,250,0,58,135,70,151,39,235,95,0,247,-45,1,78,22,185,93,230,6,0,226,30,8,226,161,2,230,195,7,128,40,-130,45,162,43,1,95,55,102,123,96,133,229,82,4,64,110,152,59,70,203,-108,135,203,237,224,190,0,64,35,0,54,224,146,2,231,29,1,130,220,226,-185,8,224,16,3,71,60,64,64,216,1,107,93,134,180,234,151,19,64,50,-202,134,224,50,21,3,70,97,108,115,224,51,1,129,208,91,44,137,61,170,-103,98,240,226,238,3,178,20,224,33,18,182,81,129,97,224,33,13,135,207,-131,39,123,8,227,81,9,201,170,231,236,5,233,178,10,96,75,0,85,99,-204,252,204,2,119,209,0,95,240,52,5,200,232,227,26,1,160,111,65,32,-0,85,166,48,250,155,2,183,72,224,58,1,224,35,13,129,244,224,94,1,-128,205,164,198,225,56,2,100,30,228,62,8,106,23,224,88,13,67,226,224,-88,2,224,250,8,128,81,0,85,64,76,99,71,224,61,2,66,219,155,2,-0,49,65,15,242,43,1,242,132,4,0,49,153,27,224,93,0,225,137,8,-206,154,225,137,10,224,178,1,0,51,64,21,64,163,225,130,5,0,49,98,-41,224,191,0,1,95,50,67,176,128,40,128,0,226,66,18,208,218,128,31,-236,230,11,192,174,224,25,4,99,67,235,249,8,248,10,3,235,244,11,98,-174,226,64,6,0,54,243,85,6,226,73,15,101,249,224,16,1,130,207,225,-66,4,65,163,224,92,7,97,118,224,82,15,230,57,1,241,233,13,227,18,-8,224,51,0,226,114,9,225,41,16,96,109,227,75,9,129,9,225,216,23,-0,52,130,61,193,216,224,199,1,226,198,10,69,130,225,49,5,224,95,23,-136,121,224,94,1,227,89,4,228,18,11,96,63,240,122,29,9,100,115,69,-70,105,101,108,100,115,32,230,216,11,69,6,134,187,64,159,1,80,32,163,-96,0,80,134,91,134,201,96,23,100,115,0,85,128,22,134,209,64,48,254,-63,10,0,48,201,69,230,236,1,201,201,232,195,3,83,26,162,213,254,62,-22,1,48,51,163,185,225,0,2,0,58,127,37,197,241,231,143,0,65,8,-1,53,50,88,79,2,49,49,48,64,176,64,39,135,32,129,126,147,70,128,-98,134,35,152,140,70,37,225,66,17,3,101,110,117,109,203,245,64,81,135,-3,193,48,96,238,129,48,68,190,1,10,65,70,235,132,157,227,203,12,134,-77,224,26,12,134,70,226,189,13,226,216,0,226,190,5,96,22,84,23,101,-224,97,86,231,145,5,1,95,49,250,120,0,136,89,128,32,229,151,18,224,-36,4,229,129,9,96,24,85,220,224,37,2,228,185,17,98,78,224,209,12,-228,211,0,224,94,4,183,42,224,91,1,228,72,6,0,55,66,148,228,72,-6,224,133,1,239,145,5,228,24,9,228,105,11,192,24,228,105,0,2,51,-48,52,239,170,3,227,130,1,224,24,7,225,101,4,98,89,66,3,200,188,-0,89,214,16,233,2,1,108,30,238,40,1,64,13,131,69,224,169,10,230,-151,0,232,146,19,224,206,11,192,25,96,180,224,73,1,224,244,16,96,154,-241,185,6,129,81,128,23,96,246,137,77,243,18,2,230,87,0,161,215,246,-13,4,224,80,8,245,213,3,235,238,1,99,135,68,197,236,146,5,96,30,-64,174,226,229,1,130,210,97,98,128,32,216,106,96,69,96,4,74,146,96,-32,0,90,64,124,90,52,98,42,1,75,50,192,23,96,0,97,225,130,67,-224,0,1,227,44,12,225,219,8,97,220,138,102,99,222,207,243,236,239,8,-133,186,164,112,224,216,0,245,141,0,241,133,0,192,200,162,10,226,20,1,-160,9,129,239,226,34,2,235,186,6,101,43,129,160,248,100,2,128,23,174,-214,128,70,82,16,0,80,214,58,231,56,2,223,13,232,62,8,192,159,96,-161,229,200,3,162,203,81,127,3,32,95,53,53,250,45,2,229,160,6,162,-47,0,56,236,34,0,237,107,5,13,115,101,99,116,105,111,110,32,102,105,-120,105,116,121,209,128,101,137,0,56,229,121,3,1,36,120,166,180,237,233,-5,65,137,139,188,206,167,243,174,7,225,140,6,128,30,225,144,5,195,84,-64,116,0,50,64,208,0,79,193,34,130,190,135,148,243,59,8,99,18,96,-166,224,148,3,224,178,9,225,222,56,128,198,250,66,7,130,86,99,136,208,-150,227,133,0,246,100,0,225,208,14,160,84,240,194,2,250,123,0,224,21,-2,224,60,30,64,58,242,254,2,226,24,0,226,22,5,128,174,225,116,1,-135,109,225,110,5,224,0,1,226,51,87,232,233,1,232,184,11,204,25,224,-213,3,225,149,5,162,24,236,79,1,227,35,0,192,51,247,233,22,128,122,-161,69,224,13,0,246,178,7,227,74,6,128,20,132,212,160,14,99,250,132,-228,228,76,0,163,246,0,57,138,74,1,50,57,228,227,4,226,125,1,193,-173,66,88,130,224,0,85,97,3,0,56,170,122,224,122,2,65,50,138,2,-128,50,226,194,10,102,195,224,13,5,160,172,128,2,160,14,226,255,13,84,-229,224,246,2,96,14,224,16,1,129,74,163,38,96,14,0,64,71,10,128,-58,131,87,129,16,104,249,64,107,128,36,96,117,166,62,73,17,1,52,55,-70,190,222,46,160,7,254,61,2,224,190,2,224,2,3,192,30,192,136,199,-128,224,2,0,181,104,225,158,1,238,75,3,99,218,129,147,1,85,32,177,-80,129,180,163,170,225,27,0,65,252,224,7,7,101,152,227,33,6,224,9,-0,224,165,2,244,110,2,161,2,96,86,224,210,6,96,17,194,51,64,92,-65,230,136,197,225,6,1,225,115,0,226,193,2,224,231,3,160,101,251,212,-4,192,131,168,107,225,83,2,192,45,160,245,251,82,11,225,248,2,193,98,-128,91,224,26,6,224,148,4,213,249,225,180,15,129,17,224,66,9,226,145,-0,224,127,14,224,106,0,96,170,224,35,21,128,1,169,90,192,0,247,253,-6,128,178,226,167,0,160,14,224,50,4,224,88,15,211,40,224,0,1,224,-234,14,224,2,3,224,246,0,64,0,228,139,9,249,129,9,252,77,1,226,-67,2,225,236,0,130,42,128,181,68,39,64,20,227,142,0,0,95,115,248,-144,212,116,23,224,227,0,1,95,50,151,75,224,42,1,1,51,56,69,89,-0,50,154,204,64,44,181,225,64,65,192,22,64,8,232,53,0,224,125,1,-162,89,248,5,1,226,239,5,224,173,2,225,74,2,161,98,192,44,224,62,-4,128,166,225,32,6,224,181,12,250,112,1,96,223,225,13,0,171,13,225,-13,21,224,225,13,0,56,202,129,163,133,254,96,13,64,183,96,19,227,173,-5,96,16,3,95,52,55,53,96,113,69,245,246,215,2,238,177,12,28,97,-109,98,105,103,117,111,117,115,32,111,112,101,114,97,116,111,114,32,101,120,-112,114,101,115,115,105,111,110,250,192,0,226,70,15,96,123,64,224,129,53,-96,21,224,240,1,1,53,56,225,29,4,224,209,10,224,172,38,0,98,87,-124,4,114,101,102,105,120,224,164,11,228,250,2,4,95,49,55,50,32,224,-55,1,16,92,51,52,38,115,114,99,47,77,105,99,114,111,72,115,47,70,-104,24,2,46,104,115,64,24,4,44,54,52,58,55,192,68,164,238,237,187,-1,225,210,0,171,39,170,230,3,95,55,54,52,164,206,235,29,1,129,28,-160,220,65,211,78,4,0,50,201,143,64,0,4,80,32,75,50,32,79,55,-151,53,133,237,1,64,89,100,79,65,35,229,41,3,233,85,1,104,109,139,-157,64,79,0,54,234,125,1,138,55,128,113,130,76,160,115,241,235,0,0,-57,234,126,0,184,220,64,19,236,228,0,105,186,135,16,233,167,0,171,240,-100,91,64,138,198,149,64,34,0,80,192,179,130,133,193,199,96,182,210,155,-251,28,1,224,61,7,193,25,224,33,1,225,3,1,161,25,0,65,225,25,-4,72,86,146,66,109,179,67,26,1,95,49,78,32,89,243,5,95,49,55,-55,32,35,97,27,0,58,128,211,145,228,104,231,3,67,32,95,52,66,122,-226,3,1,4,110,101,103,97,116,215,209,97,22,4,10,65,32,65,32,64,-11,145,165,0,90,65,77,64,14,0,54,96,14,0,75,96,26,207,162,193,-31,132,34,171,82,64,32,141,230,0,75,153,194,100,158,89,128,1,52,57,-99,17,139,26,143,139,64,193,78,50,174,35,206,42,128,24,64,11,174,81,-224,24,11,160,49,142,113,1,95,49,75,54,164,49,64,115,202,171,251,142,-5,227,172,1,225,175,1,240,60,11,227,194,0,248,106,20,1,95,56,111,-174,193,235,226,162,8,128,40,244,104,30,10,103,101,116,65,112,112,67,111,-110,58,32,251,66,12,240,146,4,0,85,128,206,96,233,212,101,160,105,2,-52,52,51,226,24,17,226,227,0,3,67,32,95,51,65,211,96,65,130,77,-104,127,0,58,128,55,192,80,235,228,9,128,65,129,68,101,153,129,189,124,-201,64,60,130,66,65,3,0,80,228,107,2,2,118,97,108,154,108,224,18,-1,2,116,121,112,130,120,224,18,1,3,107,105,110,100,224,18,6,3,115,-111,114,116,64,18,64,90,244,55,1,245,55,24,102,110,129,126,224,12,1,-64,166,65,147,65,167,252,225,4,204,228,164,185,131,149,238,233,6,66,218,-97,190,0,56,81,167,253,57,7,64,158,0,54,235,234,2,196,254,170,237,-234,16,4,162,71,133,74,231,75,0,226,103,19,96,144,0,56,69,91,96,-195,165,132,226,115,1,226,113,0,247,245,4,1,95,57,85,227,224,42,15,-129,45,224,94,1,141,8,64,94,132,122,89,126,1,48,55,225,194,2,10,-115,101,116,83,76,111,99,69,120,112,114,196,47,65,10,156,169,114,76,97,-87,1,56,54,178,108,96,71,129,74,1,50,56,134,188,128,19,64,56,132,-32,0,79,68,77,64,27,97,214,128,180,1,52,53,156,197,96,43,161,238,-241,69,0,97,198,200,75,237,30,1,64,8,3,95,57,56,54,73,48,129,-177,234,64,0,162,4,224,12,1,224,25,0,4,95,49,50,51,56,64,5,-0,52,142,183,207,183,160,178,224,27,3,163,42,160,6,0,66,163,58,67,-202,194,55,195,123,71,182,224,245,0,227,232,14,9,117,110,100,101,102,105,-110,101,100,32,207,132,242,112,0,224,54,19,228,22,0,0,52,150,180,160,-103,0,83,140,84,97,5,104,45,237,174,4,128,35,224,157,5,226,225,0,-224,105,15,232,253,1,200,0,165,14,167,237,224,61,21,192,167,168,36,128,-51,160,180,224,55,9,4,79,32,35,51,50,231,186,1,66,35,1,48,32,-160,45,72,1,0,80,96,200,232,77,1,205,232,232,82,0,67,249,112,27,-224,0,5,161,7,66,71,249,133,1,224,164,1,1,91,93,96,164,225,9,-13,2,79,32,35,69,84,193,65,226,24,1,224,255,0,166,84,69,102,224,-53,4,0,51,244,37,2,224,91,16,73,68,237,233,2,224,91,5,128,0,-64,182,133,148,0,83,164,63,128,32,98,147,68,127,0,49,70,27,64,229,-117,138,66,5,132,159,227,230,1,203,66,0,53,68,22,130,225,74,87,71,-254,1,95,52,71,232,64,0,0,73,101,240,66,197,136,37,2,49,50,55,-65,172,64,58,96,24,217,251,160,239,199,183,1,95,49,100,139,128,229,162,-27,88,115,0,54,172,135,224,212,0,160,8,176,98,100,3,192,35,96,95,-133,209,65,203,82,60,2,95,49,48,182,47,65,45,0,50,66,173,225,177,-1,3,66,111,111,108,196,119,1,55,54,96,55,224,28,1,4,68,97,116,-97,46,64,33,6,95,84,121,112,101,46,34,128,189,228,157,0,204,173,242,-82,4,0,49,100,42,129,165,114,79,239,188,4,236,247,1,242,192,6,128,-159,133,61,164,147,232,77,11,1,95,52,178,64,194,8,230,178,4,1,50,-55,193,5,225,65,2,224,109,7,130,62,0,49,69,100,65,26,195,244,193,-226,225,93,2,224,17,4,252,38,4,96,19,109,164,0,54,98,67,2,50,-50,52,64,27,133,154,184,115,192,169,224,71,4,96,48,164,153,1,49,55,-130,52,235,46,1,228,168,20,21,110,111,116,32,112,111,108,121,109,111,114,-112,104,105,99,32,101,110,111,117,103,104,196,22,92,98,89,99,2,95,50,-48,227,232,0,96,0,231,113,4,109,40,1,51,57,98,200,2,50,51,49,-229,216,1,224,41,8,97,233,134,78,168,10,105,109,0,48,96,160,102,210,-89,32,0,50,75,58,232,36,0,64,50,134,117,91,135,0,90,160,47,1,-52,52,131,128,64,29,134,123,107,121,64,14,132,66,204,6,193,226,2,49,-49,52,67,71,97,34,73,67,2,95,49,52,125,53,97,64,66,82,207,100,-97,220,225,217,1,128,48,64,144,225,83,4,226,79,3,143,89,246,208,3,-239,214,6,227,52,0,226,148,1,161,74,99,250,0,54,102,152,193,200,232,-204,6,214,66,141,59,103,248,228,143,0,64,237,132,121,128,134,226,143,7,-96,77,0,50,103,227,163,8,214,171,0,85,225,31,1,64,19,132,151,224,-127,10,64,84,0,56,138,145,1,50,54,132,135,245,53,6,96,189,2,10,-65,32,229,255,11,160,149,131,14,166,97,100,59,1,55,52,109,103,2,49,-50,54,197,70,64,72,170,141,96,233,160,139,1,56,55,74,46,142,201,64,-46,65,67,138,248,64,57,164,142,0,56,66,1,128,54,101,228,64,45,64,-136,128,10,64,43,0,54,197,51,234,136,7,1,49,53,225,123,1,227,137,-0,65,158,69,142,175,64,99,87,226,15,2,228,28,5,133,92,64,21,224,-94,17,231,147,0,227,242,8,132,54,64,110,162,11,161,15,128,23,225,104,-1,149,252,161,39,133,42,224,108,14,72,96,129,209,224,210,7,64,72,226,-36,4,0,95,247,220,1,94,120,224,27,5,1,49,49,97,155,224,136,14,-224,43,4,111,129,98,105,96,105,240,126,3,160,6,0,85,229,54,1,224,-253,2,192,248,239,178,0,226,139,2,225,39,5,0,95,67,47,192,169,68,-227,0,56,250,37,2,98,98,223,51,225,69,1,225,155,0,251,173,8,224,-17,3,193,229,65,87,132,152,102,254,68,50,100,16,64,155,225,222,0,236,-102,7,207,69,192,32,154,148,228,26,5,164,32,160,123,224,25,9,210,118,-225,206,8,0,50,190,220,160,0,172,156,192,48,235,85,0,64,2,224,39,-1,128,135,128,1,226,115,1,64,203,233,5,0,100,61,128,189,96,173,224,-79,0,244,112,2,135,34,160,59,1,95,49,69,113,128,93,246,216,8,224,-117,6,224,150,0,229,14,3,165,12,152,223,64,134,101,14,70,7,153,23,-224,151,22,135,55,64,142,169,54,224,131,3,65,229,98,67,237,229,4,111,-111,177,138,96,0,225,61,6,245,75,8,162,214,129,54,200,33,160,9,128,-147,162,222,130,96,224,126,0,224,65,1,154,229,231,222,7,192,2,244,108,-3,224,32,0,200,182,237,48,0,192,99,228,9,3,224,26,0,253,6,2,-224,31,4,224,131,2,176,111,224,84,1,224,133,1,224,219,0,198,115,193,-154,224,92,2,64,47,251,102,3,97,67,97,150,66,2,0,55,227,114,1,-67,44,135,146,0,79,75,86,65,119,126,35,0,56,100,129,67,214,67,83,-64,27,202,218,136,17,2,95,52,54,83,219,0,49,107,237,96,39,64,196,-224,39,16,1,50,50,102,113,75,23,64,87,224,39,17,145,216,64,8,64,-184,96,147,75,124,210,140,110,164,167,52,64,186,136,47,239,237,5,185,236,-129,71,195,199,96,11,232,20,1,97,183,239,190,6,226,3,11,225,142,5,-224,30,12,224,85,16,227,243,0,224,85,22,226,103,6,98,23,65,26,65,-40,251,239,3,64,0,161,2,64,250,137,27,235,139,6,75,134,13,76,105,-116,115,46,75,110,111,119,110,83,121,109,98,107,189,64,47,172,215,225,42,-140,226,164,0,224,85,22,225,42,45,66,114,242,192,17,0,50,73,147,128,-106,204,178,190,51,0,32,176,121,230,98,3,237,106,1,224,164,0,225,82,-5,170,164,134,113,166,119,224,202,5,128,1,165,26,224,25,8,224,131,0,-225,32,4,212,139,224,71,9,225,41,0,230,146,11,229,28,8,166,15,224,-19,8,252,62,1,224,67,8,224,49,6,225,195,3,108,38,145,156,224,33,-0,224,51,3,224,13,4,224,10,1,96,57,105,44,0,53,145,206,0,53,-229,0,2,234,183,7,64,39,71,206,128,59,0,67,100,213,249,22,7,225,-252,4,224,132,57,100,90,66,59,104,66,74,135,68,126,0,75,155,25,64,-36,2,75,32,75,152,216,64,12,64,43,234,192,0,128,2,230,150,0,193,-96,130,1,224,31,0,128,2,171,211,229,161,0,193,157,96,5,64,144,96,-255,226,124,10,193,180,128,99,225,144,5,230,36,0,134,33,129,215,245,138,-1,161,193,239,41,3,102,90,0,39,169,209,234,52,3,233,29,2,64,1,-236,80,8,224,26,2,240,151,5,193,106,160,108,67,165,64,12,153,105,198,-146,128,166,0,79,160,239,64,35,64,242,203,239,224,95,1,237,71,10,224,-112,0,162,130,226,18,1,224,55,2,146,174,128,7,192,226,240,238,0,1,-56,50,231,1,1,128,79,239,84,15,31,77,117,108,116,105,112,108,101,32,-99,111,110,115,116,114,97,105,110,116,32,115,111,108,117,116,105,111,110,115,-32,102,111,0,114,243,118,0,160,71,0,53,144,54,1,49,52,164,85,162,-33,0,54,139,232,0,54,92,131,129,5,164,155,177,44,81,199,245,247,5,-5,116,117,112,108,101,67,224,117,0,0,115,207,198,129,44,79,62,123,108,-96,104,0,66,78,205,71,213,98,33,0,95,81,167,188,229,96,99,171,13,-225,232,2,154,12,130,41,66,12,212,203,98,83,228,130,13,104,8,128,230,-143,99,0,90,64,35,237,165,0,229,126,4,160,123,162,14,0,89,64,13,-194,43,170,29,224,16,1,229,8,0,160,14,227,33,1,234,197,2,106,244,-230,0,5,137,114,96,5,235,184,1,130,230,188,47,224,60,1,133,34,242,-94,4,233,43,1,224,57,0,96,87,105,53,211,183,128,159,227,36,1,130,-202,144,183,66,175,85,66,224,0,4,227,223,3,66,219,97,176,228,112,2,-66,32,96,51,193,44,65,158,215,136,230,72,5,247,124,1,67,149,2,49,-50,51,98,174,0,89,64,16,227,204,2,193,195,193,42,225,32,0,97,0,-224,15,2,96,27,65,81,128,213,224,83,3,96,201,224,242,1,106,111,128,-158,0,95,78,106,64,29,164,138,97,233,114,192,224,22,1,227,127,7,128,-95,252,158,0,224,10,4,240,200,0,1,51,57,64,5,181,31,224,147,0,-172,156,65,36,165,20,65,30,248,143,1,161,200,193,41,192,205,177,178,224,-206,0,224,105,4,99,211,192,25,196,49,64,23,0,56,155,173,0,51,64,-37,144,103,69,224,106,133,228,75,3,224,185,0,224,103,7,64,67,249,231,-1,160,31,227,55,1,96,130,224,149,2,96,15,160,50,64,11,241,100,9,-237,34,3,195,99,237,164,6,1,95,57,224,154,2,192,110,224,52,2,64,-1,163,55,227,68,3,224,190,1,79,135,225,13,4,194,172,242,211,0,129,-58,84,174,193,246,224,20,1,224,200,0,86,209,134,61,128,113,68,135,3,-50,56,32,95,212,224,1,49,49,82,1,242,71,11,100,52,248,76,0,238,-130,8,129,37,96,61,225,37,49,1,67,32,225,39,4,131,177,69,248,2,-52,57,51,197,247,229,103,1,4,102,114,101,101,32,93,20,20,32,118,97,-114,105,97,98,108,101,32,105,110,32,111,117,116,112,117,116,32,102,90,52,-0,112,229,225,3,227,17,4,241,66,0,229,89,1,164,239,129,37,196,236,-128,13,196,233,161,140,225,183,5,141,215,234,245,1,228,169,17,228,146,9,-228,137,8,226,230,1,0,53,234,57,1,67,75,140,52,130,254,192,73,64,-65,64,27,140,32,65,113,135,180,231,100,1,228,67,2,228,139,5,224,42,-8,224,228,0,130,135,224,191,0,227,158,3,133,15,228,198,1,226,199,0,-0,32,188,76,133,33,128,234,200,90,128,11,239,56,7,227,188,1,96,0,-164,181,160,8,128,25,0,58,131,115,249,78,4,129,57,82,126,192,59,224,-22,2,224,25,6,224,26,6,224,29,7,227,238,3,227,133,10,192,196,226,-229,4,64,146,202,93,0,95,83,184,65,63,128,169,138,72,65,159,129,49,-233,246,0,92,110,181,9,1,50,52,98,129,101,60,64,7,0,53,224,13,-0,64,65,0,54,168,79,145,32,98,26,79,207,1,49,50,96,178,99,10,-84,62,64,16,123,197,96,22,64,56,136,136,3,85,32,75,51,98,180,64,-18,136,55,155,10,98,143,0,95,90,253,160,58,96,75,80,43,64,22,123,-27,128,22,192,236,64,15,154,206,0,52,215,243,1,75,51,113,199,64,18,-215,232,72,199,200,58,64,23,220,52,161,69,96,23,224,11,2,192,8,98,-3,64,47,130,180,97,218,231,193,3,2,49,50,51,148,242,97,135,161,4,-96,49,88,220,128,140,0,50,192,120,64,21,129,143,81,35,224,143,4,64,-69,163,20,136,130,192,139,195,201,167,179,180,22,128,29,161,46,2,67,32,-60,239,48,1,243,237,1,224,39,14,169,94,226,62,2,233,121,5,238,122,-12,131,99,227,71,9,69,1,227,73,1,194,133,228,186,4,200,91,178,47,-169,67,227,67,0,224,132,8,224,131,4,192,128,165,207,254,36,1,224,50,-33,196,4,185,67,2,32,95,53,107,252,192,47,224,172,6,224,0,0,228,-85,0,160,244,225,74,11,163,107,225,73,10,130,159,225,72,10,192,41,227,-180,2,224,58,20,224,35,0,202,89,233,103,13,228,247,4,160,101,233,93,-1,224,19,0,198,197,225,69,12,153,94,225,69,8,225,64,9,179,72,225,-64,20,66,210,0,54,164,99,192,29,254,65,0,64,15,135,247,104,223,224,-64,3,64,55,132,32,192,232,1,95,48,100,143,64,24,188,5,64,130,93,-251,207,175,64,169,160,89,224,12,4,238,47,2,1,95,49,136,143,128,125,-106,19,128,11,0,50,228,254,0,96,97,203,33,227,229,0,108,173,237,228,-7,161,19,96,17,178,204,246,121,0,195,121,225,184,0,227,164,11,160,67,-224,46,24,121,127,128,47,129,174,192,121,160,46,227,216,16,193,60,237,84,-7,225,215,4,64,11,168,175,69,57,136,207,227,205,2,128,47,0,85,129,-252,132,222,1,49,48,170,137,224,98,10,128,97,96,48,237,163,1,224,184,-1,193,47,227,64,9,224,75,10,192,24,0,85,97,135,162,240,143,215,205,-243,128,29,160,103,1,95,56,75,126,249,222,0,97,203,181,178,231,70,1,-69,112,96,137,109,182,134,104,0,67,65,226,240,161,0,65,203,216,2,182,-198,4,64,95,56,51,49,101,175,134,67,154,150,227,52,6,118,53,91,15,-1,95,53,158,152,134,166,66,115,0,49,64,90,80,228,140,113,1,52,49,-234,134,4,0,83,248,204,37,96,175,64,4,164,201,168,191,66,193,0,48,-79,240,130,209,93,178,71,231,96,0,128,45,232,22,0,239,172,1,81,29,-98,235,0,80,240,16,7,6,109,105,110,105,109,117,109,255,206,0,0,50,-66,35,229,9,1,162,187,64,107,72,70,64,81,96,85,64,83,199,37,194,-90,241,199,5,160,23,163,148,162,205,162,208,224,13,0,102,31,226,158,0,-97,242,160,75,145,208,1,95,56,103,113,96,153,96,29,66,181,66,150,7,-95,55,56,55,32,79,32,35,68,26,194,126,161,249,201,71,0,58,149,194,-246,206,23,2,78,97,116,150,203,88,76,1,10,65,194,54,97,75,143,53,-132,28,210,112,195,153,96,186,227,212,1,68,28,129,54,129,69,105,127,140,-220,192,7,193,18,253,151,8,0,57,159,56,195,27,225,120,2,131,72,203,-118,141,77,243,187,12,99,184,160,156,251,90,2,65,54,253,195,0,227,98,-0,211,217,243,152,10,128,162,109,46,225,203,8,0,67,167,206,89,160,195,-123,96,26,243,77,19,224,199,1,243,80,12,226,57,25,224,123,1,1,95,-54,96,42,225,228,4,226,75,2,113,25,128,43,137,202,194,23,228,161,1,-228,57,4,65,242,245,98,4,193,236,76,50,188,210,225,143,4,161,233,128,-19,3,95,49,48,55,102,90,131,109,177,195,0,67,98,39,99,211,231,233,-18,225,174,2,165,192,232,18,15,64,29,133,193,225,20,5,224,16,0,225,-21,5,129,15,192,82,96,36,65,21,97,182,225,36,1,0,80,227,50,1,-160,0,96,86,225,96,15,224,28,18,65,66,0,54,170,227,224,196,4,170,-92,118,203,69,78,165,53,128,49,135,242,131,103,226,173,18,164,20,226,163,-8,129,7,226,48,1,194,150,196,57,247,230,16,142,85,0,66,128,201,165,-59,196,105,229,68,0,68,221,224,251,1,64,174,168,136,227,181,9,64,35,-64,178,192,177,64,19,225,138,1,1,95,50,64,38,160,24,1,50,49,215,-213,71,229,101,53,128,171,0,48,103,245,3,67,32,95,52,113,28,0,49,-88,32,1,95,49,158,177,64,45,134,215,0,75,193,254,224,132,9,163,51,-97,75,129,242,175,227,224,151,1,193,50,128,132,174,232,87,58,225,90,0,-197,127,224,49,0,68,108,134,237,247,154,4,64,145,198,73,224,191,13,67,-90,224,191,3,134,35,71,45,225,234,4,224,12,4,64,246,227,150,0,81,-167,101,242,131,109,146,96,103,178,241,195,0,0,67,66,197,167,175,2,49,-49,57,227,209,1,192,50,202,243,199,78,232,105,8,227,84,1,240,88,0,-246,158,13,235,244,4,235,211,0,224,54,0,224,55,1,145,164,251,92,11,-128,48,235,211,3,184,54,101,213,254,255,19,160,47,132,141,193,130,128,0,-65,204,0,56,233,3,2,0,58,129,220,157,138,211,191,227,89,2,129,98,-198,175,236,17,1,224,35,3,130,19,1,49,50,184,73,96,250,160,237,179,-227,226,27,0,0,49,128,159,64,9,97,171,64,126,135,61,130,169,226,167,-8,0,50,79,203,224,79,0,64,15,244,24,0,241,127,4,64,72,133,147,-226,236,17,97,74,128,72,246,4,10,130,144,224,22,2,226,155,13,232,146,-8,128,42,243,124,0,128,138,0,54,134,30,192,123,1,75,50,208,105,64,-206,134,56,226,198,2,228,187,1,66,239,233,206,3,227,157,2,224,100,0,-65,212,234,198,2,226,71,2,143,213,169,118,230,131,3,161,139,251,136,1,-72,109,224,33,15,128,27,128,113,238,128,0,232,202,1,225,31,2,130,202,-224,31,2,226,205,18,224,54,0,194,208,224,219,5,236,176,4,254,0,0,-192,49,251,236,14,64,62,202,8,172,127,2,32,95,53,120,59,99,30,107,-69,232,58,3,250,21,4,192,12,224,20,0,224,159,5,132,218,225,235,1,-104,247,224,135,9,224,179,0,131,157,230,81,0,192,58,96,143,2,95,51,-54,161,7,224,79,3,153,145,225,6,3,208,69,224,76,2,115,34,153,223,-0,49,91,182,128,49,224,18,6,160,192,5,67,32,95,54,57,53,128,138,-146,119,0,49,187,255,0,48,102,115,7,64,95,54,57,57,32,95,55,96,-59,1,54,50,64,9,64,36,1,56,56,192,9,2,55,55,32,164,185,224,-30,0,0,35,245,201,3,227,160,12,245,30,0,184,226,83,148,96,139,71,-226,96,19,0,53,71,206,3,95,52,52,52,81,86,254,215,0,67,13,135,-34,227,178,22,0,90,226,57,0,227,169,39,192,30,193,145,227,166,7,135,-82,227,166,0,243,107,0,64,27,135,64,4,95,52,51,49,32,64,14,198,-189,166,241,1,50,56,230,133,2,1,50,48,73,208,66,102,226,108,0,165,-55,64,57,134,201,193,245,227,213,0,64,2,99,167,226,18,3,255,153,10,-224,17,9,140,44,225,0,3,160,227,99,8,192,32,224,62,3,237,41,0,-224,86,6,160,38,239,116,5,96,8,160,5,2,95,56,53,239,202,0,224,-1,1,226,4,9,0,48,227,98,0,204,217,134,44,160,54,164,210,224,73,-1,228,46,3,4,32,64,95,51,57,174,136,128,163,166,231,230,58,2,70,-148,73,123,109,33,0,52,64,21,65,226,1,95,57,99,86,64,20,1,48,-55,135,231,255,56,15,9,101,120,112,97,110,100,68,105,99,116,223,33,2,-95,49,49,89,126,73,40,192,0,224,223,0,227,226,4,225,120,3,227,178,-2,225,72,4,225,89,0,192,243,226,106,0,162,17,196,119,225,70,3,165,-7,224,19,4,166,154,224,22,18,232,111,1,161,232,193,235,165,141,224,55,-6,231,167,3,224,29,10,72,12,0,56,89,135,0,95,127,151,160,0,192,-79,64,34,224,91,1,160,52,230,30,0,96,64,235,119,2,224,22,2,200,-179,224,62,1,131,37,225,60,0,177,165,128,66,207,177,232,152,3,224,77,-1,123,61,1,95,54,75,33,132,185,228,176,12,160,46,189,180,128,219,133,-29,64,109,123,128,139,184,165,19,224,99,5,160,105,229,222,17,128,80,209,-32,192,17,225,252,23,224,0,1,128,47,232,118,5,225,123,10,227,186,3,-225,90,56,103,3,0,48,102,0,0,55,163,95,225,75,23,251,158,1,166,-133,99,81,109,137,243,171,3,192,21,231,79,1,179,15,179,14,232,162,5,-64,20,147,45,64,23,0,56,101,21,64,176,115,119,0,73,244,56,1,103,-248,174,6,166,67,0,83,65,143,90,157,0,67,127,30,229,98,4,108,27,-96,226,221,158,229,234,0,64,78,137,42,250,233,1,64,133,224,48,16,192,-46,64,214,128,0,64,163,138,153,131,98,100,126,130,87,149,7,82,80,1,-55,57,73,19,2,95,57,56,65,64,0,57,171,106,64,96,155,63,68,148,-106,218,153,176,65,185,161,224,229,113,5,244,230,5,128,190,239,214,21,96,-33,96,57,224,226,2,234,223,0,209,65,249,69,0,161,51,64,146,0,54,-230,141,0,201,49,64,220,1,49,49,135,198,162,200,241,19,2,206,245,128,-115,96,117,254,80,13,132,36,160,50,160,148,160,13,67,86,172,23,233,170,-1,210,154,212,160,1,95,56,244,141,0,64,37,2,95,56,51,232,170,0,-226,164,12,64,61,73,90,64,23,237,111,0,64,142,196,79,77,18,230,0,-1,1,36,120,101,246,65,2,252,90,0,3,50,32,75,52,64,2,251,99,-1,128,32,136,149,236,145,14,211,116,192,233,1,49,57,99,123,65,245,206,-188,66,8,242,29,4,161,104,237,71,0,131,227,231,44,0,193,56,147,253,-96,74,64,212,224,43,0,160,23,161,219,242,62,8,224,22,10,225,250,0,-224,96,4,207,224,237,56,2,224,31,18,192,67,224,134,0,98,40,163,33,-97,241,160,68,226,70,0,114,221,224,32,6,160,69,215,142,64,7,64,26,-226,67,13,64,50,207,31,230,220,2,134,125,200,44,161,29,160,35,230,167,-0,64,81,224,15,1,128,151,229,179,3,128,76,178,198,226,228,1,128,159,-236,22,1,65,190,137,250,96,138,130,244,243,27,7,1,95,49,101,98,224,-138,0,224,8,0,64,61,138,41,3,95,53,53,53,165,1,64,20,214,242,-238,155,24,218,67,96,102,234,238,49,226,123,1,234,240,2,98,170,238,151,-6,64,249,64,25,239,133,20,146,178,192,96,146,174,226,143,1,226,76,0,-96,72,239,133,30,125,118,224,230,56,192,8,228,234,1,128,132,0,54,171,-188,1,50,53,121,146,192,82,224,1,3,233,80,0,224,114,2,224,1,7,-135,223,224,37,21,224,35,4,64,198,201,70,64,135,175,237,225,111,0,236,-96,1,97,82,132,134,0,51,228,134,0,162,134,64,29,164,66,104,175,154,-27,82,202,64,25,130,157,228,217,1,3,97,100,105,99,152,137,96,34,194,-185,77,244,0,57,128,21,130,124,227,199,3,227,217,0,234,74,1,229,189,-2,234,50,2,83,57,237,224,0,168,124,198,36,224,49,1,241,231,5,128,-54,71,27,244,6,6,1,95,49,69,201,64,146,0,56,130,136,64,59,228,-9,1,253,38,0,204,152,224,177,3,164,5,225,134,6,232,48,6,224,59,-1,239,80,1,109,82,160,94,96,73,64,134,72,82,228,218,6,201,203,192,-137,2,95,56,52,228,57,4,192,34,224,74,5,192,36,228,137,3,129,31,-225,16,9,64,115,248,237,8,64,1,137,210,128,82,193,84,225,94,2,70,-41,128,40,225,153,6,72,118,225,16,4,172,81,64,26,200,200,224,99,79,-192,14,164,101,227,150,1,192,15,224,132,3,224,47,2,131,118,232,75,0,-226,119,28,169,56,227,105,0,224,140,16,128,92,224,13,19,224,120,53,131,-155,66,195,227,79,0,225,75,10,230,177,0,160,121,237,130,4,96,31,224,-86,0,65,36,88,82,0,49,110,174,224,203,10,163,50,96,118,133,89,239,-58,1,64,8,245,173,8,118,14,225,34,10,195,69,192,179,224,34,0,237,-206,4,245,216,6,224,127,1,160,227,226,228,0,200,42,224,44,1,96,14,-2,49,49,56,75,242,64,37,0,79,247,111,4,64,0,228,55,26,224,101,-0,235,111,3,239,241,2,192,16,64,100,96,10,159,147,147,103,0,57,106,-82,94,178,183,21,224,119,2,97,99,1,55,49,240,18,3,23,83,117,98,-115,117,109,112,116,105,111,110,32,99,104,101,99,107,32,102,97,105,108,101,-100,144,30,227,169,5,129,128,0,54,133,93,245,187,14,216,128,97,6,224,-31,0,2,49,49,56,139,122,97,25,70,148,83,22,0,89,132,78,129,145,-233,67,1,170,36,225,29,1,149,177,64,127,197,171,228,178,1,225,231,4,-164,143,140,73,190,21,228,184,1,226,142,2,229,14,9,128,51,231,125,3,-132,234,224,32,7,102,215,192,26,130,72,192,26,190,164,0,85,161,237,224,-9,1,224,107,0,98,133,64,8,200,223,195,86,131,144,97,193,106,58,239,-164,12,229,129,1,229,167,8,224,135,3,195,66,225,35,1,225,38,20,184,-90,225,110,4,249,195,4,224,31,5,224,194,0,239,199,0,196,23,224,91,-0,224,63,5,227,209,7,239,185,1,224,13,7,224,58,8,207,135,224,44,-12,167,189,227,78,12,128,26,160,154,246,238,4,224,198,6,228,211,0,231,-106,3,194,127,224,120,1,226,4,7,192,53,226,136,3,225,100,20,201,13,-162,221,226,139,15,226,79,4,166,54,224,175,11,225,166,10,202,154,118,41,-224,240,0,192,140,224,46,8,224,194,2,224,96,2,162,135,229,208,0,165,-194,120,137,109,170,130,151,1,52,52,230,210,1,225,53,1,224,198,14,168,-62,224,101,2,128,47,224,97,3,224,216,2,230,110,0,160,82,160,145,228,-212,9,128,31,129,118,224,27,6,227,185,0,0,32,181,27,240,32,1,109,-129,224,4,1,128,115,245,56,25,9,102,114,101,101,84,121,86,97,114,115,-245,56,5,112,243,192,184,64,174,101,151,175,193,146,13,178,12,0,75,69,-26,255,253,2,69,10,207,97,0,89,162,114,201,250,228,229,3,162,214,226,-127,5,198,221,225,214,9,192,25,184,48,166,69,231,27,5,65,251,96,33,-64,59,224,30,5,96,22,129,170,233,163,8,67,84,242,27,3,224,247,1,-228,50,8,225,19,1,65,204,229,45,2,251,123,1,202,51,195,244,231,69,-8,200,117,231,106,3,231,149,3,192,35,128,173,224,175,6,238,170,7,224,-187,3,180,25,192,191,225,7,38,64,43,128,77,0,48,246,42,2,130,70,-224,41,1,211,166,64,0,65,233,140,199,193,215,231,56,13,117,117,0,56,-140,229,165,247,225,137,14,164,251,128,180,245,223,0,96,42,245,226,10,128,-13,210,121,128,143,141,61,238,158,5,78,179,96,94,224,111,3,224,178,0,-1,52,54,64,153,0,52,85,51,0,52,145,235,160,113,134,175,0,52,124,-101,227,66,9,4,79,32,35,51,53,199,6,131,51,0,49,204,81,96,137,-173,171,133,197,194,236,236,118,0,161,0,224,165,3,242,119,3,224,26,12,-232,69,2,96,2,233,91,5,230,48,9,100,215,236,152,0,129,213,225,6,-7,207,87,224,19,2,64,188,208,207,224,139,9,143,235,0,50,192,233,64,-30,228,211,1,227,223,0,85,47,0,50,215,169,96,113,116,178,2,64,95,-57,194,162,96,56,224,160,2,64,118,78,83,226,77,2,226,228,0,227,230,-5,0,53,98,236,224,36,28,64,92,64,8,64,91,139,213,64,41,78,146,-231,16,5,128,165,165,221,137,144,225,107,6,229,198,2,128,1,232,106,5,-161,13,227,215,3,160,33,231,59,18,240,74,0,224,126,0,228,243,6,224,-31,5,232,160,0,0,83,224,169,2,232,92,10,160,54,192,50,226,129,3,-147,95,245,147,1,225,244,0,230,51,0,225,151,4,194,89,192,206,229,12,-16,231,198,1,219,220,224,13,5,224,56,12,224,57,3,229,44,1,160,44,-129,210,226,224,4,224,163,1,224,219,2,64,9,226,11,5,233,100,6,225,-6,9,128,6,129,7,167,87,225,8,11,160,158,120,194,234,163,7,96,161,-225,213,1,225,177,15,227,57,10,0,48,95,43,160,34,224,82,1,64,18,-226,112,0,233,165,0,224,17,9,225,49,2,65,159,69,30,64,157,96,161,-226,122,2,205,189,103,175,173,24,161,81,232,8,16,12,99,97,110,110,111,-116,32,117,110,105,102,121,32,173,35,129,94,165,8,0,57,99,82,224,66,-19,3,32,97,110,100,160,58,160,45,225,12,3,226,190,0,226,93,7,67,-156,238,251,7,230,73,3,1,49,49,130,1,193,107,68,76,129,219,64,69,-70,9,64,65,0,54,227,222,0,251,32,0,128,8,220,129,84,111,101,234,-2,49,49,55,129,166,64,54,141,180,224,195,1,12,80,114,105,109,105,116,-105,118,101,115,46,126,34,104,204,64,44,160,89,230,230,10,2,49,49,54,-134,209,228,80,1,203,165,64,104,0,50,162,210,228,232,7,135,54,128,209,-226,97,8,195,12,226,97,26,240,31,4,133,103,111,38,239,152,2,160,38,-229,161,6,67,1,106,89,228,9,0,0,54,137,220,226,70,55,4,121,99,-108,105,99,226,64,11,71,195,66,20,70,207,96,196,226,74,20,0,61,226,-72,17,162,74,225,27,1,239,176,4,225,144,0,192,248,173,53,224,225,0,-192,224,161,143,224,142,0,161,153,200,64,96,184,227,189,16,225,37,17,1,-48,56,176,200,238,242,1,1,49,49,122,196,224,237,18,4,101,114,114,111,-114,203,128,128,135,213,234,2,67,32,80,226,158,2,3,116,121,112,101,64,-37,224,17,1,2,107,105,110,144,210,224,18,1,2,115,111,114,86,48,224,-18,3,4,114,101,97,108,109,64,19,64,90,135,220,240,231,39,0,54,178,-167,66,96,240,231,1,133,76,166,188,102,145,226,199,2,194,46,238,51,13,-231,91,0,240,179,25,165,118,236,50,12,198,237,193,146,231,7,9,0,85,-102,33,237,83,8,130,249,237,65,6,160,137,139,127,120,196,0,90,64,49,-192,25,224,100,8,224,99,2,238,157,1,169,16,238,58,4,224,180,4,231,-58,2,224,81,8,236,99,9,113,63,96,34,160,25,0,85,227,221,0,1,-95,56,66,78,191,136,237,128,1,65,171,98,61,109,118,225,101,1,224,136,-9,128,56,161,138,225,95,12,129,132,166,136,225,129,49,228,171,6,195,167,-132,33,0,80,98,118,231,235,0,227,211,10,66,145,128,165,232,20,3,163,-212,243,203,6,110,161,227,161,2,3,32,95,49,56,64,31,97,89,3,95,-49,49,48,184,186,96,84,227,204,2,225,130,1,97,21,90,87,99,196,224,-60,0,1,95,50,125,132,0,49,128,31,224,65,2,136,191,225,30,13,129,-207,225,97,18,193,36,233,96,8,233,199,5,251,83,0,162,21,224,78,15,-205,96,224,213,8,192,24,98,170,225,50,6,226,135,16,224,46,13,96,0,-224,49,13,65,121,97,115,225,190,10,224,23,13,96,21,124,35,224,99,2,-238,203,9,224,132,9,226,252,3,66,244,220,154,252,114,6,97,33,252,108,-0,0,54,100,226,188,108,192,194,140,150,236,215,0,64,76,0,54,206,72,-101,250,64,41,0,95,66,105,108,213,192,40,64,39,136,64,224,114,5,252,-218,1,224,109,3,64,45,136,75,252,184,14,252,178,0,224,22,5,224,1,-1,196,135,224,37,19,224,35,4,224,32,23,224,29,20,224,26,17,253,6,-3,160,216,200,208,0,89,130,163,232,213,1,237,65,1,161,107,224,89,2,-228,40,1,226,135,1,131,7,100,47,65,64,123,201,64,21,238,180,10,128,-68,104,12,227,94,1,130,101,128,111,224,79,0,129,233,1,32,64,127,181,-65,190,185,142,96,28,234,114,9,96,109,103,11,112,22,1,57,48,224,158,-3,224,96,0,228,136,3,234,149,3,209,117,96,7,130,199,240,164,2,166,-101,192,185,163,213,133,94,238,194,5,74,172,128,0,65,96,136,151,120,83,-64,208,153,25,241,119,21,0,56,66,144,240,86,4,241,242,8,96,232,153,-137,241,97,11,64,0,240,25,5,64,148,97,232,229,161,7,64,118,166,135,-96,105,227,129,17,0,53,105,117,227,129,6,128,157,103,136,169,173,0,53,-129,162,64,115,136,176,0,85,191,71,64,2,192,26,64,36,227,80,17,192,-1,227,88,0,225,9,1,224,1,9,227,92,5,226,226,2,64,102,208,60,-0,89,100,9,1,67,39,208,67,167,22,208,31,192,75,254,232,0,226,96,-0,161,183,162,164,224,41,2,231,141,10,224,89,2,224,47,21,227,54,2,-236,123,0,232,114,15,192,205,96,234,229,185,7,224,28,3,230,107,4,229,-151,8,98,232,238,195,0,192,105,239,253,0,225,204,0,139,21,226,168,0,-225,233,8,231,144,9,160,78,230,85,9,230,183,4,224,39,0,224,240,0,-233,105,2,225,220,3,225,88,5,224,55,1,160,255,231,61,15,231,140,175,-224,219,3,224,58,11,192,30,165,45,145,151,97,57,228,116,2,228,186,2,-235,21,0,224,60,3,160,62,225,101,2,237,33,8,0,49,246,59,1,161,-12,226,150,6,165,136,1,51,57,109,140,96,67,226,99,21,224,122,5,229,-175,1,242,87,0,230,71,8,104,23,224,182,16,98,67,227,93,0,224,157,-2,192,21,193,65,224,62,1,226,95,3,226,198,3,160,44,192,152,226,143,-1,160,110,230,92,2,121,4,6,67,32,95,54,51,32,95,133,216,0,95,-113,190,225,141,4,0,66,223,23,224,104,7,193,15,97,25,101,175,96,11,-1,55,49,238,142,0,96,66,128,60,224,36,3,192,211,160,25,70,144,142,-161,246,240,4,238,39,1,13,98,97,100,32,115,121,110,111,110,121,109,32,-117,115,110,106,224,170,0,64,70,230,35,14,160,0,161,120,184,33,69,55,-177,215,4,32,85,32,95,49,64,67,1,90,32,89,188,229,69,0,235,48,-0,133,47,229,35,1,229,38,29,96,246,193,118,225,176,1,229,35,12,225,-173,3,224,36,9,236,194,28,173,115,96,11,192,118,244,170,0,209,36,132,-203,161,180,184,192,201,21,0,80,134,184,224,241,2,192,223,132,216,224,82,-5,227,53,0,130,233,79,113,64,248,98,70,252,20,3,225,142,8,161,230,-227,190,2,128,182,224,220,8,229,90,3,96,175,255,18,2,227,30,0,230,-80,15,160,94,225,127,3,224,35,8,225,86,16,239,54,12,224,161,11,224,-39,1,197,145,243,224,0,252,231,2,197,148,130,16,97,139,2,95,52,52,-201,153,2,57,56,54,253,93,1,64,0,125,22,241,47,2,2,117,98,115,-116,249,8,109,112,108,101,109,101,110,116,101,145,81,64,0,66,196,0,54,-200,126,111,91,65,102,200,141,66,206,224,1,3,255,143,3,64,42,139,238,-131,144,186,255,0,50,128,68,139,47,224,131,1,2,100,105,99,81,179,64,-26,242,129,1,229,93,3,122,196,161,135,229,49,8,228,67,0,192,251,132,-98,130,8,179,124,146,125,1,49,53,146,138,250,175,8,64,159,2,10,65,-32,90,214,0,54,98,234,64,19,137,120,96,110,106,193,3,95,52,54,52,-224,180,2,150,51,6,45,104,97,112,112,101,110,97,50,0,58,139,90,97,-31,64,125,225,200,4,0,95,108,38,78,33,247,174,1,224,32,11,227,97,-0,227,10,0,224,41,4,128,192,128,41,225,251,2,128,33,75,151,0,50,-115,117,2,56,52,48,224,170,2,1,61,62,96,159,224,21,6,245,237,2,-160,32,224,89,5,0,95,154,182,0,67,181,209,192,0,64,229,138,17,97,-22,225,21,6,224,84,2,0,84,179,174,96,49,246,227,4,110,77,103,101,-0,56,160,8,88,142,2,49,48,56,133,64,1,48,56,195,154,96,41,2,-95,49,48,150,59,76,186,174,238,0,52,130,150,236,192,3,65,251,224,83,-18,213,24,195,101,3,95,49,52,48,70,10,0,49,229,175,0,64,91,242,-55,28,135,95,166,243,224,32,11,237,95,2,102,250,229,192,10,224,26,12,-133,174,229,134,9,96,22,241,213,1,165,104,192,186,224,50,11,241,196,1,-164,216,224,44,2,160,153,224,48,5,192,178,226,80,1,128,7,224,40,8,-250,88,5,222,181,132,123,182,109,164,136,1,49,48,67,86,96,129,67,107,-238,78,5,224,143,0,228,55,5,136,207,225,19,3,65,249,71,64,192,190,-96,119,128,33,64,20,77,72,160,111,1,57,48,126,178,224,101,2,135,186,-198,34,224,255,1,225,186,18,237,152,0,229,213,23,235,35,98,129,32,230,-32,21,225,68,2,226,63,9,64,27,242,154,0,1,49,49,70,27,193,15,-0,89,231,153,0,228,114,1,136,43,167,68,64,53,148,161,225,63,1,96,-0,225,169,8,64,45,224,101,0,143,249,160,52,224,60,2,224,172,4,242,-195,6,64,35,165,252,1,80,32,128,181,0,80,101,138,64,176,178,143,106,-10,66,90,134,74,65,255,68,137,100,37,64,19,64,106,0,48,128,26,216,-68,250,249,0,1,51,57,128,24,165,216,102,19,0,56,82,235,228,190,1,-1,91,93,184,39,64,43,152,39,0,67,137,175,201,181,64,239,0,64,165,-195,231,141,0,65,46,96,9,0,83,98,151,88,29,132,229,251,142,9,230,-78,0,96,52,2,49,49,49,74,83,98,180,2,56,57,53,234,148,10,8,-99,111,109,112,111,115,101,83,101,152,213,97,66,64,203,70,233,0,54,149,-130,160,85,162,230,0,51,96,19,1,95,55,147,205,1,64,64,97,109,72,-46,225,109,6,0,51,133,196,113,203,252,42,4,224,150,6,128,145,224,144,-1,6,104,97,115,70,105,101,108,168,37,64,42,0,54,97,86,64,119,224,-79,43,2,115,101,116,224,79,13,0,54,197,142,96,64,0,51,224,64,6,-2,95,52,49,64,224,249,229,3,4,99,67,111,110,69,90,76,193,195,133,-208,255,32,1,225,174,1,97,187,104,45,0,57,106,179,232,86,0,0,51,-66,118,250,172,17,26,67,111,110,116,114,111,108,46,69,120,99,101,112,116,-105,111,110,46,73,110,116,101,114,110,97,108,46,233,53,0,230,228,0,96,-95,2,49,49,51,68,139,106,184,104,141,232,142,1,224,95,10,4,44,32,-97,116,32,225,9,0,3,51,32,95,57,134,250,128,207,131,31,132,189,139,-115,163,209,101,238,64,213,128,206,2,95,49,48,203,137,96,214,0,54,107,-200,66,144,75,68,1,67,39,93,33,226,138,5,163,36,224,232,2,1,104,-97,97,70,130,62,128,126,195,133,1,80,32,165,149,96,21,201,177,254,31,-12,82,244,217,160,64,171,133,15,160,10,107,247,224,21,8,64,198,228,186,-1,64,58,233,237,1,232,159,0,224,55,4,196,240,96,61,131,88,163,171,-224,29,11,128,99,64,2,168,56,244,201,1,132,208,85,41,1,51,57,67,-189,65,178,1,51,52,174,179,5,95,49,56,56,32,95,92,63,0,95,95,-178,165,124,99,227,106,117,109,226,64,94,101,248,105,195,123,61,0,80,75,-229,133,79,1,56,50,193,13,227,10,13,7,78,101,115,116,101,100,32,102,-67,14,10,115,32,110,111,116,32,97,108,108,111,119,235,145,2,225,12,3,-236,2,4,134,84,245,149,3,96,21,110,123,224,48,4,245,115,1,98,65,-207,19,224,151,10,226,169,21,4,101,120,116,114,97,128,170,2,40,115,41,-162,179,3,66,32,95,53,104,109,100,139,131,161,192,163,66,13,0,56,204,-138,192,32,207,168,129,205,235,220,11,224,26,6,106,146,96,21,99,196,100,-26,145,45,128,35,0,48,227,223,1,101,137,181,222,237,15,18,129,83,130,-104,133,66,6,48,52,49,32,95,50,55,160,105,229,87,0,249,146,1,66,-246,254,162,1,166,20,0,85,104,251,229,108,15,166,115,2,53,51,55,164,-132,0,58,128,183,230,214,0,127,43,0,50,134,213,0,50,213,113,96,47,-99,170,0,55,67,214,0,53,69,179,96,32,217,237,107,245,88,108,144,91,-225,58,2,0,67,67,228,238,92,1,224,25,3,99,255,193,29,68,61,0,-57,229,173,1,198,83,160,57,252,182,7,227,207,1,226,226,1,201,145,163,-101,227,187,5,133,254,226,97,8,137,160,229,188,4,11,111,114,100,32,119,-105,108,100,99,97,114,100,226,251,9,170,202,192,138,81,70,200,184,200,215,-72,174,134,43,64,208,224,255,0,248,126,2,193,231,225,198,1,65,1,1,-10,65,96,72,4,65,32,64,64,65,129,126,166,55,97,151,100,117,108,42,-64,25,232,161,1,238,160,11,233,59,0,225,54,4,164,87,96,125,98,67,-228,145,3,248,245,5,65,255,197,211,224,23,0,141,126,64,125,133,128,0,-75,224,123,6,148,122,135,238,136,169,145,60,155,174,224,75,4,64,169,98,-214,227,99,4,64,90,133,197,216,101,239,210,8,64,34,216,252,0,90,66,-235,96,17,130,212,64,175,69,202,192,7,64,175,0,58,129,132,130,196,230,-102,0,134,100,64,27,232,123,46,0,103,232,43,14,0,49,211,106,203,184,-241,206,0,64,148,84,44,131,189,96,11,231,241,0,135,37,228,166,0,231,-17,7,128,136,238,218,3,2,111,120,121,165,137,224,158,3,64,127,130,70,-64,108,1,80,32,173,124,138,186,64,11,106,71,68,132,64,253,165,81,144,-143,6,49,51,32,64,79,32,35,78,205,231,102,0,64,116,241,29,4,2,-66,64,34,128,74,199,127,229,38,0,0,49,96,212,64,8,161,86,187,39,-98,131,0,79,100,133,1,55,51,208,207,64,35,199,190,65,247,129,195,64,-66,226,209,0,75,117,130,18,129,54,225,203,0,65,39,239,110,22,1,50,-54,64,209,1,48,57,137,63,239,110,0,227,42,9,98,174,0,48,214,225,-131,49,231,180,3,90,92,229,222,1,101,198,110,84,64,122,1,95,52,111,-206,230,21,2,140,179,246,130,6,237,111,1,128,42,247,55,4,235,197,0,-66,1,66,22,240,43,15,64,205,198,38,243,127,1,249,220,1,224,5,0,-103,76,227,238,2,64,18,0,83,128,153,239,62,13,229,49,0,128,24,128,-126,167,24,0,56,135,19,252,188,1,225,68,1,97,244,177,11,178,222,100,-152,98,202,66,138,64,76,4,80,32,95,55,50,97,104,113,43,64,205,114,-51,64,20,224,0,0,193,92,161,95,231,41,0,66,75,175,160,133,85,157,-201,225,158,0,174,19,64,37,206,12,224,74,2,213,170,225,10,1,224,182,-8,224,16,8,64,253,177,136,64,194,192,174,224,167,0,130,20,211,10,65,-112,161,13,192,179,100,223,79,249,230,240,4,64,50,249,202,7,224,181,3,-183,165,130,220,199,109,226,167,11,166,59,226,141,0,233,97,2,128,121,71,-66,72,33,135,254,192,43,225,3,1,166,157,224,54,1,64,84,234,213,5,-192,135,132,196,1,95,50,64,121,128,133,1,53,50,65,18,1,49,48,168,-69,64,108,224,169,23,162,43,160,100,172,140,64,67,73,111,167,185,79,43,-72,111,199,25,64,90,132,167,1,80,32,64,11,230,229,3,224,106,12,193,-162,225,159,18,234,138,3,96,127,98,127,225,27,26,128,7,225,27,7,132,-251,131,185,236,253,0,96,87,69,83,96,200,64,38,246,62,1,224,185,22,-192,34,129,42,160,104,231,152,2,135,175,138,77,193,47,160,138,133,71,71,-133,243,44,1,73,170,76,26,162,225,255,203,1,128,50,133,100,0,90,64,-46,0,58,131,170,112,128,222,7,167,150,168,71,64,33,181,96,224,191,0,-0,56,87,120,68,83,228,187,0,110,205,235,237,5,99,88,0,56,154,252,-227,32,1,1,95,50,130,110,0,52,73,187,1,49,48,66,2,2,95,49,-54,164,13,225,104,3,71,38,0,53,140,225,236,236,14,96,161,64,94,64,-162,130,173,88,24,248,8,7,248,14,9,97,6,96,58,64,213,6,52,50,-53,32,75,32,85,106,177,224,1,13,188,112,160,0,224,35,26,224,32,23,-224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,-2,192,8,96,5,66,153,243,87,5,64,0,65,44,131,144,135,148,64,33,-162,59,176,3,75,243,235,115,10,138,95,70,83,0,56,117,115,141,27,243,-149,0,152,28,166,215,230,223,2,88,149,230,133,4,247,212,5,2,75,105,-110,238,130,0,64,131,131,140,2,95,52,56,66,80,71,52,135,109,170,251,-230,45,0,96,9,68,126,166,151,0,51,72,42,1,95,51,119,221,224,6,-5,109,50,64,3,103,56,192,76,0,83,74,104,2,95,51,56,64,253,192,-32,224,106,19,112,56,224,108,1,66,232,96,114,224,108,31,0,82,224,108,-26,161,188,77,117,128,34,224,110,6,160,103,224,117,2,224,106,9,224,63,-3,224,113,2,176,126,131,221,192,147,224,40,0,224,108,18,224,115,2,128,-67,224,61,13,160,106,3,95,49,55,50,225,219,2,25,92,51,52,38,115,-114,99,47,77,105,99,114,111,72,115,47,84,67,77,111,110,97,100,46,104,-115,64,25,5,44,49,56,56,58,53,240,126,2,98,54,68,27,233,234,1,-0,56,103,182,192,13,1,57,48,224,13,4,101,117,128,13,0,53,224,39,-2,0,54,224,37,1,66,80,197,182,67,16,1,53,56,130,232,175,96,134,-97,234,32,1,96,73,0,56,98,197,158,116,66,225,64,47,133,99,224,47,-11,224,57,2,82,62,224,57,0,224,64,5,0,56,245,241,1,224,54,7,-224,152,1,224,53,9,165,169,1,52,57,226,74,4,111,151,104,127,97,176,-136,38,131,140,224,6,5,224,33,0,64,13,224,92,4,224,33,14,160,26,-224,40,3,224,33,13,224,40,3,1,64,95,93,185,202,225,64,182,133,189,-134,196,235,157,16,96,247,0,83,64,207,132,61,118,100,253,138,0,242,27,-17,5,97,115,115,101,114,116,66,73,12,100,101,58,32,101,120,112,101,99,-116,101,100,61,162,70,164,139,253,154,0,125,141,128,119,98,160,70,136,83,-128,1,64,79,96,18,0,53,160,8,75,148,128,8,237,45,0,96,136,245,-76,19,2,103,111,116,160,117,160,102,160,97,128,0,65,7,0,54,167,153,-134,175,64,17,133,119,88,71,1,32,75,101,88,97,89,0,56,227,50,2,-4,84,67,69,120,112,149,29,224,25,8,252,244,0,224,26,9,229,69,1,-224,26,8,2,83,111,114,215,222,0,95,78,204,192,168,2,95,49,50,99,-40,96,12,64,156,246,1,0,202,251,0,50,71,213,0,56,88,249,99,138,-0,49,242,219,0,235,33,5,243,226,15,225,62,19,17,77,117,108,116,105,-112,108,121,32,100,101,102,105,110,101,100,58,32,160,189,0,52,144,107,179,-34,64,150,198,16,2,57,51,32,64,14,195,206,64,119,104,66,146,215,64,-158,128,24,0,89,130,81,194,179,98,105,172,134,119,34,64,203,82,241,128,-93,206,162,1,95,50,163,116,64,26,128,17,226,185,14,226,213,13,169,252,-135,138,235,64,16,199,170,233,95,4,234,36,1,128,167,160,173,236,12,5,-107,114,237,131,5,228,51,0,109,54,237,131,0,224,98,14,182,220,172,108,-237,71,6,234,206,19,239,46,2,224,180,12,224,208,13,102,157,235,131,11,-96,135,245,134,6,128,24,106,66,0,55,175,131,97,138,164,255,2,54,57,-55,227,44,0,99,170,163,168,96,7,111,86,68,57,226,92,1,4,115,117,-99,99,32,226,248,3,64,87,96,211,96,93,129,63,161,68,0,55,111,156,-128,23,2,49,48,55,99,199,224,13,0,224,145,1,64,7,142,89,164,228,-64,7,240,181,4,144,184,75,141,64,149,143,71,129,204,140,194,239,229,2,-96,71,107,13,177,99,0,48,171,23,224,7,5,64,101,0,54,96,101,3,-85,32,75,50,83,58,84,70,96,22,250,124,4,224,121,10,224,108,4,0,-56,88,112,224,107,14,64,76,227,247,0,224,76,27,0,54,79,72,224,76,-18,131,173,250,166,1,224,73,3,160,64,83,7,224,64,5,64,56,131,215,-66,248,102,206,96,49,147,223,2,49,48,54,96,115,64,22,236,57,15,224,-70,0,132,5,3,85,32,75,51,236,42,5,64,27,195,235,107,26,92,2,-0,58,96,90,225,97,0,236,93,7,64,30,130,130,1,75,50,65,123,64,-15,166,219,0,50,64,36,64,15,129,160,76,167,165,227,66,159,96,80,236,-175,12,64,32,207,1,176,171,115,21,91,36,141,67,77,61,205,67,64,45,-196,254,172,215,131,173,224,1,1,122,231,96,0,224,25,7,192,1,236,170,-3,224,37,15,224,35,4,224,32,23,224,29,20,236,115,5,64,192,225,216,-1,1,49,48,95,30,249,8,3,0,54,132,100,0,73,71,125,0,80,96,-20,99,128,0,53,69,104,0,79,131,40,79,28,248,64,0,96,32,96,100,-64,34,65,45,64,63,97,93,193,126,130,0,96,47,236,105,6,10,80,114,-105,109,105,116,105,118,101,115,46,228,26,0,64,49,130,22,224,39,12,167,-86,0,58,128,111,97,181,224,200,23,67,46,125,2,224,207,2,146,15,149,-55,128,22,143,145,115,69,96,189,224,52,11,139,115,224,52,2,131,24,224,-52,21,101,62,224,52,3,141,148,224,52,21,147,45,224,52,2,139,3,224,-52,1,221,214,96,29,0,53,64,234,224,45,3,129,138,112,27,225,138,0,-130,40,225,191,14,97,80,131,89,82,20,96,35,105,23,0,48,138,73,64,-120,224,12,7,96,140,64,43,0,54,224,43,0,0,52,96,59,206,203,64,-17,128,99,0,53,101,235,0,53,128,219,0,50,247,102,5,225,218,0,1,-45,62,134,27,64,66,227,145,0,99,144,136,240,184,78,64,70,226,80,0,-64,14,130,206,119,244,64,14,162,110,225,74,0,136,68,65,34,226,83,15,-96,120,0,58,128,42,224,35,15,1,78,97,66,158,64,36,129,37,226,196,-13,4,121,109,98,111,108,160,39,129,65,224,39,12,8,67,111,110,115,116,-114,97,105,110,192,83,161,65,227,34,21,234,81,0,64,49,129,99,224,39,-12,170,148,64,37,129,70,97,57,161,121,64,21,196,192,0,54,238,25,3,-6,98,117,105,108,116,105,110,64,96,80,87,64,3,64,43,201,220,123,254,-152,31,67,94,64,20,168,75,83,9,181,96,72,102,97,176,92,247,1,49,-48,75,213,132,128,224,21,9,64,70,189,37,77,76,134,156,127,65,224,9,-0,204,56,240,167,1,1,49,48,125,18,192,7,128,92,130,147,96,85,0,-58,128,7,101,236,109,145,141,148,2,60,32,64,102,152,218,48,160,18,124,-28,3,85,32,95,56,78,158,139,45,208,86,177,95,105,198,232,201,5,5,-103,101,116,73,100,101,97,184,113,73,0,90,96,124,192,141,0,85,81,168,-128,135,253,212,1,177,154,129,124,93,225,142,119,1,95,50,171,174,85,246,-2,64,95,52,129,65,0,51,68,252,64,39,130,18,230,147,15,0,51,100,-174,230,147,0,73,220,230,147,7,219,164,224,1,11,230,129,101,224,26,17,-224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,243,100,11,65,35,-231,229,21,0,51,231,229,5,75,74,231,229,13,167,223,224,16,1,224,1,-5,225,90,170,225,48,8,64,255,254,34,0,201,182,233,61,12,192,45,233,-228,0,107,21,224,42,14,64,40,131,243,86,71,254,123,3,233,141,3,67,-13,131,193,227,138,3,131,247,204,163,99,101,129,148,238,20,10,141,119,141,-3,249,94,1,209,226,64,33,108,64,0,56,68,149,195,247,160,123,250,28,-2,226,37,2,97,53,0,83,226,42,0,68,56,247,84,0,204,78,1,95,-53,64,219,64,29,104,37,64,76,247,51,0,234,200,1,225,68,16,96,48,-0,54,226,115,7,0,90,139,227,224,1,11,226,103,170,224,17,8,224,14,-5,224,11,2,192,8,227,202,11,97,41,200,98,224,1,15,225,29,5,225,-68,245,220,169,128,0,65,61,229,9,4,0,56,106,61,71,220,198,187,66,-243,237,48,8,226,185,17,96,50,242,4,0,224,82,1,103,129,64,124,64,-87,64,35,169,153,2,56,52,56,73,168,0,50,205,252,0,83,80,143,67,-133,64,176,180,118,67,212,241,192,2,128,85,69,193,209,146,1,95,55,77,-181,156,97,2,49,48,49,75,30,0,52,107,159,1,95,55,190,82,3,58,-49,48,49,204,34,155,186,128,57,87,217,64,17,232,30,4,209,56,149,207,-224,28,6,203,193,224,25,9,242,205,0,65,105,164,169,149,136,140,96,169,-55,231,140,1,104,222,193,165,102,73,239,203,3,65,173,242,113,1,160,117,-224,2,1,96,163,207,200,128,7,224,201,2,254,250,0,196,145,114,34,96,-32,65,132,169,78,124,35,228,249,3,1,95,56,72,146,224,88,2,160,34,-0,49,129,145,252,87,0,1,56,49,64,209,133,84,0,56,101,1,0,55,-154,87,97,172,128,11,128,0,224,179,3,64,202,128,24,128,242,96,63,64,-66,0,54,190,156,129,60,98,162,192,211,224,130,1,161,67,210,180,121,7,-160,105,224,206,4,96,171,224,131,4,160,110,150,118,192,45,1,67,39,84,-138,160,26,0,80,162,197,192,130,224,50,1,129,70,96,50,145,123,225,50,-7,64,13,0,56,230,58,4,241,211,4,241,19,13,0,95,82,57,64,0,-99,101,235,229,6,1,36,102,138,79,64,128,0,89,224,156,0,203,1,64,-144,0,66,140,24,245,194,20,1,36,120,246,253,4,74,119,192,0,96,72,-224,162,23,244,29,0,254,23,0,96,179,224,185,0,0,64,245,202,2,206,-132,226,171,14,96,16,225,91,0,98,217,217,36,164,62,228,69,1,129,119,-99,12,128,10,65,164,130,105,162,199,162,30,227,39,0,161,163,231,193,8,-192,84,97,98,192,0,227,156,4,148,57,99,156,71,95,251,241,3,143,63,-225,248,0,99,51,162,194,0,64,65,147,91,93,157,103,232,154,6,96,138,-150,217,69,50,224,29,6,147,142,160,29,253,119,20,237,194,2,1,73,79,-251,132,4,64,252,0,85,217,6,99,7,101,16,0,55,125,97,1,55,56,-236,159,3,9,73,79,46,112,101,114,102,111,114,109,224,67,1,97,14,96,-60,162,226,224,60,0,228,45,5,64,222,72,212,67,159,0,52,78,37,66,-116,0,49,76,189,177,76,2,64,95,56,144,45,192,148,224,233,4,141,162,-228,248,2,225,87,5,195,222,132,140,228,191,3,99,97,99,67,112,89,0,-56,145,103,129,230,0,50,69,216,248,194,2,240,203,1,132,90,229,144,6,-98,200,224,151,6,129,159,224,151,2,0,90,201,89,96,11,160,13,224,169,-1,128,9,64,166,226,96,3,97,48,97,108,2,79,32,35,85,84,160,135,-231,11,4,224,94,3,131,5,228,238,8,134,138,96,10,66,242,196,102,65,-13,225,135,0,224,123,7,64,0,225,167,2,190,51,65,30,227,159,2,196,-45,68,241,64,251,1,95,52,93,84,91,67,66,124,96,166,225,5,1,133,-181,0,52,128,63,1,49,48,122,132,66,76,128,22,146,179,128,0,246,30,-2,98,203,227,92,1,71,96,242,50,2,0,49,238,217,0,193,150,1,67,-39,92,79,1,95,51,90,167,113,194,96,58,131,115,225,183,2,93,106,0,-95,153,50,1,57,57,96,159,64,145,176,79,101,218,152,27,64,99,0,54,-224,99,0,132,99,228,115,1,193,84,230,69,9,161,65,64,26,226,119,11,-99,219,0,39,72,134,128,155,230,180,1,128,78,132,181,130,86,192,61,225,-190,2,230,223,1,224,29,5,230,182,1,1,57,55,131,109,227,169,6,2,-115,101,113,220,4,230,185,0,224,78,1,224,14,0,194,19,199,136,192,93,-192,216,128,101,108,234,119,194,133,107,96,71,196,109,97,123,65,9,131,241,-230,9,4,97,211,64,40,66,109,101,244,198,12,231,235,26,230,197,16,230,-195,1,200,242,193,48,128,84,230,210,59,4,64,95,57,52,52,248,189,3,-130,158,98,38,140,30,0,90,161,239,232,195,2,97,50,194,7,225,255,150,-96,61,2,49,48,49,112,167,96,75,117,241,165,246,0,57,97,172,64,49,-128,21,128,40,225,161,4,164,154,225,142,117,97,143,140,112,225,117,2,169,-220,226,96,8,226,80,6,248,18,0,64,219,172,44,83,177,64,154,197,26,-224,202,1,133,90,225,154,2,231,219,3,128,24,228,51,4,158,129,76,89,-138,105,227,76,2,107,137,192,57,99,124,100,140,85,158,171,54,138,89,227,-17,5,96,13,135,255,101,196,128,29,0,57,224,54,2,2,64,95,57,188,-137,133,12,162,35,212,9,64,27,165,206,3,95,56,55,54,225,10,3,194,-44,167,190,0,57,157,181,1,55,52,69,175,1,54,52,237,146,2,65,45,-141,141,228,62,3,128,202,1,95,56,65,207,161,52,172,109,128,2,105,115,-192,13,235,13,1,173,193,224,40,2,128,179,3,95,49,48,48,152,146,0,-49,104,224,1,52,56,102,50,226,246,2,160,210,0,56,88,85,254,92,6,-64,33,64,73,134,194,128,20,198,154,224,247,8,130,113,64,212,142,62,109,-251,76,9,99,90,0,51,96,69,120,25,224,51,1,29,67,111,110,116,114,-111,108,46,69,120,99,101,112,116,105,111,110,46,73,110,116,101,114,110,97,-108,46,112,97,116,64,9,7,77,97,116,99,104,70,97,105,87,171,129,83,-99,84,161,91,2,49,48,48,141,196,66,228,0,57,94,243,160,129,206,177,-2,80,32,35,65,205,0,85,102,147,64,43,230,147,0,129,59,64,65,227,-140,0,2,49,48,48,190,161,65,49,111,87,196,128,0,80,106,75,67,144,-239,85,3,230,193,6,0,66,65,236,131,151,97,101,138,99,0,75,239,132,-3,161,80,130,204,2,49,48,48,199,228,224,47,4,126,170,128,0,64,35,-0,53,100,21,139,108,224,113,1,225,232,2,231,81,5,131,7,224,5,3,-128,74,229,49,0,223,89,160,218,140,0,64,0,128,66,224,1,1,233,175,-4,80,4,224,0,0,226,175,9,224,140,5,224,77,9,224,75,5,236,239,-4,224,76,2,143,5,224,5,3,240,4,0,171,223,248,16,2,228,72,1,-106,181,224,116,4,192,83,234,90,0,224,114,1,192,34,105,220,100,123,230,-74,4,224,66,1,96,111,128,17,225,59,1,225,106,2,134,65,224,47,0,-208,30,236,79,4,224,113,4,192,115,224,165,3,132,248,1,95,50,101,90,-0,54,88,29,224,33,2,170,220,225,111,4,161,22,242,46,0,230,21,0,-239,85,5,99,219,233,64,1,224,46,0,176,198,225,169,0,225,186,3,228,-66,0,193,112,225,206,0,192,77,64,80,0,80,99,200,238,121,0,238,145,-1,64,46,164,38,196,120,108,245,86,114,64,0,160,9,230,189,17,3,79,-32,35,49,67,71,173,61,230,185,10,204,173,161,111,99,149,96,45,96,112,-2,57,48,53,64,16,227,62,1,128,40,226,169,4,64,27,129,92,226,145,-4,160,100,227,94,1,106,248,226,115,4,82,162,224,128,24,0,54,224,128,-5,225,72,1,226,24,3,224,108,0,167,6,140,81,160,144,224,82,5,125,-253,0,48,224,84,0,224,91,0,102,241,192,40,224,108,3,227,14,2,231,-124,5,64,51,1,80,32,240,78,12,165,209,229,216,0,69,0,140,34,246,-215,0,199,182,64,7,98,35,64,35,0,54,160,35,176,106,128,188,64,101,-224,74,1,226,134,0,224,223,17,98,49,224,223,24,64,111,254,173,0,178,-95,79,93,233,174,20,64,52,213,65,224,164,1,225,223,1,0,85,230,240,-8,130,26,176,227,224,13,10,132,2,228,28,0,96,192,101,202,224,69,2,-101,220,226,5,2,192,69,160,122,0,39,73,23,1,49,55,253,209,3,25,-92,51,52,38,115,114,99,47,77,105,99,114,111,72,115,47,68,101,115,117,-103,97,114,46,104,115,64,25,6,44,51,56,55,58,49,48,240,103,2,227,-180,3,129,88,227,172,3,64,0,229,227,3,224,2,7,224,71,1,230,18,-3,229,5,1,192,83,230,24,1,224,195,1,224,201,6,192,10,71,96,224,-85,12,229,34,8,224,96,4,224,102,8,224,103,6,224,55,5,230,136,11,-224,50,14,96,98,229,254,4,224,52,26,224,195,3,224,31,11,188,78,96,-0,225,95,11,199,104,224,53,5,224,23,1,239,106,0,128,18,96,30,194,-68,224,8,10,96,242,224,11,2,174,83,224,94,0,137,176,195,43,128,83,-228,123,4,194,176,161,170,131,133,230,68,4,209,206,224,76,0,192,20,226,-207,4,69,214,131,113,1,57,56,229,140,6,229,96,5,231,183,4,138,179,-198,70,142,185,202,66,194,194,229,151,0,234,198,1,175,27,228,56,1,0,-95,105,88,65,200,1,66,32,247,130,0,183,171,183,163,228,100,2,225,243,-11,64,41,140,110,242,60,0,148,50,224,144,4,165,47,64,8,200,25,228,-156,1,229,102,1,192,208,1,95,53,107,78,173,150,193,70,204,213,96,248,-224,135,4,180,88,224,38,5,66,81,2,95,53,53,245,21,1,160,98,224,-1,7,226,206,8,226,205,5,224,48,9,226,202,2,224,26,7,226,197,1,-192,17,193,62,97,65,136,142,96,220,0,95,68,197,224,201,4,224,200,2,-65,19,1,95,49,70,2,224,0,4,226,226,38,104,250,226,214,3,226,212,-0,160,77,226,96,11,173,242,160,33,96,53,226,52,0,196,115,96,21,129,-149,64,141,130,66,128,24,226,67,2,192,133,228,166,0,226,73,14,193,110,-128,46,244,21,0,64,36,246,240,0,128,110,4,67,32,95,57,56,113,196,-160,0,194,84,228,92,3,229,191,3,96,121,225,53,1,131,43,225,29,1,-224,11,12,228,24,55,128,102,228,194,6,64,72,223,160,192,0,193,42,192,-236,224,140,1,160,182,224,155,0,3,95,55,53,55,224,60,3,226,5,8,-160,98,224,101,4,73,49,87,94,1,95,57,142,147,224,155,1,225,29,4,-224,103,0,128,237,224,164,5,163,28,160,43,98,173,161,68,106,141,79,250,-243,11,6,194,46,169,201,192,225,72,11,129,171,128,64,65,216,213,164,2,-95,57,56,226,149,1,161,100,229,33,3,64,16,118,9,1,57,56,182,250,-226,72,0,145,67,1,57,57,228,212,0,128,16,1,50,55,176,199,224,42,-1,224,45,0,115,245,0,50,96,7,2,57,57,49,180,25,1,57,57,98,-85,96,167,99,196,137,74,128,178,96,16,192,100,224,86,0,225,187,1,163,-31,66,131,228,203,0,160,198,229,236,7,99,40,110,118,162,197,228,14,5,-0,83,161,196,231,139,3,97,116,228,236,6,100,24,3,85,32,75,50,182,-212,192,232,228,74,6,192,38,224,37,2,160,132,192,230,129,137,128,230,0,-90,111,8,0,83,126,253,161,231,235,86,4,197,96,0,85,247,242,0,160,-76,169,251,192,59,192,252,228,9,3,226,101,3,196,15,192,19,225,204,0,-224,111,12,224,59,5,163,231,225,125,2,238,211,9,106,217,224,55,0,96,-93,194,113,230,148,3,228,85,18,160,0,74,223,0,51,209,107,169,74,97,-99,227,119,0,160,202,224,215,5,233,192,4,226,254,1,240,217,3,224,209,-0,235,8,13,224,63,0,206,130,228,76,3,174,67,160,215,101,122,131,146,-99,150,134,99,84,76,160,230,252,101,8,64,0,66,128,0,49,145,180,147,-33,128,221,234,10,1,66,149,248,140,2,100,69,184,146,0,57,122,127,64,-65,0,48,128,65,146,142,192,181,1,85,32,120,163,192,212,96,210,225,187,-2,224,21,24,224,231,5,224,46,8,160,35,195,211,149,52,128,28,247,247,-0,128,84,228,231,2,131,135,228,20,0,224,22,0,179,235,64,49,227,204,-0,98,38,96,29,187,2,143,144,2,53,55,57,117,172,102,11,129,74,96,-54,226,0,11,229,139,0,64,71,224,42,0,128,33,134,104,224,17,1,226,-0,5,232,63,0,224,66,0,224,94,1,231,214,2,96,19,168,79,253,71,-3,128,74,160,242,176,42,194,47,96,26,0,90,66,134,160,13,250,16,1,-1,64,64,68,72,129,181,96,0,65,213,147,226,161,42,96,72,162,102,96,-96,192,5,202,187,224,195,0,246,215,6,128,22,243,198,4,224,25,2,160,-90,225,41,1,192,18,128,5,131,161,0,57,79,97,215,22,128,6,136,49,-130,151,133,199,0,55,129,124,96,225,132,216,224,14,5,2,95,54,51,162,-205,160,0,248,9,13,225,206,0,226,57,1,164,47,225,8,1,150,208,1,-57,57,233,72,2,128,0,247,179,7,0,110,184,34,247,202,7,183,203,99,-71,124,51,160,166,166,46,220,196,88,66,0,56,131,138,0,54,98,130,0,-51,92,62,161,232,188,177,225,186,3,0,58,96,146,143,193,1,57,57,96,-50,160,194,96,56,0,52,119,166,4,64,64,95,51,56,65,126,0,58,65,-51,128,45,165,190,80,189,144,86,131,17,65,149,129,94,0,56,146,98,228,-149,0,231,250,0,128,42,229,82,1,0,58,96,119,96,84,149,79,225,70,-0,224,2,1,161,53,226,241,1,102,243,198,17,224,23,2,128,1,230,44,-1,233,48,6,239,0,14,224,98,12,229,34,0,130,181,195,131,229,91,4,-64,18,224,41,1,165,75,96,82,224,23,0,224,17,6,96,8,194,37,252,-94,1,252,67,4,252,68,1,224,93,1,225,98,0,134,31,224,89,1,224,-8,0,1,95,56,120,212,97,92,251,53,15,1,61,61,249,7,1,64,30,-251,8,0,64,0,134,255,231,5,2,128,1,163,251,224,16,16,64,112,120,-86,72,102,130,252,72,97,95,62,153,141,0,35,64,225,222,247,224,70,1,-186,141,241,117,21,9,69,110,99,111,100,101,68,97,116,97,209,120,5,49,-52,57,58,49,51,241,120,2,225,253,6,228,170,0,224,22,5,235,235,0,-224,45,28,224,22,0,193,234,235,51,1,224,14,0,224,51,3,177,47,230,-98,1,97,166,65,21,225,148,16,4,79,32,35,54,48,233,20,0,225,143,-11,64,88,226,100,1,226,160,3,226,122,4,101,102,160,50,192,0,226,41,-0,133,60,165,109,197,188,0,58,101,29,1,10,65,89,135,0,58,103,161,-100,81,100,17,88,237,128,3,1,80,32,72,124,164,89,229,235,7,101,69,-1,10,65,84,202,106,63,66,214,0,90,129,56,64,14,66,148,160,14,230,-106,6,234,125,4,202,78,65,158,0,75,86,88,128,24,224,55,11,4,64,-95,49,53,53,203,114,0,58,96,6,253,19,0,193,158,66,100,0,58,75,-158,228,162,2,64,33,96,7,99,245,233,146,3,232,183,1,246,74,2,128,-23,160,87,248,216,3,0,85,170,165,197,230,234,228,22,224,37,11,224,36,-1,194,94,74,67,72,34,0,80,74,75,75,206,0,57,74,58,129,95,135,-74,2,80,32,58,108,191,64,235,241,110,0,233,116,4,96,162,186,178,224,-184,13,75,201,181,250,132,121,224,149,3,96,23,172,20,192,36,224,37,9,-96,187,221,154,237,127,4,0,67,72,241,234,37,0,246,222,3,0,58,96,-32,230,171,10,2,52,52,51,73,118,228,151,3,7,99,111,110,65,114,105,-116,121,195,214,107,92,0,54,226,54,5,96,132,0,58,110,150,166,175,114,-255,66,38,64,22,0,54,232,122,7,224,9,0,96,120,0,57,102,192,98,-153,107,190,199,11,1,95,49,99,160,129,37,89,2,96,99,214,213,230,229,-2,96,38,160,85,255,7,1,96,64,192,53,214,214,239,14,0,1,95,56,-114,71,175,99,0,55,239,141,1,96,146,1,56,53,96,136,0,55,98,62,-129,88,237,244,1,158,205,96,86,131,105,99,99,134,142,129,225,227,32,3,-202,99,1,95,56,109,235,99,7,0,56,171,164,155,20,130,48,226,56,8,-96,53,224,25,12,98,211,224,25,12,0,49,160,194,226,109,13,96,167,2,-95,56,53,106,249,0,54,95,95,98,13,222,111,224,19,3,96,68,221,120,-137,224,162,34,0,56,140,67,240,36,3,142,96,233,129,1,194,139,72,70,-250,190,22,229,102,0,250,190,9,3,95,56,51,57,71,117,121,124,249,134,-10,160,0,227,16,9,96,147,67,17,160,24,128,141,101,237,181,146,224,6,-5,64,0,196,170,224,69,0,250,189,1,240,248,0,225,109,9,64,35,227,-144,15,227,83,0,160,100,128,65,1,95,56,68,61,8,95,54,50,52,32,-95,54,50,53,227,217,3,128,52,129,99,139,28,97,99,246,68,5,224,135,-12,169,185,224,135,6,179,71,192,82,1,49,52,129,137,234,185,2,0,102,-232,113,1,64,34,1,53,51,103,4,67,185,106,183,98,19,224,50,14,224,-156,9,132,130,0,95,127,209,224,23,3,129,126,226,170,9,97,165,138,147,-229,49,11,192,232,226,199,4,174,26,97,148,3,95,57,54,57,194,173,2,-95,52,57,65,104,165,161,129,251,230,90,2,173,124,230,90,11,129,124,224,-32,18,140,21,230,51,10,192,24,183,91,204,208,0,52,204,148,224,48,8,-165,206,200,78,64,193,130,209,0,52,231,188,0,227,184,8,132,255,2,95,-57,55,139,235,226,107,15,1,95,57,243,31,0,128,92,224,154,2,67,134,-0,50,65,200,225,34,4,226,73,14,226,209,20,224,155,0,196,179,224,37,-10,97,11,247,214,0,205,125,206,47,224,48,5,169,77,64,41,240,54,2,-224,52,22,168,158,224,52,6,224,10,0,224,52,13,161,146,224,41,4,192,-229,143,137,64,42,229,181,4,226,247,5,0,68,74,229,11,76,105,115,116,-95,84,121,112,101,46,43,43,234,228,0,128,83,227,232,3,227,233,4,224,-0,6,164,139,250,30,3,227,43,2,81,106,213,118,74,110,194,223,232,131,-7,0,58,96,50,73,226,0,49,67,213,2,49,51,51,160,32,3,64,95,-57,53,71,255,69,87,160,17,0,58,96,6,3,10,65,32,75,224,168,1,-71,224,160,186,229,148,7,224,242,1,11,105,109,112,111,115,115,105,98,108,-101,58,32,160,237,130,42,174,42,128,61,69,180,1,57,55,99,11,69,233,-78,46,215,59,224,94,11,2,79,32,35,85,170,235,89,1,64,64,254,183,-4,105,116,224,218,6,96,95,168,226,107,57,136,229,134,49,0,50,85,242,-0,52,226,243,0,224,115,12,69,99,160,98,161,129,224,65,3,134,115,224,-56,12,88,25,230,159,14,161,100,96,155,0,58,96,6,147,118,129,220,161,-228,97,207,226,75,11,4,82,97,116,105,111,130,76,2,95,109,107,96,13,-2,110,97,108,229,143,1,99,208,2,95,57,55,164,241,224,15,0,64,231,-0,58,100,14,1,10,65,159,52,0,58,96,20,96,13,0,75,96,13,137,-32,72,91,97,172,0,51,66,56,115,251,114,241,0,54,76,45,65,255,199,-83,106,47,1,55,50,76,244,0,48,96,243,128,5,225,165,1,65,52,180,-61,64,65,167,130,7,50,49,52,55,52,56,51,54,188,3,224,239,23,11,-73,110,116,101,103,101,114,46,95,105,110,116,67,71,1,84,111,160,17,224,-242,1,102,244,179,245,0,95,109,137,237,116,2,2,95,57,55,163,24,224,-105,30,161,91,1,105,110,224,106,11,229,128,6,200,92,64,0,0,58,97,-105,137,212,229,27,1,0,95,66,20,224,254,3,96,45,196,231,104,233,161,-89,236,77,5,225,110,1,64,0,0,89,170,246,69,230,176,97,65,62,225,-137,3,224,92,1,231,57,0,210,179,64,103,224,169,0,195,100,101,45,195,-63,68,194,0,56,73,51,0,50,100,194,1,57,55,128,137,200,99,0,58,-97,67,98,27,239,220,12,3,108,105,98,47,65,66,0,47,193,172,175,214,-5,51,51,54,58,49,57,129,61,128,192,101,59,139,99,231,161,2,241,52,-2,225,12,7,225,41,0,225,15,2,101,135,106,96,96,67,1,95,55,65,-212,96,26,65,111,0,49,192,12,192,198,3,95,50,57,57,208,187,225,39,-4,0,58,66,189,132,50,64,20,2,51,50,55,75,158,0,58,96,54,107,-243,0,80,128,41,0,85,96,20,133,12,247,127,0,112,29,224,212,3,64,-202,134,135,140,65,1,48,49,64,112,96,187,0,56,123,118,1,95,57,158,-128,150,80,133,189,97,126,214,176,234,47,0,166,93,246,129,6,1,95,57,-64,81,96,49,1,95,57,140,72,1,64,58,72,203,131,195,129,11,98,249,-108,188,2,95,57,54,64,117,0,58,96,42,162,150,244,226,2,130,161,204,-244,134,249,96,186,96,199,231,201,1,0,66,230,111,0,216,56,192,7,160,-235,225,0,1,224,255,1,0,83,97,213,216,121,64,20,230,233,6,112,226,-117,211,0,54,117,211,148,87,97,10,1,57,54,150,26,218,204,64,17,163,-6,0,58,96,9,65,176,215,196,3,95,56,55,54,234,101,3,0,118,181,-81,64,67,237,236,3,96,252,233,174,0,225,192,1,212,202,96,19,232,124,-0,97,2,160,182,64,15,193,185,162,180,225,146,1,160,47,217,156,64,208,-0,56,113,81,224,34,1,128,29,65,49,235,177,0,128,25,110,129,64,248,-237,231,0,0,57,110,59,197,60,225,162,0,160,170,192,140,242,166,3,233,-74,8,200,56,192,187,147,33,160,58,129,171,4,32,95,56,52,48,228,251,-7,13,66,111,111,108,46,111,116,104,101,114,119,105,115,101,232,163,0,210,-131,224,244,0,242,161,0,97,22,0,56,189,133,160,38,224,23,1,165,19,-128,23,0,58,97,227,250,90,0,245,229,0,227,54,0,192,87,224,17,2,-192,102,227,110,0,64,14,113,100,232,1,0,225,15,5,192,45,150,151,233,-198,7,219,2,224,55,1,193,26,194,177,224,131,0,224,88,1,214,28,128,-146,212,44,227,250,3,195,167,226,57,0,133,113,87,99,236,93,10,160,31,-104,63,130,222,196,26,193,50,1,95,54,67,35,237,216,2,228,42,8,225,-137,1,226,126,1,154,152,160,41,224,124,1,227,164,1,0,95,145,211,164,-23,226,97,1,252,19,9,205,85,96,252,67,5,253,210,2,251,34,1,117,-9,251,148,0,224,51,1,229,1,0,133,180,163,16,84,172,80,195,236,171,-2,197,250,228,49,0,226,225,11,225,96,14,247,182,1,224,16,1,1,95,-56,72,171,0,64,96,146,227,52,9,236,125,0,1,95,50,67,109,241,92,-0,237,160,4,224,167,7,224,22,8,236,254,0,253,187,4,162,54,192,210,-164,211,85,145,82,94,231,40,8,103,21,2,48,58,48,99,96,160,70,130,-104,224,46,25,135,182,128,0,228,246,7,0,109,232,161,0,69,64,4,53,-52,32,95,51,145,140,96,16,139,185,0,48,159,148,225,86,7,65,52,225,-12,0,194,47,0,51,145,182,192,59,0,53,207,88,2,95,54,57,85,175,-0,54,103,169,224,131,6,0,112,247,190,2,3,95,55,54,52,64,39,172,-116,66,119,102,129,1,95,56,108,141,98,225,0,58,96,30,179,222,241,39,-1,0,80,161,120,66,223,131,118,0,80,136,193,238,140,2,0,52,126,120,-161,65,237,184,1,252,233,0,0,39,103,58,241,63,2,0,83,157,225,130,-96,146,106,193,180,248,4,1,218,189,130,51,254,116,2,224,72,1,204,70,-102,15,198,181,224,175,1,160,120,198,235,180,10,128,37,227,116,1,2,95,-57,54,227,164,0,64,24,245,165,1,224,10,1,0,58,97,99,198,193,163,-244,229,51,1,227,14,5,99,47,230,218,0,194,250,160,188,239,167,7,160,-117,238,241,2,227,136,2,224,42,4,116,117,221,147,224,33,13,195,43,246,-165,27,239,57,2,229,151,1,192,64,74,241,66,51,96,40,228,81,0,224,-81,4,161,155,0,85,233,52,0,192,9,64,0,230,72,1,224,253,21,168,-72,240,133,2,128,188,225,79,0,224,43,2,248,59,1,68,207,67,166,166,-106,225,123,1,240,42,4,160,91,192,48,247,31,1,128,216,196,44,133,175,-0,75,229,178,0,0,54,72,211,128,200,119,105,160,209,229,133,3,160,144,-66,78,225,83,5,167,19,128,48,225,207,23,128,51,226,33,1,224,32,8,-132,3,231,144,1,224,32,8,193,17,232,118,8,225,42,5,224,7,1,225,-36,8,130,82,225,239,6,171,209,99,94,64,153,225,136,6,176,114,224,50,-3,224,87,8,96,22,248,241,7,226,22,3,128,67,226,16,9,128,42,226,-59,0,224,39,15,166,188,225,248,12,224,27,2,64,199,242,72,4,208,48,-128,30,226,9,0,226,82,9,160,225,226,149,1,160,55,250,160,0,3,85,-32,64,82,224,220,4,241,146,4,241,143,19,7,112,97,116,86,97,114,115,-32,133,159,145,232,102,119,160,225,151,173,111,205,92,188,2,95,54,51,104,-187,133,13,96,127,0,58,68,177,141,255,0,73,156,3,129,88,160,54,0,-54,177,214,224,17,0,205,209,0,49,100,6,113,11,162,13,224,31,12,128,-211,224,61,8,1,51,56,102,102,1,52,54,234,173,3,1,91,93,128,198,-224,45,29,1,40,41,174,124,224,36,19,1,45,62,230,185,3,0,57,88,-228,96,242,141,240,99,112,0,57,96,194,0,58,96,27,6,10,65,32,104,-101,97,100,96,59,0,58,96,24,172,144,1,54,49,65,61,2,55,51,55,-70,219,65,100,134,219,140,17,131,236,71,229,96,237,67,239,199,6,70,38,-101,233,70,60,150,169,0,80,96,23,218,176,174,31,0,80,125,193,0,90,-72,95,146,180,70,136,68,117,249,63,1,201,61,64,51,68,22,224,7,1,-65,1,134,222,224,0,0,102,199,87,169,192,220,218,234,143,229,129,149,164,-197,164,202,101,153,193,251,78,178,128,21,157,70,229,81,3,132,228,230,60,-5,128,8,112,194,105,136,111,239,2,64,95,57,197,217,192,215,96,240,96,-216,137,27,71,89,165,232,224,141,5,192,36,166,46,237,234,0,167,15,167,-172,227,79,0,160,254,112,56,96,8,227,76,2,1,95,57,67,51,133,94,-241,35,1,1,95,57,128,163,65,28,0,51,236,194,2,166,103,235,4,2,-64,140,0,52,104,237,224,27,0,107,47,128,27,232,115,1,224,16,0,236,-183,4,192,1,172,146,224,19,2,165,219,224,16,13,203,110,200,8,225,225,-1,192,21,104,142,224,162,2,0,53,101,127,133,104,164,237,164,247,224,175,-6,171,238,224,30,2,224,2,1,224,164,6,230,118,0,73,216,0,51,90,-157,226,102,0,224,54,2,183,154,224,174,0,135,164,224,138,2,192,2,160,-24,132,155,128,55,224,52,1,224,55,2,226,107,0,105,0,128,5,174,69,-64,42,67,242,146,23,68,97,160,145,224,100,1,192,198,224,71,8,129,19,-97,37,64,214,67,54,0,51,84,82,224,70,2,0,95,190,28,98,178,66,-188,193,252,227,135,13,161,214,64,8,195,146,161,198,225,183,6,129,170,224,-0,0,129,87,224,196,1,224,43,0,69,56,146,204,224,157,4,252,235,8,-166,151,96,176,98,154,135,125,96,68,224,53,0,0,95,86,3,253,22,4,-165,243,192,220,194,215,64,181,2,95,57,52,65,223,75,130,253,93,12,240,-125,1,2,95,57,53,97,24,193,6,163,177,196,139,224,20,2,200,189,131,-101,234,244,2,64,47,229,47,0,232,19,0,64,57,232,232,2,167,37,180,-204,216,62,65,210,204,11,128,25,202,40,108,220,128,237,0,58,96,162,224,-109,13,226,34,1,168,137,229,65,6,0,58,99,73,103,16,1,95,57,77,-44,88,194,79,201,97,35,0,50,97,53,191,233,68,87,183,223,1,57,52,-121,188,0,52,121,144,73,233,0,58,96,37,160,130,226,59,9,226,29,4,-178,101,64,0,1,95,57,88,181,0,58,96,66,128,90,224,192,0,171,26,-232,247,0,239,180,1,194,231,164,178,194,245,226,124,6,197,141,128,165,0,-58,96,104,96,159,101,53,221,169,0,50,85,79,161,120,0,79,249,148,3,-98,43,80,105,65,70,3,95,53,55,56,232,177,1,0,58,96,253,103,42,-1,57,53,64,133,0,58,96,36,64,16,64,90,1,95,53,64,84,0,57,-111,199,1,95,57,89,234,0,58,96,76,167,67,1,57,51,116,216,89,68,-199,54,65,102,225,129,2,224,177,0,186,224,4,57,51,57,32,58,96,19,-212,47,88,29,0,52,102,98,2,95,57,51,117,232,0,51,129,155,137,135,-193,253,129,117,70,116,139,166,234,29,3,228,198,5,1,95,57,71,235,224,-32,2,238,75,2,160,26,231,19,3,160,19,129,141,135,62,71,103,227,66,-12,128,161,224,44,7,131,167,192,27,224,28,7,167,78,224,28,13,99,195,-224,28,0,100,147,130,49,132,16,228,101,1,215,65,104,160,224,155,5,231,-45,0,0,58,96,71,195,58,131,142,103,218,232,117,5,230,25,2,204,22,-224,30,3,101,167,142,191,118,119,225,60,0,0,83,98,255,225,103,1,230,-245,2,225,79,2,64,56,245,167,4,224,56,1,224,19,3,224,62,2,161,-20,114,190,230,116,3,160,108,192,28,64,16,153,182,230,54,0,232,62,2,-192,41,227,150,0,226,5,0,128,0,241,198,10,10,115,114,99,47,77,105,-99,114,111,72,115,89,33,2,77,97,112,217,32,3,55,51,58,49,234,124,-2,65,88,131,211,203,220,64,4,66,249,182,33,98,195,0,57,107,159,0,-58,99,18,247,249,7,64,19,203,186,0,58,96,40,234,65,0,81,55,142,-94,132,23,129,26,231,245,0,193,172,84,75,113,61,238,100,2,64,1,237,-25,0,174,64,120,37,68,11,134,102,232,7,4,193,92,246,195,0,0,80,-250,106,2,227,17,3,241,175,1,1,95,57,83,97,197,194,192,7,167,203,-229,191,3,226,53,0,141,156,1,95,57,165,206,196,185,128,11,0,51,66,-239,0,58,100,24,100,12,0,50,82,142,132,85,64,26,128,19,2,55,32,-58,96,19,193,34,64,37,161,209,1,48,32,103,5,0,58,96,93,128,45,-0,57,117,71,0,58,96,27,96,49,165,94,194,100,137,48,224,222,3,238,-122,2,225,9,0,196,34,99,120,64,86,145,143,224,46,5,131,187,193,101,-251,29,2,194,192,180,149,1,57,50,179,182,162,146,192,77,230,192,0,226,-226,5,233,109,10,160,24,225,211,0,169,118,192,85,192,1,160,138,224,137,-1,231,249,15,224,75,59,232,140,2,224,75,23,167,157,224,75,17,233,3,-0,129,35,128,2,229,166,0,97,93,0,57,140,14,162,223,225,191,3,118,-102,224,31,4,224,122,0,228,51,4,96,40,224,39,5,224,40,8,224,11,-0,160,47,224,46,6,87,185,65,203,1,95,57,178,118,0,58,66,112,102,-223,161,167,239,174,0,225,132,23,224,40,26,129,97,242,94,0,225,62,23,-96,171,99,47,64,10,224,5,0,162,192,224,26,5,224,27,0,113,31,224,-30,2,224,31,12,160,33,224,27,6,224,34,0,138,132,105,52,225,29,2,-0,58,98,246,2,10,65,32,119,137,0,58,96,44,163,194,235,88,0,224,-10,6,225,121,1,232,234,0,0,58,96,120,96,55,234,156,2,64,27,0,-58,96,114,5,10,65,32,73,32,58,100,18,3,10,65,32,80,64,10,232,-142,0,246,174,0,1,95,57,85,36,1,95,49,65,171,0,64,83,152,0,-48,65,212,0,58,101,20,224,42,6,96,234,103,85,81,177,251,126,6,166,-21,0,33,134,11,0,73,96,213,177,113,96,60,136,157,107,197,194,160,160,-128,255,57,2,128,31,204,157,227,254,9,227,249,11,231,6,7,129,46,227,-238,33,224,63,0,163,82,227,220,32,128,56,166,42,227,195,28,225,64,0,-224,10,4,224,11,15,227,79,5,0,58,96,22,152,130,1,49,51,74,149,-109,64,72,209,0,58,96,33,160,26,237,91,1,160,26,194,104,0,85,96,-13,194,104,0,90,104,208,0,58,112,175,166,10,66,169,88,160,241,5,5,-229,203,0,128,228,133,182,229,196,0,154,84,108,89,186,101,168,113,238,48,-0,232,4,11,101,219,202,166,107,76,226,229,1,250,190,6,97,94,64,152,-66,17,109,233,64,6,0,57,138,11,237,198,1,129,206,148,105,0,58,122,-188,98,187,160,193,160,221,1,55,56,64,104,192,199,64,146,0,56,96,86,-128,167,128,84,96,107,96,93,128,76,236,214,3,128,79,135,241,77,45,66,-165,244,181,9,3,79,32,35,49,65,170,135,239,3,95,49,49,51,64,24,-230,17,1,3,95,56,51,57,160,181,226,89,14,0,58,96,237,227,124,0,-120,153,0,32,233,206,1,175,3,96,152,99,85,227,141,5,8,33,33,58,-32,101,109,112,116,121,169,149,199,149,111,106,227,106,0,192,68,240,32,14,-96,168,224,87,9,0,60,155,199,0,58,97,34,131,218,73,103,236,151,3,-128,11,105,165,0,58,98,78,238,158,1,224,206,1,175,2,160,2,193,130,-227,123,0,248,44,2,231,65,4,224,40,14,195,59,228,47,1,224,40,15,-160,220,198,244,247,168,9,136,125,249,152,3,164,30,255,138,10,96,37,131,-54,0,48,204,87,224,19,3,168,200,163,42,224,109,11,135,40,224,51,3,-160,242,224,117,11,245,49,0,224,155,1,225,26,25,160,151,224,39,24,166,-172,249,127,23,249,61,68,96,242,103,58,67,139,67,129,74,151,96,5,2,-95,56,54,96,81,2,95,56,55,237,177,0,160,95,224,81,8,231,103,0,-184,145,234,94,3,163,235,2,53,51,55,160,93,227,196,0,2,57,48,56,-221,138,1,57,48,132,77,100,92,184,172,224,107,14,236,78,2,192,231,243,-27,0,249,52,4,224,49,0,162,4,224,41,4,226,124,0,104,190,227,216,-1,146,200,198,43,96,36,132,154,0,54,107,213,160,10,133,44,143,21,237,-52,0,1,48,57,104,97,234,195,2,224,68,2,230,220,9,250,57,3,226,-106,11,225,164,1,230,11,1,161,64,193,32,226,135,4,219,246,2,58,57,-49,210,144,0,80,143,108,134,100,204,111,224,22,0,152,30,64,181,96,23,-97,59,102,41,0,56,135,250,128,178,161,190,1,56,54,165,183,222,163,108,-122,64,123,64,140,205,229,1,95,57,90,70,0,58,97,216,232,117,2,0,-83,228,245,2,232,3,14,228,151,1,231,244,24,98,179,0,52,65,173,65,-122,2,53,55,57,65,53,229,62,7,186,13,229,64,7,10,116,117,112,108,-101,67,111,110,115,116,114,165,154,69,213,64,75,249,237,8,0,58,96,203,-225,50,1,132,40,129,51,0,54,224,24,3,132,250,128,24,239,41,1,64,-24,96,176,128,24,174,65,6,52,57,55,32,85,32,83,226,3,6,66,251,-224,19,7,64,109,224,19,6,103,148,224,19,7,142,107,229,64,9,0,85,-64,108,65,204,0,57,129,8,122,128,225,12,5,11,103,101,116,83,76,111,-99,32,69,85,86,97,193,14,224,76,9,64,156,64,60,71,0,108,161,227,-176,3,122,72,160,103,0,53,64,4,197,60,96,113,224,25,2,160,47,128,-96,224,193,5,65,62,224,116,7,65,57,96,177,224,108,3,64,18,192,110,-224,79,1,224,19,1,1,52,57,133,2,69,68,225,77,6,100,136,224,19,-6,67,44,255,27,7,73,236,81,9,224,80,3,1,95,50,165,0,224,125,-13,224,17,6,224,101,7,225,159,10,73,26,224,76,11,224,75,1,163,20,-187,168,224,114,6,224,222,9,64,221,224,18,6,226,62,10,68,22,224,138,-8,66,82,225,65,10,224,234,11,224,58,7,64,164,0,85,109,125,226,22,-1,162,5,144,79,224,83,8,192,81,200,223,225,43,6,225,144,10,129,143,-224,137,5,226,87,14,224,178,1,160,132,166,148,225,46,9,64,49,224,122,-6,225,165,10,225,164,16,133,112,224,133,6,166,49,225,254,8,226,219,10,-224,87,15,226,92,17,226,216,2,68,75,137,247,164,75,225,127,5,162,58,-224,74,8,0,58,96,161,228,129,16,225,17,37,227,131,19,224,19,21,225,-29,31,225,240,7,225,26,17,228,92,7,0,58,98,93,224,232,1,226,19,-6,161,71,0,58,97,39,225,14,3,228,219,27,179,37,2,64,64,58,96,-72,192,62,2,67,32,80,224,160,7,224,12,10,226,148,4,0,58,96,76,-224,64,1,224,66,3,161,236,224,242,7,224,139,4,226,16,0,224,52,6,-64,88,134,180,224,254,6,224,31,2,0,54,166,162,96,33,144,18,0,52,-111,242,110,144,96,46,128,40,185,103,64,38,77,123,224,74,7,224,90,10,-249,136,3,2,55,57,55,64,172,105,83,1,56,57,85,50,0,56,77,220,-64,31,1,55,56,64,31,7,56,55,32,79,32,35,55,53,168,193,0,58,-96,36,224,30,8,0,57,224,30,1,251,102,2,246,36,5,98,62,233,29,-0,234,188,4,202,126,224,5,1,224,21,10,96,18,138,29,224,77,0,234,-36,3,236,210,4,169,3,224,17,16,130,204,224,81,3,211,189,224,39,7,-224,141,1,224,25,3,250,26,4,224,80,0,1,95,56,104,218,224,70,14,-169,147,224,117,7,111,111,90,186,160,24,171,150,160,2,64,50,5,95,56,-55,51,32,79,64,93,0,52,234,72,2,224,97,1,131,173,160,91,160,144,-246,125,2,96,62,234,21,3,225,131,12,160,87,192,221,85,46,95,85,140,-10,224,60,2,193,212,128,85,128,20,128,72,224,77,1,3,95,55,51,49,-80,50,136,102,96,89,224,75,1,160,104,224,21,6,96,50,96,190,145,6,-103,204,3,95,56,55,54,233,9,2,1,36,104,239,168,0,96,36,128,50,-224,49,20,1,118,115,233,49,0,161,115,1,95,56,93,186,224,13,0,140,-48,139,218,2,95,56,56,68,60,160,23,141,21,97,128,252,248,3,161,13,-213,169,224,73,0,81,143,0,56,130,205,64,21,191,86,192,25,162,23,130,-98,2,58,56,57,235,230,1,138,181,132,61,128,45,180,152,96,77,234,216,-2,64,33,74,165,96,164,146,194,1,56,56,114,41,125,34,96,214,122,33,-234,183,93,209,222,2,95,56,54,80,198,114,153,167,120,210,187,234,164,16,-174,89,0,54,242,20,0,145,12,249,249,0,128,216,128,78,2,95,56,55,-68,162,192,16,234,151,37,192,54,158,203,128,114,160,20,224,99,3,224,28,-2,154,164,224,111,2,234,163,53,225,12,1,224,130,12,0,55,134,151,224,-169,0,225,84,0,1,54,54,98,164,110,44,225,92,1,161,16,160,155,234,-195,36,225,9,1,2,95,56,56,130,109,160,145,110,80,224,148,1,207,246,-225,41,11,234,211,74,225,122,17,66,98,207,181,225,149,7,234,228,14,224,-75,1,1,54,54,85,220,224,58,1,129,107,2,95,56,56,170,212,67,37,-0,73,181,87,144,139,241,118,4,2,95,56,56,143,146,226,125,7,225,118,-9,235,14,17,160,53,224,68,8,226,9,5,128,26,192,117,226,117,14,101,-191,224,18,5,233,249,16,226,102,13,1,95,56,117,210,131,161,161,27,128,-13,160,30,71,195,224,222,10,233,252,16,224,102,13,227,75,21,227,135,23,-255,119,2,0,58,96,22,100,207,225,45,4,119,231,130,193,0,58,96,210,-228,242,11,225,46,40,227,3,34,228,74,33,224,28,7,235,86,32,226,56,-0,225,202,16,193,37,226,91,8,0,58,98,184,225,54,9,96,35,108,253,-226,113,4,0,58,97,73,224,46,14,163,55,96,90,0,58,96,61,102,117,-0,80,225,144,12,224,234,2,224,97,3,0,58,96,70,96,55,224,57,6,-194,28,226,124,2,224,87,15,74,196,102,37,128,9,96,56,0,58,96,95,-224,185,13,96,59,226,37,1,64,92,74,177,64,76,0,58,96,28,247,104,-1,107,88,131,11,180,143,128,73,97,27,0,55,210,89,3,95,56,55,53,-178,241,0,51,133,60,1,67,39,224,63,1,102,180,224,61,0,197,194,128,-10,120,249,147,11,134,231,248,228,7,249,153,3,96,20,0,58,72,193,160,-118,85,141,104,223,64,194,1,95,56,102,103,0,58,64,139,96,207,244,4,-0,115,246,0,79,64,201,0,56,70,54,243,187,13,160,31,85,203,251,114,-12,96,197,192,64,115,150,0,58,106,111,186,29,2,95,56,55,179,202,2,-56,55,50,201,247,65,59,96,42,64,60,224,53,1,130,82,0,80,65,108,-130,52,96,10,204,24,104,205,97,98,104,205,64,135,224,205,81,96,32,160,-151,74,153,192,105,97,151,154,143,2,56,54,54,122,138,1,53,56,236,196,-0,64,54,224,41,15,234,92,1,1,91,93,148,129,96,166,1,10,65,234,-118,2,0,68,93,230,10,76,105,115,116,95,84,121,112,101,46,34,64,231,-64,59,233,242,0,254,173,0,233,237,1,85,185,96,31,84,146,132,154,64,-21,173,172,5,56,54,50,32,58,56,78,0,96,35,94,12,77,186,64,33,-173,143,187,163,96,175,235,0,2,0,102,138,255,183,216,69,48,123,190,224,-38,14,64,79,129,167,0,75,98,216,65,15,64,3,0,58,73,228,192,122,-213,252,0,50,159,14,251,206,0,245,155,8,98,31,64,179,66,64,219,83,-0,49,64,220,149,247,190,196,67,27,64,231,66,92,67,103,107,43,247,225,-4,158,231,167,154,0,52,72,77,2,58,56,53,189,200,66,155,76,119,0,-53,106,230,0,39,142,108,0,83,64,16,64,98,99,132,192,30,2,95,56,-53,100,68,132,48,77,175,224,56,0,155,223,221,46,129,164,97,254,0,49,-76,200,128,34,64,36,1,95,56,219,25,107,225,1,58,56,66,53,65,126,-224,99,2,0,53,110,249,0,95,100,138,96,57,67,61,0,53,68,158,0,-50,87,113,96,239,224,85,0,212,182,0,58,96,155,131,246,99,10,0,53,-64,237,2,90,32,80,72,166,96,30,130,63,224,28,1,0,83,87,219,160,-132,189,197,202,76,0,49,123,29,103,230,0,50,141,220,224,10,2,192,30,-0,58,97,33,64,82,96,140,0,50,164,188,224,124,1,217,19,64,212,0,-52,160,184,128,8,4,64,64,95,51,55,96,241,65,160,3,95,50,50,51,-192,11,0,58,96,213,96,167,64,18,157,254,224,82,1,66,234,1,95,49,-96,26,129,24,224,112,21,74,183,192,112,1,49,57,224,111,1,224,122,0,-0,58,96,6,64,110,0,51,225,178,1,160,76,217,205,224,188,0,64,124,-88,252,160,152,64,60,130,235,2,85,32,58,96,51,129,125,67,243,157,160,-96,56,1,58,56,66,219,96,37,0,73,96,13,129,240,247,166,8,9,105,-109,112,111,115,115,105,98,108,101,164,21,89,230,96,54,1,75,52,64,2,-82,167,224,1,3,238,78,2,96,45,129,222,65,1,98,193,222,6,255,252,-0,156,101,128,210,65,232,72,53,64,67,192,73,133,164,159,165,166,145,131,-239,96,7,141,106,0,56,67,118,131,64,192,118,228,117,2,171,69,64,21,-130,24,4,73,32,58,56,52,196,114,96,34,98,65,101,182,0,52,129,119,-135,125,251,14,4,163,213,84,243,251,229,0,224,32,11,155,23,64,27,208,-168,224,41,4,100,4,160,41,96,29,220,70,160,252,1,95,50,103,79,2,-56,52,48,225,132,2,1,45,62,97,124,224,21,6,10,80,114,105,109,105,-116,105,118,101,115,46,160,32,224,89,5,132,126,187,44,225,148,4,198,179,-3,85,32,64,90,96,40,136,2,98,133,0,52,69,18,96,37,200,136,1,-75,50,97,235,128,21,0,51,130,53,142,236,1,95,56,67,124,168,4,229,-50,12,4,36,115,117,112,101,185,222,232,36,5,2,58,56,51,239,240,1,-64,70,224,52,2,0,67,64,48,1,58,56,72,38,128,107,65,75,0,90,-225,121,3,1,95,52,68,161,3,64,95,56,51,171,254,3,58,56,51,54,-96,45,6,98,115,43,43,46,32,58,96,24,132,60,66,123,71,224,0,51,-64,125,232,236,2,163,87,2,53,51,57,64,131,2,51,56,49,192,25,241,-226,0,111,190,163,54,100,147,102,226,100,161,64,85,0,80,64,148,0,90,-129,181,130,137,0,52,102,131,110,215,244,159,4,225,34,19,20,100,117,112,-108,105,99,97,116,101,32,100,101,102,105,110,105,116,105,111,110,32,161,49,-0,52,229,150,0,128,141,227,153,3,7,99,104,101,99,107,68,117,112,163,-151,0,51,130,220,131,233,64,211,1,95,54,102,156,1,51,52,222,92,252,-208,12,158,244,97,73,117,38,0,51,195,24,234,71,2,156,205,230,94,0,-158,74,1,95,56,146,217,238,107,1,234,34,0,236,239,1,0,58,96,85,-157,140,1,83,39,98,136,96,155,64,63,96,7,64,172,0,50,104,23,64,-43,130,151,110,194,242,136,1,245,110,2,128,66,0,75,65,118,132,29,64,-116,72,116,245,37,5,160,49,64,5,0,67,224,52,10,224,53,0,192,7,-140,172,64,58,160,68,132,150,244,235,5,96,58,224,236,3,224,23,8,224,-17,17,141,12,192,122,128,1,128,38,243,115,2,224,119,1,224,61,8,224,-64,2,224,65,2,97,18,224,46,14,160,93,129,180,245,117,0,65,17,173,-172,64,71,109,160,226,35,4,223,16,64,0,225,69,1,224,2,5,228,77,-0,224,137,3,131,98,67,5,1,95,56,113,157,192,126,64,137,213,185,128,-8,224,5,16,1,95,56,115,73,224,91,6,130,118,128,85,2,85,32,65,-224,90,0,192,29,225,111,13,0,89,225,110,1,226,13,3,96,134,225,219,-8,129,70,129,24,245,0,2,192,98,185,158,226,60,0,224,40,0,224,72,-14,225,132,5,224,31,4,129,196,128,87,69,248,138,66,97,135,227,52,0,-162,166,160,6,96,4,168,64,162,121,97,48,97,107,128,181,227,126,1,103,-24,112,112,131,178,224,9,1,224,68,21,225,101,0,161,192,224,60,8,199,-213,225,150,1,128,254,97,25,64,191,64,217,167,214,192,232,0,85,89,134,-65,208,224,208,10,232,39,3,225,26,0,224,8,0,226,214,18,224,28,1,-224,29,41,224,195,8,107,245,195,87,227,42,0,160,138,226,8,3,224,51,-0,194,107,227,84,0,64,35,1,95,49,119,235,204,9,166,93,161,86,204,-30,1,53,54,224,25,1,1,95,53,77,137,160,116,160,157,161,138,129,135,-2,64,95,55,118,202,226,13,12,107,56,205,254,166,151,146,255,128,156,2,-32,95,55,118,61,104,131,160,96,67,14,129,253,193,95,225,49,5,229,63,-5,128,233,226,245,3,225,18,0,226,242,95,226,214,3,242,96,0,129,74,-75,26,239,61,13,133,196,109,38,224,41,22,68,107,196,243,129,64,96,4,-227,57,13,1,90,32,224,13,2,129,15,227,1,31,0,75,160,112,227,2,-19,225,59,15,224,13,4,101,116,226,161,0,161,215,129,67,226,115,2,160,-221,64,157,135,215,96,9,2,54,57,56,210,12,0,67,64,13,241,243,6,-96,213,0,50,160,168,224,8,1,225,42,1,225,8,0,165,126,194,105,0,-89,161,255,161,232,235,200,26,97,52,0,80,129,24,160,18,130,3,229,216,-1,64,24,106,177,224,118,1,64,239,1,95,56,104,36,137,144,174,206,206,-215,202,64,2,79,32,35,74,240,161,86,193,170,64,5,1,58,56,67,161,-106,13,234,65,7,160,92,106,76,234,250,0,64,77,172,29,1,95,52,79,-145,66,47,112,150,64,40,112,184,0,50,83,116,64,19,170,114,64,13,0,-54,128,27,240,147,1,0,58,96,181,235,68,2,96,229,0,58,66,123,64,-21,134,153,1,95,56,90,162,129,179,0,56,80,39,254,129,2,91,43,192,-207,165,151,0,58,103,37,128,131,0,49,64,117,212,192,131,163,134,159,226,-24,6,202,208,230,182,1,227,159,1,129,136,224,13,10,236,151,0,131,194,-231,107,0,98,126,226,65,6,227,192,12,201,181,227,15,0,201,244,229,41,-7,1,95,56,122,86,252,91,0,169,209,128,2,98,249,1,95,56,68,210,-192,27,224,7,1,113,91,102,244,198,181,128,0,110,210,75,59,161,197,68,-255,224,228,5,231,196,10,228,110,0,163,223,144,162,224,247,5,229,228,9,-228,170,2,160,138,253,35,4,234,142,5,161,163,225,62,6,232,82,0,181,-83,233,164,3,3,67,32,95,50,94,117,160,43,161,42,239,22,4,197,217,-197,161,224,23,0,228,47,0,192,252,161,71,227,64,0,160,165,209,172,225,-33,0,105,61,128,27,246,9,0,228,154,3,64,238,224,32,1,201,44,224,-186,3,97,85,231,32,0,139,225,224,204,11,166,229,129,101,224,58,44,224,-55,11,97,167,237,208,2,196,68,249,135,1,109,172,68,45,237,153,9,2,-79,32,35,84,130,128,244,246,216,7,246,215,3,235,43,2,132,100,65,91,-248,19,1,223,92,129,22,183,39,128,182,192,189,229,0,1,192,17,82,198,-181,215,64,16,224,77,24,143,4,226,19,4,64,199,226,93,2,192,29,224,-89,3,132,196,64,72,200,24,237,232,3,197,208,230,131,3,131,203,162,149,-224,183,2,162,237,0,58,64,118,100,148,65,84,65,65,0,53,128,174,0,-58,100,121,143,229,0,50,114,197,164,196,75,206,96,131,0,90,64,89,96,-4,131,212,99,239,0,58,96,38,181,255,1,55,57,66,179,0,56,93,89,-1,58,56,95,246,110,35,102,99,67,162,225,21,2,150,8,96,41,192,6,-64,7,64,167,0,75,96,60,133,43,96,246,228,11,1,224,235,1,128,70,-111,221,167,99,0,83,228,234,5,64,99,1,57,50,227,65,1,2,95,55,-57,97,50,228,3,2,0,56,114,111,97,21,163,127,137,218,160,135,83,252,-96,66,96,228,218,68,164,23,1,95,55,89,253,0,83,161,125,133,61,1,-95,55,121,247,163,225,0,66,98,218,96,38,253,77,2,128,35,96,70,128,-14,0,56,88,212,2,32,95,56,66,167,224,140,0,128,101,242,149,0,224,-70,0,224,40,1,129,68,96,157,164,203,98,243,1,56,48,98,155,128,236,-0,58,96,224,175,210,169,109,128,162,2,95,56,48,65,12,202,75,224,104,-9,160,32,1,95,56,118,47,0,58,96,86,129,203,224,239,11,192,173,64,-63,154,250,235,152,1,192,172,226,147,0,2,95,55,56,97,83,228,134,0,-165,180,233,158,0,66,176,72,4,1,95,55,135,17,97,34,98,236,64,241,-71,176,0,57,141,11,193,251,65,20,225,1,2,103,253,64,183,66,148,96,-48,0,56,86,110,0,58,96,25,96,19,231,182,2,89,57,100,63,0,58,-96,36,103,172,1,48,49,224,35,2,241,197,1,1,67,39,145,234,0,58,-96,109,225,13,35,224,233,1,194,20,129,1,224,191,2,128,16,97,185,96,-176,64,249,0,58,97,132,224,177,7,65,20,192,177,131,97,224,177,16,0,-83,224,177,1,195,78,227,124,1,160,107,64,28,209,204,224,206,10,230,73,-1,160,200,64,30,225,168,9,96,190,134,6,192,18,66,71,1,95,55,115,-96,97,196,224,193,1,92,75,166,168,64,33,0,57,96,131,226,169,5,163,-207,128,131,130,56,231,236,0,227,72,3,224,160,7,224,153,0,226,72,10,-229,144,0,226,92,10,194,83,226,143,2,224,75,16,254,41,3,224,255,3,-195,59,128,78,87,184,96,219,196,53,227,238,1,162,197,226,133,3,0,54,-225,17,1,73,16,96,62,202,214,169,53,138,166,97,178,226,18,8,0,48,-194,18,96,198,96,30,1,55,57,224,25,3,0,58,97,136,224,55,7,93,-39,192,55,212,147,229,228,1,0,90,75,236,128,28,162,103,138,244,0,57,-90,253,100,122,224,79,8,166,74,64,30,229,47,0,163,5,149,147,97,91,-129,96,226,110,2,226,51,6,97,146,224,36,17,225,107,2,224,36,17,225,-220,2,224,73,24,64,6,224,73,24,64,6,224,36,17,101,44,128,73,229,-108,9,1,55,56,162,197,67,253,227,58,8,104,101,224,250,0,98,211,64,-8,228,126,10,0,66,189,34,224,30,2,65,226,0,50,227,77,3,224,55,-9,0,66,164,4,224,54,7,193,171,224,24,7,71,194,224,24,12,0,54,-224,49,4,64,38,192,6,0,58,96,6,226,118,3,163,225,0,58,96,222,-228,91,8,131,221,104,22,238,122,5,206,129,66,247,153,109,229,76,1,185,-149,125,63,224,32,6,235,236,1,254,17,7,226,148,3,167,89,224,126,11,-192,101,128,76,246,134,7,160,6,192,115,205,47,224,151,19,128,35,0,80,-96,75,224,44,3,178,98,126,129,64,152,231,237,1,236,202,0,224,202,4,-160,185,224,35,21,2,79,32,35,92,60,160,228,166,106,128,154,224,38,7,-0,49,224,38,0,238,193,6,226,47,1,1,75,52,194,47,224,35,18,0,-51,224,35,26,0,50,224,35,0,128,0,241,82,3,224,57,0,66,34,196,-235,1,80,32,97,69,92,0,64,74,64,20,156,169,164,134,92,67,228,163,-1,238,96,5,138,139,96,81,194,135,231,185,7,0,58,99,166,226,165,2,-199,251,0,58,99,221,224,24,3,165,142,0,58,99,209,224,24,2,197,48,-0,58,100,89,224,24,3,203,68,99,200,96,164,65,126,159,11,126,246,255,-11,13,252,130,0,252,120,3,65,4,192,32,96,31,225,197,3,96,230,71,-65,255,110,3,0,55,114,66,2,95,55,55,64,58,64,94,128,16,76,73,-128,9,0,58,100,138,5,10,65,32,79,32,58,96,37,123,172,0,58,96,-28,241,108,1,192,1,65,80,231,90,4,167,17,64,97,107,68,1,58,55,-64,240,232,80,0,162,112,128,207,224,14,3,224,11,2,192,8,152,147,0,-58,96,72,135,240,108,109,1,64,95,64,81,66,176,66,14,244,0,2,1,-58,55,65,116,192,163,239,160,2,224,107,1,224,178,2,224,19,20,99,25,-0,39,84,34,0,55,201,110,224,47,4,78,104,84,107,0,53,64,138,2,-95,49,54,224,36,0,225,9,3,239,79,5,99,151,128,53,0,55,148,185,-224,53,1,160,110,224,2,0,128,38,0,52,96,236,224,38,1,160,72,224,-85,1,0,67,81,122,129,233,2,95,55,55,202,250,0,39,241,144,1,239,-45,5,96,0,1,58,55,64,209,225,143,0,96,248,192,86,65,112,0,58,-96,72,66,175,7,52,50,53,32,75,32,85,32,94,76,224,120,4,132,92,-82,47,0,51,115,109,192,87,165,216,67,222,70,0,179,214,119,21,2,58,-55,54,130,135,159,131,238,235,0,157,10,160,14,253,72,12,2,32,61,32,-254,104,3,0,55,67,137,96,110,64,87,64,110,2,49,49,52,71,33,224,-27,0,64,127,0,54,76,205,1,95,55,67,156,67,17,96,134,64,27,0,-58,96,6,227,14,0,1,95,54,92,156,96,142,78,197,0,54,154,169,160,-160,0,54,79,170,192,67,128,6,128,254,224,43,15,65,120,0,54,147,245,-96,7,3,95,54,50,48,103,37,231,117,0,128,111,0,64,192,24,0,52,-233,202,1,224,96,2,96,29,2,64,95,55,116,189,0,58,96,23,100,61,-1,54,52,133,164,0,55,102,170,64,224,96,59,0,58,97,107,253,220,13,-166,75,193,109,128,45,196,216,5,54,50,32,58,55,54,131,48,2,114,110,-102,99,67,0,58,64,21,194,28,225,147,17,6,84,109,111,100,117,108,101,-161,152,135,89,128,98,99,23,74,183,0,52,64,220,161,47,241,138,9,224,-189,0,195,47,160,160,99,184,1,95,55,117,177,224,38,5,1,58,55,87,-214,149,116,149,113,0,58,96,38,144,132,131,139,65,49,163,46,1,58,55,-85,224,64,231,5,53,54,49,32,58,55,66,167,241,28,2,228,27,2,80,-23,66,68,246,155,2,239,247,1,161,64,64,41,0,95,99,103,239,6,4,-160,20,163,188,96,67,255,37,3,1,55,53,130,107,0,80,130,107,96,93,-160,99,160,6,96,238,227,251,1,2,95,55,53,186,46,224,127,3,228,72,-8,96,94,167,186,192,38,127,131,160,122,224,130,0,224,8,0,0,58,96,-88,96,138,1,95,49,78,187,230,106,0,2,58,55,53,167,6,227,70,2,-0,53,64,155,195,247,226,5,17,226,4,5,227,214,38,14,40,46,46,46,-41,32,119,104,101,114,101,92,49,48,38,163,226,1,55,53,196,170,163,181,-96,138,0,58,96,6,164,90,163,218,90,5,0,58,96,46,97,214,1,95,-54,82,145,100,113,2,83,32,83,165,254,180,62,64,151,173,84,5,67,32,-60,32,64,35,195,105,193,91,231,77,0,192,24,0,85,73,207,1,95,55,-73,2,224,41,14,130,40,160,41,224,43,3,133,127,2,54,52,51,96,164,-66,85,67,206,226,196,0,64,182,98,196,241,229,0,128,146,66,252,224,18,-6,114,113,224,19,7,108,53,203,32,160,19,129,173,164,133,96,110,225,102,-1,16,100,101,114,105,118,105,110,103,32,105,110,115,116,97,110,99,101,193,-104,0,51,133,184,64,213,224,212,0,147,97,2,49,55,50,224,64,2,22,-92,51,52,38,115,114,99,47,77,105,99,114,111,72,115,47,69,120,112,114,-46,104,115,64,22,5,44,54,50,48,58,56,128,80,0,85,64,144,98,139,-162,167,102,87,226,200,2,107,207,197,41,229,54,9,64,8,224,193,13,6,-112,97,116,116,101,114,110,224,183,0,109,3,165,64,68,18,229,64,0,0,-51,132,225,96,78,0,54,69,125,84,140,96,84,4,32,95,54,53,48,229,-142,0,68,24,160,52,96,28,214,65,195,254,2,95,55,52,207,155,96,0,-248,232,0,161,110,65,232,230,197,0,224,184,18,6,100,101,102,97,117,108,-116,160,184,224,146,1,166,4,165,234,0,51,128,62,0,51,150,180,1,54,-51,224,70,8,0,44,163,96,167,77,161,183,64,0,129,243,75,206,224,128,-13,225,242,14,96,210,226,85,4,113,188,224,229,5,65,101,64,95,128,228,-64,99,228,150,5,225,199,10,224,132,13,4,99,108,97,115,115,192,129,151,-112,161,196,64,15,168,217,0,85,251,194,1,102,12,224,92,13,154,44,228,-82,17,4,105,110,102,105,120,128,106,165,112,230,113,4,0,56,161,246,224,-23,6,67,62,167,157,224,24,1,162,31,231,141,1,248,48,5,225,177,35,-193,237,192,232,225,68,11,224,244,18,225,81,9,19,102,111,114,101,105,103,-110,32,105,109,112,111,114,116,32,99,99,97,108,108,226,100,10,224,185,5,-1,50,49,64,190,181,11,232,136,5,224,89,1,1,58,58,165,203,226,43,-2,228,128,6,69,158,224,18,6,67,101,226,61,6,64,103,0,85,105,234,-224,2,0,230,194,4,137,38,231,252,0,128,29,224,26,5,226,108,44,129,-18,194,2,64,1,141,14,0,55,69,142,66,111,103,123,132,24,224,58,6,-13,123,45,35,32,83,79,85,82,67,69,32,35,45,125,161,7,0,64,74,-34,129,78,224,44,4,8,113,117,97,108,105,102,105,101,100,192,39,193,229,-226,47,0,97,137,226,79,5,65,146,234,229,17,1,97,115,194,53,0,52,-152,81,224,125,2,228,109,1,234,93,0,0,48,80,49,0,75,224,65,4,-5,104,105,100,105,110,103,160,145,96,36,132,91,106,173,66,173,226,174,4,-74,126,226,249,1,132,91,226,31,1,96,0,228,228,5,229,166,22,2,116,-121,112,196,104,226,91,22,1,54,51,215,146,226,52,5,134,198,224,114,16,-227,111,7,224,192,10,195,106,226,214,24,98,153,1,95,55,73,1,128,52,-192,81,230,80,2,229,38,9,64,92,224,179,6,66,170,225,38,47,230,202,-19,224,166,2,227,5,19,224,108,22,2,110,101,119,224,111,29,66,139,105,-125,166,248,103,205,151,92,96,236,227,122,26,3,100,97,116,97,224,104,4,-224,78,0,64,57,241,126,3,224,211,53,224,103,8,224,208,10,226,46,11,-227,40,2,0,124,160,63,162,244,96,172,224,254,4,64,0,0,58,105,188,-116,142,0,85,64,136,68,50,73,233,224,149,14,169,102,128,89,64,35,227,-124,40,168,190,160,123,140,217,229,65,1,229,32,3,97,50,225,70,23,1,-95,54,98,68,231,115,0,163,27,0,80,96,32,64,144,192,254,96,118,88,-58,1,52,56,224,177,6,96,33,192,130,165,151,225,169,12,227,67,2,227,-117,12,96,99,224,248,9,192,236,65,129,77,198,192,100,239,60,4,0,49,-65,72,161,40,224,18,0,248,59,1,64,180,129,40,162,170,163,60,97,130,-224,69,1,0,51,224,68,1,163,92,0,58,96,149,110,61,0,80,226,237,-0,83,63,129,40,248,215,1,229,122,3,224,28,0,225,223,4,1,55,52,-102,79,231,237,8,224,208,2,225,31,10,3,40,46,46,41,229,18,1,121,-39,69,127,204,229,97,162,226,48,13,0,58,96,112,5,10,65,32,65,32,-58,102,210,113,172,0,57,225,2,0,205,228,212,23,64,15,100,234,96,21,-72,231,0,53,85,134,103,19,0,58,96,6,226,230,21,97,114,224,125,0,-227,92,11,226,207,9,229,200,22,225,44,4,224,66,0,247,125,1,224,39,-12,192,0,0,58,106,55,224,179,9,224,101,3,97,229,1,95,54,159,163,-225,120,5,1,61,62,161,118,64,72,131,227,228,162,7,192,7,182,41,76,-15,98,100,128,209,99,28,160,222,140,57,166,241,160,172,209,105,68,158,113,-105,3,51,55,32,58,96,144,128,13,104,7,92,201,99,243,130,249,0,89,-248,106,0,102,94,79,227,128,97,67,125,234,35,0,176,125,96,95,174,223,-96,17,149,40,132,31,64,1,1,83,32,91,66,64,0,224,68,1,224,61,-0,137,138,224,46,3,238,0,1,193,102,255,96,2,66,81,128,5,102,9,-160,81,239,90,2,107,186,128,10,249,129,8,165,80,128,102,119,154,228,208,-3,192,11,96,74,160,208,196,232,160,96,160,58,128,35,1,95,54,112,86,-64,20,64,64,239,219,2,153,64,229,20,5,128,90,225,26,5,243,186,3,-224,139,5,160,31,229,92,0,96,63,160,14,98,64,132,59,129,219,218,123,-224,181,47,224,166,6,96,163,224,160,10,224,133,13,224,125,2,226,0,0,-226,21,0,193,13,218,236,192,98,156,66,250,84,4,0,64,99,179,160,151,-160,24,80,158,99,173,0,55,68,33,64,110,0,95,87,246,130,24,96,10,-128,48,214,3,192,227,250,61,5,227,107,1,1,91,93,234,143,0,187,124,-224,105,4,224,92,2,174,0,1,95,54,68,105,1,95,54,96,160,96,0,-148,18,131,201,100,93,120,86,84,103,115,179,0,54,182,255,96,41,192,4,-96,153,66,110,161,65,96,159,211,151,161,105,195,35,161,182,129,51,161,56,-66,233,169,243,97,137,198,31,224,26,5,98,41,224,26,12,140,194,64,79,-224,22,5,147,243,234,65,5,64,232,68,198,0,51,96,51,143,211,238,233,-23,0,95,201,2,238,150,5,129,203,224,95,6,64,192,2,85,32,75,229,-143,4,232,28,0,237,230,0,186,91,226,128,5,128,48,168,189,229,239,6,-241,69,2,100,247,192,128,129,230,225,15,7,245,59,0,64,26,224,159,5,-96,187,96,126,224,31,0,96,30,231,194,17,224,26,8,0,49,66,28,232,-83,1,224,203,0,227,78,6,245,214,3,201,49,227,95,7,225,99,1,0,-45,198,38,197,74,96,86,193,69,65,225,231,223,11,74,136,232,224,6,226,-60,13,98,206,225,44,12,0,49,169,145,242,119,7,65,170,98,30,224,211,-1,192,12,114,176,97,134,225,25,6,248,97,1,231,68,4,160,202,164,57,-234,81,19,128,31,98,207,225,109,1,225,137,1,194,31,226,28,6,237,152,-8,194,161,224,67,1,255,105,2,193,176,232,113,4,232,12,2,225,40,16,-100,190,132,250,226,85,6,104,19,226,8,16,224,232,17,226,8,11,241,21,-10,245,109,15,1,105,102,163,151,0,54,73,97,226,79,14,224,152,5,230,-147,7,224,21,0,0,54,76,208,226,181,5,181,67,0,79,163,28,224,127,-17,226,236,6,224,48,17,2,116,104,101,181,89,199,13,224,43,17,2,101,-108,115,174,74,226,222,4,64,0,64,100,229,67,17,194,234,224,25,9,194,-118,227,31,10,96,252,228,49,12,118,165,225,219,18,225,213,1,226,243,2,-226,10,25,225,252,0,224,51,0,227,128,7,67,100,234,215,1,151,219,115,-112,238,10,5,0,111,97,36,235,252,21,0,46,160,37,163,66,2,52,52,-32,112,74,96,133,216,199,1,95,54,103,35,96,0,70,32,91,230,64,0,-227,11,12,100,51,225,46,12,98,178,227,97,0,160,246,229,238,17,96,15,-101,242,229,243,9,237,186,2,229,243,3,160,76,225,24,3,160,7,224,245,-6,1,108,101,179,155,224,243,18,239,142,0,226,226,15,226,175,0,224,38,-0,226,123,19,96,216,196,34,224,25,4,228,60,17,228,59,1,228,40,5,-121,226,229,50,4,224,162,13,1,99,97,227,40,0,224,25,6,0,111,195,-159,225,0,18,190,7,97,244,0,75,133,207,254,14,1,128,22,230,3,7,-229,241,3,254,108,2,1,55,50,64,154,244,190,10,228,138,3,64,0,203,-43,202,69,131,39,227,143,5,192,183,129,229,231,199,10,225,52,2,64,33,-4,64,95,53,51,55,137,133,97,61,0,55,105,167,106,90,64,9,1,95,-55,237,211,4,64,34,73,175,239,118,1,0,85,72,215,138,159,128,32,64,-89,192,114,96,128,227,158,1,128,3,193,252,139,111,0,95,202,39,193,65,-163,29,3,95,55,51,53,171,0,248,68,14,2,115,116,36,129,30,202,31,-129,104,160,69,235,135,1,234,130,7,245,184,2,225,67,0,228,107,4,160,-18,163,93,97,38,1,39,32,163,72,234,158,2,65,246,94,223,128,9,129,-203,93,140,128,9,128,17,0,58,78,69,142,185,1,95,55,111,40,75,84,-64,22,144,25,226,184,4,0,50,112,6,2,95,52,56,111,12,0,55,73,-72,0,58,96,52,176,107,98,119,1,52,56,145,164,160,9,64,8,0,55,-74,146,160,24,64,49,0,51,239,116,0,0,79,161,156,96,146,79,120,239,-9,0,96,51,96,45,143,162,3,66,32,80,32,110,5,0,85,96,116,239,-110,1,1,80,32,130,83,0,80,96,23,143,96,129,30,163,14,161,187,129,-30,226,31,1,193,68,167,29,162,142,230,233,3,96,141,99,159,193,108,196,-90,195,89,230,233,1,103,168,230,206,0,0,58,67,49,143,233,248,227,10,-224,18,6,155,52,230,206,8,230,52,13,97,29,106,194,161,204,161,48,1,-35,57,212,26,0,54,97,116,0,54,228,253,0,0,85,172,158,224,98,6,-64,194,224,98,6,65,158,160,45,64,104,249,238,10,224,22,14,224,209,7,-109,251,224,18,5,64,176,247,166,12,204,121,128,75,100,146,128,226,98,69,-96,28,1,54,55,84,95,108,243,160,133,224,36,0,108,124,96,36,1,55,-50,212,246,225,56,7,202,237,128,49,189,202,224,12,1,192,62,192,94,224,-43,6,237,25,8,0,58,101,64,66,241,91,241,101,194,123,28,66,231,146,-37,0,53,84,75,64,18,0,55,192,150,2,95,49,50,96,194,64,11,0,-58,96,6,192,63,2,95,49,51,96,125,131,81,132,76,128,43,64,17,0,-58,96,6,9,10,65,32,102,115,104,111,119,32,58,96,32,224,58,0,2,-54,55,51,92,157,1,54,55,72,161,0,55,132,27,192,117,117,118,160,73,-64,11,0,58,96,6,96,58,0,48,64,112,92,196,3,95,55,48,57,64,-31,64,56,2,95,55,49,96,43,96,11,2,49,56,49,224,11,2,90,246,-160,35,104,134,1,49,57,224,41,0,0,73,67,115,64,9,99,115,143,8,-165,121,67,152,3,95,50,48,55,230,45,2,21,73,110,116,101,103,101,114,-58,32,100,105,118,105,115,105,111,110,32,98,121,32,48,230,200,0,245,39,-0,135,130,64,79,0,85,125,125,0,55,65,128,0,55,133,103,128,215,224,-17,7,128,64,248,29,7,64,9,236,156,1,113,78,130,25,224,16,2,138,-222,162,171,99,253,229,95,0,70,27,3,95,55,49,50,251,252,0,105,69,-210,137,228,49,4,1,95,55,111,222,1,95,55,205,114,208,206,145,17,0,-55,77,114,0,85,133,139,131,160,236,59,5,139,142,118,115,144,38,128,86,-81,205,175,188,101,193,224,119,0,65,126,102,250,99,52,1,95,55,178,22,-160,0,0,58,97,166,1,10,65,225,128,9,5,105,110,105,116,58,32,177,-74,129,95,193,64,246,166,5,197,131,192,88,0,58,96,9,69,179,97,39,-64,152,2,95,53,54,98,66,69,30,0,58,96,142,119,2,227,244,0,2,-95,53,56,69,60,193,49,98,14,128,107,100,179,96,55,65,88,84,196,114,-31,244,51,0,98,84,64,30,166,126,135,165,148,218,98,22,239,221,7,0,-67,96,144,0,67,69,135,193,36,230,182,3,129,213,193,209,236,209,6,194,-7,160,98,64,70,7,95,49,51,56,32,95,49,57,232,169,2,209,244,113,-253,82,246,192,28,97,160,242,226,0,0,67,71,200,210,238,65,30,64,0,-2,95,54,56,167,213,135,24,97,4,0,58,98,18,99,53,96,198,201,6,-0,67,112,188,244,7,0,64,11,64,25,224,7,0,66,139,0,54,98,248,-1,55,48,231,252,1,64,255,1,95,55,110,197,160,6,194,66,96,26,97,-110,0,52,97,110,0,54,64,184,1,95,55,151,190,129,20,160,49,64,28,-0,56,198,52,96,58,68,217,96,231,67,6,0,48,140,65,163,63,169,4,-96,12,0,89,162,76,139,57,64,5,160,33,137,91,64,69,0,55,132,108,-134,180,227,30,0,161,122,235,57,2,65,128,97,211,227,180,0,1,95,55,-207,128,128,95,160,163,128,220,160,12,99,165,140,210,1,95,55,135,240,166,-241,224,197,15,64,39,64,48,192,243,225,16,3,105,104,228,96,1,96,232,-131,130,64,142,0,53,69,107,98,15,226,183,0,244,122,1,98,232,136,15,-131,229,204,226,224,78,3,224,13,4,0,58,100,48,101,149,224,20,0,0,-79,107,204,137,155,64,205,227,5,0,133,126,0,75,98,60,134,6,100,82,-0,58,97,191,168,244,72,218,196,224,226,245,1,246,22,0,2,95,54,56,-102,211,0,54,75,220,98,154,160,133,197,194,105,173,106,125,137,47,0,58,-68,255,96,160,0,50,97,23,107,113,121,253,0,58,96,38,202,33,97,240,-1,95,49,65,76,128,146,164,15,224,27,6,96,188,0,48,184,205,2,49,-48,52,68,20,1,55,48,104,176,65,88,65,27,0,56,96,34,167,97,0,-52,76,142,97,161,194,184,0,50,96,11,100,252,66,79,88,31,64,1,1,-95,54,104,39,96,67,131,25,2,95,55,48,96,234,224,13,0,65,225,100,-90,64,111,225,114,8,189,243,0,58,96,39,224,29,2,0,52,224,29,6,-199,127,230,129,6,0,58,96,102,97,146,0,75,226,62,5,0,58,96,167,-106,238,100,114,231,28,1,230,197,10,229,133,1,231,77,11,224,48,20,103,-53,132,59,249,79,1,198,243,228,238,3,184,222,64,13,234,244,7,96,97,-226,30,1,100,47,65,87,132,192,248,48,2,160,62,160,110,229,66,0,224,-116,2,227,194,0,229,123,2,217,67,224,117,21,224,115,5,224,113,5,224,-51,16,0,55,236,244,0,224,0,0,0,58,98,44,236,12,0,0,57,73,-48,0,56,167,93,96,16,109,189,66,123,66,233,70,176,66,62,99,195,2,-95,54,57,99,221,0,48,160,15,164,24,64,15,224,157,5,0,58,96,119,-108,253,1,57,55,104,46,248,237,0,2,49,56,56,128,10,3,95,49,55,-55,172,162,230,240,5,224,34,13,1,73,32,64,2,0,83,166,113,96,168,-192,139,100,194,192,96,160,46,131,236,69,131,129,100,192,56,197,102,102,72,-160,10,224,60,1,224,137,6,160,119,166,234,2,54,57,56,231,192,5,225,-16,4,211,128,225,251,0,160,75,65,94,96,44,161,234,224,70,0,2,50,-54,55,224,71,0,64,72,74,114,177,242,224,42,7,224,113,2,224,41,6,-0,58,96,8,163,95,1,75,52,238,196,0,0,58,64,37,129,228,168,29,-232,102,0,162,50,167,75,0,82,224,22,4,225,35,0,0,58,96,122,162,-36,224,1,1,153,251,226,211,0,224,20,5,224,17,8,224,14,5,224,11,-2,192,8,130,246,96,109,132,123,0,85,128,195,224,197,2,0,54,224,197,-5,64,164,240,184,2,192,18,1,66,39,224,21,3,167,6,224,29,0,162,-217,240,0,1,64,88,132,176,235,141,10,5,102,111,108,100,108,49,182,102,-81,98,64,45,132,196,233,32,1,113,43,104,117,235,1,6,233,109,1,234,-65,1,211,60,136,23,128,135,233,78,5,201,20,134,20,129,250,101,197,233,-86,3,233,57,0,164,67,226,182,2,233,96,3,128,222,133,91,224,79,0,-71,38,128,169,204,41,160,6,0,53,96,222,132,16,98,1,198,86,70,228,-102,92,101,162,0,73,197,19,0,83,75,114,64,212,229,95,1,138,111,230,-24,2,231,217,7,96,144,203,8,168,206,229,37,0,252,230,0,131,51,197,-66,234,206,10,164,221,192,86,196,181,169,123,133,220,128,8,1,95,54,96,-134,162,25,135,151,128,64,71,216,224,64,2,129,80,224,25,3,131,10,64,-14,193,108,237,48,2,224,174,12,224,124,7,106,137,227,104,1,224,127,17,-224,101,3,224,130,8,224,156,5,225,91,4,192,247,97,102,0,50,226,185,-2,12,92,51,52,38,108,105,98,47,68,97,116,97,47,174,84,2,46,104,-115,64,22,4,44,49,50,56,58,130,212,0,58,97,225,101,155,0,56,68,-129,69,178,0,58,96,109,162,225,97,124,128,222,244,15,3,96,5,65,92,-226,241,0,229,168,7,197,50,225,228,0,64,57,227,177,4,195,216,192,7,-72,230,73,187,66,227,224,202,33,3,54,52,58,54,249,134,4,227,92,1,-139,38,131,248,227,108,1,174,98,227,93,2,76,114,174,58,228,54,0,163,-38,0,54,83,197,230,201,0,228,97,0,224,80,11,235,202,2,224,80,2,-97,153,96,69,97,108,132,217,64,65,97,86,68,51,85,21,238,2,1,142,-56,227,235,11,228,36,13,160,47,235,108,4,224,61,11,103,9,228,39,4,-224,79,11,228,85,18,231,9,3,0,58,96,208,164,36,207,34,233,119,19,-168,137,96,96,74,8,107,82,181,15,245,0,0,2,54,50,56,229,67,10,-0,64,174,18,0,58,96,57,130,169,106,240,130,169,170,54,228,30,5,193,-68,229,147,6,161,199,229,149,8,226,33,15,135,118,1,56,50,193,204,230,-83,1,99,173,118,140,201,245,226,121,46,224,91,0,226,121,10,224,95,3,-226,121,32,224,80,1,161,110,102,230,0,58,96,24,226,121,1,226,100,38,-132,119,226,11,2,224,10,1,0,58,96,97,1,10,65,67,240,0,58,96,-173,108,146,0,56,70,92,65,215,0,51,100,86,140,115,143,147,0,54,78,-10,2,95,54,55,140,208,78,244,0,53,89,56,160,34,86,57,96,10,0,-58,96,6,202,153,0,50,83,211,160,65,0,58,96,53,102,63,224,16,0,-227,87,1,160,42,192,27,64,28,0,54,160,45,134,102,226,40,3,96,19,-129,112,64,19,112,219,165,176,1,95,49,119,199,160,35,232,108,1,143,4,-229,215,1,96,97,248,6,0,137,243,173,206,161,106,65,174,0,50,116,213,-227,237,3,225,212,0,98,101,110,51,97,125,226,173,0,230,108,0,0,89,-160,36,208,46,226,98,2,192,148,96,170,197,71,208,38,144,105,64,14,251,-176,0,209,50,97,38,113,104,224,143,3,194,96,236,62,0,96,148,224,146,-5,65,253,233,34,5,6,108,116,87,46,99,109,112,219,130,177,192,184,199,-179,126,96,5,0,58,97,49,104,65,2,95,54,55,98,221,69,239,0,58,-85,161,129,160,3,83,32,95,51,105,15,65,17,70,132,64,221,64,212,64,-140,68,50,96,7,0,54,226,248,1,204,20,131,36,1,95,51,78,69,0,-58,96,85,243,134,0,192,240,231,149,1,164,33,97,243,64,255,195,48,224,-117,39,198,225,232,186,6,199,35,97,159,235,244,3,159,153,128,37,129,95,-87,63,0,52,169,22,65,217,128,171,2,95,54,50,224,131,26,224,73,10,-160,144,224,95,13,162,67,171,1,224,107,39,160,75,203,51,0,58,97,191,-97,202,100,140,81,92,64,114,138,13,168,234,146,38,110,20,93,101,225,11,-5,216,135,235,69,1,113,87,131,3,81,209,223,73,145,110,2,49,50,56,-226,114,2,2,32,37,32,162,110,224,45,5,96,48,119,220,66,91,97,14,-64,15,118,6,128,15,0,58,96,6,183,136,232,137,2,85,110,229,86,2,-161,13,122,32,193,5,1,95,53,87,252,91,192,120,128,0,54,231,42,0,-92,162,77,147,96,16,0,58,96,51,130,125,131,99,195,212,125,4,1,64,-35,123,177,224,28,15,179,169,224,18,3,130,219,0,58,96,93,246,174,11,-2,108,97,115,246,174,1,132,129,1,85,32,96,209,0,95,215,68,0,58,-96,8,109,81,131,226,126,194,0,64,187,162,123,148,254,178,15,1,58,54,-65,186,251,163,11,71,207,250,190,6,107,102,195,0,251,201,1,90,43,96,-117,125,157,0,54,235,167,0,225,247,2,64,142,200,114,192,12,224,25,1,-224,21,0,1,95,55,77,129,223,123,65,186,164,241,128,24,255,120,7,1,-46,46,196,148,128,30,186,183,224,137,5,224,117,81,224,110,14,224,97,21,-224,189,20,225,112,7,105,211,225,112,5,64,197,123,156,224,115,1,224,102,-30,224,173,19,120,135,64,70,64,8,225,15,5,0,49,91,50,230,120,0,-158,1,96,7,71,212,225,50,7,190,26,230,76,2,92,220,2,54,54,52,-94,254,160,228,2,58,54,54,207,142,224,140,5,224,15,1,159,210,128,154,-224,103,12,181,152,96,76,134,115,225,4,1,64,5,192,49,72,229,160,153,-192,17,0,51,160,17,0,58,96,117,99,113,1,58,54,69,37,106,122,72,-159,149,217,127,18,208,52,0,54,183,41,130,76,67,82,111,55,119,204,102,-39,0,58,64,57,128,46,0,89,136,113,231,210,0,165,175,136,54,67,253,-0,50,93,82,232,126,0,166,84,64,5,96,12,242,82,0,244,78,2,227,-133,8,224,25,1,224,27,5,133,96,226,48,4,65,117,3,85,32,75,51,-228,87,7,9,115,101,112,49,32,65,98,111,118,101,194,31,224,37,16,4,-66,101,115,105,100,224,38,0,224,124,1,228,11,12,1,95,53,138,146,224,-37,0,70,51,100,184,135,70,102,160,230,195,1,0,53,127,178,161,5,96,-189,232,168,1,64,88,83,16,82,47,225,47,0,66,19,65,119,1,95,54,-152,229,128,0,129,93,225,56,2,224,97,0,225,31,4,194,151,199,198,167,-215,192,207,224,42,3,175,118,224,195,2,224,79,0,89,130,0,53,141,242,-161,189,128,69,167,23,64,11,244,87,6,224,71,19,239,249,1,224,71,6,-97,1,2,95,54,53,96,32,64,19,249,111,7,224,90,0,232,161,12,228,-66,1,128,22,135,187,64,1,1,95,53,81,160,225,102,41,224,195,4,96,-144,0,53,83,89,71,43,224,232,1,111,227,2,64,58,54,67,33,195,15,-161,157,233,65,11,222,107,225,189,1,225,192,20,209,12,128,26,198,100,64,-191,1,61,61,224,30,8,225,109,0,223,17,226,96,0,224,66,18,192,201,-224,66,2,129,39,71,211,1,54,53,241,220,1,0,53,67,89,219,144,150,-166,193,52,96,77,64,180,1,95,54,105,180,196,209,193,199,0,53,86,72,-129,105,226,206,12,132,95,65,68,136,20,231,156,8,64,77,227,250,49,7,-111,110,101,76,105,110,101,114,227,254,25,224,41,0,228,2,6,227,249,20,-0,85,104,155,97,30,64,0,224,167,6,103,134,227,106,9,136,186,131,86,-224,60,0,224,20,0,78,69,224,81,0,224,61,6,64,115,122,112,196,120,-64,137,222,154,0,58,96,53,218,120,235,35,5,100,192,225,244,3,164,140,-224,63,1,0,58,97,239,98,197,0,85,193,223,0,53,129,208,0,53,64,-41,2,58,54,53,134,202,130,180,110,118,224,90,0,98,217,128,169,230,9,-5,174,135,227,127,2,224,19,0,128,17,167,134,64,5,102,182,166,193,199,-65,243,87,7,160,152,98,63,249,161,1,0,53,99,11,0,58,96,168,192,-193,233,148,5,64,100,231,245,1,160,17,232,61,6,1,32,124,129,243,231,-249,41,160,174,0,58,96,136,109,253,0,80,166,230,232,110,7,106,166,224,-119,6,1,60,45,233,28,5,160,6,97,128,0,49,224,164,7,2,108,101,-116,224,165,1,1,52,52,126,58,128,207,64,88,128,152,0,52,167,109,0,-58,96,162,176,92,0,52,72,47,99,135,0,58,64,86,225,201,1,97,237,-246,244,0,160,181,0,52,151,164,160,180,224,129,4,3,119,104,101,114,195,-29,224,132,26,96,134,247,35,0,1,32,80,133,149,0,55,64,130,65,14,-104,107,225,42,22,2,79,32,35,72,160,234,169,5,129,216,224,71,0,224,-18,1,225,217,10,5,100,101,102,97,117,108,161,56,160,37,96,159,96,8,-122,138,211,70,64,174,64,26,98,70,253,155,1,133,87,121,214,0,58,96,-49,169,211,1,80,32,136,163,0,80,65,86,64,132,73,89,64,160,0,58,-96,190,224,37,1,98,161,128,37,209,96,198,83,133,20,0,58,65,72,225,-172,5,137,155,65,138,160,71,158,33,209,149,232,96,6,229,213,7,209,40,-164,9,232,143,7,224,46,7,2,95,54,49,132,155,64,12,64,5,0,58,-96,133,226,205,19,97,61,0,48,227,40,9,0,54,227,40,6,0,51,132,-160,225,203,17,224,72,38,235,246,14,1,58,54,79,211,213,137,115,177,107,-96,70,113,2,50,50,54,97,88,111,78,134,141,170,232,64,54,202,206,252,-74,0,251,150,0,212,93,226,30,0,242,83,1,103,208,176,153,110,233,141,-118,96,0,0,58,64,198,129,229,228,114,20,5,102,111,114,97,108,108,228,-118,5,192,235,133,0,225,11,8,2,58,54,51,231,40,0,229,137,0,133,-228,193,226,225,218,6,64,165,208,204,137,1,1,95,54,75,150,103,171,161,-81,96,201,108,143,0,50,237,218,18,96,46,224,194,6,1,58,58,196,189,-1,54,51,135,213,0,58,96,187,131,8,2,56,32,58,96,22,189,200,208,-15,1,51,56,65,42,2,95,52,54,140,167,0,53,227,124,2,64,153,225,-195,27,116,187,225,195,1,65,57,251,208,1,193,164,225,9,0,96,153,108,-220,167,182,224,35,1,2,95,54,49,77,68,64,85,64,13,160,116,64,113,-96,211,137,102,0,58,96,8,109,65,0,75,103,242,129,56,224,9,0,1,-58,54,81,11,160,229,225,74,0,103,62,0,52,208,245,64,40,240,184,0,-1,95,52,72,239,160,41,65,7,96,124,128,54,3,57,32,95,52,106,108,-224,60,0,64,61,130,164,2,75,32,89,177,239,97,49,196,153,129,252,129,-219,117,12,103,141,129,2,122,221,129,119,0,50,114,62,0,49,85,40,0,-49,68,229,194,211,186,174,97,246,241,179,4,98,119,170,231,162,142,120,216,-2,51,56,49,241,213,0,96,34,128,0,0,58,64,188,131,75,255,157,8,-171,125,169,32,147,133,160,51,130,208,114,179,64,230,5,95,49,51,49,32,-35,79,57,147,104,3,49,32,64,35,107,197,0,58,96,219,163,170,169,242,-64,20,0,54,224,20,1,64,38,128,20,255,7,1,114,138,128,20,239,64,-19,68,6,164,110,192,17,196,169,0,58,99,22,165,156,0,49,73,161,167,-73,64,68,213,238,225,53,2,79,168,121,179,224,20,3,94,140,224,20,8,-116,65,224,20,7,69,242,224,20,9,129,15,224,20,5,109,48,224,83,8,-65,4,224,20,8,224,125,11,97,186,224,20,7,98,242,224,20,8,224,125,-11,99,240,224,20,8,65,151,224,251,8,225,16,11,68,200,224,146,9,224,-167,12,224,83,11,113,173,224,21,10,224,148,11,146,60,224,20,6,1,56,-55,108,122,224,22,8,142,134,224,22,8,139,49,224,22,10,128,177,227,55,-5,2,56,55,48,64,45,198,107,185,106,224,7,181,2,58,54,50,132,194,-79,65,124,233,108,59,0,58,100,232,227,28,4,128,45,70,247,232,185,93,-164,10,232,185,0,64,133,160,121,100,0,96,196,96,62,76,155,73,198,0,-58,96,52,230,104,8,87,252,230,104,1,70,117,232,44,7,74,226,64,54,-64,250,0,58,96,21,230,118,18,101,137,230,118,21,66,152,230,118,1,64,-127,96,109,143,67,0,58,96,8,224,201,3,136,21,224,201,6,202,33,225,-56,0,243,149,1,225,60,1,161,61,225,63,9,224,24,0,224,168,1,192,-19,97,83,192,85,96,71,129,101,225,103,0,132,254,0,65,65,9,201,123,-0,48,91,133,0,48,101,29,70,188,128,19,0,56,90,216,1,48,32,65,-11,90,150,113,216,154,121,135,103,224,20,6,134,110,0,58,96,70,180,182,-0,48,129,210,102,64,1,95,54,67,92,2,95,54,48,139,61,65,221,0,-75,64,111,0,48,216,26,0,65,96,13,129,169,103,41,0,58,96,43,97,-36,136,218,226,139,1,207,32,124,95,249,194,3,142,222,82,151,0,53,158,-185,128,57,96,16,99,243,177,0,96,37,121,111,67,253,143,77,2,95,52,-49,243,18,0,0,58,96,173,194,37,64,87,240,185,10,192,138,2,95,53,-57,112,0,160,89,226,84,0,232,201,5,224,47,2,2,54,48,50,224,47,-3,0,58,96,9,135,77,227,68,0,242,106,2,129,215,241,96,8,239,190,-0,224,39,18,131,68,188,34,244,77,18,130,162,226,65,3,64,8,210,151,-224,7,5,224,190,7,224,54,4,224,145,0,227,252,2,192,13,254,9,2,-136,246,101,123,1,53,57,246,104,0,224,89,6,160,165,225,220,0,1,95,-54,119,84,128,37,129,194,137,61,160,15,224,51,0,224,219,5,245,247,7,-192,171,161,17,226,76,1,245,237,0,224,88,7,224,104,11,225,119,1,160,-226,242,66,5,224,94,0,160,32,224,145,4,224,222,1,212,244,130,166,128,-224,245,187,2,224,118,7,224,50,7,133,210,160,130,229,174,0,227,37,3,-160,217,228,63,7,224,225,9,128,88,148,41,160,0,164,138,224,193,11,128,-36,224,142,3,160,189,213,187,224,188,10,132,134,0,58,96,16,234,110,1,-234,243,1,165,3,225,85,15,227,182,2,227,93,5,192,24,0,85,202,10,-224,33,8,96,145,243,118,3,104,17,150,220,1,79,32,125,18,236,203,0,-64,255,99,247,2,95,55,52,100,131,165,15,1,52,57,97,68,64,143,157,-129,0,64,65,110,1,95,49,92,188,130,194,0,58,96,6,227,198,3,192,-193,246,89,6,227,114,3,225,209,5,228,79,3,225,66,1,160,14,64,0,-227,200,1,225,221,12,163,238,225,0,0,97,189,151,57,97,4,195,90,128,-54,227,231,20,224,67,5,99,27,102,237,250,83,1,228,1,3,64,252,165,-236,130,124,225,193,1,250,85,12,98,239,132,22,224,210,0,250,80,86,0,-97,86,76,3,78,101,115,116,246,86,25,224,42,1,250,90,58,225,178,13,-250,90,10,225,238,1,229,141,2,224,24,12,64,0,225,54,24,163,118,224,-126,1,224,39,1,228,140,10,226,18,7,197,170,250,72,19,224,151,7,250,-84,7,224,82,2,132,223,131,235,224,74,0,81,141,0,39,228,195,0,130,-47,134,41,193,48,225,54,2,225,55,0,233,10,10,160,151,224,138,2,224,-205,4,131,3,163,27,128,139,250,170,12,230,187,0,225,42,15,233,103,9,-192,148,228,246,2,225,179,16,192,52,0,95,154,149,96,0,111,165,0,58,-96,36,197,18,227,64,29,192,153,247,207,9,224,23,1,225,200,1,225,237,-12,229,72,14,224,167,0,129,179,3,64,95,55,53,225,212,2,229,91,27,-96,125,225,76,0,192,72,176,39,133,59,112,35,0,52,74,187,196,77,96,-118,161,70,193,33,217,91,65,71,1,55,57,64,161,198,75,187,197,97,213,-248,223,4,230,68,30,192,48,224,28,4,96,115,224,224,8,96,21,232,63,-5,225,57,14,97,54,160,198,64,53,225,57,5,225,58,26,241,105,0,169,-25,0,50,64,9,235,101,5,128,77,163,149,70,129,0,58,96,107,140,221,-2,51,32,58,100,84,246,232,10,64,28,101,158,64,188,66,101,194,217,98,-168,228,36,0,119,45,130,54,162,225,161,77,201,36,226,90,25,227,69,11,-224,39,4,229,207,4,224,242,0,225,130,1,65,36,225,125,4,229,157,6,-0,98,69,152,0,103,217,83,229,118,4,160,84,164,114,192,135,197,119,160,-198,111,9,96,132,105,48,226,240,1,160,169,228,245,2,195,2,255,45,7,-163,163,224,227,17,226,42,3,233,67,15,233,121,5,224,124,4,159,82,168,-13,228,159,0,224,42,3,228,112,0,226,65,5,128,138,225,3,0,192,193,-225,223,0,254,186,26,225,55,0,193,194,224,46,13,161,197,224,28,0,225,-200,50,0,49,225,201,11,224,88,0,226,133,3,225,208,4,227,190,0,132,-249,64,61,96,195,225,213,2,229,165,0,72,209,160,70,225,187,5,224,220,-13,231,198,1,230,19,24,164,145,224,109,4,160,79,225,203,2,227,252,0,-78,177,102,128,228,27,0,225,223,1,224,68,9,225,231,2,226,138,14,229,-121,4,0,64,111,69,104,211,64,6,64,4,0,58,110,246,111,143,68,59,-0,73,100,10,175,246,2,53,56,57,68,48,249,73,1,190,171,1,64,58,-64,25,160,34,2,55,32,58,96,195,228,83,1,96,241,100,83,71,184,128,-37,0,53,64,37,0,54,224,37,3,97,138,128,37,219,60,135,136,65,164,-64,138,0,58,99,132,234,49,1,226,112,8,2,95,53,56,96,106,96,11,-224,246,2,128,38,134,101,0,95,87,22,102,68,65,245,129,249,96,227,64,-101,208,122,167,64,224,42,0,101,68,128,142,230,50,2,128,80,96,109,226,-11,4,195,166,131,61,230,50,36,199,172,230,50,11,192,86,230,50,0,96,-236,98,26,232,155,11,234,229,7,129,169,0,75,80,193,128,34,64,110,160,-10,227,103,7,3,102,105,116,115,217,240,151,3,96,108,130,20,0,53,162,-20,67,121,88,171,0,50,230,34,1,96,240,225,151,1,233,145,0,225,167,-0,193,185,239,65,1,230,63,10,227,67,2,234,170,22,229,45,7,224,35,-4,240,18,3,228,86,2,64,22,224,238,6,10,100,105,115,112,108,97,121,-32,108,97,121,203,184,192,141,195,68,231,152,5,192,29,65,79,174,7,225,-178,0,229,186,13,131,112,192,55,97,191,1,49,50,121,160,217,165,0,79,-83,60,238,86,0,64,0,165,144,196,25,0,66,64,5,96,53,232,222,9,-160,252,99,238,218,25,96,184,228,57,15,225,113,7,234,29,7,225,109,10,-225,199,1,225,106,61,0,50,225,107,7,133,114,225,35,3,224,210,36,225,-130,82,65,231,101,39,3,64,85,32,90,161,241,160,7,100,26,0,58,116,-59,255,239,0,0,54,83,220,2,53,55,56,67,37,65,166,203,168,155,13,-0,58,96,25,186,160,0,48,75,166,136,98,0,50,69,66,1,95,50,101,-189,85,65,0,49,128,26,1,95,49,120,214,85,16,192,44,1,95,52,86,-145,129,14,2,95,55,55,192,21,0,51,90,201,75,2,192,58,64,59,167,-117,2,58,53,55,133,122,131,163,163,153,128,87,144,119,64,123,1,51,49,-91,244,97,205,129,202,3,95,52,50,52,66,107,108,72,122,92,160,196,161,-64,92,202,65,224,192,15,225,80,6,225,247,1,17,114,101,99,117,114,115,-105,118,101,32,109,111,100,117,108,101,58,32,161,253,160,197,97,226,1,95,-52,88,122,96,193,224,71,15,13,44,32,105,109,112,111,114,116,32,99,104,-97,105,110,192,69,65,116,65,18,159,85,128,69,128,0,1,95,52,68,166,-1,58,53,66,37,113,148,3,50,53,32,75,189,191,98,33,192,186,237,130,-3,0,51,122,26,128,0,0,58,96,252,166,165,65,129,1,51,55,65,148,-2,51,57,57,75,110,129,93,232,201,0,98,113,131,176,224,42,0,225,41,-2,64,52,128,173,0,52,118,218,0,53,108,217,227,90,0,165,20,96,65,-133,24,128,73,90,235,64,51,1,57,51,222,50,2,95,52,57,88,208,181,-7,225,121,21,0,77,97,111,9,32,110,111,116,32,102,111,117,110,100,225,-121,0,96,172,161,120,1,49,49,64,91,92,231,225,126,21,15,92,49,48,-38,115,101,97,114,99,104,32,112,97,116,104,61,128,74,125,211,64,71,98,-123,0,51,64,12,126,56,64,4,190,55,1,95,52,87,154,224,91,24,6,-112,97,99,107,97,103,101,224,92,3,224,83,18,225,63,0,160,207,128,1,-228,210,1,161,226,225,140,3,225,137,4,1,95,53,123,190,96,0,98,135,-112,161,198,123,99,89,161,194,224,31,1,80,126,0,54,164,142,169,160,226,-191,0,166,250,132,0,193,95,231,154,6,128,5,104,119,3,95,52,48,51,-64,44,167,242,224,178,0,226,101,2,84,81,224,157,7,167,89,215,21,1,-95,52,91,152,227,142,38,193,103,3,100,111,101,115,98,26,6,99,111,110,-116,97,105,110,163,157,226,34,2,192,218,229,45,12,245,7,1,227,116,4,-224,198,8,227,44,3,224,230,1,68,166,225,95,0,132,111,0,66,238,80,-0,132,23,99,143,0,80,101,77,134,132,112,6,237,90,5,128,0,65,107,-0,52,90,73,1,95,52,90,175,1,95,53,128,88,1,58,53,65,66,1,-10,65,230,130,2,2,46,116,120,78,9,0,58,96,33,104,210,3,95,53,-55,49,96,50,132,42,136,233,3,95,53,55,48,64,233,67,168,0,51,95,-108,128,5,0,58,96,37,164,15,65,138,106,177,64,142,224,100,4,161,96,-73,69,0,58,97,225,234,90,6,1,53,56,234,90,3,67,237,128,106,197,-119,133,100,198,76,224,245,4,236,107,0,128,49,0,58,96,33,165,217,226,-181,5,165,91,164,63,0,50,69,202,0,51,98,109,100,85,99,248,0,51,-70,32,70,124,64,7,247,235,1,227,36,2,194,86,0,53,134,80,226,81,-15,7,76,111,97,100,105,110,103,32,194,89,245,1,0,229,11,4,227,126,-5,1,51,53,67,191,227,109,9,228,246,4,224,182,2,65,227,1,51,56,-70,220,98,242,1,95,53,64,34,1,95,50,97,71,162,241,227,1,32,0,-80,160,167,29,99,111,109,112,105,108,101,32,118,101,114,115,105,111,110,32,-109,105,115,109,97,116,99,104,58,32,102,105,108,101,164,131,171,101,196,226,-230,156,17,160,253,160,54,229,95,1,128,169,224,56,18,160,134,0,114,128,-57,224,211,0,224,215,4,0,52,103,211,3,64,95,53,54,132,255,0,58,-100,136,222,19,65,50,135,173,133,209,135,173,224,24,3,0,52,128,132,128,-24,71,241,192,47,127,205,128,22,162,50,1,53,53,67,73,0,53,66,240,-64,6,167,240,64,207,95,54,100,227,115,155,0,52,69,138,1,95,53,168,-25,0,51,116,186,230,13,0,1,95,53,72,185,1,95,53,200,131,229,48,-5,98,224,67,236,2,95,53,54,66,6,0,58,96,214,157,202,0,51,105,-91,0,58,96,24,128,17,0,52,201,119,0,58,96,78,192,38,0,90,233,-142,0,0,58,96,108,3,10,65,32,90,70,0,0,58,96,146,192,37,73,-186,0,58,96,197,190,41,1,75,52,224,76,0,131,184,138,249,224,5,1,-66,104,96,245,193,15,0,51,100,32,107,110,160,6,224,25,6,99,29,128,-6,224,26,7,64,254,160,6,224,26,1,90,4,0,53,65,46,1,95,53,-104,109,160,6,0,58,97,121,128,166,0,50,160,184,64,24,100,62,170,252,-0,66,243,92,1,64,1,235,54,1,68,142,165,55,132,104,129,106,1,53,-51,66,47,101,203,65,189,98,75,0,53,77,213,3,95,52,52,52,151,64,-230,79,0,244,110,9,96,67,139,49,142,249,224,43,27,134,166,129,79,148,-154,138,86,228,145,5,0,52,232,209,17,227,43,17,17,77,117,108,116,105,-112,108,101,32,105,110,115,116,97,110,99,101,115,234,5,2,0,52,80,187,-224,75,5,224,0,4,2,95,52,52,137,218,1,95,53,95,187,1,53,53,-204,60,0,58,97,140,193,101,97,84,96,4,224,14,6,1,95,53,91,189,-128,178,192,55,130,181,2,75,32,89,97,129,129,153,128,249,237,37,6,98,-0,224,25,12,135,26,129,82,239,239,1,98,55,176,17,97,86,160,140,224,-37,22,246,10,1,160,0,224,49,6,224,48,8,0,90,192,244,224,38,23,-160,89,0,53,233,52,0,96,0,239,130,18,229,152,1,224,90,4,64,22,-248,151,2,226,94,0,98,28,128,17,224,49,19,160,32,105,231,211,220,192,-49,128,28,152,57,243,217,1,225,64,19,100,226,225,63,9,173,6,160,0,-0,58,65,247,65,230,157,213,131,49,241,220,14,224,25,12,98,117,129,38,-224,25,6,96,120,192,25,238,176,5,96,195,224,184,16,96,30,224,185,10,-135,28,224,244,2,129,86,225,83,8,103,130,225,133,7,128,44,225,82,0,-161,72,224,88,5,162,6,0,52,226,97,1,224,164,17,100,218,224,163,20,-225,21,13,99,151,225,21,12,167,219,224,111,14,101,81,225,19,26,224,58,-10,107,157,224,170,21,224,59,16,100,194,224,59,21,227,249,14,224,231,3,-224,25,4,98,126,225,1,12,164,44,224,138,14,228,15,14,0,49,237,43,-1,224,58,16,169,225,228,74,8,0,52,76,166,0,52,252,150,0,224,65,-18,103,31,224,65,10,106,60,225,6,0,226,234,10,224,210,20,227,253,3,-224,151,4,253,41,2,227,221,37,229,29,2,64,31,69,212,132,214,0,58,-96,6,163,232,1,95,53,64,4,160,193,136,226,96,17,106,131,160,17,0,-58,96,219,224,48,0,0,53,73,21,1,53,53,108,72,64,32,76,20,3,-47,61,32,58,96,18,64,12,0,61,96,12,210,45,131,105,96,184,1,95,-53,102,154,128,6,0,58,64,103,64,34,2,73,32,58,96,16,224,145,1,-80,230,0,53,73,118,0,58,96,255,208,153,157,37,128,31,0,58,96,31,-232,50,4,192,6,227,217,13,0,53,108,122,192,13,1,49,53,104,32,129,-33,0,58,96,81,228,249,0,108,195,114,158,86,58,193,89,64,15,64,9,-214,80,161,81,96,85,0,58,96,6,137,99,64,67,65,161,64,143,161,169,-168,81,224,151,0,96,8,165,225,197,198,96,150,224,7,2,104,31,69,144,-98,154,96,98,225,131,1,0,75,64,193,96,134,192,133,64,51,0,58,96,-6,203,43,244,84,1,173,145,105,37,139,221,0,50,83,177,2,95,53,51,-101,177,2,95,53,52,64,129,0,58,72,45,128,61,0,89,128,166,237,175,-0,198,244,96,82,211,25,192,216,96,196,1,53,51,65,35,225,164,2,193,-87,217,70,224,82,8,176,130,240,80,0,204,127,128,94,1,64,58,96,81,-161,248,0,89,225,45,0,224,63,1,247,102,0,103,149,235,119,2,164,96,-224,79,5,103,35,0,58,96,240,224,142,3,0,83,143,137,192,202,64,33,-226,110,1,238,248,0,74,90,224,53,1,224,184,1,64,63,160,188,65,2,-206,237,1,95,52,76,108,192,6,0,64,160,158,160,81,97,32,173,244,202,-162,138,163,98,155,169,186,0,58,75,59,64,115,107,33,140,39,75,91,171,-218,236,38,0,75,138,96,19,236,35,0,1,58,53,75,184,235,237,1,224,-160,25,79,168,75,196,97,211,171,61,64,150,140,253,224,148,1,0,58,96,-37,98,128,3,52,52,32,95,99,192,64,33,96,127,0,58,96,200,244,124,-3,129,175,107,183,244,107,0,0,58,109,134,224,37,7,64,35,128,45,97,-42,244,153,1,0,58,109,229,193,5,64,226,205,8,64,26,129,148,141,72,-0,52,160,2,224,31,0,64,32,163,210,2,53,50,51,64,158,129,61,11,-94,71,69,84,84,73,77,69,77,73,76,76,68,118,78,109,129,44,162,72,-130,82,248,33,6,1,95,52,156,110,128,14,221,91,128,179,246,176,0,65,-40,0,49,139,255,228,244,0,226,181,0,226,175,3,224,49,2,98,162,96,-53,210,131,2,79,32,35,75,211,128,198,247,33,9,97,9,0,95,178,39,-215,186,160,169,247,103,15,98,168,146,115,130,134,236,154,52,0,70,80,72,-245,104,8,244,190,3,180,185,224,120,0,99,149,247,215,1,0,53,133,62,-171,81,225,17,7,65,99,195,198,129,143,227,56,0,98,156,142,77,144,252,-212,218,96,33,177,93,248,37,3,80,146,162,216,179,137,128,100,128,14,111,-177,97,153,98,45,197,57,224,170,1,3,95,53,49,50,242,237,2,7,109,-104,115,99,112,112,46,104,220,52,64,42,206,6,226,20,8,224,138,0,64,-132,0,49,66,207,128,162,225,5,2,64,126,161,143,224,184,1,0,53,145,-244,224,171,1,128,156,131,120,249,75,6,0,49,75,28,2,95,53,49,65,-179,112,181,242,75,2,96,247,87,229,103,197,66,46,142,188,250,169,6,5,-114,101,109,111,118,101,97,210,5,102,97,105,108,101,100,128,219,0,58,96,-134,67,46,7,117,110,108,105,110,107,32,58,96,101,161,31,225,33,2,2,-50,49,54,224,77,2,7,77,72,83,67,80,80,72,83,250,243,3,224,46,-6,163,217,251,236,1,96,2,129,63,225,52,2,226,167,5,224,209,4,147,-196,205,116,243,182,2,226,180,19,7,82,117,110,32,99,112,112,104,239,70,-0,226,175,12,2,95,53,49,173,245,128,183,160,133,145,231,0,52,74,32,-224,91,11,96,87,244,9,0,224,244,1,224,140,16,7,32,45,45,115,116,-114,105,112,160,138,192,238,182,249,167,179,96,66,121,239,162,174,64,77,1,-53,49,96,170,224,39,2,3,67,39,32,79,97,35,224,109,16,1,45,73,-179,167,86,58,0,51,224,25,3,10,115,114,99,47,114,117,110,116,105,109,-101,128,34,100,116,65,83,1,48,48,224,192,10,87,10,228,153,0,228,174,-2,224,20,1,65,64,234,173,2,224,66,13,247,77,0,167,159,147,200,225,-43,17,0,79,225,90,1,98,153,66,66,231,24,0,165,244,224,1,1,197,-254,160,43,134,62,0,79,226,163,2,8,45,68,95,95,77,72,83,95,95,-64,86,0,75,70,195,65,83,70,39,3,50,53,54,32,224,160,2,0,58,-97,124,169,210,227,117,10,130,114,245,195,7,227,119,15,129,14,245,184,32,-8,99,97,108,108,67,111,109,109,97,69,97,131,153,194,45,225,252,2,162,-196,132,235,224,78,19,0,44,226,245,19,96,234,167,29,5,115,121,115,116,-101,109,67,238,135,23,228,180,5,224,236,2,97,5,72,138,133,201,0,95,-224,21,4,126,69,2,95,53,48,208,15,228,245,1,0,50,253,211,12,0,-56,65,39,225,102,6,0,52,158,95,88,236,229,190,7,165,179,65,132,108,-130,89,10,161,167,2,53,49,48,70,38,97,125,142,12,0,35,128,231,2,-95,52,56,106,249,135,229,118,23,238,188,1,225,51,2,130,63,138,103,0,-55,229,253,3,8,92,51,52,38,108,105,98,47,83,97,33,5,47,73,79,-46,104,115,64,19,5,44,50,57,52,58,56,129,94,0,90,129,47,89,202,-96,110,97,18,2,48,49,32,128,131,160,19,96,0,0,67,96,36,224,118,-7,0,58,96,208,133,232,202,160,96,78,224,84,3,234,255,2,160,32,139,-67,234,248,1,228,77,0,224,136,1,235,182,0,202,234,66,200,160,17,249,-98,0,65,188,83,228,117,146,0,58,97,122,66,19,8,116,109,112,110,97,-109,101,32,58,97,208,246,92,2,227,121,5,227,123,5,64,63,203,73,2,-95,49,56,64,109,5,32,64,95,54,32,89,135,215,128,170,157,253,64,1,-205,91,194,223,235,96,0,192,13,97,178,239,229,3,1,35,49,199,31,96,-36,96,46,193,49,105,122,100,161,224,45,0,77,223,192,44,171,244,130,12,-224,42,9,75,121,224,0,0,111,101,224,129,15,98,156,95,24,115,41,224,-74,10,0,49,65,207,1,64,64,96,112,224,33,14,0,48,138,88,224,33,-18,133,82,224,67,20,131,104,64,33,149,207,98,228,224,36,7,137,17,244,-95,0,224,0,3,225,132,8,226,91,4,225,133,19,193,44,225,132,71,241,-201,2,241,78,9,224,133,9,139,15,238,14,1,2,95,53,48,92,215,96,-68,207,175,96,0,132,156,164,184,0,75,231,198,6,186,150,64,58,0,53,-163,28,1,95,53,95,210,0,58,106,179,233,129,9,132,164,139,101,233,221,-9,228,178,2,0,58,96,70,164,164,122,161,0,51,65,12,234,19,6,0,-51,100,39,243,40,0,158,151,209,200,1,95,54,75,248,0,48,232,251,0,-165,69,192,60,72,45,1,48,50,101,50,235,19,0,234,242,4,131,239,1,-95,51,64,36,161,83,235,48,7,235,67,4,69,70,78,248,1,95,53,72,-53,224,204,1,237,96,1,64,104,68,47,122,200,0,58,96,38,131,239,80,-180,78,153,0,58,96,145,64,245,64,1,70,181,123,79,4,49,51,49,32,-35,123,14,125,242,0,49,85,166,177,2,1,48,54,229,119,15,8,68,97,-116,97,47,67,104,97,114,197,119,4,49,48,49,58,49,231,19,0,128,215,-96,192,0,53,190,66,103,38,254,80,0,1,95,49,81,27,96,5,128,123,-160,11,123,205,96,205,208,252,2,95,52,56,145,245,0,50,96,193,133,20,-3,95,52,57,55,64,4,78,245,109,37,165,7,64,13,197,21,0,58,64,-35,128,10,0,73,96,24,130,51,3,95,52,57,52,64,27,130,0,0,73,-64,10,161,56,138,39,232,20,2,161,211,170,112,89,230,233,26,18,202,202,-0,64,64,106,129,123,0,85,133,90,145,236,64,5,2,95,52,57,104,144,-198,17,232,55,4,232,6,4,224,120,0,224,107,21,255,222,3,226,155,1,-104,227,224,26,13,226,182,6,224,102,21,3,108,105,110,101,224,105,0,225,-11,3,232,232,33,2,99,111,108,160,65,224,52,4,1,64,64,224,37,2,-9,101,110,100,45,111,102,45,102,105,108,170,248,224,26,1,10,110,111,32,-108,111,99,97,116,105,111,110,193,93,224,28,17,0,58,97,162,1,10,65,-101,57,68,33,115,150,101,66,0,58,97,120,147,138,67,199,1,52,56,117,-100,67,25,224,183,11,238,85,0,175,230,174,157,1,95,52,104,225,112,125,-194,155,126,199,98,155,64,83,64,22,229,65,0,112,76,98,188,135,245,128,-6,0,58,96,51,1,10,65,123,187,133,118,232,4,9,168,3,96,48,243,-32,3,64,41,0,85,212,107,198,10,98,76,64,21,198,75,128,20,224,29,-0,193,230,178,63,97,41,64,150,128,194,4,48,32,95,51,55,78,13,1,-52,49,67,82,0,56,100,143,227,9,0,0,51,144,130,224,15,0,1,52,-56,212,45,162,10,101,158,0,56,139,167,192,91,177,233,0,50,77,162,0,-50,66,118,0,58,96,54,224,111,43,142,75,224,111,22,131,109,5,95,52,-56,49,32,58,96,80,243,131,0,255,169,0,64,27,96,36,1,51,48,66,-30,1,52,55,99,210,0,55,71,169,0,73,65,193,65,223,0,85,64,23,-130,45,0,56,211,72,223,16,96,24,64,63,2,49,49,52,144,104,96,146,-76,172,64,13,64,35,2,95,49,54,132,188,0,95,72,35,160,92,3,95,-49,50,48,192,11,0,58,96,6,96,132,2,49,32,75,68,101,118,248,0,-48,229,94,2,12,67,111,110,116,114,111,108,46,69,120,99,101,112,66,216,-8,46,73,110,116,101,114,110,97,108,66,143,224,39,1,3,83,111,109,101,-224,35,0,98,170,96,231,0,58,96,215,119,132,135,124,64,227,65,107,66,-226,69,235,1,52,55,97,190,0,95,69,215,198,140,2,95,52,55,69,128,-2,58,52,55,194,19,0,90,65,11,64,16,129,200,0,90,64,238,0,58,-96,58,172,131,66,216,0,55,66,169,114,10,72,6,96,91,69,209,111,45,-64,45,197,2,213,48,96,30,9,10,65,32,99,97,116,99,104,32,58,96,-63,99,45,231,55,4,231,197,0,1,52,54,137,205,240,138,8,130,87,242,-84,0,1,58,52,68,205,101,190,129,236,0,58,96,57,244,68,0,224,89,-0,0,64,147,132,171,187,1,51,52,93,111,64,72,225,84,1,3,111,112,-101,110,81,123,136,119,232,45,2,96,145,245,235,6,0,52,65,236,98,117,-1,54,52,64,4,72,150,1,52,54,129,65,224,82,1,97,189,4,97,99,-116,105,118,64,85,0,58,96,38,128,52,0,49,64,4,71,148,64,63,160,-19,97,41,69,188,64,3,0,58,96,30,246,251,6,64,35,129,53,109,227,-1,95,52,85,155,2,95,52,54,128,47,231,50,1,5,53,57,32,64,116,-111,96,131,64,24,129,33,70,235,64,24,101,33,0,58,96,58,128,46,99,-216,168,182,0,83,64,10,64,209,120,235,0,49,64,111,65,116,88,106,1,-52,53,100,117,2,58,52,53,246,6,2,129,114,64,25,246,71,5,0,90,-164,127,98,96,223,189,0,58,96,85,242,183,0,118,95,224,222,2,64,31,-215,85,227,187,0,1,58,52,186,236,102,208,152,206,1,95,50,66,171,242,-201,2,0,51,90,62,0,51,64,151,64,80,245,167,3,0,51,101,192,244,-198,0,233,80,2,240,42,11,128,97,68,27,0,51,65,150,242,223,0,183,-121,228,145,0,230,242,17,17,76,111,97,100,105,110,103,32,115,97,118,101,-100,32,99,97,99,104,167,66,231,229,8,192,175,64,27,0,52,91,170,164,-59,224,184,4,1,58,52,187,209,131,100,130,211,140,5,181,171,0,51,66,-116,160,15,1,95,50,64,94,101,94,203,126,66,38,97,99,229,122,3,0,-51,132,6,96,23,138,223,139,168,1,95,51,73,61,96,131,96,40,121,166,-236,126,2,230,75,0,192,73,229,185,9,67,192,80,173,231,76,10,215,176,-128,69,238,109,1,119,53,64,8,248,121,1,176,125,128,99,224,96,4,1,-95,52,115,132,160,49,166,254,129,214,224,45,11,182,121,193,32,193,244,160,-182,65,247,0,51,164,104,208,166,67,33,224,0,4,1,95,52,147,230,96,-51,250,250,1,224,162,11,70,210,96,12,96,11,185,212,199,117,128,54,161,-167,67,188,224,126,3,193,101,65,29,196,240,225,199,0,193,99,226,171,0,-128,52,245,125,13,128,248,231,62,4,233,162,19,9,105,110,118,97,108,105,-100,97,116,101,130,172,210,216,130,174,0,52,188,252,192,191,224,154,5,68,-105,98,171,0,52,124,239,129,99,224,172,0,226,140,4,226,39,1,181,184,-194,128,65,119,75,153,64,68,238,99,3,1,95,52,94,176,0,58,99,24,-169,1,66,51,68,18,238,126,0,64,142,193,87,122,217,225,227,0,137,71,-98,100,1,95,52,243,90,0,96,35,96,181,65,3,1,95,51,108,108,0,-58,96,104,68,188,107,248,71,173,127,227,155,102,0,58,96,42,100,125,64,-128,131,124,111,89,224,105,4,147,3,192,135,196,108,201,133,75,255,125,2,-161,254,233,157,0,224,61,4,101,13,233,251,2,191,130,104,92,0,58,96,-147,232,214,2,251,121,1,96,222,105,110,1,50,54,223,124,252,212,0,67,-141,1,52,52,169,59,64,98,0,79,246,28,1,0,51,134,53,191,106,129,-69,66,222,253,179,0,129,103,164,72,160,177,64,170,1,95,52,124,159,202,-181,132,57,0,52,92,162,0,51,67,60,98,142,128,10,193,20,225,160,0,-161,53,135,213,224,2,1,193,247,196,100,129,104,224,126,0,227,23,1,225,-240,0,96,8,2,95,54,51,66,61,228,15,0,1,95,52,159,65,192,155,-96,181,65,2,202,44,192,125,68,129,224,44,1,0,58,125,238,97,227,0,-80,100,243,0,58,66,163,129,20,231,14,0,98,209,199,14,105,0,68,89,-226,67,0,255,233,0,0,89,101,164,128,195,64,4,0,83,75,153,161,12,-193,6,160,134,96,202,165,123,106,223,0,50,64,103,148,31,224,217,1,1,-95,51,75,171,225,81,7,160,70,225,69,10,225,94,0,225,60,8,74,15,-225,60,25,128,73,128,159,243,108,0,0,64,162,111,244,91,7,224,44,4,-192,120,125,7,224,48,20,255,6,3,2,49,51,52,255,7,13,0,39,227,-110,1,160,45,129,200,67,2,128,78,116,249,224,9,0,118,230,64,35,161,-107,0,67,115,1,68,177,160,54,160,34,224,63,11,99,238,197,168,226,37,-16,170,177,72,95,74,204,225,198,1,106,81,129,158,0,90,225,144,6,226,-240,0,227,74,1,160,2,97,41,195,31,103,3,224,80,4,225,115,16,128,-48,99,217,248,203,1,228,87,5,224,66,0,224,192,6,132,232,224,192,70,-226,98,0,164,223,224,190,22,192,46,97,151,227,22,0,224,191,16,192,14,-131,41,227,226,2,96,209,64,64,228,188,5,224,188,0,169,39,229,141,0,-156,220,229,185,2,1,53,56,162,119,199,97,242,170,0,226,136,5,167,94,-224,89,1,254,88,2,225,33,6,192,114,224,227,1,234,226,1,224,11,0,-160,9,160,133,128,207,128,19,229,68,17,225,69,8,225,52,1,224,208,0,-138,21,0,82,144,120,229,152,25,224,81,8,224,225,2,96,197,225,55,1,-64,15,136,183,227,172,8,68,55,0,49,129,54,1,95,52,112,96,160,24,-224,78,17,227,250,18,224,77,18,165,196,225,204,3,162,197,81,229,64,7,-225,21,1,198,108,224,13,19,224,156,1,226,220,1,224,35,1,128,17,128,-243,73,52,224,164,17,72,221,224,242,1,96,167,146,42,248,183,2,128,83,-0,83,224,176,11,224,177,65,162,128,96,158,224,177,39,137,127,0,51,251,-15,0,225,111,1,0,58,98,159,237,177,2,224,195,17,169,129,128,1,231,-115,0,192,8,0,58,96,94,224,72,33,224,234,1,224,86,1,226,57,0,-224,5,1,0,85,224,61,2,229,184,4,96,49,234,30,0,234,39,1,225,-57,0,224,167,5,160,58,129,7,0,50,229,13,1,192,193,224,15,0,192,-224,224,168,0,224,119,34,192,35,225,39,19,128,26,228,241,5,224,224,0,-65,69,0,54,174,14,196,97,227,5,16,225,143,2,224,124,3,224,79,0,-224,103,17,0,58,98,188,224,101,34,226,154,3,225,181,2,225,46,6,160,-67,224,24,3,192,152,225,150,76,224,98,10,225,129,60,138,44,3,35,50,-32,58,99,76,146,106,228,233,2,224,110,3,166,15,160,13,132,81,160,5,-135,62,224,225,1,224,51,1,236,43,0,72,21,171,109,231,77,14,231,101,-17,224,128,3,192,208,170,4,102,19,230,245,8,68,235,231,2,6,134,250,-228,44,0,80,14,0,58,97,12,212,38,193,110,145,188,64,168,225,25,0,-215,35,225,147,3,224,13,13,225,248,3,227,237,0,64,8,168,2,0,58,-96,174,168,184,81,138,2,75,50,32,128,153,83,142,192,243,0,58,96,165,-153,224,160,248,106,1,121,1,216,17,183,35,215,42,128,24,64,11,183,82,-224,24,11,160,49,151,114,3,95,49,53,53,203,165,0,58,96,6,242,246,-12,224,200,6,1,95,51,83,108,192,204,0,54,96,52,90,160,82,203,250,-160,1,0,50,247,35,0,111,199,118,77,64,65,252,55,4,0,80,64,43,-128,71,130,123,118,145,2,95,49,51,239,173,0,1,95,52,82,202,182,120,-96,17,0,58,96,6,180,192,1,95,52,86,9,64,19,207,89,64,97,0,-56,79,169,83,89,1,52,49,129,0,76,226,111,152,236,226,0,80,200,116,-58,129,113,96,178,64,44,185,112,65,38,0,75,216,154,0,58,112,253,224,-204,22,97,156,65,227,96,209,0,58,113,60,160,164,64,13,129,38,241,45,-0,125,161,118,184,64,143,2,95,52,49,71,102,0,58,114,13,13,10,65,-32,94,109,100,53,66,70,73,76,69,32,58,96,25,228,188,2,2,32,95,-52,125,254,0,52,93,243,130,230,1,52,48,65,217,1,52,49,129,28,82,-174,160,170,1,48,48,108,52,254,252,4,1,64,35,112,64,64,164,1,95,-52,92,127,64,7,154,8,64,64,225,86,7,64,25,246,3,3,0,58,96,-24,98,37,0,48,64,13,64,122,182,157,142,31,128,106,0,50,65,94,241,-161,2,130,212,174,63,253,131,9,10,109,104,115,47,83,121,115,116,101,109,-47,86,178,3,80,97,116,104,253,137,0,4,49,56,58,49,52,253,138,0,-131,109,229,149,1,130,147,1,95,52,252,226,1,219,212,0,48,86,147,186,-89,208,49,161,231,0,48,163,90,225,21,1,128,41,0,58,96,70,67,243,-1,52,54,64,219,194,218,1,75,51,164,143,224,1,11,234,113,2,128,0,-0,58,97,154,161,178,64,238,213,3,155,125,201,244,165,27,248,43,3,119,-210,0,95,159,241,164,244,240,168,2,96,230,255,126,13,64,14,123,211,164,-99,96,42,96,27,0,58,96,50,129,175,68,200,191,71,2,95,52,48,90,-93,191,65,225,54,9,129,252,190,181,2,35,52,55,64,43,252,38,0,227,-2,1,96,56,192,192,227,15,8,128,140,1,58,51,190,209,227,154,6,0,-51,86,244,227,154,11,117,181,215,144,161,95,0,58,96,27,240,146,12,67,-173,97,88,193,47,134,128,129,220,0,51,91,77,252,247,6,226,70,1,129,-129,231,73,5,230,238,2,141,25,64,107,64,79,240,96,3,160,73,164,187,-96,189,97,84,64,220,64,113,114,184,0,90,146,191,1,90,32,160,58,184,-53,224,28,7,67,35,224,28,16,77,213,224,28,16,108,112,224,29,16,1,-50,54,224,88,4,1,95,53,77,56,145,131,0,54,85,233,96,10,0,58,-96,6,224,187,1,0,50,65,134,0,56,224,56,0,1,95,51,85,30,128,-161,97,212,128,16,128,149,224,16,2,160,137,224,17,2,160,125,128,17,128,-122,96,80,128,122,100,236,96,6,224,122,1,68,48,0,51,126,128,0,51,-99,6,0,51,67,6,1,95,51,94,233,1,95,51,95,10,160,70,97,201,-128,70,64,10,0,58,96,6,8,10,65,32,98,115,62,61,32,58,96,41,-128,13,64,12,130,192,2,98,115,60,96,26,130,193,4,98,115,60,32,58,-96,99,96,12,2,99,109,112,64,14,130,115,232,191,1,233,1,1,99,27,-64,127,0,49,126,45,232,226,8,64,143,122,184,0,51,96,31,1,95,51,-94,49,210,233,0,58,65,77,64,89,113,155,0,58,96,19,124,132,128,13,-129,124,113,202,0,58,96,62,199,241,225,233,6,130,203,201,183,135,182,130,-219,0,58,96,6,160,54,161,141,128,45,133,219,96,17,120,11,160,17,0,-58,96,71,245,138,0,64,26,224,62,2,96,199,94,29,0,58,96,46,97,-33,0,47,65,60,190,49,2,98,115,61,96,13,129,46,0,73,64,10,128,-223,86,204,82,144,0,75,171,22,0,58,99,223,64,88,0,51,139,44,131,-131,228,169,0,1,64,95,96,111,130,132,189,154,228,89,1,228,73,3,0,-83,180,199,96,40,161,34,64,206,88,53,100,83,228,143,1,245,41,0,253,-40,3,0,51,92,166,126,215,64,86,128,13,129,25,66,68,120,123,2,95,-51,55,65,50,119,220,0,58,96,6,164,233,154,187,93,220,0,58,64,34,-129,54,229,245,0,0,58,96,25,230,34,1,192,20,167,33,64,82,93,107,-232,53,19,101,35,1,95,49,224,125,0,224,208,38,0,90,224,208,3,0,-49,65,81,128,207,73,45,128,10,0,58,96,6,193,135,224,92,5,204,78,-225,44,15,224,171,6,186,230,96,107,96,106,74,5,0,58,96,6,138,1,-96,86,227,69,0,224,85,7,104,87,224,77,2,0,58,123,235,234,48,0,-96,35,168,126,1,75,52,231,108,30,0,58,124,216,96,221,68,148,120,107,-160,5,120,16,224,11,0,0,50,96,97,163,41,0,51,94,175,128,31,224,-5,8,0,58,96,43,239,217,2,235,193,6,0,58,64,60,160,113,0,57,-64,242,129,236,163,208,77,191,236,39,2,236,11,21,0,58,107,71,255,97,-4,3,46,109,104,115,122,184,95,95,125,81,137,92,232,37,15,131,89,232,-96,6,130,47,254,26,0,188,53,167,124,73,190,163,130,1,95,51,94,191,-128,136,129,137,225,181,3,90,202,97,60,128,105,224,132,3,1,95,51,90,-100,225,229,7,250,200,1,234,112,6,101,61,66,159,225,251,0,219,120,192,-159,100,117,0,53,65,148,94,31,160,32,224,109,2,94,188,173,223,224,213,-6,226,80,3,96,200,130,68,96,188,104,101,92,50,0,58,96,65,68,175,-14,79,46,100,101,115,101,114,105,97,108,105,122,101,32,58,96,29,75,111,-20,97,100,100,95,108,122,55,55,95,100,101,99,111,109,112,114,101,115,115,-111,114,64,31,194,11,0,83,108,168,173,17,244,75,2,188,27,114,115,163,-173,149,41,225,25,3,129,146,203,191,224,215,0,0,50,188,142,224,53,1,-224,224,5,114,219,64,39,153,50,128,223,130,124,127,217,236,71,0,161,27,-225,48,1,65,80,168,221,224,80,1,108,43,0,51,124,43,0,49,124,225,-227,140,5,188,55,8,94,117,110,103,101,116,98,32,58,96,41,224,106,8,-228,139,5,1,95,51,108,76,65,243,236,102,1,97,194,1,95,54,81,91,-0,48,207,116,228,71,3,1,95,51,74,118,104,176,65,166,79,90,1,95,-51,124,164,227,7,1,7,104,71,101,116,67,104,97,114,171,247,0,58,96,-209,102,101,1,35,52,154,212,96,49,64,175,192,173,130,193,5,95,50,51,-55,32,79,67,36,2,55,32,64,64,7,87,83,165,151,188,27,135,217,228,-157,2,0,50,70,205,202,83,120,59,0,52,69,143,91,53,224,145,1,9,-111,112,101,110,66,105,110,97,114,121,76,161,128,151,229,154,7,1,95,50,-135,162,165,180,66,24,97,186,1,95,50,72,94,128,131,130,136,1,80,32,-65,23,128,199,198,109,97,195,101,157,176,160,162,23,65,38,65,40,86,249,-131,225,64,207,64,3,227,240,1,160,57,167,90,109,18,140,242,255,42,17,-1,58,32,161,92,96,150,172,8,225,198,2,0,50,73,73,67,253,64,82,-0,83,186,123,0,50,64,84,224,33,7,97,240,224,54,8,187,230,120,16,-1,95,51,153,220,226,4,0,113,123,99,193,131,172,0,50,64,31,1,95,-51,65,172,0,58,96,43,65,217,4,102,108,117,115,104,65,219,185,23,228,-20,4,0,50,76,16,139,189,226,226,2,228,131,0,96,7,224,5,0,222,-229,64,118,110,249,224,135,3,226,136,5,114,158,226,136,2,22,67,108,111,-115,101,58,32,72,97,110,100,108,101,32,97,108,114,101,97,100,121,32,99,-64,21,0,100,129,64,228,204,6,67,181,64,209,138,184,119,62,133,76,68,-35,1,95,51,150,150,0,58,97,23,73,250,0,51,137,133,182,78,169,240,-100,103,96,51,197,160,213,40,2,32,95,50,72,39,82,55,0,58,96,29,-65,40,96,141,97,40,130,93,136,162,2,95,50,56,75,149,1,51,50,114,-101,160,70,130,108,6,116,111,70,117,110,80,116,68,225,178,255,66,144,194,-145,178,248,226,145,12,161,89,224,9,6,137,89,146,96,98,130,226,157,2,-160,6,0,58,97,95,231,27,2,199,29,167,30,231,44,23,1,64,58,96,-95,103,120,3,50,55,32,58,96,146,99,240,72,138,68,160,0,58,64,23,-128,32,0,48,71,22,0,50,78,71,1,95,51,102,131,2,95,49,53,65,-11,64,38,64,144,76,112,192,11,192,62,64,63,129,100,114,131,233,2,2,-248,178,2,207,144,116,246,160,5,98,130,174,203,64,11,64,174,170,241,225,-40,0,96,31,2,95,49,49,97,75,129,21,1,50,56,231,247,2,227,140,-0,160,43,96,30,224,36,16,228,122,0,97,160,0,54,130,220,241,120,18,-224,84,28,128,174,192,197,176,119,224,183,4,98,202,224,106,22,96,50,224,-98,6,1,32,40,128,98,224,134,9,2,79,32,35,68,3,201,213,224,130,-0,96,115,76,183,161,188,106,206,96,11,0,58,96,6,193,164,0,75,228,-248,0,98,160,0,85,132,165,149,36,3,60,32,64,35,75,0,224,18,6,-115,104,224,19,7,97,168,224,19,6,112,223,65,187,224,19,2,128,100,224,-217,1,8,105,110,116,101,114,114,117,112,116,196,11,224,28,3,14,114,101,-115,111,117,114,99,101,32,118,97,110,105,115,104,192,34,224,35,4,6,116,-105,109,101,111,117,116,193,252,224,110,6,64,240,224,45,3,20,117,110,115,-117,112,112,111,114,116,101,100,32,111,112,101,114,97,116,105,111,110,224,120,-9,12,104,97,114,100,119,97,114,101,32,102,97,117,108,192,91,224,243,8,-68,231,224,243,7,133,200,224,132,5,66,173,224,243,5,14,97,112,112,114,-111,112,114,105,97,116,101,32,116,121,112,167,12,224,35,5,12,118,97,108,-105,100,32,97,114,103,117,109,101,110,192,131,224,34,3,3,102,97,105,108,-225,18,0,224,115,7,68,175,224,44,3,12,112,114,111,116,111,99,111,108,-32,101,114,114,111,168,20,224,31,3,0,115,116,59,224,29,3,224,240,9,-225,247,10,225,246,10,225,245,10,225,244,7,22,117,110,115,97,116,105,115,-102,105,101,100,32,99,111,110,115,116,114,97,105,110,116,115,224,149,9,3,-117,115,101,114,224,147,4,224,210,4,13,101,114,109,105,115,115,105,111,110,-32,100,101,110,105,225,10,15,226,2,7,6,105,108,108,101,103,97,108,225,-254,19,7,101,110,100,32,111,102,32,102,232,166,0,224,247,8,225,230,10,-225,229,7,226,188,0,5,101,120,104,97,117,115,226,224,21,3,98,117,115,-121,225,201,14,224,86,6,12,100,111,101,115,32,110,111,116,32,101,120,105,-115,162,22,224,31,3,199,95,96,30,161,82,128,0,196,16,108,184,164,16,-146,70,184,104,248,57,2,133,98,164,26,0,50,73,246,100,123,139,170,71,-151,196,53,245,66,2,233,40,17,135,250,0,45,128,140,2,95,49,49,96,-96,138,193,224,138,1,134,226,64,6,228,155,4,229,11,8,1,48,120,128,-71,71,47,1,48,52,70,37,0,51,109,145,0,51,88,191,72,214,99,151,-224,238,1,139,167,128,99,64,11,0,58,96,6,96,99,0,48,96,136,96,-60,68,152,1,95,51,68,178,1,95,49,113,234,96,77,2,95,49,56,74,-199,192,11,96,46,128,11,0,57,96,79,96,11,0,51,88,244,0,58,96,-12,128,85,160,148,109,60,99,136,65,27,146,23,121,76,0,58,96,115,145,-31,2,49,55,51,64,4,65,96,0,89,168,15,77,42,2,67,32,95,72,-5,136,118,109,46,118,87,96,244,69,107,72,217,96,172,3,51,54,32,95,-112,69,98,57,85,187,64,25,96,107,224,25,2,175,197,64,122,185,161,6,-117,113,117,111,116,32,58,96,42,64,14,2,114,101,109,64,13,135,254,82,-148,185,110,0,95,107,200,65,82,1,95,51,68,220,1,95,51,68,206,1,-95,51,66,41,96,226,72,240,171,95,142,177,122,217,96,184,98,187,96,9,-114,53,86,1,128,254,185,163,71,6,64,22,64,58,116,182,2,49,55,55,-169,105,0,58,64,96,64,35,0,42,64,138,130,19,0,45,64,10,129,186,-0,43,64,10,211,117,79,146,148,61,88,53,1,95,51,123,215,0,51,88,-135,1,95,51,88,167,1,95,51,121,221,116,251,97,142,148,251,153,158,96,-6,65,0,116,250,185,139,0,117,84,249,184,226,0,117,116,248,184,213,0,-117,84,247,184,212,0,117,148,246,216,169,64,205,0,51,65,162,67,39,96,-206,72,255,71,151,112,54,109,248,1,95,49,76,204,116,53,129,148,64,239,-167,177,1,95,51,88,88,0,58,66,210,129,27,98,4,67,76,81,45,165,-209,98,243,65,133,221,151,97,64,160,9,3,52,50,32,35,114,123,128,43,-195,34,224,46,5,64,36,110,219,64,251,216,202,2,49,51,53,64,201,129,-91,132,231,87,185,202,61,130,150,186,49,94,139,169,178,236,44,1,117,189,-128,237,224,255,41,128,12,206,61,76,104,96,105,69,2,224,96,1,78,171,-224,96,46,129,12,95,58,224,100,1,128,224,160,216,192,215,224,102,5,68,-123,0,50,224,100,26,224,144,47,3,95,50,48,55,228,214,2,18,78,117,-109,101,114,105,99,46,115,104,111,119,73,110,116,65,116,66,97,77,53,7,-110,101,103,97,116,105,118,101,232,8,7,183,92,96,2,139,58,171,106,224,-231,3,113,14,224,196,30,186,11,1,95,49,66,6,224,23,1,224,84,62,-77,171,224,23,2,224,254,32,233,175,3,2,98,97,115,199,142,128,149,0,-89,160,149,226,174,3,194,164,0,83,70,151,181,214,205,106,141,109,224,49,-6,194,105,160,83,192,11,226,117,8,224,70,4,186,216,140,219,224,61,0,-101,127,225,73,16,68,229,68,31,224,10,5,224,55,2,225,95,3,0,51,-92,43,141,9,128,65,99,190,225,81,19,0,58,100,124,131,191,98,227,130,-146,160,34,71,174,92,68,160,204,0,58,96,95,220,33,1,75,52,128,36,-0,58,96,34,109,254,0,49,86,105,1,50,48,101,207,0,48,225,166,2,-158,98,4,46,73,79,46,69,201,149,224,28,1,6,73,79,69,120,99,101,-112,233,83,0,128,106,110,68,182,149,79,82,135,248,0,58,112,125,110,125,-0,53,80,145,91,68,1,95,50,64,212,224,79,1,4,115,116,100,101,114,-96,99,0,58,113,12,148,126,128,21,1,32,58,96,50,224,64,2,70,150,-114,179,224,64,4,0,105,96,138,0,58,113,131,224,63,0,1,105,110,64,-62,164,252,1,52,57,97,198,232,233,2,212,13,232,237,1,224,17,10,128,-15,3,50,51,32,95,168,119,141,209,108,0,64,0,154,97,145,203,0,58,-96,6,96,171,1,51,54,64,122,129,169,215,142,0,58,118,31,243,87,16,-64,105,246,163,10,239,56,0,192,46,64,143,0,56,160,12,1,95,50,90,-148,243,78,0,162,170,246,190,7,192,215,243,103,10,1,64,58,119,36,102,-217,0,67,112,11,65,90,129,161,224,6,2,72,249,96,50,160,206,217,193,-96,45,104,225,245,89,7,0,50,123,115,195,122,241,246,2,113,107,0,50,-155,249,213,237,224,55,3,134,181,192,200,245,119,1,131,214,1,95,50,74,-114,160,184,226,43,0,12,112,101,114,102,111,114,109,73,79,32,94,38,99,-145,226,64,31,130,56,2,102,112,102,98,8,188,52,4,102,112,110,101,119,-64,14,130,23,118,208,3,70,73,76,69,64,18,129,189,96,18,3,117,116,-102,56,64,18,209,225,1,95,50,91,215,0,95,82,77,65,125,129,49,0,-58,96,20,249,199,10,226,71,3,0,49,103,166,224,17,2,96,215,67,247,-129,113,235,73,1,0,79,82,90,0,52,175,229,224,23,7,208,55,224,24,-6,67,94,224,23,8,227,26,1,1,119,43,204,26,1,95,50,92,127,144,-150,244,130,0,98,198,1,95,50,110,186,225,110,3,252,122,0,226,141,7,-0,58,98,170,116,115,85,231,65,1,130,1,196,97,250,137,9,250,139,8,-1,58,50,188,240,225,249,3,0,95,145,52,194,47,193,73,83,198,0,53,-203,32,161,68,163,62,244,203,1,226,70,1,65,94,243,249,3,199,181,69,-51,1,95,50,93,19,192,69,225,173,5,241,199,2,248,5,2,224,72,4,-249,63,6,0,50,189,137,67,50,230,225,4,2,104,101,97,142,1,0,75,-66,42,189,134,6,65,46,119,114,105,116,101,65,46,130,118,0,85,65,43,-224,2,1,128,85,1,58,50,253,57,0,0,75,224,28,1,225,67,7,1,-58,50,253,75,1,97,114,224,38,1,224,36,0,1,58,50,221,90,141,96,-0,85,230,209,0,224,2,37,168,114,224,0,5,131,155,224,1,21,237,207,-9,5,70,108,97,103,115,123,238,168,3,224,0,2,161,146,224,2,37,96,-157,224,106,11,7,118,101,114,98,111,115,101,61,238,136,0,64,33,83,62,-213,222,224,0,6,224,206,33,83,134,195,160,224,0,8,224,196,41,224,193,-16,4,114,117,110,73,116,224,191,4,0,50,75,242,224,191,13,224,188,59,-224,187,38,224,184,16,5,109,104,115,100,105,114,225,121,5,1,50,49,65,-126,66,73,224,191,12,224,188,56,224,187,35,224,184,16,4,112,97,116,104,-115,224,183,10,224,188,1,224,189,12,224,186,53,224,185,32,224,182,16,4,-111,117,116,112,117,226,41,5,225,111,21,224,174,50,224,173,29,224,170,16,-6,108,111,97,100,105,110,103,226,213,27,224,162,47,224,161,26,227,114,17,-6,101,97,100,67,97,99,104,228,54,5,224,160,13,224,157,44,224,156,23,-224,153,16,102,58,224,154,30,224,151,41,224,150,20,224,147,16,6,117,115,-101,84,105,99,107,227,49,5,224,145,11,224,142,38,224,141,17,224,138,16,-4,100,111,67,80,80,224,135,23,224,132,35,224,131,14,224,128,16,5,99,-112,112,65,114,103,228,60,35,224,139,32,224,138,11,224,135,17,224,133,37,-224,130,29,224,129,8,224,126,17,5,111,109,112,114,101,115,226,18,21,224,-114,26,224,113,5,224,110,16,6,98,117,105,108,100,80,107,228,79,7,76,-249,224,240,12,224,119,23,224,118,2,224,115,16,3,108,105,115,116,224,114,-33,224,111,20,192,110,224,107,16,6,112,107,103,80,97,116,104,225,207,29,-224,104,17,96,103,224,100,16,6,105,110,115,116,97,108,108,224,211,9,225,-181,1,224,88,14,224,77,11,4,116,97,114,103,101,230,140,35,224,0,13,-192,108,0,49,75,249,193,47,151,230,0,50,118,89,151,230,128,11,0,58,-96,6,149,73,75,233,77,63,64,241,77,88,224,156,4,6,78,111,116,104,-105,110,103,128,156,236,49,3,172,50,0,54,245,130,1,241,178,1,224,227,-9,4,74,117,115,116,32,160,68,77,70,85,214,192,49,65,20,64,166,0,-64,98,20,160,15,120,119,128,15,0,58,96,6,235,223,1,203,176,0,58,-64,124,64,23,77,155,128,119,76,177,1,35,52,97,49,114,54,160,16,128,-103,0,58,96,180,235,221,1,224,235,8,2,70,97,108,179,67,224,24,6,-2,84,114,117,211,91,193,80,254,55,1,128,11,0,58,96,6,184,181,1,-51,52,161,20,1,95,50,77,255,1,58,50,78,22,96,192,237,231,11,224,-1,3,232,237,10,0,58,96,67,79,130,224,143,0,8,118,55,46,48,92,-49,48,38,34,96,91,209,60,0,53,96,152,111,106,64,124,128,19,0,57,-66,18,0,48,143,12,128,6,0,55,96,5,0,48,226,35,0,0,58,96,-51,128,45,79,187,0,53,130,24,0,85,64,10,193,119,65,241,0,53,65,-212,239,67,3,66,158,128,67,3,95,50,48,48,65,85,89,172,225,108,0,-0,53,208,227,96,60,123,86,2,50,53,53,64,157,0,53,129,134,130,109,-67,27,162,87,179,246,116,186,194,140,96,30,228,101,2,212,26,224,47,2,-160,110,210,239,0,50,98,124,122,170,64,60,0,58,96,123,96,25,0,52,-81,66,1,53,50,96,19,178,222,147,29,0,53,110,231,243,94,8,191,56,-0,58,96,51,243,30,0,2,111,117,116,65,26,208,225,163,14,243,29,0,-241,156,35,178,91,177,155,0,58,64,140,192,84,85,139,0,80,64,169,64,-28,145,42,1,95,52,96,44,1,54,32,120,20,88,86,96,15,80,158,0,-58,96,98,154,155,96,17,111,60,4,97,108,108,111,99,64,16,162,246,1,-51,51,64,12,186,93,142,168,239,182,1,3,95,50,52,51,131,210,1,52,-50,223,34,0,58,65,50,128,145,1,95,50,68,146,192,207,97,67,64,47,-96,153,193,2,64,25,64,54,64,13,66,6,121,79,96,69,178,33,3,112,-117,116,98,64,130,194,157,3,51,55,32,79,64,6,0,56,66,79,147,47,-98,80,0,58,96,71,1,10,65,79,169,212,4,64,28,64,17,227,38,1,-0,58,96,56,96,157,0,83,246,176,0,0,90,160,7,128,9,160,10,242,-100,3,213,98,230,74,1,225,7,5,175,193,1,50,50,66,44,130,106,64,-26,81,246,0,51,161,40,240,184,4,3,66,97,100,32,157,193,3,32,109,-111,100,255,17,0,116,203,162,154,0,51,196,166,113,44,0,90,160,4,151,-140,241,78,2,100,176,1,50,51,66,240,98,221,119,161,241,63,7,64,85,-65,59,3,55,52,32,58,96,32,115,155,1,50,112,64,13,162,231,1,52,-57,64,193,186,41,224,5,0,69,37,127,54,211,63,124,8,1,49,50,166,-25,224,6,9,224,42,2,64,15,128,48,224,42,30,160,28,224,49,10,224,-42,15,224,49,10,224,42,22,224,49,3,214,79,97,161,0,58,96,6,227,-156,2,71,16,97,145,0,49,66,182,0,51,130,140,97,96,117,236,66,15,-0,58,96,28,194,233,117,183,64,28,128,16,67,220,0,50,149,210,88,24,-0,58,96,32,228,107,0,0,50,132,107,128,52,64,38,3,10,65,32,82,-161,95,0,58,96,28,160,138,89,144,132,28,0,80,161,226,64,171,67,55,-147,16,225,145,2,0,58,96,179,96,55,0,85,131,148,66,2,0,73,128,-48,198,75,131,10,230,51,0,0,58,96,35,98,103,243,252,0,0,58,98,-236,224,127,2,249,69,2,0,80,158,90,0,49,128,87,162,248,179,206,128,-156,147,237,2,64,64,64,99,74,0,58,68,1,194,96,1,95,50,85,89,-161,117,71,171,64,30,129,48,7,115,101,113,117,97,108,32,58,96,33,64,-46,162,225,3,95,50,49,54,227,55,2,5,77,72,83,68,73,82,99,46,-0,80,64,78,97,68,226,235,0,1,58,50,191,122,224,19,0,230,112,2,-0,58,96,45,165,20,195,63,96,203,104,52,150,56,245,175,19,247,231,5,-1,95,50,127,169,224,126,1,245,181,1,223,230,1,50,49,67,110,191,152,-11,112,101,101,107,67,65,83,116,114,105,110,103,64,21,163,118,1,57,50,-103,85,0,58,96,102,227,135,0,133,242,255,250,1,1,95,50,104,245,192,-6,129,64,96,159,0,58,96,6,6,10,65,32,116,111,73,110,70,98,191,-194,6,94,103,101,116,101,110,118,64,16,167,167,225,80,0,0,52,159,79,-225,2,2,245,245,0,166,148,225,81,1,1,95,50,95,178,64,102,191,198,-65,117,228,201,4,3,116,97,105,108,97,143,0,65,64,197,191,224,64,71,-65,238,95,200,64,67,98,212,191,239,70,108,191,238,2,95,51,48,128,80,-96,151,95,165,64,219,69,66,128,56,0,49,75,238,224,11,0,224,80,0,-0,58,96,6,129,230,0,52,73,56,90,48,160,61,0,50,224,155,3,0,-101,91,79,0,58,138,65,169,118,96,38,0,58,96,6,96,128,251,148,15,-6,67,111,110,116,114,111,108,251,146,11,96,18,2,67,97,108,128,246,166,-84,191,246,102,82,230,81,3,64,7,189,64,191,28,2,39,32,95,68,76,-138,122,97,109,0,57,100,183,71,189,168,155,137,25,0,50,200,167,131,105,-0,58,64,165,64,99,74,15,130,208,188,157,232,250,10,163,140,232,237,2,-0,58,100,133,96,162,0,85,225,195,7,16,109,100,53,67,111,109,98,105,-110,101,58,32,101,109,112,116,121,134,143,64,145,68,116,68,46,160,171,101,-42,70,128,185,91,0,56,73,188,64,88,1,64,89,96,127,64,151,103,27,-68,54,228,27,1,196,186,233,123,2,224,255,3,121,43,96,54,72,217,0,-49,92,220,98,162,2,52,49,32,157,163,0,95,88,196,1,95,49,123,248,-160,0,0,58,97,54,66,233,9,109,100,53,65,114,114,97,121,32,58,96,-57,130,126,194,237,0,55,192,160,1,95,49,92,156,99,226,231,185,4,231,-77,3,3,95,49,57,53,224,46,5,163,138,251,81,1,0,56,129,186,227,-34,1,1,95,49,93,70,160,145,226,225,0,96,20,186,171,65,0,137,56,-67,107,1,53,56,204,250,140,112,151,253,224,106,0,225,58,3,192,25,168,-143,191,85,0,67,127,66,172,41,94,143,97,34,3,95,49,55,55,100,73,-128,0,229,150,3,191,152,202,73,232,58,0,64,186,171,39,224,44,0,96,-95,0,66,133,227,1,51,54,161,125,106,57,255,97,4,232,96,4,224,43,-10,194,134,229,28,2,96,16,0,58,65,96,130,195,105,164,236,190,5,0,-58,96,143,99,215,99,144,93,210,226,3,0,129,253,0,35,101,13,77,193,-0,58,97,160,5,10,65,32,35,49,54,65,111,172,207,1,49,48,65,240,-124,62,92,146,1,95,49,130,57,0,56,79,25,126,99,2,95,49,56,192,-91,64,11,64,45,160,11,1,57,48,224,11,1,91,104,0,58,96,12,255,-253,2,137,22,137,25,66,55,160,2,225,66,6,97,178,128,50,161,245,165,-203,134,68,111,50,2,85,32,65,198,84,96,164,126,39,174,195,93,229,64,-33,131,74,224,33,7,192,139,0,95,77,192,224,38,16,224,71,25,6,64,-64,83,32,73,32,64,193,124,192,86,224,196,0,67,177,0,83,162,131,96,-62,74,66,224,78,16,128,22,99,179,66,145,224,40,16,130,165,196,2,97,-42,67,93,0,53,224,169,21,129,45,97,174,72,229,65,168,162,67,239,216,-4,96,29,224,23,1,96,51,0,58,96,142,251,229,2,160,20,221,71,239,-69,12,0,58,96,123,160,52,64,13,194,179,224,45,15,130,181,226,17,0,-65,59,74,99,0,50,64,198,76,109,0,58,66,103,196,14,131,211,1,95,-49,94,216,71,51,66,143,224,27,11,128,122,252,125,6,160,190,220,111,1,-48,52,69,243,99,30,100,15,65,61,94,51,130,192,1,64,58,99,8,137,-220,0,49,71,51,225,127,1,0,58,96,39,102,14,128,117,113,210,129,236,-164,101,79,138,228,164,1,204,122,64,34,1,64,95,78,115,136,164,0,48,-69,193,1,55,50,230,77,2,27,92,51,52,38,108,105,98,47,68,97,116,-97,47,73,110,116,101,103,101,114,95,84,121,112,101,46,104,115,64,27,4,-44,50,56,58,49,242,26,0,96,178,99,179,100,49,0,85,161,233,224,18,-0,240,136,0,128,5,0,50,244,69,2,224,60,3,105,139,96,60,0,89,-160,208,67,175,64,197,0,48,192,197,158,236,100,194,65,15,100,24,146,58,-196,242,98,120,128,18,228,195,1,3,64,95,52,52,133,89,0,58,97,85,-7,10,65,32,114,101,109,32,58,96,64,110,91,0,58,96,126,79,60,64,-10,130,12,0,80,64,10,204,80,105,12,0,49,134,201,0,49,94,80,0,-58,65,49,64,27,70,42,190,97,169,12,0,49,112,86,0,49,80,60,169,-12,192,56,116,251,192,11,224,80,0,0,58,96,6,128,102,81,75,228,93,-0,1,95,49,69,38,1,64,58,64,43,128,31,0,85,193,179,82,209,135,-111,0,80,227,121,1,160,47,224,15,8,64,65,195,67,226,248,0,0,58,-96,28,175,199,135,82,138,174,82,21,132,7,66,144,224,73,0,64,205,224,-21,2,160,159,103,206,171,55,200,12,139,92,0,49,147,30,96,169,97,27,-2,56,32,58,96,19,3,10,65,32,90,64,200,0,58,96,40,161,126,178,-234,65,76,178,215,0,85,68,220,0,58,96,109,203,84,239,71,6,224,14,-5,203,108,105,137,161,254,75,100,128,207,0,58,96,6,160,72,192,42,64,-172,107,156,192,42,96,60,0,58,96,6,192,42,64,163,1,95,49,67,72,-0,58,96,43,6,10,65,32,47,61,32,58,96,17,132,49,64,38,101,8,-143,104,205,208,0,75,64,98,142,207,129,169,103,155,0,85,224,20,1,99,-137,237,119,5,178,40,78,129,64,147,144,176,64,17,64,9,96,176,160,77,-96,175,192,17,0,58,96,6,228,127,4,228,137,3,128,59,239,96,2,0,-58,96,60,100,125,1,53,51,64,202,226,239,1,211,30,149,40,128,141,245,-17,4,9,110,111,32,109,97,116,99,104,32,97,213,214,96,32,136,40,84,-35,162,245,75,169,128,11,0,58,96,6,235,169,29,8,120,99,101,112,116,-105,111,110,46,68,115,2,114,110,97,107,159,224,39,1,2,80,97,116,64,-22,0,77,64,128,0,70,204,180,162,204,179,151,135,218,178,228,0,49,76,-175,234,165,2,109,110,224,15,3,68,119,248,30,2,202,225,175,216,116,242,-244,247,12,171,209,98,160,179,187,3,95,49,52,56,130,177,179,184,2,85,-32,58,64,18,226,202,2,179,159,161,92,78,168,162,136,109,188,82,231,65,-217,116,197,1,54,32,128,15,99,113,139,167,97,102,68,245,83,200,96,134,-224,39,3,161,135,225,43,1,6,39,92,57,50,38,39,39,165,164,161,156,-96,230,224,99,3,101,30,139,247,224,17,3,140,235,234,175,3,224,168,1,-0,64,160,35,134,75,64,156,164,146,145,41,96,158,130,163,248,12,8,64,-146,70,62,160,148,64,0,0,58,96,147,226,187,0,176,170,232,195,6,166,-179,1,95,49,77,117,160,108,84,65,0,35,74,50,129,145,239,112,0,105,-50,246,146,3,180,140,114,84,210,82,0,90,64,28,143,29,134,34,224,163,-5,224,160,0,2,67,32,79,249,192,1,67,226,139,133,116,60,225,22,7,-96,0,2,79,32,80,119,104,224,79,5,0,97,96,79,96,27,246,106,4,-64,27,0,98,224,27,1,66,158,224,28,5,0,102,224,28,2,0,48,224,-28,7,0,110,224,28,2,0,51,224,28,7,110,240,128,28,0,57,224,27,-7,118,220,160,56,0,49,224,28,7,0,118,224,56,2,224,143,8,64,3,-227,116,1,225,193,0,132,77,69,198,182,54,102,76,147,100,0,51,89,135,-110,13,64,18,3,49,32,64,35,69,57,64,53,196,106,1,51,55,64,56,-203,252,240,14,0,225,189,0,147,171,68,79,96,17,0,58,96,6,154,193,-72,29,237,73,0,208,254,0,49,67,17,75,92,140,206,128,19,0,48,64,-134,144,133,99,48,0,58,96,87,137,60,226,230,3,249,193,1,192,64,151,-17,226,96,8,64,69,105,147,236,138,0,160,40,226,52,3,224,10,1,96,-50,107,36,237,105,1,96,250,129,28,128,123,72,29,224,74,4,0,58,96,-102,237,108,17,183,7,4,111,114,100,32,58,64,76,160,42,224,41,11,0,-54,96,28,2,99,104,114,64,41,237,193,0,75,123,235,125,1,182,72,80,-42,192,234,68,57,67,40,0,58,65,147,225,218,10,113,7,225,218,0,68,-66,96,43,129,205,0,60,71,40,181,95,198,248,0,58,96,60,162,46,213,-79,64,106,0,58,100,64,132,9,0,89,74,170,99,253,240,114,3,0,58,-96,145,139,53,0,49,64,47,128,211,167,209,110,162,83,25,0,58,99,143,-199,167,181,53,0,61,96,11,128,194,172,19,181,33,253,8,2,68,22,116,-18,100,65,134,4,96,121,97,13,130,135,130,130,181,17,96,39,107,172,84,-243,0,58,96,35,171,171,124,232,84,22,96,26,96,43,200,33,194,143,174,-168,96,10,143,135,168,1,224,32,4,237,218,0,229,20,0,246,79,1,97,-34,224,65,4,224,64,5,170,254,182,115,129,228,181,95,172,16,224,169,2,-140,174,181,97,242,161,0,96,30,161,52,73,243,0,58,97,33,182,89,218,-172,97,61,160,36,160,53,235,56,1,210,115,121,93,111,202,117,131,210,54,-1,95,49,158,14,0,58,103,158,178,13,213,100,96,27,250,107,1,105,139,-84,198,178,3,64,222,160,26,104,229,0,56,104,124,101,141,0,58,96,101,-182,43,128,55,0,56,74,183,0,90,123,62,64,31,181,14,2,110,101,119,-213,212,4,76,101,110,32,58,96,39,224,223,7,180,248,76,29,180,248,129,-147,2,115,101,113,103,39,86,252,128,43,64,44,129,32,73,79,180,164,193,-149,128,1,114,16,225,172,3,224,20,3,224,17,8,224,14,5,224,11,2,-192,8,110,171,128,209,226,223,1,238,229,12,180,125,0,79,64,152,171,86,-0,56,72,138,0,95,111,168,192,7,0,95,82,144,148,17,0,95,113,80,-160,10,211,87,2,64,95,57,72,75,160,10,66,253,83,198,0,58,96,16,-123,236,3,111,107,101,87,100,146,211,222,87,56,160,17,194,124,107,12,0,-95,115,119,0,95,82,50,0,58,179,120,207,38,143,250,243,130,0,160,46,-99,48,128,46,226,132,1,87,128,99,162,70,81,0,95,99,7,0,58,178,-133,183,81,178,102,6,116,111,80,116,114,32,58,178,103,239,144,5,178,39,-175,72,139,61,79,38,64,96,67,179,1,64,95,80,154,222,175,134,73,77,-245,138,4,240,206,14,176,205,200,208,0,95,145,207,70,179,64,63,1,67,-32,96,65,0,95,78,71,64,44,240,229,0,229,148,4,176,231,78,216,115,-52,72,65,0,58,176,220,5,113,117,111,116,32,58,176,219,226,56,1,226,-60,2,226,99,72,177,40,97,30,164,142,244,142,1,0,95,80,213,163,154,-224,20,0,163,159,245,127,6,244,125,3,0,58,177,90,86,140,65,16,70,-243,0,58,64,37,66,59,5,102,114,101,101,32,58,177,68,135,168,224,91,-5,86,31,150,93,211,218,246,28,4,191,107,81,69,250,103,4,177,128,237,-40,1,64,165,133,89,96,244,0,39,79,68,224,48,0,151,191,160,97,245,-148,1,165,87,193,62,224,118,3,1,64,95,81,157,128,162,133,104,1,55,-53,245,140,5,136,177,0,58,177,223,3,85,32,75,51,227,177,5,0,58,-177,222,130,168,66,213,176,187,75,175,0,83,107,26,190,79,128,176,76,79,-145,129,64,206,224,112,11,128,111,0,54,160,85,228,34,9,0,58,177,4,-68,204,0,58,177,5,96,215,191,221,66,185,215,207,226,190,7,177,41,248,-150,6,8,117,110,100,101,102,105,110,101,100,74,53,0,58,177,49,243,133,-15,209,69,1,52,50,163,203,70,190,99,43,0,95,76,36,233,239,12,65,-152,233,235,2,158,57,4,67,32,95,54,51,224,37,3,233,204,2,64,37,-96,19,96,10,0,95,81,89,0,58,177,126,0,85,230,102,0,0,53,79,-198,64,32,210,56,161,65,0,80,96,12,97,123,244,39,1,132,17,96,175,-67,163,97,245,64,70,154,55,132,185,108,108,192,91,210,178,224,55,10,193,-10,177,240,82,250,131,245,112,134,224,13,0,73,95,225,105,6,179,165,14,-58,32,117,110,115,117,112,112,111,114,116,101,100,32,119,69,116,3,115,105,-122,101,107,180,3,35,51,50,55,96,102,8,35,50,49,52,55,52,56,51,-54,74,123,0,58,178,26,243,116,2,235,14,0,64,117,244,63,1,66,236,-211,103,81,200,129,20,65,146,0,51,225,33,0,129,143,0,54,147,109,98,-111,178,101,0,105,92,201,178,11,0,115,74,133,178,10,73,152,178,7,230,-183,15,178,27,227,33,0,165,25,178,39,4,95,52,56,32,95,80,98,0,-95,80,188,0,95,80,204,0,95,113,28,81,20,117,1,1,95,53,81,199,-129,238,65,65,64,9,0,58,64,5,176,47,241,50,3,88,10,89,224,239,-223,0,178,54,224,29,1,224,49,1,224,39,4,178,51,227,198,10,178,53,-3,62,61,32,58,64,141,64,10,1,32,58,177,177,75,33,177,140,2,60,-32,58,177,136,5,105,99,109,112,32,58,209,138,74,221,80,99,0,95,80,-225,0,58,177,75,74,218,176,241,65,64,176,131,2,80,32,58,176,124,196,-145,164,204,193,74,224,20,11,224,17,8,224,14,5,224,11,2,192,8,230,-12,0,240,222,0,236,156,11,176,237,4,110,101,103,32,58,175,227,2,42,-32,58,174,43,2,45,32,58,174,42,2,43,32,58,174,9,224,156,68,0,-58,174,80,224,155,2,193,143,174,62,170,23,2,66,32,95,76,246,0,95,-77,61,64,12,66,57,142,33,174,32,116,184,173,134,2,73,32,58,173,114,-64,54,96,42,95,23,173,121,64,29,128,232,64,9,128,232,8,94,109,97,-108,108,111,99,32,58,173,91,13,73,79,46,112,101,114,102,111,114,109,73,-79,32,58,173,83,224,187,2,0,58,173,58,2,85,32,58,173,56,224,227,-14,0,58,173,70,64,19,0,95,141,169,77,63,0,58,173,82,131,75,136,-219,173,87,6,114,97,105,115,101,32,58,173,67,95,195,128,172,7,65,46,-114,101,97,100,32,58,173,53,13,73,79,46,103,101,116,65,114,103,82,101,-102,32,58,173,62,0,95,71,7,101,15,68,120,99,108,64,107,128,190,6,-73,79,46,62,62,32,58,173,79,0,95,79,16,98,175,109,47,199,245,82,-127,109,60,2,95,49,57,192,9,127,206,99,141,173,79,186,195,110,98,173,-134,109,93,118,73,173,92,128,35,96,32,154,172,160,32,0,95,68,217,0,-58,173,108,0,95,78,79,128,246,224,47,7,149,207,64,4,142,171,225,14,-0,236,232,0,226,202,6,0,58,172,240,118,243,0,58,236,233,1,130,87,-164,140,172,239,233,234,0,70,38,224,11,2,96,210,101,33,0,58,172,229,-96,64,173,80,128,178,0,51,97,221,108,211,130,135,74,235,129,75,75,93,-96,36,180,14,0,95,68,213,65,237,128,237,2,75,32,58,227,137,0,70,-206,96,11,2,66,32,58,162,140,9,79,46,114,101,116,117,114,110,32,58,-225,225,0,0,62,68,141,245,246,0,227,127,7,227,107,37,0,58,128,208,-226,167,15,207,254,226,143,1,64,202,2,95,50,48,147,150,224,0,255,224,-0,255,224,0,255,224,0,255,224,0,255,224,0,255,224,0,255,224,0,183,-1,32,125,-};-unsigned char *combexpr = data;-int combexprlen = 99863;+122,76,90,49,235,156,1,0,26,118,55,46,48,10,50,49,52,48,10,65,+32,95,48,32,95,50,51,32,64,95,50,49,52,32,64,66,224,15,2,64,+5,2,64,66,32,224,18,4,16,50,32,64,64,64,83,39,32,66,32,64,+66,39,32,67,32,83,64,50,6,83,32,67,39,32,83,39,128,10,9,64,+95,49,50,54,32,95,50,50,53,96,48,96,10,22,56,32,64,102,114,111,+109,85,84,70,56,32,34,45,45,118,101,114,115,105,111,110,34,64,75,17,+64,64,67,39,66,32,85,32,95,50,54,48,32,95,49,51,49,32,224,41,+1,8,77,105,99,114,111,72,115,44,32,160,48,0,32,64,49,96,35,3,+95,50,54,56,64,105,224,46,4,16,44,32,99,111,109,98,105,110,97,116,+111,114,32,102,105,108,101,224,55,5,2,50,54,57,128,112,1,64,75,96,+197,64,198,64,123,2,64,67,32,224,178,25,6,110,117,109,101,114,105,99,+224,186,6,2,66,32,80,160,184,96,143,224,89,0,129,54,65,13,96,99,+64,5,1,95,56,64,181,65,81,64,12,8,50,51,50,32,95,50,49,32,+64,64,124,5,50,55,49,32,64,35,64,12,0,66,128,77,64,7,224,218,+5,6,102,108,97,103,115,32,61,96,200,4,64,95,49,49,55,64,53,0,+54,160,107,1,64,67,128,100,161,173,0,83,64,27,0,55,64,27,128,121,+224,23,4,96,165,224,23,10,97,26,65,13,0,66,65,219,10,95,50,56,+50,32,64,85,32,75,32,65,161,163,65,234,2,39,32,64,96,208,2,95,+50,56,98,12,1,56,52,65,59,5,67,32,95,54,49,54,65,140,0,52,+64,92,0,75,96,161,3,50,48,50,52,160,105,3,67,39,32,80,64,231,+0,39,64,86,13,48,56,57,32,64,95,55,49,57,32,95,52,48,55,224,+224,2,11,99,111,109,109,97,110,100,45,108,105,110,101,64,228,2,35,48,+32,96,3,129,83,2,95,50,49,64,4,1,48,57,128,17,96,144,3,95,+50,49,48,129,1,64,100,98,191,0,49,129,125,64,9,64,207,1,85,32,+129,142,64,199,96,150,224,43,0,128,150,3,95,50,49,51,65,39,162,206,+4,32,95,54,56,51,96,106,96,205,0,54,65,171,64,34,64,213,129,94,+128,60,129,210,2,95,49,51,64,225,226,57,2,64,147,1,53,50,65,153,+96,13,5,79,32,35,52,54,32,129,15,193,28,3,67,39,32,79,96,105,+2,50,49,48,131,108,128,8,160,6,161,61,192,45,96,0,9,58,50,49,+51,57,32,64,10,65,32,65,106,224,1,17,65,197,3,48,50,50,32,65,+52,2,95,49,51,131,186,98,69,1,79,32,224,138,2,96,96,65,195,64,+25,97,189,224,203,0,227,6,4,224,190,4,2,95,54,49,64,143,160,150,+0,79,64,34,227,35,9,6,108,105,98,47,103,109,112,98,161,96,53,128,+236,64,85,64,106,224,40,1,3,47,108,105,98,224,37,1,0,64,224,25,+2,3,111,117,116,46,67,194,162,229,96,196,224,6,28,96,151,224,6,0,+160,20,0,54,129,159,160,6,224,27,3,224,113,1,6,100,101,102,97,117,+108,116,64,112,65,104,0,56,97,104,2,66,32,89,97,229,98,20,0,83,+194,190,65,40,4,67,32,64,64,80,226,234,0,162,9,64,5,64,13,163,+242,133,9,228,81,25,164,66,224,69,53,0,118,224,69,60,0,113,224,69,+60,0,114,224,69,60,0,108,224,69,60,0,115,224,69,60,1,67,82,224,+70,61,0,87,224,70,61,224,69,60,0,84,224,69,60,3,88,67,80,80,+224,72,60,0,122,224,69,60,0,81,224,69,3,195,182,198,223,128,85,232,+155,30,0,111,224,73,0,64,58,0,82,96,66,230,42,2,230,34,0,101,+101,102,34,224,117,60,2,112,116,99,224,120,21,128,97,224,126,0,0,49,+224,126,0,103,179,165,99,135,146,1,64,67,69,119,198,240,224,156,12,161,+87,64,14,64,30,128,33,192,25,64,10,193,127,224,10,1,224,207,9,6,+49,50,57,32,64,35,52,70,44,192,182,0,66,138,17,225,191,3,233,97,+4,128,50,1,49,48,192,51,165,85,64,34,160,49,69,107,135,23,64,246,+0,67,231,147,1,0,50,224,241,0,231,29,0,233,108,0,224,195,84,192,+160,224,195,15,128,49,225,174,21,224,188,1,225,174,4,1,54,54,64,43,+225,174,6,224,206,109,0,49,74,126,224,206,16,226,246,14,224,170,110,202,+247,224,170,21,74,162,224,170,10,224,176,1,192,102,160,168,224,13,0,224,+171,24,224,41,1,160,57,224,16,0,2,66,32,90,224,16,5,170,110,224,+192,4,140,41,128,37,226,50,17,74,21,226,50,11,77,164,226,50,9,224,+219,127,0,55,225,111,0,224,219,71,226,98,99,0,56,204,102,128,48,224,+204,6,108,201,192,202,69,210,196,150,0,54,225,68,0,229,85,107,0,57,+109,242,229,84,37,236,232,2,229,84,123,224,194,0,128,48,225,119,6,226,+68,6,224,187,1,226,68,4,0,55,128,18,229,83,8,192,113,128,125,225,+27,1,224,201,5,0,67,224,201,62,239,155,0,224,201,12,226,65,4,0,+55,226,65,14,227,96,13,160,139,97,204,0,50,64,171,240,40,6,7,85,+110,107,110,111,119,110,32,80,48,1,58,32,104,83,205,129,174,12,2,35,+49,48,129,26,239,79,4,224,0,2,193,210,64,229,97,33,129,224,144,182,+0,53,96,144,1,50,48,64,8,224,117,1,0,46,136,189,224,34,20,137,+89,224,25,11,0,97,232,250,0,129,201,129,31,174,160,225,199,2,226,13,+19,233,16,35,161,62,227,11,6,114,79,161,135,65,34,224,39,15,80,192,+224,39,26,0,51,231,42,1,224,39,21,224,185,1,224,39,11,0,39,224,+40,1,232,68,2,224,20,1,230,229,1,160,61,224,108,21,224,46,8,224,+39,14,233,109,3,224,39,19,229,201,1,224,39,19,0,48,231,140,2,224,+79,21,229,78,3,224,39,19,228,184,2,4,54,49,32,95,55,96,135,1,+57,51,192,9,2,56,49,32,115,79,128,0,224,64,0,0,83,224,64,11,+65,98,1,55,57,128,57,3,64,95,50,55,82,120,233,12,7,101,64,112,+33,0,55,112,33,6,95,54,56,52,32,75,32,82,88,132,5,224,1,19,+108,207,224,0,5,224,50,41,224,47,38,224,44,35,224,41,32,224,38,29,+224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,+8,224,14,5,224,11,2,192,8,96,5,100,189,151,3,224,0,10,66,31,+0,54,226,31,5,0,90,224,146,4,224,1,13,226,31,255,224,34,21,226,+31,156,226,29,18,66,28,0,53,226,28,5,224,100,1,235,89,6,224,1,+17,226,43,255,224,34,21,226,43,101,225,244,13,65,239,0,52,225,239,15,+64,1,161,243,225,245,255,224,37,24,225,245,91,225,202,11,65,200,0,51,+225,200,17,193,198,224,84,7,224,1,9,225,197,255,224,34,21,225,197,58,+224,23,14,227,167,12,65,221,0,50,227,166,19,227,168,2,225,227,255,224,+37,23,225,227,65,225,178,10,65,176,0,49,225,176,21,225,178,3,225,179,+255,224,37,23,225,179,36,225,150,9,65,149,0,48,225,149,23,128,1,225,+155,2,225,158,229,225,53,6,0,58,144,75,225,50,27,192,1,225,58,5,+64,0,224,49,23,225,62,12,224,136,2,64,132,158,244,224,132,28,224,128,+7,224,43,19,128,1,225,189,107,225,104,4,64,225,239,180,6,224,78,21,+225,100,8,224,46,21,64,1,224,228,60,224,181,3,64,180,0,54,224,180,+31,224,176,6,224,40,17,192,1,227,81,151,227,40,5,65,11,237,56,16,+224,1,1,225,5,3,224,31,11,224,1,5,228,84,192,224,38,29,224,35,+26,229,211,8,65,119,236,192,20,224,1,11,228,161,9,224,88,2,64,81,+235,73,10,64,51,224,87,23,225,177,255,224,35,3,224,32,23,224,29,20,+224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,241,24,+16,66,19,235,127,22,128,1,226,89,4,224,34,13,224,1,3,226,46,230,+225,95,7,65,86,235,37,12,97,70,224,83,15,224,1,1,225,62,230,224,+35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,+224,14,5,227,98,15,66,10,139,154,94,55,156,222,156,81,0,50,126,189,+0,50,128,10,0,56,219,33,123,240,1,95,48,91,201,89,16,0,51,124,+147,156,3,89,6,128,9,224,31,0,219,110,1,54,54,89,81,157,124,89,+111,1,57,53,89,85,0,57,186,172,0,54,123,52,1,57,52,89,98,64,+31,0,67,96,75,220,196,252,194,6,11,67,97,110,110,111,116,32,102,105,+110,100,32,188,25,2,66,32,85,221,185,3,32,95,56,49,224,155,1,96,+80,3,95,50,49,49,96,139,224,10,3,64,9,1,56,32,64,253,0,49,+139,101,64,109,1,50,57,128,58,224,227,6,2,50,57,49,64,19,87,221,+1,51,50,64,148,64,65,224,33,5,2,49,49,54,156,151,0,66,224,128,+2,64,82,1,54,48,157,162,78,148,3,79,32,35,53,225,71,0,96,29,+224,112,1,128,41,224,234,6,0,32,192,224,0,89,127,165,64,56,128,99,+3,67,39,32,89,154,155,190,180,161,122,120,131,93,141,128,174,1,49,48,+222,48,1,67,39,92,227,64,167,0,55,190,42,193,111,252,247,3,64,225,+0,57,65,244,129,154,0,64,161,177,65,36,140,5,159,2,66,80,190,124,+128,15,64,112,125,148,0,53,127,118,1,50,57,94,222,192,6,0,49,97,+133,93,114,66,42,160,21,64,82,139,118,66,109,1,49,52,97,95,225,81,+4,0,56,98,28,130,77,225,81,0,221,227,225,134,0,222,253,0,50,64,+77,64,223,0,56,128,37,226,57,12,22,103,101,116,68,105,114,101,99,116,+111,114,121,67,111,110,116,101,110,116,115,58,32,99,130,79,3,111,112,101,+110,193,110,129,94,158,66,0,66,64,5,225,233,4,98,84,223,5,65,11,+65,145,0,83,97,111,224,138,9,226,150,0,224,65,3,97,149,224,24,9,+67,135,254,228,1,225,190,3,226,90,8,1,95,50,127,155,65,85,224,18,+2,65,89,65,181,1,49,52,128,123,65,101,0,54,97,101,9,94,99,95,+100,95,110,97,109,101,32,64,19,139,47,7,94,114,101,97,100,100,105,114,+96,18,137,202,0,75,224,145,5,0,54,66,40,225,128,4,194,168,191,65,+225,91,1,64,91,0,58,129,63,67,238,0,56,98,204,1,57,52,128,145,+224,66,29,6,118,101,114,115,105,111,110,224,69,1,0,50,66,57,1,95,+50,193,6,224,69,29,13,99,111,109,112,105,108,101,114,58,32,109,104,115,+45,96,74,1,95,55,132,8,224,64,29,6,100,101,112,101,110,100,115,224,+134,1,0,53,66,138,64,46,3,48,53,32,85,99,112,160,51,0,64,128,+231,192,66,4,79,32,35,52,53,163,222,128,187,129,140,1,57,52,66,16,+130,86,225,195,2,96,126,224,118,1,15,101,120,112,111,115,101,100,45,109,+111,100,117,108,101,115,58,162,138,165,79,227,1,3,0,85,99,160,131,84,+224,79,17,4,111,116,104,101,114,224,77,7,192,60,129,80,228,127,1,0,+95,66,183,100,128,0,54,225,14,7,164,131,64,24,129,213,1,55,48,160,+217,128,0,66,60,139,181,128,170,0,66,224,151,7,226,188,0,227,181,2,+0,39,64,101,2,56,32,95,64,114,223,84,98,252,229,8,14,15,66,117,+105,108,100,105,110,103,32,112,97,99,107,97,103,101,128,147,129,82,101,1,+163,171,230,123,7,67,158,66,64,0,55,64,217,95,156,229,51,3,67,180,+196,98,132,197,227,232,1,2,95,50,56,163,76,101,86,160,48,0,39,224,+5,8,224,230,3,192,131,224,232,30,192,234,128,10,224,239,5,3,87,114,+105,116,224,238,9,133,211,66,120,226,181,9,2,32,116,111,193,168,68,249,+224,0,0,224,219,0,96,195,128,108,224,183,6,161,160,0,39,96,2,4,+32,95,49,57,54,69,58,192,70,160,46,2,50,49,48,100,83,160,79,134,+97,96,8,200,54,1,67,32,102,122,64,41,131,47,0,55,68,207,0,85,+102,181,3,64,85,32,65,96,156,1,50,54,96,69,224,21,5,2,64,95,+57,100,250,163,99,136,73,164,61,227,254,0,64,15,160,174,129,49,225,169,+6,192,195,225,126,29,225,127,22,6,67,111,109,112,114,101,115,68,142,3,+32,116,105,109,193,128,129,73,225,130,0,101,125,71,79,67,246,134,139,4,+52,48,32,95,55,131,31,225,155,2,1,109,115,194,175,168,121,229,232,2,+1,95,49,168,59,1,32,95,64,6,64,190,64,176,0,53,97,125,195,108,+64,51,104,117,73,198,73,58,134,42,67,123,141,29,1,66,32,232,34,1,+225,144,1,168,9,239,67,1,128,7,230,90,4,141,56,65,174,131,37,105,+162,64,88,140,31,0,83,196,240,2,53,49,55,129,222,94,166,1,95,49,+68,211,198,241,104,79,1,64,35,165,236,166,135,131,13,0,80,227,154,1,+98,128,224,50,4,101,46,161,8,168,70,99,147,135,226,129,219,228,64,2,+66,20,200,90,74,78,96,181,68,184,65,17,0,53,97,147,64,14,0,53,+128,57,1,48,53,65,0,231,149,0,224,163,3,0,73,64,9,89,214,224,+174,2,161,4,104,54,226,14,8,195,134,103,64,104,44,9,102,32,116,104,+101,32,102,111,114,109,96,20,0,45,198,187,131,130,169,101,4,53,32,95,+49,53,130,110,97,81,139,102,195,129,64,1,235,187,30,224,11,2,192,8,+73,240,128,86,67,109,133,125,2,95,50,52,67,185,2,57,50,52,67,197,+0,55,64,224,0,73,105,189,67,186,224,121,0,2,95,49,56,65,255,101,+201,129,127,96,21,1,54,51,65,32,65,2,70,20,0,54,106,27,65,60,+1,57,52,70,232,1,49,55,129,113,96,77,137,184,66,114,202,0,162,94,+65,112,229,49,5,204,22,195,158,2,67,32,95,106,82,97,104,225,96,2,+14,107,103,80,97,116,104,32,105,115,32,101,109,112,116,121,230,174,0,130,+178,129,255,96,6,0,79,66,67,0,79,235,68,0,192,27,128,135,96,105,+134,134,231,52,5,228,29,13,3,32,95,50,55,103,197,0,49,131,180,0,+35,131,98,228,27,22,6,73,110,115,116,97,108,108,229,158,9,64,99,168,+23,229,155,6,0,105,234,89,0,64,81,230,39,0,233,103,5,196,94,70,+144,224,13,1,229,191,0,224,208,4,3,95,50,48,57,65,228,132,72,128,+86,224,226,0,128,50,224,253,10,64,53,65,241,203,230,161,63,225,172,1,+99,120,200,19,225,91,2,161,123,135,94,231,215,19,161,81,0,35,99,91,+231,203,14,4,99,114,101,97,116,231,193,1,224,84,6,102,3,224,219,1,+69,254,101,1,66,56,78,143,192,150,128,193,101,53,78,61,66,192,66,240,+165,48,2,95,56,48,166,43,169,41,236,218,8,64,116,97,171,96,57,97,+179,138,173,233,204,10,224,101,3,234,147,4,238,179,1,64,0,0,75,132,+81,98,218,64,196,197,162,1,48,54,99,47,70,243,2,90,32,75,96,47,+64,21,214,180,96,43,69,122,1,50,49,64,180,64,26,213,87,2,32,95,+53,75,201,64,25,0,50,128,25,137,105,193,227,0,80,109,238,0,32,133,+38,68,213,239,173,2,225,112,1,1,46,47,161,107,135,110,167,123,64,84,+0,49,128,84,179,96,2,50,49,48,66,145,0,48,69,15,64,22,134,0,+129,144,78,48,64,89,69,91,96,28,240,50,0,163,224,1,95,52,102,23,+2,50,48,57,111,85,96,49,128,61,64,54,101,98,166,226,2,95,52,53,+100,0,174,7,96,48,64,126,64,64,224,125,0,97,17,64,21,229,188,1,+2,95,50,57,97,4,96,33,110,139,98,125,195,68,80,71,71,21,1,95,+51,71,78,226,156,0,224,30,8,0,55,86,181,224,30,8,2,95,51,55,+64,6,227,58,8,1,95,50,69,192,208,73,96,125,129,183,168,237,96,212,+224,99,2,109,72,66,107,0,48,80,51,1,35,53,69,156,79,99,237,166,+0,65,165,163,27,235,124,0,162,240,97,91,129,102,2,48,57,51,96,223,+228,78,2,225,218,2,66,155,0,55,229,2,1,71,249,129,133,229,25,1,+129,152,238,156,0,96,13,0,64,231,122,4,140,147,129,6,228,186,2,229,+92,3,131,250,168,43,0,85,72,221,142,86,238,96,3,64,186,129,232,0,+80,192,32,64,190,161,169,194,174,0,89,230,12,0,0,66,64,134,134,119,+64,17,224,54,2,224,140,0,160,87,130,149,2,94,109,107,142,162,97,80,+1,10,65,228,72,2,4,85,115,97,103,101,109,230,2,32,91,45,199,129,+0,93,64,11,6,110,117,109,101,114,105,99,224,19,3,0,118,64,4,0,+113,64,4,0,108,64,4,0,115,64,4,0,114,64,4,5,67,91,82,124,+87,93,64,9,3,88,67,80,80,64,7,3,68,68,69,70,64,7,4,73,+80,65,84,72,64,8,0,84,64,4,0,122,64,4,0,105,192,18,4,111,+70,73,76,69,64,8,1,97,91,96,18,64,10,0,76,96,10,3,124,80,+75,71,96,14,0,80,64,8,12,32,91,45,81,32,80,75,71,32,91,68,+73,82,96,22,5,116,84,65,82,71,69,96,82,26,111,112,116,99,32,79,+80,84,73,79,78,93,32,91,77,79,68,85,76,69,78,65,77,69,46,46,+124,96,94,0,34,129,68,232,54,1,234,243,7,231,104,3,236,246,1,230,+95,9,0,55,101,75,230,74,0,224,42,1,68,193,0,53,101,4,115,64,+0,90,229,231,13,72,76,133,26,106,174,229,254,0,135,111,128,0,64,27,+0,85,160,35,128,9,160,10,224,183,11,230,235,2,206,46,132,210,162,6,+160,167,231,12,2,224,21,8,224,24,1,192,239,166,250,160,80,173,158,224,+96,3,232,15,31,236,33,28,16,116,111,112,32,108,101,118,101,108,32,100,+101,102,110,115,58,32,96,0,237,167,0,230,93,3,3,49,48,32,35,198,+89,236,46,1,165,134,128,22,232,46,5,7,40,117,110,112,114,117,110,101,+180,223,224,76,3,224,64,2,0,95,112,123,68,11,0,49,233,14,2,225,+18,24,238,183,9,231,198,22,228,168,1,152,36,161,19,160,53,132,160,241,+7,4,224,201,2,0,61,160,193,68,210,68,118,224,166,6,225,208,5,131,+250,224,186,1,174,144,76,22,3,95,50,48,51,168,234,226,85,1,226,164,+4,104,186,106,254,146,122,229,110,5,224,55,4,226,143,12,224,119,5,234,+191,4,226,55,68,9,102,105,110,97,108,32,112,97,115,115,130,49,226,55,+3,163,157,97,82,128,59,226,59,0,160,74,238,109,17,231,239,2,238,109,+4,163,245,162,5,129,5,206,21,130,167,240,8,16,224,225,1,65,126,139,+27,170,102,228,66,1,236,79,3,5,54,32,95,57,54,57,160,146,141,150,+1,54,32,129,143,0,53,97,15,130,237,1,57,49,198,248,0,51,96,41,+78,92,1,55,54,64,54,0,48,231,234,0,232,198,11,0,104,192,215,104,+146,128,92,1,50,48,77,199,1,95,55,134,206,64,14,160,201,192,225,161,+137,226,106,1,161,94,192,30,225,82,3,96,19,98,72,1,48,51,109,66,+104,181,1,32,95,225,102,0,2,35,49,48,72,248,225,125,20,6,32,108,+105,110,101,115,47,225,131,2,237,14,4,229,135,3,100,238,194,250,160,123,+100,212,128,155,110,188,1,50,48,73,87,225,5,2,3,99,111,109,98,192,+91,165,7,224,53,4,72,152,224,53,10,235,110,1,225,190,3,3,95,55,+53,52,226,156,2,3,109,104,115,99,224,42,7,229,202,0,230,25,11,64,+106,206,225,160,126,236,166,4,201,55,224,168,0,227,75,7,1,95,54,73,+173,193,208,106,237,97,197,98,243,1,95,55,194,53,235,255,6,224,11,0,+210,165,240,99,1,193,223,64,80,160,76,227,227,1,96,13,136,248,242,144,+0,1,48,56,184,50,105,63,4,95,49,48,51,55,65,214,98,194,81,102,+225,29,2,2,97,105,110,227,89,3,2,58,50,48,86,25,107,218,128,224,+137,105,103,22,130,92,105,183,76,57,64,16,224,156,0,226,116,4,236,111,+1,67,67,101,32,81,198,70,30,147,28,226,90,2,0,125,192,126,64,29,+1,85,32,172,112,226,221,3,90,21,224,13,1,238,71,2,174,74,96,48,+224,17,4,192,20,226,150,2,224,48,8,224,51,10,224,57,3,226,136,3,+224,29,17,224,65,3,133,234,194,51,194,184,224,45,11,128,41,224,37,8,+229,135,0,236,129,1,166,145,97,101,129,229,136,143,72,166,3,95,49,57,+51,131,172,4,95,49,56,49,32,133,169,2,95,54,51,98,157,98,125,68,+118,65,85,1,75,52,161,118,224,159,6,67,49,0,49,106,148,64,6,196,+100,224,31,1,99,38,224,234,8,225,5,2,192,40,246,169,2,123,55,1,+95,54,85,110,224,34,7,224,62,0,99,48,128,120,224,34,3,64,18,131,+90,128,15,178,27,65,2,124,10,81,102,78,57,0,57,192,56,192,42,128,+145,132,106,147,111,224,99,6,99,149,103,242,160,17,2,95,49,48,250,202,+2,225,9,13,225,3,2,192,161,224,165,5,192,156,160,220,233,148,1,160,+184,193,21,131,132,0,55,198,68,177,145,96,147,96,208,70,62,64,122,214,+94,227,61,1,77,151,142,216,229,210,4,128,0,226,46,0,0,67,97,229,+0,50,175,134,234,195,6,3,64,66,32,82,64,213,0,53,217,176,173,183,+128,237,232,74,5,234,235,1,142,226,231,229,5,1,65,32,228,40,0,224,+122,1,142,254,226,110,1,161,20,96,21,201,73,224,207,1,254,41,0,228,+54,12,228,20,2,4,64,92,49,48,38,230,17,0,143,98,160,67,69,125,+233,114,3,163,127,137,46,160,9,131,32,230,165,3,2,95,57,56,65,29,+96,239,100,98,160,134,193,61,65,60,192,85,2,80,32,90,240,212,0,132,+180,192,25,65,32,0,85,96,42,130,129,3,85,32,75,51,64,2,160,11,+224,53,0,86,129,224,11,0,236,186,0,0,54,71,103,66,154,2,55,52,+50,229,142,1,0,52,86,250,102,35,233,87,8,1,78,111,75,136,3,105,+110,105,116,87,179,4,102,111,117,110,100,85,158,187,197,170,160,227,109,1,+69,187,213,20,1,95,49,84,219,2,95,50,48,145,126,100,59,125,11,135,+130,129,42,96,140,118,251,105,25,191,179,81,119,247,120,10,195,91,130,34,+196,199,132,167,64,233,130,74,65,79,247,136,1,194,94,224,94,36,161,198,+164,101,224,108,0,96,176,141,212,161,88,224,107,4,96,106,226,206,0,124,+225,0,54,128,224,194,131,71,141,225,98,8,11,35,105,110,99,108,117,100,+101,32,92,51,52,130,112,218,142,2,79,32,35,69,74,236,208,2,71,205,+233,196,11,7,109,104,115,102,102,105,46,104,205,40,2,95,53,57,71,34,+103,205,225,72,24,150,12,224,244,6,224,13,0,99,200,192,36,224,46,2,+224,10,6,163,241,225,124,5,129,14,129,18,225,24,0,225,16,0,136,156,+1,50,48,119,81,227,161,0,224,212,1,31,115,116,97,116,105,99,32,115,+116,114,117,99,116,32,102,102,105,95,101,110,116,114,121,32,116,97,98,108,+101,91,93,32,2,61,32,123,64,239,227,205,6,234,194,1,82,122,168,251,+0,64,224,87,3,4,123,32,48,44,48,135,244,224,22,3,1,125,59,224,+17,7,224,121,8,1,42,120,64,11,96,127,1,32,61,128,135,96,52,228,+12,3,247,130,6,24,85,110,105,109,112,108,101,109,101,110,116,101,100,32,+70,70,73,32,102,101,97,116,117,114,101,225,170,0,2,50,48,55,84,166,+0,53,75,171,0,54,106,101,0,51,75,200,97,187,64,28,169,110,203,18,+225,206,1,65,107,65,195,232,31,1,225,151,1,132,133,160,5,193,240,0,+83,99,120,2,83,32,73,130,83,71,144,228,136,0,96,3,96,12,231,18,+6,135,129,224,85,0,99,114,75,12,4,61,61,32,64,35,133,110,192,30,+166,168,231,100,1,242,145,2,116,204,2,50,48,56,230,62,1,194,16,68,+26,0,54,244,246,0,184,251,170,118,130,89,128,23,217,7,64,19,91,62,+199,104,211,128,97,49,227,29,12,5,100,121,110,97,109,105,203,128,64,85,+0,85,97,118,64,189,224,238,3,224,85,37,6,119,114,97,112,112,101,114,+224,85,7,101,17,192,85,225,48,1,224,77,23,130,236,235,7,2,97,30,+155,117,193,226,192,253,186,15,193,231,137,247,71,223,237,233,23,224,94,0,+194,58,136,149,1,48,56,103,6,0,54,161,155,97,200,108,237,160,23,162,+121,224,132,12,226,124,11,128,19,225,64,14,68,212,199,131,224,85,1,196,+139,224,93,0,194,177,224,84,3,225,74,4,149,111,64,74,96,0,194,116,+230,29,0,64,14,225,129,4,0,66,71,101,64,212,97,155,245,144,2,226,+2,3,225,176,33,3,118,97,108,117,163,196,224,102,13,141,201,0,39,64,+103,1,95,53,76,209,192,242,224,138,7,224,17,4,161,107,192,139,226,246,+1,104,40,133,142,226,93,1,64,38,231,203,15,231,204,9,1,98,97,103,+188,11,101,105,103,110,32,105,109,112,111,114,116,32,135,198,253,88,10,99,+150,151,147,109,49,64,14,150,146,104,139,64,14,0,51,128,14,0,50,86,+69,64,201,253,132,2,222,253,224,13,9,231,81,1,253,109,0,64,62,150,+132,224,105,0,149,155,192,105,67,168,1,10,65,230,27,4,5,71,69,84,+82,65,87,229,176,7,11,71,69,84,84,73,77,69,77,73,76,76,73,224,+27,7,2,97,99,111,112,60,224,19,4,2,100,100,95,86,18,224,23,11,+3,117,116,102,56,224,23,8,0,115,142,170,224,19,4,1,116,97,224,19,+12,0,50,224,20,7,4,99,97,108,108,111,99,225,224,21,4,3,108,111,+115,101,112,121,224,21,4,224,171,9,2,101,120,112,224,18,7,4,102,108,+117,115,104,224,59,8,3,102,111,112,101,224,145,8,2,102,114,101,98,172,+224,19,3,2,103,101,116,224,60,8,5,103,101,116,101,110,118,224,21,7,+7,105,115,119,105,110,100,111,119,224,148,8,2,108,111,103,224,18,7,0,+109,224,230,12,6,109,100,53,65,114,114,97,126,129,224,23,6,0,66,225,+129,11,7,109,100,53,83,116,114,105,110,224,94,9,3,101,109,99,112,224,+70,9,4,101,109,109,111,118,224,225,8,1,112,117,224,225,9,225,194,10,+3,115,113,114,116,224,19,8,4,121,115,116,101,109,224,21,7,225,235,10,+5,116,109,112,110,97,109,224,122,8,1,117,110,225,94,11,5,117,110,108,+105,110,107,224,166,8,4,101,101,107,80,116,102,73,224,22,4,2,111,107,+101,224,22,14,3,87,111,114,100,224,69,11,224,23,11,66,204,13,108,122,+55,55,95,99,111,109,112,114,101,115,115,111,224,82,8,224,34,0,1,100,+101,224,36,21,2,114,108,101,224,70,22,64,33,224,69,23,2,98,119,116,+224,69,22,64,33,224,69,19,64,235,4,95,117,105,110,116,227,162,8,65,+29,224,25,14,192,51,1,49,54,224,52,16,224,26,10,192,53,0,51,227,+208,8,224,53,0,224,26,10,192,53,1,54,52,224,53,16,224,26,10,64,+53,224,212,16,224,211,16,224,210,17,224,209,17,224,208,17,224,207,17,224,+206,17,224,205,17,3,117,115,104,111,227,92,9,129,3,224,26,13,64,53,+224,52,17,224,51,17,65,82,225,107,16,224,207,15,224,205,15,224,97,13,+1,108,111,228,143,9,128,98,224,25,12,64,51,224,50,16,224,49,16,1,+117,108,224,102,18,224,103,17,224,104,17,224,51,16,1,102,108,224,255,13,+224,23,10,5,115,105,122,101,111,102,225,25,11,160,25,224,100,11,192,26,+224,27,11,70,163,1,100,105,227,215,8,103,13,224,23,10,3,114,101,97,+100,224,46,11,2,95,100,95,229,124,11,1,99,104,224,44,10,126,241,224,+20,7,4,103,101,116,99,119,229,50,8,6,103,101,116,95,98,117,102,224,+180,11,3,98,95,114,100,224,27,17,1,119,114,224,27,11,6,110,101,119,+95,109,112,122,224,144,8,4,112,122,95,97,98,231,83,8,96,22,0,100,+224,147,8,96,22,0,110,224,22,12,1,99,109,232,26,8,64,22,64,197,+224,47,12,64,24,1,115,105,224,25,15,0,117,224,25,12,82,2,1,95,+115,224,56,16,224,30,0,224,61,14,229,194,9,64,22,2,109,117,108,224,+22,14,1,95,50,232,239,10,64,27,1,110,101,232,18,9,8,112,122,95,+112,111,112,99,111,117,226,158,9,64,27,1,115,117,231,135,8,64,22,5,+116,100,105,118,95,113,224,104,16,128,30,224,182,12,4,116,115,116,98,105,+224,106,12,0,120,224,231,9,5,119,97,110,116,95,103,129,161,240,39,3,+224,0,92,75,60,147,143,145,18,81,111,75,107,124,84,0,49,93,252,2,+95,49,49,124,104,0,50,204,236,240,107,1,3,95,49,49,50,91,175,96,+32,0,54,92,180,1,48,55,85,105,240,140,1,64,94,147,213,2,95,52,+55,237,44,0,2,48,55,53,143,197,224,5,5,160,24,1,95,49,89,144,+85,75,122,202,128,6,224,45,25,224,52,3,224,45,18,224,84,3,160,52,+224,45,25,224,98,4,1,53,56,224,232,1,0,53,81,136,128,11,64,234,+0,54,96,234,3,115,99,109,112,76,242,64,66,122,164,0,90,114,252,0,+90,176,244,142,193,86,240,1,50,48,87,90,175,200,128,80,96,5,96,75,+141,75,224,56,9,81,90,78,185,237,188,8,0,123,116,31,148,32,0,83,+246,214,5,224,36,1,64,34,4,44,32,109,104,115,68,65,1,114,95,96,+44,212,77,224,37,1,1,125,44,96,24,96,0,110,65,224,105,11,224,104,+31,224,99,24,193,7,224,210,15,224,104,64,225,101,4,65,99,142,160,156,+69,146,180,129,89,0,90,117,149,225,117,1,247,31,0,207,110,149,230,96,+8,151,55,2,50,48,53,81,85,224,154,5,225,98,1,114,48,113,49,81,+43,155,6,152,131,96,172,64,121,0,83,96,29,116,239,125,125,224,17,5,+67,146,64,46,239,202,8,2,49,49,49,64,12,224,116,1,207,191,16,38,+32,109,117,115,116,32,98,101,32,80,116,114,47,70,117,110,172,41,79,84,+240,175,12,2,40,72,115,128,37,0,41,193,47,224,40,4,177,10,64,5,+96,180,241,166,7,64,165,153,190,211,151,193,20,193,222,159,225,65,0,160,+43,129,7,226,211,1,147,89,227,133,0,129,130,97,107,179,232,64,31,96,+68,64,87,97,34,243,142,0,82,78,2,50,48,55,99,161,128,100,182,106,+126,149,226,53,8,0,59,98,49,64,15,7,95,85,110,105,116,40,115,44,+144,233,249,244,12,4,79,32,35,52,49,224,234,2,115,20,226,141,3,64,+32,222,68,224,65,0,65,0,1,54,51,224,115,2,192,98,2,32,95,52,+65,185,2,50,48,55,101,104,7,52,52,57,32,95,52,53,54,225,15,0,+224,110,6,0,95,153,66,89,187,131,35,129,60,191,72,65,141,1,53,49,+181,102,228,68,3,66,223,241,115,1,224,254,6,64,252,1,116,111,162,155,+161,173,128,246,2,50,48,54,68,243,224,49,8,225,33,35,64,122,145,175,+67,90,129,222,118,13,229,162,2,0,85,97,156,66,93,1,54,53,82,173,+64,120,128,197,64,61,145,222,124,106,224,130,2,98,152,0,58,128,40,166,+177,0,54,64,104,1,95,56,65,61,64,24,134,202,227,58,5,65,12,184,+101,64,34,166,142,224,90,5,12,80,114,105,109,105,116,105,118,101,115,46,+73,79,192,101,0,54,161,61,0,85,98,149,224,199,3,97,183,180,246,192,+31,244,161,0,224,241,10,181,32,64,29,0,85,226,205,1,230,109,0,225,+6,3,160,43,245,108,1,128,139,134,74,147,33,225,203,10,98,200,163,182,+96,93,68,151,225,209,5,229,200,11,225,212,0,226,3,5,253,200,3,224,+51,8,226,197,1,96,44,227,27,7,64,172,134,186,68,240,155,125,101,53,+163,170,2,67,32,60,161,64,131,223,248,44,3,96,21,161,79,0,90,64,+4,0,85,164,4,224,36,3,165,59,86,129,192,89,226,74,10,96,37,229,+214,1,224,30,7,96,105,224,211,1,229,29,3,226,20,2,192,18,128,0,+224,115,2,100,173,1,95,53,67,184,169,18,130,135,1,50,48,156,229,184,+185,253,71,12,165,176,225,87,8,17,78,111,116,32,97,32,118,97,108,105,+100,32,67,32,116,121,112,101,221,67,2,49,51,57,99,25,65,90,134,177,+164,116,229,200,14,226,204,2,4,70,108,111,97,116,117,5,246,163,13,224,+31,2,0,64,224,79,27,0,73,139,64,224,76,13,192,28,224,73,28,210,+136,224,74,13,224,29,0,224,75,17,3,68,97,116,97,96,69,96,4,112,+248,224,75,17,128,30,224,76,17,132,90,224,63,13,70,31,224,62,22,0,+83,116,11,8,46,73,79,46,72,97,110,100,108,151,245,225,1,13,194,83,+231,55,3,0,53,67,25,0,80,168,62,225,167,13,135,212,8,46,67,46,+84,121,112,101,115,46,128,67,66,102,236,73,3,3,67,67,104,97,236,94,+8,1,67,83,224,21,12,0,85,224,43,13,241,61,11,1,67,85,224,22,+13,161,239,224,42,5,224,20,11,0,76,239,223,10,1,67,85,224,21,12,+5,80,116,114,100,105,102,239,32,8,3,67,83,105,122,239,196,8,1,67,+83,224,21,12,0,76,224,110,14,224,22,12,1,84,105,144,28,225,142,0,+224,0,1,67,110,135,64,230,44,17,228,56,1,64,45,134,243,224,45,17,+224,42,2,134,224,229,146,10,3,118,111,105,100,234,205,1,232,106,9,224,+41,1,8,40,105,110,116,32,115,41,32,123,229,144,5,224,32,1,0,59,+158,194,128,202,73,49,103,26,169,82,3,95,50,48,51,94,85,1,50,48,+72,185,136,86,64,9,64,102,5,48,53,32,35,49,50,165,43,0,53,105,+212,64,65,174,39,2,50,48,53,103,88,167,115,64,31,3,10,65,32,94,+246,69,10,77,4,64,37,192,233,0,50,101,127,96,10,0,48,94,197,128,+126,101,139,64,231,69,46,160,23,198,144,64,18,0,56,67,19,219,43,2,+95,50,50,69,116,173,228,5,95,54,32,64,95,51,110,180,1,48,52,135,+62,0,52,109,64,134,111,224,58,1,64,31,136,214,128,232,67,97,1,48,+52,106,156,0,49,172,122,224,26,4,90,228,3,95,49,57,51,69,186,64,+9,2,56,49,32,169,156,224,153,2,224,156,5,97,43,138,107,167,76,192,+203,1,95,57,128,160,136,222,224,30,15,187,87,188,199,225,9,2,160,152,+0,53,64,12,123,15,224,65,0,224,222,1,95,31,231,196,0,224,245,3,+0,53,102,120,0,49,224,165,1,224,0,1,65,156,136,86,0,94,154,99,+97,174,135,187,124,106,65,173,64,18,134,115,84,17,1,67,65,153,115,2,+76,101,110,96,44,131,30,0,94,179,13,96,18,163,3,6,56,56,32,75,+32,95,57,64,211,192,7,1,95,57,112,33,96,231,2,95,57,52,224,11,+2,111,68,128,11,1,49,48,64,170,128,12,65,5,0,52,162,145,0,50,+65,232,65,169,2,66,32,95,79,153,136,210,200,181,0,48,66,74,96,30,+1,95,51,71,142,64,136,170,66,224,136,17,97,143,160,136,160,11,96,136,+128,11,160,136,96,12,224,136,1,2,50,48,52,67,52,224,137,3,158,96,+160,137,1,50,48,93,89,192,138,64,5,0,58,128,67,65,38,85,59,1,+80,116,99,21,64,37,96,18,153,216,96,18,131,71,174,81,108,229,105,129,+227,6,9,141,35,2,95,49,48,98,49,64,58,0,54,163,99,64,51,0,+52,126,155,112,190,204,7,64,71,67,251,128,163,66,208,0,51,96,214,96,+87,66,32,192,189,65,101,98,74,64,217,128,58,130,15,0,94,156,73,96,+167,130,14,0,94,91,58,96,15,162,4,244,223,3,96,23,130,9,65,37,+64,82,237,41,0,228,159,1,30,115,116,97,116,105,99,32,117,110,115,105,+103,110,101,100,32,99,104,97,114,32,100,97,116,97,91,93,32,61,32,123,+229,150,0,64,165,197,2,146,161,0,48,129,96,6,50,48,51,57,32,35,+50,170,17,224,90,3,1,125,59,100,249,224,20,5,224,104,5,10,42,99,+111,109,98,101,120,112,114,32,61,96,116,128,49,159,142,229,107,8,69,106,+192,47,5,108,101,110,32,61,32,192,45,229,156,1,235,52,1,141,177,2,+79,32,35,69,116,134,89,198,95,65,24,197,251,0,89,64,55,74,190,0,+85,64,56,98,70,96,16,95,13,224,7,1,229,8,1,69,151,206,6,107,+90,238,2,1,0,52,65,239,160,95,65,219,109,29,1,49,51,240,97,1,+224,160,6,133,38,75,187,0,52,160,161,64,56,130,148,64,97,1,75,52,+160,2,0,90,64,4,224,186,0,70,49,102,225,1,57,54,65,226,0,51,+130,119,66,110,0,52,84,40,0,50,66,85,64,23,210,248,1,75,51,128,+62,64,19,130,72,64,245,2,66,32,80,96,196,205,52,133,74,0,67,105,+2,225,1,11,225,9,0,161,2,96,0,64,18,140,158,1,55,48,70,5,+0,54,100,17,64,104,209,212,0,75,132,190,0,51,130,159,96,15,96,208,+224,1,5,224,222,0,224,227,0,206,185,0,75,224,43,8,224,53,15,192,+57,129,216,76,111,0,80,97,121,226,246,1,2,64,95,54,98,19,135,91,+64,146,227,116,0,64,188,1,50,48,97,58,198,209,128,14,163,47,0,35,+77,78,194,62,0,75,76,76,101,235,237,93,1,0,83,237,93,8,97,35,+237,29,0,224,25,3,96,58,109,49,237,141,4,64,154,0,85,128,140,160,+161,231,111,0,224,195,3,1,50,48,140,236,224,196,2,64,0,115,39,237,+162,3,96,101,115,85,224,62,27,2,85,32,83,128,144,2,95,49,51,86,+71,97,39,65,45,110,15,99,243,97,14,2,50,48,48,174,32,160,17,5,+66,32,95,57,56,52,64,4,0,53,64,4,0,54,227,175,2,192,9,168,+255,96,41,0,53,164,64,0,50,161,98,131,112,96,0,225,69,12,193,2,+224,219,5,96,21,66,28,161,135,224,34,10,96,165,224,34,4,225,74,9,+1,56,57,136,174,225,10,2,0,58,128,213,195,186,64,162,0,55,98,193,+64,169,111,79,110,232,1,53,55,78,121,101,164,2,51,50,56,73,168,105,+160,65,212,96,31,72,192,97,67,0,35,134,102,0,64,224,23,8,2,54,+53,53,67,185,98,66,224,24,4,78,154,1,49,49,137,247,1,49,50,229,+57,3,2,116,102,56,76,47,5,58,32,98,97,100,32,204,57,226,73,3,+0,83,197,55,64,147,96,237,1,55,57,137,60,164,177,1,35,50,106,103,+163,224,229,102,0,224,46,11,68,212,1,35,49,193,159,224,44,35,224,41,+32,131,79,98,115,72,0,1,49,57,65,15,160,168,145,128,224,27,20,224,+26,4,160,20,97,13,225,8,28,0,50,128,47,224,216,81,224,187,47,224,+184,22,0,49,98,179,224,139,39,224,111,12,203,167,0,67,64,74,64,39,+66,230,134,92,70,29,100,65,0,85,130,252,0,54,200,70,131,43,64,63,+132,43,101,85,1,49,51,98,247,71,30,0,50,70,118,209,234,134,139,128,+46,224,28,15,96,206,224,28,3,67,9,131,90,131,147,109,82,0,56,224,+19,0,64,59,97,44,224,181,0,99,207,64,150,96,74,224,150,0,231,108,+15,247,47,3,64,14,231,123,2,69,25,128,230,201,231,2,95,50,54,71,+83,232,134,4,17,87,101,108,99,111,109,101,32,116,111,32,105,110,116,101,+114,97,99,78,88,17,32,77,105,99,114,111,72,115,44,32,118,101,114,115,+105,111,110,32,67,157,2,95,50,54,74,218,183,147,64,147,224,89,1,0,+51,75,0,129,63,74,174,64,105,224,100,1,8,85,115,105,110,103,32,71,+77,80,229,60,0,237,152,3,1,95,55,70,45,153,26,236,163,6,1,54,+51,107,63,64,88,198,126,2,95,55,49,107,107,71,162,101,193,96,141,0,+75,65,31,128,58,179,41,4,67,32,95,54,56,132,243,64,160,0,49,103,+204,187,112,129,31,136,62,6,95,54,56,52,32,75,32,70,171,128,1,136,+6,192,13,224,1,17,0,67,161,118,224,0,2,224,50,41,224,47,38,224,+44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,26,17,+224,23,14,224,20,11,224,17,8,65,254,232,22,0,224,0,1,65,254,137,+212,224,92,5,224,1,13,225,233,10,226,31,255,224,37,23,226,31,151,224,+14,5,224,11,2,192,8,108,64,224,0,5,66,60,179,197,68,255,0,54,+76,240,2,95,49,57,82,181,68,190,128,15,0,54,69,168,68,208,224,34,+0,69,47,0,54,89,117,109,120,0,57,73,200,1,95,55,100,155,0,55,+119,190,0,64,224,77,2,64,39,229,67,6,85,165,7,32,39,58,113,117,+105,116,39,69,173,64,8,13,44,32,39,58,104,101,108,112,39,32,102,111,+114,32,64,9,133,96,224,73,2,101,152,0,54,79,97,64,115,64,162,224,+91,10,31,87,65,82,78,73,78,71,58,32,67,111,109,112,105,108,101,100,+32,119,105,116,104,32,71,72,67,44,32,115,111,32,108,84,110,15,101,100,+32,102,117,110,99,116,105,111,110,97,108,105,116,121,182,48,99,97,169,134,+65,24,177,172,225,7,1,1,55,54,140,3,1,57,55,75,113,160,234,146,+171,224,33,2,1,49,57,156,146,230,5,1,129,51,97,135,129,54,165,255,+160,33,0,49,75,157,192,30,229,252,1,104,8,0,57,113,147,224,222,1,+4,46,109,104,115,105,96,174,224,19,1,1,62,32,128,191,87,126,96,192,+111,51,160,203,203,127,66,2,231,223,2,0,35,84,175,135,148,225,213,1,+70,130,81,25,193,6,224,190,4,2,95,50,48,93,72,0,80,128,194,225,+117,6,1,66,121,151,213,225,66,3,161,69,237,246,1,1,95,53,77,56,+96,223,162,104,134,193,105,234,96,179,226,53,20,11,85,110,114,101,99,111,+103,110,105,122,101,100,80,110,2,109,97,110,185,5,224,82,9,194,244,79,+64,96,10,71,9,142,82,109,246,117,232,64,25,5,85,32,64,95,53,56,+148,123,78,186,226,230,13,126,172,181,254,232,114,4,8,65,109,98,105,103,+117,111,117,115,192,144,186,149,113,215,141,150,0,53,73,33,205,77,224,169,+11,64,0,64,118,0,53,67,70,64,8,99,77,72,45,137,137,160,62,65,+127,96,70,0,58,129,136,1,10,65,250,227,17,67,80,96,135,1,95,56,+130,79,160,114,142,184,249,169,17,2,99,108,101,172,188,64,56,228,17,3,+74,164,0,56,232,171,0,227,223,4,1,56,50,142,203,72,161,1,55,49,+232,160,1,200,181,1,49,57,85,9,200,181,168,229,1,95,54,81,45,225,+16,14,224,159,16,4,114,101,108,111,97,187,24,0,56,227,119,7,100,128,+227,142,9,163,166,227,141,19,2,95,55,48,208,96,225,251,5,1,56,50,+106,249,224,218,8,225,0,4,165,46,225,217,14,224,203,16,4,100,101,108,+101,116,131,53,224,120,8,97,111,96,129,180,31,194,23,66,87,66,38,128,+26,0,50,97,207,226,43,3,66,45,157,221,224,144,11,224,139,16,2,116,+121,112,224,137,11,66,114,158,241,224,73,32,1,107,105,163,148,224,73,9,+66,214,224,73,34,230,2,0,0,75,228,23,12,64,81,226,65,16,204,70,+99,43,144,31,224,88,1,0,67,131,169,5,115,58,92,49,48,38,102,132,+0,32,96,0,96,9,172,44,96,26,130,109,64,26,160,9,5,109,111,100,+117,108,101,128,28,99,42,96,55,128,9,9,97,108,108,32,100,101,102,105,+110,105,70,86,128,35,129,226,3,32,100,32,32,192,9,224,32,0,4,40,+115,41,32,100,96,36,65,123,1,32,101,64,72,3,115,104,111,119,126,218,+4,32,111,102,32,101,96,28,65,78,0,32,96,159,224,28,4,0,116,96,+28,65,33,128,186,7,116,104,105,115,32,116,101,120,96,23,117,181,128,0,+8,101,118,97,108,117,97,116,101,32,64,19,1,101,115,76,253,64,33,3,+100,101,102,110,160,33,11,97,100,100,32,116,111,112,32,108,101,118,101,224,+192,3,64,38,0,34,110,98,65,101,141,123,227,87,7,236,201,0,227,87,+9,1,49,57,121,90,134,116,77,244,197,58,1,79,32,115,79,97,160,65,+194,131,77,0,80,227,139,0,64,57,66,239,0,75,227,198,13,229,144,12,+1,57,57,99,165,2,50,48,49,119,214,0,50,130,28,235,42,3,64,198,+0,54,235,35,0,2,95,50,56,218,137,214,101,2,80,32,79,146,143,130,+57,230,60,6,198,64,224,13,1,0,85,224,13,2,96,25,241,231,0,103,+108,0,64,88,162,102,106,135,114,0,54,123,218,193,15,245,165,0,128,18,+64,172,64,230,1,50,48,100,133,96,172,246,34,0,0,50,86,37,128,19,+214,34,230,130,6,98,19,198,116,64,26,192,252,224,41,8,247,151,0,161,+147,225,139,3,128,98,140,71,224,49,1,73,168,0,95,102,74,64,29,138,+40,226,8,75,2,49,57,57,143,136,226,8,63,92,160,98,8,1,49,57,+113,89,192,0,64,198,217,121,226,8,46,225,250,64,97,249,0,48,112,97,+225,249,2,233,46,2,0,54,114,57,158,105,117,43,0,73,97,135,64,43,+248,63,0,64,28,64,19,132,228,3,80,32,95,56,86,6,128,5,64,23,+184,146,226,8,5,132,199,98,12,130,49,0,55,112,238,224,36,5,0,40,+224,37,13,224,32,1,5,41,32,119,104,101,114,100,167,12,105,109,112,111,+114,116,32,80,114,101,108,117,100,224,17,3,18,83,121,115,116,101,109,46,+73,79,46,80,114,105,110,116,79,114,82,117,196,129,25,97,117,108,116,32,+78,117,109,32,40,73,110,116,101,103,101,114,44,32,68,111,117,98,108,101,+41,224,32,3,1,73,115,157,83,1,32,40,128,7,224,28,4,0,83,69,+19,2,40,40,41,96,20,98,218,129,12,0,54,226,168,20,161,172,1,32,+83,98,29,3,49,32,95,57,134,154,0,57,242,241,0,234,243,1,130,190,+66,22,226,151,7,1,64,90,130,222,71,168,0,95,247,44,1,98,19,124,+58,74,96,160,96,0,49,97,247,64,12,203,251,227,40,50,135,230,224,144,+9,66,69,96,78,0,64,72,26,224,26,0,130,112,224,86,2,227,253,16,+64,163,97,54,224,157,4,227,104,2,1,55,50,66,143,104,115,3,83,32,+95,50,92,218,103,124,223,59,192,42,0,80,96,205,170,204,243,25,1,224,+61,1,224,32,0,242,234,9,164,198,0,54,136,227,1,50,48,94,187,0,+80,64,122,179,237,226,170,2,91,159,163,168,65,23,225,131,0,64,202,223,+167,237,103,1,64,79,1,83,32,64,101,65,110,0,89,160,7,64,107,0,+53,94,91,193,150,224,24,1,155,133,192,13,164,4,64,13,0,39,132,41,+205,188,163,210,128,18,64,54,227,218,0,241,172,5,148,40,0,54,94,150,+64,30,69,77,229,203,9,19,114,97,110,115,108,97,116,101,58,32,110,111,+116,32,102,111,117,110,100,32,138,238,155,33,139,85,0,54,128,89,64,232,+209,249,0,89,206,77,0,83,130,97,98,225,192,212,186,206,141,1,0,80,+111,181,174,19,129,105,129,124,100,75,196,225,131,36,64,76,64,17,249,249,+4,128,239,224,32,18,133,202,165,22,224,32,11,130,194,161,66,250,27,3,+192,24,0,85,64,155,99,72,128,165,250,200,15,5,100,121,110,115,121,109,+163,249,218,198,1,95,49,86,150,193,118,224,99,8,96,157,0,85,225,140,+31,65,136,6,32,112,114,105,109,111,112,161,136,150,187,1,50,53,66,57,+170,110,78,218,0,52,85,221,155,193,1,50,48,64,87,128,0,224,228,10,+194,47,0,85,160,223,251,186,0,226,132,0,65,185,225,52,8,128,34,128,+79,98,204,224,28,3,98,16,224,105,8,96,21,95,62,97,228,224,116,5,+1,49,50,192,164,224,32,3,225,13,24,69,215,5,115,115,105,98,108,101,+174,233,129,15,0,57,173,22,98,147,178,80,125,45,76,188,143,4,0,54,+193,158,112,226,70,213,216,230,96,52,135,149,236,13,6,93,223,199,139,67,+127,224,30,9,81,137,96,30,0,79,224,30,13,0,53,160,30,64,4,236,+106,16,1,67,39,204,178,224,67,11,88,35,96,67,65,150,224,30,10,192,+98,89,220,224,98,16,0,83,128,98,99,134,224,67,9,67,219,96,67,68,+61,224,197,10,0,51,160,30,67,167,224,61,10,192,30,67,108,224,30,10,+192,160,67,215,224,30,10,193,65,68,250,224,191,16,0,66,128,191,68,252,+224,67,10,82,164,96,67,73,16,224,98,10,0,50,160,30,0,82,224,98,+19,1,75,50,96,98,100,134,224,36,17,0,51,128,36,66,110,224,36,17,+0,52,128,36,70,191,225,244,18,0,66,161,245,226,89,13,0,52,193,85,+0,43,224,30,13,193,85,0,45,224,30,13,192,242,0,42,224,131,19,2,+113,117,111,145,167,64,8,224,40,19,1,114,101,132,229,2,114,101,109,224,+38,19,0,117,224,80,0,96,9,224,42,20,192,82,64,8,224,40,19,2,+110,101,103,96,39,2,110,101,103,224,38,19,211,140,2,97,110,100,224,38,+19,0,111,146,94,1,111,114,224,36,19,0,120,160,37,0,120,224,38,21,+2,105,110,118,96,38,2,105,110,118,224,38,19,2,115,104,108,96,38,2,+115,104,108,224,38,21,128,116,1,115,104,224,116,20,0,97,192,39,64,8,+224,79,20,2,117,98,116,92,130,128,84,160,12,224,48,19,6,112,111,112,+99,111,117,110,128,48,192,12,224,48,19,2,99,108,122,96,43,2,99,108,+122,224,38,20,0,116,160,38,0,116,224,38,20,1,61,61,96,37,70,56,+224,36,17,0,47,128,36,0,47,224,36,10,69,10,196,6,0,60,224,67,+19,0,60,128,67,0,60,224,67,14,195,56,0,62,224,67,19,0,62,128,+67,0,62,224,172,20,1,117,60,96,36,0,117,224,141,20,0,117,160,142,+0,117,224,143,11,224,38,2,0,62,128,37,224,149,20,0,117,160,150,0,+117,224,151,21,1,111,114,131,42,1,111,114,227,42,20,0,99,162,104,0,+99,226,103,21,1,102,43,96,37,0,102,228,166,10,224,36,2,0,45,128,+36,228,172,10,224,36,2,0,42,128,36,228,178,20,1,102,47,128,36,0,+47,224,36,20,162,76,0,102,226,77,21,0,102,162,78,0,102,226,79,11,+224,38,2,129,199,0,102,225,199,20,0,102,161,199,0,102,225,199,21,0,+102,129,199,0,102,225,199,20,0,102,161,199,0,102,225,199,21,0,102,197,+26,64,8,224,40,20,83,188,128,41,115,198,224,42,19,1,114,101,182,224,+96,9,224,42,19,3,105,116,111,102,96,41,64,8,224,40,19,2,115,101,+113,96,39,2,115,101,113,224,38,22,1,117,97,165,42,96,10,224,44,19,+224,43,1,224,42,24,2,115,99,109,149,200,64,8,224,208,20,192,40,64,+8,224,40,19,0,117,192,40,64,8,224,40,19,1,114,110,129,33,1,114,+110,225,32,20,3,73,79,46,62,161,242,128,10,224,44,24,224,43,1,224,+42,22,5,114,101,116,117,114,110,192,46,128,13,224,50,22,0,112,81,41,+192,49,96,12,224,48,22,7,115,101,114,105,97,108,105,122,151,194,224,16,+3,224,56,22,1,100,101,224,58,8,224,18,2,224,117,23,2,116,100,105,+224,216,0,96,12,224,48,25,1,111,117,224,216,0,128,13,224,50,25,1,+101,114,133,5,224,13,0,224,50,22,7,103,101,116,65,114,103,82,101,129,+248,224,16,3,225,118,23,7,101,114,102,111,114,109,73,79,225,122,0,192,+16,224,113,23,0,99,224,106,0,0,99,224,42,19,3,114,97,105,115,129,+103,96,9,224,42,19,4,99,97,116,99,104,96,42,96,9,224,42,19,239,+2,2,128,10,224,44,19,4,110,101,119,67,65,147,72,1,76,101,129,188,+224,18,5,224,60,19,3,112,101,101,107,192,42,96,58,224,16,3,224,56,+31,192,118,224,19,6,224,62,19,2,116,111,73,163,15,96,9,224,42,21,+1,80,116,130,46,96,9,224,42,21,1,68,98,132,192,96,9,224,42,21,+2,70,117,110,224,88,1,128,12,224,48,19,5,65,46,97,108,108,111,130,+22,160,11,224,46,21,3,99,111,112,121,160,45,64,10,224,44,21,0,115,+195,174,128,10,224,44,21,230,78,0,128,10,224,44,21,2,119,114,105,188,+145,160,11,224,46,21,167,228,64,8,224,40,19,2,98,115,43,136,162,64,+8,224,40,23,0,46,224,41,0,0,46,224,42,23,224,84,1,224,85,22,+160,167,64,8,224,40,21,168,142,64,8,224,40,21,136,144,1,98,115,232,+145,20,1,98,115,168,146,64,8,224,40,21,134,79,1,98,115,230,77,20,+1,98,115,166,163,64,8,224,40,21,199,31,96,9,224,42,21,3,112,97,+99,107,160,43,64,10,224,44,21,1,117,110,224,46,2,128,12,224,48,21,+4,108,101,110,103,116,132,201,192,12,224,48,21,3,115,117,98,115,163,105,+192,12,224,48,19,192,9,96,48,224,22,0,224,48,18,1,116,111,224,46,+0,128,10,224,44,19,3,104,101,97,100,224,46,0,192,12,224,93,20,2,+97,105,108,224,95,1,160,12,224,191,20,0,112,171,189,0,112,235,190,21,+1,112,50,129,208,64,8,224,40,21,1,110,101,170,105,64,9,224,42,21,+0,102,167,191,96,9,123,106,148,3,224,0,106,84,1,186,249,87,83,88,+159,87,211,0,55,183,234,183,223,244,146,6,1,32,61,85,153,0,110,154,+85,116,141,224,44,0,0,54,110,75,248,223,3,153,57,252,221,4,2,95,+105,116,103,237,64,27,155,63,221,65,188,53,253,65,37,64,70,155,110,224,+98,4,160,96,0,54,149,20,6,51,55,56,32,95,51,57,96,223,0,56,+118,73,0,56,85,34,64,237,1,51,53,128,41,217,134,1,95,54,83,55,+88,181,3,95,54,56,51,96,148,0,51,64,54,149,106,149,197,186,210,64,+54,152,242,9,95,54,56,52,32,75,32,85,32,75,184,182,64,197,89,2,+90,254,248,144,0,64,47,152,57,224,144,4,0,57,89,157,224,137,2,149,+200,216,67,83,38,217,12,182,109,64,45,0,55,253,45,0,0,75,128,53,+221,95,153,50,153,21,224,59,1,125,50,128,10,64,218,86,124,0,52,67,+34,118,216,0,80,120,197,0,79,96,174,193,96,0,51,208,16,96,4,4,+90,32,90,32,83,184,231,1,85,32,96,14,0,67,64,48,161,230,3,95,+49,57,56,119,158,152,73,128,0,192,109,1,95,53,92,5,2,50,51,57,+160,32,1,35,51,246,245,1,160,33,2,49,57,56,152,58,160,232,0,39,+89,200,154,253,0,53,67,67,128,88,87,36,65,208,3,95,52,53,51,120,+72,0,50,65,49,1,95,53,85,198,64,185,224,41,1,122,161,192,0,249,+140,0,187,137,160,100,183,30,0,55,247,224,1,128,138,163,4,85,159,96,+59,224,17,6,66,64,92,233,160,0,65,121,131,65,65,251,0,90,64,202,+0,55,96,202,0,58,128,48,3,10,65,32,89,250,213,0,154,29,124,166,+130,31,254,153,1,64,46,195,12,255,19,0,161,163,250,228,0,225,181,0,+149,62,97,40,0,83,94,246,248,194,6,64,181,1,57,49,65,111,1,52,+51,252,234,0,64,78,0,54,96,13,226,89,3,224,54,1,97,63,66,231,+157,129,87,95,96,237,192,130,96,113,251,121,1,162,94,255,91,2,64,194,+131,136,121,37,154,66,220,135,4,67,32,95,51,49,65,173,0,51,93,245,+225,233,4,192,34,64,160,188,149,160,117,252,200,4,0,51,87,142,155,205,+157,3,65,246,253,8,2,1,95,53,83,7,128,0,193,48,3,66,32,95,+56,192,32,2,95,55,51,219,33,224,121,7,163,84,0,67,162,39,97,236,+0,53,99,19,0,80,89,70,98,115,161,7,65,198,98,244,153,211,161,70,+224,105,5,96,97,1,95,55,90,149,1,95,53,100,102,224,167,3,193,42,+0,54,161,42,162,141,192,61,7,95,51,54,51,32,95,50,53,195,73,224,+32,0,160,172,64,155,164,80,64,10,65,172,64,77,196,189,157,99,188,137,+224,2,0,128,47,191,129,156,32,224,24,3,224,25,11,156,67,96,0,224,+71,0,224,29,3,224,61,2,224,33,2,224,42,3,224,69,6,224,37,11,+224,2,4,224,40,1,224,113,17,224,23,0,224,44,2,99,86,224,2,23,+224,48,4,225,31,8,128,34,224,17,6,224,49,41,96,17,224,53,3,225,+189,0,224,1,9,224,94,5,225,27,23,224,2,3,224,56,5,224,57,4,+225,9,24,225,6,5,225,249,16,224,61,15,224,125,9,224,65,42,224,68,+11,225,40,2,224,55,12,224,2,7,224,64,9,224,134,6,101,19,224,86,+3,224,145,22,224,86,15,225,184,9,224,1,7,0,83,230,121,3,0,35,+101,96,224,0,7,224,195,13,224,2,17,225,103,12,224,138,40,232,118,0,+224,0,3,224,108,13,224,2,21,224,138,57,231,141,2,224,0,1,225,177,+3,192,108,161,182,224,96,6,224,177,19,224,89,8,224,143,13,224,1,1,+224,153,5,135,253,224,0,5,226,209,12,224,2,19,224,131,54,199,64,224,+0,3,224,116,25,192,2,227,82,15,224,131,37,136,85,224,65,33,224,114,+11,224,47,19,225,119,8,0,50,135,140,224,0,4,224,223,19,224,2,9,+224,126,52,231,138,0,224,63,15,224,115,28,224,106,13,128,1,224,112,6,+232,155,0,224,0,0,224,97,13,192,2,226,228,19,224,118,34,228,143,9,+224,115,31,224,118,52,227,240,9,227,75,14,195,240,224,92,8,224,41,7,+224,80,5,224,130,11,128,1,229,3,6,227,223,8,227,220,11,228,117,28,+224,129,5,224,124,13,225,7,8,224,126,7,230,156,1,96,44,225,19,7,+225,13,16,227,228,9,224,122,9,224,124,7,237,139,3,232,38,8,231,31,+7,136,183,224,14,15,224,154,1,224,110,3,192,142,224,19,3,225,126,6,+227,228,1,224,73,3,64,38,141,6,1,95,49,76,160,8,67,32,95,50,+55,52,32,95,53,109,182,110,122,64,19,1,52,54,224,18,0,228,46,4,+224,127,1,64,65,235,118,1,64,0,193,70,128,106,143,225,75,28,110,32,+236,170,0,224,69,3,235,90,12,234,83,8,224,253,7,0,67,77,189,1,+53,50,238,244,0,0,35,79,127,224,88,27,160,152,224,83,0,192,43,231,+48,6,192,169,192,46,64,14,224,40,12,163,105,224,37,0,224,34,10,129,+58,208,143,224,25,3,229,245,5,0,73,192,13,173,189,64,5,233,77,2,+96,126,142,185,224,220,3,97,116,64,16,1,64,80,225,59,1,226,228,8,+130,62,160,236,98,93,224,248,1,224,25,2,77,84,172,217,161,1,225,208,+3,224,74,10,226,203,11,65,10,192,139,224,18,2,226,44,5,3,95,50,+50,57,226,56,2,226,55,17,240,1,0,110,7,224,85,5,177,87,224,16,+20,77,143,224,16,4,143,138,2,55,51,32,242,175,1,31,92,51,52,38,+109,104,115,47,83,121,115,116,101,109,47,67,111,110,115,111,108,101,47,83,+105,109,112,108,101,82,101,97,7,100,108,105,110,101,46,104,115,64,39,5,+44,49,54,50,58,53,115,15,224,140,5,163,89,225,121,1,224,237,17,224,+142,5,238,125,18,224,41,9,226,210,10,225,231,0,228,93,0,64,5,225,+148,8,227,49,8,192,62,130,185,192,65,128,8,130,208,66,74,227,224,5,+226,154,1,224,2,0,239,227,11,224,120,3,224,67,4,79,152,64,35,68,+94,79,209,132,108,224,135,1,162,3,96,128,160,5,64,136,224,132,3,243,+98,2,6,32,95,55,57,32,95,55,103,100,112,143,160,71,64,53,177,224,+114,114,243,43,3,224,42,3,64,41,64,230,226,100,12,224,0,1,224,199,+0,145,83,224,238,10,161,98,97,64,224,171,2,97,177,128,36,99,90,224,+163,3,196,48,162,232,242,89,0,160,54,0,67,224,243,4,128,43,128,5,+224,48,5,224,55,1,100,62,164,67,224,6,3,225,133,10,241,139,2,192,+87,129,251,193,111,227,127,18,224,168,2,128,44,225,162,9,224,235,5,224,+181,11,224,174,5,224,127,0,166,230,160,175,162,143,224,147,1,128,107,134,+179,2,95,50,56,96,201,128,6,225,130,1,231,42,0,128,15,245,119,5,+225,3,12,226,170,2,227,135,1,3,49,57,56,51,149,132,224,234,1,228,+197,10,98,137,64,252,226,135,0,96,246,236,214,0,229,72,2,1,64,64,+84,62,148,1,225,58,1,224,241,2,161,75,227,81,5,1,85,32,237,34,+1,227,31,8,226,63,3,231,97,6,224,95,12,225,12,2,226,204,9,224,+105,2,224,32,2,227,223,15,225,51,31,97,195,243,161,9,211,189,225,55,+15,224,220,8,224,22,2,225,196,4,96,115,228,151,1,224,171,9,226,139,+5,228,126,8,162,140,164,50,161,128,70,188,244,140,0,133,14,226,136,0,+128,27,225,105,0,163,104,224,63,3,128,240,71,72,224,67,15,0,67,135,+30,224,70,9,226,2,0,228,239,5,226,185,14,227,188,8,195,99,131,169,+164,239,228,184,19,161,193,224,13,2,96,182,131,102,225,154,5,228,187,2,+87,187,1,54,49,225,68,1,251,103,12,6,92,56,38,32,92,56,38,199,+39,153,183,182,213,247,230,0,164,82,128,134,0,82,224,10,1,224,177,10,+193,232,227,6,7,228,167,0,226,253,3,192,20,96,199,226,159,6,174,9,+224,26,5,231,118,4,98,99,64,163,225,131,0,132,137,65,180,137,220,134,+84,248,17,3,64,23,248,30,1,99,106,96,4,161,163,164,206,128,249,0,+52,96,7,0,50,122,117,164,190,134,171,129,70,96,196,2,95,52,55,99,+71,230,185,1,230,32,3,98,46,139,190,0,49,128,76,119,35,0,53,134,+17,0,55,248,18,4,187,32,1,50,52,72,128,64,225,64,20,0,51,128,+20,232,76,2,0,49,231,236,6,67,102,4,50,51,50,32,95,109,194,172,+13,119,225,0,35,98,13,2,50,49,50,233,64,2,12,103,101,116,82,97,+119,32,102,97,105,108,101,100,129,243,225,64,3,1,95,51,66,28,128,143,+155,93,7,94,71,69,84,82,65,87,32,64,17,155,57,5,85,32,75,50,+32,65,183,78,153,210,0,95,75,41,121,207,1,95,54,91,254,3,58,49,+57,55,153,211,64,25,122,63,224,242,0,0,54,128,30,153,195,3,95,49,+51,51,64,90,0,55,153,15,226,78,0,224,208,1,3,95,49,57,53,152,+226,226,8,4,224,246,9,0,50,90,160,160,242,1,54,48,129,113,224,247,+1,12,83,97,118,105,110,103,32,99,97,99,104,101,32,157,138,124,221,5,+50,53,32,95,49,53,96,53,0,54,154,244,130,149,0,55,90,242,128,16,+64,158,0,54,188,105,123,130,1,54,50,97,137,67,114,64,27,152,81,249,+110,1,2,57,50,52,97,13,64,165,0,73,128,34,161,218,4,57,50,53,+32,85,231,65,0,229,242,5,64,244,64,62,231,101,2,202,158,224,26,1,+227,81,2,192,19,161,23,224,122,2,0,57,66,157,0,57,165,221,224,18,+10,192,19,0,53,90,247,0,57,205,64,224,40,4,0,51,75,121,128,11,+98,15,64,206,230,45,0,224,224,0,129,46,64,223,162,165,224,223,8,224,+229,2,224,231,1,224,235,4,232,83,4,232,18,6,224,40,5,225,54,88,+129,30,192,221,174,12,225,22,3,131,26,224,19,5,66,105,225,52,4,64,+69,64,62,165,3,224,47,49,225,96,0,225,153,10,192,52,239,235,0,65,+132,131,175,225,132,6,225,12,47,66,28,1,57,53,130,27,224,18,3,222,+47,226,67,5,225,24,5,128,20,0,55,166,133,64,154,132,56,224,154,3,+224,128,43,225,1,3,64,25,64,121,237,27,0,224,35,10,128,11,64,176,+224,11,3,128,0,64,149,164,187,64,149,1,95,57,109,111,128,79,0,58,+128,7,227,177,104,226,113,9,160,255,225,19,0,225,14,10,227,211,5,224,+254,34,65,180,192,226,0,66,64,6,226,231,1,97,84,65,13,64,48,64,+42,133,157,1,85,32,132,206,64,22,192,57,0,80,225,206,30,226,247,25,+224,213,17,1,49,57,139,140,224,74,32,64,163,133,149,225,220,5,190,3,+64,7,192,27,79,108,97,44,64,89,147,79,224,188,8,192,90,224,13,5,+228,66,26,128,39,160,27,0,53,96,195,64,126,133,45,160,62,255,247,2,+1,54,50,95,168,1,55,50,96,40,234,74,6,70,224,0,52,152,15,96,+99,139,94,255,243,0,0,54,102,199,67,52,130,115,236,252,7,64,141,103,+77,0,51,172,215,64,135,132,48,64,135,2,95,50,52,139,107,0,49,65,+93,128,29,131,179,11,73,79,46,115,101,114,105,97,108,105,122,101,71,168,+64,30,72,21,18,97,100,100,95,108,122,55,55,95,99,111,109,112,114,101,+115,115,111,114,64,30,64,128,136,34,0,52,64,2,0,90,224,1,2,0,+75,247,97,2,64,41,162,126,4,48,32,95,54,52,78,38,5,54,55,54,+32,95,55,118,8,160,218,96,23,104,0,0,52,83,51,3,66,32,95,54,+65,214,64,16,139,54,104,183,96,37,171,150,64,87,130,171,103,168,100,36,+0,55,72,36,0,55,73,195,96,30,0,54,192,30,72,36,0,64,232,37,+6,13,42,42,42,32,69,120,99,101,112,116,105,111,110,58,104,39,96,52,+130,76,168,126,128,174,10,55,49,53,32,95,55,48,49,32,95,55,129,145,+72,182,224,204,6,129,125,193,230,224,230,4,129,12,98,3,237,185,0,128,+239,224,230,0,0,55,97,211,0,51,96,97,0,49,235,177,3,2,46,104,+115,242,213,0,132,121,225,45,1,128,109,96,64,128,10,0,55,82,207,128,+254,129,224,0,53,75,207,192,179,97,85,225,69,0,2,64,95,51,72,205,+1,64,85,162,156,203,30,162,170,224,163,4,64,255,1,64,95,133,248,224,+31,8,64,102,64,113,224,92,7,241,178,5,65,89,131,138,64,178,1,56,+50,98,129,2,54,56,51,96,165,99,211,131,65,64,39,168,97,6,54,56,+52,32,75,32,85,101,98,79,36,2,95,55,49,128,200,64,35,130,207,243,+94,0,245,119,2,64,80,0,48,64,201,0,83,68,194,97,24,64,61,224,+7,3,77,79,172,8,64,14,241,39,5,195,234,234,111,9,161,115,130,77,+173,46,225,169,1,14,99,111,109,98,105,110,97,116,111,114,115,58,92,49,+48,141,100,0,95,233,115,1,236,184,1,225,16,0,131,118,224,196,11,129,+217,0,51,67,226,128,30,225,245,2,97,217,0,52,65,217,1,49,55,101,+181,237,152,4,193,180,0,89,165,165,226,140,5,1,49,57,166,197,64,27,+85,113,227,84,5,193,36,192,81,196,90,192,121,225,26,2,1,54,52,196,+170,235,139,0,226,206,0,225,35,19,2,112,105,108,75,156,14,117,115,101,+100,32,98,111,111,116,32,109,111,100,117,108,139,167,2,64,95,54,244,47,+6,224,249,22,244,62,2,226,151,11,179,139,224,192,1,96,163,0,85,98,+230,64,224,227,147,0,64,238,226,5,31,192,233,224,225,13,17,116,111,116,+97,108,32,105,109,112,111,114,116,32,116,105,109,101,32,64,0,96,220,64,+96,206,26,4,54,49,48,32,35,103,174,140,154,0,52,98,37,224,70,1,+0,109,227,245,1,129,149,238,249,4,249,136,2,128,140,65,203,64,7,143,+15,2,95,55,48,196,92,1,49,51,70,239,65,242,65,14,137,64,216,209,+66,129,237,210,1,109,184,0,54,77,170,0,64,64,14,2,55,48,55,205,+224,64,40,64,58,131,187,226,79,8,225,46,0,128,142,111,139,143,64,162,+185,226,64,2,65,54,68,163,225,161,1,64,247,193,169,225,170,2,207,75,+162,197,1,80,32,97,232,98,17,97,184,161,19,115,59,252,182,0,119,93,+129,203,129,226,2,95,50,51,64,108,68,44,78,41,64,225,0,49,234,213,+0,143,221,250,253,1,129,44,1,49,57,71,29,129,29,64,148,134,224,70,+208,79,5,96,21,201,32,230,232,1,64,21,0,54,195,203,67,51,229,162,+12,162,82,0,54,66,185,1,95,55,97,89,65,15,0,57,70,91,0,57,+65,154,65,44,0,54,74,141,1,95,54,66,105,64,139,162,181,193,217,64,+47,69,4,226,118,8,17,67,97,110,110,111,116,32,102,105,110,100,32,112,+97,99,107,97,103,227,81,7,162,247,226,231,1,196,40,128,157,232,44,0,+2,95,55,57,133,232,64,212,135,11,230,141,2,3,112,107,103,34,106,23,+64,60,226,57,3,144,222,1,95,55,80,242,64,30,165,195,3,49,57,51,+56,72,43,68,117,98,63,97,2,226,67,1,130,247,162,41,64,5,193,51,+128,11,1,95,54,80,90,128,31,129,210,81,175,187,75,228,153,30,109,88,+231,149,9,0,51,96,121,225,14,10,0,55,75,58,225,96,8,0,91,64,+10,129,82,227,199,3,0,50,81,39,224,16,0,163,68,97,113,4,79,32,+79,32,35,64,222,66,185,132,166,4,79,32,35,57,51,248,242,1,96,107,+0,56,224,107,10,132,61,69,37,229,20,7,226,94,20,2,32,95,55,73,+230,232,59,10,128,54,68,34,230,76,8,1,95,56,68,43,213,249,65,70,+128,83,227,180,4,224,99,0,241,179,10,225,103,5,166,200,229,71,27,170,+218,229,71,14,1,32,40,225,107,5,241,194,8,65,77,70,10,193,77,96,+71,224,12,0,229,243,4,64,129,71,242,230,213,2,205,188,224,231,182,246,+71,1,234,88,10,0,56,73,86,0,56,83,131,64,0,103,59,78,118,231,+59,0,160,79,2,49,57,52,96,103,225,254,15,227,90,26,227,50,13,226,+198,1,115,137,0,100,226,205,7,234,48,4,134,60,0,67,102,190,1,56,+48,166,176,0,51,150,235,4,95,49,56,49,32,135,119,64,0,68,78,233,+57,0,232,161,41,224,172,23,104,148,224,170,5,227,118,40,0,45,64,68,+131,123,97,161,229,186,19,233,4,3,101,195,3,111,117,110,100,172,143,229,+189,2,202,181,225,239,22,1,49,57,106,52,225,240,4,0,57,194,3,97,+58,135,242,103,166,0,54,75,127,111,226,203,126,65,63,135,20,133,186,96,+50,64,81,199,7,168,15,64,26,229,207,0,97,13,229,94,1,1,54,53,+69,23,226,98,0,128,31,224,182,3,225,71,0,230,124,0,0,56,72,109,+128,0,224,40,2,227,167,1,254,121,4,225,239,30,161,168,128,97,195,127,+225,123,6,6,112,97,114,115,105,110,103,161,109,192,0,209,225,192,128,224,+148,3,64,8,154,60,250,66,0,224,143,51,226,13,8,64,145,1,101,100,+236,64,2,100,15,1,57,49,237,77,4,224,160,0,192,2,181,117,234,19,+1,161,114,224,169,3,250,242,1,230,244,7,194,223,224,181,2,229,1,1,+217,25,1,57,49,66,74,0,55,67,121,3,64,64,95,53,81,101,169,88,+128,241,109,155,96,10,224,208,5,194,217,7,97,109,101,32,100,111,101,115,+98,227,12,97,103,114,101,101,32,119,105,116,104,32,102,105,160,29,193,132,+161,66,133,13,130,255,160,14,0,79,156,199,153,120,231,20,1,225,19,14,+138,14,224,25,12,193,218,226,180,17,64,0,225,244,4,224,2,3,230,64,+4,228,20,6,65,22,146,36,0,49,186,116,2,95,57,49,234,241,0,64,+32,83,96,172,198,224,0,2,227,73,1,224,1,1,67,240,224,31,19,106,+253,224,31,18,64,1,224,226,21,224,56,18,233,49,8,0,57,82,177,224,+0,5,169,179,224,2,1,162,135,224,69,2,73,174,224,101,6,224,41,3,+224,127,9,224,29,5,225,189,14,225,198,1,225,2,22,226,198,0,229,42,+9,117,7,0,49,94,19,0,75,231,79,1,224,0,0,225,252,16,226,5,+4,227,250,30,99,81,227,250,24,9,116,121,112,101,32,99,104,101,99,107,+228,0,3,232,25,1,1,57,50,69,173,81,138,230,108,2,0,45,64,0,+224,44,0,224,0,5,225,16,11,128,182,229,129,3,224,176,1,123,160,128,+113,245,206,13,173,58,243,138,8,224,114,23,226,202,5,97,92,225,214,20,+225,254,2,224,196,30,232,72,1,65,214,84,207,174,246,224,0,3,224,74,+13,224,156,7,224,37,15,227,73,24,224,210,20,64,2,236,229,0,224,186,+41,224,150,17,64,1,224,192,5,224,43,21,224,198,24,224,200,19,225,152,+1,224,88,9,224,227,3,109,198,224,80,12,249,83,4,224,83,3,224,74,+9,224,2,4,224,80,4,224,31,10,224,94,3,224,79,8,192,85,226,87,+2,224,30,9,208,192,224,0,1,224,102,16,224,36,0,230,34,17,128,41,+128,103,110,179,224,8,12,232,209,58,228,70,8,6,100,101,115,117,103,97,+114,232,68,4,132,58,212,138,224,0,4,197,33,233,108,13,224,5,9,225,+6,1,228,255,6,64,0,96,188,225,7,4,235,138,17,64,0,225,123,1,+139,150,224,19,6,235,162,15,2,100,111,110,176,222,224,116,9,232,57,5,+224,79,2,224,77,6,0,44,224,64,0,128,30,237,129,7,176,153,160,29,+232,212,7,0,115,173,183,64,31,232,176,4,224,60,4,224,57,10,1,32,+43,160,119,224,53,16,224,50,16,224,161,12,238,29,6,224,0,6,128,100,+227,25,0,96,203,194,131,224,8,28,225,225,5,235,18,1,96,26,234,47,+17,1,95,54,108,59,193,85,0,52,119,237,234,51,2,3,95,55,50,48,+224,225,2,10,73,110,116,101,114,97,99,116,105,118,101,225,85,0,1,95,+50,70,140,226,50,8,96,120,141,121,128,131,122,195,225,104,10,3,108,111,+97,100,206,115,234,83,18,225,102,2,175,137,160,38,225,88,16,228,106,3,+225,44,6,236,47,0,128,14,225,61,6,1,64,67,196,21,139,140,228,31,+0,200,145,224,13,0,191,100,227,107,0,129,74,113,192,243,109,3,75,5,+1,48,48,74,82,160,164,231,152,9,224,136,0,241,16,6,192,193,64,27,+224,94,3,73,12,116,232,128,37,84,153,143,131,120,202,224,11,0,224,92,+1,224,32,2,224,45,4,64,0,65,74,0,52,64,159,192,17,224,16,7,+224,32,8,3,83,32,95,57,65,238,88,190,213,245,213,242,193,13,181,179,+64,190,80,44,1,49,48,186,21,132,231,224,11,1,1,49,50,105,42,64,+0,2,85,32,75,192,23,227,17,2,133,199,196,61,144,126,81,28,128,42,+67,100,97,133,122,70,110,247,160,0,224,154,11,250,91,1,171,150,224,10,+4,224,184,4,65,102,192,0,224,231,11,141,140,194,95,94,179,4,61,61,+32,64,35,143,32,64,84,144,7,246,188,5,225,184,4,192,238,64,204,96,+54,3,95,49,55,55,206,69,79,215,162,47,79,199,150,204,7,95,51,55,+56,32,95,51,57,67,30,1,52,56,127,64,67,125,64,6,65,154,64,7,+0,53,117,215,64,58,189,201,1,51,57,79,79,1,52,57,88,5,0,55,+117,166,156,74,224,177,0,0,49,67,102,8,95,52,57,55,32,95,52,57,+57,224,37,0,227,113,1,11,101,120,112,101,99,116,101,100,32,101,111,102,+131,167,64,197,1,95,50,93,6,96,139,248,169,2,64,127,224,120,4,1,+49,56,77,86,0,49,159,134,100,46,192,53,96,247,82,58,228,99,4,3,+77,97,105,110,96,100,4,79,32,95,49,56,99,68,224,31,4,0,109,192,+31,163,242,64,115,182,227,67,196,160,116,1,55,56,224,51,4,110,219,135,+98,224,152,1,0,55,67,203,169,229,96,18,64,158,97,85,225,101,2,1,+49,55,124,251,4,55,56,52,32,35,115,127,64,11,65,74,1,56,49,97,+120,128,24,131,23,192,13,142,49,224,235,5,3,67,39,32,79,128,47,0,+55,196,172,99,150,224,179,16,3,119,104,101,114,229,101,1,138,15,225,81,+10,194,193,224,107,3,193,89,225,148,1,0,51,129,32,96,220,224,4,51,+1,49,56,88,116,0,95,89,128,161,30,65,40,65,71,111,47,2,95,49,+53,127,68,225,53,1,224,209,3,3,100,97,116,97,129,131,0,49,112,164,+128,8,186,80,224,81,1,224,91,10,1,49,54,130,229,224,85,11,5,110,+101,119,116,121,112,161,220,1,49,57,116,146,225,182,5,75,170,224,87,14,+1,53,49,85,191,90,63,128,5,96,65,67,172,4,95,49,55,57,52,65,+100,0,48,121,230,99,197,77,90,94,10,244,241,8,193,115,0,50,64,99,+70,180,96,4,128,0,224,226,12,224,216,3,226,100,4,224,216,3,224,213,+29,0,56,135,214,224,84,4,0,55,90,34,224,84,13,137,155,192,86,0,+50,194,183,225,125,23,162,159,128,79,224,5,9,224,97,3,5,102,111,114,+101,105,103,131,162,224,125,18,2,64,95,52,71,18,1,52,48,96,65,100,+112,224,45,7,4,99,99,97,108,108,224,71,12,3,99,97,112,105,163,26,+65,129,0,56,224,132,8,4,117,110,115,97,102,195,61,192,34,0,56,171,+87,2,95,49,56,113,34,192,191,1,56,50,101,110,225,73,1,225,13,11,+225,23,12,128,56,225,5,11,3,99,108,97,115,153,212,65,189,96,88,193,+198,163,73,225,202,2,0,49,97,135,3,95,52,57,48,72,211,224,104,8,+71,61,1,52,56,96,193,145,218,224,184,0,98,60,224,26,4,96,27,228,+145,2,228,21,1,162,224,96,254,0,55,64,61,1,57,50,193,14,224,219,+13,227,113,16,6,105,110,115,116,97,110,99,194,156,161,55,224,86,1,208,+124,224,86,13,130,161,228,30,11,4,101,102,97,117,108,194,155,97,178,228,+242,1,99,149,204,200,229,172,0,1,49,55,67,136,226,67,3,107,124,106,+192,0,50,96,222,157,161,224,100,1,1,40,41,162,125,73,103,128,71,162,+35,2,55,57,50,70,255,0,49,65,75,145,100,225,72,3,224,207,15,1,+57,50,153,169,227,191,23,149,141,226,112,6,64,59,128,236,160,79,0,85,+97,63,132,135,224,82,11,5,112,97,116,116,101,114,195,91,0,57,65,254,+225,105,18,68,185,230,201,11,224,81,16,130,128,97,106,226,70,6,128,178,+225,237,5,224,105,2,228,30,10,225,217,5,4,114,105,118,105,110,94,145,+128,217,226,77,16,227,134,4,0,52,224,97,0,4,56,57,53,32,80,101,+168,101,169,65,244,250,111,7,197,191,224,240,2,224,10,13,225,165,17,224,+24,5,1,114,111,168,49,225,191,0,228,177,10,228,195,24,5,110,111,109,+105,110,97,228,197,13,6,112,104,97,110,116,111,109,192,100,224,126,6,11,+101,112,114,101,115,101,110,116,97,116,105,111,192,65,167,205,159,163,227,29,+4,72,201,74,255,205,222,67,6,224,156,8,232,114,11,198,73,232,100,9,+0,53,97,251,64,21,227,119,27,66,184,224,99,1,232,143,7,139,205,75,+46,0,32,139,88,96,34,0,49,155,152,75,68,73,28,96,89,1,48,55,+67,80,159,159,1,32,95,65,248,71,88,0,57,132,83,237,228,2,224,201,+7,1,56,48,238,35,3,1,60,45,161,47,224,212,15,174,104,233,249,3,+1,49,56,81,124,224,212,4,96,234,226,208,10,233,155,2,96,56,121,114,+1,49,57,71,38,224,117,0,225,2,9,237,201,5,110,36,79,104,66,91,+238,40,0,96,0,65,227,157,56,96,93,65,107,195,149,0,56,98,229,108,+176,136,144,185,219,64,50,156,48,2,85,32,83,65,104,82,185,2,67,32,+60,178,141,224,18,6,68,119,224,18,6,64,239,236,21,4,130,205,118,104,+1,85,32,236,49,6,135,61,160,27,2,95,53,53,108,136,161,254,128,235,+237,16,6,224,44,17,224,42,4,138,59,160,42,1,75,50,79,13,193,82,+0,67,224,174,5,139,82,236,196,3,224,58,3,240,70,0,100,36,128,108,+224,116,2,108,189,224,90,0,0,58,128,24,253,37,0,2,80,32,35,75,+218,161,198,193,170,64,37,253,75,1,2,80,32,35,98,145,0,80,109,108,+69,199,67,144,229,19,1,107,12,167,238,3,49,56,57,52,128,38,0,54,+235,133,2,1,49,56,66,211,229,186,15,68,230,229,186,23,231,47,6,111,+81,229,168,8,64,118,141,145,145,225,194,143,224,13,5,97,43,224,136,8,+110,193,74,77,103,72,128,181,229,147,0,126,171,74,220,0,57,224,146,2,+5,83,79,85,82,67,69,164,208,232,122,3,0,55,94,187,64,0,68,74,+64,73,224,128,6,232,236,4,96,239,174,45,224,150,10,0,67,145,95,160,+35,80,11,96,80,224,111,4,98,7,96,133,234,30,0,225,64,9,0,97,+201,160,0,55,168,7,192,44,233,130,15,225,0,4,98,63,224,82,7,2,+104,105,100,198,231,224,144,12,168,102,174,66,85,237,197,132,232,103,2,224,+98,21,8,113,117,97,108,105,102,105,101,100,128,101,65,224,174,254,237,176,+12,224,203,9,67,71,102,34,123,148,248,10,0,112,238,145,2,65,99,204,+240,180,7,2,49,55,53,201,214,156,95,208,185,123,154,101,127,171,82,96,+223,1,56,48,96,206,233,51,15,128,16,128,49,234,161,13,224,44,2,136,+1,0,49,169,65,224,25,8,233,39,25,128,104,224,141,22,233,193,22,192,+127,224,173,9,65,128,143,94,2,90,32,90,113,243,64,17,135,162,68,42,+210,111,64,7,196,72,133,220,0,90,128,21,192,50,133,190,66,243,194,0,+81,86,4,83,32,95,52,49,98,50,102,146,99,147,134,190,229,169,11,128,+31,0,90,161,187,139,2,96,0,0,58,99,169,228,126,2,233,167,25,160,+39,235,22,20,227,149,3,146,230,239,71,0,96,45,225,50,12,64,139,133,+74,232,194,8,196,29,228,38,5,192,99,99,134,224,185,0,239,3,0,170,+182,65,161,160,23,141,80,130,159,83,75,241,139,7,148,144,162,109,64,142,+133,192,0,85,213,132,241,148,27,241,145,11,148,225,231,251,8,137,148,0,+80,119,118,72,217,96,150,225,154,0,213,32,64,25,64,129,70,182,64,249,+65,80,70,8,2,79,32,35,83,205,232,251,1,64,176,0,54,133,211,64,+87,134,236,244,142,0,224,2,1,223,115,128,212,128,1,131,252,85,205,0,+54,75,67,196,116,224,36,5,64,1,252,170,1,248,76,4,250,109,22,128,+114,96,15,167,160,192,25,161,22,103,146,232,186,5,247,244,0,64,19,145,+95,113,62,241,68,2,202,36,160,100,128,8,224,221,0,224,27,1,160,125,+224,119,3,96,122,201,144,113,239,246,75,1,0,83,93,86,0,51,180,190,+96,32,65,131,120,88,65,129,106,125,86,183,250,240,2,67,103,138,47,245,+215,0,247,233,5,224,147,1,152,158,3,64,95,52,52,64,83,105,249,0,+90,98,208,66,96,72,18,107,86,64,8,96,16,0,53,130,236,0,55,67,+166,2,95,55,52,64,121,0,49,115,76,0,79,66,207,226,0,0,96,171,+128,46,160,0,2,95,51,55,160,12,64,160,64,84,2,55,52,50,193,220,+224,73,4,225,7,1,249,80,4,15,66,97,100,32,71,65,68,84,32,114,+101,115,117,108,116,32,228,246,0,224,47,1,122,199,2,57,49,51,120,125,+70,151,66,196,1,54,56,133,250,0,50,64,97,0,57,160,97,230,68,2,+167,169,128,0,66,180,182,26,0,49,135,100,128,82,64,53,131,119,96,149,+89,205,0,48,192,235,233,198,0,99,217,64,131,128,114,136,24,224,194,3,+1,58,58,96,176,251,121,7,129,160,250,33,7,0,95,68,30,192,123,64,+151,135,63,107,16,96,156,0,64,69,153,101,103,160,255,0,50,112,217,202,+48,215,245,226,252,1,0,95,66,33,96,124,69,197,183,214,174,152,160,66,+71,239,1,51,50,96,223,0,52,224,139,1,224,74,2,224,68,9,120,109,+160,70,224,67,17,224,49,4,120,89,253,182,1,129,41,134,224,65,189,192,+16,139,22,96,16,64,255,182,29,241,109,6,237,95,6,106,87,228,244,5,+107,79,96,153,224,58,3,160,102,224,23,5,2,52,56,57,247,86,5,0,+57,136,219,237,182,5,1,45,62,162,119,224,65,0,224,112,5,166,82,224,+27,0,237,99,7,224,25,1,196,10,224,11,0,192,8,249,213,3,64,251,+175,75,239,200,10,232,44,1,224,9,11,232,64,1,100,83,193,13,193,0,+246,71,1,118,65,224,78,24,234,230,10,226,26,2,96,8,192,106,129,113,+131,244,64,24,0,79,70,43,0,79,226,15,0,224,137,10,153,224,1,49,+57,105,148,192,15,64,252,136,135,225,189,4,0,54,249,18,6,67,238,0,+56,67,146,84,110,225,239,0,225,117,3,97,81,64,77,136,192,225,74,11,+225,44,0,96,181,130,12,2,49,57,48,184,3,224,29,2,245,79,4,103,+200,96,194,226,56,3,224,45,0,2,54,49,51,110,151,1,32,89,129,36,+155,157,165,254,128,166,188,129,228,134,2,168,202,235,225,13,251,92,3,104,+83,0,56,202,98,232,241,0,237,96,2,1,57,48,211,168,250,1,8,69,+18,194,97,65,254,100,245,224,115,13,129,114,194,220,64,47,169,26,224,47,+24,65,141,64,47,174,124,236,158,15,2,52,32,35,138,26,236,143,9,64,+61,0,54,224,61,3,0,57,75,41,203,195,130,46,64,35,197,183,153,18,+0,56,66,86,64,12,0,56,128,127,236,125,3,225,65,3,226,6,17,234,+43,10,130,161,227,15,24,64,2,82,41,191,253,64,86,65,244,64,65,102,+139,226,201,1,1,55,57,170,70,246,48,24,168,121,172,232,92,108,231,113,+5,246,43,6,192,107,97,130,96,50,234,224,11,65,35,225,87,1,225,202,+16,136,32,99,14,0,56,117,247,225,4,22,130,220,66,206,227,249,9,192,+66,161,161,224,15,0,64,141,196,229,225,229,9,128,43,64,35,164,12,128,+35,1,56,57,72,134,2,49,55,56,162,100,195,219,0,56,236,138,0,229,+181,1,4,85,73,100,101,110,112,135,242,38,12,90,140,96,25,69,127,96,+29,138,13,0,83,64,8,1,95,53,98,8,0,50,71,215,160,42,163,186,+144,117,105,14,0,64,110,110,192,30,99,86,96,159,224,174,3,241,76,16,+98,234,64,33,114,135,236,252,5,251,70,2,0,56,163,85,224,55,0,0,+56,64,228,64,6,66,243,245,39,3,128,126,195,165,163,19,84,87,64,6,+0,48,65,46,96,107,224,156,0,160,161,192,88,242,26,9,224,184,14,247,+192,8,228,147,26,167,33,224,80,13,181,76,226,140,13,224,170,2,228,67,+1,0,52,151,111,237,3,5,4,105,110,102,105,120,182,143,224,44,3,0,+55,76,165,224,44,12,0,114,167,213,224,90,4,0,57,160,198,224,45,8,+200,2,192,146,226,113,10,3,100,105,103,105,226,112,11,130,246,162,112,0,+75,75,13,80,229,106,20,65,159,84,122,0,54,134,231,248,65,10,1,67,+32,224,32,0,224,33,8,180,56,160,91,194,156,224,36,0,160,0,228,9,+4,224,64,12,238,173,0,0,56,222,208,230,59,1,66,55,0,54,98,55,+134,205,128,51,116,97,97,185,98,110,150,12,194,3,130,123,125,157,79,238,+128,83,0,48,76,187,163,49,167,233,98,102,74,226,205,60,231,223,1,130,+133,100,90,141,244,137,51,120,76,163,139,128,53,183,188,168,143,135,100,103,+87,237,148,1,192,30,227,228,0,192,14,110,76,160,74,96,56,224,16,0,+145,23,224,67,2,178,136,232,254,4,248,48,0,232,118,3,165,8,232,250,+3,107,118,146,152,192,13,224,91,3,73,67,192,159,225,2,5,160,21,0,+66,66,110,129,169,224,16,0,228,43,3,0,53,193,197,224,156,2,0,39,+97,225,65,64,238,238,0,232,125,0,110,235,230,95,5,136,160,160,18,110,+236,238,231,3,160,115,248,55,6,96,101,197,243,167,57,238,115,9,65,229,+134,116,225,58,3,224,229,2,64,166,64,82,236,218,2,235,91,3,228,231,+10,129,54,225,57,5,231,79,2,224,18,0,231,85,10,64,247,96,132,192,+221,224,218,22,89,248,175,102,96,201,134,176,99,220,96,129,146,13,71,194,+250,213,9,246,74,20,167,92,160,176,246,246,9,232,147,1,187,55,167,94,+104,95,128,144,135,42,224,75,22,231,173,42,161,254,160,8,64,245,231,130,+3,224,4,26,237,138,3,243,61,3,243,52,5,71,2,189,209,230,245,1,+132,198,160,202,225,151,5,240,92,0,224,210,11,0,83,97,174,128,34,65,+62,0,53,115,117,160,49,245,211,0,251,74,9,71,97,130,24,68,176,231,+107,8,0,51,248,240,15,69,30,96,82,180,130,135,103,235,114,10,137,147,+224,86,4,92,63,67,116,2,95,56,53,236,69,8,224,95,2,128,244,165,+150,224,95,16,67,91,225,20,15,65,97,160,55,224,181,6,168,87,224,123,+11,0,56,144,167,96,113,224,196,18,2,49,49,52,64,248,173,194,237,26,+4,161,69,229,198,1,224,51,6,107,227,224,51,4,160,17,224,50,11,0,+53,108,47,225,130,22,225,34,7,165,16,224,189,5,66,200,170,46,224,78,+14,173,213,97,210,226,200,6,225,92,11,188,249,154,224,0,51,118,143,226,+89,5,149,237,226,254,16,0,51,68,208,224,128,4,233,244,4,226,254,7,+1,49,56,100,106,64,9,232,174,1,0,56,137,9,240,174,5,1,46,46,+232,216,0,226,49,10,142,4,0,58,130,248,1,10,65,145,157,64,14,138,+58,247,253,4,96,114,135,224,2,56,53,32,64,15,0,54,192,15,0,52,+231,227,1,2,49,56,56,124,73,64,35,228,40,1,194,79,1,48,49,114,+25,0,53,164,97,227,95,4,64,21,64,62,98,196,160,8,64,71,250,57,+18,128,91,1,56,54,171,5,162,108,95,157,96,7,172,105,149,169,1,49,+56,64,103,64,80,242,74,7,160,69,224,137,0,73,56,64,46,129,105,225,+95,1,68,144,64,201,248,142,4,0,111,244,133,0,247,106,8,0,56,154,+142,148,239,237,226,23,97,224,73,27,117,237,166,140,230,138,4,1,95,49,+108,135,130,189,64,145,236,236,16,4,81,117,97,108,68,96,152,236,236,19,+96,151,104,231,236,212,3,250,10,3,104,42,232,9,0,121,169,1,95,50,+128,10,0,56,234,234,4,161,4,236,253,0,135,113,106,128,104,15,150,48,+2,50,54,51,97,253,248,40,4,192,207,237,217,4,238,94,19,2,95,49,+48,128,6,250,29,11,1,105,102,219,11,164,211,224,37,0,98,126,64,68,+228,21,3,224,62,7,2,116,104,101,155,144,224,65,48,2,101,108,115,182,+151,224,65,2,226,228,2,141,176,224,213,12,0,55,171,109,224,213,19,130,+87,0,55,102,102,244,149,15,239,235,9,129,97,219,187,2,80,32,35,182,+209,64,22,64,144,99,196,224,147,13,231,148,4,224,147,3,1,108,101,255,+213,0,128,148,78,109,225,47,4,237,52,5,225,151,4,64,119,242,66,17,+64,119,225,225,16,1,99,97,161,96,225,161,10,224,39,3,0,111,225,51,+7,99,58,64,120,164,197,241,134,2,68,237,235,70,6,105,76,229,174,6,+233,71,0,229,188,8,102,110,78,136,230,183,0,226,48,0,167,65,128,170,+224,56,7,1,56,55,160,128,224,231,21,224,193,3,160,196,0,54,225,61,+16,113,181,199,177,139,49,96,132,96,54,133,147,236,89,4,64,36,106,7,+235,104,4,96,187,129,210,228,136,10,98,171,128,81,133,157,64,81,97,40,+225,70,3,224,206,3,252,148,2,128,208,242,147,13,64,120,64,79,225,120,+0,108,238,134,214,0,55,64,124,235,14,4,115,103,85,252,96,61,100,83,+68,172,64,127,225,115,1,64,84,222,233,225,47,16,225,249,2,157,151,232,+72,0,176,47,231,57,1,224,99,10,64,98,132,191,140,253,0,51,73,209,+0,89,245,238,0,69,68,156,154,141,230,181,242,109,39,65,200,238,30,3,+160,176,168,155,225,145,2,0,54,130,163,230,180,2,98,20,64,22,225,162,+11,1,51,56,74,89,113,185,96,81,71,34,224,81,7,129,94,224,17,0,+232,181,11,139,15,237,134,5,232,221,17,237,64,12,198,68,141,165,166,223,+220,94,64,134,96,58,143,201,128,182,139,176,193,11,64,225,236,112,35,231,+205,6,178,80,0,56,96,82,224,23,10,108,12,64,8,235,240,50,66,4,+226,36,5,192,13,235,43,9,139,237,235,230,20,1,49,56,102,91,192,19,+99,106,64,14,229,41,11,0,56,146,43,224,153,8,137,127,248,150,7,202,+100,224,154,4,224,86,13,229,128,4,224,86,2,0,54,96,142,224,86,5,+64,106,224,241,17,129,226,225,72,22,133,59,130,70,224,74,17,66,28,0,+49,74,108,0,52,152,215,0,57,181,17,228,113,11,8,95,112,114,105,109,+105,116,105,118,229,70,0,104,143,224,154,7,249,205,7,206,117,122,71,98,+127,134,47,135,55,64,20,135,55,64,56,233,128,16,5,115,116,114,105,110,+103,233,128,10,129,223,243,252,0,169,35,160,104,133,156,128,104,64,222,160,+104,170,255,211,73,65,195,84,6,0,50,84,7,248,15,4,235,86,0,96,+54,133,72,67,125,64,79,102,206,147,167,65,218,233,106,1,171,181,226,4,+10,137,180,135,29,235,7,2,253,217,2,193,168,228,101,1,133,5,192,116,+97,192,160,116,228,209,9,65,187,229,231,0,224,8,18,231,153,6,128,109,+230,174,5,98,6,132,96,128,51,224,12,18,197,131,192,231,228,181,0,143,+129,209,240,165,164,160,6,194,161,224,135,7,230,101,0,224,86,10,76,210,+226,93,2,237,150,12,224,63,9,193,102,128,63,0,55,96,222,237,208,13,+229,106,8,224,197,2,241,203,9,160,99,232,126,4,0,48,152,209,230,252,+37,232,194,7,0,53,96,163,224,227,31,224,224,2,64,59,238,176,19,224,+221,5,192,218,224,210,3,0,58,133,41,195,52,64,84,131,51,64,87,226,+135,1,97,214,130,134,64,172,230,76,5,228,254,12,0,53,67,253,228,227,+5,217,60,210,68,164,121,224,51,2,64,26,228,138,13,235,43,15,224,63,+5,190,192,200,81,65,124,227,166,2,225,35,4,1,60,45,192,79,143,80,+1,56,53,74,175,97,21,64,57,247,136,0,1,53,51,79,167,64,186,128,+15,143,167,73,45,64,28,143,14,65,84,224,103,1,225,199,1,239,167,23,+0,52,172,255,116,25,64,71,164,86,227,150,2,64,6,232,179,10,139,33,+163,148,245,170,2,142,53,245,167,10,151,11,0,50,116,33,143,30,64,118,+224,51,1,232,249,17,96,152,132,148,0,85,232,131,1,2,67,32,60,165,+139,0,83,224,18,5,0,50,64,83,229,176,4,96,17,178,218,133,177,160,+120,224,39,6,133,216,160,38,0,90,224,38,3,111,95,184,239,64,141,165,+8,249,24,0,0,54,79,129,224,75,4,132,88,115,7,64,114,1,85,32,+224,165,6,195,224,250,82,6,224,48,0,160,135,224,162,13,224,37,10,193,+40,65,209,226,9,2,125,93,232,168,15,167,119,172,65,224,19,1,96,71,+227,125,4,97,136,131,125,65,4,160,24,96,26,134,251,138,32,96,35,96,+36,0,54,227,209,1,0,49,64,82,131,210,66,117,216,55,236,189,2,66,+9,80,151,241,126,6,229,171,1,0,56,84,130,252,116,0,226,47,9,2,+83,32,95,114,98,3,95,49,50,57,147,82,64,108,163,49,224,82,2,92,+232,224,100,5,0,52,68,111,224,79,8,234,232,6,64,86,65,231,129,107,+138,229,64,96,163,116,195,146,189,255,72,242,64,29,163,74,3,49,56,52,+48,67,192,64,22,224,142,6,68,160,227,90,10,136,181,227,20,22,64,81,+255,43,0,235,59,119,65,9,230,99,5,192,13,233,254,12,139,62,96,8,+102,12,213,121,176,231,235,88,23,98,5,192,19,130,17,0,58,129,53,78,+116,68,33,153,17,120,64,2,49,56,51,66,17,155,163,0,95,101,70,64,+44,194,221,2,80,32,35,233,165,1,64,41,129,80,234,14,10,5,108,105,+116,101,114,97,126,142,227,204,13,224,18,5,65,6,228,16,10,243,182,0,+243,91,5,107,16,96,172,199,162,224,35,19,208,67,0,83,64,228,228,248,+2,224,90,20,0,49,67,124,64,0,234,203,17,224,58,16,65,46,160,0,+65,38,0,54,227,220,2,225,60,1,234,249,2,132,158,96,21,245,248,8,+202,172,245,146,0,74,248,243,3,8,208,239,224,40,17,0,61,224,40,1,+64,248,64,107,231,4,4,231,108,5,224,45,1,167,108,0,54,72,94,199,+108,64,65,224,57,15,224,144,1,231,166,0,171,57,96,57,244,242,4,0,+55,68,125,229,110,22,1,56,48,64,174,229,110,7,65,19,224,71,0,224,+64,8,199,214,224,255,3,4,102,111,114,97,108,98,142,224,155,2,1,55,+48,192,155,68,77,141,142,97,187,232,14,1,245,184,0,241,186,12,69,33,+225,9,2,161,122,124,164,106,199,68,53,2,95,49,48,101,211,64,84,153,+43,124,183,233,133,13,128,54,224,40,1,229,207,4,0,50,229,172,0,64,+165,165,45,104,238,64,25,225,145,15,1,58,58,224,245,7,74,64,193,145,+64,90,98,135,72,152,243,238,1,224,147,1,67,166,114,119,0,67,100,38,+99,64,64,20,0,67,231,195,8,96,229,232,55,4,103,120,198,3,100,83,+2,95,49,51,247,235,3,159,214,242,164,3,224,121,2,71,28,128,163,201,+220,229,80,3,162,30,72,172,64,34,131,56,100,104,0,67,70,137,94,142,+203,184,96,96,69,50,0,51,106,132,206,129,137,96,65,128,96,23,163,215,+64,76,227,25,5,64,98,193,179,1,56,50,64,163,64,35,198,175,168,211,+0,48,69,211,88,38,134,214,0,55,96,105,64,39,226,241,0,229,36,10,+4,76,73,100,101,110,107,39,248,180,19,225,123,1,64,217,89,91,129,134,+66,45,96,219,0,53,64,227,1,95,50,121,188,217,83,0,67,64,7,0,+56,184,193,97,252,140,143,216,175,228,188,2,142,245,129,161,192,30,161,120,+215,63,71,16,182,18,227,109,1,64,99,70,209,195,59,97,151,252,122,0,+248,54,8,64,80,64,104,245,58,3,226,250,3,128,139,227,101,3,193,143,+64,222,245,32,6,235,66,0,160,98,156,186,64,145,233,38,0,224,37,12,+140,202,243,172,4,224,40,11,79,186,224,77,8,232,120,1,0,57,81,148,+250,196,0,64,205,235,210,1,65,195,0,66,99,54,65,209,96,14,97,210,+96,121,5,66,32,85,32,64,90,161,209,218,100,0,49,68,69,0,35,80,+162,131,242,64,127,96,12,193,72,98,96,132,67,224,187,7,97,30,202,98,+1,95,55,72,24,75,123,0,56,66,238,96,27,0,54,96,27,220,227,64,+22,128,42,0,51,64,189,170,89,0,51,98,57,128,12,0,79,96,235,1,+80,32,131,178,65,145,0,51,115,85,64,60,252,149,23,229,5,5,64,202,+239,39,2,229,142,5,4,109,111,100,117,108,210,165,139,82,243,150,14,0,+55,160,16,105,120,227,134,0,69,184,224,50,30,250,26,10,233,182,4,190,+198,145,185,224,25,10,224,190,11,5,112,97,116,116,101,114,249,224,0,138,+20,224,141,21,224,70,11,2,116,121,112,248,240,1,128,127,224,173,23,82,+213,224,76,13,5,100,101,102,97,117,108,239,117,0,128,147,65,182,132,205,+0,90,96,1,94,214,96,20,231,194,6,129,168,129,91,101,192,64,35,231,+172,4,0,56,84,126,64,6,0,57,130,73,231,129,0,228,215,10,136,4,+228,211,19,137,252,0,83,172,77,0,83,163,9,253,110,17,251,235,1,128,+47,253,160,15,232,113,5,253,157,5,228,240,0,97,64,131,64,224,23,15,+97,0,64,234,229,227,2,136,174,229,227,10,65,25,229,227,17,0,81,229,+228,28,192,214,229,215,55,224,209,22,132,42,0,79,226,54,2,219,116,224,+19,4,3,108,97,115,115,224,20,7,3,100,97,116,97,224,19,8,226,115,+1,224,22,5,2,114,105,118,182,13,224,23,4,127,52,224,17,3,222,59,+224,19,3,233,170,1,224,21,6,2,101,105,103,99,114,224,22,3,158,39,+224,17,4,3,109,112,111,114,224,146,8,157,141,224,17,5,2,102,105,120,+224,20,12,224,123,8,96,21,0,114,224,21,9,4,115,116,97,110,99,224,+191,8,178,250,224,18,3,228,238,1,224,21,3,3,110,101,119,116,164,1,+224,22,3,157,198,224,17,3,228,110,2,224,22,3,247,238,5,224,25,3,+223,212,224,19,4,224,106,10,252,162,0,245,48,1,224,0,8,66,54,0,+54,228,66,0,2,66,32,90,70,98,160,23,169,152,110,215,230,7,7,236,+136,0,1,49,55,149,84,234,150,5,212,243,64,23,202,236,186,2,165,226,+103,209,167,16,111,39,64,113,230,131,0,227,106,10,5,83,121,109,79,112,+101,97,167,238,115,8,205,165,231,143,4,227,125,2,64,23,231,142,3,106,+186,233,44,1,131,79,1,67,32,137,43,1,79,32,96,31,246,101,3,233,+188,48,99,213,64,96,0,55,112,97,131,237,227,238,16,0,55,141,2,233,+198,34,97,53,234,208,0,225,53,10,228,159,36,64,184,224,168,2,228,117,+30,254,139,1,194,20,72,94,4,83,32,95,52,49,224,144,0,137,27,73,+77,224,130,8,140,70,233,59,4,225,80,0,230,8,4,192,252,204,119,160,+126,238,116,6,235,206,2,115,240,96,35,244,162,5,133,234,133,225,0,58,+128,37,64,29,0,54,226,36,5,1,64,35,79,21,88,84,76,141,64,39,+230,8,19,0,81,226,158,49,141,110,231,39,1,226,162,2,129,9,224,23,+4,64,10,226,187,20,96,32,194,188,226,219,50,230,179,11,226,206,53,226,+71,18,97,95,230,190,9,142,221,224,17,3,152,40,224,17,3,132,106,224,+17,3,136,78,0,79,239,14,5,128,14,232,61,0,193,1,64,119,0,54,+96,119,64,231,151,145,135,153,0,53,68,255,64,30,213,167,236,36,2,75,+78,247,235,8,64,240,247,233,8,235,209,4,64,77,174,202,179,144,0,52,+82,63,238,170,6,67,61,64,41,131,214,237,149,6,234,29,1,212,119,229,+68,0,64,30,64,55,195,143,0,90,65,170,96,6,224,7,0,111,116,64,+35,227,52,5,203,208,105,252,99,66,64,28,237,17,0,157,49,144,68,109,+162,251,50,5,0,67,67,58,7,64,95,50,48,53,32,95,56,244,244,1,+255,30,26,229,252,1,224,197,5,143,189,251,88,1,0,85,225,220,2,1,+91,93,65,220,224,83,5,225,25,0,245,4,1,197,48,0,58,128,214,224,+207,4,237,225,3,251,147,8,0,53,83,223,251,147,2,64,64,213,32,97,+81,192,4,167,38,109,6,247,199,1,97,31,96,139,99,32,242,85,9,0,+55,91,14,130,1,0,66,131,75,241,28,10,221,164,224,84,4,100,33,226,+113,2,64,100,100,11,236,85,9,64,102,238,12,0,229,150,5,64,78,229,+151,4,1,95,52,64,8,3,95,52,56,48,66,187,2,55,32,75,132,8,+100,12,229,183,13,131,221,229,183,4,229,55,3,195,87,88,132,65,119,224,+178,0,64,19,230,171,19,0,85,230,172,39,99,162,230,171,34,98,232,163,+203,95,17,130,34,96,47,2,50,54,51,244,17,5,149,244,67,149,226,12,+6,131,58,230,238,76,230,236,4,230,235,9,78,17,129,61,2,48,53,32,+80,8,1,55,55,64,83,0,80,96,9,0,56,64,79,243,179,7,98,85,+0,55,154,115,153,170,96,71,64,162,112,55,0,75,97,148,64,59,226,193,+0,128,146,194,122,192,13,64,97,99,228,78,90,64,240,64,54,208,153,224,+39,1,96,199,64,202,96,20,68,3,163,13,0,55,65,156,112,152,143,117,+64,6,97,6,248,162,7,0,51,96,173,152,161,129,153,96,50,169,10,0,+51,234,99,3,8,65,109,98,105,103,117,111,117,115,149,2,128,34,0,53,+99,18,65,208,143,223,81,62,224,246,0,0,54,96,176,84,189,227,125,2,+0,49,96,7,0,53,112,205,99,252,224,108,12,4,58,92,49,48,38,224,+103,2,224,29,5,11,32,32,102,111,117,110,100,58,32,32,32,32,128,36,+98,98,224,94,1,98,163,100,212,101,231,101,43,99,119,230,184,4,2,69,+79,70,64,61,166,155,160,62,71,210,0,48,162,128,224,120,10,8,101,120,+112,101,99,116,101,100,58,128,120,96,202,67,207,0,53,75,181,201,55,225,+2,1,196,21,102,174,0,54,64,237,164,99,2,49,55,55,65,116,160,25,+0,55,66,119,96,75,104,60,84,11,78,93,120,226,96,4,65,213,196,209,+65,220,213,158,129,203,239,251,0,198,124,69,44,240,21,6,233,32,7,64,+22,243,87,13,224,65,0,96,79,130,106,233,20,7,227,39,1,224,69,10,+196,202,224,69,5,137,119,96,22,163,127,224,91,6,240,176,17,242,224,2,+64,0,162,174,160,126,133,188,102,74,67,50,162,83,95,153,67,131,67,134,+64,112,0,66,170,19,132,36,224,171,1,128,44,96,169,162,7,65,97,133,+54,2,66,32,89,151,178,224,188,0,224,13,1,103,218,164,216,1,85,32,+99,168,224,175,1,7,108,97,121,111,117,116,76,83,160,177,128,252,225,137,+6,64,144,192,25,224,2,0,128,47,64,37,128,1,225,181,4,251,8,0,+160,143,64,199,160,43,224,59,0,224,56,12,255,167,0,128,27,98,129,225,+3,3,224,31,6,103,105,151,250,192,99,129,63,64,7,64,247,226,204,0,+69,20,179,87,199,169,129,99,0,80,97,213,70,227,213,139,224,52,1,192,+0,224,140,14,192,33,224,139,2,65,37,169,16,129,57,66,61,96,239,197,+53,225,9,1,229,68,2,193,240,192,202,224,24,2,225,36,0,100,149,89,+146,162,131,0,53,235,33,0,224,156,3,96,11,163,187,128,217,2,54,32,+95,150,214,128,42,224,245,1,104,62,72,245,98,135,224,252,13,96,121,224,+44,10,151,218,64,73,228,44,0,228,40,0,64,0,64,21,96,34,227,55,+1,128,28,198,154,96,0,224,213,0,96,7,130,114,195,119,226,21,3,133,+169,193,100,226,128,1,253,217,0,96,66,64,24,227,57,0,161,123,97,47,+123,151,0,56,161,6,163,242,192,122,225,8,11,171,181,229,8,3,132,250,+0,50,64,77,231,242,0,224,230,3,129,165,132,213,161,235,193,140,161,201,+225,164,0,96,185,225,22,1,224,152,0,128,226,224,151,24,160,106,225,164,+0,129,209,193,94,64,81,138,32,224,158,4,224,88,43,128,172,192,88,231,+22,1,64,94,226,59,13,96,46,103,92,0,53,187,236,160,0,128,89,229,+194,14,225,60,1,99,65,228,183,1,100,118,96,25,145,65,96,67,225,108,+1,129,73,229,235,5,160,81,164,236,226,75,2,160,120,227,57,1,1,95,+49,77,145,70,159,86,249,0,32,162,21,224,59,1,132,60,225,14,1,226,+220,3,227,204,1,163,207,224,193,0,131,179,192,13,239,182,5,224,157,0,+224,191,1,230,173,18,129,214,224,133,7,64,97,227,73,1,1,48,53,224,+183,2,64,147,132,203,0,53,86,151,229,225,7,7,32,101,114,114,111,114,+32,125,101,231,128,78,128,72,133,22,229,28,1,224,126,19,227,227,5,161,+41,96,38,64,23,207,241,228,62,0,164,205,226,61,2,161,134,102,145,97,+33,161,65,97,249,224,16,3,129,244,130,16,193,78,131,91,224,13,9,225,+222,1,64,252,1,50,55,165,26,193,26,224,166,3,76,211,84,212,231,122,+0,229,234,8,161,69,108,66,111,235,64,40,225,76,1,5,115,121,110,116,+97,120,129,76,225,74,25,71,159,207,115,1,80,32,139,116,0,85,139,33,+140,43,2,75,50,32,64,12,139,188,74,125,0,65,137,55,67,181,3,10,+65,32,73,64,29,64,157,96,29,162,113,233,152,0,196,89,192,255,193,63,+192,19,219,231,180,128,97,40,225,101,0,96,8,75,136,2,49,55,54,130,+115,224,70,3,234,143,0,96,22,165,109,226,241,3,64,36,65,157,97,92,+69,18,129,72,0,52,197,110,2,55,54,53,96,5,118,0,245,83,3,237,+141,0,229,72,2,199,180,226,37,6,164,37,229,252,5,224,7,3,162,4,+226,102,1,226,13,0,165,253,64,178,64,60,224,33,12,128,27,224,26,6,+129,35,160,137,98,48,230,115,0,224,38,13,130,47,101,87,161,248,105,242,+137,247,173,88,96,229,96,11,205,105,163,189,0,64,66,14,65,242,64,7,+206,92,3,32,95,49,49,93,190,238,40,11,141,51,238,40,2,174,45,183,+159,138,191,164,81,1,54,53,228,175,1,160,114,65,160,225,155,6,73,80,+2,95,55,50,252,80,3,8,77,104,115,46,66,117,105,108,116,153,59,65,+178,1,53,32,96,35,2,95,49,51,87,210,225,197,2,224,58,6,5,80,+114,101,108,117,100,170,254,66,187,142,8,0,75,98,199,0,54,236,96,0,+129,67,64,35,224,11,2,192,8,210,137,79,166,195,57,64,247,131,56,64,+119,160,69,160,44,64,20,0,51,224,90,2,201,135,226,204,3,195,42,194,+205,230,92,3,192,125,130,202,128,32,128,26,2,95,49,50,127,125,2,95,+49,55,83,253,98,180,88,213,131,47,228,172,4,195,35,160,96,227,52,1,+227,172,2,233,220,1,96,23,224,25,11,96,251,228,214,3,224,182,0,164,+195,160,17,128,6,224,60,0,128,32,64,154,188,64,0,57,65,171,0,49,+82,52,226,10,2,1,95,53,132,152,112,211,174,124,78,109,1,49,55,101,+12,1,95,55,77,199,128,125,128,32,194,147,224,15,1,130,171,193,29,1,+53,52,64,48,128,130,1,95,53,111,158,128,146,0,95,143,105,102,173,117,+247,194,139,1,67,39,76,167,64,25,0,80,128,91,160,252,227,153,1,171,+53,141,134,132,5,64,18,64,44,131,88,160,162,161,12,163,70,128,143,0,+54,118,85,135,35,0,54,86,51,72,29,0,50,207,230,163,123,161,5,3,+66,32,95,55,102,9,1,49,53,235,72,0,77,135,64,202,0,54,117,235,+1,49,50,118,201,1,49,52,65,84,64,7,186,174,81,204,131,251,102,247,+96,96,64,6,99,24,130,81,1,95,49,166,3,161,14,112,113,100,45,106,+164,177,216,65,175,136,90,128,164,192,68,65,144,235,219,4,192,84,129,111,+224,20,4,0,89,225,74,0,197,68,194,56,161,25,194,81,64,0,96,24,+227,20,4,234,44,0,162,254,162,129,64,153,0,57,73,29,131,228,224,100,+11,192,9,96,10,246,72,3,192,153,199,159,226,228,0,244,185,5,64,103,+1,95,54,89,126,224,0,7,194,148,66,113,132,8,135,66,111,35,73,84,+192,128,224,117,7,224,7,3,224,205,2,64,18,134,49,131,225,227,119,2,+224,2,7,224,140,0,128,15,227,176,1,224,36,12,224,37,20,224,40,4,+224,41,34,235,168,0,0,39,131,240,235,10,17,228,202,0,160,55,192,1,+175,153,243,112,6,224,5,3,231,21,4,196,196,224,66,1,99,189,161,227,+132,86,237,17,1,108,177,1,54,57,227,209,1,163,133,242,187,0,196,51,+3,95,54,49,51,64,12,0,50,130,253,192,22,192,228,224,88,3,224,85,+9,192,50,230,192,0,0,95,101,135,160,0,197,12,224,2,17,226,244,3,+225,25,2,161,53,225,113,5,224,28,19,225,176,3,193,133,193,24,229,250,+4,224,20,0,224,8,2,1,95,57,238,232,0,225,170,0,225,108,1,224,+197,3,64,15,226,30,3,0,89,160,32,224,101,0,225,250,7,171,63,160,+42,192,19,197,172,96,129,160,172,226,105,7,192,92,160,62,192,195,98,26,+224,5,3,193,65,224,57,3,162,47,224,25,10,160,2,224,25,17,226,167,+1,225,112,3,192,164,64,19,226,245,1,225,39,5,133,232,205,231,232,211,+2,160,68,96,86,224,80,0,228,209,2,224,224,8,68,212,96,26,128,39,+0,53,102,175,64,53,202,78,228,55,0,64,126,155,240,71,240,230,192,7,+224,28,16,2,95,49,55,197,160,128,0,102,180,151,20,192,0,224,246,2,+226,20,3,129,7,224,210,4,160,247,224,128,7,224,215,0,224,236,3,224,+218,0,198,230,224,249,2,200,47,226,93,11,226,192,1,228,0,2,226,92,+255,226,92,45,226,90,1,96,0,226,2,14,225,67,3,64,13,226,8,31,+229,120,2,224,26,0,193,4,231,203,4,128,155,192,149,74,18,64,147,245,+4,3,64,0,96,149,64,106,227,2,13,127,219,224,120,8,224,136,10,237,+186,3,160,57,176,12,227,105,17,128,212,128,185,111,180,0,56,137,169,226,+238,7,230,201,2,160,3,234,65,5,225,76,2,224,90,1,232,138,3,98,+147,225,175,3,240,125,1,226,246,3,200,177,229,234,1,161,6,140,30,227,+142,16,64,84,243,115,3,128,0,225,103,4,128,179,64,40,0,80,137,255,+239,79,4,232,144,3,130,200,192,208,225,42,3,224,98,1,226,82,6,233,+156,1,224,89,8,163,79,64,251,64,66,65,62,135,82,224,80,4,224,75,+16,225,207,1,161,172,203,139,64,67,196,15,224,72,2,203,96,249,22,11,+2,110,111,116,90,143,4,111,114,116,101,100,184,106,160,0,73,224,221,56,+0,82,64,105,110,199,66,68,2,55,52,50,202,131,2,95,55,52,78,130,+203,84,65,113,187,62,251,139,6,0,32,142,177,0,54,84,155,192,93,145,+93,225,19,5,225,113,3,132,90,229,31,0,228,137,4,226,215,5,164,60,+224,26,0,224,69,0,225,202,1,64,0,96,13,235,103,4,224,28,1,227,+230,1,130,129,194,112,128,36,226,141,0,224,11,1,1,83,32,200,72,229,+147,28,162,180,228,227,0,97,248,144,60,223,129,194,239,243,93,5,163,40,+128,16,224,193,2,229,177,3,192,155,227,54,4,228,119,2,96,56,172,65,+1,48,51,231,11,4,225,47,2,96,103,225,80,0,230,121,7,224,38,50,+161,85,134,105,96,38,228,45,21,225,39,14,163,217,128,108,244,153,0,164,+31,224,21,14,165,137,161,11,129,238,85,254,133,127,245,93,7,225,74,1,+225,181,25,250,241,6,225,182,5,224,146,2,237,113,1,224,13,11,245,73,+14,161,42,230,61,2,98,147,224,185,1,224,0,3,230,45,0,224,183,29,+224,182,18,224,171,88,224,170,37,225,97,19,224,170,93,198,159,198,172,128,+1,195,225,224,16,0,232,211,0,128,14,224,206,14,224,96,0,192,54,192,+167,224,16,2,233,171,4,160,16,227,241,11,224,122,1,131,244,224,66,2,+233,12,3,128,1,96,223,148,156,128,209,160,88,166,62,131,177,232,97,1,+148,170,2,52,55,57,228,200,0,159,125,2,95,49,50,83,98,1,95,56,+81,127,230,87,2,228,82,9,241,189,0,64,139,97,197,128,97,193,77,128,+8,160,5,238,245,4,193,52,169,101,160,170,137,49,145,139,177,131,224,117,+0,195,195,229,208,5,230,4,1,128,27,225,74,0,224,217,4,192,68,209,+233,0,90,97,60,96,176,96,220,84,104,210,9,0,54,116,209,93,95,230,+180,3,192,97,160,126,160,118,160,17,96,196,100,130,152,186,243,61,2,1,+95,54,123,154,231,78,18,231,67,8,15,117,110,100,101,102,105,110,101,100,+32,109,111,100,117,108,101,231,83,7,111,151,97,171,0,79,225,141,0,192,+244,199,29,231,54,2,231,113,8,128,2,162,95,224,21,6,160,81,226,59,+1,96,69,163,53,1,95,56,150,124,128,87,112,96,231,61,0,231,79,0,+246,253,5,64,57,128,51,225,67,1,96,61,65,28,202,154,99,30,96,208,+236,7,7,224,148,1,171,16,98,221,160,135,244,101,1,137,12,1,90,32,+254,27,3,130,180,64,12,226,56,4,171,148,0,55,225,137,0,180,180,224,+78,4,96,202,248,79,0,224,133,37,1,64,75,224,57,0,192,63,66,78,+154,67,97,184,81,224,1,48,48,224,93,1,194,35,96,39,151,175,247,213,+6,1,46,46,66,1,64,30,0,54,247,124,10,65,154,160,20,236,198,5,+164,38,1,50,52,96,93,224,11,2,129,220,128,12,138,114,65,45,196,222,+170,1,133,78,64,20,192,65,128,0,224,48,16,224,40,7,66,179,105,57,+64,163,152,53,226,142,1,226,14,1,226,64,1,224,9,4,224,29,1,224,+9,4,233,176,1,233,186,2,228,64,3,107,102,75,37,98,136,1,50,48,+167,9,98,196,68,3,245,199,0,98,191,0,95,93,249,0,55,87,126,1,+95,55,236,66,0,66,152,4,50,51,52,32,95,89,62,80,84,0,48,245,+138,1,97,255,1,50,51,86,184,147,96,97,2,249,254,3,133,69,128,21,+224,23,10,140,6,245,209,13,166,193,228,193,1,168,204,132,87,226,220,2,+129,92,232,212,9,224,148,6,224,128,0,96,15,225,215,6,224,7,9,234,+218,27,224,166,2,96,16,231,105,1,239,1,3,161,181,229,227,1,237,243,+1,133,138,193,79,66,252,182,131,224,223,8,224,0,3,65,133,131,166,0,+95,125,173,64,6,65,214,160,119,225,173,15,195,176,225,176,36,225,24,5,+238,252,4,97,35,130,106,0,80,225,196,13,224,84,1,129,79,193,6,129,+1,192,39,227,167,7,128,195,68,84,210,194,226,3,30,160,228,224,85,26,+98,42,226,89,50,68,181,69,240,165,172,224,239,9,228,52,6,193,250,193,+75,226,54,1,224,13,5,199,61,96,153,160,43,236,85,2,236,88,1,226,+72,5,160,34,224,61,0,126,42,227,85,15,236,45,0,226,241,7,160,132,+224,10,2,225,175,1,133,98,225,49,6,70,225,172,215,166,18,233,47,8,+193,72,66,232,225,69,3,250,240,0,1,55,55,165,36,128,99,224,219,0,+224,156,9,241,57,17,192,54,193,56,227,123,1,225,51,0,193,40,133,18,+64,52,224,93,2,0,83,160,53,124,90,226,120,3,0,85,96,43,235,153,+4,0,95,114,62,0,85,101,242,192,216,227,193,1,64,0,226,150,12,224,+166,26,160,146,64,169,228,22,7,224,80,6,228,39,2,224,0,2,64,180,+111,84,229,212,5,88,235,105,36,133,1,227,166,16,225,217,6,124,77,200,+13,224,104,7,0,49,95,61,72,159,0,56,106,238,129,195,130,178,224,5,+0,64,64,2,55,56,57,231,248,0,224,6,5,192,7,97,113,0,52,105,+83,89,179,0,54,115,227,155,115,102,140,72,252,230,140,0,71,58,0,51,+103,58,3,85,32,75,52,96,196,64,18,155,144,105,132,89,246,228,253,0,+2,55,48,50,167,16,132,8,2,95,50,56,73,163,212,126,65,108,129,238,+103,29,1,55,53,72,133,1,51,57,162,165,233,149,0,100,55,96,56,233,+162,2,224,57,19,160,217,98,32,204,44,98,235,64,171,210,91,1,95,50,+71,126,64,17,146,15,96,242,98,135,77,153,96,117,96,11,138,152,128,13,+227,102,1,227,234,2,133,209,65,22,128,150,1,49,48,97,155,225,134,0,+96,31,1,48,54,66,205,227,166,2,96,87,65,63,64,160,228,224,1,160,+85,94,108,65,147,143,236,128,86,224,17,1,192,46,128,165,161,190,0,50,+172,240,65,8,0,56,66,13,160,249,64,99,94,127,0,50,102,119,129,249,+157,81,0,54,96,167,228,167,4,131,152,130,130,98,139,0,51,66,197,68,+42,72,185,172,26,2,79,32,35,74,96,99,15,2,95,49,49,70,229,0,+52,130,30,64,122,205,146,2,95,49,48,70,250,0,52,74,35,3,95,49,+57,51,67,76,64,9,2,56,49,32,240,11,0,96,104,67,212,224,44,3,+81,111,176,229,0,58,131,80,129,175,0,55,86,100,1,49,50,98,207,1,+51,49,106,230,66,154,1,49,50,66,226,72,106,71,129,64,49,138,219,64,+49,64,83,160,49,0,54,130,251,224,36,0,138,216,98,156,137,188,161,222,+230,183,0,193,185,191,122,133,1,0,83,97,189,65,45,65,76,0,57,235,+19,2,1,45,62,109,21,64,70,2,79,32,64,96,31,72,33,68,18,64,+64,196,60,160,68,128,71,164,109,224,74,7,0,61,160,74,226,46,2,64,+36,1,55,52,66,98,160,72,228,175,3,160,76,160,162,192,79,2,79,32,+35,76,189,224,121,0,226,190,5,192,41,164,224,135,156,226,116,3,228,242,+1,79,197,2,54,50,52,138,193,96,8,64,6,161,194,128,93,225,24,5,+0,53,194,235,161,8,96,15,64,106,230,142,1,225,73,9,6,79,32,35,+56,53,57,52,192,175,225,70,20,224,199,1,224,240,6,1,56,54,76,216,+225,34,3,225,61,11,193,17,225,18,1,99,16,224,16,3,98,18,238,146,+22,65,51,135,148,97,62,227,164,7,230,52,3,136,50,163,168,97,66,65,+76,0,52,195,244,64,36,227,162,7,227,25,22,64,115,241,23,6,225,195,+19,64,44,64,119,193,185,225,211,0,199,68,100,54,102,177,1,49,50,97,+105,128,85,99,247,66,73,0,48,195,240,67,59,0,54,133,48,160,81,99,+242,160,6,64,29,141,254,129,147,2,95,49,51,68,56,64,22,141,113,192,+22,80,124,96,22,134,77,226,252,1,10,80,114,105,109,105,116,105,118,101,+115,46,99,7,64,35,134,94,224,111,6,224,124,9,96,43,133,222,0,75,+233,103,0,0,83,163,110,130,114,224,5,4,77,105,151,3,193,204,1,95,+56,135,212,102,184,64,170,0,51,96,5,173,136,128,37,175,180,224,41,20,+96,137,134,86,166,31,71,85,70,246,66,103,0,95,167,180,122,56,100,158,+0,35,140,76,228,157,0,64,150,135,99,71,101,96,78,66,22,65,4,0,+54,71,90,0,56,239,145,7,225,53,2,164,136,98,243,172,102,197,122,229,+132,14,224,79,21,164,141,224,79,25,170,69,96,172,133,93,0,75,70,83,+64,14,130,48,129,10,0,56,69,186,0,48,69,186,90,25,66,11,96,12,+79,28,228,138,2,69,184,160,36,1,49,54,66,49,228,168,0,224,67,20,+0,54,99,229,199,24,224,68,1,105,73,70,211,186,178,224,68,7,1,49,+55,65,206,224,120,7,0,55,90,179,224,111,20,0,55,137,45,0,49,224,+31,1,97,81,224,15,6,65,2,209,20,224,96,1,83,228,71,59,147,234,+237,216,1,235,35,0,192,13,96,5,237,78,2,164,114,230,74,1,3,64,+67,32,60,247,97,1,192,21,80,144,224,35,9,132,61,226,200,1,248,87,+7,99,53,238,142,0,237,55,5,164,239,234,192,9,199,49,128,44,246,120,+6,195,137,192,69,64,7,238,138,9,133,64,237,70,0,224,26,7,239,202,+0,0,83,68,211,133,134,65,238,0,57,239,163,16,227,173,3,248,132,7,+224,146,3,237,115,2,236,252,2,237,126,0,165,225,224,83,1,249,236,4,+238,67,5,240,152,7,224,27,1,128,221,180,100,204,224,67,249,128,32,192,+102,64,36,3,95,53,57,49,244,115,0,180,212,192,0,226,88,2,216,38,+96,50,226,83,9,71,249,64,0,225,73,1,209,26,66,180,130,222,0,48,+237,54,3,231,5,0,235,118,0,247,143,7,86,164,3,49,48,51,32,74,+186,128,54,1,95,54,172,125,198,200,247,238,2,150,22,141,247,245,9,3,+225,204,1,138,133,0,53,239,218,1,67,38,134,37,1,80,32,64,11,134,+26,128,179,1,50,49,65,44,129,68,2,95,54,56,69,109,1,55,51,103,+30,0,54,128,112,229,152,0,68,205,96,136,97,235,64,71,134,62,3,85,+32,75,51,69,77,77,130,101,84,160,29,134,48,2,95,54,56,76,206,0,+85,161,185,225,191,3,225,207,1,224,1,7,226,25,2,224,37,16,224,35,+4,224,32,23,224,29,20,224,26,17,224,23,14,180,111,224,0,0,64,237,+172,235,70,69,235,28,1,255,160,11,1,37,84,101,246,230,147,1,64,41,+139,49,229,14,18,72,38,167,114,164,186,229,135,6,131,8,2,95,57,49,+224,53,0,68,60,113,45,0,83,111,209,137,124,196,74,228,76,2,163,8,+130,63,0,55,66,14,233,96,2,164,181,64,1,67,88,198,218,64,146,98,+56,0,64,77,216,129,30,4,95,49,49,56,55,86,227,96,36,226,246,0,+192,127,229,59,18,245,113,0,229,92,16,128,162,96,182,240,181,3,96,23,+144,182,128,29,196,123,128,147,228,49,10,96,24,242,133,2,206,132,96,46,+195,66,79,174,1,56,56,73,5,67,67,64,247,198,112,224,133,12,102,169,+224,132,8,228,32,2,96,105,64,12,97,142,136,165,2,95,49,53,241,92,+5,100,227,78,207,226,89,0,224,104,8,224,237,13,224,104,7,96,210,160,+77,224,185,4,141,144,73,159,111,244,64,137,193,160,177,116,0,67,68,54,+0,57,249,152,3,101,13,230,151,32,128,203,225,136,3,134,221,224,160,1,+230,132,9,135,119,136,61,161,174,244,19,1,229,96,2,244,15,0,160,73,+212,218,204,77,96,225,166,190,225,90,2,230,196,5,129,232,227,55,2,64,+71,74,44,1,48,57,68,243,0,50,98,187,227,68,3,65,66,199,109,232,+197,6,224,37,2,74,224,227,186,0,67,173,146,14,1,55,50,225,225,3,+96,121,0,50,111,96,1,48,57,99,35,175,246,192,119,192,160,241,140,2,+0,85,145,224,97,164,227,49,8,224,25,12,131,42,227,39,12,0,49,134,+66,251,133,1,160,4,99,225,161,32,226,218,11,224,55,8,99,39,113,229,+226,197,8,224,65,8,224,121,8,229,251,3,2,95,57,49,110,209,251,25,+0,129,19,115,225,233,12,82,177,134,64,17,205,166,192,0,69,143,140,16,+142,90,122,92,1,56,50,160,8,83,183,147,48,212,32,167,207,224,162,5,+228,195,12,135,141,228,228,27,233,92,9,192,25,229,139,2,190,213,224,49,+14,128,108,161,177,128,1,235,31,16,254,69,1,133,23,195,95,226,234,1,+64,49,0,57,237,208,1,160,79,235,139,6,229,91,0,72,57,96,155,100,+142,255,214,0,224,172,0,226,208,17,224,198,8,96,21,0,85,98,17,67,+164,162,70,224,242,13,225,35,2,128,89,198,232,231,37,4,101,211,0,53,+231,143,3,13,116,121,112,101,32,115,105,103,110,97,116,117,114,101,135,155,+128,225,248,77,4,225,34,4,225,28,13,64,42,231,152,10,113,168,65,43,+208,96,224,74,2,237,43,6,138,92,225,175,24,225,130,14,160,127,2,95,+57,48,96,16,225,126,12,128,0,224,56,4,66,242,142,86,224,116,11,1,+51,48,164,170,78,167,235,36,5,228,62,1,192,121,224,246,1,68,216,128,+254,193,167,103,91,1,50,55,125,129,1,52,53,68,51,96,205,165,3,225,+143,1,26,67,97,110,110,111,116,32,115,97,116,105,115,102,121,32,99,111,+110,115,116,114,97,105,110,116,58,32,97,156,244,59,0,181,33,215,213,224,+70,6,4,92,49,48,38,32,64,0,14,102,117,108,108,121,32,113,117,97,+108,105,102,105,101,100,160,69,3,95,49,52,48,228,179,1,97,3,0,54,+131,246,72,172,228,52,1,227,131,6,229,193,6,233,40,2,153,79,244,56,+1,96,9,225,16,4,66,119,133,41,226,124,21,225,223,1,98,128,160,13,+237,75,0,192,91,65,7,226,102,2,66,61,195,2,224,63,5,128,205,227,+48,0,224,32,1,160,14,224,31,3,64,2,96,96,226,8,3,0,51,225,+41,2,224,92,1,96,129,65,244,226,194,2,131,111,2,49,50,55,193,146,+0,54,71,92,134,29,250,112,11,100,197,198,61,0,85,100,217,81,154,192,+108,224,115,10,231,66,7,160,32,232,44,7,224,5,4,214,107,128,10,0,+55,148,37,2,39,32,95,74,172,98,221,195,49,96,0,225,45,15,148,158,+64,9,98,202,160,50,225,50,0,96,30,165,1,102,97,1,55,55,235,72,+6,64,114,4,49,50,57,51,32,77,193,160,229,250,14,0,148,20,1,49,+50,218,149,136,201,192,72,0,79,68,67,89,103,96,53,64,62,0,65,96,+38,161,42,251,69,4,110,30,128,21,4,95,49,53,50,50,231,157,5,64,+0,66,236,145,53,67,211,67,134,224,64,0,64,26,142,41,97,44,228,13,+8,196,130,97,200,96,250,106,62,103,5,96,2,226,13,4,97,29,99,69,+170,119,1,49,54,64,69,251,251,0,73,41,103,189,181,105,129,160,224,64,+2,137,218,239,80,6,64,213,66,233,64,171,142,201,64,73,0,48,74,183,+1,49,48,106,184,128,212,64,31,206,161,226,122,4,169,13,226,123,5,227,+189,2,224,250,7,226,255,0,225,222,0,184,194,227,126,2,121,236,209,107,+132,56,106,208,97,244,0,53,79,125,84,170,192,42,195,101,160,242,224,71,+2,96,47,0,51,72,104,128,153,133,43,1,49,49,106,81,226,141,0,99,+216,160,108,130,246,64,93,224,52,1,226,71,1,224,52,7,192,223,137,133,+226,235,7,128,82,224,154,1,195,63,225,212,3,64,35,0,85,227,133,4,+166,12,131,92,128,203,149,194,166,247,231,181,0,225,93,12,1,55,49,163,+200,168,64,225,25,15,163,64,235,172,0,66,77,112,162,230,106,0,225,18,+1,173,112,160,220,97,136,196,36,128,13,160,38,225,193,6,133,84,2,49,+55,49,107,123,64,87,0,51,227,195,4,160,228,128,118,119,216,85,224,253,+30,1,160,115,102,237,96,106,138,168,192,118,224,109,8,97,49,130,92,128,+12,1,53,52,119,122,97,47,128,203,132,186,165,20,229,27,1,198,4,229,+127,7,131,83,232,69,0,227,76,4,128,135,153,220,87,229,239,232,4,160,+88,0,85,132,88,64,68,160,132,100,179,0,56,64,130,132,114,97,177,183,+141,132,189,163,195,160,0,67,117,145,249,0,67,69,97,2,64,95,56,111,+253,64,22,215,183,237,45,12,164,66,225,241,5,64,168,237,157,7,64,189,+240,229,3,228,99,0,98,53,164,136,235,95,11,131,196,234,127,14,135,222,+225,190,0,231,245,5,198,153,85,189,228,24,9,96,166,230,148,4,225,105,+1,0,80,245,69,7,230,170,1,239,52,8,237,149,1,224,246,12,162,15,+224,250,9,130,104,237,67,0,224,162,49,0,75,224,35,4,255,58,1,237,+228,10,225,41,9,225,40,0,225,34,53,229,150,5,226,21,0,232,99,5,+91,100,1,53,48,248,187,1,66,146,224,115,0,230,152,2,236,108,20,226,+6,51,131,22,0,55,232,219,0,234,209,3,234,201,8,31,105,110,102,101,+114,32,114,101,99,117,114,115,105,118,101,32,112,97,116,116,101,114,110,32,+115,121,110,111,110,121,109,32,74,3,0,115,201,250,225,91,12,230,162,0,+227,239,8,237,25,5,246,197,8,64,0,226,113,10,237,42,2,86,65,0,+66,96,6,224,92,9,236,185,1,132,145,224,94,12,225,178,9,229,222,11,+108,150,226,185,2,236,53,23,198,11,224,30,5,229,157,20,96,146,232,132,+10,234,132,4,229,20,8,229,10,10,64,0,162,118,197,234,241,144,1,98,+199,64,19,128,10,112,11,197,169,0,55,64,103,84,60,230,60,12,230,80,+12,160,182,128,0,0,58,149,83,141,136,1,49,55,81,26,112,115,96,24,+144,148,199,29,79,19,205,63,240,239,1,192,7,0,83,71,160,195,190,224,+32,9,224,206,0,96,216,113,199,224,129,2,142,10,0,83,168,192,225,44,+6,242,52,1,236,37,8,206,46,128,77,236,167,1,225,140,3,65,50,246,+214,2,1,55,54,96,50,136,0,230,96,0,97,78,224,93,5,226,24,9,+239,56,5,1,51,48,239,128,0,225,221,8,159,182,97,179,236,91,3,230,+198,1,64,244,0,54,241,242,2,96,186,0,80,185,70,255,190,2,107,128,+64,57,2,52,52,53,96,133,64,35,138,184,226,3,0,0,52,94,111,1,+95,56,72,158,97,239,0,54,213,76,64,110,137,154,181,224,64,117,139,132,+146,232,242,238,1,194,78,149,155,126,63,140,8,3,53,32,35,57,65,93,+174,248,0,52,231,118,0,1,95,52,74,252,2,52,53,54,251,136,0,224,+67,11,226,119,4,75,48,65,94,0,55,66,145,96,86,1,35,49,118,43,+64,151,140,1,1,95,52,67,214,2,49,55,49,95,135,96,39,98,142,64,+122,192,13,95,78,2,95,49,52,102,45,0,50,105,11,224,39,0,0,55,+224,93,0,96,13,65,148,224,13,1,122,101,96,13,64,110,139,196,67,111,+65,60,2,49,50,54,159,210,0,54,104,65,101,229,1,32,64,160,216,64,+29,65,133,64,54,139,219,226,130,3,0,52,64,57,0,75,226,149,9,89,+132,232,169,1,240,211,0,228,123,6,245,245,4,130,110,232,169,6,0,52,+77,77,227,119,0,226,105,3,2,95,53,57,64,73,234,9,2,64,161,169,+7,162,207,100,188,130,168,98,66,96,34,137,19,0,67,131,23,68,171,96,+22,64,37,64,219,123,157,71,217,123,151,0,51,73,40,187,151,2,95,49,+49,193,8,64,21,255,1,22,183,98,231,24,0,222,249,100,44,231,7,11,+98,90,224,25,12,96,80,231,59,13,98,215,231,59,9,96,22,91,255,130,+148,128,117,128,146,164,141,64,9,65,27,239,209,0,224,68,8,96,117,67,+190,229,205,4,224,43,13,96,187,1,85,32,155,44,2,39,32,64,96,169,+196,253,224,124,2,142,53,196,174,230,136,7,139,151,101,32,228,177,1,96,+23,205,89,224,27,7,64,79,224,156,7,64,0,128,134,224,240,1,193,116,+225,56,1,128,45,192,153,225,61,5,224,27,1,255,87,21,196,187,224,98,+0,205,227,224,13,5,229,92,0,160,146,96,2,239,180,5,96,177,128,24,+75,71,160,64,239,194,12,224,122,3,197,105,180,229,192,118,224,22,3,234,+82,1,224,83,0,2,95,49,50,86,200,68,163,164,171,187,29,1,50,49,+66,242,68,16,236,100,8,193,36,128,94,1,51,56,129,152,0,48,234,163,+2,128,51,1,49,54,99,34,224,112,2,69,125,96,18,224,66,5,0,52,+119,202,224,66,6,128,129,68,211,96,180,255,84,8,0,64,254,95,7,225,+159,17,130,248,226,7,0,225,110,6,129,89,161,137,226,80,3,225,69,2,+147,201,237,245,2,224,2,0,97,162,224,40,1,225,168,16,226,37,4,164,+141,225,176,4,225,148,1,98,33,224,29,18,201,22,161,70,129,73,193,97,+2,50,51,52,101,112,129,215,225,183,1,225,180,40,226,2,20,226,94,2,+161,209,224,139,4,218,38,192,33,67,228,113,160,64,16,135,101,225,159,3,+64,10,105,26,177,219,161,139,150,89,193,190,224,80,0,82,148,242,146,6,+130,202,230,171,0,194,59,65,0,104,11,99,207,138,45,99,209,116,253,224,+0,0,226,120,38,106,49,226,43,10,160,75,235,163,5,250,51,2,128,249,+235,196,8,233,147,5,251,229,4,66,46,239,144,9,246,199,11,2,63,63,+63,140,193,3,95,49,54,53,64,169,160,70,120,129,226,136,7,160,0,70,+186,216,119,244,107,19,128,135,175,220,0,67,121,221,241,198,2,101,69,224,+99,6,226,26,6,226,13,1,153,254,199,217,132,119,97,89,64,45,0,53,+75,124,149,52,4,48,32,64,75,51,202,143,64,44,170,17,137,237,244,184,+2,96,241,148,142,102,78,226,20,3,64,223,0,54,232,1,0,208,152,2,+95,49,54,209,159,235,33,0,1,49,53,64,234,118,21,131,87,234,230,1,+131,70,98,141,96,159,0,85,64,34,96,152,128,157,192,38,99,80,64,138,+100,201,246,85,15,64,62,162,100,96,228,64,162,138,132,66,160,130,246,186,+152,225,246,1,154,223,225,92,4,121,36,228,143,6,231,217,0,198,186,119,+103,162,52,239,251,5,1,32,67,246,121,0,65,73,128,100,130,236,160,14,+160,55,68,246,165,54,232,55,1,103,211,115,210,197,57,130,27,192,30,243,+250,4,128,38,160,26,194,73,248,66,8,228,156,3,130,100,192,203,192,75,+128,85,182,246,204,171,243,150,7,204,194,97,174,0,49,68,185,64,9,110,+55,67,254,1,51,56,172,12,98,126,1,49,51,93,37,235,148,2,225,167,+1,192,80,100,158,192,84,195,246,224,241,2,224,228,42,224,222,0,224,13,+1,163,75,224,18,1,96,92,128,7,224,225,5,224,6,0,160,230,224,158,+3,64,209,116,52,224,175,4,64,0,107,216,3,48,48,32,64,65,243,193,+237,1,50,56,98,29,96,181,102,141,230,114,10,224,28,1,66,252,105,168,+160,18,224,41,5,224,29,0,98,207,140,188,251,198,15,130,148,194,125,128,+210,152,101,64,59,0,51,139,118,67,54,7,95,49,49,52,50,32,95,52,+75,93,101,174,64,31,140,114,132,94,98,215,228,180,16,225,171,2,225,165,+3,225,119,4,233,172,4,193,151,233,125,2,224,58,7,194,138,224,22,0,+224,28,4,226,1,4,224,2,4,192,32,128,104,232,2,1,224,67,1,232,+145,6,227,73,1,229,90,8,229,91,7,224,98,1,229,150,0,199,112,224,+234,1,251,27,1,64,13,231,63,9,135,36,66,91,231,10,7,233,110,2,+229,48,2,128,103,166,20,225,66,1,224,197,10,230,220,6,192,20,249,10,+2,163,212,236,58,1,242,206,7,224,50,11,231,123,8,227,125,4,224,41,+2,225,62,8,225,125,0,226,194,5,96,169,162,198,128,54,169,33,229,201,+16,160,51,134,145,230,121,6,224,33,3,166,73,114,204,208,49,129,63,237,+138,7,96,189,197,4,204,207,80,207,5,64,64,95,54,49,51,251,69,7,+128,119,1,55,51,255,115,3,26,51,52,38,115,114,99,47,77,105,99,114,+111,72,115,47,84,121,112,101,67,104,101,99,107,46,104,115,64,27,7,44,+49,52,51,49,58,50,56,136,42,241,141,2,106,83,113,101,138,3,224,230,+3,64,219,66,5,225,57,19,106,116,135,42,225,63,11,236,8,2,64,194,+153,83,96,26,224,211,61,3,48,58,50,50,192,211,232,52,0,0,64,241,+209,1,71,48,170,150,97,95,229,194,0,224,122,6,226,108,9,243,184,3,+128,186,249,108,4,232,115,12,144,117,228,156,12,0,50,227,151,2,233,216,+10,70,160,192,18,1,67,39,235,47,6,164,44,231,135,5,228,194,2,192,+212,238,186,1,163,27,160,31,204,196,128,11,194,108,160,19,235,120,1,192,+225,162,183,241,161,17,232,148,4,160,85,243,252,4,160,188,192,221,0,54,+98,83,98,212,115,69,224,0,1,166,169,225,49,11,0,53,117,206,224,65,+0,81,188,103,201,1,52,32,148,188,1,55,54,241,240,3,70,228,181,189,+81,184,121,147,113,185,0,54,82,23,177,185,1,64,58,128,72,70,104,5,+54,56,52,32,75,32,81,27,224,1,13,143,179,192,0,65,192,135,26,64,+66,145,245,130,82,143,72,83,72,79,72,70,183,129,24,248,151,3,146,92,+69,83,1,55,57,226,223,2,5,101,120,112,111,114,116,98,189,64,85,139,+144,88,227,227,26,6,64,120,3,95,50,49,50,224,58,2,6,116,121,81,+73,100,101,110,128,60,1,64,85,138,19,128,70,0,54,235,215,1,2,49,+50,55,107,52,226,116,14,251,222,23,76,80,141,66,224,61,4,224,58,11,+226,31,5,0,54,219,54,224,54,38,0,56,115,161,224,54,40,0,57,166,+177,241,73,5,65,11,139,96,104,144,236,137,3,195,37,192,244,224,57,2,+248,53,4,109,71,236,42,0,224,147,15,0,49,104,168,227,22,14,99,100,+232,21,6,232,142,1,232,111,7,160,186,224,47,7,192,5,227,38,11,0,+52,203,180,128,0,226,194,3,231,168,1,64,13,226,2,6,232,62,5,161,+24,0,64,252,200,0,67,172,251,101,2,96,242,1,51,49,226,129,2,91,+94,7,97,32,99,108,97,115,115,32,98,133,1,95,54,143,111,225,136,8,+224,150,7,225,24,2,224,28,13,227,122,1,224,54,9,227,150,2,64,14,+233,81,1,224,2,6,224,249,3,251,89,5,148,128,192,5,218,92,118,168,+186,93,143,62,227,129,3,183,114,100,67,239,165,2,236,88,5,128,0,239,+228,7,252,177,15,1,49,49,118,143,225,80,1,26,115,117,112,101,114,102,+108,111,117,115,32,105,110,115,116,97,110,99,101,32,98,105,110,100,105,110,+103,131,229,224,0,2,225,23,9,128,1,235,20,20,224,59,4,194,92,242,+62,0,175,211,225,57,1,224,101,0,108,161,192,97,128,55,244,181,7,224,+144,4,88,149,201,12,226,201,6,202,144,224,80,6,128,18,224,94,1,128,+16,224,13,4,128,10,230,82,0,240,13,1,231,131,4,64,0,232,217,0,+225,39,10,226,154,10,169,162,224,2,6,192,165,224,30,3,226,82,2,103,+126,0,66,96,37,97,221,252,198,10,224,250,24,202,27,0,57,239,117,3,+192,166,1,51,53,70,187,235,130,0,226,232,6,105,135,134,113,170,156,137,+167,192,69,228,235,1,163,182,64,22,105,116,96,50,224,56,1,89,229,71,+45,81,25,226,39,1,160,132,96,47,225,134,1,238,75,0,224,32,0,2,+49,51,53,205,166,224,20,2,0,52,140,129,160,14,187,164,128,238,64,209,+64,64,128,40,1,54,52,67,0,64,9,225,195,2,69,206,207,53,96,54,+82,37,219,201,233,216,5,148,65,213,218,233,211,6,145,204,64,104,150,27,+128,195,168,225,64,45,82,83,224,192,5,224,0,4,226,69,3,200,186,96,+83,195,189,130,226,2,95,49,52,90,125,226,127,2,70,118,143,7,96,241,+97,94,161,133,64,67,198,62,96,14,0,50,102,240,161,106,0,67,82,161,+0,53,83,150,68,55,0,35,91,79,96,95,121,12,128,87,0,51,96,87,+228,50,1,68,39,0,34,82,74,96,87,104,60,100,182,128,120,132,215,126,+190,159,80,70,173,65,4,245,44,0,179,137,2,95,56,53,212,86,187,236,+136,78,2,95,54,55,143,125,97,146,137,93,69,38,137,205,145,94,1,95,+50,72,183,160,19,64,41,137,135,0,83,139,118,166,223,161,242,249,121,10,+128,18,71,16,224,32,9,128,247,234,175,1,231,183,1,192,25,0,85,64,+207,130,76,231,142,0,110,68,130,72,0,56,170,107,224,66,11,224,65,6,+227,87,0,224,71,1,192,224,96,78,201,33,162,187,233,37,3,172,28,2,+54,56,56,228,2,8,224,96,62,160,92,160,29,232,173,13,0,58,137,61,+124,185,0,54,86,37,0,49,66,64,64,21,234,172,0,232,192,37,96,186,+150,187,232,118,12,0,53,129,132,228,106,4,224,96,1,131,138,97,217,64,+94,0,54,192,86,96,85,237,139,0,140,131,64,58,237,108,7,96,28,99,+176,224,60,2,2,95,52,55,160,91,195,213,224,56,1,225,23,5,128,19,+70,45,129,156,149,162,1,53,50,227,232,6,231,153,15,98,96,227,102,1,+9,109,97,108,102,111,114,109,101,100,32,71,150,11,100,97,108,111,110,101,+32,100,101,114,105,118,231,155,1,192,147,225,15,3,233,113,7,96,17,128,+215,170,5,76,165,169,112,98,40,67,42,227,39,11,226,191,13,76,188,0,+90,197,229,232,226,4,96,251,226,140,6,224,45,15,147,130,129,14,128,28,+225,17,15,196,184,234,4,5,12,100,97,116,97,47,110,101,119,116,121,112,+101,32,234,9,5,229,127,6,163,149,240,95,1,130,182,216,136,130,184,108,+117,130,185,0,54,165,70,230,128,1,69,35,105,180,70,18,1,50,50,99,+231,1,54,55,124,180,77,207,148,240,224,191,9,141,133,224,189,8,2,67,+97,110,96,192,65,201,192,186,0,49,66,221,1,54,56,230,130,1,162,93,+246,151,4,97,50,229,250,4,64,174,140,108,0,79,87,95,1,50,50,69,+39,66,110,224,109,1,11,68,97,116,97,46,66,111,117,110,100,101,100,192,+7,160,115,0,54,110,202,224,57,21,3,69,110,117,109,96,4,192,51,101,+155,224,51,21,224,4,0,224,51,0,64,171,224,103,22,3,113,46,69,113,+224,47,0,65,171,224,47,21,4,73,120,46,73,120,224,47,0,69,113,224,+47,21,2,79,114,100,64,3,224,49,0,224,249,25,81,246,3,97,98,108,+101,224,8,0,224,59,0,71,61,224,59,16,11,71,72,67,46,71,101,110,+101,114,105,99,115,192,8,224,167,29,29,76,97,110,103,117,97,103,101,46,+72,97,115,107,101,108,108,46,84,72,46,83,121,110,116,97,120,46,76,105,+102,143,115,66,112,225,128,20,17,84,101,120,116,46,82,101,97,100,46,73,+110,116,101,114,110,97,108,96,13,224,60,0,66,97,224,60,21,3,83,104,+111,119,96,4,224,51,0,72,128,232,152,4,66,118,136,108,132,53,108,184,+100,60,152,33,204,166,0,49,68,101,224,94,1,224,84,0,226,224,2,255,+56,0,160,10,227,115,0,252,136,6,130,175,0,55,196,197,116,173,245,129,+0,240,108,0,206,229,227,188,5,64,61,224,17,0,224,20,3,224,21,7,+224,24,1,224,25,11,224,28,1,224,29,4,224,83,1,96,5,230,17,7,+224,49,16,224,2,3,235,247,0,165,174,236,27,11,149,208,124,120,224,83,+25,224,80,2,129,36,224,81,9,172,2,203,139,225,166,1,7,115,104,111,+119,115,80,114,101,130,182,224,108,20,203,172,192,103,224,1,1,188,47,224,+25,10,239,74,0,224,22,14,224,104,11,142,24,246,17,2,224,201,5,124,+195,160,5,152,142,99,105,64,55,0,79,98,49,0,79,218,215,226,198,4,+224,210,12,128,2,192,34,224,208,2,200,61,161,229,230,102,2,98,243,67,+40,225,241,2,224,220,5,224,224,4,224,28,22,224,243,3,128,28,170,173,+192,2,231,57,1,224,67,14,224,65,8,239,100,0,224,8,13,64,44,160,+218,254,13,1,0,49,108,250,0,85,227,190,2,66,23,4,80,97,114,101,+110,194,23,192,100,128,70,142,145,128,52,2,79,32,35,72,95,161,109,161,+31,1,49,50,129,31,0,35,219,237,226,154,3,96,51,0,51,224,51,1,+235,61,2,64,37,205,65,225,105,5,206,45,1,85,32,179,84,224,150,1,+224,2,0,250,48,5,144,85,0,64,100,172,226,47,0,226,59,0,64,5,+161,252,225,238,2,242,201,1,64,9,132,117,128,137,96,242,120,89,128,146,+3,79,32,35,49,67,160,226,101,0,128,116,64,50,96,223,71,179,224,223,+1,96,215,238,237,0,64,1,179,181,128,51,224,111,29,75,190,192,82,1,+85,32,117,179,192,12,96,141,0,53,225,133,1,64,60,0,49,70,248,153,+34,0,53,251,105,2,253,223,1,70,165,0,53,160,201,0,48,236,84,4,+96,10,64,4,161,177,109,149,2,64,95,53,140,35,64,202,106,82,224,31,+3,0,56,78,146,226,66,7,2,83,116,114,234,191,1,194,26,176,71,224,+58,1,226,126,13,228,150,3,226,85,6,224,51,2,65,105,0,54,224,187,+0,93,214,174,117,219,85,111,130,141,165,239,87,6,126,7,2,55,50,48,+97,60,88,206,225,0,1,70,244,143,9,68,221,68,102,1,53,48,110,137,+1,56,49,66,40,97,152,64,121,193,53,122,146,0,49,97,74,0,52,225,+164,1,69,21,138,59,64,79,254,93,3,64,81,242,223,2,65,136,133,235,+226,204,0,231,18,15,98,45,235,140,8,64,20,146,41,97,26,66,151,128,+17,64,70,229,250,14,3,114,101,97,100,225,98,0,128,45,99,123,0,55,+109,123,65,163,96,165,65,214,241,203,2,129,76,224,69,1,4,101,114,114,+111,114,129,165,64,29,97,126,129,227,224,105,9,0,32,139,10,2,102,105,+110,170,150,226,105,3,128,4,225,162,5,97,55,144,23,0,75,124,19,192,+243,160,160,64,30,144,12,2,75,32,90,145,172,236,128,1,225,61,0,244,+167,7,231,193,0,231,190,8,228,77,3,135,85,232,17,0,251,10,2,231,+153,0,162,193,129,35,128,116,244,52,16,224,87,5,194,3,225,154,14,6,+116,121,112,101,82,101,112,161,35,192,117,83,176,0,79,90,181,66,138,227,+232,1,64,2,160,126,103,15,0,51,186,155,225,169,7,8,109,107,84,121,+67,111,110,65,112,224,87,1,137,66,224,55,29,128,52,151,181,227,100,0,+131,204,130,227,224,30,26,1,95,56,83,12,0,56,244,120,5,225,252,0,+250,206,4,64,0,0,58,139,127,234,122,39,203,250,160,145,64,1,234,121,+42,165,152,226,35,7,225,199,7,227,113,2,227,135,2,225,221,20,5,99,+111,109,112,97,114,140,98,101,169,95,126,98,105,239,183,4,234,241,10,234,+251,4,247,51,2,106,171,234,149,0,128,5,170,21,128,68,160,74,201,44,+64,49,100,46,239,190,3,243,72,6,2,32,95,50,108,12,233,135,2,0,+32,134,0,197,92,161,228,228,33,23,1,60,62,225,141,1,160,137,96,47,+1,52,52,150,43,224,75,35,225,58,4,64,0,255,145,0,224,52,18,1,+69,81,192,47,199,232,225,165,0,225,19,1,97,10,227,93,6,224,83,18,+1,76,84,233,24,4,224,78,8,74,140,160,75,251,239,5,224,81,16,0,+71,192,81,161,143,138,195,231,173,23,160,37,224,29,5,232,38,2,227,92,+0,229,89,7,131,93,147,184,1,75,51,96,185,230,144,9,229,113,9,96,+53,209,77,227,147,34,175,239,96,0,227,146,138,1,61,61,227,141,0,165,+11,128,59,137,178,148,102,138,53,227,162,3,171,69,234,182,1,195,92,236,+132,2,64,46,236,145,7,227,105,79,1,38,38,227,105,65,193,17,64,0,+227,100,27,2,84,114,117,227,150,0,226,179,22,226,172,15,232,131,5,227,+63,0,227,148,33,3,70,97,108,115,192,132,128,44,226,254,22,0,54,147,+253,65,117,150,134,129,129,129,237,77,122,181,214,110,222,97,247,193,235,139,+202,96,10,234,104,0,164,0,217,19,90,243,230,209,4,160,28,203,213,182,+227,160,142,96,246,5,52,48,32,95,52,53,96,35,1,57,51,153,64,4,+95,49,56,49,32,184,75,72,194,0,51,217,79,235,253,0,64,200,148,23,+131,77,234,91,25,246,52,7,234,91,1,247,248,4,97,142,97,172,67,74,+164,0,129,87,64,115,210,20,64,96,0,50,224,53,0,104,168,245,1,3,+9,87,97,114,110,105,110,103,58,32,99,245,10,9,227,107,0,161,13,141,+248,224,66,8,4,32,121,101,116,44,128,49,99,25,90,13,225,206,11,0,+51,160,145,130,96,99,194,96,209,97,191,64,32,235,130,1,2,73,79,46,+95,10,3,111,114,109,73,203,55,66,88,0,49,95,110,65,52,1,50,54,+153,231,192,16,96,62,138,137,167,100,195,189,132,25,114,137,129,127,207,156,+224,13,9,230,126,0,77,74,0,53,64,240,1,54,54,84,95,228,253,80,+128,79,228,253,24,64,9,245,246,0,96,80,142,126,164,55,157,4,171,88,+171,93,217,19,231,64,2,96,104,131,10,163,231,96,137,204,17,173,186,96,+210,0,52,87,91,98,232,174,196,229,166,30,1,116,111,224,166,42,227,183,+4,242,45,0,192,111,224,164,10,132,47,163,211,224,175,13,228,93,2,226,+137,8,231,8,22,224,192,0,130,83,140,190,0,85,71,131,163,222,102,12,+198,18,0,58,130,34,231,110,39,247,251,3,96,0,226,140,5,226,109,3,+241,51,5,226,123,12,228,57,2,64,23,234,153,1,224,16,0,224,13,13,+202,164,224,93,0,237,115,11,224,48,5,128,2,170,187,162,97,212,206,245,+17,2,96,74,199,124,160,94,237,88,1,162,63,227,27,7,0,82,237,53,+7,227,51,0,224,51,17,3,66,32,82,32,220,20,230,76,1,128,5,226,+159,9,2,109,97,120,97,121,162,161,224,31,9,1,105,110,224,31,2,226,+58,6,253,13,4,194,170,237,39,0,195,216,102,143,166,105,0,52,64,27,+230,20,9,226,186,3,162,66,137,231,104,199,242,253,6,129,204,225,255,10,+239,53,7,227,72,5,239,17,5,71,16,0,51,129,213,254,97,2,164,137,+107,3,64,60,164,221,2,49,54,54,97,197,161,218,167,75,3,95,49,50,+52,113,165,96,18,0,53,90,246,2,49,51,57,96,122,3,67,39,32,89,+128,117,0,80,137,82,96,92,224,127,3,234,75,13,192,175,224,165,1,0,+89,225,74,0,224,201,0,97,13,149,101,224,50,3,128,47,128,121,224,206,+0,192,52,128,46,194,131,138,9,194,236,161,12,64,225,128,10,99,199,165,+40,4,51,54,57,32,95,114,184,134,228,1,51,48,172,120,130,85,147,171,+2,49,50,57,252,190,0,224,97,22,225,34,2,98,48,193,246,65,99,132,+142,64,9,226,12,2,225,101,0,227,197,2,194,83,68,69,0,48,240,180,+3,160,142,1,54,54,224,142,0,227,186,3,66,86,140,8,2,85,32,90,+201,2,64,20,0,54,96,20,90,117,64,62,0,55,96,148,128,11,95,101,+97,235,128,20,96,45,136,185,125,114,255,200,12,193,117,96,157,96,187,111,+46,224,225,1,225,64,1,64,78,136,148,0,83,133,40,230,9,1,3,95,+49,53,49,72,53,1,49,52,84,44,160,122,200,46,161,5,254,146,16,129,+113,253,215,24,161,132,72,206,160,7,246,229,3,253,245,6,64,127,136,141,+121,60,136,80,232,77,0,255,150,2,236,97,1,255,152,5,229,71,5,238,+98,4,0,85,131,44,134,251,245,99,0,0,56,96,44,68,32,137,32,140,+226,224,55,1,160,190,0,54,72,248,255,214,6,224,82,48,160,78,192,240,+137,63,129,77,224,59,0,1,95,50,64,23,194,234,3,95,57,49,57,230,+29,1,85,229,0,57,97,78,132,16,0,49,96,54,92,204,131,68,214,215,+0,89,228,27,0,232,6,11,0,90,97,95,171,209,168,24,67,214,227,208,+5,224,57,1,64,1,119,157,192,242,163,251,195,97,249,147,1,224,0,0,+64,221,135,201,131,86,228,220,0,192,79,96,244,229,91,18,228,178,1,252,+151,0,198,225,224,2,1,96,40,224,79,1,252,215,1,224,39,6,252,215,+11,224,37,0,106,169,128,29,96,68,224,61,16,160,62,224,29,7,96,2,+229,240,9,128,0,129,103,232,88,11,224,16,0,224,192,2,224,42,0,162,+58,128,0,193,58,96,105,225,65,1,224,81,8,136,36,161,10,136,29,116,+192,226,126,1,239,79,0,198,133,195,233,0,53,130,179,98,239,0,53,130,+180,225,212,3,224,236,6,168,141,192,105,221,76,224,40,3,249,218,10,64,+8,203,37,128,7,203,254,162,137,160,57,234,145,12,64,153,1,50,57,74,+7,133,87,133,63,66,252,146,82,240,74,0,224,167,2,230,233,2,163,75,+224,90,35,136,50,160,85,96,67,163,19,4,64,95,50,51,56,195,112,230,+21,0,250,80,3,224,139,9,224,137,1,130,61,129,120,224,5,18,134,207,+0,85,96,197,228,231,0,0,50,101,138,0,49,124,65,171,32,102,245,224,+0,3,225,85,4,226,122,6,227,42,3,129,29,224,18,3,194,64,225,238,+5,224,60,11,234,119,2,241,161,1,202,145,161,142,196,34,160,250,162,193,+160,151,66,101,0,51,96,230,208,185,144,29,2,49,54,53,198,96,110,168,+134,123,0,49,219,32,226,174,0,225,173,8,208,114,232,43,4,225,231,9,+237,69,4,64,109,97,227,241,102,14,134,165,128,101,96,11,229,255,0,225,+31,3,224,2,6,193,66,224,244,3,225,74,18,236,13,5,225,89,85,224,+61,0,225,89,58,228,19,20,96,145,101,18,225,111,8,169,106,228,39,67,+64,38,246,90,1,228,54,47,228,55,8,224,12,3,128,156,197,153,246,206,+19,192,56,172,20,192,62,228,52,8,105,15,66,125,232,111,7,228,140,20,+228,106,16,128,64,205,26,192,46,65,112,64,16,130,43,104,143,82,163,237,+126,2,6,114,101,99,83,101,108,69,252,177,1,243,159,6,64,237,235,0,+4,218,184,0,58,136,135,232,188,0,224,37,1,126,63,224,97,1,2,103,+101,116,205,219,224,74,3,64,63,141,130,224,42,1,6,115,101,116,70,105,+101,108,78,11,64,30,139,74,224,30,1,13,68,97,116,97,46,82,101,99,+111,114,100,115,46,83,224,43,5,0,54,224,43,6,0,103,224,30,5,139,+82,224,74,14,2,72,97,115,224,43,3,211,196,96,215,150,28,97,72,0,+50,128,30,235,34,1,160,28,128,6,64,26,138,189,133,178,225,198,13,227,+75,9,64,55,202,4,106,247,247,66,4,234,224,1,106,51,234,225,16,98,+107,67,59,128,182,128,128,192,23,224,1,1,233,110,20,229,245,8,160,11,+192,31,128,88,226,218,1,230,93,3,245,93,3,224,44,2,192,5,96,14,+2,95,49,54,117,218,226,83,8,226,248,0,251,236,0,175,134,194,180,0,+54,108,161,5,95,49,51,48,51,32,146,109,108,240,231,27,6,97,101,2,+49,55,51,225,230,2,27,92,51,52,38,115,114,99,47,77,105,99,114,111,+72,115,47,84,121,112,101,67,104,101,99,107,46,104,115,64,27,7,44,49,+49,57,50,58,50,56,130,160,184,157,128,143,96,118,77,31,238,128,8,225,+83,7,241,187,7,197,145,197,183,101,186,238,135,0,240,112,6,224,5,3,+170,206,224,88,0,125,3,224,16,2,101,27,224,13,0,224,251,10,2,48,+53,48,225,85,4,224,56,15,224,90,1,229,195,7,171,9,234,224,6,129,+227,230,216,0,192,72,192,76,234,101,9,160,36,230,192,3,65,66,0,52,+118,207,160,34,230,196,0,229,96,1,207,202,65,84,0,53,78,156,194,24,+239,146,25,230,164,12,129,36,2,95,54,48,237,143,0,0,53,84,181,165,+130,237,33,9,128,231,229,178,1,195,123,129,187,193,73,192,184,236,250,13,+225,52,0,179,43,140,187,129,68,205,83,171,44,64,230,0,52,118,200,99,+66,133,155,229,127,3,165,108,226,207,1,7,110,111,77,101,116,104,111,100,+229,175,2,0,64,203,121,224,223,49,226,101,1,224,222,22,97,221,67,23,+183,161,230,113,2,224,110,5,0,83,192,110,199,180,224,115,8,163,14,129,+237,231,244,12,97,186,227,55,1,192,0,69,47,174,86,64,30,0,50,115,+238,0,54,64,132,0,58,128,152,1,10,65,141,59,3,95,49,50,56,244,+105,4,2,100,102,108,102,137,64,39,134,121,211,104,96,129,229,116,1,142,+252,232,154,0,0,67,75,138,235,238,3,224,25,17,96,91,222,10,163,32,+225,92,0,160,11,192,8,97,88,64,47,0,54,231,69,2,0,50,73,38,+131,59,81,25,113,212,151,135,148,32,232,91,0,1,95,55,84,192,82,27,+96,122,64,71,134,227,7,95,54,56,52,32,75,32,85,227,163,2,192,1,+150,232,96,0,224,28,9,128,1,229,236,0,224,37,18,224,35,4,224,32,+23,2,95,49,50,92,229,128,0,64,165,251,34,0,230,138,15,98,59,162,+169,193,11,96,13,242,2,3,227,88,0,224,28,6,195,9,237,51,4,138,+231,192,110,124,184,209,191,131,23,230,168,8,1,52,53,115,85,228,104,5,+66,111,228,195,6,227,54,4,234,179,7,224,23,5,195,84,1,54,52,128,+143,224,90,4,224,74,72,65,105,232,168,2,225,107,8,0,52,237,101,0,+128,240,1,54,52,97,86,130,85,96,61,220,23,162,147,0,67,226,142,1,+82,160,162,142,64,40,136,188,226,118,8,130,108,192,13,224,1,7,226,103,+72,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,226,218,4,96,+0,65,14,132,155,64,38,85,62,68,189,169,33,225,131,0,101,66,85,70,+208,10,233,60,4,100,92,0,50,243,240,1,64,43,101,110,161,245,224,70,+2,77,94,244,26,2,65,148,64,111,227,91,12,0,50,103,20,135,73,224,+66,1,64,50,64,30,96,13,234,183,1,244,196,1,104,43,96,70,74,247,+64,46,0,56,138,165,196,135,227,101,1,101,168,73,66,71,169,205,229,64,+98,1,51,49,165,29,128,125,255,135,4,64,233,227,157,4,225,73,1,0,+51,204,93,0,89,135,62,227,174,1,170,117,228,28,12,134,46,224,33,18,+113,65,160,139,224,193,6,192,25,247,98,2,131,241,224,189,1,224,49,5,+232,24,0,100,75,64,43,192,247,224,44,11,224,43,1,230,106,1,172,66,+132,147,160,247,198,155,131,244,231,179,5,169,36,243,197,1,65,164,128,13,+98,11,228,43,0,236,66,2,2,39,32,64,96,38,97,221,68,55,64,137,+231,214,0,224,95,33,2,49,54,51,66,10,96,102,234,35,2,224,56,40,+160,135,224,138,0,91,163,163,71,64,254,231,62,1,86,144,128,158,192,99,+67,121,200,85,0,80,140,27,4,49,32,64,95,54,147,3,224,243,23,1,+95,54,98,211,241,89,1,224,249,10,224,8,10,160,204,224,243,0,134,37,+107,181,160,5,224,68,8,224,50,19,224,44,18,225,25,1,225,31,4,98,+78,165,130,237,173,1,65,43,0,54,97,43,234,98,1,160,251,140,82,224,+230,4,227,11,12,128,76,227,78,19,128,127,161,234,224,33,12,131,179,224,+67,19,227,112,16,224,25,0,185,74,249,1,3,1,49,54,133,91,64,44,+2,95,49,53,72,220,180,234,64,26,215,25,224,84,11,128,144,163,197,129,+111,64,141,249,154,5,64,68,0,50,96,102,195,194,68,154,249,104,4,129,+71,229,114,6,193,162,128,148,133,18,128,141,195,203,209,122,238,156,6,98,+127,1,52,57,69,108,0,53,69,42,234,150,1,1,98,105,222,252,133,60,+229,10,7,0,64,108,191,82,44,5,55,32,95,52,48,56,224,59,3,2,+78,117,109,172,5,224,243,2,226,111,0,64,52,96,76,160,160,225,97,8,+99,53,225,97,4,104,217,225,97,1,224,141,7,226,80,0,162,104,225,229,+2,97,173,196,221,163,132,226,246,0,64,81,97,21,98,245,167,29,224,138,+1,2,51,48,53,67,206,225,217,3,228,94,9,97,138,224,208,3,227,91,+4,224,29,9,225,8,35,103,28,64,8,101,191,224,245,5,231,101,6,234,+56,0,227,103,0,141,187,224,95,16,101,105,77,243,226,92,3,224,17,12,+232,39,8,65,152,1,52,56,226,45,4,5,102,117,110,100,101,112,97,244,+0,90,226,44,11,224,173,8,146,83,225,184,18,161,151,128,213,232,0,8,+65,20,100,38,227,136,11,231,231,1,227,136,1,226,243,2,96,89,225,76,+7,224,103,18,136,230,224,103,20,224,230,1,227,248,8,132,204,224,96,0,+225,252,3,224,102,1,102,140,228,88,16,224,103,4,226,198,1,232,72,14,+96,42,228,248,18,228,89,2,224,169,5,232,53,4,225,10,48,224,88,10,+225,99,2,195,26,163,121,227,33,0,229,4,5,0,50,71,109,65,18,195,+238,0,54,95,156,225,0,1,134,89,192,61,226,52,2,160,104,232,107,0,+227,240,47,225,113,2,129,8,227,207,17,224,194,10,64,175,100,195,64,8,+178,13,227,84,6,224,165,124,0,53,134,233,235,175,10,170,91,224,181,9,+227,57,7,230,112,4,78,131,96,147,229,49,0,72,12,143,255,229,130,3,+200,71,110,185,0,56,153,136,2,49,50,54,96,13,130,78,1,50,54,197,+112,232,218,11,70,116,96,31,229,140,27,227,114,3,225,22,31,164,33,197,+119,255,63,5,101,87,0,50,84,168,225,152,8,109,87,229,153,15,227,80,+8,197,129,1,49,51,69,75,4,95,49,51,52,50,236,164,5,224,95,9,+173,45,224,95,11,130,77,227,125,1,224,109,7,217,196,0,54,133,250,139,+104,224,125,19,96,0,65,192,248,120,3,1,80,32,227,100,2,210,46,64,+36,143,213,0,83,64,66,0,54,114,24,96,86,64,25,207,177,96,60,98,+52,0,80,128,24,216,94,160,26,197,40,224,87,5,238,183,1,1,80,32,+132,161,128,61,68,138,224,24,1,129,177,160,25,243,68,0,225,37,3,233,+25,8,64,41,243,18,5,64,71,170,241,128,16,111,80,224,144,3,96,52,+0,54,160,52,237,244,0,134,193,236,13,1,239,82,5,0,52,129,81,192,+100,246,243,3,112,139,227,19,1,197,25,162,220,196,219,192,86,231,132,6,+161,207,161,200,224,94,5,234,35,0,131,26,224,29,0,66,234,224,66,3,+224,41,1,235,250,4,232,68,0,69,222,245,251,6,67,156,65,217,96,159,+84,103,67,244,67,250,99,40,5,48,53,32,85,32,65,160,91,232,8,12,+97,66,180,18,4,49,50,53,48,32,64,15,226,97,1,65,131,96,253,161,+203,242,44,1,64,25,226,61,2,75,38,64,67,74,214,251,217,6,19,80,+114,105,109,105,116,105,118,101,115,46,67,111,110,115,116,114,97,105,110,155,+235,64,55,194,117,64,79,64,181,0,85,128,78,194,103,70,180,233,66,0,+164,96,231,103,45,162,75,227,145,1,235,116,1,192,25,3,85,32,64,90,+130,7,213,3,224,45,10,128,104,160,44,96,36,134,254,194,31,230,251,3,+164,11,224,80,0,224,15,7,229,189,4,244,113,4,0,90,216,12,233,232,+4,205,193,173,230,0,54,64,21,90,239,65,56,225,220,4,82,14,0,56,+243,237,2,0,58,146,30,227,93,0,251,225,18,167,207,98,130,64,70,126,+195,96,51,172,178,99,127,148,78,192,90,240,139,1,224,92,22,226,250,0,+242,125,18,224,38,5,104,127,136,232,225,223,1,227,136,0,224,41,0,123,+19,229,107,2,135,182,100,135,130,62,127,232,98,227,70,210,154,128,224,47,+5,233,201,2,96,59,64,140,224,235,6,224,74,17,129,7,132,192,0,75,+96,146,213,138,192,100,208,190,181,60,96,47,0,54,224,47,12,65,106,224,+43,9,131,164,132,101,253,74,6,97,35,1,55,57,220,133,223,246,128,173,+244,10,18,231,10,25,124,0,198,140,0,50,149,253,128,71,226,109,2,69,+201,129,31,250,75,32,129,232,224,246,1,160,170,250,75,7,64,247,132,140,+193,156,71,47,232,167,25,96,207,96,24,136,2,64,200,64,169,64,79,167,+25,197,230,224,76,19,131,234,64,60,0,49,100,149,64,67,97,131,192,175,+225,90,2,96,38,110,39,225,24,1,64,50,132,223,128,47,68,151,224,9,+1,161,200,209,133,161,42,230,94,2,160,39,227,13,1,228,207,11,227,19,+2,224,47,22,140,79,227,67,5,224,47,19,227,115,2,132,138,224,47,21,+181,23,225,242,1,224,47,23,195,236,128,27,229,103,9,224,31,5,187,252,+161,123,129,212,0,51,118,200,160,34,224,64,9,245,145,0,128,61,231,217,+16,228,6,2,231,122,3,225,222,9,165,211,96,27,231,74,4,245,255,2,+224,141,15,193,78,192,141,197,226,100,95,1,50,55,241,175,4,19,66,97,+100,32,116,121,112,101,32,97,112,112,108,105,99,97,116,105,111,110,241,192,+1,225,188,0,232,75,2,97,103,160,10,225,196,4,170,62,225,147,0,233,+67,0,230,174,7,165,160,128,26,97,108,224,194,0,194,238,96,29,165,28,+65,10,132,135,2,49,51,53,124,227,223,214,5,67,32,95,51,56,54,64,+47,178,233,2,49,51,53,194,74,106,223,1,54,48,224,235,3,1,36,120,+192,217,225,25,1,194,253,228,186,5,235,124,5,163,234,237,44,8,0,51,+95,41,192,78,128,246,234,0,5,1,51,55,65,185,172,27,225,24,2,159,+119,230,68,11,64,104,169,89,0,51,65,168,226,12,2,225,51,2,225,241,+9,195,112,225,83,2,237,113,4,224,226,7,139,253,121,71,235,253,7,224,+163,0,232,20,9,96,96,227,22,10,166,186,1,52,55,226,152,1,227,250,+2,193,82,226,47,7,160,82,226,47,11,224,40,5,158,103,228,180,6,240,+5,13,213,191,129,3,193,39,161,67,65,213,6,48,55,50,32,95,56,53,+96,4,78,14,230,191,1,0,79,75,80,234,84,1,2,79,32,35,72,131,+167,114,199,121,225,96,13,225,197,3,98,60,225,105,4,160,161,65,31,0,+48,128,132,0,52,77,205,139,90,1,49,49,160,179,217,112,233,225,2,243,+204,0,160,5,64,3,224,119,1,224,116,6,224,122,10,66,161,228,181,2,+224,186,2,224,68,21,224,74,21,224,75,2,224,77,0,225,155,5,248,85,+0,192,19,224,51,1,226,80,9,66,67,128,11,224,67,11,239,230,3,224,+121,3,226,149,8,129,48,160,170,210,50,227,95,2,224,70,2,160,67,97,+76,224,79,0,252,240,3,96,67,145,134,160,32,229,130,7,1,48,56,192,+121,64,0,200,117,224,182,4,229,209,6,163,27,224,145,5,229,255,16,160,+45,224,124,26,64,32,233,254,4,225,182,6,1,53,48,100,60,228,69,2,+227,70,27,232,218,1,224,91,21,160,8,224,91,0,128,176,228,126,10,114,+180,1,48,53,136,71,230,85,12,231,192,7,130,89,225,90,2,96,170,228,+153,1,192,58,173,181,1,64,75,193,30,128,140,134,31,230,243,13,19,98,+97,100,32,102,105,110,97,108,32,100,111,32,115,116,97,116,101,109,101,174,+38,226,100,4,173,56,224,16,8,228,177,0,233,8,3,228,240,2,162,136,+224,56,0,0,67,97,90,224,74,5,234,100,0,225,81,1,65,80,229,64,+0,229,127,0,224,241,0,194,223,192,29,238,162,0,220,27,199,54,224,8,+36,230,119,2,192,90,224,158,1,160,32,128,47,226,172,0,192,66,96,68,+190,46,224,84,0,192,15,128,32,237,199,4,72,58,2,95,56,56,64,30,+236,235,6,160,0,128,51,160,126,231,236,8,224,33,5,70,192,69,203,192,+23,193,35,227,82,2,0,49,150,67,225,61,0,77,75,128,166,135,126,128,+36,1,52,54,73,252,65,123,96,169,237,173,0,93,204,96,51,66,188,64,+30,141,163,160,48,97,210,129,192,96,240,192,234,103,87,1,53,55,249,31,+4,2,97,105,108,162,91,64,158,2,95,49,49,79,41,2,95,49,49,95,+86,0,64,251,118,12,96,133,230,155,0,199,174,224,86,5,2,62,62,61,+128,44,232,232,11,0,98,194,204,193,19,226,72,0,225,253,5,226,6,13,+229,184,1,160,34,225,231,66,225,104,0,224,210,12,225,39,0,230,151,9,+235,20,4,129,253,173,111,160,80,224,0,2,228,226,5,196,90,128,170,232,+90,4,160,56,227,208,1,224,39,14,234,218,4,195,223,224,39,10,240,215,+6,224,39,3,229,96,4,235,160,2,236,110,0,224,10,0,228,72,1,224,+101,14,233,15,4,224,141,18,164,76,224,39,11,224,141,4,232,35,4,235,+143,4,232,24,9,226,37,3,96,17,222,122,0,48,225,202,4,9,70,114,+111,109,84,104,101,110,84,111,226,250,2,0,66,176,207,1,39,66,64,7,+227,217,5,224,125,23,224,119,0,160,72,224,115,18,163,22,224,101,83,160,+213,224,99,13,225,151,24,231,136,4,225,151,18,164,221,224,179,16,192,173,+64,18,224,169,14,96,167,224,159,4,224,77,2,196,194,228,28,0,233,85,+5,229,56,0,0,89,225,17,0,231,140,1,0,83,172,195,224,145,2,234,+48,12,96,23,232,192,3,136,11,1,50,57,207,114,128,241,231,73,3,224,+17,1,225,23,2,97,22,224,14,0,128,1,224,111,1,212,152,160,81,194,+152,204,249,233,142,7,132,193,2,49,52,54,67,135,64,159,0,50,82,84,+77,4,231,7,0,160,118,160,221,97,93,133,175,225,9,1,102,32,193,38,+178,79,128,40,206,131,224,70,2,224,127,2,102,220,96,123,236,11,14,172,+10,97,214,128,101,128,93,82,252,248,165,6,2,95,49,53,171,151,224,45,+11,71,64,96,0,198,75,128,54,228,112,2,201,103,193,235,231,228,15,235,+29,4,128,44,233,191,1,101,227,0,53,126,196,225,76,11,97,170,226,2,+5,70,49,0,53,64,11,101,200,225,117,1,192,46,224,163,6,225,232,12,+194,181,231,241,1,244,170,6,224,169,40,226,240,0,226,44,10,253,14,4,+173,202,96,67,245,26,4,96,212,110,89,224,208,2,96,157,64,207,229,59,+1,224,227,2,235,39,1,226,166,7,96,249,86,172,144,133,0,49,225,195,+0,224,140,4,237,228,10,225,210,5,161,34,224,29,0,225,207,9,225,38,+8,225,255,0,225,47,2,161,198,1,51,56,97,182,168,200,96,237,226,146,+0,245,168,4,1,56,53,240,12,1,227,206,1,160,128,228,227,1,245,157,+7,132,98,226,214,0,226,151,8,237,41,7,210,30,226,98,6,232,30,0,+224,92,2,228,193,6,228,173,11,224,43,5,164,64,235,162,5,138,84,228,+4,1,226,46,7,160,18,226,47,4,131,167,224,234,1,224,170,8,193,136,+225,45,2,160,2,224,51,0,64,1,230,69,4,192,51,229,61,0,64,2,+224,46,17,194,146,236,85,0,197,96,226,24,3,232,59,8,226,83,6,128,+11,109,6,192,24,249,93,13,233,145,0,224,154,1,224,160,2,226,155,3,+160,2,173,68,233,138,2,96,2,183,159,224,69,4,96,18,224,39,4,224,+245,7,145,56,224,79,2,224,2,7,192,157,224,196,1,160,57,225,47,9,+224,67,6,224,153,0,224,67,27,234,151,2,224,35,3,96,199,243,190,3,+224,39,14,129,115,224,19,3,238,145,0,239,93,5,226,131,6,160,55,128,+138,235,5,2,226,32,8,0,67,192,197,224,115,8,192,14,96,53,244,105,+4,224,246,9,224,50,6,64,86,161,124,224,70,3,99,117,224,75,5,216,+85,224,245,23,224,79,69,226,69,1,253,238,2,85,6,135,230,89,151,0,+54,102,155,67,179,107,248,224,22,9,231,224,1,2,95,49,53,244,245,3,+64,0,229,209,17,132,218,100,106,238,48,19,8,114,111,109,83,116,114,105,+110,103,247,136,0,224,203,5,224,96,5,237,167,2,229,27,6,0,51,184,+215,225,11,8,192,14,222,41,227,91,6,229,40,2,213,225,0,67,238,0,+1,224,0,2,224,88,1,226,210,8,227,62,1,224,125,10,224,192,2,229,+142,12,226,192,83,226,36,0,224,50,16,128,101,64,48,225,246,4,86,20,+65,237,232,172,1,193,54,64,161,162,7,102,186,70,121,64,6,91,225,1,+53,57,226,43,1,226,26,61,0,82,121,163,0,97,208,83,226,28,154,226,+30,10,233,241,2,224,39,3,227,171,1,228,224,7,226,37,17,226,38,13,+230,106,0,224,132,2,229,179,0,224,114,13,192,1,226,50,17,224,56,12,+230,26,6,224,121,1,224,45,4,0,83,226,78,7,1,49,54,159,119,96,+0,237,4,4,224,67,36,232,57,1,224,135,2,233,239,7,225,10,8,224,+73,11,227,177,0,224,56,5,227,7,8,1,49,54,237,106,1,228,253,1,+227,11,21,0,57,89,106,0,53,162,123,128,238,251,236,4,64,40,185,27,+2,49,50,50,192,49,192,90,107,169,0,57,64,21,0,54,150,205,224,110,+16,224,60,9,128,0,227,119,59,6,73,110,116,101,103,101,114,227,118,151,+193,146,8,66,32,80,32,75,32,95,50,51,138,106,0,49,97,62,128,45,+64,73,252,223,3,0,49,202,251,224,174,5,85,64,128,7,0,50,196,196,+227,92,5,128,176,0,83,167,157,233,37,3,233,31,1,224,231,1,233,25,+13,192,29,193,205,233,19,9,192,33,129,39,225,36,2,226,218,0,226,78,+0,169,250,193,33,181,106,226,64,3,1,50,52,230,152,9,224,122,8,232,+227,8,224,122,62,225,171,2,249,12,0,79,235,249,25,1,128,100,64,110,+96,104,66,240,237,219,2,64,23,232,249,1,226,92,10,0,53,100,82,249,+235,8,131,38,160,236,128,190,160,247,225,144,1,239,171,2,160,239,192,236,+192,7,225,248,1,64,150,96,210,246,160,1,224,55,2,228,200,1,224,106,+1,0,83,64,166,0,52,66,137,1,54,48,245,35,1,161,54,224,38,4,+0,56,86,201,227,79,5,224,231,6,64,118,105,150,224,171,6,160,210,224,+42,2,2,83,32,73,182,249,129,50,193,223,140,157,240,146,6,0,85,65,+198,64,67,239,114,1,1,64,95,133,163,67,8,229,171,1,227,155,1,128,+69,131,140,64,0,128,19,250,110,8,29,95,32,99,97,110,110,111,116,32,+98,101,32,117,115,101,100,32,97,115,32,97,32,118,97,114,105,97,98,108,+101,164,79,224,189,9,64,13,1,49,50,99,160,114,29,0,55,97,109,225,+65,1,128,132,240,243,8,194,205,96,209,0,90,64,24,130,91,81,57,64,+33,239,166,7,151,184,224,219,1,1,95,50,67,244,101,20,1,49,32,224,+196,1,6,116,99,69,120,112,114,58,192,202,7,104,97,110,100,108,101,58,+32,96,189,153,173,191,96,110,0,0,49,96,106,242,213,5,160,82,2,79,+32,35,93,158,116,142,224,45,0,224,131,0,224,50,4,2,58,49,54,65,+119,1,10,65,97,219,84,133,226,91,12,130,198,228,132,6,231,2,2,224,+49,2,226,41,1,228,143,6,198,153,129,220,228,196,6,224,49,12,194,250,+130,52,224,46,2,224,93,11,180,236,161,228,228,109,5,224,28,3,131,249,+227,102,2,217,55,224,57,12,160,130,192,56,232,50,5,224,103,9,224,30,+4,99,54,96,187,163,98,228,77,15,224,86,0,96,56,196,126,163,183,160,+104,228,70,7,224,145,0,116,147,181,63,249,165,2,128,130,224,134,0,230,+87,2,232,252,4,224,38,1,228,63,10,224,52,1,228,220,2,192,58,224,+55,2,196,80,241,210,4,228,82,15,225,28,3,192,67,228,83,97,226,185,+6,174,246,96,199,225,204,7,160,58,224,174,6,129,149,236,185,12,227,201,+1,8,68,97,116,97,46,70,117,110,99,76,70,1,46,36,232,207,0,0,+82,160,8,226,127,12,64,22,67,168,0,51,137,182,64,100,127,210,129,213,+227,227,0,224,38,32,232,209,5,97,34,225,143,4,243,142,6,224,147,11,+0,58,134,133,1,10,65,132,87,69,43,104,228,3,50,56,57,32,96,28,+0,56,228,58,4,161,202,0,83,167,60,196,50,225,93,12,0,50,224,204,+0,225,94,4,199,13,192,47,226,38,5,169,6,224,16,0,241,173,2,128,+111,160,110,64,120,120,203,224,40,1,240,224,3,226,166,2,236,249,0,232,+153,1,248,89,7,64,1,163,67,224,78,2,230,71,5,171,237,2,51,57,+56,85,173,0,57,69,95,1,48,49,100,116,85,206,0,54,70,89,126,144,+2,51,52,50,117,224,129,95,249,82,14,104,228,224,166,1,65,143,96,74,+164,65,1,49,50,64,101,160,13,91,236,0,80,251,25,3,224,0,2,231,+251,1,129,219,160,89,251,140,0,226,15,7,0,48,192,167,64,0,224,247,+2,226,25,0,224,68,0,122,173,225,12,1,129,253,224,114,2,228,47,2,+224,14,0,225,198,3,66,25,160,46,224,2,1,96,18,227,159,1,224,166,+1,128,19,229,57,4,233,41,2,160,214,136,36,160,191,64,204,170,132,161,+172,195,3,253,106,3,236,164,8,0,89,128,108,131,78,228,100,3,228,40,+4,193,76,228,221,6,1,55,52,225,61,2,64,77,96,149,236,61,1,251,+143,2,224,70,4,232,93,8,203,238,224,30,0,161,63,193,60,229,13,4,+192,22,224,176,4,129,177,3,95,49,52,52,70,43,128,71,226,40,5,232,+185,0,248,164,5,225,88,4,184,154,225,86,2,96,0,2,95,54,49,141,+249,234,207,5,230,183,1,224,70,3,230,56,6,224,20,2,224,57,3,224,+215,5,228,190,6,227,161,0,226,183,16,69,134,224,160,1,192,80,131,178,+160,66,252,69,9,182,245,225,10,0,225,211,11,0,51,231,79,2,235,137,+1,233,114,5,101,6,0,55,165,35,2,53,52,52,101,155,133,28,0,54,+96,21,224,196,0,237,246,4,184,227,224,28,1,238,43,1,64,120,102,84,+184,211,65,162,0,51,130,205,64,85,0,53,160,107,1,50,51,88,253,0,+53,88,215,64,22,0,52,224,22,6,0,49,128,22,0,51,224,22,4,111,+219,64,22,0,50,96,22,230,176,1,15,80,114,105,109,105,116,105,118,101,+115,46,87,111,114,100,34,128,37,0,49,224,83,6,0,51,128,22,138,47,+0,95,64,122,176,113,64,28,64,191,0,53,176,132,97,41,64,8,65,40,+147,158,0,95,115,169,0,55,124,12,0,53,179,182,96,38,0,58,128,32,+224,81,3,111,48,0,53,67,57,224,67,1,100,242,241,84,2,0,55,64,+112,1,52,50,171,119,0,53,99,91,224,31,19,69,113,224,31,16,65,99,+90,60,3,80,32,95,52,96,162,0,52,155,143,192,56,139,126,224,221,3,+65,177,160,14,129,178,0,50,113,54,224,22,10,131,91,224,61,4,96,111,+128,34,2,38,49,46,64,40,1,38,48,96,6,224,39,6,128,28,224,27,+14,96,21,192,27,65,68,135,139,66,68,66,77,1,49,32,99,159,128,9,+64,35,64,34,194,167,224,34,0,128,164,224,34,3,130,180,74,12,64,108,+67,51,96,209,1,64,95,114,61,224,88,1,96,44,130,139,2,102,47,32,+64,12,130,129,4,85,32,75,32,75,64,243,64,18,162,125,106,85,98,33,+0,55,98,72,97,27,226,52,0,0,52,67,23,224,19,5,224,18,6,2,+57,49,32,225,50,2,224,18,0,1,53,54,225,105,1,192,19,1,49,57,+226,66,0,226,115,5,225,149,2,96,154,131,1,133,58,96,34,0,64,101,+226,2,95,55,55,66,173,64,33,162,253,160,188,111,140,0,53,93,136,64,+6,105,5,5,53,56,50,32,64,83,130,83,0,52,96,106,103,215,161,147,+112,117,224,181,3,68,225,106,55,0,54,96,162,224,43,3,226,16,9,192,+25,160,14,64,47,105,114,96,35,97,102,100,58,96,72,4,49,32,64,80,+32,128,40,128,162,162,27,160,73,0,64,70,214,0,80,160,20,200,86,192,+211,128,65,98,147,132,98,192,82,128,22,64,21,1,95,49,97,18,160,0,+0,58,128,137,6,10,65,32,105,116,111,102,65,248,64,61,97,40,4,55,+32,95,55,56,66,42,1,54,53,97,108,96,225,64,7,64,19,2,49,53,+56,131,207,0,56,151,185,1,56,54,66,83,100,52,128,39,0,53,98,26,+96,11,64,84,130,170,2,102,62,61,96,98,130,149,1,102,62,96,12,162,+117,0,60,128,26,130,118,1,102,60,96,12,130,112,3,102,110,101,103,96,+14,164,230,0,42,96,12,129,207,1,102,45,96,12,129,69,1,102,43,64,+12,64,222,162,11,226,13,1,134,45,106,24,226,22,1,226,29,1,80,126,+3,10,65,32,73,96,63,128,171,0,85,66,247,0,65,160,30,128,176,65,+119,110,20,0,85,97,187,85,168,96,21,238,202,1,64,114,179,221,239,17,+1,239,20,28,167,54,224,165,0,238,176,5,160,30,235,87,8,230,134,3,+234,126,1,64,244,130,43,224,87,16,204,165,224,87,48,130,122,192,220,192,+25,128,105,141,230,65,5,240,72,1,224,248,8,133,72,225,58,6,224,32,+3,128,115,238,222,1,224,32,8,135,205,224,220,10,192,24,104,9,101,235,+1,50,52,100,53,0,51,66,53,244,96,2,1,53,54,243,142,2,136,55,+224,28,11,224,98,10,201,152,224,52,8,250,236,1,139,172,193,37,239,237,+3,224,54,11,169,179,224,26,11,245,127,1,242,154,0,66,125,163,41,231,+244,11,2,73,110,116,103,243,96,59,224,36,4,110,202,183,151,4,95,84,+121,112,101,192,12,160,47,232,73,18,5,70,108,111,97,116,87,160,39,131,+125,234,93,1,138,45,235,181,6,149,208,64,46,168,99,200,122,65,89,0,+58,158,20,224,109,15,2,67,104,97,160,147,64,44,224,60,2,0,51,67,+179,64,22,131,166,194,190,225,163,1,73,141,237,81,0,239,42,12,1,53,+53,67,246,96,23,235,49,3,138,67,64,90,0,54,96,90,203,1,74,8,+1,49,32,165,119,75,113,226,221,2,237,30,2,226,27,0,133,94,224,152,+1,64,1,109,81,224,145,2,106,250,96,112,235,14,1,64,137,66,186,112,+1,224,0,2,163,68,236,88,5,85,51,96,104,246,222,2,224,229,3,4,+66,32,95,57,49,65,47,128,15,128,197,235,89,0,128,14,0,55,224,212,+34,195,83,224,212,1,206,56,224,213,46,160,77,107,20,72,192,203,242,235,+89,5,224,195,2,66,55,163,37,64,10,162,90,80,245,66,29,1,54,49,+102,164,70,246,64,21,200,189,0,83,228,83,9,64,152,224,214,0,130,168,+108,11,1,85,32,77,65,1,53,51,70,247,236,126,0,224,44,4,67,136,+224,44,2,0,67,77,133,207,170,64,116,131,108,72,64,0,66,114,241,113,+57,228,211,9,228,76,8,96,21,0,85,97,146,71,65,204,30,224,40,9,+96,23,0,85,226,152,1,225,40,2,115,143,192,184,225,166,1,0,90,162,+26,226,29,6,236,138,8,227,12,8,1,95,57,253,40,2,99,204,224,27,+0,64,234,201,111,0,89,129,227,166,243,206,224,226,65,1,194,255,238,17,+11,64,33,110,149,225,36,0,82,138,130,158,96,18,241,146,3,247,218,6,+2,49,49,48,84,32,0,53,69,35,0,64,252,118,3,2,99,110,83,179,+159,164,156,162,200,96,224,225,1,2,205,171,68,13,65,2,227,47,6,65,+30,134,234,97,73,128,161,64,7,0,85,64,165,239,156,5,249,244,5,160,+106,224,35,4,192,138,111,182,224,33,0,0,48,109,55,174,135,249,189,2,+64,25,139,171,0,79,131,79,160,36,184,121,130,113,97,58,216,69,2,95,+49,52,134,172,224,101,1,129,191,162,157,242,79,4,64,57,150,106,161,172,+164,92,226,76,3,0,51,138,227,225,189,2,138,101,225,144,2,193,143,225,+123,4,0,68,245,27,0,160,160,161,201,113,0,64,199,0,50,112,109,226,+1,1,225,162,6,178,208,225,171,8,225,54,3,225,88,17,247,106,0,98,+244,232,85,0,177,236,224,239,1,224,77,1,0,67,64,15,128,72,128,14,+132,242,128,134,129,161,161,135,129,124,193,79,96,125,128,5,226,73,0,224,+48,18,230,73,1,225,217,25,225,194,22,226,254,11,64,0,193,213,229,190,+5,97,6,96,225,248,123,1,64,134,0,51,136,70,216,168,67,209,135,209,+96,68,193,147,67,27,0,52,224,14,1,225,150,7,100,68,103,74,128,26,+228,62,4,129,10,160,91,218,146,99,73,165,243,150,174,224,91,15,227,142,+9,0,53,98,224,224,104,8,64,75,97,84,160,107,64,143,224,107,1,128,+237,1,53,53,110,16,224,106,14,67,60,232,15,21,64,122,72,237,161,76,+69,169,131,181,224,96,1,64,235,224,110,7,64,80,105,178,224,71,0,136,+178,139,17,192,77,129,148,227,126,6,0,54,243,164,2,193,217,195,78,120,+35,200,228,224,103,0,128,18,226,14,2,249,132,6,116,64,64,231,64,161,+0,52,65,155,242,248,5,78,223,173,28,2,49,53,52,196,250,225,169,1,+192,26,0,53,96,205,64,204,0,54,96,204,2,90,32,90,96,157,64,17,+135,138,234,247,0,130,121,184,207,129,48,228,16,4,226,79,8,100,206,243,+254,1,243,153,6,163,178,246,195,0,129,56,224,250,0,129,13,166,236,192,+21,66,190,128,117,162,208,244,2,0,64,175,136,36,193,136,65,31,128,233,+224,148,2,237,8,5,0,52,104,117,224,183,5,2,95,49,50,125,146,0,+51,114,49,128,29,225,123,5,99,112,64,196,2,95,50,48,65,215,192,131,+224,41,13,244,56,0,1,95,50,67,147,233,2,7,148,74,193,12,229,13,+7,100,136,66,183,134,23,160,0,64,235,136,155,224,184,5,0,48,81,209,+238,168,1,226,130,4,0,53,164,33,197,96,165,52,224,15,0,253,184,2,+0,95,80,197,185,45,195,162,73,142,234,155,2,218,220,98,81,0,54,105,+198,64,98,146,210,195,75,96,56,2,52,52,54,178,145,128,72,0,53,100,+70,129,40,131,88,96,11,64,25,226,82,2,2,39,32,95,85,221,65,139,+249,91,3,247,136,3,129,46,1,52,50,64,12,229,99,1,64,21,69,134,+185,222,1,66,32,151,226,223,228,101,117,226,1,8,0,75,225,254,16,225,+145,5,1,95,50,80,193,224,0,5,194,183,97,165,224,166,10,65,184,167,+209,98,187,134,100,224,85,2,225,47,3,0,95,147,75,182,94,96,89,169,+144,139,211,198,243,229,251,0,164,113,225,110,0,123,111,128,10,163,89,160,+13,198,67,233,181,0,194,77,224,44,11,231,98,0,224,61,2,172,147,224,+66,3,240,58,0,192,53,192,69,224,70,15,227,227,4,249,39,6,224,137,+7,128,219,254,12,3,98,118,0,64,137,82,120,250,68,89,98,114,96,32,+102,56,224,76,0,192,0,101,6,112,242,128,40,67,58,138,235,3,85,32,+75,52,160,2,82,21,128,26,199,52,226,15,9,0,52,139,62,64,134,230,+175,6,98,189,157,95,128,174,226,9,1,161,171,228,222,0,171,22,68,146,+1,50,51,83,190,227,253,3,207,114,128,196,225,43,3,166,95,163,104,5,+66,32,95,50,49,50,133,248,1,51,49,239,109,2,16,103,101,116,83,117,+112,101,114,67,108,97,115,115,101,115,58,32,105,188,1,95,49,64,191,0,+54,81,41,224,106,0,236,75,2,234,236,9,64,7,128,125,165,193,66,190,+67,255,78,91,105,244,72,171,236,153,0,64,42,86,143,0,48,64,156,237,+66,2,96,72,164,55,224,0,5,97,147,235,40,0,65,118,176,78,2,55,+52,54,85,57,169,177,230,46,0,97,35,0,90,64,30,230,62,4,0,58,+137,46,211,177,237,65,9,0,53,141,11,226,85,2,194,70,204,201,164,107,+230,100,1,160,33,251,241,7,163,215,1,50,51,86,26,0,48,86,122,193,+34,3,95,50,51,53,96,120,0,50,64,108,196,32,224,15,7,129,72,0,+50,119,98,231,10,9,225,193,1,31,101,120,105,115,116,101,110,116,105,97,+108,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,112,97,+116,116,10,101,114,110,32,98,105,110,100,105,110,103,235,152,3,233,208,19,+137,11,128,216,252,79,9,65,67,241,142,1,2,50,32,95,145,200,80,73,+97,87,162,122,226,128,8,227,30,2,148,76,224,94,8,176,28,229,30,0,+224,151,3,128,44,0,50,85,111,100,8,72,161,118,118,97,176,255,128,1,+224,84,13,64,159,0,54,160,159,64,1,1,83,32,131,228,238,169,0,238,+172,28,192,25,224,202,3,231,170,1,2,49,53,52,227,251,2,1,50,50,+254,26,0,227,150,2,140,222,64,42,97,227,98,180,133,142,158,240,92,109,+160,195,72,39,64,230,0,51,148,182,0,53,92,123,130,38,3,49,51,54,+57,196,7,96,14,90,217,240,136,4,128,220,226,197,7,227,180,11,224,138,+0,161,36,246,206,0,237,57,0,224,45,5,0,50,158,252,64,42,137,57,+96,128,120,109,1,49,51,87,198,64,25,136,103,81,30,0,90,128,199,199,+167,96,29,133,74,96,96,164,79,164,84,229,64,9,0,50,103,169,193,65,+255,86,7,96,51,2,49,50,49,203,184,66,108,0,56,82,1,1,50,50,+103,61,184,254,101,56,95,201,0,54,68,130,245,237,1,64,84,226,97,2,+163,155,224,96,2,224,93,0,224,88,14,240,4,6,192,223,134,15,0,90,+129,50,171,22,75,76,162,124,225,79,3,66,155,0,58,139,178,139,52,242,+45,3,228,90,1,231,136,8,247,216,5,231,136,5,227,126,0,164,78,1,+49,48,66,64,192,240,196,185,243,112,5,233,11,1,107,169,162,71,167,152,+230,137,0,229,40,5,133,98,230,179,0,244,154,15,224,149,1,224,62,3,+234,207,2,96,140,255,41,1,108,40,216,108,224,61,0,224,175,6,228,35,+14,69,190,68,31,97,16,0,90,96,181,64,18,236,76,0,128,0,243,223,+6,65,127,132,206,103,145,234,233,1,234,227,1,160,106,67,162,240,69,2,+160,2,224,228,2,225,186,0,183,231,200,89,230,107,1,160,48,224,42,8,+66,87,228,142,1,224,33,12,130,115,96,23,196,53,160,25,65,222,93,163,+231,30,0,129,178,233,52,7,192,64,82,189,231,98,0,237,168,0,224,81,+4,163,94,0,85,164,81,224,9,1,64,0,168,163,224,170,0,224,253,15,+250,94,1,194,191,128,188,225,79,0,224,112,2,206,107,130,202,69,22,170,+4,225,123,1,234,136,4,160,91,192,48,228,66,1,128,216,128,50,97,204,+0,80,96,185,177,142,0,52,88,219,128,200,249,70,0,160,72,229,138,0,+160,189,69,109,225,84,5,162,85,128,48,225,208,23,130,91,226,34,1,224,+32,8,128,84,242,140,1,224,32,8,195,61,227,252,8,248,90,9,208,25,+228,37,12,225,240,6,163,214,165,81,225,250,8,97,88,224,50,5,224,87,+8,96,219,125,26,226,113,2,226,23,3,128,67,226,17,9,128,42,226,60,+0,224,39,15,165,78,225,249,12,224,27,2,64,199,236,100,4,170,220,160,+30,226,10,0,226,83,9,160,225,226,150,1,160,55,231,54,0,3,85,32,+64,82,224,220,4,235,63,16,7,112,97,116,86,97,114,115,32,203,54,164,+184,112,77,64,209,69,22,105,238,165,135,1,95,56,118,82,171,177,96,112,+68,128,250,199,1,240,86,12,138,61,225,138,1,217,102,234,117,6,64,165,+0,50,243,48,3,0,52,103,27,230,234,26,79,20,128,151,230,209,4,64,+154,0,54,169,234,71,228,69,58,0,52,103,227,64,210,229,50,5,66,229,+229,24,1,64,63,229,64,5,129,246,168,233,129,137,160,43,96,2,233,123,+5,192,66,224,17,1,229,91,15,244,236,0,224,121,3,224,54,16,165,103,+224,54,6,228,200,0,224,54,16,227,60,0,129,58,228,205,1,160,57,224,+51,11,169,255,128,47,226,198,7,224,28,2,228,192,2,0,90,64,34,3,+95,49,53,50,230,159,0,227,97,4,224,75,14,160,156,192,75,234,84,6,+65,88,161,137,71,105,0,49,65,192,192,176,86,4,4,50,32,95,52,48,+243,56,2,78,149,96,229,65,147,0,80,246,168,1,85,98,2,55,32,79,+103,137,0,54,165,69,64,170,64,58,205,189,225,23,0,219,239,64,113,64,+54,234,158,5,237,206,0,1,53,50,212,172,128,59,111,164,230,140,17,64,+34,236,22,8,182,79,128,117,226,189,4,225,43,1,160,89,140,11,94,147,+243,23,1,225,130,2,192,131,232,231,4,245,134,4,160,105,171,81,249,174,+2,232,136,8,244,194,2,226,86,2,137,81,227,197,9,132,154,160,196,238,+71,4,148,215,0,48,249,48,5,128,50,237,182,5,105,210,65,219,76,49,+225,26,50,130,30,224,0,2,227,92,9,192,83,227,144,5,199,238,195,82,+234,190,2,128,141,160,181,225,217,2,250,95,4,236,166,0,225,88,0,225,+136,5,252,219,3,224,132,2,193,84,224,16,0,135,161,161,203,129,155,224,+76,7,224,46,3,193,146,128,44,224,2,3,234,239,6,245,75,1,193,128,+225,194,3,247,196,2,240,7,7,100,218,192,49,242,195,5,136,132,226,39,+5,167,204,97,200,0,50,226,123,3,224,182,4,225,207,33,242,222,6,224,+41,1,233,77,7,199,19,161,231,224,139,1,252,24,8,227,18,2,224,37,+1,236,217,1,227,77,3,224,239,1,64,100,224,239,15,129,81,134,166,1,+49,50,86,145,65,72,0,52,68,250,64,118,0,57,239,0,3,224,199,0,+238,208,7,132,228,227,134,6,1,55,49,80,159,224,61,1,117,231,224,131,+4,224,78,1,225,24,9,247,164,2,192,212,227,121,7,71,24,195,234,131,+122,240,139,1,227,234,4,97,70,227,219,5,105,2,66,90,0,50,224,143,+1,131,240,225,180,3,231,31,1,160,69,230,232,27,224,220,0,227,190,0,+245,19,2,227,201,21,198,111,228,103,0,128,167,224,60,3,234,164,6,192,+152,225,61,5,224,27,2,227,221,4,224,10,0,225,111,8,228,15,2,225,+110,1,233,14,3,206,23,225,86,23,160,238,229,60,7,98,93,145,78,1,+51,56,131,206,226,52,9,64,14,252,118,6,97,142,0,67,64,22,0,56,+197,81,249,116,7,227,124,5,129,58,78,202,185,191,128,6,64,128,0,56,+81,182,1,95,56,89,139,224,0,5,230,27,15,237,48,12,242,235,1,193,+40,227,164,5,2,66,32,95,74,56,178,152,190,96,250,68,5,148,232,225,+148,4,161,235,229,186,2,97,247,192,22,160,25,160,26,230,169,7,225,119,+2,128,188,230,186,8,129,55,1,51,56,64,47,131,234,0,49,115,49,0,+56,225,247,0,225,85,3,142,153,0,83,109,193,74,216,65,65,108,116,128,+41,192,15,152,227,161,90,0,52,128,18,151,155,64,0,129,178,160,0,226,+113,10,192,152,1,85,32,255,201,0,227,50,13,227,6,2,225,0,1,231,+2,7,192,64,230,124,4,237,221,13,128,108,224,145,10,192,24,223,130,240,+224,7,0,48,228,187,7,225,191,2,128,10,249,207,0,192,120,0,80,229,+137,5,139,231,97,254,87,56,153,19,148,77,3,95,55,50,48,236,220,2,+5,110,101,103,97,116,101,246,53,1,234,155,24,160,135,128,233,193,47,161,+41,0,32,172,250,161,95,195,189,226,221,1,242,175,6,224,108,15,225,90,+0,231,158,11,161,121,232,57,18,192,164,227,178,4,231,181,11,103,127,84,+54,224,56,0,226,157,3,83,39,128,146,225,5,5,205,91,224,155,9,84,+16,224,65,28,96,106,238,109,13,5,116,99,80,97,116,58,119,229,7,104,+97,110,100,108,101,100,32,97,157,107,217,64,101,96,98,67,249,0,49,122,+122,248,254,5,160,78,3,79,32,35,51,209,6,224,45,0,230,112,0,128,+191,163,204,202,15,97,32,85,249,125,27,0,53,131,219,3,51,53,55,32,+248,135,2,1,61,61,162,40,224,35,18,2,84,114,117,226,78,1,224,156,+5,78,83,150,81,72,96,193,119,238,112,2,0,51,245,35,0,96,2,104,+223,194,229,137,42,228,169,4,233,239,6,192,41,130,148,66,254,68,121,126,+87,93,202,225,151,1,144,3,64,112,150,167,65,164,2,51,54,51,226,134,+1,225,193,1,64,36,149,236,162,240,194,203,99,231,224,157,9,224,16,4,+64,76,64,64,214,24,225,51,25,0,58,141,46,224,45,21,3,70,97,108,+115,224,46,1,212,215,156,107,241,120,1,231,255,7,253,115,2,232,95,1,+232,36,34,224,46,2,224,43,10,239,9,36,67,244,224,47,19,243,140,3,+224,37,3,225,130,1,224,130,11,165,154,224,81,12,224,27,2,202,139,79,+55,65,92,254,27,2,193,5,128,118,128,11,129,71,96,40,247,99,12,226,+129,2,132,133,224,231,13,100,236,167,222,155,241,227,184,13,225,229,1,2,+66,97,100,251,219,0,253,176,2,227,199,1,65,252,146,83,205,142,231,202,+3,193,40,227,46,3,64,242,241,146,6,130,197,161,52,161,82,177,185,193,+13,233,244,8,107,230,96,0,192,34,225,169,0,192,14,128,139,131,194,1,+75,51,231,120,2,224,49,1,225,221,5,192,126,197,175,96,133,232,124,6,+225,122,2,192,2,164,59,224,69,3,97,149,164,211,88,194,244,224,2,204,+120,164,33,96,16,1,53,50,235,152,0,64,12,64,29,232,111,0,160,0,+64,87,129,42,232,248,1,64,19,243,151,6,65,31,0,66,244,113,1,225,+46,1,161,223,118,89,70,33,199,246,224,36,9,2,85,32,75,90,130,228,+168,6,192,0,65,251,1,51,32,102,83,165,56,130,11,254,251,2,225,77,+5,231,65,9,252,230,8,225,185,8,128,58,224,151,5,2,95,52,57,66,+121,0,53,68,225,226,160,1,94,112,232,55,1,224,81,17,207,172,224,95,+1,65,74,237,195,6,114,98,224,39,5,227,254,11,239,102,3,225,242,2,+230,7,5,246,48,1,229,174,2,3,95,49,50,56,161,136,235,217,6,101,+175,199,167,224,111,0,139,115,225,70,13,0,51,122,197,224,171,1,239,168,+8,224,123,0,128,133,166,202,130,131,251,129,6,64,97,135,119,133,239,224,+0,2,225,8,8,192,239,160,147,225,15,2,226,138,4,98,134,0,89,105,+120,66,64,64,31,250,78,13,64,49,237,193,0,194,146,225,252,2,101,53,+226,117,26,96,160,180,217,99,84,0,52,106,192,64,28,235,48,1,192,0,+193,17,228,149,3,225,191,5,233,184,4,241,122,5,129,69,0,89,192,13,+160,212,132,179,225,135,6,104,60,225,51,4,96,16,228,102,10,224,5,10,+226,158,8,252,95,6,225,154,1,226,165,3,228,157,5,224,100,0,238,122,+5,239,251,6,224,73,11,224,254,16,226,245,1,69,182,160,6,224,49,6,+225,200,0,224,91,1,140,210,224,249,5,130,145,170,82,160,151,210,254,130,+143,224,0,3,192,69,129,84,192,171,224,181,2,193,202,224,160,7,227,159,+11,246,188,2,193,189,224,192,7,235,170,14,243,42,2,227,115,5,227,112,+0,137,245,225,171,2,128,131,224,45,7,224,205,3,224,0,6,231,59,1,+251,255,0,92,85,77,63,99,245,161,70,133,195,144,102,160,26,229,184,8,+100,117,1,55,56,192,142,235,227,2,16,111,111,32,109,97,110,121,32,97,+114,103,117,109,101,110,116,115,165,72,224,49,20,2,102,101,119,224,48,8,+232,68,5,111,102,72,23,0,54,139,101,1,52,57,159,116,0,50,80,165,+76,109,64,27,153,213,100,27,227,243,10,134,33,225,47,4,157,34,0,51,+168,119,64,66,139,196,105,20,69,184,76,109,0,55,140,109,64,29,139,197,+0,75,161,70,232,153,1,162,154,224,11,8,194,59,138,92,224,13,1,165,+66,234,211,4,192,37,224,39,6,224,75,0,224,25,3,230,34,4,224,34,+8,170,76,224,69,2,160,88,226,2,0,224,23,0,224,105,3,226,50,1,+224,31,3,250,220,0,227,115,0,232,50,3,224,24,6,64,1,226,122,0,+224,154,1,192,92,228,69,2,160,23,162,177,192,8,72,213,65,165,96,69,+2,95,56,53,234,98,0,224,232,3,134,104,227,88,6,129,120,192,85,64,+71,108,97,0,83,96,82,0,54,64,10,217,193,231,13,0,192,95,4,66,+32,95,51,55,124,227,0,49,66,159,1,52,52,124,180,210,225,128,110,137,+80,0,49,66,144,238,243,2,128,65,96,61,192,85,223,158,239,238,6,229,+58,3,96,73,221,220,3,95,49,48,54,64,133,129,35,98,119,0,54,150,+107,239,85,2,229,127,3,73,232,0,52,107,44,128,30,224,25,16,129,22,+64,107,96,72,2,95,50,51,64,28,1,50,53,160,55,224,57,1,224,146,+41,64,57,224,109,4,224,12,3,224,38,1,225,180,2,97,177,160,112,136,+48,96,105,1,55,57,167,77,147,69,67,170,161,175,103,93,213,82,161,131,+98,20,1,49,57,110,205,64,9,2,56,49,32,160,33,170,213,106,100,128,+11,160,211,0,57,115,82,0,51,147,83,232,149,1,147,198,6,95,50,48,+53,32,95,54,174,142,64,195,162,111,2,85,32,75,100,43,115,176,203,224,+74,37,133,38,228,28,2,92,28,160,112,224,21,3,0,56,192,21,64,52,+64,201,68,60,143,145,224,39,3,73,182,196,90,175,138,235,105,27,234,5,+0,129,157,233,253,2,230,186,6,251,226,4,224,78,9,224,43,4,64,8,+74,207,227,163,4,224,96,4,224,46,8,195,120,192,13,96,11,192,8,230,+129,9,233,110,24,65,6,144,80,131,184,0,48,85,95,234,190,1,0,85,+131,5,64,144,69,147,174,223,161,229,96,61,64,8,129,68,199,133,135,136,+224,252,5,227,30,1,64,201,194,229,96,232,71,10,148,74,117,220,158,90,+194,133,129,206,90,110,64,106,208,156,247,147,0,64,6,64,5,86,165,2,+50,51,56,236,79,3,12,80,114,105,109,105,116,105,118,101,115,46,61,62,+134,222,64,66,142,226,128,214,244,223,28,224,148,10,64,71,0,54,241,39,+0,225,131,10,64,32,135,23,128,32,0,80,195,51,224,36,7,134,249,160,+34,143,220,0,80,128,234,134,245,2,83,32,83,162,154,166,80,64,42,240,+166,5,135,70,224,33,18,99,11,165,185,224,33,14,206,212,96,25,98,229,+224,30,4,176,133,99,7,236,156,6,230,16,0,226,230,1,96,76,0,85,+97,165,136,46,100,159,0,53,132,179,248,80,5,72,67,160,70,224,114,6,+64,24,226,123,1,224,71,0,97,142,121,30,224,60,0,224,37,14,239,176,+0,192,98,128,212,162,156,225,63,2,160,220,236,210,7,64,70,224,90,15,+195,2,160,90,225,2,8,128,83,0,85,228,51,0,224,63,3,69,35,70,+191,3,49,53,49,49,249,236,0,64,35,250,64,5,0,51,101,253,225,98,+1,225,148,8,66,128,225,148,15,224,183,1,79,254,1,48,57,64,98,225,+142,6,1,50,57,134,93,160,196,2,95,50,51,128,65,237,95,1,226,81,+18,132,153,128,20,225,80,8,100,54,192,178,224,25,4,100,49,228,25,8,+96,21,173,242,240,202,11,99,56,226,78,7,70,63,251,21,3,226,87,16,+142,151,224,16,0,130,224,225,72,4,142,187,224,94,5,122,22,224,84,17,+167,99,224,165,3,193,18,177,149,227,37,7,224,52,0,226,127,9,225,46,+16,96,59,227,94,9,129,14,225,224,24,1,51,56,65,24,225,224,1,224,+203,2,226,214,11,68,144,225,56,5,224,99,25,141,214,224,98,1,227,108,+4,228,44,12,96,65,248,167,13,9,100,115,69,70,105,101,108,100,115,32,+244,157,11,69,17,135,202,165,43,131,98,165,43,135,198,96,23,100,125,0,+85,128,22,215,39,96,197,0,48,225,201,1,0,50,96,90,0,50,213,75,+193,98,239,173,2,238,46,3,91,64,162,211,239,122,4,161,29,224,42,2,+64,83,66,205,224,245,6,3,58,49,53,48,247,132,0,64,33,192,27,73,+139,67,230,3,95,49,51,52,64,230,64,40,247,126,1,212,92,128,101,113,+203,96,129,151,190,225,61,6,3,101,110,117,109,173,194,64,69,134,228,96,+53,2,95,49,48,68,42,64,21,0,54,225,64,4,99,87,129,64,65,100,+168,0,199,189,229,40,10,97,137,224,26,12,134,97,226,196,13,226,197,14,+194,198,140,62,97,100,130,76,225,58,0,235,109,1,174,49,128,33,229,172,+18,224,36,4,229,148,9,96,191,0,85,99,156,224,37,0,228,198,17,156,+80,224,210,11,228,224,0,224,94,4,169,45,224,91,1,228,83,7,0,53,+108,248,228,83,6,224,135,1,238,215,3,228,34,11,228,116,11,192,24,228,+116,0,1,53,48,67,171,236,196,1,227,134,0,224,24,7,225,104,5,104,+248,66,7,200,142,0,89,222,73,192,143,185,237,239,27,5,131,89,224,170,+10,230,171,0,232,177,19,224,207,11,192,25,96,181,224,73,1,224,245,16,+96,154,242,15,4,225,83,0,205,97,0,48,64,219,107,255,243,36,3,166,+104,161,219,254,70,5,224,82,9,254,13,3,160,119,0,90,164,41,245,249,+5,96,26,64,173,226,232,1,135,102,142,217,224,119,2,149,195,160,71,96,+4,124,53,64,38,0,90,64,127,77,117,98,49,1,75,50,239,24,3,129,+231,130,74,0,64,89,10,224,27,3,64,0,227,64,13,225,237,9,97,238,+202,99,65,93,97,161,97,104,161,240,230,111,3,224,235,9,115,84,246,102,+4,96,220,226,197,1,226,39,1,160,9,130,2,226,53,2,253,109,7,101,+80,129,179,117,239,199,82,164,245,65,246,128,71,78,215,90,8,224,56,1,+169,31,182,191,232,98,8,194,49,236,124,1,165,239,162,223,141,114,1,55,+56,245,149,3,230,186,8,243,75,16,91,89,13,115,101,99,116,105,111,110,+32,102,105,120,105,116,121,243,125,2,0,51,83,202,224,43,1,1,36,120,+128,27,147,103,0,55,195,144,65,140,198,222,151,101,195,105,225,143,14,128,+30,225,147,6,195,106,70,34,113,136,209,125,162,210,135,175,248,31,8,99,+39,96,167,224,149,3,224,179,9,225,225,57,128,200,225,224,6,162,91,99,+158,214,15,227,155,0,248,145,0,225,211,14,160,84,239,29,2,100,55,224,+21,6,224,60,30,64,58,249,236,8,85,147,226,25,4,128,174,227,246,4,+225,112,9,224,0,1,226,54,87,200,251,96,150,225,111,0,232,228,1,161,+124,224,215,3,225,152,6,130,28,236,126,3,227,42,0,246,178,0,148,120,+224,99,5,197,25,225,72,0,161,74,224,13,0,251,169,7,227,82,7,128,+21,132,236,160,14,100,3,148,135,228,86,0,131,255,1,52,56,137,90,0,+52,187,44,160,0,226,132,1,193,179,64,34,64,42,96,141,191,27,227,206,+7,65,56,176,244,96,51,226,202,10,102,225,224,13,5,160,173,128,2,160,+14,227,7,13,0,89,225,20,3,103,78,225,9,3,129,77,163,46,96,14,+0,64,71,40,128,58,131,95,129,17,245,90,0,128,36,96,117,166,93,73,+51,1,51,55,70,6,147,42,96,5,255,22,0,224,184,2,224,2,3,192,+29,192,130,199,152,224,2,0,214,93,225,153,0,238,119,3,99,220,129,142,+0,85,74,185,129,32,161,5,169,147,128,58,65,248,224,7,7,101,156,227,+33,6,224,9,0,224,165,2,250,105,2,160,252,96,86,224,210,6,96,17,+194,46,64,92,130,140,225,9,0,224,67,0,224,215,1,224,13,5,224,99,+0,183,166,224,113,2,97,24,1,85,32,71,93,224,72,2,162,15,96,35,+232,79,7,225,235,3,193,91,247,253,0,224,26,3,224,143,4,219,108,225,+173,15,129,10,224,66,9,226,132,0,224,127,14,224,106,0,96,170,224,35,+21,128,1,169,107,192,0,233,229,1,96,2,128,178,226,154,0,160,14,224,+50,4,224,88,15,0,67,98,56,224,0,3,224,234,14,224,2,3,224,246,+0,64,0,228,129,9,253,99,16,193,217,128,122,225,231,0,130,35,128,181,+77,105,64,20,227,129,0,147,233,0,53,102,15,123,100,224,227,0,1,95,+50,157,85,224,42,1,1,53,50,69,81,0,52,145,34,64,44,190,157,64,+65,192,22,64,8,227,132,0,224,125,1,162,84,253,120,1,226,232,5,224,+173,2,225,74,2,161,98,192,44,224,62,4,128,166,225,32,6,224,181,12,+252,105,1,96,223,225,13,0,135,245,225,13,22,224,225,13,0,56,204,70,+163,126,227,13,7,160,190,227,166,13,96,16,153,251,170,230,252,114,3,0,+95,79,149,1,95,50,87,170,230,253,1,28,97,109,98,105,103,117,111,117,+115,32,111,112,101,114,97,116,111,114,32,101,120,112,114,101,115,115,105,111,+110,167,52,226,89,10,161,80,96,124,64,225,129,54,96,21,225,212,2,0,+55,225,30,4,224,210,10,224,173,39,9,98,97,100,32,112,114,101,102,105,+120,224,165,11,228,245,2,3,95,49,55,51,239,194,2,16,92,51,52,38,+115,114,99,47,77,105,99,114,111,72,115,47,70,104,19,2,46,104,115,64,+24,4,44,54,52,58,55,192,68,219,8,250,26,4,97,212,171,38,170,229,+1,95,54,86,69,204,149,163,63,129,29,247,199,0,0,52,89,217,1,49,+52,255,160,3,0,80,89,125,79,77,96,171,165,232,1,64,89,100,81,65,+36,229,38,3,233,81,1,166,14,69,224,64,79,0,53,234,122,1,138,52,+128,113,96,122,192,115,64,50,103,218,84,139,254,121,6,0,49,94,107,192,+145,208,37,64,229,169,164,171,240,100,94,64,139,198,145,64,34,88,235,181,+29,64,1,193,201,96,183,210,180,128,6,193,60,224,61,3,193,26,224,33,+1,225,4,1,161,26,186,216,160,21,0,58,136,112,1,10,65,109,194,99,+29,251,48,7,224,39,0,248,192,0,104,222,76,116,89,62,226,4,1,5,+110,101,103,97,116,101,97,232,64,46,145,199,1,65,32,64,11,0,54,96,+11,0,90,65,78,64,14,145,178,0,75,96,26,248,69,1,234,255,2,67,+108,152,102,65,111,128,44,0,65,128,59,140,106,2,95,52,56,99,19,139,+23,143,159,64,193,156,79,110,37,206,44,128,24,143,36,188,123,224,24,9,+160,49,142,116,2,95,49,53,228,52,1,64,115,202,167,0,89,165,172,98,+74,227,180,2,225,175,1,240,80,11,227,196,0,248,157,20,79,193,162,53,+226,164,13,128,41,244,129,14,10,103,101,116,65,112,112,67,111,110,58,32,+244,130,11,160,99,167,43,0,85,128,191,96,218,244,103,1,3,95,54,48,+48,226,5,17,118,233,97,52,2,95,54,54,70,37,0,58,138,213,65,154,+0,50,65,200,64,52,192,73,235,202,10,237,174,0,147,49,1,52,56,125,+64,1,52,56,66,93,64,61,130,45,64,237,0,80,224,214,2,3,118,97,+108,117,98,81,224,18,1,2,116,121,112,130,99,224,18,1,3,107,105,110,+100,224,18,6,3,115,111,114,116,64,18,64,90,0,54,236,101,22,245,74,+3,102,93,129,105,224,12,1,3,95,49,52,55,64,255,65,146,171,148,236,+204,5,164,166,131,129,238,212,7,66,199,140,4,65,76,237,4,5,128,160,+180,193,228,24,0,68,236,170,214,233,251,4,162,52,131,218,231,59,0,226,+84,19,164,19,127,157,64,129,234,21,0,194,96,226,94,0,206,31,214,250,+206,224,224,43,11,140,196,224,96,1,140,238,64,95,241,179,0,66,165,225,+141,2,9,101,116,83,76,111,99,69,120,112,114,196,30,65,12,81,191,96,+244,210,80,129,96,0,48,122,62,192,78,128,194,1,52,56,66,255,224,98,+0,192,20,65,101,192,20,64,84,132,43,64,29,235,198,7,196,81,96,38,+208,174,179,8,64,35,164,109,64,102,96,26,129,7,0,55,102,26,64,23,+227,39,1,241,134,0,96,83,200,143,237,85,1,64,8,1,95,53,93,213,+157,132,193,203,228,40,1,224,12,1,224,25,0,1,95,52,80,86,0,54,+115,240,169,200,177,229,224,25,4,163,123,160,6,67,179,64,8,66,159,155,+113,96,48,103,241,161,34,228,36,4,9,117,110,100,101,102,105,110,101,100,+32,135,141,129,110,71,117,224,42,8,196,70,0,54,225,210,0,98,134,140,+114,96,228,72,79,237,196,3,128,33,224,126,0,227,14,0,224,86,4,233,+13,1,208,47,211,55,103,251,224,49,10,160,136,168,38,128,39,160,149,160,+14,4,79,32,35,51,50,167,177,98,21,80,176,128,33,71,247,0,80,104,+12,232,67,1,194,18,232,72,0,95,124,232,65,2,192,0,160,220,0,58,+131,251,97,251,228,153,3,1,91,93,96,151,224,229,2,2,79,32,35,70,+40,169,33,225,194,1,224,219,0,166,61,0,80,73,117,201,122,64,52,0,+51,244,14,2,224,79,2,224,37,5,67,143,238,114,0,131,41,224,91,1,+128,0,64,170,133,132,0,83,66,85,1,95,53,106,250,89,213,81,227,100,+2,3,54,55,49,32,106,44,0,83,65,191,192,163,113,230,192,43,1,35,+52,168,126,135,222,1,95,55,118,87,128,93,197,164,3,95,49,50,52,128,+86,68,236,0,52,65,240,225,25,1,3,66,111,111,108,195,229,65,66,1,+10,65,225,54,2,4,68,97,116,97,46,64,33,6,95,84,121,112,101,46,+34,103,211,64,63,132,11,204,13,241,168,5,0,51,122,153,129,26,113,165,+239,24,4,236,88,1,242,25,7,131,25,130,192,231,172,18,1,95,50,165,+23,193,126,230,38,5,1,52,55,214,164,128,102,235,145,1,224,111,3,161,+182,97,142,236,81,2,231,200,1,161,179,224,17,6,251,174,5,96,20,141,+9,87,57,252,183,0,151,226,192,166,229,143,0,163,190,95,145,102,86,202,+128,227,68,8,21,110,111,116,32,112,111,108,121,109,111,114,112,104,105,99,+32,101,110,111,117,103,104,163,90,3,66,32,95,53,71,201,3,95,50,48,+53,195,56,96,0,230,202,5,140,112,0,54,98,45,1,50,51,67,98,164,+221,224,42,9,97,211,133,223,167,101,66,200,64,93,1,49,52,66,128,127,+2,2,49,52,55,97,94,167,127,64,50,133,189,90,229,0,90,160,47,0,+55,253,66,0,96,45,96,29,138,7,64,71,230,63,0,225,202,1,1,49,+50,70,88,129,1,136,198,0,54,93,97,129,89,66,59,206,174,97,195,225,+192,2,96,49,122,235,225,74,4,226,57,4,142,165,226,100,3,196,151,225,+209,1,164,107,66,55,156,89,99,93,1,52,54,105,63,130,36,245,126,12,+140,124,103,73,227,230,0,64,230,243,233,1,226,111,11,1,52,54,167,121,+0,55,246,148,1,0,85,225,20,1,0,32,162,51,224,119,8,132,252,67,+119,64,67,136,140,244,101,7,96,179,2,10,65,32,229,68,11,160,143,130,+231,98,135,0,57,88,3,64,76,132,45,128,64,132,141,128,219,64,129,1,+48,55,97,248,174,0,104,149,0,75,97,205,64,53,128,41,64,36,0,51,+193,15,138,141,128,37,103,231,128,44,0,54,165,143,233,204,9,0,51,86,+82,160,239,227,88,1,65,139,67,79,169,117,96,175,225,249,3,227,239,6,+0,54,163,68,224,24,7,224,98,4,230,186,0,227,197,9,161,154,118,189,+119,15,160,48,225,133,8,149,40,161,43,133,3,224,111,15,71,119,129,204,+224,217,8,129,224,224,56,10,110,163,162,190,226,58,3,64,14,247,49,3,+233,200,0,224,39,5,64,184,224,207,0,224,185,6,166,129,64,192,64,130,+227,42,2,224,64,2,110,249,98,164,109,98,239,247,3,160,6,0,85,229,+78,1,225,65,3,193,60,239,43,0,226,200,2,225,108,6,2,95,50,50,+224,200,0,94,192,2,51,50,52,249,157,2,98,79,254,197,0,225,140,1,+225,228,0,251,41,9,224,19,5,194,51,65,160,132,208,111,204,68,106,100,+72,64,161,225,32,15,234,115,2,160,33,154,17,228,81,5,164,87,225,64,+1,224,28,10,228,170,5,193,223,0,52,190,113,160,0,172,48,192,49,234,+149,0,64,2,224,39,1,128,136,128,1,226,192,1,64,205,232,157,0,169,+72,195,236,64,147,231,111,1,160,64,135,68,160,59,66,106,205,7,246,92,+8,224,117,6,224,150,0,229,70,4,165,68,152,87,64,135,64,32,0,50,+75,139,152,143,224,152,22,135,88,64,143,141,107,224,132,4,65,235,96,101,+237,122,4,111,0,177,12,96,0,225,62,6,244,208,8,163,171,129,55,200,+68,160,9,128,147,162,232,130,102,239,119,2,192,1,154,95,129,226,231,255,+1,192,2,243,240,3,224,32,0,200,218,236,113,0,192,99,228,86,3,224,+26,0,252,133,2,224,31,4,224,131,2,176,0,224,84,1,224,133,1,224,+219,0,198,177,232,108,2,192,92,163,243,250,223,0,97,67,97,150,4,95,+49,52,48,55,227,121,1,67,47,135,205,0,79,74,239,3,54,32,95,54,+74,60,77,219,195,224,64,65,64,28,202,124,136,78,2,95,55,50,66,24,+1,51,50,177,136,0,52,74,254,224,39,17,0,52,106,25,64,39,0,53,+64,48,224,39,17,150,23,64,8,64,21,224,39,18,141,102,2,49,52,54,+64,48,96,188,68,63,178,55,0,52,74,245,231,159,0,64,228,136,148,0,+90,162,9,65,85,143,178,130,66,65,140,225,99,3,97,156,129,137,227,207,+9,0,50,193,84,193,172,229,231,5,0,53,242,28,0,232,192,13,64,64,+0,57,254,153,6,224,41,29,160,112,229,138,15,108,57,224,38,3,163,168,+136,228,0,53,108,7,224,168,2,165,88,195,30,240,195,1,186,173,160,69,+229,10,4,133,231,224,97,3,251,58,21,226,189,15,184,20,98,253,164,146,+224,11,3,224,167,11,206,188,162,231,225,37,1,71,83,231,37,8,225,80,+17,160,50,161,185,230,85,5,192,242,131,155,66,92,239,84,1,224,42,3,+64,13,72,7,128,233,66,122,1,53,52,232,182,0,232,190,0,224,0,0,+160,186,67,155,233,253,1,66,148,208,195,68,3,0,57,245,169,1,194,222,+64,34,254,64,3,146,103,161,38,110,58,134,223,229,19,1,225,184,2,160,+29,178,105,226,177,2,97,64,242,37,3,224,28,3,139,121,177,110,128,228,+161,113,0,79,132,179,238,218,2,224,74,10,161,46,224,73,37,160,215,199,+118,224,204,182,99,48,131,164,246,18,4,194,200,96,76,131,17,160,118,224,+40,14,224,120,0,230,106,5,66,44,82,102,226,199,0,105,56,0,54,74,+124,198,74,163,237,224,9,4,160,0,96,187,162,161,0,58,128,28,234,204,+12,1,52,53,173,157,233,182,4,170,128,224,178,10,227,27,0,150,176,234,+169,0,177,194,172,141,97,64,224,12,4,192,4,164,211,64,120,76,151,64,+14,67,172,67,85,165,210,0,50,96,246,174,105,136,115,110,158,128,15,224,+24,6,224,0,7,2,95,55,48,178,35,69,157,246,253,17,165,217,130,116,+229,82,0,1,95,55,109,121,64,61,140,254,96,156,163,177,1,54,56,122,+103,78,27,1,95,49,135,139,64,40,0,54,129,88,5,54,56,52,32,75,+32,65,57,193,13,160,92,224,1,9,233,252,2,224,37,16,224,35,4,224,+32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,+80,51,240,164,0,128,0,65,26,141,64,72,143,1,75,52,112,66,64,1,+0,75,198,141,96,34,139,194,242,141,6,5,67,111,101,114,99,101,128,6,+2,105,98,108,88,92,64,43,136,190,228,50,1,128,127,228,60,3,166,194,+96,11,230,23,1,227,236,5,224,126,0,224,211,1,170,7,192,14,137,146,+224,30,12,224,85,16,233,125,0,224,85,22,196,123,64,17,200,126,3,95,+49,52,51,65,61,198,248,128,0,168,219,64,248,136,210,225,36,6,83,173,+13,76,105,116,115,46,75,110,111,119,110,83,121,109,98,115,228,64,47,241,+136,0,225,40,138,235,2,10,225,40,65,248,18,1,237,158,13,231,253,4,+224,34,4,224,44,2,0,48,85,254,0,83,64,116,82,91,240,70,9,0,+48,125,201,100,184,132,18,0,50,90,207,164,18,71,217,105,201,5,32,64,+64,35,49,48,131,20,232,124,4,64,47,209,145,234,58,1,161,37,137,195,+184,66,233,194,10,225,50,5,225,225,5,232,37,0,224,5,7,206,202,192,+60,192,1,201,241,224,28,10,224,149,5,231,39,6,224,77,13,225,199,0,+64,0,135,50,224,2,5,192,108,224,52,5,228,118,12,64,22,170,108,224,+77,15,224,56,9,226,114,3,133,176,142,101,224,36,0,224,58,7,224,17,+8,224,14,5,192,157,134,162,0,52,87,116,64,6,233,242,0,234,41,19,+106,89,241,89,5,96,0,226,185,0,224,143,74,133,81,67,10,113,20,223,+123,0,75,83,103,159,94,101,135,192,12,64,43,244,13,0,224,2,0,239,+104,11,162,63,224,38,3,128,2,67,143,224,208,3,161,205,192,8,64,157,+101,23,226,202,11,192,47,128,109,225,187,5,193,8,128,8,64,120,128,126,+172,148,161,236,66,218,215,129,168,85,96,64,236,6,11,224,205,0,236,7,+12,233,233,0,225,151,1,224,84,0,64,102,206,52,1,95,56,67,250,207,+107,128,163,74,22,64,180,179,120,121,170,234,35,1,224,114,8,224,108,2,+162,166,226,40,1,224,51,2,253,43,3,160,219,158,230,204,84,128,71,248,+82,4,31,77,117,108,116,105,112,108,101,32,99,111,110,115,116,114,97,105,+110,116,32,115,111,108,117,116,105,111,110,115,32,102,111,0,114,219,184,160,+59,0,57,74,47,87,148,227,37,1,66,19,136,248,252,87,1,96,217,130,+183,69,15,128,47,96,213,1,52,50,93,10,98,226,120,162,74,17,64,65,+0,54,165,133,225,148,3,0,83,100,70,129,213,139,224,160,93,172,8,228,+109,10,171,224,64,173,235,149,2,246,128,1,224,182,1,138,138,226,83,0,+114,160,226,193,4,178,169,224,19,4,228,253,1,227,119,3,160,2,241,251,+0,160,17,130,110,227,25,15,96,12,244,118,1,163,4,162,70,160,244,66,+27,0,52,75,90,242,224,0,192,68,133,54,224,132,5,242,174,0,96,101,+161,30,113,231,133,131,224,104,2,161,101,179,103,83,165,157,66,1,52,52,+71,106,178,12,192,0,165,162,65,165,137,156,195,73,198,68,140,134,96,71,+67,70,0,52,157,135,0,89,161,3,195,125,193,200,128,232,160,15,131,192,+224,202,1,236,246,2,192,176,224,83,3,103,205,227,116,2,103,60,96,157,+1,95,50,92,196,172,248,161,237,123,114,224,21,0,227,53,7,128,93,235,+116,2,235,127,4,64,104,90,241,191,202,192,139,97,39,131,180,160,24,65,+22,138,144,128,34,97,45,193,33,192,197,218,112,192,198,224,99,1,82,150,+224,21,1,134,131,3,49,52,51,57,130,179,0,51,237,142,0,101,145,0,+54,224,14,0,192,0,192,174,224,98,7,64,160,240,157,1,64,1,132,152,+225,97,0,224,142,3,160,139,96,48,64,11,250,42,9,128,205,193,149,131,+89,246,35,6,2,95,49,49,94,182,224,151,8,225,132,5,224,28,4,64,+79,181,144,227,246,3,163,139,128,35,195,133,160,49,163,78,64,11,224,147,+5,227,76,0,234,24,1,254,81,1,227,28,7,227,5,9,194,250,224,0,+0,225,139,1,0,52,228,51,1,97,236,140,81,129,164,192,74,64,66,64,+27,139,116,119,133,129,253,100,176,229,154,7,195,229,96,197,128,209,228,46,+0,163,86,225,36,1,166,180,144,220,203,94,228,96,3,224,46,18,249,209,+2,225,9,1,231,110,0,224,44,7,241,56,37,64,31,1,95,54,106,172,+7,67,32,95,53,52,57,32,95,149,157,160,39,112,199,128,69,143,171,160,+23,224,90,8,194,251,0,85,104,118,224,174,6,227,63,1,224,168,1,128,+101,224,73,10,192,24,147,225,162,234,135,127,229,238,2,64,103,128,12,243,+114,5,161,222,141,7,67,2,135,196,231,120,1,228,159,2,228,231,5,224,+42,8,226,168,0,227,118,1,98,131,228,2,3,128,221,229,34,1,197,176,+83,195,225,77,2,129,168,200,106,128,11,248,33,6,228,37,2,129,61,224,+8,4,128,25,64,217,204,232,185,137,162,253,91,110,192,59,224,22,2,224,+25,6,224,26,6,224,29,7,199,135,192,37,192,183,128,11,224,196,0,250,+82,4,0,58,99,65,64,146,0,67,149,162,65,63,96,169,0,51,209,133,+227,70,0,134,199,2,49,52,51,73,41,160,86,1,95,52,141,41,64,48,+136,127,112,52,181,26,64,41,161,199,96,71,192,144,228,64,0,227,110,5,+128,29,227,107,11,251,138,1,224,39,14,227,26,3,128,154,227,53,5,237,+136,7,100,160,130,22,225,250,9,227,74,6,161,56,229,64,4,228,207,4,+214,141,225,245,0,224,131,8,134,13,244,52,6,243,108,6,224,50,35,194,+182,120,55,89,121,1,55,56,224,229,3,229,236,8,160,157,195,6,248,35,+5,227,215,10,225,71,11,244,248,4,225,70,3,192,41,226,101,2,224,58,+20,224,35,0,233,63,4,226,184,8,227,168,4,160,101,232,106,1,224,19,+0,199,7,225,68,12,148,151,225,68,8,225,63,9,186,185,225,63,19,66,+207,137,122,0,95,192,28,67,126,96,49,64,168,116,99,135,247,224,62,2,+64,53,190,237,197,136,77,218,131,98,179,23,227,198,1,83,102,96,150,0,+67,193,149,96,244,255,179,0,150,186,202,138,202,34,4,95,49,49,49,54,+99,120,0,85,115,168,0,85,225,4,11,117,163,84,229,2,95,55,51,86,+47,0,50,99,235,64,168,2,49,51,56,96,11,0,50,64,6,85,177,0,+55,231,132,4,0,83,254,54,37,96,176,64,4,129,88,197,64,65,27,97,+20,97,31,1,48,53,67,98,228,214,1,232,198,4,166,37,65,32,199,202,+5,80,32,95,50,49,50,237,50,2,18,109,105,110,105,109,117,109,58,32,+101,109,112,116,121,32,108,105,115,116,205,34,1,95,50,65,112,226,229,1,+131,170,68,56,0,95,76,224,64,93,96,97,64,95,217,221,98,111,238,96,+4,192,19,133,242,128,67,167,11,224,13,1,188,131,130,252,134,227,96,7,+107,198,0,48,69,65,128,145,96,25,64,227,0,49,70,229,9,95,57,56,+54,32,79,32,35,55,53,248,148,1,240,113,6,64,155,134,41,244,59,20,+1,78,97,64,245,0,58,157,186,253,59,39,229,120,1,68,244,129,47,129,+62,140,133,0,50,69,230,192,7,193,15,67,147,243,154,4,1,51,57,188,+210,192,91,225,114,1,136,55,201,193,0,50,115,58,240,80,11,128,45,239,+252,2,252,46,82,1,51,50,194,219,224,42,5,193,234,128,182,252,46,19,+226,44,25,224,115,1,224,69,3,224,68,1,226,62,0,80,129,228,215,0,+111,172,192,101,252,142,15,95,193,241,247,1,129,105,0,83,169,104,97,191,+133,57,189,165,65,117,164,157,96,7,192,220,251,0,74,225,126,1,177,142,+194,110,160,65,187,131,192,252,251,146,8,128,237,0,54,250,248,3,66,48,+104,79,224,125,4,167,205,115,9,68,241,164,216,128,49,0,54,227,5,2,+226,81,20,163,177,226,71,9,225,219,8,231,219,0,226,47,19,138,121,67,+232,89,22,132,222,0,54,196,8,196,231,68,116,226,4,1,64,174,198,77,+3,50,57,56,32,64,15,134,39,227,99,11,160,114,246,210,1,64,20,226,+160,2,252,2,2,87,45,118,199,129,160,64,87,134,102,64,178,251,17,5,+0,51,73,187,251,17,2,0,50,197,110,161,203,224,136,10,195,61,194,195,+237,247,6,96,54,247,120,3,205,222,128,149,235,48,0,76,182,225,124,1,+197,63,224,55,1,66,177,166,182,224,75,2,96,163,255,144,1,224,204,6,+87,252,224,204,3,203,105,228,59,1,226,20,7,226,38,9,65,139,167,23,+96,15,229,35,3,143,221,103,135,99,98,1,49,51,64,125,0,79,236,200,+2,0,51,116,94,137,80,233,217,3,199,31,237,35,8,227,59,1,236,170,+0,243,81,13,233,149,4,233,116,0,224,54,0,224,55,1,143,186,247,250,+11,193,213,233,116,1,140,71,133,160,199,174,169,7,1,55,50,65,20,0,+51,252,26,1,96,38,2,95,49,52,94,195,224,0,3,65,215,130,209,0,+58,129,225,154,190,139,73,225,91,12,161,83,233,174,1,224,36,4,130,26,+1,49,52,67,212,213,174,160,234,249,210,5,64,35,130,225,64,9,102,91,+64,129,133,31,0,75,226,191,14,1,52,49,132,156,128,81,64,15,230,219,+0,237,208,4,64,73,254,70,0,224,69,8,163,5,97,74,128,73,242,180,+6,98,152,224,17,2,226,163,13,232,86,8,128,42,192,131,160,134,0,54,+133,240,192,118,1,75,50,105,251,64,25,132,61,225,63,5,0,95,228,228,+2,73,235,233,156,3,195,175,224,102,3,65,209,0,55,228,44,1,226,68,+2,134,82,169,56,231,209,5,199,233,131,80,64,52,224,33,16,128,27,128,+113,236,30,0,232,147,1,225,33,2,130,199,224,31,2,226,202,18,224,54,+0,194,205,224,219,5,236,220,4,250,142,0,192,49,232,32,10,64,58,201,+202,177,48,2,32,95,55,124,9,104,186,0,49,134,242,232,4,1,246,193,+2,128,10,160,16,224,149,5,224,165,1,224,117,8,224,249,2,243,126,1,+192,16,128,123,1,95,54,204,250,226,37,1,168,50,197,84,179,54,201,122,+124,134,64,66,248,248,0,246,82,0,70,97,128,73,224,17,6,134,192,0,+95,86,84,128,59,111,226,0,50,105,212,70,32,130,169,0,95,90,156,2,+95,52,53,169,234,231,182,3,253,174,18,128,247,0,52,69,39,65,71,75,+150,2,95,55,54,66,110,1,48,50,78,177,225,78,0,66,205,213,189,227,+110,21,0,90,225,80,2,227,101,32,192,30,193,237,227,98,7,135,30,227,+98,1,0,51,107,82,64,195,71,141,2,54,57,48,71,156,66,3,132,219,+226,104,0,3,95,51,48,54,225,212,1,133,67,1,52,48,102,62,233,241,+4,164,248,64,68,241,253,2,225,213,3,227,102,0,224,21,7,224,24,1,+169,227,224,28,14,224,55,10,64,2,224,29,21,170,49,128,0,193,69,225,+77,1,192,25,96,42,227,91,2,192,57,224,99,6,224,39,9,240,15,6,+224,148,10,196,158,224,23,2,224,129,1,239,0,0,224,5,1,2,95,49,+48,254,25,6,224,1,5,226,138,10,239,195,5,160,87,224,122,0,199,61,+224,113,3,192,160,224,19,0,228,140,0,223,224,96,0,224,208,5,224,44,+0,252,252,2,231,82,9,237,204,1,11,80,114,105,109,105,116,105,118,101,+115,46,126,142,184,128,114,131,132,193,71,183,60,233,81,4,132,33,1,50,+51,88,138,0,48,99,26,2,95,49,48,91,251,109,187,66,181,136,157,224,+108,2,9,101,120,112,97,110,100,68,105,99,116,188,72,65,23,209,87,224,+254,1,228,163,6,224,224,1,228,118,1,225,198,7,225,215,0,193,3,227,+92,0,162,252,233,27,0,234,185,2,229,71,1,192,121,192,1,165,205,225,+219,12,103,99,224,28,26,128,144,193,219,128,30,224,19,0,194,109,166,109,+226,68,22,224,0,0,224,36,10,0,49,90,51,1,48,57,72,166,1,50,+54,233,20,3,225,36,2,227,0,9,230,229,2,160,1,163,129,224,91,4,+236,169,3,224,29,8,193,35,162,43,224,208,4,192,233,183,110,160,55,201,+71,80,146,133,50,224,83,1,154,48,229,223,2,234,106,3,187,104,128,39,+134,48,64,92,154,99,140,229,166,42,224,84,5,224,90,0,224,197,15,241,+236,1,192,17,226,78,23,224,0,1,192,49,129,242,224,83,3,225,145,11,+225,249,0,161,24,225,90,7,224,63,1,232,73,0,225,84,6,225,81,4,+102,101,1,49,52,96,189,221,209,187,116,225,67,3,232,168,0,128,79,99,+142,110,173,199,57,224,21,4,160,139,179,213,179,212,137,153,128,14,147,237,+64,17,175,26,70,100,116,56,0,73,249,223,1,104,234,175,35,97,252,82,+2,83,212,114,122,223,124,227,125,0,74,29,128,203,64,15,225,132,2,232,+146,1,248,42,3,64,134,224,48,16,192,46,64,207,128,0,64,163,139,138,+131,116,186,163,98,20,72,83,129,227,111,91,64,17,143,211,0,49,139,208,+64,98,152,130,65,0,107,205,152,64,65,161,161,204,237,144,1,70,22,250,+145,5,128,192,240,174,21,96,33,165,163,224,228,0,235,208,0,176,196,247,+214,1,240,148,1,64,153,177,128,199,194,64,222,2,49,51,53,244,39,5,+241,218,0,208,20,162,89,64,27,253,87,13,130,110,160,50,160,148,192,64,+205,7,246,180,0,245,93,5,2,95,49,48,140,200,160,198,70,16,0,48,+162,139,3,95,49,57,51,75,224,64,9,2,56,49,32,162,154,129,200,128,+23,227,242,0,64,139,160,107,230,173,6,1,36,120,102,54,64,255,176,179,+80,221,84,223,64,70,137,47,70,80,64,25,1,56,57,67,135,72,233,64,+20,137,91,98,228,1,75,52,96,2,137,149,64,27,137,96,237,171,15,212,+88,193,17,1,51,57,180,64,250,113,1,78,140,243,13,7,226,32,1,194,+43,160,13,233,63,3,168,247,128,90,228,124,1,232,27,3,193,126,232,39,+1,194,14,230,70,0,232,63,9,224,85,5,128,103,229,242,8,202,66,236,+214,9,224,36,2,229,231,1,176,130,160,186,224,112,5,224,98,62,230,74,+0,225,0,0,225,48,4,130,82,108,141,183,154,192,95,192,131,225,44,3,+92,19,72,245,165,130,240,12,2,193,161,65,227,1,51,56,224,34,1,128,+101,251,75,9,224,22,13,224,174,0,192,121,193,235,224,44,13,224,198,0,+227,93,0,242,169,1,252,76,2,241,72,1,225,63,20,225,57,5,224,136,+37,224,102,2,234,86,0,224,102,6,241,230,13,128,100,225,167,5,224,55,+12,224,56,5,192,155,127,251,163,52,193,126,160,14,224,0,2,160,199,230,+2,2,221,10,182,76,231,26,0,90,65,0,52,77,192,112,52,2,95,55,+52,72,6,165,187,96,70,234,125,6,25,105,110,99,111,110,115,105,115,116,+101,110,32,116,121,112,101,32,101,113,117,97,108,105,116,121,32,217,177,97,+48,70,60,64,107,72,161,224,67,8,1,32,126,128,44,192,32,160,0,64,+233,147,65,103,10,243,122,2,230,25,5,229,155,1,225,53,4,96,22,219,+68,243,167,11,129,36,193,83,164,62,168,6,254,37,0,139,223,227,27,0,+91,64,75,159,110,131,139,152,68,170,141,249,229,55,1,0,57,64,17,0,+58,128,206,64,24,1,55,56,93,197,65,82,64,20,223,123,242,124,25,73,+6,129,246,105,164,239,19,42,224,214,1,239,21,2,101,109,242,120,6,65,+39,64,25,0,54,229,183,22,129,14,192,146,86,167,226,24,0,243,99,4,+117,46,224,230,28,126,244,224,227,51,192,8,227,144,3,64,128,166,179,2,+54,56,52,125,60,192,82,224,1,3,236,90,2,224,114,0,224,1,7,134,+64,224,37,21,224,35,4,2,95,49,50,245,91,0,64,135,135,38,225,108,+1,138,20,64,25,135,36,0,85,71,55,167,64,129,94,64,27,166,254,107,+133,119,201,125,200,64,25,130,109,227,63,1,3,97,100,105,99,156,42,96,+34,96,53,100,23,2,51,52,50,128,21,130,113,103,254,238,170,17,92,125,+168,9,1,51,56,130,32,196,200,1,95,54,168,149,1,56,50,232,158,1,+0,49,158,181,64,7,233,157,1,67,3,1,49,50,92,252,99,207,0,56,+64,8,64,79,0,54,224,79,3,66,144,224,76,16,230,55,3,96,197,0,+54,81,157,64,75,66,106,64,75,181,27,1,32,83,64,76,167,65,234,51,+11,104,82,166,34,224,32,12,194,106,228,87,18,224,26,12,171,130,228,80,+7,128,22,90,210,192,186,0,50,66,131,192,186,228,165,19,98,250,67,149,+224,44,2,160,153,224,48,5,227,29,1,133,26,192,7,228,221,22,69,67,+67,28,198,54,224,12,2,2,95,49,50,68,199,99,205,65,200,229,243,6,+224,144,0,245,22,2,64,79,117,122,225,18,1,70,68,0,85,96,66,198,+42,124,100,64,33,64,20,64,59,192,110,0,49,66,149,224,101,5,141,109,+174,116,225,0,2,225,187,18,128,141,233,207,1,224,32,8,192,135,225,25,+8,230,203,1,129,25,164,127,64,12,226,76,18,97,168,206,195,224,78,3,+192,24,0,85,218,43,224,35,10,195,31,224,35,0,96,0,226,64,9,64,+27,157,18,129,142,100,242,129,15,77,37,140,81,200,104,160,103,232,142,0,+141,216,225,63,4,96,0,225,171,8,64,141,224,101,0,110,250,192,52,224,+60,2,224,172,4,254,170,4,67,130,213,208,64,114,128,182,0,80,132,105,+132,235,130,206,96,189,0,50,77,92,64,25,213,113,98,112,108,92,0,51,+65,245,64,26,228,234,0,0,55,69,253,3,95,49,51,55,132,233,64,31,+125,67,0,51,112,108,3,54,56,32,64,228,185,1,1,91,93,68,172,0,+58,128,44,237,181,4,237,187,2,70,20,213,208,143,228,239,238,0,0,83,+98,155,86,183,132,224,240,4,0,128,8,205,153,136,190,0,53,67,154,162,+178,153,83,105,53,224,141,1,8,99,111,109,112,111,115,101,83,101,69,136,+161,64,64,200,77,164,1,52,55,97,33,177,114,64,21,68,153,1,95,53,+95,239,96,0,65,102,158,64,225,102,5,81,137,133,53,224,147,21,128,141,+224,140,1,7,104,97,115,70,105,101,108,100,128,138,64,42,129,131,64,119,+224,79,43,2,115,101,116,224,79,13,0,54,197,137,96,64,110,135,224,64,+2,2,95,54,55,66,106,224,71,1,10,114,101,99,67,111,110,69,114,114,+111,114,193,187,133,203,235,48,1,225,166,1,132,42,128,165,1,49,51,65,+66,234,54,6,26,67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,+111,110,46,73,110,116,101,114,110,97,108,46,193,131,128,87,64,62,125,215,+103,130,64,146,234,130,8,4,44,32,97,116,32,170,132,104,162,0,49,214,+90,64,164,130,237,132,140,165,167,224,160,3,1,95,49,76,241,130,58,74,+46,96,7,145,7,0,79,225,100,2,162,222,224,192,2,1,104,97,97,7,+213,72,64,106,195,63,1,80,32,165,82,96,21,223,186,231,143,0,233,82,+0,64,220,0,54,97,113,228,214,1,236,93,2,252,189,4,224,21,2,64,+189,228,118,1,98,142,245,196,3,177,80,224,56,4,196,173,96,62,235,48,+1,133,46,224,29,8,128,100,64,2,151,94,246,229,3,132,142,4,32,64,+95,53,55,78,75,129,150,78,50,102,4,0,49,240,210,5,133,58,99,159,+73,5,0,53,178,225,165,182,202,64,105,250,0,90,161,159,83,175,236,191,+3,226,206,7,7,78,101,115,116,101,100,32,102,66,210,11,115,32,110,111,+116,32,97,108,108,111,119,101,162,223,96,0,225,14,2,235,250,0,64,211,+134,19,247,179,6,71,93,70,252,224,50,5,160,162,224,147,19,226,136,9,+4,101,120,116,114,97,128,154,2,40,115,41,130,146,3,66,32,95,53,73,+216,132,62,131,84,192,145,65,254,236,166,0,128,32,193,34,193,189,98,167,+224,174,1,224,22,3,115,9,64,16,102,12,130,220,107,96,96,30,150,32,+64,26,243,228,1,237,23,7,160,0,64,134,124,85,182,55,3,51,55,32,+95,202,22,231,215,0,0,55,238,150,1,66,212,197,245,230,157,0,0,85,+104,149,229,12,16,219,94,64,107,102,63,0,50,116,72,64,255,160,24,106,+102,123,186,93,5,0,55,106,133,64,32,205,112,64,107,110,75,1,90,32,+92,107,225,22,3,0,67,67,170,198,238,224,26,6,99,198,85,110,0,51,+74,155,195,207,197,214,160,52,65,34,227,149,14,236,231,3,137,21,163,42,+227,129,5,133,134,226,41,8,169,35,229,69,4,11,111,114,100,32,119,105,+108,100,99,97,114,100,226,192,9,138,78,224,192,1,92,145,68,81,64,169,+200,91,65,33,133,181,64,211,224,253,0,212,141,225,210,2,225,177,1,0,+54,206,53,64,74,86,182,64,3,0,75,77,156,181,64,96,48,118,186,64,+60,99,194,107,188,64,25,206,13,96,126,225,40,0,75,247,195,208,231,180,+0,249,163,4,159,226,64,79,96,15,228,103,3,224,39,3,64,32,66,185,+226,238,8,238,143,0,64,143,174,217,238,145,10,119,142,168,61,146,205,2,+95,49,49,85,218,224,78,5,255,53,0,227,82,5,64,94,197,185,0,90,+66,200,96,17,197,181,239,199,1,64,7,64,144,64,29,130,254,200,122,65,+117,134,31,64,27,130,234,231,167,40,0,103,231,167,14,0,53,216,81,203,+46,198,196,165,174,250,81,1,69,138,102,211,128,247,112,204,196,112,230,200,+2,128,132,238,69,3,2,111,120,121,165,61,224,154,3,64,123,131,124,103,+46,201,222,65,58,128,4,86,196,4,79,32,35,52,54,195,124,64,49,130,+102,224,93,1,1,66,64,142,220,64,44,138,14,4,53,52,32,95,52,88,+131,64,21,174,14,196,193,0,51,133,10,1,49,51,71,130,64,31,129,247,+130,93,87,185,2,95,49,48,73,8,0,75,128,29,193,182,67,32,0,35,+97,218,138,201,64,69,238,177,15,2,50,55,52,64,104,0,52,134,175,206,+177,226,219,10,98,91,1,50,50,163,82,243,131,0,231,58,0,88,44,229,+125,1,101,103,109,152,104,181,251,124,0,197,175,212,198,205,22,224,2,3,+128,24,244,123,1,0,39,96,80,192,39,134,40,122,43,239,110,13,64,29,+198,86,245,255,2,158,162,224,5,3,102,206,227,159,3,64,19,0,83,128,+154,238,131,13,228,243,0,128,24,255,54,4,216,218,67,86,200,114,193,71,+208,69,137,104,100,71,128,197,97,131,68,132,0,95,107,93,1,49,50,96,+185,2,95,49,50,66,31,0,64,96,20,224,0,0,193,89,161,92,65,38,+64,66,128,34,133,11,122,41,108,41,97,45,173,77,64,37,144,63,224,68,+4,149,157,225,1,4,224,172,3,224,11,3,64,234,208,186,85,81,160,159,+224,152,0,130,2,246,184,11,130,197,0,48,229,150,2,160,132,250,212,7,+224,164,3,251,251,0,66,187,196,91,226,142,13,128,50,226,116,0,232,204,+3,129,97,200,107,135,144,192,44,224,244,2,166,69,224,56,2,71,243,129,+134,232,106,4,64,140,173,196,1,50,50,253,156,0,2,95,55,54,101,116,+196,35,64,112,224,175,24,226,22,0,156,136,235,218,0,0,52,106,46,196,+178,0,50,67,208,230,197,0,64,91,132,127,1,80,32,64,11,132,89,128,+73,224,107,13,193,162,225,159,18,233,252,4,96,129,226,167,1,225,34,22,+0,50,81,190,225,34,9,66,143,132,162,185,72,64,84,71,62,96,199,64,+32,231,61,3,224,184,21,192,35,97,12,96,111,231,53,5,135,76,0,52,+67,253,99,140,65,47,160,133,231,32,1,242,93,1,64,194,152,78,128,82,+245,227,5,64,70,3,10,65,32,90,64,46,64,14,165,51,254,185,14,152,+164,100,3,0,48,114,3,0,49,87,71,240,138,1,1,50,51,73,86,164,+137,228,145,2,0,85,228,54,7,244,194,5,2,75,105,110,235,185,0,64,+132,130,252,1,95,52,97,23,68,230,131,248,168,94,227,232,0,153,212,164,+174,4,80,32,95,52,50,67,171,1,52,50,96,97,224,6,4,106,142,184,+129,160,57,128,5,0,85,64,53,64,194,192,32,224,106,19,109,113,224,108,+1,64,255,96,114,224,108,31,0,82,224,108,26,65,70,96,100,0,83,172,+131,224,110,6,160,103,224,117,2,224,106,9,224,63,3,224,113,2,173,181,+102,5,145,97,122,64,160,40,224,108,18,224,115,2,128,67,224,61,13,160,+106,3,95,49,55,51,225,219,2,3,92,51,52,38,64,3,3,44,48,58,+48,237,157,2,98,30,0,51,70,199,199,132,0,51,76,113,224,13,2,94,+166,224,13,1,68,121,160,13,0,53,224,25,2,0,53,224,23,1,66,56,+204,96,73,252,72,132,0,58,96,57,163,153,128,184,196,23,96,61,117,174,+95,11,162,201,64,47,200,237,224,47,9,224,57,2,74,25,224,57,0,224,+64,6,171,99,224,54,10,224,152,1,224,53,9,0,54,200,172,224,2,0,+131,163,241,88,2,228,203,2,231,193,5,71,124,100,61,128,27,239,236,1,+224,50,4,113,154,228,184,4,2,95,49,51,104,217,228,207,6,64,148,154,+232,67,206,164,181,72,232,196,151,119,182,160,156,224,2,6,128,112,64,0,+192,44,130,209,247,96,4,192,59,196,209,232,255,0,160,94,130,165,67,251,+128,46,224,96,4,96,17,224,137,1,164,137,224,38,4,96,35,224,75,6,+192,37,193,20,96,150,97,35,225,20,10,109,187,225,20,4,192,112,158,89,+128,85,193,90,230,99,13,225,160,6,165,222,192,71,192,73,97,108,133,192,+224,100,82,192,14,162,135,224,17,0,224,15,0,224,133,3,224,47,2,155,+92,164,149,226,128,31,221,139,192,78,224,141,1,224,143,0,224,19,2,187,+191,226,13,6,191,79,96,13,224,10,1,129,175,131,12,0,64,162,103,224,+73,1,234,188,8,226,108,2,224,37,1,224,131,18,224,70,0,195,112,192,+136,224,119,0,134,195,73,156,216,240,96,5,64,0,226,87,9,226,93,12,+231,201,7,231,207,0,128,172,131,165,1,49,50,127,210,64,74,248,52,11,+236,71,0,224,189,2,224,21,15,160,132,248,96,5,240,34,1,128,0,85,+49,178,113,228,10,6,96,0,225,255,54,101,154,68,80,228,223,0,226,211,+10,196,56,128,12,224,94,6,160,221,192,86,66,172,0,50,132,31,192,199,+192,54,129,201,164,192,96,119,136,223,237,83,4,64,13,224,95,3,65,125,+254,179,5,226,36,0,196,212,226,10,0,192,34,67,131,224,46,0,237,81,+7,224,129,1,160,230,225,241,6,236,125,10,0,51,107,19,64,38,0,79,+236,53,5,229,202,30,224,103,0,73,132,76,171,0,48,223,161,105,150,67,+219,128,10,110,53,64,38,0,53,77,102,79,10,117,184,244,12,2,225,100,+0,77,217,231,200,1,5,83,117,98,115,117,109,119,166,11,32,99,104,101,+99,107,32,102,97,105,108,101,201,184,226,56,7,65,123,138,76,225,29,5,+2,95,57,49,236,69,1,2,49,51,49,64,19,241,161,8,0,51,167,208,+65,20,108,121,3,51,52,32,89,133,217,129,142,156,252,160,241,228,33,11,+64,130,195,201,230,62,1,225,228,4,166,26,252,253,1,160,51,224,46,27,+228,90,0,160,25,162,239,224,39,9,130,160,224,137,0,228,88,1,192,32,+177,196,0,85,252,123,18,160,68,224,36,2,224,150,0,248,16,0,210,159,+195,120,131,179,97,232,121,48,213,214,208,145,160,149,226,223,0,231,86,6,+224,162,3,172,129,225,26,31,159,16,225,145,5,255,48,9,224,193,9,228,+178,1,224,31,4,229,213,8,192,142,192,124,131,169,224,13,11,240,205,13,+224,44,15,169,111,227,108,12,128,26,160,154,255,70,6,224,72,0,224,185,+1,134,205,225,92,1,177,219,192,118,226,35,7,192,53,226,169,3,225,98,+20,194,124,162,254,231,46,18,224,51,1,176,101,224,175,11,225,164,10,128,+97,130,113,192,159,192,138,226,159,9,224,192,1,224,94,2,162,130,229,238,+0,165,224,140,64,69,62,130,146,0,55,209,10,128,207,161,51,224,196,14,+174,78,224,101,2,128,47,224,97,3,224,214,2,230,139,0,160,82,160,145,+64,77,228,246,5,128,31,129,116,224,27,6,128,26,202,105,124,55,64,9,+96,180,109,51,224,4,1,128,116,1,95,50,68,211,101,211,250,22,3,11,+102,114,101,101,84,121,86,97,114,115,58,32,252,166,5,160,255,96,236,133,+12,126,210,64,0,0,85,119,164,0,85,103,255,67,250,178,34,128,6,69,+31,140,240,2,75,32,89,162,102,203,155,228,250,3,228,151,12,193,224,225,+204,9,225,250,2,89,98,129,173,231,46,7,136,158,116,22,134,141,230,208,+4,121,44,64,1,235,67,9,67,73,189,194,224,0,1,226,85,12,225,235,+2,65,197,193,135,229,225,0,152,84,171,214,234,62,1,231,90,7,200,141,+231,128,3,231,172,4,192,36,128,177,224,179,7,232,252,0,169,218,224,191,+3,215,116,160,167,225,13,40,64,45,128,79,0,50,83,98,224,0,1,224,+42,5,0,80,217,158,135,85,72,170,255,112,2,231,90,15,111,90,70,93,+229,244,1,225,147,15,164,250,128,186,170,123,128,246,170,24,230,60,5,128,+13,234,67,1,64,147,219,159,224,141,1,218,23,224,114,8,224,184,0,152,+75,253,75,3,192,116,102,176,152,180,160,14,2,79,32,35,78,139,99,7,+163,56,147,179,160,127,239,115,7,128,214,226,30,0,160,249,224,156,2,214,+173,225,245,0,224,27,10,232,97,2,96,2,235,202,7,230,42,8,100,213,+238,62,0,129,212,224,255,8,213,144,224,20,3,64,194,0,54,239,106,0,+224,143,7,250,224,4,227,46,1,164,212,232,91,2,186,240,225,232,0,1,+51,48,103,44,2,95,49,49,91,58,224,58,0,224,165,2,96,121,143,228,+236,247,1,162,234,227,243,5,1,50,57,96,75,224,37,29,64,94,74,103,+64,93,139,248,64,42,80,66,231,19,5,128,168,164,153,137,180,225,115,0,+230,12,5,225,170,2,224,50,2,230,21,4,237,132,9,231,72,3,224,62,+2,229,9,5,230,126,0,192,30,229,18,9,224,34,8,232,56,5,234,109,+0,236,218,2,192,231,236,52,4,241,7,2,233,4,3,161,144,0,49,221,+70,224,101,5,224,88,6,161,25,224,128,3,96,14,1,95,52,85,93,164,+70,224,24,0,147,169,139,206,70,211,178,176,193,178,198,182,224,133,9,224,+18,11,224,23,0,233,88,8,231,151,9,130,33,109,109,224,13,5,224,56,+12,224,57,3,229,202,1,160,44,96,9,227,123,6,231,111,0,128,29,133,+228,64,9,226,160,5,233,249,6,224,42,1,196,39,193,28,246,154,1,225,+30,11,225,235,2,128,18,162,88,227,255,2,225,183,1,225,227,13,96,195,+227,211,8,252,88,0,233,251,3,98,239,227,6,4,96,35,224,17,9,225,+52,2,67,112,64,189,245,201,1,225,69,1,144,95,123,166,96,133,232,151,+5,12,99,97,110,110,111,116,32,117,110,105,102,121,32,141,203,129,73,165,+134,1,49,49,101,13,224,55,8,3,32,97,110,100,128,47,192,34,224,236,+3,162,3,226,66,9,68,17,0,51,239,146,6,230,195,4,1,49,50,129,+227,193,76,68,197,129,244,64,227,66,47,64,66,223,152,64,90,0,57,105,+179,222,153,0,50,174,58,64,42,254,131,4,11,80,114,105,109,105,116,105,+118,101,115,46,126,158,141,64,42,218,180,135,202,192,8,166,221,0,58,128,+93,160,35,231,113,11,1,49,51,117,198,228,215,3,204,45,64,27,0,55,+162,198,229,113,6,65,13,229,235,0,226,83,8,228,55,32,96,146,224,141,+2,129,14,126,35,240,63,2,160,39,230,45,6,66,245,106,230,114,204,96,+172,131,139,226,56,33,4,121,99,108,105,99,226,50,10,102,239,66,17,65,+186,116,84,226,60,9,0,61,226,58,17,229,93,5,233,79,7,225,113,1,+192,216,173,158,224,193,0,192,192,161,112,224,132,0,161,122,252,64,3,227,+144,18,225,6,7,0,50,115,32,169,34,131,24,0,51,110,201,224,217,7,+4,101,114,114,111,114,171,226,128,113,0,54,136,155,121,90,224,40,1,3,+116,121,112,101,64,36,224,17,1,0,107,219,5,224,18,1,3,115,111,114,+116,224,18,6,4,114,101,97,108,109,64,19,64,90,135,185,241,96,42,0,+49,167,157,66,45,241,96,1,133,13,198,99,103,144,226,149,1,129,200,226,+77,1,238,139,5,231,109,5,224,39,10,209,49,193,179,233,165,0,224,36,+4,129,125,231,131,17,98,28,130,202,128,107,205,173,130,198,237,154,6,160,+137,139,221,0,90,64,208,0,90,64,49,192,25,224,100,8,236,250,2,206,+245,169,103,165,149,224,215,10,230,250,2,224,79,8,236,194,9,113,146,96,+34,160,25,64,106,128,11,64,185,0,48,223,8,64,14,173,227,65,170,98,+63,104,104,225,100,1,224,137,9,129,34,161,137,225,94,12,128,90,166,70,+225,128,49,228,120,7,195,148,132,5,86,97,234,240,3,227,194,11,64,7,+128,168,231,216,4,163,196,246,132,10,94,98,232,23,1,1,95,49,92,3,+1,48,57,100,9,70,50,139,113,128,87,227,189,2,225,137,1,96,189,0,+85,164,78,224,61,2,1,95,51,172,218,107,92,224,66,2,136,135,225,37,+13,229,41,0,225,104,15,194,72,233,40,8,192,24,226,148,4,226,29,0,+224,78,15,225,148,16,225,147,2,0,90,238,184,7,224,47,11,128,184,224,+47,14,96,0,224,50,13,255,224,0,225,197,11,224,24,14,129,167,225,220,+3,239,46,8,224,131,10,227,5,4,66,253,199,233,64,76,0,50,71,141,+129,30,4,32,95,54,56,51,104,28,78,159,1,49,54,133,226,192,189,172,+241,237,52,0,64,72,136,15,128,70,0,55,149,25,0,54,96,41,77,50,+192,41,64,40,200,21,160,111,0,67,224,106,12,0,58,141,92,69,59,5,+54,56,52,32,75,32,66,91,224,1,3,186,83,128,174,224,1,11,196,135,+224,37,19,224,35,4,224,32,23,224,29,20,224,26,17,70,244,240,125,2,+64,216,136,158,3,85,32,75,52,64,2,0,90,64,4,192,26,199,62,0,+89,130,184,232,190,1,237,174,1,161,131,224,116,2,228,68,1,194,0,96,+57,166,109,79,167,157,233,64,21,239,43,11,128,69,104,22,227,116,1,130,+120,128,112,224,80,0,130,2,80,86,0,56,97,220,218,33,96,28,234,110,+10,97,229,103,41,112,135,1,49,49,71,16,224,115,0,224,98,0,228,164,+4,234,147,3,209,241,96,7,234,59,4,64,0,166,132,192,188,163,238,133,+126,239,55,5,68,133,128,51,97,101,0,54,197,242,132,5,153,181,241,241,+23,68,212,240,214,5,242,112,9,252,91,2,241,219,12,64,0,240,152,6,+64,153,66,230,229,52,1,169,82,177,225,64,34,207,227,1,80,32,134,39,+0,85,128,22,134,185,229,255,9,80,37,198,232,128,167,227,217,12,96,106,+227,217,6,128,46,97,45,169,245,0,48,132,212,64,111,132,43,194,183,64,+2,224,26,0,186,72,227,171,13,192,1,227,179,0,225,66,1,224,1,9,+227,183,5,227,61,2,64,102,196,59,0,89,143,119,0,39,208,243,167,114,+208,204,192,75,208,59,226,159,1,161,242,162,227,224,41,2,231,233,10,224,+89,2,224,47,21,227,118,2,236,164,0,232,207,15,203,0,96,234,230,12,+7,224,28,3,230,192,4,226,105,4,67,32,1,50,57,203,116,192,101,240,+22,0,225,200,0,254,254,1,156,149,225,229,7,231,227,10,160,79,230,165,+9,231,9,4,224,39,0,224,237,0,233,195,2,225,217,3,225,85,5,224,+55,1,160,252,231,143,15,231,222,177,224,221,3,224,59,11,192,30,165,107,+145,179,97,59,228,175,3,228,246,2,195,140,224,92,4,160,63,225,104,2,+237,105,10,229,37,0,193,16,226,151,6,165,200,1,54,54,96,114,96,68,+226,100,17,224,119,5,229,235,1,242,113,0,230,132,8,136,104,224,180,16,+98,68,227,91,0,224,154,2,192,21,193,64,224,62,1,226,96,3,226,200,+3,160,44,192,153,226,144,1,160,110,230,153,2,158,31,3,32,95,54,50,+211,203,1,95,56,160,164,225,140,1,243,81,0,227,43,3,129,10,129,20,+145,107,77,25,138,213,199,43,224,30,4,251,137,2,174,221,247,138,4,238,+112,1,13,98,97,100,32,115,121,110,111,110,121,109,32,117,115,110,179,224,+151,0,102,80,230,70,14,160,0,193,103,184,195,0,58,150,34,81,255,3,+32,85,32,95,112,92,1,90,32,90,104,229,50,0,235,114,0,128,233,229,+16,1,229,19,29,128,235,229,19,2,224,44,10,238,140,1,224,114,6,224,+36,4,227,151,16,237,11,3,173,189,96,11,192,118,64,183,196,177,193,158,+153,84,201,55,0,80,134,154,224,230,2,192,212,132,189,224,71,1,160,150,+131,22,130,206,78,242,65,237,98,42,252,171,3,225,132,8,64,182,227,160,+5,128,171,224,209,8,229,63,3,128,175,248,108,1,227,2,0,230,50,15,+238,230,0,229,50,26,224,121,8,192,24,65,74,164,92,224,159,11,224,37,+1,197,116,243,180,0,253,123,2,197,119,96,247,0,54,71,141,66,243,2,+53,52,57,253,234,1,64,0,125,162,241,101,2,2,117,98,115,117,1,8,+109,112,108,101,109,101,110,116,101,145,135,64,0,66,175,243,173,1,1,80,+32,161,41,0,80,72,224,97,36,136,112,128,14,0,54,232,127,1,66,211,+128,1,171,60,160,75,137,76,129,68,73,45,230,49,1,65,93,72,210,64,+37,177,149,2,51,56,54,160,228,64,20,137,77,131,195,105,26,2,50,57,+49,128,25,136,247,224,208,1,2,100,105,99,82,54,64,26,204,245,251,154,+11,161,203,230,40,5,164,103,149,79,162,64,211,213,0,51,64,40,1,50,+56,64,24,251,132,9,96,148,1,10,65,123,170,0,54,99,23,0,58,128,+43,64,201,224,123,2,0,48,64,200,0,83,69,142,130,31,130,209,235,96,+3,128,148,0,48,163,62,3,83,32,95,50,123,197,170,23,0,50,139,217,+170,23,240,43,5,86,7,106,90,96,161,1,57,51,128,10,4,95,49,56,+49,32,194,165,64,64,141,233,97,4,161,190,225,174,1,225,180,7,128,219,+64,50,234,63,3,68,176,224,1,13,234,30,5,224,35,26,224,32,23,224,+29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,+192,8,96,5,238,56,6,160,0,65,44,0,54,129,44,77,8,3,95,55,+50,48,248,109,8,6,45,104,97,112,112,101,110,99,100,64,47,131,20,144,+100,227,242,4,0,95,156,184,2,85,32,67,182,181,224,32,14,229,126,0,+229,50,0,224,41,4,134,127,189,3,64,29,132,37,128,33,77,222,0,50,+94,92,94,45,245,202,3,1,61,62,182,163,224,22,5,248,71,2,160,33,+224,91,5,2,95,49,54,67,20,85,237,225,23,7,163,214,1,52,56,98,+251,102,239,116,194,96,132,96,7,95,235,80,128,1,95,49,101,225,224,6,+5,224,33,0,64,13,128,39,224,33,21,160,26,224,40,3,224,33,13,224,+40,3,4,64,95,49,53,54,99,103,64,20,64,182,132,120,0,75,98,6,+247,50,17,98,19,0,83,136,194,1,66,32,101,98,193,16,247,33,4,22,+97,115,115,101,114,116,84,67,77,111,100,101,58,32,101,120,112,101,99,116,+101,100,61,248,71,14,96,97,102,212,137,8,69,206,4,55,54,32,64,79,+96,18,0,49,160,8,0,54,224,8,0,0,50,248,248,1,248,118,9,4,+44,32,103,111,116,128,105,192,90,201,94,193,162,133,74,2,75,51,32,64,+12,174,52,4,49,49,56,32,75,183,192,88,85,224,81,2,5,84,67,69,+120,112,114,160,81,224,25,6,0,84,183,225,224,26,10,0,75,215,234,224,+26,9,0,83,215,242,64,27,0,50,133,112,129,191,1,50,52,224,12,0,+64,156,133,109,130,189,0,50,97,148,131,16,5,50,55,55,32,95,54,65,+17,181,167,105,221,175,110,233,227,3,225,30,8,15,77,117,108,116,105,112,+108,121,32,100,101,102,105,110,101,100,184,197,1,95,54,129,36,0,95,97,+16,64,123,0,55,165,213,2,55,52,50,65,39,73,255,211,49,65,155,2,+95,53,55,101,252,0,55,133,52,64,131,0,54,65,206,232,251,0,194,139,+132,89,138,8,128,17,192,19,233,7,2,224,2,1,194,102,235,88,0,99,+102,129,204,193,198,4,95,49,48,51,50,128,125,0,54,192,149,226,178,15,+226,207,15,137,61,128,134,224,31,11,169,26,128,32,230,188,6,64,31,71,+31,201,194,128,5,224,33,3,97,38,66,223,162,80,97,49,1,49,50,84,+133,96,7,64,93,96,20,224,100,20,0,53,192,100,135,173,224,165,0,224,+183,19,160,83,129,65,0,66,115,9,224,185,12,224,113,13,64,178,227,160,+0,224,140,10,238,111,9,67,143,64,134,0,50,103,143,64,0,65,150,178,+78,2,52,53,48,227,82,0,99,191,163,189,96,7,100,142,233,164,7,2,+99,99,32,227,30,3,64,39,96,215,135,237,97,70,161,75,0,54,80,57,+160,23,2,49,50,55,224,131,1,64,7,99,82,224,13,0,104,81,96,13,+64,155,133,160,238,62,5,107,84,96,85,128,197,209,115,187,29,226,141,0,+64,71,0,50,64,215,97,102,64,47,64,8,224,7,7,64,101,133,79,3,+85,32,75,50,72,103,0,65,64,46,64,22,132,122,244,167,3,224,121,5,+224,108,5,2,48,52,48,224,108,16,64,77,132,187,224,77,31,2,50,54,+57,224,77,20,132,108,73,41,83,85,97,226,0,58,96,52,224,100,2,224,+97,6,96,88,0,52,75,122,224,87,6,64,56,132,49,164,25,160,49,75,+178,96,138,100,161,203,244,224,53,3,235,110,0,0,51,137,160,64,19,0,+54,163,229,104,144,1,52,48,99,250,71,128,193,97,201,203,64,22,129,222,+1,75,50,65,115,64,15,166,216,0,50,171,191,66,126,102,232,64,224,64,+15,129,67,73,237,234,19,2,64,24,248,34,15,1,50,53,248,34,4,99,+24,244,118,19,244,112,1,224,25,7,192,1,234,78,101,233,210,5,64,192,+225,168,1,1,49,50,75,214,206,98,4,51,55,32,95,56,129,215,0,73,+71,123,99,198,0,51,86,140,1,50,53,69,92,0,79,129,29,1,53,51,+173,168,130,24,0,51,132,40,96,34,64,6,64,63,103,174,64,4,64,110,+171,102,234,57,10,233,118,2,228,3,0,64,49,129,255,224,39,12,167,101,+64,37,205,118,224,200,23,67,22,0,79,64,178,224,207,2,66,84,101,206,+2,79,32,64,96,22,64,16,64,6,66,159,96,189,224,52,11,140,143,224,+52,2,133,138,224,52,21,137,161,224,52,2,151,102,224,52,21,98,150,224,+52,3,108,242,224,52,2,128,27,160,52,0,52,64,234,224,45,3,161,138,+64,175,225,138,0,130,40,225,191,14,97,80,131,74,0,80,71,254,64,35,+105,38,1,50,53,101,91,64,120,224,12,7,96,140,64,43,131,98,64,30,+0,48,96,59,251,149,2,1,52,55,128,42,101,212,68,55,0,49,80,219,+242,137,2,225,218,2,0,45,171,121,64,66,227,140,0,100,61,104,218,142,+189,0,58,96,70,226,80,0,64,14,130,206,111,83,64,14,162,110,225,74,+0,0,53,128,52,226,83,18,96,120,64,35,130,81,224,35,12,1,78,97,+175,125,65,137,224,36,15,5,83,121,109,98,111,108,160,39,129,65,224,39,+12,8,67,111,110,115,116,114,97,105,110,192,83,161,65,227,34,21,234,96,+0,64,49,129,99,224,39,12,170,163,64,37,129,70,97,57,161,121,0,58,+129,240,103,173,1,48,55,224,64,2,5,98,117,105,108,116,105,109,191,77,+91,64,3,64,43,202,6,109,138,176,202,0,51,129,98,200,54,0,48,71,+139,129,162,0,49,138,182,82,202,64,5,140,68,224,21,12,64,70,129,146,+109,58,134,108,0,90,69,118,224,9,0,172,54,1,50,54,209,232,64,60,+167,227,96,7,128,92,140,216,96,85,64,84,238,119,0,68,23,242,207,5,+0,83,208,158,180,11,73,149,74,166,1,48,52,235,75,0,137,12,238,142,+5,232,179,5,5,103,101,116,73,100,101,97,185,127,68,87,148,224,142,1,+0,85,157,57,64,136,219,63,1,95,55,200,193,129,81,177,242,107,227,135,+33,0,55,71,4,1,95,55,124,126,1,95,54,64,20,64,39,223,36,230,+143,8,0,51,251,67,2,64,40,251,6,10,70,131,230,20,9,230,26,8,+230,125,90,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,+2,240,191,11,65,35,231,220,16,0,50,231,220,5,75,45,231,220,13,167,+214,224,16,1,224,1,5,225,85,170,225,43,8,64,255,243,62,0,0,51,+243,59,15,64,37,233,180,0,106,237,224,34,6,64,32,0,54,192,32,106,+91,96,2,192,26,242,24,12,236,108,6,99,68,129,125,236,244,10,0,49,+152,237,140,208,65,178,236,162,0,142,84,64,216,144,252,0,48,72,9,195,+217,160,127,195,151,226,12,0,97,28,254,162,0,1,50,50,102,221,254,162,+6,1,95,55,74,222,64,29,203,39,64,97,234,143,1,225,43,14,96,40,+165,220,226,82,1,188,65,224,1,11,226,70,170,224,17,8,224,14,5,224,+11,2,192,8,244,100,12,65,41,246,216,1,224,1,13,225,29,5,225,68,+245,244,137,8,65,82,164,227,0,48,87,162,71,174,198,140,66,230,236,245,+2,226,173,15,96,42,241,248,1,96,70,103,71,64,108,64,75,64,31,201,+95,2,48,56,55,73,111,91,237,139,134,2,32,95,57,78,161,96,161,171,+137,0,48,144,125,96,17,1,49,48,103,163,177,60,1,54,49,67,96,67,+91,67,133,74,221,1,55,48,103,219,0,57,131,97,96,106,249,88,1,149,+220,154,136,250,133,11,149,117,224,25,6,100,38,224,25,12,146,90,246,123,+7,147,146,157,43,168,241,231,74,1,150,134,161,137,102,12,239,109,3,65,+145,242,28,1,160,119,242,229,6,207,82,252,4,5,108,189,187,205,196,109,+113,201,96,32,65,120,129,36,228,202,2,64,12,133,2,128,74,2,95,49,+48,65,65,97,130,1,49,48,97,88,133,27,1,49,48,68,237,1,95,57,+145,211,97,146,128,11,128,0,224,162,3,255,10,1,226,121,0,133,75,0,+52,122,14,128,16,128,143,224,194,0,224,108,3,97,226,0,57,87,13,192,+98,160,182,97,219,224,117,3,160,96,150,15,128,38,96,108,0,89,232,179,+0,189,72,224,116,0,224,50,1,129,39,96,50,96,222,229,222,2,64,13,+122,38,226,207,0,96,48,241,81,0,250,58,13,255,138,0,99,41,235,123,+6,1,36,102,137,228,64,123,0,89,224,151,0,202,151,64,139,73,188,67,+119,160,206,224,58,2,0,120,246,145,3,251,81,0,227,11,1,224,151,22,+192,101,250,249,1,150,48,246,218,0,245,121,2,254,117,0,226,162,0,130,+86,193,58,226,224,0,160,133,129,76,67,81,226,205,3,128,10,65,132,253,+171,2,225,240,0,226,232,0,161,131,231,90,9,224,0,3,227,86,4,140,+24,99,85,70,252,131,195,226,119,0,0,79,64,63,161,208,98,236,162,140,+0,64,65,112,0,67,130,209,77,30,250,72,12,118,95,68,212,224,29,6,+131,200,160,29,125,92,236,67,1,237,94,16,1,73,79,183,162,192,0,158,+191,96,19,98,217,2,95,57,56,67,64,1,56,54,224,63,2,9,73,79,+46,112,101,114,102,111,114,109,224,62,1,98,74,225,148,0,99,22,162,182,+225,70,4,112,24,67,97,126,211,78,234,69,61,208,183,65,97,225,92,2,+224,222,4,132,3,161,81,131,138,64,228,0,48,149,113,184,7,196,185,0,+67,97,108,1,95,49,115,199,96,38,73,227,226,169,2,0,103,224,246,5,+228,11,1,64,67,237,67,8,194,153,101,83,237,78,4,105,48,97,51,225,+220,5,196,45,132,202,160,12,144,137,0,48,144,29,0,48,216,185,67,10,+248,206,4,240,186,1,229,171,7,229,170,7,93,188,105,87,96,11,160,13,+224,133,1,128,9,64,130,229,73,5,225,210,0,2,79,32,35,85,195,160,+109,209,47,128,0,224,96,3,133,222,229,27,8,227,79,2,65,118,162,208,+64,2,225,243,1,224,125,8,64,0,229,242,7,98,173,123,102,163,235,196,+110,216,93,0,95,123,187,91,24,66,223,96,168,225,8,1,133,227,0,53,+207,140,0,49,74,208,243,23,0,0,55,166,101,96,0,245,197,2,99,46,+130,181,64,0,71,120,242,9,2,69,225,142,175,0,67,166,188,1,67,39,+92,19,5,95,53,50,55,32,95,81,235,128,58,231,155,8,90,49,0,95,+85,85,69,5,73,218,128,146,128,16,1,50,49,128,16,79,26,64,100,139,+35,166,138,225,175,0,128,116,193,97,230,236,4,160,21,226,80,1,100,47,+0,39,98,152,96,139,230,210,1,128,61,157,143,130,73,192,51,225,175,2,+230,253,1,224,29,5,230,219,1,1,57,54,228,1,12,2,115,101,113,219,+218,230,229,0,224,78,1,192,13,194,3,135,237,128,192,128,88,108,195,97,+153,195,171,64,5,164,179,97,94,96,242,132,20,230,58,5,97,184,64,42,+64,17,102,37,198,61,128,86,231,254,20,230,235,16,230,233,1,64,144,199,+125,164,76,200,172,230,248,42,96,19,0,56,248,62,3,130,120,97,255,139,+249,0,90,161,207,136,199,97,36,129,226,166,14,225,222,139,96,61,2,49,+50,48,74,232,128,75,117,151,133,244,66,249,169,12,160,22,128,41,225,140,+4,228,225,0,225,121,104,97,122,140,54,97,101,201,208,226,60,9,226,44,+6,247,170,0,64,204,239,232,4,239,6,16,69,228,180,52,100,39,104,190,+229,77,3,65,217,136,121,132,232,65,207,65,11,154,153,64,55,192,158,199,+92,138,111,193,107,129,92,68,237,103,72,224,119,0,140,175,65,89,139,225,+0,85,100,113,64,40,250,230,2,225,94,0,96,104,0,80,134,150,236,89,+0,234,156,35,64,11,0,83,201,54,194,28,227,239,1,64,111,2,95,49,+48,92,24,151,129,196,235,134,165,96,123,128,33,65,125,160,33,230,142,1,+167,229,96,193,141,29,2,83,32,83,128,194,237,28,12,100,54,224,25,12,+109,152,224,25,12,129,99,64,197,231,223,4,181,46,97,152,64,134,64,193,+245,58,3,99,68,224,20,7,96,71,180,234,236,46,1,64,62,71,233,227,+5,3,70,68,235,102,30,3,79,32,35,49,64,14,166,252,226,239,7,235,+93,26,96,0,197,151,232,84,1,96,248,74,75,160,24,192,130,0,54,153,+41,142,160,224,7,6,64,0,203,108,242,206,4,206,66,169,16,225,102,9,+225,251,0,224,131,4,128,130,226,56,3,128,61,79,112,65,51,2,56,53,+50,90,220,71,217,201,34,160,49,64,33,251,4,2,224,157,0,192,235,224,+129,8,65,208,224,129,9,96,21,160,79,72,64,230,39,15,2,95,51,56,+101,50,196,37,224,40,14,224,143,10,139,173,73,238,225,87,2,160,166,131,+62,224,169,7,97,152,224,195,12,195,163,96,25,226,175,4,163,141,97,131,+64,107,0,54,233,244,0,106,96,1,49,49,168,70,129,240,138,207,101,116,+198,131,163,203,224,109,8,224,32,19,244,153,2,225,85,5,192,24,176,85,+229,87,0,116,128,225,134,11,96,106,97,134,228,221,0,102,75,1,95,49,+123,237,96,0,227,163,8,140,241,65,82,244,190,5,226,94,7,64,33,206,+73,128,95,129,8,171,130,192,58,226,179,37,224,139,0,196,142,224,37,10,+96,252,145,204,193,110,236,32,0,165,79,237,197,4,229,69,0,235,94,0,+224,52,22,161,78,224,52,6,224,10,0,224,52,13,233,53,0,224,41,2,+192,229,139,152,107,121,238,70,17,9,68,97,116,97,46,76,105,115,116,95,+91,124,2,46,43,43,237,83,0,128,83,230,77,3,227,203,1,224,0,6,+164,110,131,81,228,101,10,0,85,233,190,4,5,49,49,48,51,32,67,93,+255,98,213,64,15,143,152,162,215,70,33,139,198,69,127,231,41,1,78,199,+227,173,9,96,192,4,82,97,116,105,111,128,193,2,95,109,107,96,13,1,+110,97,92,206,64,0,128,196,159,37,0,48,97,48,224,17,4,64,151,64,+114,0,51,168,15,0,65,135,101,139,215,72,30,96,14,137,230,70,178,102,+68,90,234,108,38,0,52,122,211,4,54,49,32,95,52,102,24,101,181,160,+10,2,49,57,56,69,241,0,48,76,244,160,5,0,50,237,168,0,65,54,+140,105,96,66,165,229,7,50,49,52,55,52,56,51,54,94,11,128,168,224,+247,20,11,73,110,116,101,103,101,114,46,95,105,110,116,65,196,1,84,111,+160,17,224,250,2,101,90,205,96,170,42,233,222,1,64,165,226,121,0,224,+108,28,161,102,1,105,110,224,109,11,227,241,7,198,195,64,0,65,70,169,+178,129,70,131,157,2,95,52,54,225,3,5,99,61,195,105,103,70,97,95,+64,70,227,138,0,0,85,225,116,3,64,0,0,89,169,127,148,74,66,238,+0,52,71,104,225,143,4,224,92,0,229,174,0,234,154,2,224,170,1,98,+2,97,158,0,66,81,189,129,175,67,68,5,57,52,32,95,52,55,65,153,+65,53,129,161,198,203,0,58,129,71,98,35,68,141,224,107,0,128,150,99,+147,64,2,163,160,160,250,237,42,1,224,226,7,224,255,0,224,229,2,99,+223,104,144,137,246,83,98,128,26,65,69,72,56,96,12,224,156,0,2,95,+51,50,70,46,0,57,101,117,224,254,3,64,172,138,212,128,21,1,51,50,+122,36,64,22,138,115,143,43,134,92,224,194,5,64,184,132,205,64,8,1,+95,49,77,193,225,169,0,175,51,106,35,96,54,0,79,228,15,0,202,248,+105,252,232,90,0,206,92,177,97,170,76,64,85,0,54,233,36,1,0,57,+129,17,64,157,0,54,192,157,0,83,79,200,246,142,2,229,93,0,96,13,+229,43,13,196,141,128,47,165,46,224,13,0,192,63,224,64,3,241,4,0,+224,67,0,183,226,224,55,2,192,71,193,20,129,44,224,88,4,97,42,231,+125,0,192,178,225,93,3,193,7,210,188,107,212,175,28,231,248,10,160,32,+81,88,72,234,156,9,161,127,115,40,0,55,67,226,1,56,53,74,185,233,+106,1,225,143,9,226,150,1,178,239,96,88,0,80,97,155,96,42,65,135,+160,130,236,59,1,0,95,64,81,64,102,105,5,235,228,4,64,0,142,221,+160,247,135,84,181,240,181,164,99,123,114,98,236,107,0,224,51,1,226,95,+0,131,0,230,117,0,225,120,5,232,199,5,68,78,225,112,0,193,199,225,+86,14,65,139,129,143,224,16,1,217,237,96,142,132,151,160,93,128,156,192,+200,3,95,50,51,56,231,70,0,1,49,48,253,204,3,224,164,4,224,17,+3,231,44,0,142,12,96,29,226,158,0,165,42,1,52,57,84,99,3,95,+49,55,51,229,114,2,3,92,51,52,38,64,3,3,44,48,58,48,101,95,+161,101,96,223,224,45,25,132,194,96,0,70,2,234,223,4,0,109,229,175,+0,96,126,0,56,82,237,109,155,128,17,67,162,0,83,91,128,225,66,7,+180,6,160,247,160,62,155,27,128,56,96,68,212,94,66,31,136,8,224,126,+6,0,112,245,182,2,123,77,64,41,97,29,67,226,219,57,132,33,251,52,+14,131,150,227,217,4,245,83,4,66,228,130,155,224,39,4,133,29,182,126,+226,248,1,129,143,174,190,70,7,163,111,213,201,161,121,64,157,232,151,0,+96,152,96,105,1,49,51,223,137,219,112,197,187,177,192,248,52,3,194,81,+227,122,2,238,100,7,230,157,0,164,73,99,71,64,58,97,8,165,114,250,+59,1,122,139,243,34,5,96,13,140,170,101,90,172,199,227,204,2,229,87,+3,149,4,169,194,0,52,69,120,185,177,225,183,7,210,78,129,37,0,50,+77,60,0,48,168,41,228,1,1,65,36,0,51,167,228,71,91,103,120,65,+71,64,24,201,83,132,191,110,228,132,67,64,7,64,115,64,36,137,105,99,+211,195,205,194,2,193,55,133,219,97,20,100,47,194,168,96,45,202,120,131,+112,128,5,225,78,1,161,115,229,131,4,152,91,235,229,1,234,245,2,98,+248,133,141,1,56,56,240,214,1,161,4,94,101,197,128,168,35,128,199,161,+8,136,237,73,116,1,50,56,133,171,225,81,5,0,118,178,140,96,72,98,+245,165,41,164,209,164,230,224,178,0,253,137,4,228,212,0,133,51,160,185,+64,15,231,129,0,131,40,160,2,229,226,1,133,119,128,21,64,43,104,65,+224,35,0,128,30,65,209,230,60,0,212,3,1,80,32,97,0,245,213,0,+177,236,230,0,0,225,167,0,229,61,2,229,145,1,128,13,237,93,8,205,+205,192,191,231,150,3,161,179,64,113,0,52,244,49,3,0,68,74,143,13,+66,111,111,108,46,111,116,104,101,114,119,105,115,101,228,84,0,212,224,224,+248,0,245,107,4,65,131,129,27,245,87,0,225,52,1,164,50,96,5,65,+149,137,35,64,31,99,66,1,80,32,91,177,0,90,65,229,0,53,128,181,+98,5,73,191,245,0,19,250,207,1,255,46,0,192,0,130,69,67,8,0,+53,73,177,64,115,211,244,138,70,196,211,122,32,96,4,161,251,196,56,183,+127,64,47,216,204,229,179,1,167,97,226,64,1,194,241,107,37,102,205,215,+167,1,49,53,176,117,224,220,0,96,246,128,221,132,131,66,28,161,233,224,+144,5,224,37,0,163,154,226,196,0,97,247,199,238,192,151,225,4,0,100,+245,96,8,232,164,2,65,15,170,236,64,107,203,139,64,22,128,53,65,35,+0,54,229,133,2,163,208,232,76,2,96,144,107,166,224,28,1,190,29,128,+1,213,8,224,16,0,233,251,4,192,1,169,214,224,19,2,126,109,224,16,+15,197,219,232,84,2,228,42,0,128,21,138,230,224,163,2,78,217,229,236,+7,194,180,224,176,4,169,56,226,211,3,226,220,4,224,42,2,228,32,0,+68,110,104,174,195,95,224,60,3,248,69,2,194,18,128,33,224,191,1,161,+58,128,24,196,133,235,110,2,227,229,1,229,127,1,220,10,220,16,96,27,+64,42,67,194,76,173,249,234,4,224,100,1,192,198,224,71,8,167,0,96,+70,100,51,250,49,9,1,95,49,84,227,226,186,0,206,126,65,255,227,148,+13,241,92,2,195,159,161,201,225,186,6,129,173,224,0,0,129,89,224,198,+1,224,43,0,0,54,237,99,0,224,159,4,245,193,8,234,193,0,2,95,+49,54,96,32,238,32,0,224,53,2,103,123,245,236,4,167,160,224,222,0,+226,220,0,64,183,249,31,8,224,116,7,229,93,1,73,170,0,50,129,151,+129,10,163,189,196,156,224,20,2,162,215,64,0,67,110,201,146,163,215,74,+124,131,176,225,187,1,128,9,128,72,226,249,1,64,60,169,49,64,169,78,+99,69,74,65,44,128,186,136,2,0,56,201,252,67,249,177,246,2,49,49,+55,103,92,0,49,128,202,64,203,96,33,136,66,250,113,13,225,189,4,166,+229,64,0,64,62,0,48,128,62,177,198,99,95,128,203,100,10,194,207,195,+120,195,8,98,139,164,88,229,86,0,226,30,5,229,58,0,160,171,64,101,+135,247,64,234,1,51,52,169,136,64,254,74,233,105,174,0,67,69,75,228,+131,0,161,208,104,61,0,55,72,100,1,52,52,120,23,133,19,0,58,129,+9,72,71,75,85,0,80,96,97,64,38,64,17,106,55,1,55,54,64,46,+130,83,64,7,126,152,96,82,155,29,64,86,113,10,0,49,110,22,201,141,+65,124,225,153,3,224,191,1,64,38,112,27,76,99,64,15,129,195,104,199,+255,165,3,0,49,72,101,64,31,129,182,67,233,226,29,1,129,140,70,51,+0,80,160,235,240,84,0,228,127,6,64,72,130,240,192,33,227,170,1,224,+27,0,230,215,3,192,20,129,165,135,3,0,85,162,234,160,149,224,28,8,+198,230,169,24,224,29,6,96,20,224,29,16,102,143,224,29,1,100,64,130,+60,131,189,228,18,1,145,134,131,200,227,136,6,134,234,161,208,226,197,1,+164,86,103,147,232,48,5,229,201,2,236,80,3,192,7,236,22,2,107,7,+225,50,0,123,84,230,60,4,230,166,0,225,68,2,64,56,234,54,4,224,+56,1,224,19,3,224,62,2,161,22,111,184,230,36,3,160,108,192,28,64,+16,115,210,198,120,130,253,232,248,0,128,41,227,164,0,225,252,1,128,0,+238,215,10,20,115,114,99,47,77,105,99,114,111,72,115,47,73,110,116,77,+97,112,46,104,115,110,236,3,55,51,58,49,238,76,2,97,90,131,225,163,+123,140,99,69,155,205,3,0,54,75,171,64,39,131,163,236,139,5,64,20,+74,212,64,154,0,58,128,43,201,255,0,55,128,175,228,56,0,167,146,97,+55,161,168,81,55,109,110,232,206,0,128,40,234,127,0,235,28,0,160,248,+69,175,193,151,193,234,193,89,235,75,0,0,80,244,131,2,227,3,4,160,+144,134,23,0,55,64,37,137,42,192,7,167,121,192,60,97,121,192,92,64,+131,96,130,167,59,228,196,0,160,12,0,54,170,141,68,23,132,9,1,53,+56,96,46,132,91,64,30,128,22,1,54,49,68,32,64,22,193,40,96,42,+160,224,68,146,70,188,64,34,228,83,0,69,6,132,129,64,30,96,54,165,+118,194,112,136,236,224,237,3,164,24,225,46,1,243,71,2,99,133,96,119,+141,134,224,47,5,131,202,193,118,245,112,2,160,25,96,237,167,153,194,154,+192,73,230,224,0,226,235,5,233,38,10,160,24,236,253,1,232,212,2,227,+97,3,128,134,224,133,1,231,173,15,224,75,59,227,85,2,224,75,23,167,+189,224,75,17,232,186,0,129,36,128,2,229,165,0,182,9,131,240,162,237,+225,189,3,214,42,224,32,2,224,124,0,228,62,4,96,41,224,40,6,224,+41,8,224,11,0,160,48,224,47,7,98,204,64,176,64,7,145,80,66,107,+232,90,0,97,174,111,52,225,139,27,224,40,26,129,104,244,238,0,225,69,+23,128,175,131,59,96,12,224,6,1,195,54,224,30,7,224,31,1,187,206,+224,34,2,224,35,14,192,37,224,30,8,224,38,1,170,82,137,102,225,49,+3,65,46,134,161,1,75,50,99,222,197,83,64,1,171,41,224,10,6,225,+144,1,0,32,201,25,64,56,201,8,234,106,2,64,28,0,58,128,118,3,+10,65,32,73,64,95,68,48,3,10,65,32,80,96,11,232,182,0,177,172,+128,157,97,67,0,51,65,205,0,75,64,180,65,155,64,44,0,54,224,44,+8,132,9,103,128,2,50,49,50,240,50,7,166,62,0,33,134,52,0,73,+96,234,68,248,162,25,133,197,171,158,194,193,192,132,228,57,0,160,31,204,+120,228,32,9,228,27,11,224,19,3,225,54,1,228,16,33,224,63,0,163,+116,227,254,32,128,56,166,88,227,229,28,225,66,1,224,11,5,224,12,17,+227,113,7,65,85,133,219,109,17,0,50,205,32,73,4,64,27,202,47,237,+60,3,192,27,130,120,0,90,73,99,64,14,194,122,0,90,105,5,64,17,+188,66,132,47,243,208,3,234,61,3,64,5,128,25,245,54,0,151,139,169,+188,64,121,0,51,231,51,1,251,110,1,232,53,5,102,0,192,99,107,127,+226,240,1,247,239,9,128,21,0,49,125,187,149,67,0,64,213,147,237,161,+2,129,211,109,211,231,156,0,64,53,135,19,88,11,130,141,245,184,0,171,+110,96,11,136,134,64,39,131,51,225,6,0,133,65,159,45,166,182,246,85,+5,96,221,128,141,94,119,120,240,160,133,237,77,3,128,80,253,21,0,85,+220,97,46,1,51,49,94,202,0,49,64,14,96,178,73,45,65,219,232,53,+0,65,97,124,131,238,133,11,162,140,64,183,210,223,105,71,193,55,138,122,+230,163,1,192,176,226,231,0,151,251,129,147,224,40,26,181,204,227,155,2,+224,40,15,231,250,4,233,129,1,224,33,2,175,107,0,85,237,177,2,194,+102,252,22,7,184,181,101,87,0,52,227,128,1,224,20,1,178,240,235,73,+0,224,111,11,98,30,224,52,4,235,58,3,224,120,6,161,17,224,158,3,+225,29,25,160,132,224,39,24,158,225,236,136,1,128,41,224,38,8,201,118,+204,93,224,156,0,233,143,1,195,94,251,212,1,224,40,4,132,229,128,243,+105,147,158,227,1,95,56,89,111,96,5,85,157,97,80,64,8,244,44,0,+160,93,224,79,8,160,184,192,113,129,218,195,21,2,51,56,54,160,89,226,+237,1,1,49,52,249,244,0,221,100,131,192,131,32,224,103,15,161,72,224,+225,3,242,93,0,254,131,13,161,202,224,41,4,226,121,0,104,66,237,59,+1,146,10,197,148,128,195,96,174,0,56,101,108,160,10,132,212,142,171,236,+201,1,89,229,64,6,227,158,1,128,0,128,70,230,71,9,163,95,161,135,+226,102,9,225,160,1,238,67,1,161,68,193,34,226,131,4,109,69,167,165,+90,82,99,242,0,80,143,5,133,199,64,154,168,84,160,23,72,26,64,24,+204,21,97,65,69,168,66,227,128,178,161,194,1,49,48,108,160,131,218,248,+179,5,64,141,205,128,65,0,144,161,65,222,231,227,2,80,243,231,113,22,+228,153,1,231,98,24,99,166,0,55,90,4,134,36,80,252,244,168,8,0,+35,219,119,232,149,5,10,116,117,112,108,101,67,111,110,115,116,114,174,200,+85,41,64,75,224,35,1,1,40,41,218,38,64,205,225,51,1,132,116,161,+52,187,53,225,156,0,161,196,65,43,88,198,194,193,225,53,0,242,233,1,+224,52,0,228,2,1,137,192,224,40,0,160,226,3,49,49,51,55,98,85,+124,240,147,198,195,24,98,140,1,49,48,64,18,2,95,49,49,96,10,226,+184,2,182,1,240,4,0,239,33,0,251,17,8,0,120,224,234,0,135,230,+65,237,102,211,198,188,225,30,9,16,67,111,110,116,114,111,108,46,69,120,+99,101,112,116,105,111,110,73,229,8,101,114,110,97,108,46,112,97,116,64,+9,8,77,97,116,99,104,70,97,105,108,129,98,103,38,214,39,0,51,178,+249,106,85,128,178,0,58,128,225,194,178,64,179,130,178,64,43,193,100,161,+50,64,65,75,100,176,93,0,51,65,18,64,41,134,229,176,93,207,197,100,+219,0,75,140,146,228,32,1,189,3,213,24,90,98,72,22,227,73,0,193,+65,167,206,148,65,224,46,8,255,239,4,2,49,51,50,103,210,143,74,224,+106,1,225,211,2,231,16,5,242,71,1,192,5,128,74,230,34,1,224,55,+0,230,49,1,96,0,128,66,224,1,1,228,79,4,199,134,96,0,226,155,+9,224,140,5,224,77,9,224,75,5,162,79,128,38,224,76,2,248,113,2,+216,53,253,222,3,231,200,6,96,23,69,120,125,14,224,116,4,192,83,231,+213,7,224,34,2,154,19,161,3,129,21,224,84,0,96,66,96,111,128,17,+225,59,1,225,106,2,243,155,6,231,50,8,235,239,2,224,115,5,224,165,+3,138,145,1,95,50,77,15,1,95,56,249,224,0,224,31,0,227,190,2,+225,34,3,96,171,221,250,131,140,202,158,128,0,99,198,241,88,1,237,202,+1,233,71,6,225,186,3,228,45,0,193,112,225,206,0,192,77,64,80,115,+26,250,1,15,242,202,5,128,212,223,102,160,9,234,137,11,0,54,234,137,+16,96,140,169,63,196,207,171,105,192,100,0,52,235,251,2,192,171,226,158,+5,64,27,129,81,231,34,10,243,179,10,233,193,16,224,129,14,0,53,224,+129,5,225,62,1,231,119,9,226,179,0,97,75,226,125,0,224,83,5,199,+143,160,84,244,5,16,224,80,4,163,4,135,172,1,95,55,166,163,135,79,+230,237,12,165,185,248,157,3,68,243,230,148,2,96,252,134,148,64,227,224,+25,2,96,64,160,25,199,227,231,252,7,65,253,236,30,1,193,58,245,86,+5,226,166,0,225,9,17,98,81,225,9,24,64,111,199,81,134,101,96,5,+102,29,3,95,57,56,54,230,152,2,2,115,101,113,167,159,64,52,206,148,+224,164,1,226,10,1,0,85,231,1,8,227,186,0,151,72,224,13,9,132,+35,228,61,0,128,193,224,66,2,186,70,226,44,0,192,65,160,119,3,39,+32,85,32,247,54,22,6,68,101,115,117,103,97,114,215,55,5,52,49,49,+58,49,48,247,57,2,227,209,3,129,85,227,201,3,64,0,240,229,4,224,+2,6,224,71,1,230,47,3,229,34,1,192,83,230,53,1,224,195,1,224,+201,6,192,10,111,144,224,85,11,229,63,8,224,96,4,224,102,8,224,103,+6,224,55,5,230,165,11,224,50,14,96,98,230,27,4,224,52,26,224,195,+3,224,31,11,253,102,2,225,95,12,249,142,13,224,23,1,205,115,233,190,+3,194,64,224,8,10,96,242,224,11,2,169,175,195,25,128,68,228,147,8,+225,154,1,131,114,230,81,4,192,66,128,11,226,178,2,69,214,131,81,2,+49,50,48,196,85,128,82,229,107,5,231,183,4,138,158,198,70,146,99,250,+56,0,230,209,4,224,242,3,172,252,228,24,2,77,4,64,77,105,112,199,+99,187,180,158,44,228,68,3,225,214,11,64,41,141,210,0,90,209,254,216,+103,224,144,2,197,57,64,9,200,26,228,125,1,229,113,1,192,209,2,95,+53,49,176,77,173,169,224,103,2,128,137,224,136,5,180,242,224,38,5,66,+53,2,95,55,56,177,10,224,98,1,224,1,7,226,178,8,232,91,0,224,+48,14,226,174,2,224,26,7,226,169,1,226,158,7,192,33,226,179,9,226,+154,26,226,133,27,226,48,13,130,42,128,35,224,122,3,128,86,226,16,1,+196,50,96,21,129,112,64,43,130,30,128,24,226,31,2,160,62,162,34,192,+122,226,37,9,233,113,5,175,198,128,36,105,12,225,223,1,98,48,0,57,+176,143,96,0,226,49,0,96,54,226,37,1,226,30,0,3,95,54,32,85,+226,11,5,112,12,130,10,64,47,182,255,224,0,2,225,148,9,228,78,3,+224,168,0,224,11,15,228,23,39,128,86,228,177,6,64,56,0,48,230,246,+4,196,213,227,177,10,226,60,9,3,95,57,49,57,224,61,4,226,62,8,+160,100,224,103,5,132,130,109,195,1,48,57,219,181,230,206,6,193,204,192,+1,224,169,10,226,191,5,97,124,161,58,106,159,71,240,141,226,235,47,0,+194,100,169,230,192,230,103,253,129,224,128,65,66,15,170,181,72,23,0,48,+225,185,1,128,140,232,43,5,64,17,64,49,64,41,240,93,2,0,66,122,+229,0,49,107,37,66,155,2,95,50,56,230,126,0,194,162,100,247,0,49,+75,11,142,83,0,49,93,176,80,185,1,49,49,79,47,64,91,101,1,0,+90,101,17,105,79,96,167,96,17,192,93,224,83,0,225,182,1,163,75,66,+173,226,172,0,224,186,13,153,170,0,50,161,133,226,207,5,0,83,161,186,+231,114,3,226,227,4,164,239,98,217,0,85,90,119,228,251,0,224,39,5,+131,11,192,38,224,37,2,160,152,192,227,129,122,160,227,0,90,111,13,1,+83,32,82,28,161,218,229,244,4,129,148,96,60,235,38,3,233,224,0,192,+59,192,249,228,50,3,226,89,3,196,56,192,19,193,155,224,111,13,224,59,+5,165,125,225,122,2,238,216,9,106,190,224,55,0,96,93,194,99,230,153,+3,228,126,19,160,0,74,197,241,97,0,169,51,97,101,227,111,0,160,203,+224,216,5,234,27,9,233,187,4,195,52,129,73,161,152,192,224,234,253,13,+224,61,0,206,152,228,86,3,174,89,160,232,101,180,128,97,160,101,187,239,+0,48,199,181,0,75,66,138,96,4,96,13,160,128,66,148,153,92,66,155,+160,242,64,76,194,146,66,169,0,55,213,116,1,49,49,65,158,64,6,172,+240,110,105,96,7,0,55,128,68,146,5,192,186,3,85,32,95,55,243,8,+0,253,19,4,230,23,0,224,21,20,224,236,0,239,90,5,166,71,224,60,+6,160,49,195,241,64,250,105,92,64,27,163,168,192,99,128,48,64,22,164,+43,224,90,0,179,247,64,28,227,229,0,98,66,96,29,117,78,96,90,87,+7,0,67,180,208,64,14,96,229,131,31,161,167,194,42,129,71,229,210,5,+195,10,224,118,0,226,56,6,224,25,1,229,225,4,241,79,7,134,167,224,+17,1,226,69,5,232,153,0,230,27,0,224,132,1,232,101,1,143,203,98,+160,106,144,3,54,32,95,54,119,66,128,74,128,135,208,133,192,249,192,0,+130,83,130,74,248,13,0,128,23,161,248,0,75,79,38,233,142,1,66,34,+254,196,1,128,209,167,72,162,193,192,5,203,35,224,208,0,86,108,187,174,+96,17,128,207,251,194,2,160,78,161,74,228,205,0,134,129,160,87,66,169,+81,67,134,170,160,6,136,178,162,220,134,32,1,50,52,129,164,97,67,133,+51,224,14,5,2,95,54,50,163,20,160,0,252,37,1,233,61,1,228,40,+2,225,233,0,196,137,224,255,1,98,96,64,115,241,164,4,64,0,113,215,+246,0,2,0,110,142,149,224,22,7,1,116,116,214,24,67,141,126,60,0,+80,129,253,64,130,153,171,64,121,0,52,89,15,164,253,124,230,67,215,129,+235,189,71,225,186,13,64,88,144,173,72,29,108,62,207,220,111,93,160,58,+194,79,132,152,194,127,224,7,1,193,21,160,59,81,68,128,57,161,205,112,+203,0,79,198,101,161,50,226,255,1,193,56,230,120,2,99,172,226,11,1,+244,75,2,229,81,15,229,83,0,68,228,230,161,5,224,48,11,225,164,3,+229,95,0,130,160,143,72,128,44,233,201,0,131,143,228,62,6,227,120,4,+196,201,160,79,130,172,224,28,6,160,104,96,97,131,85,64,47,237,92,2,+192,94,226,75,0,128,23,240,231,10,12,108,105,98,47,68,97,116,97,47,+76,105,115,116,208,225,4,53,51,54,58,53,240,224,2,224,0,5,225,160,+21,101,3,225,166,0,228,240,3,208,92,128,219,240,112,0,224,219,26,233,+79,2,128,208,64,44,154,185,226,14,0,224,39,12,64,15,224,142,3,160,+0,66,175,243,67,1,66,36,227,125,0,224,2,1,225,74,2,128,1,105,+133,200,162,224,23,2,192,189,224,26,0,235,185,5,229,89,2,224,52,0,+228,130,1,224,74,7,226,66,4,197,190,230,51,1,160,52,224,41,1,167,+203,96,82,224,23,0,224,17,6,96,8,128,43,251,142,1,133,172,251,102,+0,245,45,0,224,93,2,96,36,233,132,1,224,89,1,224,8,0,92,75,+193,103,3,95,57,57,54,243,253,12,1,61,61,162,74,218,58,68,202,198,+64,163,99,233,152,2,128,1,166,153,224,16,16,64,113,68,108,1,52,55,+189,185,1,49,48,75,173,109,122,253,250,1,253,93,1,224,1,1,132,146,+245,178,6,225,208,8,160,110,224,22,7,239,229,0,224,45,28,224,22,0,+193,189,228,172,1,224,14,0,224,51,3,179,123,193,115,172,151,189,179,225,+103,14,2,79,32,35,70,101,162,221,225,98,12,64,90,226,57,1,226,117,+3,226,79,4,99,79,160,50,192,0,160,138,167,105,231,220,0,67,64,0,+51,251,228,1,140,79,96,21,150,17,2,35,53,32,64,12,149,233,0,80,+134,37,91,105,128,3,70,1,2,90,32,90,166,120,232,11,21,139,102,2,+95,52,56,64,171,159,229,98,207,0,90,129,94,128,192,64,20,66,147,160,+20,232,164,6,237,14,2,64,96,236,243,1,128,65,194,217,1,85,32,224,+29,2,224,71,10,224,59,4,96,31,160,129,103,214,224,28,0,224,109,2,+224,36,1,233,54,7,65,74,0,53,238,93,1,0,58,128,7,136,244,226,+40,2,66,191,64,27,203,51,229,119,8,229,74,0,134,129,64,79,97,62,+96,210,229,10,5,230,29,1,64,81,233,98,0,119,29,96,39,66,218,161,+99,229,154,1,228,69,0,128,230,224,70,1,128,135,224,86,2,192,148,160,+154,64,100,0,54,224,182,3,128,90,197,39,237,55,3,197,34,250,0,4,+128,23,161,15,252,131,3,0,85,174,75,231,255,2,238,138,19,224,37,10,+132,232,96,36,195,160,97,58,0,48,136,252,98,79,137,112,161,56,0,49,+170,209,64,211,136,230,2,95,55,52,239,151,10,96,38,239,171,11,224,19,+7,224,39,11,142,112,224,239,11,2,95,55,52,127,30,0,48,131,25,67,+65,192,18,235,106,0,224,57,7,64,184,111,225,2,50,49,50,229,138,2,+12,103,101,116,83,76,111,99,32,69,85,86,97,114,199,224,64,39,0,83,+163,65,224,88,5,99,164,192,125,159,228,170,4,192,117,224,195,5,66,222,+224,137,7,67,9,224,195,2,96,69,192,182,96,161,224,202,7,224,223,12,+225,46,7,118,9,224,19,7,67,74,224,126,7,132,154,192,81,0,55,202,+196,224,145,1,192,98,224,56,6,67,115,224,183,6,224,60,2,224,161,11,+225,12,6,178,111,224,84,5,65,193,224,122,8,224,78,12,224,37,2,228,+52,0,224,239,6,225,2,11,64,238,224,19,7,225,149,10,109,17,64,119,+224,121,12,225,45,8,224,62,8,66,212,224,182,11,0,85,114,106,226,72,+3,161,240,131,152,224,86,7,225,51,7,64,23,224,106,6,65,211,225,11,+2,133,126,225,189,9,226,97,15,225,13,8,64,64,224,18,6,225,168,10,+129,167,226,252,8,213,34,227,130,27,64,22,179,242,243,249,0,226,34,7,+226,175,10,225,88,16,226,35,18,225,80,2,100,163,138,218,228,163,13,64,+255,224,134,6,64,78,224,134,6,132,62,226,30,22,224,20,23,224,237,31,+224,56,6,227,14,22,225,223,7,64,240,0,51,224,240,3,225,181,7,98,+172,160,40,136,157,225,25,0,228,243,29,248,47,1,64,66,136,211,96,66,+136,199,224,62,5,224,13,13,226,63,4,64,69,168,214,128,69,103,18,65,+43,110,118,225,135,7,224,25,13,182,148,231,33,6,100,116,227,192,12,231,+4,7,96,63,229,127,3,228,225,4,224,49,11,96,139,225,94,7,224,49,+3,224,141,8,131,2,226,25,11,224,91,7,99,214,224,183,11,95,190,230,+193,4,2,72,97,115,102,192,17,68,101,102,58,32,117,110,105,109,112,108,+101,109,101,110,116,101,100,134,206,0,58,129,102,226,14,9,192,83,64,32,+201,79,96,34,113,94,1,95,52,102,217,137,172,64,47,160,41,137,39,225,+237,0,0,75,224,78,8,224,15,9,224,196,8,64,71,0,54,128,71,152,+87,0,51,130,13,168,92,93,224,0,95,78,143,192,19,64,47,168,102,4,+54,32,95,56,51,73,84,0,56,89,158,64,24,238,182,1,97,24,137,39,+121,32,225,35,1,11,105,109,112,111,115,115,105,98,108,101,58,32,129,21,+130,58,153,71,160,49,0,49,128,132,102,92,97,9,189,117,186,168,224,86,+0,4,79,32,35,51,50,241,115,1,96,56,96,40,239,79,0,64,150,163,+129,224,223,4,131,221,204,204,249,197,1,64,29,0,50,66,16,189,251,224,+107,4,77,145,128,89,138,219,224,53,4,129,151,224,44,1,1,53,56,160,+44,224,31,4,64,0,225,80,0,64,132,64,160,131,249,0,80,76,150,90,+27,115,3,227,119,17,98,168,234,127,15,89,55,193,219,226,201,8,96,57,+185,130,227,125,17,100,146,161,27,224,226,1,122,222,240,171,5,238,168,4,+64,187,132,56,66,139,172,93,93,153,1,48,48,233,232,7,7,99,111,110,+65,114,105,116,121,169,227,83,204,1,52,57,237,19,5,128,132,129,199,0,+58,155,255,131,20,0,48,76,50,84,247,64,6,103,47,130,61,0,56,250,+176,2,172,88,0,57,64,150,1,95,50,121,35,162,86,224,35,1,1,95,+52,67,93,128,92,131,113,102,17,69,114,140,86,80,128,237,23,1,247,36,+0,87,151,65,9,108,252,121,127,108,170,224,153,3,225,181,1,64,17,100,+245,96,126,224,186,4,98,12,237,33,0,252,180,3,156,6,188,141,64,31,+224,185,6,249,23,5,112,69,64,137,0,54,130,228,225,31,7,225,27,6,+225,24,0,1,95,50,104,174,224,91,5,216,80,64,79,131,228,96,47,1,+56,57,76,140,0,80,140,219,64,27,167,195,96,25,0,83,76,142,192,132,+195,105,96,81,0,49,237,226,0,64,64,212,53,96,153,0,56,129,147,192,+9,225,178,0,224,40,13,0,90,224,40,2,2,95,50,51,224,93,0,96,+114,167,53,66,210,1,48,57,124,244,160,71,142,0,128,23,129,194,67,133,+128,56,0,95,190,145,96,11,1,50,48,224,80,4,167,67,0,51,161,121,+128,147,208,141,224,187,1,150,39,0,95,128,71,66,17,64,59,131,0,2,+73,32,58,128,54,129,64,82,211,99,109,160,60,64,28,130,114,128,40,165,+198,78,235,145,62,1,49,48,208,208,81,45,64,34,161,220,241,87,3,82,+90,99,137,64,31,165,145,224,31,4,0,57,224,31,2,197,152,0,89,98,+16,214,65,65,100,66,234,65,51,0,56,98,20,64,5,3,95,49,48,55,+162,92,132,96,224,5,1,224,21,10,225,189,0,129,179,96,78,132,158,192,+103,96,39,131,18,224,42,4,180,145,192,16,208,89,232,4,5,224,33,3,+242,224,0,224,16,16,224,67,8,233,28,0,224,50,17,252,137,1,97,226,+160,65,224,168,2,252,171,0,224,17,0,97,34,164,171,225,12,0,187,95,+192,38,111,165,227,192,2,0,48,148,200,180,182,64,42,66,66,2,95,56,+57,70,107,228,91,1,96,37,165,96,252,237,0,160,125,228,45,0,160,167,+96,29,224,182,2,224,17,11,134,33,224,136,1,128,154,96,16,224,39,6,+225,223,1,225,10,19,128,80,64,168,230,205,0,224,71,9,225,10,0,224,+118,5,116,30,135,211,224,207,1,244,73,1,0,79,99,93,3,55,55,32,+79,96,95,199,61,224,99,5,130,74,160,93,160,147,182,192,193,103,67,158,+224,132,1,226,218,13,204,242,160,226,88,249,0,67,160,40,224,109,0,64,+61,194,196,160,87,128,21,128,74,224,79,2,225,197,5,128,92,224,78,1,+193,205,224,21,5,96,51,96,195,133,116,67,236,251,22,4,0,104,246,151,+1,96,42,224,40,16,1,118,115,249,12,1,226,109,0,155,219,160,14,0,+56,135,88,97,44,64,62,233,103,0,1,56,53,64,139,65,2,248,135,10,+226,218,2,224,75,1,98,251,0,56,198,135,134,125,224,26,3,162,22,130,+98,68,121,134,17,128,33,1,80,32,143,219,161,185,0,32,83,151,128,37,+133,196,192,35,64,34,0,80,132,248,133,140,129,128,69,106,244,169,2,158,+238,128,51,96,182,130,81,194,7,231,118,0,92,110,128,228,233,174,10,64,+0,1,95,52,72,125,2,52,53,54,200,251,64,120,133,201,3,66,32,95,+51,69,124,64,7,64,81,65,228,66,95,0,58,96,142,101,115,2,49,48,+54,101,178,0,54,66,184,0,80,96,9,0,57,64,40,0,57,86,46,107,+61,1,56,49,150,132,1,64,64,160,32,1,55,48,224,32,9,129,82,96,+199,224,66,0,102,52,64,106,168,160,155,51,86,131,129,200,0,55,148,19,+0,79,70,235,160,45,64,64,224,56,2,134,90,74,88,96,54,225,99,1,+98,169,129,99,65,178,181,110,224,82,22,64,44,134,73,128,81,225,219,1,+0,80,87,84,224,81,1,167,147,225,26,76,128,33,224,225,0,206,241,103,+196,136,26,3,54,56,32,64,235,127,3,64,38,206,210,224,38,6,227,70,+1,1,91,93,190,133,96,163,1,10,65,227,97,2,4,68,97,116,97,46,+92,129,6,95,84,121,112,101,46,34,96,227,64,61,226,216,0,117,169,224,+10,6,194,222,96,44,129,135,97,39,171,167,96,22,129,146,64,139,0,52,+65,80,0,54,201,115,72,104,72,9,96,36,169,108,97,73,0,49,65,24,+255,62,5,0,102,191,85,66,167,153,9,106,59,224,38,14,96,81,193,183,+0,67,106,161,67,82,0,50,85,147,1,95,50,128,10,225,23,4,1,40,+41,128,56,65,157,64,138,66,132,203,26,2,49,50,57,76,84,136,171,64,+28,101,41,64,197,66,76,67,175,102,206,250,241,1,96,168,64,32,129,244,+1,95,54,65,190,64,145,162,48,73,41,1,55,54,134,97,151,249,1,95,+50,88,173,1,95,56,100,207,192,14,99,6,1,52,55,64,23,67,180,128,+85,100,242,64,75,205,64,68,3,227,70,0,64,24,130,3,247,24,95,196,+132,64,170,0,56,205,36,208,72,128,154,64,0,224,60,7,145,35,77,197,+215,80,0,75,205,137,132,135,132,195,3,50,48,53,32,243,185,0,224,78,+2,242,216,8,246,246,19,1,49,48,68,248,224,60,0,128,118,224,74,0,+238,1,0,0,54,96,196,96,22,224,105,3,246,244,53,224,91,5,224,90,+4,224,254,3,224,61,7,182,249,225,31,3,224,165,12,1,52,57,177,18,+192,19,225,142,0,0,52,137,185,238,187,4,225,58,13,247,36,19,192,172,+225,205,6,128,25,160,186,247,18,73,201,49,224,237,4,208,139,225,166,13,+225,105,20,224,102,8,66,246,66,186,67,191,225,154,13,224,77,2,1,56,+56,73,1,224,38,1,161,119,64,13,225,84,0,247,67,31,0,83,78,92,+233,142,0,112,254,235,192,1,64,81,186,109,226,178,6,225,114,0,192,158,+224,32,9,247,98,50,225,57,4,160,86,104,191,225,16,14,226,126,4,64,+13,241,98,0,224,93,5,65,29,177,133,227,228,1,224,53,1,197,41,246,+163,32,224,130,15,225,251,21,224,57,16,226,204,5,160,44,0,58,128,23,+101,64,224,53,5,143,79,130,245,64,37,135,24,247,219,52,226,231,58,224,+30,37,248,13,32,192,50,225,247,21,194,254,226,143,10,65,33,136,13,226,+95,13,227,72,6,98,110,64,51,0,54,224,51,18,140,80,160,99,64,44,+169,209,1,32,80,225,170,14,224,253,3,224,107,5,64,61,136,112,247,249,+77,226,80,0,195,235,247,243,8,227,21,1,224,36,10,96,60,128,72,118,+45,64,0,247,217,14,224,249,17,224,88,11,183,227,227,47,11,227,149,7,+96,26,244,246,2,97,56,225,155,16,96,165,64,8,195,30,235,27,0,1,+53,57,73,243,64,32,1,10,65,255,12,9,247,38,1,202,151,86,144,209,+196,64,103,0,80,193,40,236,247,0,64,121,128,43,0,52,131,170,0,75,+167,4,72,39,96,3,64,196,64,30,131,163,101,116,0,90,239,68,0,2,+95,50,51,71,32,0,53,173,58,224,17,0,233,238,4,0,64,107,87,128,+116,224,31,13,135,81,224,61,8,0,54,129,131,2,55,49,56,224,229,2,+171,117,224,45,30,202,139,224,36,20,1,45,62,239,14,1,97,135,97,20,+64,244,195,118,133,107,64,228,64,21,0,54,96,21,3,104,101,97,100,96,+63,64,18,131,62,115,156,64,204,236,227,1,98,61,140,227,0,52,225,244,+3,247,58,4,171,10,94,109,134,203,224,32,14,0,64,114,139,211,9,64,+97,224,41,4,70,249,192,41,96,29,82,184,96,37,147,102,161,173,2,49,+48,52,249,93,3,160,253,224,22,7,10,80,114,105,109,105,116,105,118,101,+115,46,193,31,224,91,4,139,181,0,64,210,180,192,0,64,231,207,154,0,+85,130,42,225,121,8,160,38,130,198,99,191,1,75,52,138,152,64,22,130,+179,138,194,86,181,0,56,234,195,0,236,155,2,4,115,117,112,101,114,160,+183,239,155,3,3,58,49,48,51,130,200,150,242,236,152,4,1,36,67,64,+49,64,34,130,204,66,235,0,66,64,163,225,118,2,1,95,55,99,33,3,+95,49,48,51,164,82,64,47,130,7,4,98,115,43,43,46,65,226,64,26,+132,239,0,39,130,244,1,49,48,85,137,0,54,76,72,64,172,76,145,88,+162,1,50,55,248,12,9,75,134,181,220,113,10,109,255,116,82,64,76,0,+80,64,142,0,90,96,83,1,55,52,77,146,141,42,0,55,251,128,1,225,+11,8,20,100,117,112,108,105,99,97,116,101,32,100,101,102,105,110,105,116,+105,111,110,32,129,26,0,54,77,70,192,0,249,81,7,6,104,101,99,107,+68,117,112,196,43,66,26,144,190,173,82,0,95,96,195,2,49,51,56,89,+144,96,194,239,99,5,133,76,109,169,130,62,77,103,64,72,130,255,64,194,+172,126,0,48,145,67,183,21,64,15,0,50,68,52,177,21,64,54,224,47,+3,164,171,1,83,32,71,10,186,114,64,16,245,32,5,79,52,224,7,1,+195,16,228,231,2,128,57,96,73,117,142,242,171,2,100,136,101,0,160,88,+198,99,224,64,0,96,8,224,61,0,70,211,192,14,192,115,224,13,11,247,+39,2,150,50,224,48,19,180,159,227,199,0,64,2,128,153,128,108,160,46,+214,159,84,111,232,208,0,165,188,192,113,192,43,182,41,197,156,64,74,210,+197,233,148,0,192,62,192,18,181,217,3,95,49,55,51,226,28,2,15,92,+51,52,38,115,114,99,47,77,105,99,114,111,72,115,47,80,202,2,46,104,+115,64,22,4,44,51,51,58,53,229,47,2,224,0,5,225,130,21,114,37,+225,136,0,129,140,128,171,136,25,128,173,160,14,160,189,224,236,1,160,178,+64,231,85,104,244,124,4,224,39,10,64,15,244,163,10,66,113,196,160,66,+138,114,27,79,148,64,24,212,59,224,196,10,128,167,130,51,166,252,224,103,+1,128,10,207,93,98,141,0,85,254,121,1,1,95,53,110,233,128,123,132,+222,103,71,245,42,1,226,57,2,129,42,1,75,32,183,203,194,48,247,195,+5,160,47,64,5,0,67,224,50,8,224,51,0,192,7,162,14,128,9,128,+2,161,108,192,83,248,8,4,161,70,224,23,8,224,17,17,193,173,226,227,+1,162,140,224,123,0,224,119,4,224,61,8,224,64,2,224,65,2,97,14,+224,46,14,160,93,131,15,248,16,0,65,15,194,58,96,23,105,173,228,195,+2,249,221,1,225,67,3,224,2,5,230,207,0,224,137,3,221,153,239,250,+1,128,132,194,11,163,185,224,5,15,70,138,150,198,225,35,5,137,253,128,+87,226,48,0,227,207,1,225,108,14,100,155,227,88,0,226,8,0,227,69,+3,224,44,1,129,67,227,83,0,224,83,0,160,98,102,196,227,32,0,227,+124,2,224,72,14,225,129,5,224,31,4,129,193,128,87,100,255,164,138,158,+125,132,128,98,161,128,4,192,33,196,206,64,62,228,237,0,65,22,116,153,+109,16,131,131,230,15,2,224,57,9,228,213,0,176,247,224,42,1,195,251,+225,118,1,128,221,96,248,101,110,64,162,224,18,1,64,14,0,85,93,86,+224,170,1,224,175,0,251,95,1,224,243,0,224,8,0,226,172,18,224,28,+1,224,29,41,224,189,8,117,132,195,45,227,0,0,160,138,225,225,3,224,+51,0,194,68,227,42,0,64,35,149,46,235,24,2,192,218,160,29,107,158,+0,53,232,192,0,120,243,237,100,0,160,156,64,175,3,64,95,50,57,132,+221,225,44,6,121,231,215,119,168,236,176,184,128,67,1,95,52,153,250,96,+160,128,80,66,217,129,215,193,81,225,35,5,229,5,5,128,219,226,192,3,+225,4,0,226,189,91,226,172,3,240,13,0,129,56,74,235,248,180,13,133,+136,132,78,224,41,21,4,64,95,53,53,57,164,183,129,60,96,4,227,15,+13,0,90,233,45,3,129,11,226,233,31,0,75,160,112,226,234,13,225,49,+15,224,13,4,101,50,226,137,0,161,205,237,153,3,96,75,160,215,64,151,+138,53,96,9,2,52,53,51,206,149,66,18,74,232,226,144,6,64,138,224,+162,0,160,8,225,36,1,225,2,0,165,63,194,95,0,89,161,245,161,222,+199,183,96,150,131,64,64,39,128,229,132,76,135,70,160,63,164,77,103,213,+197,151,64,24,106,131,224,116,1,64,237,69,220,107,165,107,218,132,55,0,+64,153,82,131,95,108,134,2,79,32,35,77,61,128,156,225,164,0,64,5,+2,58,49,48,79,6,108,80,236,135,7,192,95,67,97,237,59,2,64,80,+174,99,1,95,55,104,92,64,36,136,196,64,43,144,46,1,50,53,76,172,+64,22,172,188,96,14,139,231,249,252,2,64,20,235,179,0,0,66,134,172,+0,50,229,131,2,2,95,57,56,64,215,5,56,54,32,79,32,35,75,196,+192,195,197,109,64,64,0,51,224,116,0,0,49,96,101,137,98,130,127,231,+148,0,64,48,142,52,170,158,96,25,226,39,6,237,42,0,230,135,1,227,+165,1,129,154,224,13,10,196,56,163,200,231,60,0,98,142,226,81,6,227,+198,8,201,123,227,21,0,173,195,229,29,8,64,155,65,131,254,195,0,169,+154,128,2,99,6,65,2,0,48,129,61,236,163,6,0,39,198,210,193,55,+160,0,96,76,160,54,65,58,202,132,140,132,224,237,5,231,158,10,228,129,+0,163,242,74,89,225,0,7,229,229,9,228,189,2,160,149,255,151,4,234,+99,5,204,76,224,68,5,232,44,0,171,4,233,123,3,0,67,80,108,73,+117,128,43,193,55,195,86,255,211,3,128,220,64,70,224,24,1,228,75,0,+192,255,193,31,227,94,0,160,169,2,95,50,56,110,135,225,37,0,237,183,+0,64,1,191,229,224,30,2,96,242,224,32,1,201,10,224,190,3,97,89,+231,37,0,124,61,224,208,13,180,24,129,106,224,59,45,224,56,11,97,173,+240,58,2,228,101,1,205,195,65,179,93,171,208,11,2,79,32,35,71,130,+96,235,241,14,5,103,181,0,57,69,100,0,54,217,25,128,0,196,119,140,+141,69,17,0,80,141,86,64,24,129,13,188,54,160,172,224,180,0,229,24,+1,224,18,0,83,29,101,16,0,58,128,17,224,81,25,64,44,226,19,8,+64,183,226,95,2,224,31,0,224,94,4,228,248,1,200,43,65,230,229,144,+0,226,77,0,230,160,1,131,220,162,153,224,190,2,162,241,64,84,165,49,+65,83,65,75,0,53,128,180,64,25,0,54,224,205,2,64,135,123,125,118,+112,97,219,224,10,4,192,30,64,55,215,78,1,95,50,82,24,229,39,1,+75,232,96,191,0,90,64,149,96,4,132,31,223,247,64,40,190,215,0,57,+69,107,64,59,158,241,91,228,110,57,102,191,67,229,225,89,2,159,197,128,+43,224,7,0,96,8,96,176,128,64,238,221,2,228,82,1,225,46,1,128,+74,143,167,135,195,0,83,229,58,5,64,103,0,57,65,193,163,132,2,95,+57,57,96,249,228,74,2,2,49,48,48,66,18,97,89,128,79,224,132,0,+1,64,90,160,62,128,231,194,121,164,91,1,95,57,69,111,247,150,0,101,+142,1,95,57,73,19,164,202,64,96,1,67,32,128,38,251,143,2,128,35,+233,126,1,2,57,55,55,128,39,0,57,98,154,160,136,128,101,245,52,0,+224,70,0,224,40,1,129,69,96,158,165,15,99,61,2,49,48,48,98,88,+128,234,0,58,128,222,230,216,3,64,74,165,211,0,48,65,12,202,161,224,+107,9,192,33,64,7,178,250,64,91,129,210,224,245,11,192,179,96,66,215,+33,226,221,2,130,252,224,248,1,131,1,196,204,165,254,233,251,0,99,126,+66,36,1,57,55,99,207,97,40,99,50,64,247,66,110,66,247,195,67,170,+246,0,48,225,8,3,136,94,64,187,66,160,96,51,1,49,48,67,73,64,+21,0,54,160,21,232,42,2,0,54,196,147,64,31,168,117,3,49,48,48,+48,224,37,2,242,113,1,1,67,39,146,83,64,43,168,140,225,21,31,224,+241,1,192,22,228,11,1,192,199,217,249,224,182,0,66,192,64,107,163,110,+232,226,4,0,51,224,183,2,249,123,0,224,183,14,0,83,224,183,2,231,+184,1,231,84,0,128,112,96,29,209,248,224,213,10,230,158,1,160,207,64,+30,225,183,9,96,214,134,90,192,18,118,171,1,57,57,129,166,224,197,4,+65,229,166,253,64,33,3,56,32,64,58,98,234,226,188,2,163,225,128,131,+130,71,232,69,0,227,93,3,224,160,7,224,153,0,226,87,10,229,234,1,+226,107,9,194,98,226,158,2,224,75,15,0,56,230,25,0,224,255,6,195,+77,128,78,0,55,96,213,131,69,228,3,6,162,212,226,143,3,0,54,225,+17,1,0,73,96,56,130,202,225,174,2,171,16,97,179,226,22,8,0,48,+194,22,96,198,96,30,1,55,53,224,25,3,0,58,97,136,224,55,7,0,+55,226,78,0,100,67,229,253,6,0,90,182,43,0,58,101,83,128,59,75,+114,0,57,74,12,100,143,224,79,8,166,158,64,30,229,68,0,163,12,152,+80,97,91,129,96,226,110,2,226,51,6,97,146,224,36,17,225,107,2,224,+36,17,225,220,2,224,73,24,64,6,224,73,24,64,6,224,36,16,110,51,+224,73,23,106,14,224,184,23,160,36,0,56,68,4,224,36,24,165,213,229,+238,6,1,57,56,64,245,139,35,226,195,0,226,189,4,225,105,0,96,41,+96,8,228,61,8,1,75,52,215,73,224,29,12,0,51,224,29,20,0,50,+224,29,19,2,67,39,66,224,30,9,66,171,0,50,228,22,3,224,55,9,+0,66,164,207,224,54,7,194,116,224,24,7,66,130,224,24,12,0,54,224,+49,5,129,224,96,6,0,58,96,6,227,63,3,164,170,0,58,97,56,229,+36,8,132,166,239,181,8,143,186,67,188,156,230,230,24,1,189,14,129,118,+224,32,5,237,10,1,0,50,79,8,1,95,50,128,10,143,159,227,89,0,+168,51,224,122,11,192,101,128,76,247,121,5,96,4,192,111,206,86,224,147,+19,128,35,0,80,96,71,224,44,3,179,125,80,21,96,148,232,195,1,197,+158,108,16,224,198,0,160,181,224,35,21,3,79,32,35,53,225,172,1,167,+50,128,154,224,38,7,0,49,224,38,0,240,0,6,226,185,11,224,35,18,+226,191,0,224,35,18,226,197,0,160,0,242,129,1,224,55,0,66,24,197,+170,1,80,32,97,67,0,85,96,20,0,54,96,20,93,48,82,255,101,18,+66,168,229,98,1,239,131,5,139,99,96,81,194,125,224,172,7,0,58,99,+239,224,29,10,96,166,0,58,100,50,226,185,2,194,253,0,58,100,45,224,+54,9,136,213,0,58,100,186,224,54,2,201,25,0,58,100,241,224,24,3,+166,162,0,58,100,229,224,24,2,198,68,0,58,101,109,224,24,3,204,172,+100,109,96,249,236,173,1,108,152,236,173,13,0,64,98,129,130,113,226,157,+4,192,32,96,31,226,24,3,97,59,64,110,237,16,3,1,57,55,65,174,+1,95,57,64,159,96,94,128,16,77,12,128,9,0,58,101,47,5,10,65,+32,79,32,58,96,37,127,119,0,58,96,28,242,241,1,192,1,157,26,165,+80,160,2,96,18,2,95,57,55,108,67,2,58,57,55,233,101,3,64,1,+128,32,224,68,0,207,210,224,11,0,192,8,153,215,0,58,96,72,190,111,+77,156,1,64,95,65,131,67,3,71,157,245,128,2,2,58,57,54,243,149,+2,241,13,2,224,107,1,224,178,2,224,19,20,99,108,0,39,85,162,232,+188,0,224,47,4,95,116,1,56,51,85,21,111,86,0,54,129,161,64,0,+225,9,2,240,184,5,99,234,128,53,0,57,66,53,224,53,3,160,110,224,+2,0,128,38,0,54,67,26,224,38,2,160,72,224,85,1,0,67,64,158,+139,58,1,95,57,66,162,160,128,243,10,0,240,148,5,96,0,1,58,57,+64,49,225,143,0,96,248,192,86,65,112,0,58,96,72,66,175,8,54,56,+52,32,75,32,85,32,90,192,193,224,42,3,96,5,1,95,54,93,152,224,+87,0,0,54,160,55,2,32,95,53,67,232,181,93,85,67,64,29,130,135,+0,85,171,250,176,89,0,54,182,86,96,14,227,133,1,2,32,61,32,100,+100,145,27,0,57,161,1,0,58,96,75,64,98,2,49,49,56,64,50,224,+27,0,64,115,2,56,51,56,71,201,0,54,98,222,1,49,50,68,188,96,+27,0,58,96,6,227,2,0,3,95,56,52,57,130,192,1,95,56,69,54,+202,178,1,56,52,106,130,128,62,128,6,128,237,224,38,10,65,98,0,56,+69,154,96,29,0,48,64,21,0,56,100,92,231,170,0,128,101,64,6,96,+24,89,135,229,159,0,224,91,0,96,29,2,64,95,56,111,155,0,58,96,+23,5,10,65,32,114,110,102,98,207,2,58,57,54,195,56,1,95,57,67,+207,227,255,0,224,2,3,98,99,226,154,2,2,95,50,52,161,146,226,136,+15,224,33,0,224,29,3,224,26,5,192,22,224,19,2,160,254,96,12,1,+95,57,97,93,129,251,160,12,68,117,2,57,51,51,65,96,96,24,224,12,+1,105,95,71,24,192,0,224,49,3,0,53,130,189,224,19,5,162,200,160,+19,89,82,160,24,243,78,0,96,26,130,17,132,27,193,35,135,77,70,116,+203,88,224,182,14,224,66,0,207,254,225,78,23,224,39,2,225,78,58,96,+175,97,25,0,53,97,25,192,255,129,38,224,169,13,224,51,7,1,64,58,+96,8,102,90,1,50,53,99,89,225,182,40,84,101,225,126,14,0,58,97,+156,224,93,3,224,74,28,0,58,96,64,224,54,20,129,199,224,12,4,64,+54,0,54,224,54,3,242,46,0,5,67,32,60,32,64,35,127,198,224,19,+6,87,118,224,19,8,224,39,11,108,89,165,128,192,19,136,146,192,199,128,+131,224,172,32,224,78,9,64,23,224,78,0,161,197,225,144,32,146,108,225,+130,2,0,51,227,1,6,226,247,0,239,49,0,160,118,96,81,224,138,6,+68,243,224,138,1,227,55,3,225,195,13,224,125,3,224,105,0,225,10,34,+225,110,7,122,220,224,19,7,110,38,224,168,6,69,249,224,146,13,226,86,+4,224,188,0,224,16,6,224,78,6,118,121,224,247,5,198,156,224,204,25,+128,46,164,139,225,103,9,187,2,224,111,5,65,55,224,148,7,225,54,34,+224,58,0,220,152,225,52,8,225,71,11,65,51,224,19,7,226,4,10,118,+188,64,140,226,127,27,224,159,11,225,124,8,225,166,31,224,137,8,67,164,+225,22,25,225,170,20,0,51,70,1,229,12,3,161,176,71,138,160,0,225,+176,6,112,112,224,136,5,66,129,225,115,1,195,161,224,231,8,224,95,3,+226,226,16,65,93,224,18,6,226,33,10,130,32,224,207,10,128,188,229,121,+4,225,104,20,226,170,10,135,91,64,24,226,64,3,224,130,8,69,13,225,+82,13,107,48,192,95,148,140,224,41,26,128,185,250,149,1,227,39,7,227,+229,10,225,254,28,232,61,9,225,123,1,227,84,44,234,151,1,70,89,211,+252,230,89,11,64,58,224,18,6,130,61,224,18,4,228,191,10,99,139,226,+48,5,80,149,224,177,16,224,33,3,192,183,193,73,224,70,13,224,132,7,+230,199,10,230,198,4,224,131,6,224,82,12,224,22,14,231,51,8,225,2,+9,66,244,226,94,12,192,80,128,75,227,83,1,183,193,224,16,1,161,147,+225,71,7,229,71,4,139,233,224,84,1,234,55,0,0,58,98,166,193,198,+125,172,65,92,209,10,0,52,102,78,238,12,2,73,255,0,58,96,79,192,+51,1,95,57,77,13,128,134,0,58,96,6,224,77,16,2,55,55,56,192,+82,0,64,110,102,3,95,53,54,54,66,157,0,52,118,168,0,52,163,20,+224,109,1,192,110,208,83,128,110,226,155,0,0,58,97,234,226,131,16,129,+90,224,18,4,120,100,225,40,5,64,72,66,89,229,211,83,227,86,15,224,+42,32,228,17,31,224,55,5,224,96,25,229,240,6,229,168,15,0,58,101,+218,234,125,20,228,107,3,224,85,1,224,68,2,224,113,4,175,253,0,58,+101,101,226,47,0,95,41,225,17,28,224,202,17,203,45,64,125,226,24,16,+67,82,231,238,11,224,19,7,226,45,10,104,179,225,0,12,233,94,45,232,+81,35,229,201,4,129,111,193,185,224,101,5,192,47,237,226,0,230,91,1,+224,186,13,232,9,14,226,0,1,233,49,12,232,147,45,226,0,4,192,251,+128,254,239,47,44,224,169,3,225,40,25,224,53,4,226,174,3,96,254,224,+11,3,224,46,9,224,180,0,233,4,13,225,177,18,239,172,4,224,129,4,+192,105,161,7,226,3,25,225,211,0,198,100,192,24,225,190,4,225,185,17,+237,201,10,231,0,23,0,52,198,61,226,245,31,229,98,15,228,52,14,224,+185,12,224,47,12,227,253,10,224,226,10,97,58,224,129,5,195,102,224,191,+21,227,43,5,224,47,13,227,131,31,231,144,14,227,233,63,0,52,226,240,+4,227,173,5,224,101,65,129,16,160,87,224,107,12,64,0,0,58,99,25,+241,48,6,227,209,55,160,138,224,116,11,225,186,4,225,16,0,0,52,227,+203,2,160,216,85,45,228,26,2,224,26,3,96,109,224,39,11,224,211,1,+217,64,96,213,186,225,210,44,1,85,32,116,119,224,14,1,0,65,96,60,+0,58,64,134,225,9,10,161,12,242,221,54,225,42,10,0,52,106,13,193,+16,236,251,4,225,30,5,229,226,3,224,19,5,225,3,3,129,239,160,37,+128,207,233,233,2,231,159,14,227,66,9,224,122,6,224,31,3,128,12,0,+58,96,100,234,65,6,96,203,0,58,96,6,232,105,25,229,240,5,173,171,+0,58,99,188,245,219,4,148,177,96,38,64,31,1,51,57,224,206,24,228,+147,16,224,31,10,138,158,80,225,224,177,20,229,36,11,0,58,98,225,225,+2,6,97,193,0,58,96,6,224,165,5,227,54,33,227,211,4,203,230,224,+135,4,224,200,11,225,214,35,246,199,44,245,129,5,239,103,3,227,119,0,+0,58,116,48,225,17,7,161,183,131,86,247,179,4,222,129,224,134,2,227,+158,6,227,159,8,64,73,226,208,2,225,172,13,239,153,3,89,77,128,54,+226,175,9,96,27,0,58,96,6,227,241,6,225,170,29,238,180,5,225,33,+5,160,13,0,58,96,141,224,119,6,96,27,0,58,96,6,224,25,7,64,+81,0,58,96,6,0,10,92,93,0,67,160,117,130,166,85,156,227,27,10,+225,70,10,129,52,247,25,2,117,235,96,67,0,54,96,67,2,85,32,58,+96,67,96,10,0,73,89,84,64,39,186,253,250,116,6,7,84,109,111,100,+117,108,101,32,158,222,0,66,71,17,154,165,123,236,0,48,92,119,0,48,+183,136,160,59,1,79,32,106,95,255,203,0,78,71,96,49,0,64,124,129,+1,95,57,117,160,224,37,4,64,129,129,216,3,85,32,75,52,97,237,0,+58,96,38,122,160,155,247,0,55,252,30,2,1,58,57,86,230,65,62,2,+55,57,50,64,204,196,55,2,66,32,89,129,19,65,17,64,5,0,80,71,+191,0,95,74,219,1,95,49,164,102,225,49,3,96,8,64,41,0,95,98,+54,216,206,224,20,3,97,255,64,194,64,193,1,95,49,92,218,128,177,85,+190,1,10,65,67,223,67,14,96,93,160,99,160,6,96,238,160,62,64,65,+0,57,117,141,227,127,4,230,91,9,157,247,130,116,224,38,0,92,130,192,+122,224,130,0,224,8,0,0,58,96,88,96,138,1,95,49,129,84,190,253,+1,58,57,86,119,65,39,252,27,2,181,163,156,192,225,237,6,225,236,4,+162,249,252,147,20,14,40,46,46,46,41,32,119,104,101,114,101,92,49,48,+38,156,159,0,57,109,102,128,163,99,15,96,114,0,58,96,6,64,140,252,+151,1,77,163,0,58,96,46,130,218,0,56,71,128,125,34,2,83,32,83,+190,175,64,2,167,95,234,39,4,136,97,225,67,1,255,254,4,64,24,3,+85,32,64,90,64,124,138,255,224,41,11,128,166,160,41,224,43,3,97,165,+1,95,56,94,20,128,20,3,95,56,52,56,164,149,64,176,131,46,238,153,+81,253,80,1,64,8,160,16,96,131,225,122,1,6,100,101,102,97,117,108,+116,129,171,253,90,3,224,34,1,1,58,58,128,29,3,64,95,57,48,139,+23,0,85,192,93,224,76,8,14,114,105,118,105,110,103,32,105,110,115,116,+97,110,99,101,160,86,192,55,238,249,14,163,105,130,165,191,55,226,223,2,+0,39,164,151,96,197,194,79,224,219,27,6,112,97,116,116,101,114,110,224,+132,0,99,123,64,34,2,79,32,35,94,0,222,54,1,56,57,133,105,96,+78,1,56,52,64,70,64,152,68,155,4,32,95,56,55,49,254,132,0,92,+19,160,52,96,28,68,20,67,62,196,21,2,95,57,48,167,30,129,37,224,+171,3,225,126,28,224,124,0,161,137,96,103,127,36,96,7,127,93,2,95,+56,54,96,37,224,70,3,0,44,163,108,98,244,225,110,1,96,0,239,181,+33,64,91,0,55,160,107,224,170,9,225,211,15,64,55,128,230,64,59,232,+25,6,225,179,9,224,92,13,4,99,108,97,115,115,224,89,0,99,63,161,+176,64,7,183,68,239,114,14,130,60,166,35,224,112,14,0,56,96,7,228,+117,5,4,105,110,102,105,120,96,115,101,123,0,50,71,144,0,50,71,55,+102,85,0,56,161,234,224,23,6,67,117,130,2,224,24,2,162,19,224,106,+0,3,95,49,49,55,69,204,164,192,225,187,35,193,247,129,89,225,75,12,+224,231,19,225,88,8,19,102,111,114,101,105,103,110,32,105,109,112,111,114,+116,32,99,99,97,108,108,226,109,9,66,231,224,184,2,72,77,0,49,247,+65,0,228,22,32,240,104,53,160,237,230,205,10,1,95,56,160,139,224,29,+3,224,26,5,226,116,44,129,19,166,166,0,32,64,1,150,162,0,57,103,+18,2,95,57,48,64,171,164,12,224,58,6,13,123,45,35,32,83,79,85,+82,67,69,32,35,45,125,161,8,1,64,80,193,79,224,44,5,8,113,117,+97,108,105,102,105,101,100,192,39,193,229,226,47,0,65,138,0,75,129,135,+226,163,5,2,32,97,115,130,30,1,95,54,131,93,224,101,2,228,95,1,+65,3,192,75,0,80,64,72,224,64,2,5,104,105,100,105,110,103,160,121,+96,44,228,77,14,2,79,32,35,71,55,194,220,132,72,248,196,0,96,0,+230,89,36,2,116,121,112,196,43,226,63,22,0,56,69,140,64,0,242,50,+19,224,114,9,224,192,26,195,77,226,186,24,224,102,14,3,95,56,55,50,+161,206,230,51,14,242,120,35,3,32,95,56,57,229,219,0,224,84,10,225,+95,48,230,218,17,231,121,16,242,136,9,227,53,9,224,128,22,2,110,101,+119,224,131,29,102,94,64,7,135,28,103,240,0,83,64,85,120,209,227,169,+27,3,100,97,116,97,224,103,4,224,77,0,64,57,72,48,192,7,224,210,+53,224,103,8,224,207,10,226,122,11,227,111,2,0,124,160,63,131,64,128,+250,224,253,3,128,0,0,58,106,15,5,10,65,32,83,32,85,64,66,66,+34,74,60,224,150,14,169,87,128,90,96,128,227,196,33,226,169,1,96,118,+141,15,229,108,1,229,75,3,97,46,225,66,23,1,95,56,109,61,231,166,+0,163,99,0,80,132,137,66,217,164,59,196,226,0,57,72,114,224,28,4,+192,125,165,189,227,122,14,227,37,0,227,184,13,228,82,0,224,243,4,224,+231,0,141,218,224,100,0,96,5,192,46,0,49,78,39,161,35,224,18,0,+0,53,160,18,0,58,96,175,129,35,162,161,163,70,96,195,224,69,1,77,+28,160,68,163,102,0,58,96,149,110,110,0,80,226,228,0,0,85,233,205,+0,98,161,96,4,229,184,3,224,28,0,225,213,0,1,57,48,64,255,232,+14,8,224,203,2,225,26,10,3,40,46,46,41,229,80,0,64,31,0,58,+101,189,205,41,97,123,226,38,13,0,58,96,111,5,10,65,32,65,32,58,+102,243,64,51,1,52,56,224,253,0,206,16,174,14,96,15,64,9,128,21,+77,158,0,53,231,52,0,0,58,96,6,226,215,21,97,109,224,125,0,226,+197,29,230,6,22,225,44,4,224,66,0,193,209,224,100,1,225,84,9,128,+255,141,137,224,179,6,224,101,3,97,224,1,95,56,95,39,225,120,7,1,+61,62,161,118,64,72,131,212,64,169,1,80,32,101,247,1,64,80,97,137,+195,117,161,246,64,127,160,208,140,64,167,33,128,158,0,54,132,41,0,58,+100,130,65,140,67,194,0,58,96,130,128,13,111,133,3,51,32,64,58,99,+219,130,230,0,89,97,22,0,83,128,5,0,39,112,1,128,97,67,106,234,+55,0,176,155,96,95,175,21,96,17,80,27,233,112,1,2,66,32,83,114,+22,64,0,224,68,1,224,61,0,137,157,224,46,3,239,11,0,196,238,134,+111,0,67,109,186,66,67,128,5,101,237,160,81,239,144,2,107,193,128,10,+209,86,224,80,0,166,190,128,102,0,85,128,62,224,132,1,192,11,96,74,+160,208,196,208,160,96,160,58,128,35,1,95,53,176,84,145,22,240,17,2,+0,66,66,231,228,252,6,128,90,225,26,5,131,164,234,139,14,197,63,96,+58,160,14,98,45,98,149,165,135,0,75,198,7,224,174,44,224,159,6,96,+156,224,153,5,224,126,13,224,118,0,225,242,0,226,7,0,192,255,129,125,+193,147,115,111,0,52,65,137,139,20,0,49,116,114,99,151,160,144,160,24,+96,117,64,13,4,55,57,32,95,55,131,32,0,48,194,10,96,10,193,63,+128,94,235,103,1,0,50,69,115,234,171,2,1,91,93,195,73,224,43,0,+224,100,4,224,87,2,173,244,3,95,56,53,50,99,151,209,113,148,28,131,+167,100,59,0,56,64,46,79,172,75,62,2,95,56,53,253,190,2,192,4,+96,155,66,90,161,57,96,242,211,161,161,92,195,15,160,198,129,45,161,50,+233,85,2,96,118,197,248,234,22,5,96,182,224,26,13,96,53,129,241,224,+26,7,96,174,99,95,224,22,4,141,49,230,143,3,225,69,1,2,42,42,+42,203,118,0,53,146,196,134,132,226,37,5,245,241,4,167,134,130,54,96,+11,224,83,6,231,119,0,228,21,0,224,144,6,139,170,99,3,239,106,11,+0,95,137,85,239,23,6,119,162,224,148,2,165,17,232,101,6,238,91,0,+96,179,225,34,9,98,215,192,26,224,149,5,98,21,224,252,0,160,101,160,+10,135,115,64,10,230,117,2,241,224,2,101,139,128,119,248,105,0,96,97,+96,96,232,11,17,224,26,8,66,191,232,156,3,225,140,24,137,113,227,195,+7,225,76,1,0,45,198,112,193,140,226,86,13,85,180,224,26,15,100,137,+225,51,13,97,110,96,163,193,142,66,16,232,123,11,75,22,233,119,4,160,+217,224,253,4,224,33,7,236,135,7,68,156,162,201,170,210,0,54,71,15,+65,124,224,73,6,94,95,233,179,0,231,192,1,160,170,164,209,234,195,19,+226,222,7,234,8,5,232,136,30,1,95,56,88,65,160,133,234,57,6,96,+0,133,86,225,112,7,98,74,225,112,12,118,213,225,58,1,233,36,2,232,+191,2,226,53,12,224,227,17,226,53,11,241,174,11,163,177,241,24,9,0,+102,196,65,0,55,224,27,8,226,125,0,192,0,64,126,229,18,17,226,132,+18,96,133,224,26,13,227,211,17,151,91,225,13,2,225,15,1,224,16,2,+0,56,134,15,227,87,2,182,68,0,79,163,186,224,243,17,227,142,6,224,+48,17,2,116,104,101,182,90,200,12,224,43,17,2,101,108,115,175,39,227,+46,9,224,194,3,229,1,5,226,229,1,194,84,225,10,5,96,50,226,24,+20,226,10,1,160,74,235,71,1,0,55,112,137,148,2,238,107,4,0,111,+96,168,236,108,21,0,46,160,37,163,54,2,54,57,32,112,247,96,112,217,+123,1,95,56,104,12,160,0,229,187,12,104,153,228,19,8,64,170,75,136,+0,56,134,189,228,85,1,129,229,229,208,36,238,24,2,229,208,2,160,70,+226,183,19,98,64,231,147,12,227,202,17,227,201,3,225,102,3,160,7,225,+67,6,1,108,101,180,122,225,65,19,230,252,0,226,87,13,0,105,226,129,+0,160,120,228,19,5,64,124,162,155,162,9,224,70,13,1,99,97,226,158,+0,224,25,6,0,111,195,21,224,164,18,0,56,244,36,1,225,201,6,65,+255,135,227,96,86,75,3,170,133,192,21,197,244,229,231,2,64,34,197,231,+0,57,97,53,245,81,9,228,132,8,248,0,0,131,41,129,221,228,85,7,+192,201,129,155,230,251,10,225,191,0,128,33,4,64,95,51,56,54,138,27,+129,79,0,57,123,114,65,76,64,9,2,95,56,57,226,80,3,64,34,74,+69,239,229,1,0,85,189,208,224,32,0,64,89,192,114,96,128,225,47,1,+128,3,194,109,139,248,234,189,0,193,63,162,118,2,95,56,57,119,165,110,+208,0,50,216,132,226,21,3,2,115,116,36,129,32,202,181,129,105,160,69,+161,229,128,24,235,24,4,128,13,224,209,3,192,58,224,13,2,100,74,97,+33,1,39,32,163,84,235,47,2,65,217,95,122,128,9,129,200,1,85,32,+140,125,128,15,0,58,78,192,174,181,226,172,1,1,50,51,100,169,1,55,+51,111,8,2,56,57,54,110,222,144,152,79,152,0,79,161,76,96,81,79,+156,239,59,1,64,43,96,86,0,54,175,125,1,80,32,110,55,0,85,96,+66,222,22,96,22,96,201,79,146,97,193,160,23,152,254,100,172,128,138,96,+204,225,207,1,192,249,166,85,162,62,230,33,3,96,141,99,97,193,33,195,+192,205,236,230,33,1,103,84,230,6,0,0,58,118,18,254,6,11,64,131,+254,25,10,106,127,229,44,5,233,83,7,128,251,97,29,106,152,97,129,113,+131,96,18,98,197,3,66,32,95,52,118,219,0,53,160,33,96,36,130,46,+224,98,6,249,177,16,96,45,64,104,250,52,10,224,22,14,247,45,13,229,+121,8,228,71,12,160,80,160,75,104,187,128,226,98,56,96,28,2,52,49,+51,64,215,227,115,0,224,36,2,64,19,128,36,1,56,57,194,227,247,20,+12,224,49,0,130,4,224,12,2,160,99,224,94,0,224,43,6,236,221,7,+65,219,145,247,3,95,49,49,56,101,132,0,54,83,53,0,50,68,235,0,+57,106,134,1,55,55,98,237,1,49,50,94,99,96,150,0,95,83,26,160,+11,0,58,96,6,192,63,2,95,49,51,96,188,138,191,0,56,66,99,160,+43,64,17,0,58,96,6,9,10,65,32,102,115,104,111,119,32,58,96,32,+181,232,163,183,103,204,98,144,233,215,20,0,58,101,208,226,145,11,129,153,+224,18,4,101,16,225,69,5,206,10,163,51,97,13,230,150,5,181,244,134,+150,246,1,4,236,106,6,81,49,96,166,231,201,6,145,74,224,192,6,1,+46,46,230,194,0,177,105,160,134,160,132,224,112,81,224,105,9,224,92,21,+224,179,20,225,97,7,66,8,239,109,7,237,51,0,64,110,224,97,30,224,+163,14,68,179,232,30,0,225,0,5,245,164,2,228,214,0,64,7,237,28,+19,233,242,3,105,195,69,90,192,218,0,58,105,210,197,116,128,135,161,41,+233,188,31,0,58,64,81,166,59,192,245,232,59,3,249,166,0,224,17,0,+205,224,0,58,96,111,3,10,65,32,80,67,28,133,252,3,95,56,56,50,+182,220,0,58,101,221,166,61,136,115,129,118,71,153,1,95,56,71,136,2,+95,56,51,65,140,102,90,0,58,64,57,128,46,149,120,232,122,11,178,75,+1,50,52,69,103,183,60,128,30,168,95,64,12,129,236,64,2,224,59,4,+227,98,5,224,25,1,224,27,5,229,154,16,6,75,51,32,95,50,49,50,+226,8,2,8,115,101,112,49,32,65,98,111,118,201,233,224,37,17,4,66,+101,115,105,100,224,38,0,224,124,1,227,232,12,1,95,56,153,232,224,37,+0,213,164,128,168,99,246,231,68,3,145,175,129,5,96,189,231,81,1,64,+88,0,67,64,34,71,213,193,47,64,51,65,119,199,161,128,0,129,93,225,+56,2,224,97,0,230,94,8,128,28,224,144,1,224,142,1,224,205,4,225,+157,2,160,195,224,79,0,116,82,147,219,161,189,128,69,169,3,64,11,3,+95,49,52,48,180,253,192,113,224,71,15,144,62,224,71,10,97,1,1,95,+56,149,49,136,223,224,84,0,245,71,0,96,58,224,201,1,224,198,8,134,+218,192,123,128,122,1,95,56,113,102,225,102,40,224,195,4,136,226,115,82,+99,54,192,141,1,95,55,64,208,0,58,99,33,195,15,161,157,224,159,5,+96,182,0,64,152,58,225,143,2,225,192,21,200,155,128,26,198,70,248,29,+0,224,30,5,225,109,0,222,16,226,96,0,224,66,18,193,87,224,66,2,+129,39,75,134,0,56,103,235,64,13,1,95,56,103,170,193,197,75,123,128,+22,100,19,252,40,0,114,189,68,147,229,205,0,129,54,0,52,185,177,226,+206,13,132,95,65,68,220,121,227,231,6,64,42,227,250,49,7,111,110,101,+76,105,110,101,114,227,254,25,224,41,0,228,2,6,227,249,20,74,91,161,+30,64,0,233,225,12,227,106,8,136,151,131,86,224,60,0,224,20,0,73,+39,224,81,0,233,165,12,0,75,228,120,1,64,137,148,209,65,66,64,53,+108,50,65,228,165,151,217,99,225,244,6,164,140,224,63,1,0,58,97,239,+98,197,237,243,0,109,16,1,95,56,162,229,75,186,64,93,98,180,64,80,+250,195,6,128,169,230,9,5,96,191,96,200,195,127,224,19,0,128,17,241,+239,0,169,148,238,253,0,128,212,173,59,229,55,1,162,59,204,169,2,95,+56,55,167,27,64,164,192,189,233,114,5,148,29,199,231,160,17,96,108,225,+252,1,1,32,124,240,143,1,231,235,37,160,170,0,58,96,136,190,254,224,+218,3,232,96,2,108,115,224,119,5,1,60,45,233,4,5,160,6,97,124,+241,53,52,0,58,96,162,96,143,2,95,56,54,64,126,99,131,0,58,113,+23,253,87,0,96,146,225,211,0,97,247,255,166,7,1,54,56,66,124,225,+166,0,224,143,3,3,119,104,101,114,195,39,224,146,26,96,148,171,212,2,+57,49,51,64,125,131,242,229,94,1,132,31,0,58,64,73,224,187,5,136,+166,64,139,169,66,186,148,162,112,231,107,6,228,224,7,210,234,163,20,231,+154,7,224,46,7,2,95,56,52,131,104,64,12,64,5,0,58,96,133,225,+220,19,96,254,0,53,226,55,9,247,183,1,129,11,180,139,192,31,0,54,+233,179,0,225,249,3,224,72,34,234,242,14,0,58,119,169,65,104,3,54,+32,95,55,99,40,74,140,0,53,82,135,2,50,51,52,97,88,77,171,165,+152,169,243,64,54,208,49,0,80,209,191,102,212,97,113,125,113,0,67,79,+199,128,137,240,7,1,182,96,177,9,64,92,238,244,1,0,58,64,198,129,+229,225,43,2,227,129,9,5,102,111,114,97,108,108,227,133,5,216,117,131,+254,225,11,8,0,58,123,39,134,51,228,148,0,132,239,193,226,225,218,6,+64,165,136,27,132,166,98,96,96,26,225,81,1,129,221,251,148,4,236,204,+6,246,20,10,248,97,1,0,56,65,211,128,156,175,0,88,115,0,58,96,+22,96,170,0,75,254,3,0,0,54,96,100,2,95,55,49,139,173,248,242,+1,0,58,96,148,225,190,27,112,239,225,190,1,65,52,102,0,0,73,229,+4,3,225,4,0,105,126,75,226,114,104,102,114,192,35,1,95,56,73,111,+96,85,64,13,128,116,96,113,64,95,128,7,64,96,178,189,3,32,80,32,+75,102,250,129,53,224,9,3,224,11,1,0,58,125,132,239,136,0,1,95,+55,70,219,96,7,157,39,2,56,53,53,73,226,105,227,0,54,164,37,0,+58,115,141,5,10,65,32,75,32,89,99,230,65,48,232,218,4,137,253,3,+67,32,95,53,141,22,137,109,166,91,0,83,255,94,3,244,32,2,194,177,+1,80,32,137,179,64,143,255,221,4,98,85,169,208,97,199,2,50,57,56,+64,33,1,53,50,212,110,160,34,128,0,0,58,64,187,195,41,168,124,64,+20,211,88,243,133,3,95,160,192,20,64,71,128,20,130,28,237,202,13,1,+52,48,237,202,7,68,144,162,243,66,52,165,27,64,144,197,215,64,68,162,+95,97,205,66,43,161,84,0,58,97,143,160,51,117,92,103,243,0,58,96,+36,224,74,4,133,102,67,164,229,102,93,137,76,64,12,133,102,64,133,160,+121,97,46,236,47,2,0,32,116,187,64,35,129,120,227,26,5,110,102,227,+26,0,74,99,228,217,7,66,102,102,247,0,49,70,247,64,21,227,40,18,+121,125,227,40,21,67,186,227,40,1,64,127,96,109,132,170,0,58,96,8,+224,201,3,217,207,224,201,4,204,54,225,56,0,239,77,1,225,60,1,161,+61,225,63,9,224,24,0,224,168,1,192,19,97,83,192,85,96,71,129,101,+225,103,0,130,44,2,65,32,58,96,56,97,23,0,51,69,106,84,79,1,+58,56,84,48,128,19,3,54,32,35,49,93,50,70,14,88,144,72,84,4,+95,49,56,49,32,140,126,224,20,7,192,253,64,70,176,110,0,51,129,210,+108,35,2,95,56,51,65,167,0,56,65,154,2,95,56,51,67,248,0,75,+96,111,129,210,0,85,87,60,0,58,96,23,162,201,64,13,195,61,133,140,+226,139,1,202,216,70,125,252,182,4,138,150,110,79,0,48,237,251,5,1,+95,56,127,226,172,184,166,6,2,95,49,48,68,4,151,72,0,95,238,202,+2,0,58,96,173,194,37,64,87,236,113,10,192,138,2,95,56,50,107,184,+160,89,226,84,0,229,123,5,224,47,3,0,51,99,245,192,47,0,58,96,+9,137,138,227,68,0,238,34,2,129,215,237,24,8,240,110,3,224,39,15,+164,181,238,114,0,240,5,15,130,162,226,65,3,64,8,206,79,224,7,5,+224,190,7,224,54,4,224,145,0,227,252,2,192,13,133,192,163,109,69,197,+101,130,1,56,50,224,124,0,224,89,6,160,165,225,220,0,1,95,56,69,+206,161,62,129,194,135,198,160,15,224,51,0,224,219,5,241,175,7,192,171,+161,17,226,76,1,241,165,0,224,88,7,224,104,11,225,119,1,160,226,237,+250,5,224,94,0,160,32,224,145,4,208,122,240,172,1,130,166,128,224,241,+115,2,224,118,7,224,50,7,133,210,160,130,229,174,0,227,37,3,160,217,+228,63,7,224,225,9,128,88,0,95,111,225,160,0,164,138,224,193,11,241,+110,13,1,50,56,241,115,0,224,188,10,132,134,0,58,96,16,209,49,128,+86,130,17,165,3,225,85,15,193,52,227,93,8,192,24,0,85,199,56,224,+33,8,96,129,239,46,3,86,108,97,104,0,54,71,96,67,234,233,125,0,+64,255,99,247,0,95,79,19,0,58,97,145,69,15,0,52,72,18,176,237,+0,50,102,95,65,110,2,95,49,53,226,194,0,0,58,96,6,227,198,3,+192,193,242,17,6,227,114,3,225,209,5,228,79,3,225,66,2,128,14,64,+0,227,200,1,225,221,12,160,39,225,0,0,189,54,73,16,97,4,195,90,+128,54,227,231,20,224,67,5,97,221,102,237,246,11,1,228,1,3,64,252,+0,54,133,236,130,124,225,193,1,79,240,246,13,8,98,239,132,22,224,210,+0,246,8,86,0,97,82,4,3,78,101,115,116,242,14,25,224,42,1,246,+18,58,225,178,13,228,108,1,129,250,97,47,193,238,99,211,224,24,18,64,+0,225,54,24,128,92,229,250,25,129,144,226,18,7,197,170,246,0,19,224,+151,7,246,12,7,224,82,2,132,223,131,235,224,74,0,78,58,72,24,132,+195,130,47,134,41,193,48,225,54,2,225,55,0,233,10,10,160,151,224,138,+2,224,205,4,131,3,224,150,0,101,56,224,170,1,246,98,1,230,187,0,+225,42,15,162,238,224,92,4,128,1,228,246,2,225,179,16,192,52,182,77,+96,0,108,116,0,58,96,36,249,84,6,227,64,22,192,153,243,135,9,224,+23,1,225,200,1,225,237,12,229,72,14,224,167,0,129,179,3,64,95,55,+57,225,212,2,229,91,27,96,125,225,76,0,192,72,1,95,49,73,220,165,+59,71,252,3,51,56,32,95,111,128,128,67,225,70,2,193,33,96,16,0,+54,96,253,0,52,76,175,101,169,225,55,1,65,56,138,47,128,240,230,68,+34,192,48,224,28,4,206,82,224,224,5,96,21,232,63,5,225,57,14,97,+54,128,198,152,47,225,57,4,225,58,26,253,2,0,137,25,77,237,235,101,+7,130,171,163,149,70,129,0,58,96,107,107,177,3,50,49,32,58,100,84,+172,124,1,80,32,133,59,0,80,98,98,206,58,1,67,39,98,101,194,217,+98,168,228,36,0,76,156,226,212,0,135,176,128,39,201,36,226,90,25,227,+69,11,224,39,4,229,207,4,253,245,6,114,67,111,159,225,125,2,229,157,+6,0,98,69,152,0,103,213,15,229,118,4,160,84,164,114,192,135,197,119,+160,198,111,9,98,72,105,48,226,240,1,160,169,228,245,2,195,2,228,216,+6,195,163,224,227,17,228,41,0,164,195,232,0,11,229,253,1,224,124,8,+103,199,65,162,96,14,233,253,11,228,112,0,226,65,5,128,138,225,3,0,+192,193,225,223,0,250,114,26,225,55,0,193,194,224,46,13,193,12,192,28,+225,200,50,0,49,225,201,11,224,88,0,226,133,3,225,208,4,227,190,0,+132,249,65,5,97,118,225,213,2,229,165,0,72,209,160,70,225,187,5,224,+220,13,200,215,229,101,0,230,19,17,164,145,224,109,4,160,79,252,247,3,+195,252,78,177,102,128,228,27,0,252,226,2,224,68,8,225,231,2,226,138,+14,229,121,4,0,64,111,69,104,211,64,6,64,4,0,58,110,246,111,143,+68,59,0,73,68,10,64,47,145,14,2,55,32,58,96,95,210,162,64,247,+114,162,0,49,138,201,103,155,0,58,96,195,228,83,1,96,241,100,83,71,+184,128,37,87,209,67,50,224,37,1,98,78,128,37,132,159,129,113,129,164,+64,138,0,58,99,132,234,49,1,226,112,8,1,95,56,116,225,130,238,224,+246,2,128,38,64,47,3,32,64,95,52,85,75,64,38,65,245,129,249,128,+227,196,238,231,64,1,224,42,0,101,68,128,142,230,50,2,128,80,96,109,+226,11,4,195,166,131,61,230,50,36,199,172,230,50,11,192,86,230,50,0,+96,236,98,26,224,235,1,226,27,2,252,13,15,150,6,128,110,160,10,227,+103,7,3,102,105,116,115,214,162,180,49,64,41,130,20,0,53,162,20,67,+121,85,122,0,50,230,34,1,96,240,225,151,1,233,145,0,225,167,0,193,+185,239,65,1,230,63,10,227,67,2,234,170,22,229,45,7,224,35,4,199,+98,64,36,228,86,2,103,103,224,238,5,10,100,105,115,112,108,97,121,32,+108,97,121,203,184,192,141,195,68,231,152,5,192,29,65,79,174,7,225,178,+0,229,186,13,238,254,9,3,95,49,51,49,78,75,65,88,224,67,0,211,+121,196,13,0,66,64,5,96,41,232,210,9,160,240,99,226,141,87,160,172,+228,45,15,225,101,7,234,17,7,225,97,10,225,187,1,225,94,61,0,50,+225,95,7,133,102,225,23,3,224,210,36,225,118,70,65,207,101,15,64,9,+97,1,96,5,99,254,0,58,116,31,183,133,2,48,32,95,105,176,3,67,+32,95,51,119,35,0,51,101,181,84,248,0,49,128,26,1,95,49,90,201,+65,64,224,44,0,1,95,54,93,245,128,209,1,95,56,160,39,2,64,95,+51,96,40,64,153,224,18,0,0,49,91,89,64,0,2,58,56,48,188,75,+97,166,163,80,128,87,144,46,107,32,75,23,88,35,129,13,4,66,32,95,+54,56,94,15,118,109,0,49,90,246,64,83,153,0,96,124,65,159,225,14,+2,225,170,1,17,114,101,99,117,114,115,105,118,101,32,109,111,100,117,108,+101,58,32,129,176,160,180,97,148,1,95,54,97,126,224,59,8,13,44,32,+105,109,112,111,114,116,32,99,104,97,105,110,160,57,4,66,32,95,53,56,+251,156,0,128,57,128,0,1,95,55,75,221,3,58,56,48,54,134,18,4,+54,56,52,32,75,184,145,97,199,192,173,237,28,3,0,54,235,207,0,97,+27,205,4,0,66,97,100,0,54,126,70,6,54,54,53,32,95,50,56,167,+68,194,179,98,23,131,86,224,42,0,161,1,64,48,96,168,0,54,93,6,+1,95,55,129,47,194,251,164,169,188,180,68,173,128,68,2,55,52,50,64,+4,98,142,1,55,52,122,154,103,118,225,84,10,0,77,97,74,9,32,110,+111,116,32,102,111,117,110,100,193,84,96,147,161,83,2,49,49,55,65,2,+177,107,224,64,6,15,92,49,48,38,115,101,97,114,99,104,32,112,97,116,+104,61,96,62,64,132,96,59,98,57,122,119,0,53,192,4,189,80,1,95,+54,94,137,224,79,13,6,112,97,99,107,97,103,101,224,80,2,224,71,18,+225,19,0,96,0,129,159,228,71,3,161,177,225,91,3,193,88,2,95,51,+55,224,59,0,98,69,112,5,197,223,99,6,161,140,224,31,1,65,94,0,+57,183,140,169,4,226,125,0,166,94,1,95,52,123,95,161,66,230,254,6,+128,5,103,219,2,95,50,57,65,155,127,45,224,173,3,226,47,2,122,87,+224,157,6,166,189,214,121,2,95,54,55,64,64,96,56,227,59,16,193,81,+3,100,111,101,115,97,236,6,99,111,110,116,97,105,110,163,74,225,244,1,+192,201,228,140,1,244,79,0,227,33,4,224,169,8,226,217,3,224,201,1,+68,54,225,66,0,131,255,0,66,237,151,0,131,184,99,60,0,80,108,25,+131,63,64,131,236,161,6,128,0,65,78,1,54,54,67,176,2,54,55,50,+96,48,97,189,2,58,56,48,137,171,224,238,1,2,46,116,120,77,80,0,+58,96,33,104,25,2,95,56,48,66,202,96,5,0,58,96,105,105,234,1,+48,48,64,108,124,97,111,207,96,5,0,58,96,37,163,188,65,109,105,248,+90,60,224,100,4,161,83,72,140,0,58,97,196,165,10,226,57,5,164,157,+2,50,51,50,64,18,64,176,64,32,0,50,90,40,1,95,54,90,158,81,+12,0,55,170,69,130,233,98,155,64,51,73,223,225,200,6,7,76,111,97,+100,105,110,103,32,193,208,198,179,228,59,4,226,223,0,0,54,118,255,226,+206,9,132,38,224,147,2,65,90,126,32,126,110,67,84,112,221,0,54,228,+54,1,226,90,16,0,80,160,137,29,99,111,109,112,105,108,101,32,118,101,+114,115,105,111,110,32,109,105,115,109,97,116,99,104,58,32,102,105,108,101,+131,198,170,17,196,25,229,162,6,160,211,128,42,228,126,1,128,139,224,44,+7,160,110,0,114,96,45,192,169,96,0,96,163,1,54,56,64,174,2,95,+55,57,150,152,0,58,99,179,220,162,64,252,0,54,70,133,0,55,97,37,+166,133,224,24,3,1,54,56,224,24,2,127,140,160,47,126,92,128,22,161,+217,1,55,57,65,165,1,55,57,67,53,2,95,55,57,230,233,0,65,95,+0,52,133,142,64,156,1,95,55,66,165,2,95,55,57,134,241,0,54,96,+67,229,39,0,2,95,55,57,128,29,227,239,0,228,91,3,103,29,67,52,+1,95,55,123,220,0,58,96,214,156,89,0,51,105,228,0,58,96,24,128,+17,0,52,136,30,0,58,96,76,224,36,0,64,110,0,58,96,101,3,10,+65,32,90,69,31,0,58,96,139,192,32,72,90,0,58,96,190,188,177,64,+71,64,140,0,58,96,218,242,150,0,224,5,1,65,43,66,198,225,8,0,+99,154,0,55,127,169,160,6,224,25,6,129,34,96,6,224,26,7,129,173,+96,6,224,26,0,0,55,65,113,0,56,115,66,0,55,71,167,192,6,0,+58,97,114,128,166,0,50,160,184,64,24,109,33,169,144,0,66,241,228,1,+64,1,233,202,1,67,207,164,120,141,75,129,99,0,55,100,109,101,0,65,+182,3,95,55,54,55,95,18,0,50,149,195,229,110,0,242,241,9,96,62,+137,192,141,124,224,43,27,133,197,129,74,147,29,137,34,192,249,231,191,16,+231,189,7,16,117,108,116,105,112,108,101,32,105,110,115,116,97,110,99,101,+115,232,218,3,0,55,65,89,224,62,2,224,0,5,1,95,55,72,221,96,+8,1,55,54,65,104,188,184,65,76,170,76,128,200,0,90,64,198,192,9,+2,95,55,56,64,44,197,210,0,58,96,54,77,105,1,32,89,97,92,129,+116,128,217,235,148,6,96,50,224,25,12,150,85,235,172,6,132,136,174,116,+97,54,160,133,224,37,22,244,109,1,160,0,224,49,6,97,85,224,48,3,+0,90,192,232,224,38,23,128,89,0,55,68,26,224,0,2,237,229,18,235,+225,1,224,90,4,99,6,246,250,1,226,62,0,97,252,128,17,224,49,19,+160,32,104,225,210,63,192,49,128,28,150,156,242,60,1,225,64,19,99,173,+225,63,9,171,178,160,0,0,58,65,245,65,230,156,56,131,17,240,63,14,+224,25,12,98,127,129,38,224,25,6,104,252,192,25,237,31,5,99,51,224,+184,16,96,30,224,185,10,134,193,224,244,2,129,86,225,83,8,100,80,225,+133,7,128,44,225,82,0,161,72,224,88,5,162,6,0,55,195,47,224,164,+19,100,188,224,163,20,225,21,13,99,153,225,21,12,96,117,224,111,16,64,+29,225,19,27,224,58,10,64,114,224,170,22,224,59,16,227,132,14,224,59,+3,227,249,14,224,231,3,224,25,4,96,75,225,1,12,168,193,224,138,14,+227,183,8,128,138,0,49,105,9,224,197,21,64,51,224,58,10,5,55,55,+56,32,95,52,84,120,225,7,24,102,197,224,65,10,0,56,234,202,1,226,+234,13,224,210,20,227,253,3,224,85,2,224,146,2,224,58,16,227,35,14,+229,29,2,64,31,95,245,132,214,0,58,96,6,163,232,2,95,55,56,75,+30,128,193,96,66,128,17,106,40,160,17,0,58,96,219,224,48,1,104,203,+1,56,50,72,93,64,32,75,48,3,47,61,32,58,96,18,64,12,0,61,+96,12,180,206,244,69,0,114,197,108,198,128,6,0,58,64,103,64,34,2,+73,32,58,96,16,136,126,64,99,64,225,165,38,163,217,229,4,14,229,6,+1,96,194,224,7,2,103,71,0,53,111,79,0,55,67,160,0,58,96,6,+160,195,1,75,50,212,122,161,23,99,231,0,58,96,6,202,63,242,3,1,+144,244,64,80,0,51,69,33,64,7,112,216,0,55,81,77,3,64,64,95,+53,72,169,64,61,0,54,160,61,125,20,160,159,81,145,167,153,212,123,102,+71,233,253,2,163,18,203,56,145,38,101,213,0,58,96,98,236,164,6,104,+197,221,122,194,99,147,66,0,83,194,113,72,26,79,207,96,226,0,54,103,+245,160,6,0,64,160,124,160,81,108,181,0,52,96,7,73,13,72,48,134,+19,200,57,0,58,73,161,64,110,105,135,138,134,73,193,202,64,138,133,73,+238,202,100,64,14,129,216,128,151,224,148,26,0,67,170,35,97,240,233,156,+4,171,242,160,141,0,58,96,37,65,196,64,166,1,95,56,64,107,64,33,+96,122,0,58,96,192,241,201,3,129,129,106,22,241,184,0,0,58,107,222,+224,37,7,64,35,128,45,97,30,241,230,1,0,58,108,61,224,254,0,66,+106,0,58,108,171,235,134,0,224,2,0,224,49,1,129,48,130,54,138,138,+97,2,232,61,5,2,95,55,52,99,160,128,14,218,19,162,212,211,177,115,+179,64,8,194,59,246,183,6,226,82,0,224,49,2,98,69,96,53,207,232,+2,79,32,35,78,186,148,109,244,34,9,96,218,158,158,64,0,241,85,1,+174,111,244,104,11,98,109,143,228,130,75,234,207,33,0,70,78,64,242,139,+7,241,249,3,177,244,224,100,0,99,36,244,196,1,1,55,52,98,41,169,+146,224,253,7,65,79,195,85,236,6,2,132,82,143,146,2,64,95,55,128,+98,210,26,96,33,175,60,245,18,3,78,150,165,181,176,230,223,228,64,14,+115,181,97,133,97,244,254,196,1,192,141,3,95,55,53,52,224,247,2,7,+109,104,115,99,112,112,46,104,216,216,64,42,204,39,226,0,8,224,138,0,+96,173,65,72,128,162,225,5,0,128,186,161,123,224,184,1,0,55,131,93,+224,171,1,128,156,229,139,0,225,207,3,0,49,90,254,2,95,55,53,65,+78,142,202,0,50,80,2,128,28,101,255,102,66,134,95,247,81,5,5,114,+101,109,111,118,101,97,201,5,102,97,105,108,101,100,128,211,0,58,96,126,+11,10,65,32,94,117,110,108,105,110,107,32,58,96,93,161,23,225,25,2,+1,50,50,236,225,4,6,72,83,67,80,80,72,83,208,231,128,44,224,46,+4,225,220,5,115,162,0,66,193,55,225,44,2,161,15,224,201,4,0,50,+113,120,161,199,145,111,226,147,8,7,82,117,110,32,99,112,112,104,205,90,+226,142,12,1,95,55,70,79,224,160,1,160,108,143,219,0,54,82,101,0,+50,137,16,2,56,32,64,224,90,1,96,86,192,217,224,219,2,224,128,5,+7,32,45,45,115,116,114,105,112,128,126,192,201,180,12,243,174,0,214,204,+162,129,5,51,49,32,95,55,53,170,44,224,39,0,3,67,39,32,79,224,+226,0,224,146,12,1,45,73,177,168,0,32,116,157,224,25,2,10,115,114,+99,47,114,117,110,116,105,109,101,128,34,100,51,65,54,1,48,53,192,114,+84,46,196,77,228,97,2,224,19,0,68,179,66,89,224,239,1,224,54,0,+212,101,166,233,150,120,225,7,6,0,79,225,43,1,66,80,66,251,3,10,+65,32,79,224,35,2,8,45,68,95,95,77,72,83,95,95,64,41,0,75,+70,3,65,3,168,61,226,223,10,67,167,132,204,226,225,19,128,169,243,1,+16,8,99,97,108,108,67,111,109,109,97,68,178,130,243,161,171,225,122,2,+162,54,149,208,224,66,8,0,44,226,91,18,96,234,0,54,131,59,5,115,+121,115,116,101,109,67,59,199,252,227,184,3,114,78,64,217,159,50,117,47,+129,238,128,20,122,62,1,95,55,137,253,225,17,3,1,95,50,74,75,228,+49,8,117,206,229,233,7,146,204,110,30,129,11,227,97,0,164,240,64,29,+103,234,0,53,135,11,64,64,2,53,49,55,69,99,97,87,139,138,0,35,+119,35,87,3,96,162,135,14,115,105,236,58,1,226,161,2,130,27,137,51,+1,55,51,225,57,2,8,92,51,52,38,108,105,98,47,83,97,25,5,47,+73,79,46,104,115,64,19,5,44,50,57,54,58,56,129,134,0,90,129,39,+86,100,96,110,97,18,2,48,53,32,128,131,160,19,96,0,0,67,128,36,+224,118,6,0,58,96,208,158,79,0,65,96,217,133,209,7,94,116,109,112,+110,97,109,101,65,143,232,229,0,104,10,3,75,52,32,90,160,1,104,24,+225,199,0,133,3,64,127,0,56,64,131,68,29,1,32,89,134,144,135,234,+153,197,64,1,64,234,238,158,0,233,202,3,236,60,0,155,98,236,223,1,+1,35,49,197,12,96,36,96,46,96,10,203,33,66,249,224,45,1,216,92,+96,33,247,148,1,224,42,11,103,27,192,0,108,95,224,129,15,95,121,122,+219,188,17,224,74,8,1,49,49,130,126,64,112,224,33,14,87,106,224,33,+21,0,49,100,217,224,67,20,144,114,64,33,146,194,98,96,224,36,7,96,+138,241,89,1,224,0,3,225,132,8,131,30,225,133,26,193,44,225,132,71,+68,23,224,159,1,238,72,6,224,133,9,138,116,236,86,1,3,95,55,51,+57,160,28,68,104,228,94,1,132,24,132,51,66,241,230,160,4,132,151,125,+33,1,53,49,143,67,1,95,51,76,102,0,58,105,108,107,112,0,52,116,+18,0,55,96,19,203,114,101,124,64,19,171,128,67,106,96,10,0,73,96,+24,174,101,2,55,52,51,64,27,132,40,77,236,88,141,116,78,100,91,133,+114,231,76,4,116,214,230,26,7,220,181,64,89,201,108,0,83,68,112,0,+55,90,72,96,242,230,237,12,233,113,0,170,238,169,185,1,95,54,72,23,+0,58,107,133,238,167,3,127,232,70,204,164,50,128,6,0,58,64,100,128,+115,109,117,135,253,0,85,69,25,129,99,192,18,1,66,39,96,21,243,198,+1,96,85,192,29,194,113,238,181,7,96,213,64,116,132,55,251,113,1,117,+181,130,107,96,55,222,43,96,164,109,58,230,123,0,97,190,0,56,135,101,+192,81,174,242,1,50,53,69,220,73,138,0,58,96,53,224,101,34,105,47,+224,101,22,129,245,127,79,0,58,96,70,205,28,64,28,176,57,1,50,57,+67,102,1,55,51,121,71,104,206,0,73,108,128,0,53,70,179,1,95,55,+96,78,1,58,55,65,54,247,243,5,64,24,64,63,2,49,49,56,139,47,+96,138,70,201,64,13,64,35,1,95,49,206,36,1,49,50,73,16,96,92,+2,95,49,50,78,67,96,11,0,58,96,6,64,68,3,51,48,32,75,72,+203,70,160,0,53,226,91,3,25,67,111,110,116,114,111,108,46,69,120,99,+101,112,116,105,111,110,46,73,110,116,101,114,110,97,108,66,58,224,39,1,+3,83,111,109,101,224,35,0,98,85,185,62,64,215,119,77,131,138,2,64,+95,55,66,132,0,95,64,104,64,241,0,51,141,93,0,95,67,184,236,100,+1,112,63,1,58,55,66,185,167,230,65,214,98,17,108,178,142,52,2,95,+55,50,79,152,130,40,0,58,96,87,239,142,5,64,30,3,10,65,32,99,+91,136,1,32,58,96,63,98,208,97,191,231,213,9,0,50,98,121,235,58,+9,130,38,236,252,0,1,58,55,68,137,99,166,78,218,0,58,96,55,239,+245,5,64,56,97,248,0,50,93,201,73,87,2,58,55,50,178,3,225,50,+0,97,72,4,97,99,116,105,118,74,82,0,58,96,38,96,52,4,49,57,+32,95,52,69,193,0,58,64,63,128,178,104,203,1,95,55,78,98,2,95,+55,49,96,27,68,143,130,175,0,55,70,16,1,116,111,96,86,64,24,129,+8,68,80,64,24,126,1,0,58,96,58,128,46,124,29,251,214,2,0,49,+142,241,160,236,114,141,138,166,1,58,55,78,216,225,83,5,64,25,240,36,+5,0,90,163,197,101,100,100,178,128,58,129,3,131,214,112,60,192,8,69,+230,0,58,96,41,241,25,2,71,23,98,39,138,142,64,146,0,54,64,225,+236,236,2,1,54,51,67,152,98,185,169,11,207,174,0,54,99,241,238,225,+0,225,188,1,237,189,5,128,90,254,123,14,99,208,229,89,6,222,111,9,+115,97,118,101,100,32,99,97,99,104,158,115,234,169,8,192,150,105,255,136,+4,238,108,2,160,159,1,58,55,66,242,191,39,167,186,167,78,175,173,0,+54,69,75,160,15,3,95,50,50,57,255,71,2,194,3,197,39,228,163,1,+167,67,64,21,135,21,134,241,1,95,54,158,57,222,247,185,13,231,199,0,+249,46,0,255,56,0,228,226,3,0,67,177,41,230,45,10,209,153,128,64,+233,177,1,113,30,64,8,242,51,1,171,61,255,151,7,148,30,192,36,163,+143,255,160,1,224,40,0,176,108,232,20,1,161,204,159,181,236,170,0,0,+49,101,137,224,0,2,1,95,53,180,88,64,88,244,113,1,224,141,8,68,+123,64,7,64,10,147,116,117,133,192,57,96,156,224,114,5,238,127,3,196,+37,225,162,0,96,198,224,45,2,239,98,8,96,213,239,106,16,9,105,110,+118,97,108,105,100,97,116,101,130,105,173,70,130,107,0,54,86,53,160,0,+192,203,225,49,5,67,212,1,95,55,137,211,167,93,226,66,4,96,157,111,+140,181,118,96,220,0,54,81,158,64,55,234,3,3,1,95,55,132,125,66,+200,167,217,65,232,68,0,233,119,0,105,118,161,38,116,72,225,162,0,149,+167,98,25,159,246,96,0,222,131,2,95,55,48,69,180,0,54,100,110,0,+58,96,104,100,78,143,73,1,95,55,96,60,148,213,0,58,96,42,100,20,+125,94,99,44,106,82,224,105,4,141,120,192,135,254,128,4,97,169,81,21,+160,32,200,203,97,11,224,61,3,100,159,97,108,65,27,0,58,96,126,100,+156,108,240,64,40,96,13,172,207,0,58,96,214,103,188,1,51,52,223,117,+128,12,129,85,117,132,104,22,64,90,0,79,239,255,2,64,34,0,58,97,+109,229,27,0,66,160,246,236,0,179,156,128,225,160,169,64,162,1,95,54,+119,75,130,100,227,225,0,1,56,56,69,16,0,51,217,37,96,10,193,12,+225,152,0,203,4,192,95,160,2,193,239,244,73,1,128,33,247,6,1,162,+228,225,232,0,96,8,1,95,54,66,223,147,253,130,120,0,57,188,10,128,+155,96,181,66,88,0,57,160,34,192,125,68,46,224,44,1,0,58,119,78,+170,170,134,135,0,54,89,124,230,135,0,103,241,77,10,226,42,1,134,33,+97,48,224,178,0,134,200,0,85,161,6,226,6,1,160,117,232,48,2,137,+30,67,235,111,216,224,200,3,1,95,52,102,30,225,64,6,160,70,225,52,+10,225,77,0,225,43,8,72,225,225,43,25,128,73,128,159,238,76,0,0,+64,104,59,207,49,224,34,4,192,110,118,130,224,38,10,248,72,3,1,49,+51,66,19,134,147,248,73,4,91,24,163,65,160,45,129,163,103,219,109,7,+0,75,141,3,96,9,113,44,64,33,228,42,0,67,120,68,117,192,52,128,+34,224,61,9,96,53,197,70,225,252,16,202,21,74,250,0,54,192,226,168,+28,193,134,0,90,225,120,6,226,199,0,227,33,1,160,2,97,27,194,246,+102,135,224,80,4,225,91,6,128,38,98,163,128,167,160,16,160,168,128,28,+241,208,0,224,182,2,96,47,224,182,73,226,64,0,164,164,224,180,12,192,+36,97,129,161,148,224,181,18,192,14,130,253,227,165,2,128,199,133,117,128,+65,100,127,224,178,0,168,146,229,72,0,150,81,229,116,2,250,169,0,198,+241,1,55,57,78,105,226,112,8,134,245,224,89,2,247,197,2,225,23,6,+192,114,224,227,1,234,47,1,224,11,0,160,9,160,133,128,207,128,19,229,+7,17,225,61,0,225,44,1,224,200,0,137,120,0,82,142,216,229,83,25,+242,202,2,225,222,5,225,39,1,64,15,137,186,227,132,8,0,66,75,209,+129,38,2,95,54,56,112,131,128,24,224,78,17,227,210,18,224,77,18,165,+119,225,188,3,162,171,250,202,3,129,13,198,31,224,13,19,224,156,1,226,+194,1,224,35,1,128,17,128,243,81,6,224,164,16,0,57,104,101,224,242,+0,96,167,65,87,2,95,54,57,193,85,226,27,1,224,176,10,224,177,65,+162,112,96,158,224,177,39,145,29,245,47,1,225,111,1,0,58,98,143,236,+238,2,224,195,17,169,44,128,1,231,38,0,192,8,0,58,96,94,224,72,+33,224,234,1,224,86,1,226,57,0,224,5,1,80,73,245,230,1,163,117,+241,117,0,233,201,0,233,210,1,225,57,0,224,167,5,160,58,129,7,121,+221,227,106,0,96,16,224,15,0,192,224,224,168,0,224,119,34,192,35,225,+39,19,128,26,228,225,5,160,24,129,69,137,178,228,81,1,227,5,16,225,+143,2,224,124,3,224,79,0,224,103,17,0,58,98,188,224,101,34,226,154,+3,225,181,2,225,46,6,160,67,224,24,3,192,152,225,150,76,224,98,10,+225,129,60,0,51,97,27,3,35,50,32,58,99,76,153,11,228,233,2,224,+110,3,165,255,160,13,132,81,160,5,135,36,224,225,1,224,51,1,235,214,+0,71,241,171,32,231,51,4,231,65,7,224,108,3,192,188,169,180,101,247,+230,209,8,68,215,230,222,6,134,214,228,24,0,79,85,0,58,96,248,99,+179,177,11,65,90,112,229,96,148,193,5,69,169,227,217,0,228,202,21,225,+228,3,227,217,0,64,8,223,86,96,174,168,138,80,191,2,75,50,32,128,+153,0,75,113,79,64,32,132,144,2,95,52,56,160,243,105,194,0,39,64,+7,113,58,75,90,149,141,213,148,128,24,64,11,181,188,224,24,11,160,49,+149,220,2,95,49,53,235,80,0,0,58,96,6,242,26,12,224,195,6,1,+95,54,245,35,1,107,244,151,36,64,54,128,10,87,36,76,18,129,45,1,+95,54,86,137,64,60,251,109,2,67,38,144,209,0,58,110,249,213,9,2,+95,49,51,239,45,0,2,95,54,56,96,228,84,240,128,17,0,58,96,6,+179,171,2,95,54,55,64,196,0,58,96,37,161,151,122,152,0,54,76,105,+2,95,54,55,105,101,66,18,143,37,204,136,112,36,115,84,66,94,96,171,+64,42,96,17,129,31,0,75,214,253,0,58,112,87,224,197,17,97,144,65,+210,96,202,1,58,54,67,247,97,212,2,95,51,54,87,104,111,21,96,122,+98,129,0,58,113,57,91,122,9,109,100,53,66,70,73,76,69,32,58,96,+25,228,131,2,64,172,84,36,1,54,54,98,160,105,43,128,75,0,55,65,+116,0,58,113,213,128,145,79,112,75,213,249,103,4,188,154,64,144,1,95,+50,103,4,216,16,96,64,225,59,7,64,25,244,213,3,0,58,96,24,98,+5,0,54,64,13,64,122,131,249,252,224,28,109,202,252,226,9,2,109,104,+115,220,226,7,70,105,108,101,80,97,116,104,220,232,5,49,49,56,58,49,+52,178,153,195,72,229,92,1,130,115,1,95,51,155,84,97,204,190,144,80,+109,0,50,172,0,207,171,96,247,0,58,64,185,160,232,0,51,252,200,0,+224,1,5,234,11,0,160,0,0,58,97,110,161,134,120,252,179,249,153,89,+201,143,164,182,246,123,4,85,98,1,95,51,85,157,196,163,239,246,2,113,+161,96,26,226,255,8,64,14,115,170,164,18,82,109,104,161,64,140,130,71,+194,117,96,246,192,115,226,130,8,128,63,0,58,114,156,227,6,10,158,169,+227,6,10,64,217,246,27,0,130,91,64,25,239,162,12,67,25,97,9,192,+224,133,204,175,144,127,78,250,132,5,225,203,1,129,50,230,149,5,230,58,+2,140,85,64,107,107,189,239,112,2,160,73,196,37,64,187,101,15,68,31,+64,113,113,183,0,90,145,190,1,90,32,160,58,212,73,224,28,6,106,42,+224,28,15,109,17,224,28,15,139,188,224,29,15,1,50,55,68,155,224,29,+0,1,95,53,96,44,100,188,0,53,83,186,96,10,0,58,96,6,224,187,+1,97,150,0,53,81,49,170,189,64,22,96,161,90,200,192,16,96,149,224,+16,3,128,137,224,17,3,128,125,160,17,128,122,96,80,128,122,131,224,64,+6,224,122,1,113,143,0,53,107,32,0,53,117,202,0,53,100,107,0,53,+115,210,0,53,89,69,96,70,96,82,128,70,96,10,0,58,96,6,8,10,+65,32,98,115,62,61,32,58,96,41,128,13,64,12,131,57,2,98,115,60,+96,26,0,54,192,13,64,12,130,146,4,98,115,99,109,112,64,14,196,234,+200,11,232,77,1,66,179,89,223,1,95,49,109,15,232,46,8,96,143,64,+165,0,52,154,98,0,52,89,142,209,249,0,58,65,77,128,229,0,56,193,+154,225,191,0,130,161,200,217,166,241,98,177,0,58,96,6,160,54,161,99,+128,45,135,28,129,134,86,161,160,17,0,58,96,71,224,48,1,65,47,0,+54,94,71,0,58,96,32,96,233,0,47,65,4,190,91,2,98,115,61,96,+13,249,207,0,64,81,64,10,85,139,81,126,0,75,170,42,0,58,99,165,+101,117,1,52,49,227,223,4,0,83,67,222,166,93,222,118,118,54,0,51,+166,140,100,32,243,187,0,228,38,1,71,165,65,73,105,93,64,39,96,13,+196,121,224,53,28,67,84,192,53,2,95,50,51,192,118,64,137,213,62,64,+18,122,140,231,30,12,100,153,1,95,49,96,37,132,27,65,75,96,67,0,+95,91,36,160,10,91,100,224,89,0,161,200,0,51,170,180,96,167,202,221,+224,220,15,224,118,6,184,213,96,182,96,101,129,236,191,91,97,134,255,26,+2,224,85,8,103,31,224,77,2,0,58,121,213,160,57,190,202,115,46,0,+52,230,88,25,0,58,122,168,97,216,88,87,118,157,160,5,118,74,224,11,+0,87,46,122,101,128,43,0,53,64,4,99,166,224,5,7,0,58,96,43,+238,96,2,234,92,6,0,58,64,60,160,69,0,51,64,176,129,170,0,75,+74,192,72,219,234,192,2,234,164,21,0,58,105,229,252,241,4,3,46,109,+104,115,120,218,92,239,123,49,136,26,231,15,15,134,55,231,74,6,130,112,+251,225,0,186,36,166,179,138,213,101,247,1,95,54,104,206,96,136,253,69,+1,224,105,2,0,54,93,92,160,105,224,132,3,1,95,54,93,208,225,219,+7,248,248,1,233,46,6,0,49,164,73,225,241,1,254,62,4,1,95,54,+64,31,1,95,54,92,43,0,54,158,170,224,109,7,236,120,1,224,213,7,+226,70,3,64,200,64,113,234,31,4,94,225,0,58,96,65,66,95,14,79,+46,100,101,115,101,114,105,97,108,105,122,101,32,58,96,29,74,45,20,97,+100,100,95,108,122,55,55,95,100,101,99,111,109,112,114,101,115,115,111,114,+64,31,194,9,0,83,107,75,171,175,242,59,0,1,95,50,187,103,243,150,+1,225,17,3,129,138,202,117,224,207,0,0,50,65,109,224,53,4,224,216,+5,69,224,65,47,0,51,222,42,64,192,130,114,0,83,160,215,161,13,225,+34,2,64,42,169,59,255,152,2,74,219,130,26,104,164,227,116,5,191,149,+6,94,117,110,103,101,116,98,64,237,130,189,192,100,228,184,5,1,95,51,+106,208,65,223,235,16,1,101,245,2,95,54,49,142,0,251,198,0,224,102,+0,1,95,51,65,121,103,213,65,146,70,68,1,95,54,120,74,226,243,1,+7,104,71,101,116,67,104,97,114,170,161,0,58,96,203,101,194,0,35,157,+148,0,58,96,49,239,29,0,228,77,2,0,51,90,101,201,70,86,96,2,+51,54,54,64,188,0,55,253,150,3,9,111,112,101,110,66,105,110,97,114,+121,75,25,128,101,229,149,7,1,95,51,91,102,229,175,0,98,245,105,114,+0,51,159,231,64,131,131,34,106,242,228,152,8,228,148,4,0,58,127,150,+68,32,102,218,136,141,0,49,79,25,0,48,64,204,0,49,226,139,0,18,+112,101,114,102,111,114,109,73,79,32,94,119,97,110,116,95,103,109,112,96,+32,243,40,3,192,162,1,95,50,153,148,164,77,224,24,3,0,50,253,35,+3,4,77,72,83,67,67,222,134,227,147,0,175,195,240,53,3,226,148,5,+76,236,85,215,65,105,1,95,50,112,166,156,110,2,51,48,50,253,129,4,+3,99,108,117,100,161,68,128,0,226,226,1,224,2,0,224,86,40,3,99,+98,105,116,255,59,0,192,184,247,91,3,96,13,64,250,96,190,224,96,2,+2,64,95,54,253,64,0,193,25,128,1,120,228,224,22,7,241,209,5,224,+1,5,225,80,0,229,38,0,126,11,237,130,6,225,110,9,11,69,88,84,+82,65,67,67,70,76,65,71,83,224,195,4,236,213,4,140,178,128,190,224,+5,24,192,54,227,205,7,96,166,127,63,99,67,255,62,0,100,79,255,54,+16,8,69,120,101,99,117,116,101,58,32,255,45,2,0,49,69,109,0,49,+137,116,193,16,229,116,5,131,16,64,23,165,232,224,136,1,131,59,224,135,+4,137,196,95,14,64,58,111,88,64,143,67,68,224,141,6,13,99,111,109,+109,97,110,100,32,102,97,105,108,101,100,160,148,192,130,226,237,7,229,61,+1,224,245,15,128,54,96,248,128,10,224,109,5,1,67,32,69,207,7,105,+108,97,116,105,111,110,32,192,0,128,115,160,215,142,217,96,59,4,54,49,+48,32,35,238,76,3,65,41,74,20,96,117,0,49,214,251,64,0,224,98,+1,0,109,226,185,5,160,0,227,22,10,192,2,1,95,54,69,31,103,28,+226,93,2,224,80,1,2,36,73,78,224,81,5,227,12,4,224,2,6,224,+77,3,224,66,2,2,79,85,84,129,237,0,54,230,68,0,193,184,224,2,+9,98,232,224,35,1,128,1,224,190,1,239,251,1,224,29,1,128,1,225,+108,6,15,32,45,119,32,45,87,97,108,108,32,45,79,51,32,45,73,224,+197,2,231,52,2,225,7,1,224,87,1,224,86,20,11,47,115,114,99,47,+114,117,110,116,105,109,101,226,46,1,224,169,8,224,78,14,96,22,2,79,+32,35,73,107,221,127,128,33,231,127,4,96,60,3,66,32,95,53,77,29,+132,163,224,133,5,224,206,4,224,97,2,224,95,12,224,30,6,225,230,12,+8,45,68,95,95,77,72,83,95,95,224,87,1,224,85,30,66,139,192,235,+224,48,19,229,68,5,224,226,0,1,54,49,75,251,224,152,7,64,59,0,+57,192,59,192,97,224,184,12,0,39,225,132,0,1,95,54,167,30,226,238,+1,192,153,224,149,2,225,201,13,5,47,101,118,97,108,45,160,73,224,213,+5,224,57,10,1,46,99,160,116,165,4,225,174,6,85,24,136,238,225,199,+9,192,87,224,134,2,2,42,46,99,160,120,226,188,2,10,36,73,78,32,+45,108,109,32,45,111,32,227,62,0,224,0,19,1,95,54,75,136,103,238,+0,54,200,26,0,50,236,176,10,232,33,10,64,0,0,58,96,62,232,81,+2,232,84,0,224,42,1,0,58,97,95,210,47,64,248,75,238,76,208,193,+113,197,237,160,45,137,192,0,85,237,57,13,237,59,10,68,28,232,106,0,+126,230,194,79,148,103,128,106,197,43,179,118,217,149,224,19,3,132,72,224,+63,0,128,11,1,95,53,139,206,64,37,116,78,64,73,227,169,3,0,58,+68,187,64,128,170,185,128,23,164,148,0,52,96,124,128,59,229,121,0,0,+95,86,138,0,64,98,229,138,26,71,168,240,151,0,151,190,215,188,78,100,+185,213,64,69,64,207,183,155,66,212,176,176,176,174,102,185,0,58,96,6,+237,7,9,0,49,65,133,1,95,54,96,192,64,141,199,8,235,9,8,102,+146,2,95,54,48,107,107,167,6,0,58,103,73,78,32,1,32,58,96,18,+3,10,65,32,90,72,157,0,58,96,39,75,128,0,115,117,184,64,30,171,+229,236,71,6,1,95,53,92,242,98,247,233,244,13,233,241,0,163,117,234,+26,18,232,166,4,193,236,224,48,18,2,79,78,70,227,9,0,230,54,4,+96,20,130,10,128,175,122,109,162,31,224,8,13,1,95,53,94,3,2,95,+53,57,162,85,231,33,5,232,97,2,66,11,231,240,2,98,25,255,225,0,+0,50,76,135,97,105,232,241,2,99,238,2,66,32,79,225,20,3,12,111,+117,108,100,32,110,111,116,32,102,105,110,100,96,196,3,67,39,32,79,192,+128,224,42,3,3,105,110,32,102,172,27,230,34,1,229,92,4,232,251,0,+226,246,4,90,43,132,143,2,53,57,57,224,79,2,6,100,101,102,97,117,+108,116,167,129,1,48,48,224,26,2,0,99,164,121,96,22,229,108,0,231,+128,1,192,114,234,192,0,232,70,8,234,21,24,225,46,15,234,33,17,11,+70,111,117,110,100,32,116,97,114,103,101,116,234,38,9,2,53,57,51,100,+119,234,50,1,234,62,8,160,0,224,188,1,225,51,6,225,53,7,64,32,+220,103,128,192,144,58,130,69,97,77,128,77,225,61,14,100,21,0,52,75,+158,1,54,48,99,210,2,53,52,57,249,51,9,224,55,9,192,164,225,125,+1,224,73,41,3,102,108,97,103,233,242,3,133,136,161,194,224,78,40,2,+111,110,102,230,105,4,231,150,7,224,42,1,3,117,110,105,120,135,47,234,+152,2,0,95,111,148,96,0,0,58,109,9,115,218,0,57,86,250,123,22,+114,18,68,165,98,216,2,95,51,57,83,174,128,153,1,52,48,84,54,96,+11,0,58,96,6,212,111,120,213,114,34,197,54,184,152,224,12,2,65,223,+184,134,148,115,64,109,180,115,128,10,116,115,96,10,0,58,96,6,212,115,+248,232,0,224,66,1,116,67,64,117,64,42,166,16,181,149,0,58,97,86,+243,140,18,98,42,244,47,1,224,2,0,85,252,97,21,99,236,231,66,7,+211,40,64,72,121,31,228,215,0,174,106,249,49,1,197,224,97,195,96,24,+98,220,147,65,0,52,157,229,96,102,250,222,1,237,74,6,0,51,96,43,+229,54,1,128,118,1,95,50,134,155,224,44,7,102,230,185,207,96,44,133,+99,1,95,53,122,186,169,103,228,0,2,195,212,227,210,6,2,67,97,110,+68,250,3,112,97,114,115,235,52,1,167,89,228,60,44,173,99,244,109,2,+200,28,242,118,10,224,85,32,228,146,16,2,82,101,97,196,145,0,115,101,+156,9,46,32,80,111,115,115,105,98,108,101,192,22,164,169,100,106,238,210,+0,228,152,3,0,89,97,237,66,248,193,231,64,151,80,3,138,109,168,145,+160,0,228,176,5,224,231,9,220,62,224,163,1,160,135,0,46,227,196,0,+0,58,103,168,182,247,245,33,0,1,51,55,82,5,98,223,134,170,67,89,+64,128,0,52,72,14,115,52,243,57,0,0,51,94,191,1,95,53,158,86,+67,183,0,83,165,23,114,221,120,202,124,73,224,43,0,225,56,8,9,65,+109,98,105,103,117,111,117,115,58,193,29,0,53,79,75,172,210,229,212,2,+234,11,1,0,58,98,91,120,248,1,49,56,134,121,198,117,79,107,0,51,+131,4,225,191,0,0,35,162,244,133,72,64,25,241,203,3,0,84,97,20,+162,113,224,34,3,236,156,5,162,35,122,144,68,42,225,184,2,0,35,74,+20,96,185,224,57,11,224,46,2,230,152,24,160,73,96,0,3,95,49,50,+49,192,246,3,95,49,50,52,192,11,0,58,96,6,116,246,106,130,83,158,+0,90,129,4,132,115,97,1,138,81,168,241,202,244,64,189,130,219,84,28,+68,129,170,2,224,247,7,89,155,224,247,0,224,46,0,68,162,176,196,162,+198,115,38,64,213,192,15,74,119,128,15,0,58,96,6,164,232,96,94,97,+214,242,42,0,0,79,98,110,236,254,2,105,105,89,27,226,176,2,4,58,+92,49,48,38,231,65,1,96,53,226,64,8,2,32,32,102,72,14,227,93,+1,1,50,56,110,9,66,63,1,52,55,186,173,137,73,224,59,10,5,101,+120,112,101,99,116,241,216,0,237,137,0,1,53,57,102,214,131,113,201,100,+0,58,98,232,159,135,1,53,57,100,196,76,49,0,58,64,44,229,179,8,+204,246,208,74,195,191,197,18,161,117,0,53,99,36,164,128,232,126,0,0,+58,96,94,97,229,236,215,0,77,17,3,95,53,56,56,135,191,97,57,96,+83,140,93,128,53,64,187,224,136,6,82,212,224,241,1,16,102,111,108,100,+114,49,58,32,101,109,112,116,121,32,108,105,115,226,250,3,157,122,105,200,+130,75,116,127,224,10,2,98,74,160,105,134,166,0,85,140,196,245,167,1,+2,95,50,56,64,197,227,144,1,160,168,243,197,9,96,243,225,143,5,211,+94,224,83,0,236,174,9,224,26,13,247,211,8,224,90,8,2,108,105,110,+198,88,163,203,224,152,3,147,52,224,52,8,4,44,32,99,111,108,128,53,+224,40,4,239,137,4,6,101,110,100,45,111,102,45,203,145,224,26,3,5,+110,111,32,108,111,99,115,204,198,211,224,28,17,0,58,99,4,120,73,129,+241,225,231,1,64,7,65,233,99,212,163,73,64,47,0,54,225,237,1,245,+131,0,64,4,101,17,108,59,0,52,77,180,130,191,167,164,173,11,129,213,+152,162,174,98,115,148,226,77,0,224,46,30,200,81,143,83,237,64,1,224,+39,8,130,219,232,41,3,224,39,12,131,176,224,205,4,171,102,96,13,224,+82,4,166,253,153,227,192,130,66,162,251,209,4,0,35,161,179,67,108,79,+25,85,254,79,56,0,35,244,105,0,224,109,28,224,69,0,192,108,197,90,+224,108,12,128,228,224,77,5,103,22,133,153,69,177,131,239,1,95,53,145,+150,165,96,193,73,1,95,53,124,198,98,2,96,173,4,66,32,95,55,57,+162,227,64,184,73,83,229,197,0,96,0,3,95,53,49,55,252,203,7,226,+174,0,193,121,128,186,225,121,1,0,53,70,63,96,28,177,38,160,28,99,+202,0,53,132,177,225,30,29,136,117,193,30,224,109,12,134,76,224,157,0,+1,95,53,90,120,0,35,102,94,224,160,15,224,50,14,167,40,192,142,68,+149,0,67,97,54,224,43,9,175,189,72,193,119,248,153,50,1,49,32,129,+254,143,186,104,225,225,56,5,113,204,224,19,6,166,76,224,76,11,96,100,+1,95,53,71,1,224,32,13,97,206,64,33,225,145,0,249,108,0,97,77,+161,114,1,49,52,81,133,133,136,225,108,18,219,91,0,83,225,47,0,229,+172,2,169,205,66,67,128,251,192,105,134,130,73,201,66,58,160,69,233,226,+1,163,22,232,131,1,224,134,23,65,55,229,79,0,222,109,96,4,130,76,+229,162,3,1,95,49,77,229,66,190,161,15,160,101,128,172,115,122,128,85,+238,76,12,229,189,3,64,79,98,232,121,196,161,155,132,134,65,76,99,60,+128,208,65,220,0,52,74,180,121,219,0,51,96,7,0,53,127,157,64,7,+224,235,1,98,56,243,179,0,64,36,69,116,224,36,0,96,90,128,42,160,+48,1,95,53,231,170,1,225,38,26,228,166,29,165,120,225,172,7,64,134,+0,51,97,54,98,147,74,92,0,51,197,210,225,187,8,228,210,3,128,150,+131,76,96,9,162,39,220,86,200,152,194,48,171,255,135,5,105,201,97,223,+228,168,8,160,91,232,193,0,136,215,130,83,96,76,129,9,227,82,8,108,+36,2,95,53,52,161,169,226,117,24,228,162,1,64,95,224,21,8,0,52,+64,49,225,122,24,131,143,229,180,23,224,38,0,0,83,76,184,225,161,17,+128,38,117,184,5,32,83,32,95,53,53,230,78,3,97,229,2,95,53,53,+64,173,207,180,97,12,224,67,9,175,209,224,37,37,0,90,132,83,224,37,+14,111,226,227,100,7,226,164,2,96,155,0,54,225,101,0,131,160,232,0,+13,96,229,193,40,65,19,224,29,4,101,4,130,42,0,79,230,161,1,0,+56,162,55,233,61,3,16,85,110,114,101,99,111,103,110,105,122,101,100,32,+105,110,112,117,243,172,6,170,8,146,215,225,83,13,96,175,192,171,129,195,+132,109,142,98,64,210,66,85,142,99,96,53,228,54,4,19,73,108,108,101,+103,97,108,32,67,104,97,114,32,108,105,116,101,114,97,108,169,136,225,85,+18,102,60,225,85,18,237,164,3,133,136,224,189,19,226,17,6,225,197,42,+224,111,9,225,157,2,227,128,9,227,88,14,97,53,133,59,227,202,0,167,+114,178,67,132,28,204,167,97,103,65,121,228,126,4,236,198,2,192,105,232,+164,14,64,119,152,254,224,0,2,128,130,0,55,64,73,225,213,0,130,129,+64,3,196,251,64,5,101,147,128,216,1,53,50,176,66,224,113,0,128,109,+229,44,1,224,48,7,141,246,224,48,11,64,0,65,171,3,95,53,56,50,+115,177,241,48,1,225,32,4,160,184,225,32,5,225,18,2,110,99,225,18,+5,225,17,42,192,48,1,95,53,203,70,192,69,198,136,160,29,161,196,225,+220,15,0,58,96,21,144,20,133,16,210,55,151,151,228,208,3,5,67,32,+61,61,32,64,136,176,140,42,202,65,112,79,64,202,96,102,101,242,111,144,+65,37,0,58,96,146,108,108,0,80,136,237,90,18,96,37,244,237,2,225,+60,5,198,132,230,138,0,194,98,195,202,224,16,2,235,76,14,162,238,224,+39,4,206,162,224,20,1,64,1,134,211,224,115,5,129,186,153,250,224,123,+2,247,192,1,234,232,5,203,179,230,120,1,106,4,224,153,1,131,54,0,+85,227,63,1,64,10,225,208,3,192,43,96,169,193,119,130,106,226,19,27,+64,252,179,228,224,172,1,233,203,0,123,158,131,67,192,218,194,152,194,153,+130,151,130,67,0,50,83,219,224,82,3,160,83,162,162,224,50,1,99,25,+129,20,224,151,0,224,163,15,227,208,6,224,138,2,228,65,14,164,60,128,+140,160,153,227,35,7,224,84,0,0,58,97,41,162,79,170,66,136,73,192,+237,227,241,0,235,181,1,0,50,83,232,145,169,251,35,3,0,108,147,212,+224,18,3,3,119,104,101,114,111,162,224,20,3,1,100,111,224,17,7,0,+111,117,28,237,86,0,161,25,105,18,194,157,128,110,224,50,1,0,105,185,+20,69,228,73,43,93,48,64,55,227,109,0,100,131,157,206,77,177,230,2,+7,115,57,192,32,243,187,0,160,127,225,79,0,136,36,164,226,135,135,96,+9,0,52,99,137,146,130,236,207,0,130,189,224,14,2,64,55,224,14,1,+108,103,233,160,6,160,82,0,58,98,210,161,133,2,80,32,35,104,14,0,+80,64,99,69,86,120,236,225,149,3,141,123,85,239,242,105,5,2,105,109,+112,183,0,8,58,32,102,105,114,115,116,32,99,71,133,8,105,115,32,97,+32,100,105,103,105,178,120,64,100,67,206,225,226,0,228,43,8,170,188,227,+238,3,228,45,23,224,42,5,228,48,1,228,49,4,228,51,1,224,22,2,+228,28,0,64,90,109,139,128,0,128,23,228,86,1,96,24,163,66,102,18,+160,69,143,66,150,253,227,118,4,221,32,160,96,252,91,5,196,165,225,4,+0,160,13,96,33,194,249,128,95,224,107,3,247,102,3,227,177,3,64,188,+224,11,0,232,0,4,160,133,224,239,2,224,163,1,228,188,3,139,5,119,+180,240,134,0,77,32,2,53,54,54,80,195,1,52,55,85,174,1,52,51,+130,167,3,95,53,55,49,123,1,3,95,53,55,52,224,30,8,128,13,192,+14,136,219,224,70,11,168,235,226,250,2,96,128,224,199,0,224,224,25,96,+0,225,147,1,160,47,224,178,15,86,30,155,87,64,90,163,229,224,227,19,+224,48,2,96,43,224,245,21,0,49,100,241,186,65,224,244,30,96,86,212,+201,160,14,169,212,96,111,66,233,130,147,79,195,226,238,2,192,0,226,63,+13,160,64,226,154,9,194,15,226,12,5,226,161,5,226,10,11,225,40,32,+226,25,78,226,20,2,224,247,0,182,240,64,175,221,47,227,180,1,244,111,+19,231,111,3,151,109,194,21,228,143,0,230,219,2,239,71,2,129,108,241,+156,10,163,247,224,49,0,228,206,5,228,118,0,128,67,160,73,239,127,10,+242,250,14,155,152,228,156,1,192,68,64,54,221,185,224,242,0,0,83,100,+34,162,85,1,52,54,166,127,144,37,161,201,227,83,12,236,130,7,176,87,+126,181,224,10,1,222,180,98,156,229,43,1,225,55,25,128,230,225,55,7,+206,173,225,55,128,193,42,225,41,19,129,26,225,24,29,224,185,2,107,137,+224,183,41,226,156,1,224,190,63,96,93,224,190,29,0,64,126,148,226,38,+19,229,137,0,224,24,7,163,187,1,95,53,92,212,227,206,1,160,213,0,+58,110,17,152,249,250,174,6,15,114,111,109,74,117,115,116,58,32,78,111,+116,104,105,110,103,104,52,0,73,104,140,153,44,251,115,10,165,5,225,19,+0,129,1,235,7,0,1,58,53,68,200,122,187,0,65,96,72,237,58,2,+75,15,1,55,50,73,46,1,54,54,64,86,223,134,129,66,239,119,4,142,+179,211,63,97,43,65,135,195,113,151,206,64,118,91,201,96,7,0,49,247,+174,2,224,8,0,133,75,96,48,64,17,224,48,16,224,42,37,64,29,0,+85,96,140,235,61,8,108,226,0,95,70,60,224,164,24,130,146,93,200,224,+115,24,225,230,3,106,165,106,75,225,32,2,160,18,132,138,224,195,27,224,+41,33,224,237,2,97,156,128,117,2,95,53,55,149,241,224,192,29,160,26,+224,42,29,66,53,207,14,225,246,43,0,58,96,155,239,56,2,196,28,0,+32,107,105,64,31,141,8,235,15,1,193,74,0,83,128,231,96,91,0,50,+64,132,224,115,19,224,176,0,225,200,28,192,45,227,178,4,241,97,2,3,+95,53,54,55,228,85,1,227,11,2,3,95,53,54,57,192,150,230,113,0,+1,53,55,154,158,229,31,6,224,174,28,64,21,225,252,23,225,254,5,224,+130,73,0,58,72,187,132,38,1,75,51,100,39,141,21,133,181,65,169,225,+146,11,227,87,23,225,145,58,221,238,224,136,1,225,164,3,224,140,3,70,+77,96,7,0,56,112,117,224,245,27,224,150,49,64,118,226,174,1,224,146,+6,97,160,0,56,224,61,5,225,62,0,136,40,164,221,226,94,5,130,97,+229,136,0,68,201,129,102,224,41,2,82,158,224,243,2,94,240,224,102,1,+224,207,42,168,235,224,129,123,224,59,0,160,105,231,101,5,231,43,6,31,+68,97,116,97,46,73,110,116,101,103,114,97,108,46,94,58,32,110,101,103,+97,116,105,118,101,32,101,120,112,111,110,101,0,110,143,113,0,58,99,41,+134,240,232,128,1,226,41,19,128,166,193,17,112,60,0,50,168,174,224,215,+11,192,46,224,203,4,224,45,30,98,75,0,58,98,42,131,121,0,50,96,+44,1,58,53,68,121,244,223,0,199,170,90,2,231,163,10,224,215,1,139,+159,224,11,3,231,164,45,231,248,22,81,23,225,221,19,160,67,231,234,36,+164,78,224,47,30,224,43,38,225,50,121,93,110,225,51,163,234,11,21,164,+36,231,43,5,234,12,135,140,43,233,133,38,224,59,12,0,53,78,72,224,+60,35,0,90,198,176,224,67,1,0,49,94,14,224,67,25,234,129,39,236,+129,0,224,111,9,224,179,28,224,111,45,0,58,108,46,204,141,128,122,231,+8,13,230,37,1,89,90,160,76,224,116,26,173,146,231,113,8,199,65,234,+34,3,137,2,232,143,1,224,101,53,225,184,38,206,59,224,211,50,231,116,+8,226,174,24,192,116,224,41,34,96,105,161,144,173,28,66,228,155,3,188,+62,199,202,128,52,224,15,10,0,53,79,141,224,84,0,0,58,99,243,139,+181,236,136,2,98,19,249,39,0,233,175,48,128,193,64,0,231,75,35,132,+185,0,39,145,128,135,184,168,175,227,199,15,224,103,1,224,33,24,0,58,+96,255,135,168,0,52,136,161,0,58,96,49,248,60,1,96,111,120,60,95,+168,4,10,65,32,95,54,103,190,0,73,157,124,193,41,247,200,5,66,97,+70,148,0,80,224,24,7,249,25,1,0,95,89,133,1,54,51,232,254,2,+4,92,57,50,38,110,104,225,96,27,2,48,53,32,157,231,0,53,92,145,+0,48,80,102,125,237,0,50,153,191,0,56,220,246,0,95,116,111,112,57,+64,137,144,37,121,39,189,9,1,50,57,84,138,2,53,53,56,163,102,196,+208,160,4,252,244,0,96,98,161,217,101,244,192,35,96,86,3,53,53,57,+32,182,12,251,66,3,97,199,241,64,3,0,48,96,0,128,32,97,166,224,+205,0,0,89,243,21,0,161,59,130,193,131,46,129,208,162,192,66,204,225,+78,4,193,206,103,125,225,111,10,0,51,169,164,128,65,97,2,192,19,241,+242,8,248,78,2,135,8,3,95,49,51,49,138,13,0,52,65,68,64,16,+86,28,64,44,126,39,121,72,0,50,66,58,86,62,158,119,192,93,0,85,+226,165,0,128,7,1,95,53,97,34,130,90,186,208,117,146,113,216,2,90,+32,90,97,110,1,51,50,251,62,5,83,36,161,123,98,49,0,79,129,219,+0,90,96,160,129,208,224,88,1,96,90,141,201,138,94,0,52,131,190,0,+58,65,161,229,194,0,129,106,79,138,248,80,0,99,191,2,32,95,50,131,+66,151,42,64,53,138,170,68,120,65,229,119,244,98,58,0,58,66,121,98,+241,2,50,51,52,179,226,155,218,0,58,96,38,227,35,1,97,81,99,35,+0,53,132,63,173,217,225,218,1,137,55,192,13,224,30,3,0,89,96,30,+224,17,3,218,154,224,17,2,192,69,224,21,3,69,87,245,91,0,224,103,+0,224,104,1,226,90,0,224,26,0,224,61,1,226,119,0,97,32,226,11,+2,224,33,6,187,183,249,147,3,96,2,160,23,224,42,4,224,21,0,192,+147,67,90,192,64,192,95,128,40,224,186,2,247,142,26,132,76,224,38,1,+160,84,224,174,0,191,218,131,190,160,0,224,109,76,152,137,228,237,10,216,+200,192,100,129,85,224,103,0,229,32,16,193,66,96,30,192,198,99,207,128,+167,131,200,96,43,224,12,0,149,181,224,23,0,224,0,1,224,110,50,166,+115,224,84,5,132,161,224,49,0,128,92,135,204,140,16,160,113,213,150,129,+114,96,20,2,95,53,53,64,193,96,100,1,95,50,100,54,160,75,161,68,+2,95,53,56,159,4,103,168,0,67,165,163,224,110,0,226,182,4,128,101,+226,76,2,193,187,229,57,2,224,36,0,229,60,11,192,209,226,167,0,224,+53,27,230,167,0,224,53,36,165,168,224,106,38,249,54,5,225,193,13,197,+225,225,185,11,161,171,225,219,4,1,95,53,183,159,97,212,225,91,2,224,+32,2,64,60,128,32,224,237,0,224,93,12,240,166,6,13,98,97,100,32,+115,116,114,105,110,103,32,103,97,112,103,176,228,34,5,101,196,0,39,69,+197,96,73,2,56,32,64,224,60,1,18,117,110,116,101,114,109,105,110,97,+116,101,100,32,67,104,97,114,47,83,128,74,6,108,105,116,101,114,97,108,+96,78,171,160,225,69,1,64,15,225,170,24,224,46,30,161,12,224,92,31,+161,156,227,6,2,0,39,227,62,12,97,175,184,160,225,142,64,107,249,138,+156,64,9,129,23,210,180,128,5,135,90,2,58,53,53,137,200,233,10,0,+224,250,12,64,49,64,115,199,83,99,166,64,7,64,24,0,58,96,14,199,+177,225,243,5,3,66,97,100,32,73,159,6,32,101,115,99,97,112,101,129,+244,130,220,225,54,13,128,194,224,33,18,131,240,224,32,19,218,10,224,99,+16,0,48,135,200,224,133,19,101,153,224,33,20,100,156,224,33,20,224,135,+23,78,7,224,66,21,0,50,225,12,23,0,49,97,252,102,140,230,151,16,+128,202,64,22,128,34,116,204,64,8,168,153,107,38,78,45,0,35,124,97,+66,157,192,17,255,36,0,133,128,129,253,3,66,32,95,51,75,69,108,140,+201,240,66,78,0,54,64,120,2,52,54,32,128,71,130,31,228,162,1,96,+114,82,3,155,250,64,204,64,75,133,157,238,207,6,100,206,133,182,98,236,+228,219,0,192,26,224,23,2,3,95,53,52,57,75,215,224,168,2,100,66,+96,10,100,74,170,21,96,143,97,80,107,187,131,115,224,162,1,224,101,3,+96,98,224,94,10,224,82,8,224,81,22,227,48,7,96,29,189,2,253,25,+1,64,17,0,56,224,16,0,160,33,65,143,224,16,0,231,214,4,131,239,+192,81,231,223,0,224,20,11,100,132,224,21,9,66,254,224,21,8,66,140,+224,20,8,126,121,224,63,8,100,145,160,21,0,58,100,3,203,61,129,51,+161,197,198,151,167,127,225,201,2,160,17,239,12,2,224,25,0,229,83,1,+128,10,98,249,160,26,108,114,98,178,161,142,112,229,141,92,128,0,136,106,+96,70,98,176,236,188,0,96,43,194,171,129,85,195,92,226,217,1,130,215,+224,218,3,140,137,0,79,126,158,67,82,110,62,228,221,1,2,78,85,76,+100,209,97,169,224,37,16,2,83,79,72,128,37,65,184,224,37,17,1,84,+88,128,37,65,157,224,37,16,0,69,192,37,64,161,224,37,17,1,79,84,+128,37,64,237,224,37,17,1,78,81,128,37,65,76,224,37,16,2,65,67,+75,128,37,68,15,224,37,16,1,66,69,161,9,66,49,224,37,17,0,83,+128,36,65,101,224,36,16,0,72,160,187,66,209,224,36,16,1,76,70,161,+82,225,121,20,0,86,160,74,99,50,224,37,16,0,70,192,75,225,121,20,+1,67,82,160,37,225,121,20,1,83,79,160,37,225,121,20,1,83,73,160,+37,225,121,20,2,68,76,69,160,38,225,122,20,2,68,67,49,160,38,225,+123,20,2,68,67,50,160,38,225,125,20,2,68,67,51,160,38,225,127,20,+2,68,67,52,128,38,99,69,224,38,16,1,78,65,162,60,0,50,226,251,+21,1,89,78,160,38,226,252,22,0,66,160,38,225,131,20,1,67,65,192,+77,226,254,21,0,77,160,37,225,132,20,1,83,85,192,115,225,132,20,2,+69,83,67,160,38,225,132,20,0,70,163,0,64,21,224,37,17,0,71,192,+37,225,130,20,0,82,160,37,0,51,225,129,20,0,85,192,37,225,128,21,+0,80,160,37,225,127,20,0,68,195,228,0,49,96,229,171,109,224,0,20,+0,58,103,32,255,60,4,224,9,1,101,121,0,53,72,13,199,108,113,68,+72,188,2,64,95,53,113,249,2,64,95,49,104,77,74,197,1,95,49,85,+101,64,83,0,52,145,176,116,156,0,58,96,40,241,190,3,74,202,136,130,+230,108,1,198,92,224,67,2,177,163,1,52,55,169,41,1,95,53,81,224,+3,95,53,52,51,72,163,0,51,103,182,0,52,102,109,0,52,96,11,0,+56,201,20,0,95,83,209,128,10,0,58,96,6,7,10,65,32,117,62,61,+32,58,96,40,96,12,64,11,139,87,1,117,60,64,11,139,31,3,105,99,+109,112,64,13,135,48,116,164,233,168,2,89,212,105,167,224,20,4,65,182,+224,20,7,117,132,224,20,8,67,19,224,20,7,0,49,99,41,224,21,9,+65,3,224,106,8,137,253,224,20,5,83,26,1,64,67,243,117,5,0,35,+111,152,2,95,49,51,104,93,171,177,224,7,53,1,58,53,64,232,189,230,+180,229,72,2,251,91,6,172,246,3,67,32,61,61,233,64,1,136,46,0,+85,64,12,64,8,0,90,214,92,194,101,232,134,0,136,93,243,214,2,239,+43,1,105,223,226,243,12,2,99,97,115,172,181,233,209,6,0,51,141,141,+141,76,130,81,130,233,158,165,170,168,106,179,139,184,200,246,168,222,139,174,+2,67,32,60,181,45,232,189,0,224,230,7,224,28,0,128,228,182,89,235,+61,3,192,246,224,34,1,242,111,1,160,68,139,29,224,67,7,225,1,2,+226,47,3,192,0,153,18,139,242,1,53,51,99,148,108,179,177,225,224,104,+93,0,58,97,105,142,161,7,53,51,55,32,64,90,32,85,65,97,225,63,+3,64,116,224,18,6,150,128,224,18,4,130,202,224,18,4,98,131,106,50,+192,191,170,220,64,104,1,64,85,66,138,253,165,2,192,15,224,68,6,67,+13,98,93,224,18,1,224,61,2,224,60,1,208,157,224,61,5,111,90,224,+18,5,131,179,224,80,4,197,3,224,80,10,224,41,6,68,27,224,41,1,+194,157,65,70,133,38,3,95,52,48,55,64,30,91,46,151,171,64,49,67,+76,0,58,96,245,101,73,0,80,139,250,0,85,96,20,0,54,228,174,12,+0,54,228,132,11,0,49,103,114,228,154,8,160,227,224,63,5,224,41,11,+100,82,228,110,7,64,10,228,111,46,1,58,53,69,199,183,112,96,214,132,+52,131,156,119,123,64,35,133,170,68,112,248,114,4,98,222,130,152,251,7,+0,0,53,64,133,219,248,120,145,246,65,2,2,95,50,57,70,37,96,15,+0,58,96,41,152,32,0,53,73,154,121,206,96,195,0,58,64,54,97,139,+64,227,218,7,64,77,0,48,92,2,174,32,96,39,133,21,71,26,2,51,+56,54,173,95,213,44,76,220,0,52,91,116,65,50,108,221,160,13,143,162,+0,53,217,121,204,234,252,28,1,0,58,64,105,160,88,144,90,65,114,237,+75,0,129,36,0,67,186,120,72,12,241,211,4,17,33,33,58,32,105,110,+100,101,120,32,116,111,111,32,108,97,114,103,197,33,164,15,227,236,1,77,+64,224,78,0,146,250,240,50,1,255,178,1,244,41,7,64,97,7,110,101,+103,97,116,105,118,101,128,106,96,96,1,58,53,66,15,132,10,224,48,5,+15,105,110,105,116,58,32,101,109,112,116,121,32,108,105,115,116,96,46,225,+207,4,251,150,7,165,197,105,136,128,90,131,30,97,218,1,58,53,72,224,+232,83,3,66,147,67,99,200,63,128,20,134,73,64,99,208,242,165,188,229,+197,0,232,237,2,97,17,200,207,160,115,0,54,134,49,92,116,104,112,209,+26,128,14,241,163,1,72,142,146,249,65,65,64,27,210,197,224,35,6,96,+157,224,35,0,0,55,130,237,0,58,111,47,160,104,224,44,2,97,24,224,+44,0,90,130,64,42,131,12,160,183,134,185,160,241,226,125,3,70,119,1,+95,53,107,214,129,246,96,23,129,86,82,66,75,201,254,141,4,198,220,151,+194,245,3,6,128,55,96,37,0,85,191,153,245,51,0,96,52,128,31,128,+86,129,124,184,10,97,204,96,74,252,171,4,231,149,1,70,104,251,113,1,+99,31,123,113,64,73,96,23,128,230,178,123,132,123,1,51,56,221,178,227,+157,0,224,203,3,193,195,128,153,97,114,247,178,1,64,102,229,121,0,245,+134,1,245,135,2,97,11,231,22,0,224,5,0,155,210,224,15,3,66,112,+228,170,0,134,33,128,2,154,39,225,162,0,177,114,168,95,160,152,192,1,+104,140,128,0,192,45,249,140,0,160,54,104,164,224,53,3,160,202,224,74,+8,128,146,229,218,4,129,182,128,93,137,87,183,203,128,148,96,90,160,75,+224,126,3,103,115,64,222,225,181,3,255,19,8,224,91,0,230,228,0,96,+74,224,51,28,96,199,165,226,225,42,11,225,176,0,224,46,1,224,1,3,+210,181,128,125,225,56,11,129,53,160,47,242,184,2,197,4,225,65,134,129,+66,224,62,0,225,68,42,66,195,98,204,168,94,64,4,227,22,2,227,43,+13,160,180,230,179,47,0,58,100,98,203,85,228,190,20,103,132,224,38,10,+229,54,13,133,207,229,58,23,230,102,6,8,100,105,103,105,116,84,111,73,+110,134,96,64,218,247,2,11,160,16,183,12,64,86,249,153,0,224,49,27,+96,176,224,49,23,0,54,160,255,65,33,236,119,2,224,210,19,0,57,161,+166,0,49,72,101,1,55,51,224,215,2,12,92,51,52,38,108,105,98,47,+68,97,116,97,47,91,92,2,46,104,115,64,19,4,44,49,48,55,58,146,+93,161,160,183,247,226,57,0,248,4,18,98,215,224,209,2,64,170,82,84,+230,240,4,2,53,48,52,236,26,6,163,17,1,58,53,82,167,231,130,3,+71,204,218,165,199,212,163,51,227,42,4,107,205,0,64,192,41,192,17,229,+55,0,102,48,233,211,2,233,204,0,96,115,231,246,2,248,147,0,64,4,+0,85,134,178,70,114,224,87,0,198,209,229,175,0,250,101,6,128,85,166,+167,64,92,0,54,135,89,235,8,27,235,50,13,235,114,11,80,91,224,20,+9,129,248,239,203,6,173,19,224,83,5,64,166,224,20,8,224,125,11,112,+240,235,176,14,224,20,6,224,125,11,76,70,224,20,9,131,155,224,251,6,+225,16,11,110,15,224,146,8,224,167,12,224,83,11,236,152,13,64,10,224,+253,10,224,211,11,1,56,55,177,10,224,22,6,0,54,225,85,12,1,56,+53,224,196,12,1,56,53,161,215,236,224,5,1,56,55,67,5,241,81,69,+224,7,119,1,58,53,86,220,131,235,240,170,4,198,14,225,2,5,98,50,+67,44,159,55,67,107,87,142,102,137,1,58,53,87,77,100,225,169,20,186,+22,128,90,192,72,241,195,17,4,83,79,85,82,67,151,75,163,182,234,80,+1,134,14,68,220,2,50,48,53,74,73,64,127,5,66,32,95,52,53,51,+64,13,102,139,237,213,2,228,96,0,224,159,2,155,21,128,193,0,58,96,+192,170,111,73,207,136,179,237,24,0,96,8,164,39,77,28,231,52,15,242,+244,2,0,80,100,94,124,118,2,95,53,48,245,220,5,15,110,99,108,111,+115,101,100,32,123,45,32,99,111,109,109,101,166,152,138,103,233,220,1,133,+62,167,206,193,66,254,39,6,241,145,0,132,210,242,170,0,225,175,13,100,+96,229,126,0,129,12,235,211,0,97,82,235,142,4,232,80,0,224,147,37,+192,101,224,146,28,148,213,224,147,23,238,126,11,234,14,5,64,60,233,169,+12,130,222,224,46,32,148,31,233,66,0,224,231,2,224,84,4,232,253,0,+224,175,5,192,156,192,24,1,95,53,160,126,224,16,2,224,192,0,166,99,+0,58,96,24,110,196,238,232,0,65,83,1,95,50,133,40,96,177,113,255,+160,95,225,163,10,0,58,96,86,96,67,193,102,128,49,67,52,225,59,0,+131,65,64,196,105,173,224,71,4,104,189,69,20,148,185,0,58,96,184,102,+247,103,78,234,14,3,224,154,0,160,99,224,73,5,64,59,65,11,237,189,+1,64,107,141,189,67,7,232,72,3,232,66,6,120,199,224,28,15,133,199,+224,18,4,129,91,0,58,99,227,232,159,9,1,95,53,68,44,0,58,100,+13,239,69,9,233,100,10,0,58,96,48,224,42,9,234,138,6,110,204,0,+58,96,98,233,191,13,224,47,5,137,69,101,94,233,191,32,1,49,49,233,+191,47,192,109,233,203,1,64,170,228,220,1,1,80,32,130,225,129,142,178,+207,5,51,55,56,32,95,51,88,159,224,10,3,2,52,48,52,66,59,89,+99,0,52,73,220,1,95,52,82,203,224,6,0,1,53,48,102,47,0,48,+130,119,1,95,48,64,54,0,48,96,43,0,54,160,54,0,64,66,140,245,+164,8,6,52,57,55,32,95,52,57,76,81,96,36,225,15,1,2,101,111,+102,128,244,122,54,2,50,51,49,160,137,214,184,0,58,96,114,147,155,0,+52,69,220,96,112,140,161,1,51,55,64,75,131,213,3,95,51,56,49,234,+71,5,99,203,131,236,2,95,51,56,103,174,0,51,96,210,0,51,129,47,+0,67,69,168,175,230,0,58,64,155,64,101,2,80,32,58,64,101,131,85,+82,94,64,185,160,126,96,110,68,23,96,67,0,54,67,23,183,50,96,97,+105,241,96,12,0,79,98,10,74,193,109,119,0,51,138,85,64,75,130,149,+2,95,49,51,193,111,0,49,64,209,0,56,68,35,0,52,65,41,225,138,+4,106,193,129,120,65,65,0,52,96,141,130,172,3,95,52,57,49,64,4,+90,255,96,33,0,58,96,31,224,91,14,0,80,96,37,98,53,1,52,49,+193,96,1,95,52,70,196,106,167,1,95,52,104,235,0,58,96,79,96,93,+1,56,50,161,169,225,168,1,3,118,97,108,117,116,60,225,224,7,98,140,+251,249,8,96,78,187,61,129,33,1,52,56,65,118,1,95,52,98,48,225,+232,1,161,179,0,58,64,209,64,45,242,159,1,192,200,225,37,3,136,11,+129,254,1,52,56,164,30,65,249,130,22,96,71,245,47,0,128,114,2,95,+52,56,76,134,224,113,10,64,63,227,249,0,224,108,16,128,103,0,58,96,+69,163,80,226,121,0,134,37,123,7,161,252,212,81,242,14,0,154,202,229,+160,0,2,51,56,48,133,90,162,178,98,31,173,32,146,136,128,34,64,112,+188,246,1,51,57,97,141,0,51,195,60,2,95,52,49,225,158,9,4,92,+57,50,38,110,225,158,10,64,90,170,173,129,158,199,26,64,96,162,142,226,+116,3,226,31,6,129,18,194,60,96,17,64,74,0,58,98,156,130,42,2,+51,32,58,96,31,226,56,15,2,107,101,121,224,151,10,100,22,226,54,0,+0,50,226,55,4,67,172,248,8,0,161,107,233,102,3,227,128,0,195,112,+192,2,241,231,1,128,107,231,243,0,228,29,53,227,226,35,66,56,162,83,+225,166,1,106,165,64,198,3,95,52,56,48,64,19,121,214,65,3,248,228,+0,0,85,194,21,251,158,4,161,185,128,31,0,90,231,8,4,160,110,131,+52,165,229,96,132,69,229,64,102,64,23,251,126,8,65,52,224,18,6,173,+43,224,18,3,98,35,250,172,7,64,252,66,66,225,217,1,3,84,82,97,+119,166,177,224,24,5,2,69,79,70,203,194,64,24,99,204,0,49,224,31,+2,3,123,45,35,32,96,32,103,48,0,49,226,45,3,3,32,35,45,125,+253,196,0,224,151,7,135,99,224,150,4,65,209,224,149,6,2,73,110,100,+203,93,224,27,8,3,66,114,97,99,254,36,0,240,78,0,225,17,6,174,+84,224,18,3,142,34,224,121,4,65,108,64,93,74,237,232,163,6,239,169,+0,224,23,7,142,82,194,89,224,151,1,6,125,32,108,97,121,111,117,160,+180,225,40,2,224,23,4,227,194,0,71,76,68,177,1,52,55,164,57,224,+25,4,224,20,0,225,213,7,224,195,9,64,143,224,57,1,1,49,53,164,+27,224,18,2,115,231,192,23,193,206,77,130,4,54,51,32,79,32,112,105,+131,37,100,209,97,204,227,58,3,64,0,0,58,98,250,102,155,69,91,2,+52,49,54,82,28,0,52,90,215,2,95,52,55,168,187,0,50,70,207,96,+185,0,95,80,0,160,11,0,58,96,6,96,58,0,48,64,218,68,47,3,+95,52,54,53,64,31,134,77,0,54,72,120,128,11,1,49,56,224,11,3,+97,9,128,35,0,55,105,41,0,57,224,53,0,0,73,67,33,64,9,188,+73,69,189,186,115,67,70,244,73,6,21,73,110,116,101,103,101,114,58,32,+100,105,118,105,115,105,111,110,32,98,121,32,48,233,169,0,96,54,72,7,+134,182,242,252,1,0,55,65,247,0,55,242,133,1,224,17,9,128,64,96,+61,224,7,0,132,155,248,66,1,236,184,3,65,0,97,46,243,74,0,107,+242,0,54,96,93,1,52,55,164,41,64,1,95,208,243,111,1,133,24,160,+12,79,134,68,156,74,69,227,0,0,230,186,2,153,198,76,250,128,88,164,+150,68,234,193,224,179,141,96,56,64,73,165,184,224,0,0,0,58,97,113,+176,80,147,202,1,95,52,106,174,0,50,69,92,0,58,96,49,252,210,2,+98,148,212,58,224,19,0,66,165,96,8,116,10,226,83,3,231,104,4,247,+233,2,97,43,250,145,2,160,238,128,69,215,128,6,49,52,50,32,95,51,+52,140,181,240,97,4,64,28,77,40,224,28,0,96,241,75,127,1,51,51,+168,105,75,126,128,12,1,95,49,134,150,64,218,65,19,112,123,158,252,65,+219,0,58,97,95,154,180,224,211,1,96,7,129,20,128,181,104,60,224,7,+3,125,220,124,124,0,52,100,68,161,196,105,193,0,54,135,252,96,6,193,+150,96,26,70,93,64,21,64,59,77,163,1,95,52,100,104,233,39,0,96,+49,96,28,195,199,96,58,66,5,179,150,1,95,52,115,27,97,90,162,116,+143,55,0,83,154,234,252,55,1,103,127,128,33,97,112,98,75,68,221,1,+95,52,115,117,192,117,135,38,65,125,225,229,0,96,17,64,87,231,182,2,+1,95,52,151,189,192,95,160,163,169,32,128,12,98,99,128,185,2,95,52,+55,97,107,140,29,224,197,16,64,39,192,57,64,66,225,16,3,227,134,2,+110,118,132,178,96,69,173,113,237,100,2,71,70,101,55,103,167,135,247,3,+95,52,55,50,226,139,0,224,77,3,224,13,5,0,58,99,144,255,1,11,+2,108,97,115,255,1,9,129,44,103,229,0,90,64,239,128,175,0,58,96,+8,100,255,224,89,0,1,79,32,69,182,64,127,0,58,97,13,227,72,0,+132,232,0,75,98,124,199,254,108,194,65,255,168,36,68,24,177,17,227,56,+2,122,51,130,43,117,251,1,95,52,118,170,66,218,64,14,0,58,100,9,+3,10,65,32,89,160,45,253,85,1,164,167,160,73,64,93,96,70,137,204,+131,186,228,148,0,68,222,224,10,7,64,133,245,99,2,98,66,147,104,99,+102,253,202,11,133,105,251,74,31,64,60,0,58,101,54,255,41,1,128,50,+2,52,32,64,129,29,0,54,224,27,12,97,71,64,198,134,125,0,56,102,+179,86,111,134,185,64,106,0,50,96,34,202,250,70,192,130,108,131,131,66,+139,2,95,52,52,107,74,64,215,64,230,96,234,0,54,74,22,128,67,131,+228,1,95,52,173,134,192,13,65,252,102,164,64,111,225,253,8,0,49,193,+253,64,39,224,29,2,0,52,224,29,6,175,164,230,118,7,0,58,96,102,+98,29,71,229,226,191,2,0,58,96,167,112,223,101,64,231,17,1,230,186,+10,230,249,1,231,66,11,224,48,20,97,192,226,57,5,180,50,229,217,5,+130,62,132,230,230,242,3,130,98,66,236,226,169,0,99,233,72,54,133,139,+237,76,0,160,60,231,78,0,244,152,0,224,114,0,228,139,0,230,71,2,+255,182,1,224,115,19,224,113,5,224,111,3,224,49,17,0,53,135,191,224,+0,2,0,58,98,40,238,88,0,104,183,82,86,195,144,0,52,73,128,64,+99,118,245,96,231,0,56,205,63,1,52,52,81,81,1,53,54,236,71,0,+215,28,224,155,6,0,58,96,119,98,165,1,53,48,64,67,244,74,5,245,+107,9,0,73,113,128,3,95,52,53,49,195,98,2,52,53,50,224,10,1,+0,52,65,226,99,111,134,164,3,95,52,53,53,224,18,6,0,58,96,150,+232,3,0,65,106,225,132,1,191,130,102,22,1,95,49,90,47,200,137,230,+101,2,101,147,0,53,65,55,192,41,0,50,232,179,4,151,250,0,50,232,+142,2,224,60,20,65,1,224,59,17,0,58,64,193,160,174,97,187,224,64,+22,96,63,233,10,1,0,58,65,19,129,196,168,199,252,212,1,130,18,167,+242,0,82,224,22,4,208,206,64,63,131,233,70,6,98,143,167,117,128,1,+90,154,160,41,226,188,0,142,235,224,242,3,1,32,64,65,215,193,89,97,+210,96,49,100,73,64,236,253,162,5,241,75,1,128,76,135,213,96,66,66,+16,114,91,229,78,4,0,58,96,241,239,152,0,192,1,105,117,224,153,1,+224,20,5,224,17,8,224,14,5,224,11,2,192,8,166,50,64,109,228,166,+0,2,52,32,75,144,117,0,52,132,159,168,28,105,38,92,67,0,58,99,+19,192,222,128,216,0,58,96,25,157,196,136,121,87,176,1,55,32,130,159,+99,47,225,165,2,168,112,129,18,192,92,248,131,13,197,69,64,33,225,81,+3,64,64,0,85,240,100,1,192,18,1,66,39,224,21,3,160,104,224,29,+0,128,39,225,221,1,96,228,226,137,0,160,42,126,209,238,76,2,103,37,+136,145,235,22,0,192,97,233,168,0,162,74,128,90,1,95,49,114,83,169,+139,136,237,103,46,141,126,197,4,234,236,2,234,237,5,128,151,130,226,224,+67,0,98,100,64,144,0,52,95,139,64,76,135,140,69,245,0,58,100,241,+225,170,1,135,23,0,49,96,24,177,33,70,51,163,27,104,248,230,32,4,+139,254,230,217,2,233,106,7,96,144,168,253,167,187,0,64,229,232,0,243,+125,1,132,106,128,102,187,218,97,27,128,24,129,123,224,86,2,197,122,252,+177,1,96,89,196,189,64,196,94,157,96,55,73,27,192,155,65,44,161,40,+180,10,138,153,147,109,224,46,3,192,102,203,43,230,222,1,224,184,11,224,+134,15,108,37,64,121,224,137,8,192,90,224,134,27,224,181,2,225,11,5,+192,73,129,11,97,122,248,195,16,175,30,96,7,3,114,110,97,108,216,207,+1,53,52,184,206,0,58,97,253,102,124,0,51,79,254,70,147,0,58,96,+119,162,228,97,152,128,240,240,158,0,98,190,252,101,4,66,244,234,25,14,+160,55,204,93,227,136,4,135,150,128,5,235,137,8,19,105,109,112,111,115,+115,105,98,108,101,58,32,120,115,32,62,61,32,121,115,96,179,116,144,224,+243,41,3,57,48,58,54,242,188,0,237,245,2,64,149,226,112,0,227,151,+3,166,79,227,150,2,135,12,227,210,4,195,107,1,52,51,118,205,167,211,+228,95,0,224,80,11,237,155,2,224,80,2,97,202,96,69,65,149,64,24,+229,204,0,143,166,66,1,227,244,0,225,108,8,128,119,164,51,196,81,196,+57,224,55,1,64,124,224,14,3,228,84,1,239,51,0,0,58,96,132,164,+29,145,49,227,134,2,234,49,10,96,29,160,190,105,4,229,8,7,64,82,+0,54,196,158,1,95,50,66,185,235,208,1,131,58,163,67,129,134,155,186,+2,64,95,50,149,250,133,127,160,120,197,224,91,201,130,182,83,106,162,182,+188,0,228,71,5,129,61,229,163,9,161,172,229,165,8,226,6,15,96,188,+64,110,161,177,230,54,1,99,170,108,86,202,224,226,94,46,224,91,0,226,+94,10,224,95,3,226,94,32,224,80,1,161,159,99,106,0,58,96,24,226,+94,6,130,58,226,57,0,100,113,230,113,2,224,11,3,0,58,96,71,1,+10,65,67,226,0,58,96,147,97,137,75,28,0,50,102,75,0,50,106,228,+145,41,0,50,99,23,93,48,176,138,0,53,100,103,107,34,0,53,75,33,+96,10,0,58,96,6,230,192,6,192,251,96,78,151,108,165,45,128,6,0,+58,96,80,224,52,27,224,59,2,0,58,96,139,224,52,20,224,98,2,160,+59,0,58,96,198,224,52,27,224,112,2,0,58,97,1,103,3,134,252,226,+149,3,143,39,224,19,0,115,0,166,54,2,95,52,50,108,144,212,181,165,+50,0,52,126,230,230,93,1,97,136,64,123,135,101,96,86,79,6,0,50,+78,100,78,197,128,47,198,103,96,65,141,142,237,6,1,163,118,230,216,1,+71,247,145,191,111,9,0,51,112,98,128,17,192,118,0,58,96,7,3,10,+65,32,75,144,192,64,84,64,13,2,50,32,58,96,114,96,25,111,160,64,+137,154,120,72,134,98,1,0,49,123,173,66,37,205,84,0,50,129,49,96,+31,0,58,96,31,193,49,231,124,0,224,174,0,96,48,164,28,232,220,2,+192,13,0,49,74,65,131,220,96,167,64,82,160,127,225,32,2,97,169,217,+187,64,15,64,9,219,122,2,95,49,53,224,86,0,0,58,96,6,105,13,+2,95,52,49,118,220,0,49,105,61,0,49,193,214,3,83,32,95,51,66,+24,101,99,75,147,65,168,67,110,64,166,92,234,96,7,108,137,172,154,165,+172,131,99,1,95,51,66,191,0,58,96,85,237,140,0,202,118,129,148,205,+144,194,61,0,95,74,216,163,210,224,117,39,199,143,233,134,6,199,211,103,+157,141,241,171,134,133,213,96,37,129,121,3,48,53,32,35,75,0,128,21,+140,153,2,66,32,95,80,204,224,131,24,224,73,10,160,144,224,95,13,130,+154,97,246,224,107,42,160,75,237,29,1,65,191,97,202,101,46,66,25,64,+114,138,217,163,33,110,196,0,51,225,4,7,171,131,235,240,1,64,132,175,+151,66,199,122,228,192,22,2,95,49,51,232,194,3,2,32,37,32,168,113,+224,45,5,167,134,67,31,122,43,192,15,130,99,141,77,64,6,253,103,11,+163,178,67,181,131,168,225,63,0,179,185,225,58,1,161,61,224,32,0,237,+214,1,64,24,237,216,0,253,129,55,98,136,64,65,224,21,1,253,115,0,+190,10,0,58,93,110,64,206,0,85,78,44,105,240,0,58,94,205,64,18,+3,80,32,58,52,67,16,99,169,0,48,80,170,68,197,87,235,1,52,48,+231,241,1,110,122,0,95,67,121,0,58,125,181,128,45,253,170,4,0,58,+96,47,161,51,174,173,0,58,64,35,128,19,0,80,163,119,0,85,96,21,+0,54,224,123,0,71,58,154,107,173,155,0,95,91,189,127,102,67,56,64,+218,71,123,206,5,226,44,1,95,250,0,64,127,251,129,224,65,67,0,51,+66,143,98,112,0,48,226,112,0,65,137,1,95,51,105,175,96,84,193,206,+225,121,8,134,14,225,117,17,0,79,226,90,2,118,161,66,92,161,132,226,+37,2,201,183,65,133,64,141,194,8,186,57,192,20,194,7,224,135,1,102,+184,99,50,2,95,51,56,226,168,2,1,51,57,120,66,128,232,68,131,0,+48,224,248,1,0,58,96,6,195,89,70,198,2,95,52,48,104,4,0,48,+105,93,105,240,66,231,1,51,57,70,0,128,233,0,58,96,65,226,14,0,+128,17,130,13,0,85,66,29,162,32,64,71,192,89,132,163,65,154,160,74,+132,254,99,199,0,95,69,64,160,21,193,167,129,157,0,58,96,186,208,167,+64,14,231,251,3,130,156,1,90,32,226,204,1,0,58,97,104,181,126,64,+13,130,38,131,219,97,55,1,95,51,86,127,0,58,97,150,247,196,0,96,+19,241,123,2,241,63,21,0,58,66,11,224,253,0,68,178,0,58,96,172,+66,210,71,115,66,110,193,204,131,199,161,157,128,12,0,79,128,71,227,102,+3,1,95,49,64,55,98,122,0,95,94,24,194,188,73,178,128,10,0,50,+75,241,96,10,0,58,96,6,118,123,160,18,226,58,8,97,26,96,237,130,+35,162,143,2,49,32,64,88,99,0,80,165,123,197,146,253,34,1,83,22,+226,108,1,124,25,243,71,3,226,167,2,0,56,192,108,177,1,85,22,229,+189,2,213,40,101,160,96,47,198,187,128,52,96,204,64,18,97,4,66,95,+224,220,1,164,73,117,171,98,197,0,58,96,109,247,56,1,243,149,2,229,+60,22,225,199,0,251,94,6,137,171,0,54,166,33,224,51,4,64,15,244,+233,5,220,218,224,47,8,227,145,3,170,52,198,174,64,200,64,186,164,183,+239,24,6,5,102,111,108,100,108,49,250,164,8,64,71,69,30,64,249,128,+57,244,77,0,247,170,3,96,91,0,54,193,36,68,148,0,56,114,108,67,+152,173,92,98,85,75,222,1,49,48,192,0,1,32,58,96,38,229,92,6,+96,184,96,72,230,165,3,128,246,226,67,4,162,192,245,128,2,99,110,128,+75,129,135,225,46,1,194,48,130,66,192,0,0,95,66,204,67,26,64,118,+131,45,0,80,64,149,130,204,0,73,64,10,129,250,64,10,64,135,244,157,+0,96,50,0,55,129,78,0,82,110,6,100,166,0,51,113,103,91,209,96,+185,0,54,226,221,21,126,127,226,199,2,96,83,129,104,0,90,66,165,0,+58,96,65,97,31,0,90,115,49,0,58,96,95,174,243,0,48,69,5,130,+7,0,51,91,174,1,95,51,70,201,100,194,192,26,1,95,51,72,123,2,+95,49,49,160,15,64,64,198,66,1,95,51,92,37,97,31,224,47,3,65,+93,241,163,1,206,221,86,7,0,64,73,39,117,26,176,24,129,252,224,60,+0,96,241,101,149,64,116,161,163,224,122,1,227,151,0,0,51,77,43,64,+0,68,1,70,169,160,122,91,87,64,140,224,18,0,64,216,114,4,0,51,+125,28,224,75,0,200,34,0,58,96,104,76,26,101,239,0,58,96,38,133,+89,128,103,96,19,129,203,4,94,103,101,116,98,65,196,163,202,7,50,52,+52,32,79,32,95,51,69,251,0,79,64,14,157,72,64,84,189,60,131,148,+224,221,0,65,94,0,53,96,160,78,215,2,51,54,54,65,64,2,55,32,+64,227,66,1,7,111,112,101,110,70,105,108,101,99,56,225,115,4,189,76,+72,44,109,9,0,58,96,57,233,136,2,97,94,200,5,188,52,0,51,89,+127,157,1,64,152,100,149,253,133,0,65,76,125,113,130,68,99,228,96,6,+224,142,1,1,58,32,210,152,0,58,64,173,226,53,11,134,226,98,53,108,+195,128,26,172,198,225,138,4,129,157,224,34,2,172,109,1,58,51,189,48,+241,10,3,0,51,71,65,65,127,98,75,171,30,0,50,81,92,224,33,6,+0,50,109,86,224,54,8,110,98,1,95,51,157,34,0,51,93,17,225,79,+2,74,159,0,58,96,141,96,117,1,95,50,87,244,1,95,51,93,25,0,+58,96,43,65,236,4,102,108,117,115,104,65,238,189,48,64,128,226,227,1,+64,6,161,221,224,224,0,241,93,3,239,140,3,117,122,0,83,128,118,64,+3,224,135,4,113,192,65,169,104,64,90,16,226,14,2,23,104,67,108,111,+115,101,58,32,72,97,110,100,108,101,32,97,108,114,101,97,100,121,32,99,+64,21,0,100,129,154,227,0,6,91,63,97,150,96,209,0,53,140,36,227,+4,1,187,102,97,23,130,244,104,38,189,219,100,91,68,118,119,77,1,95,+51,92,99,96,46,189,225,65,42,68,204,106,212,96,29,65,40,96,141,65,+40,64,109,100,220,68,187,2,95,51,49,71,13,1,53,53,237,223,0,0,+58,96,156,10,10,65,32,116,111,70,117,110,80,116,114,64,50,129,249,66,+213,194,214,251,19,0,226,214,5,161,84,224,9,6,135,133,90,166,162,203,+226,226,2,160,6,0,58,97,90,233,4,2,201,6,231,98,0,233,21,21,+64,64,169,4,1,51,53,70,111,186,207,1,95,50,75,130,90,91,0,58,+64,23,128,18,0,57,71,21,0,51,109,47,0,51,180,22,1,53,53,160,+38,64,144,70,43,160,11,0,55,65,30,96,11,0,58,96,6,104,249,1,+49,56,141,252,192,154,135,251,237,227,2,106,109,160,5,98,125,111,11,129,+20,64,174,103,150,197,195,192,31,109,226,1,95,51,68,159,67,153,231,179,+3,227,225,0,160,43,96,30,224,36,16,193,27,133,180,98,106,92,18,67,+121,0,50,114,109,0,50,128,10,0,56,165,8,224,84,28,128,174,232,125,+5,224,183,5,173,217,224,106,20,238,230,12,0,40,128,98,224,134,9,0,+79,143,131,198,5,224,130,0,96,115,73,181,161,188,1,50,52,192,11,0,+58,96,6,193,164,0,75,101,61,64,78,0,85,236,6,1,5,67,32,60,+32,64,35,65,209,224,18,6,79,227,224,19,8,143,171,224,19,5,64,232,+248,205,0,160,19,64,124,0,85,224,212,2,0,105,88,62,3,114,117,112,+116,196,1,224,28,3,14,114,101,115,111,117,114,99,101,32,118,97,110,105,+115,104,192,34,224,35,4,5,116,105,109,101,111,117,169,155,224,110,8,67,+68,224,45,3,20,117,110,115,117,112,112,111,114,116,101,100,32,111,112,101,+114,97,116,105,111,110,224,120,9,12,104,97,114,100,119,97,114,101,32,102,+97,117,108,192,91,224,243,8,108,44,224,19,6,69,169,224,132,7,68,203,+224,243,5,14,97,112,112,114,111,112,114,105,97,116,101,32,116,121,112,135,+32,224,35,6,12,118,97,108,105,100,32,97,114,103,117,109,101,110,192,131,+224,34,3,3,102,97,105,108,225,18,0,224,115,7,68,165,224,44,3,13,+112,114,111,116,111,99,111,108,32,101,114,114,111,114,224,111,9,5,115,121,+115,116,101,109,224,29,3,224,240,9,225,247,10,225,246,10,225,245,10,225,+244,7,21,117,110,115,97,116,105,115,102,105,101,100,32,99,111,110,115,116,+114,97,105,110,116,154,118,224,40,5,2,115,101,114,224,147,4,224,210,4,+13,101,114,109,105,115,115,105,111,110,32,100,101,110,105,225,10,15,226,2,+7,6,105,108,108,101,103,97,108,225,254,19,7,101,110,100,32,111,102,32,+102,200,186,225,10,9,225,230,10,225,229,7,226,188,0,5,101,120,104,97,+117,115,226,224,21,2,98,117,115,112,102,225,201,10,224,86,6,10,100,111,+101,115,32,110,111,116,32,101,120,236,146,0,224,31,3,199,85,96,30,161,+82,128,0,196,11,154,186,132,11,117,128,96,6,196,11,2,95,49,51,77,+210,101,93,78,32,70,45,199,130,234,189,3,100,49,233,93,3,135,213,0,+45,96,113,1,95,49,111,31,212,100,224,110,0,114,164,96,6,228,122,4,+228,234,8,1,48,120,128,184,71,14,1,51,48,102,133,87,34,1,95,51,+95,127,73,38,164,225,192,210,154,185,128,99,64,11,0,58,96,6,96,99,+0,48,96,136,107,132,95,117,1,95,51,95,148,2,95,49,56,73,94,96,+77,1,95,49,110,195,192,11,103,6,128,11,0,57,102,235,96,11,0,51,+85,69,0,58,96,12,8,10,65,32,117,114,101,109,32,58,96,73,64,13,+3,113,117,111,116,64,14,167,87,2,49,48,56,128,177,104,163,119,218,65,+44,0,56,128,125,67,152,0,58,96,144,241,205,0,65,96,174,194,103,5,+65,111,75,14,136,106,236,122,4,224,22,1,102,86,74,116,253,164,26,4,+95,84,121,112,101,221,160,1,54,48,190,148,192,67,255,251,2,70,176,0,+79,64,127,244,118,2,224,34,5,224,26,3,224,23,2,211,91,253,25,4,+0,58,96,237,65,18,3,52,49,32,95,72,208,0,95,107,51,0,51,125,+196,0,51,85,252,154,234,0,73,97,1,235,45,0,252,211,2,98,254,96,+9,0,95,76,202,0,58,96,47,141,172,93,94,107,41,81,230,247,122,2,+0,58,64,88,64,35,2,42,32,58,96,105,96,128,216,178,1,95,51,147,+38,103,59,0,51,120,147,0,51,88,233,1,95,51,75,141,123,53,129,178,+123,53,128,10,0,58,96,6,65,233,1,62,61,64,83,130,90,1,117,62,+64,11,162,16,0,60,96,24,162,15,0,60,64,11,130,12,3,117,99,109,+112,64,13,129,238,248,202,50,162,239,152,202,67,19,162,62,65,52,240,243,+0,133,246,67,52,124,8,92,75,78,156,158,137,160,9,2,54,32,35,106,+90,217,29,224,46,12,2,54,32,35,182,165,0,58,96,113,98,214,3,51,+57,32,58,96,41,249,68,8,234,191,1,128,23,113,140,169,210,249,84,2,+75,81,249,84,46,177,178,214,59,158,202,165,145,224,96,1,249,181,56,88,+168,224,100,1,128,224,160,216,192,215,224,102,5,249,42,33,224,144,45,242,+147,6,18,78,117,109,101,114,105,99,46,115,104,111,119,73,110,116,65,116,+66,97,77,80,7,110,101,103,97,116,105,118,101,232,45,7,129,32,128,2,+139,90,171,138,224,231,3,119,100,224,196,30,97,234,64,23,87,216,224,23,+1,224,84,62,69,64,250,200,4,224,254,30,233,212,3,2,98,97,115,199,+179,128,149,85,45,161,8,226,174,0,194,164,0,83,79,44,157,190,237,138,+0,141,141,224,49,6,194,105,160,83,192,11,226,117,8,224,70,4,250,21,+4,224,61,0,211,136,225,73,13,242,255,2,224,10,2,224,55,2,225,95,+3,0,51,94,248,141,41,128,65,99,190,225,81,19,0,58,100,124,131,191,+98,227,130,146,160,34,96,82,0,53,224,204,0,0,58,96,95,248,44,0,+0,52,128,36,0,58,96,34,110,63,2,48,32,75,86,65,101,90,232,9,+3,0,83,106,75,4,46,73,79,46,69,201,186,224,28,1,6,73,79,69,+120,99,101,112,233,120,0,192,106,133,72,64,122,0,90,72,97,165,202,72,+106,110,138,94,115,0,51,123,201,0,50,71,218,224,79,1,4,115,116,100,+101,114,96,99,0,58,113,39,84,154,1,79,46,128,21,68,175,206,222,96,+64,94,247,146,225,224,64,4,0,105,96,138,0,58,113,158,224,63,0,3,+105,110,32,58,96,48,102,63,78,201,201,14,151,29,105,17,224,9,1,128,+30,87,35,64,114,104,142,77,209,191,57,64,15,94,242,145,209,0,58,96,+6,96,150,1,52,51,64,101,129,148,0,75,96,11,129,115,163,180,243,107,+2,90,233,64,100,242,151,4,146,253,194,213,244,120,4,91,218,96,36,0,+51,91,155,64,6,133,209,130,144,123,114,159,162,102,14,128,212,98,56,1,+95,51,108,197,1,95,51,109,232,97,134,191,58,71,162,72,217,122,30,97,+135,224,6,2,119,20,189,255,1,75,52,64,201,129,187,239,96,0,242,110,+1,92,89,227,88,0,241,239,3,113,100,109,87,98,196,224,55,6,0,50,+81,95,224,192,1,242,168,0,165,162,1,95,50,81,145,160,176,226,9,0,+12,112,101,114,102,111,114,109,73,79,32,94,38,99,145,219,64,31,130,22,+2,102,112,102,129,230,129,248,6,102,112,110,101,119,32,58,96,159,82,11,+7,97,100,100,95,70,73,76,69,64,18,178,30,64,18,3,117,116,102,56,+64,18,212,177,1,95,51,117,197,104,241,188,241,0,67,64,31,246,152,0,+245,53,4,153,143,65,40,160,223,128,11,129,90,240,6,1,0,79,82,68,+0,52,169,107,224,23,7,0,57,201,131,224,24,5,91,85,224,23,8,226,+233,1,1,119,43,165,25,1,95,51,221,77,244,162,1,130,169,1,95,50,+98,160,225,94,3,194,32,226,117,8,0,58,98,146,116,92,85,232,64,241,+129,241,64,238,0,50,157,80,92,110,1,58,51,188,134,75,231,0,50,91,+235,128,8,0,55,135,214,128,12,0,56,128,29,137,144,92,145,64,139,126,+212,64,63,219,74,106,29,72,144,1,95,50,92,113,0,58,96,41,89,66,+3,52,54,32,58,96,18,249,145,3,67,41,136,198,98,215,238,167,0,254,+101,1,0,58,64,120,129,175,237,222,0,72,166,169,78,137,77,224,70,0,+120,194,64,183,101,155,201,83,215,251,106,198,0,58,96,30,2,10,65,32,+88,228,154,17,186,16,229,206,2,185,255,96,222,100,4,1,57,52,64,189,+165,86,2,50,57,51,64,13,181,206,98,44,106,178,64,61,1,95,50,92,+193,64,58,129,105,2,35,52,55,64,43,129,94,64,97,130,86,227,51,3,+91,149,0,66,227,100,1,246,211,7,226,3,17,246,12,4,1,95,50,71,+188,246,237,9,224,78,8,96,156,184,96,99,110,2,100,105,114,64,162,129,+167,0,94,66,40,128,17,188,45,65,27,71,162,230,215,2,0,80,97,44,+158,206,161,191,164,224,169,142,65,167,1,95,50,91,127,244,31,1,250,54,+1,1,58,50,187,211,122,150,125,247,96,43,97,91,1,56,53,64,122,129,+119,12,94,71,69,84,84,73,77,69,77,73,76,76,73,64,22,222,107,90,+205,96,2,85,249,94,208,192,87,129,147,101,128,3,48,32,64,75,88,141,+96,245,1,58,50,187,161,228,175,3,0,95,70,210,228,229,1,193,145,64,+218,0,53,205,196,162,28,165,236,247,122,1,164,252,246,161,3,170,65,157,+199,123,230,160,61,228,91,5,244,115,2,224,78,1,224,71,5,229,57,3,+96,187,219,230,233,109,6,3,104,101,97,100,252,254,8,0,75,66,184,188,+13,6,65,46,119,114,105,116,101,65,58,129,222,71,189,225,60,0,188,19,+128,99,252,41,1,104,73,224,2,0,192,30,225,177,0,0,51,224,30,2,+226,80,0,188,1,176,48,0,85,233,96,0,224,2,40,171,4,224,0,6,+134,80,224,1,23,240,165,9,5,70,108,97,103,115,123,241,98,3,224,0,+3,161,156,224,2,40,96,164,224,110,11,7,118,101,114,98,111,115,101,61,+128,112,150,77,0,49,71,125,216,146,224,0,7,224,211,25,224,102,1,86,+66,198,109,224,0,9,224,203,44,224,200,16,4,114,117,110,73,116,224,198,+4,0,50,79,220,224,198,14,224,195,62,224,194,41,224,191,16,5,109,104,+115,100,105,114,225,135,5,1,50,53,75,5,230,53,0,224,0,8,224,195,+59,224,194,38,224,191,16,4,112,97,116,104,115,224,190,10,224,195,1,224,+196,13,224,193,56,224,192,35,224,189,16,4,111,117,116,112,117,226,62,5,+225,125,22,224,181,53,224,180,32,224,177,16,6,108,111,97,100,105,110,103,+226,241,28,224,169,50,224,168,29,224,165,16,4,115,112,101,101,100,224,163,+27,224,160,47,224,159,26,224,156,16,86,211,3,67,97,99,104,228,253,5,+224,160,13,224,157,44,224,156,23,224,153,16,103,2,224,154,30,224,151,41,+224,150,20,224,147,16,6,117,115,101,84,105,99,107,227,227,5,224,145,11,+224,142,38,224,141,17,224,138,16,4,100,111,67,80,80,224,135,23,224,132,+35,224,131,14,224,128,16,5,99,112,112,65,114,103,228,238,35,224,139,32,+224,138,11,224,135,17,224,133,37,224,130,29,224,129,8,224,126,17,5,111,+109,112,114,101,115,226,18,21,224,114,26,224,113,5,224,110,16,6,98,117,+105,108,100,80,107,228,243,7,224,240,16,224,119,23,224,118,2,224,115,16,+74,163,224,114,33,224,111,20,192,110,224,107,16,6,112,107,103,80,97,116,+104,225,207,29,224,104,17,96,103,224,100,16,6,105,110,115,116,97,108,108,+224,211,9,225,181,1,224,88,14,224,77,11,4,116,97,114,103,101,231,55,+36,224,0,14,192,110,64,61,225,49,0,155,137,1,50,55,141,139,91,137,+128,11,0,58,96,6,218,234,107,193,97,15,77,68,224,158,4,6,78,111,+116,104,105,110,103,128,158,241,252,1,2,50,55,51,142,14,1,55,52,248,+228,0,210,31,224,229,11,4,74,117,115,116,32,160,68,110,214,76,246,160,+49,65,22,64,166,0,64,98,22,192,15,88,241,128,15,0,58,96,6,236,+199,2,118,26,0,58,64,122,64,21,79,41,128,117,77,133,0,35,123,201,+0,64,117,150,160,16,128,101,0,58,96,178,236,174,1,224,233,8,2,70,+97,108,182,163,224,24,6,2,84,114,117,214,187,193,78,115,136,161,78,143,+249,64,6,146,117,0,49,91,64,97,18,2,95,50,55,82,124,1,50,55,+141,151,0,85,110,184,224,1,15,238,208,0,224,0,0,0,58,96,62,82,+255,224,138,0,8,118,55,46,48,92,49,48,38,34,64,86,0,54,181,4,+1,50,54,64,135,92,130,2,58,50,54,212,192,1,54,54,66,11,0,48,+178,152,96,6,0,52,96,5,79,33,128,105,0,58,96,51,128,45,79,127,+0,54,130,17,0,85,64,10,193,112,65,234,1,54,51,98,197,0,54,160,+56,1,95,50,80,241,126,73,108,230,128,73,129,139,130,27,88,96,3,64,+95,50,54,92,25,64,61,128,25,241,175,0,130,68,176,25,242,21,10,228,+84,1,208,61,224,47,2,160,110,178,185,2,50,51,52,65,112,240,146,0,+0,58,96,123,150,88,65,168,92,90,1,58,50,65,140,246,108,0,1,50,+53,91,84,246,173,9,1,111,117,111,73,0,58,96,51,246,109,0,4,111,+117,116,32,58,96,50,160,221,246,108,0,245,8,35,149,191,213,7,0,58,+64,135,192,79,88,213,0,80,64,164,64,28,179,164,98,250,1,53,51,147,+135,91,160,96,15,66,31,0,58,96,98,64,157,64,149,129,115,6,65,46,+97,108,108,111,99,64,16,162,224,1,51,50,64,12,129,34,153,81,240,116,+2,1,95,50,68,88,67,186,1,52,57,67,131,66,168,0,58,65,45,128,+145,3,95,50,50,57,224,207,0,64,33,0,58,96,47,210,243,1,50,52,+113,222,1,95,50,65,109,124,145,64,61,64,39,81,185,5,112,117,116,98,+32,58,96,27,151,69,2,52,32,79,64,6,0,53,66,121,150,139,98,66,+0,58,96,70,86,144,0,50,99,205,0,58,96,26,64,15,112,93,0,58,+96,49,96,142,0,83,249,235,0,0,90,160,7,128,9,160,10,243,83,5,+152,157,230,37,1,224,248,5,176,106,2,50,51,50,216,11,114,206,64,237,+132,51,241,103,6,13,66,97,100,32,72,97,110,100,108,101,32,109,111,100,+196,1,65,21,241,0,0,69,217,100,129,113,219,0,90,160,4,147,10,241,+253,2,100,139,0,50,100,135,161,68,0,50,243,180,2,192,75,161,188,1,+55,56,65,65,129,188,3,102,112,50,112,64,13,162,211,1,52,56,64,193,+189,100,224,5,0,149,36,191,169,211,4,179,1,224,6,12,224,42,2,117,+215,148,52,224,42,29,160,28,224,49,10,224,42,15,224,49,10,224,42,22,+224,49,3,185,159,129,161,0,58,96,6,227,136,2,128,77,2,95,50,51,+99,250,0,51,244,186,1,2,95,50,51,117,50,85,62,64,25,195,191,70,+152,1,50,51,103,12,68,197,64,26,197,2,68,73,1,50,51,67,106,96,+128,0,58,96,38,3,10,65,32,82,161,81,0,58,96,28,245,26,2,131,+255,214,74,64,157,0,51,244,136,5,224,72,0,197,1,0,85,245,65,1,+0,73,128,48,129,230,166,215,96,17,129,234,244,141,2,0,58,98,214,245,+146,19,69,222,64,79,162,226,180,103,128,148,148,134,0,64,87,36,98,101,+0,50,198,51,2,50,55,32,119,23,88,138,165,244,188,131,0,85,160,24,+128,254,66,116,1,95,50,103,141,129,137,64,151,64,30,129,12,5,115,101,+113,117,97,108,64,60,128,251,245,101,1,0,50,252,122,3,5,77,72,83,+68,73,82,99,66,121,77,226,255,5,1,58,50,64,7,135,154,128,19,230,+111,2,0,58,96,45,165,25,195,83,215,83,1,95,50,91,2,249,48,21,+251,80,5,1,95,50,72,122,98,95,160,169,217,54,64,177,129,27,1,49,+57,64,208,129,117,13,112,101,101,107,67,65,83,116,114,105,110,103,32,58,+64,26,96,35,1,57,54,103,73,0,58,96,102,227,155,0,133,247,64,133,+0,49,70,69,64,133,130,107,183,11,97,64,96,159,0,58,96,6,6,10,+65,32,116,111,73,110,70,98,188,95,6,94,103,101,116,101,110,118,64,16,+184,119,225,80,0,248,66,6,246,176,3,250,23,4,0,50,91,224,96,97,+226,142,0,228,216,5,3,116,97,105,108,246,64,8,0,65,96,204,194,169,+1,95,50,65,245,131,179,0,50,66,95,0,58,64,66,64,27,70,120,187,+165,2,95,50,57,96,92,91,131,1,95,50,124,60,3,95,49,53,53,224,+56,0,1,49,54,69,91,160,11,0,55,64,183,166,108,187,214,105,136,2,+95,49,51,71,148,160,61,0,51,226,52,3,0,101,94,165,0,58,138,53,+169,108,96,38,0,58,96,6,102,232,254,234,15,6,67,111,110,116,114,111,+108,254,232,11,96,18,3,67,97,108,108,96,87,166,142,188,70,102,109,230,+108,3,64,7,133,206,71,167,166,65,67,163,138,112,0,50,91,105,103,221,+168,157,137,27,0,50,92,109,64,0,131,149,0,58,64,160,64,94,119,102,+64,14,129,235,251,16,13,131,191,251,10,2,188,175,2,83,32,85,225,200,+7,9,109,100,53,67,111,109,98,105,110,101,161,206,134,163,64,143,68,150,+74,85,93,5,1,50,32,68,51,1,95,56,65,37,96,176,91,4,0,80,+120,5,103,35,68,84,228,57,1,196,208,233,111,2,160,235,72,245,96,48,+104,204,124,170,104,173,0,48,187,112,0,95,88,110,1,95,49,91,105,192,+0,0,58,97,33,66,215,9,109,100,53,65,114,114,97,121,32,58,96,57,+130,101,194,219,0,55,192,154,1,95,49,91,248,99,208,231,187,4,231,79,+3,2,95,50,48,77,35,224,46,2,163,120,251,21,1,90,73,227,20,6,+92,171,160,145,226,200,1,188,192,128,210,121,239,0,67,252,107,11,161,248,+130,2,168,118,225,52,0,192,25,168,145,252,175,1,1,52,54,204,6,2,+49,57,51,129,34,3,95,49,56,49,100,55,128,0,229,174,3,133,213,192,+69,232,60,1,64,61,127,150,224,44,2,96,95,188,187,252,238,7,252,207,+2,232,98,4,224,43,10,194,116,229,10,2,96,16,0,58,65,96,226,175,+0,204,153,0,58,96,135,99,182,0,48,68,224,126,48,192,81,129,245,0,+35,64,61,0,95,108,243,97,152,93,9,3,49,54,32,58,96,28,128,57,+65,232,91,148,0,95,92,103,1,95,49,91,186,2,95,49,56,192,79,64,+11,64,33,192,11,68,30,160,11,0,57,76,115,192,23,68,144,96,12,138,+224,97,21,137,16,137,19,66,47,160,2,225,58,6,97,170,128,50,161,237,+165,177,134,42,125,148,0,85,124,157,64,15,157,92,93,55,64,0,96,17,+0,50,128,33,131,60,224,33,7,192,139,0,95,76,133,224,38,16,224,71,+25,2,64,64,83,71,132,142,232,192,84,224,194,0,67,161,0,83,162,121,+96,60,73,21,224,76,16,128,22,99,169,66,135,224,40,16,130,155,192,128,+97,40,2,66,32,95,92,32,224,167,19,129,43,97,160,0,52,97,148,239,+169,11,96,27,224,21,1,96,49,0,58,96,140,224,42,2,160,20,201,17,+239,20,4,0,58,96,113,160,44,64,13,194,159,224,37,6,190,188,225,253,+0,65,41,80,5,66,170,0,49,75,83,0,58,66,83,195,242,131,183,1,+95,49,94,96,70,254,66,123,224,27,11,96,114,190,156,253,41,0,128,174,+190,155,4,114,101,109,32,58,98,204,130,229,0,56,69,210,99,23,100,0,+98,90,104,242,66,185,64,54,128,250,99,171,131,7,161,122,0,58,96,39,+96,26,101,2,164,142,109,169,64,73,113,173,164,95,78,48,167,253,100,234,+69,20,1,55,51,230,30,2,27,92,51,52,38,108,105,98,47,68,97,116,+97,47,73,110,116,101,103,101,114,95,84,121,112,101,46,104,115,64,27,4,+44,52,53,58,49,241,216,0,70,132,100,28,70,50,75,6,1,52,51,228,+170,1,160,30,102,226,64,28,97,86,0,55,67,182,64,19,239,184,0,99,+126,98,148,0,67,99,95,167,55,100,223,64,237,80,111,160,83,173,164,96,+69,128,13,0,79,64,213,0,79,243,131,4,128,29,224,21,3,1,95,49,+94,116,65,49,104,74,97,80,161,73,94,172,0,95,81,10,0,49,66,180,+193,78,168,106,1,54,54,97,96,0,95,81,138,0,58,96,32,7,10,65,+32,97,110,100,32,58,96,55,128,66,81,60,192,33,130,10,0,80,64,31,+129,249,0,75,64,10,129,238,0,65,64,10,208,240,105,42,0,49,64,53,+64,156,98,99,178,104,0,73,64,38,208,168,105,42,0,49,79,148,1,95,+49,79,167,169,42,192,56,73,42,224,68,0,97,201,128,191,178,58,97,224,+111,121,131,112,1,95,49,64,171,64,31,204,27,0,85,132,27,1,95,49,+65,99,135,166,0,80,227,186,1,160,47,224,15,8,1,64,58,64,121,64,+65,127,227,64,14,195,31,65,195,116,26,106,206,113,210,100,67,81,122,224,+68,0,200,3,160,21,160,154,141,149,139,87,96,146,98,35,82,94,64,96,+166,11,3,51,55,32,58,96,19,3,10,65,32,90,64,190,0,58,96,39,+161,105,178,79,65,66,178,64,140,150,96,104,203,111,239,118,6,224,14,5,+192,184,231,109,0,171,127,128,202,0,58,96,6,160,72,203,178,106,70,103,+108,192,42,130,100,210,63,64,42,64,190,1,95,49,82,16,0,58,96,43,+6,10,65,32,47,61,32,58,96,17,132,122,64,38,99,1,143,151,206,13,+1,75,50,174,238,131,79,162,255,0,85,224,20,1,99,238,237,188,5,178,+72,78,87,64,147,70,166,129,81,64,9,96,176,160,77,96,175,192,17,0,+58,96,6,228,200,4,228,210,3,128,59,239,143,2,0,58,96,60,100,185,+1,53,52,64,202,129,134,66,251,178,98,181,50,160,141,234,130,3,9,110,+111,32,109,97,116,99,104,32,97,213,222,96,32,128,174,0,49,64,81,130,+235,75,189,128,11,0,58,96,6,235,189,29,8,120,99,101,112,116,105,111,+110,46,68,189,2,114,110,97,107,179,224,39,1,2,80,97,116,64,22,0,+77,64,128,2,70,97,105,235,209,3,99,105,129,2,0,83,199,234,1,95,+49,118,112,165,46,138,34,163,88,248,31,4,164,122,148,85,1,51,49,244,+252,4,171,212,98,138,179,51,161,28,78,131,162,72,79,100,0,35,80,141,+65,153,119,10,1,48,32,128,15,99,44,168,108,65,38,105,149,0,57,213,+88,224,39,2,161,71,224,235,1,6,39,92,57,50,38,39,39,165,174,193,+92,166,93,224,99,0,98,40,139,222,224,17,3,133,135,234,156,3,224,168,+1,0,64,160,35,133,186,64,156,161,22,97,198,128,158,130,99,247,212,8,+64,146,70,72,160,148,64,0,0,58,96,147,226,123,0,176,175,232,186,6,+166,216,1,95,49,81,98,160,108,97,102,71,253,129,102,171,210,97,132,225,+163,0,118,109,0,95,148,116,114,67,210,65,0,90,64,28,99,12,166,138,+224,163,5,224,160,0,230,73,2,138,11,139,114,116,43,225,22,7,96,0,+5,79,32,80,32,35,55,246,41,3,64,79,0,97,96,79,96,27,0,56,+224,27,7,0,98,224,27,1,79,49,224,28,5,0,102,224,28,2,0,48,+224,28,7,0,110,224,28,2,0,51,224,28,7,110,196,128,28,0,57,224,+27,7,143,192,128,56,0,49,224,28,7,0,118,224,56,2,224,143,8,64,+3,227,52,1,193,193,181,205,69,134,181,201,102,7,66,38,2,95,49,51,+89,81,109,116,64,18,80,128,164,115,181,209,3,95,49,52,49,64,56,0,+54,227,27,1,143,226,225,189,0,96,70,100,15,96,17,0,58,96,6,154,+137,71,132,237,54,0,240,217,0,85,25,75,81,140,187,128,19,121,216,160,+80,132,85,181,139,64,67,226,230,2,249,139,1,192,64,150,241,226,96,8,+64,69,105,143,236,139,0,160,40,226,52,3,224,10,1,96,58,107,27,237,+86,1,96,250,129,28,131,216,69,241,224,74,4,0,58,96,102,237,89,9,+181,238,1,111,114,72,143,181,237,71,99,224,33,2,131,85,4,99,104,114,+32,58,96,120,128,33,0,52,103,181,1,64,58,64,231,64,18,79,240,192,+213,69,228,129,154,180,227,225,197,6,99,223,225,197,0,134,92,0,58,99,+146,4,10,65,32,117,60,70,212,180,241,198,164,0,58,96,61,162,26,180,+213,96,107,0,58,100,44,131,245,0,89,77,135,99,233,133,70,142,140,0,+58,96,146,139,29,0,53,64,47,231,82,2,0,49,84,120,1,95,49,84,+137,0,58,99,123,199,83,180,155,0,61,96,11,241,66,0,96,37,128,165,+252,188,2,68,2,83,156,135,30,101,186,116,169,128,15,130,115,130,110,180,+185,96,23,105,142,78,250,0,58,96,35,170,73,124,156,110,197,64,26,96,+43,199,205,194,123,109,1,160,10,231,211,0,199,175,224,32,0,237,189,0,+229,0,0,246,56,1,97,34,224,65,4,224,64,5,66,207,98,115,104,10,+130,61,245,9,1,196,174,160,169,140,163,180,192,178,102,96,28,161,50,73,+152,0,58,97,31,182,72,218,118,97,59,205,133,128,36,218,155,114,56,64,+100,117,104,84,185,81,57,1,95,49,117,113,64,40,129,131,81,217,213,30,+96,27,170,61,0,66,154,199,0,49,116,141,138,74,64,209,160,26,97,121,+113,166,90,221,96,78,161,127,128,39,1,95,49,69,61,77,224,224,31,0,+129,138,2,110,101,119,213,142,2,76,101,110,64,114,129,19,224,212,5,129,+8,75,167,180,107,129,134,2,115,101,113,103,6,86,182,128,43,1,64,58,+109,129,168,238,180,6,193,136,128,1,113,220,225,159,3,224,20,3,224,17,+8,224,14,5,224,11,2,192,8,110,147,96,209,244,21,1,238,197,5,180,+30,0,79,64,144,182,4,0,56,72,97,0,95,78,246,0,64,192,7,1,+95,57,68,94,115,207,1,95,57,69,77,160,10,76,72,128,10,1,49,48,+72,35,192,11,97,187,83,122,0,58,96,18,123,174,3,111,107,101,87,132,+116,179,147,0,94,86,238,192,18,194,108,173,168,82,20,1,64,95,81,215,+0,58,64,89,160,186,111,13,175,209,178,54,192,49,80,11,160,48,178,58,+65,3,87,58,99,149,123,4,116,44,0,58,178,44,183,11,178,45,6,116,+111,80,116,114,32,58,177,230,239,120,5,176,102,131,8,136,78,72,81,97,+100,67,166,1,64,95,99,83,131,105,0,95,99,74,0,95,110,189,105,185,+240,142,5,176,164,176,142,200,173,0,95,67,192,65,177,128,61,1,67,32,+96,63,0,95,110,173,1,64,58,240,166,0,229,129,0,176,160,82,215,115,+1,72,25,0,58,176,167,5,113,117,111,116,32,58,176,156,226,49,1,226,+53,2,226,92,72,240,230,3,164,122,244,83,1,0,95,80,169,163,147,224,+20,0,163,152,245,68,6,244,66,3,0,58,177,31,64,37,65,11,123,117,+177,23,6,94,102,114,101,101,32,58,177,15,135,128,224,91,5,85,228,150,+34,211,167,245,225,4,191,35,81,25,250,26,4,177,84,236,192,1,64,165,+133,69,96,244,0,39,78,210,224,48,0,151,112,160,97,245,89,1,165,67,+193,62,224,118,3,2,64,95,56,97,255,64,34,133,84,0,55,65,193,65,+32,243,12,0,102,11,177,179,111,39,99,170,0,58,64,56,226,153,0,96,+16,130,3,75,127,0,83,106,234,190,14,128,168,76,31,80,107,65,121,130,+80,224,104,7,128,103,242,219,3,167,254,176,175,68,181,0,58,176,174,96,+199,172,99,66,164,213,218,226,169,7,176,200,248,57,6,8,117,110,100,101,+102,105,110,101,100,73,253,0,58,176,225,243,78,7,176,237,2,95,52,49,+163,172,105,136,105,191,73,122,233,175,12,65,128,233,171,2,157,232,81,90,+0,50,224,37,3,233,140,2,64,37,96,19,96,10,0,95,81,58,0,58,+241,91,1,79,251,0,95,113,84,177,83,0,85,97,203,77,107,113,235,146,+76,0,80,96,7,97,114,225,113,0,0,95,80,76,64,120,78,237,113,76,+96,0,0,58,209,144,0,52,195,167,80,105,224,13,1,70,243,225,43,6,+179,57,14,58,32,117,110,115,117,112,112,111,114,116,101,100,32,119,69,35,+3,115,105,122,101,107,62,86,229,77,72,96,168,194,4,130,175,237,116,3,+242,254,1,194,159,215,198,81,117,129,11,65,81,0,50,192,12,161,78,0,+57,128,231,98,30,177,240,0,105,92,35,177,186,0,115,74,20,177,183,73,+43,177,97,4,115,104,108,32,58,177,96,2,43,32,58,177,92,2,45,32,+58,241,91,1,241,90,0,230,129,5,177,99,130,234,100,221,241,44,0,2,+55,32,95,78,246,0,95,114,200,79,200,0,95,80,34,0,95,80,50,116,+144,1,95,53,235,112,0,1,53,57,160,9,0,58,177,63,131,243,98,252,+132,0,96,37,0,55,131,181,69,151,177,79,224,29,1,224,49,1,224,39,+5,232,179,0,195,138,64,29,6,10,65,32,62,61,32,58,176,203,2,62,+32,58,176,199,74,201,176,199,2,60,32,58,176,124,5,105,99,109,112,32,+58,176,36,106,133,76,245,0,95,78,188,0,58,175,215,74,130,174,204,65,+85,173,21,2,80,32,58,173,20,196,77,164,136,194,97,224,20,11,224,17,+8,224,14,5,224,11,2,192,8,229,200,0,173,86,236,48,5,173,93,4,+110,101,103,32,58,173,61,2,42,32,58,173,1,2,45,32,58,172,101,2,+43,32,58,172,89,224,148,68,0,58,236,161,1,103,146,64,17,225,225,0,+73,188,68,153,66,26,76,75,64,12,198,44,1,64,58,172,185,115,252,172,+178,2,73,32,58,172,159,64,54,66,76,76,117,0,58,172,135,64,29,128,+224,64,9,168,183,7,109,97,108,108,111,99,32,58,172,130,13,73,79,46,+112,101,114,102,111,114,109,73,79,32,58,172,137,224,179,2,0,58,172,122,+2,85,32,58,172,118,224,219,14,0,58,172,124,64,19,0,95,109,15,0,+95,76,118,0,58,172,135,104,47,70,44,0,58,172,140,6,114,97,105,115,+101,32,58,172,140,7,65,46,114,101,97,100,32,58,172,95,13,73,79,46,+103,101,116,65,114,103,82,101,102,32,58,172,93,0,95,70,120,67,63,64,+231,107,3,64,235,172,101,6,73,79,46,62,62,32,58,171,228,0,95,105,+222,128,33,2,95,49,50,199,149,81,8,64,65,89,113,192,9,0,50,71,+104,64,9,0,58,172,1,186,50,109,239,173,18,86,218,107,185,0,58,172,+22,128,35,96,32,115,27,192,32,0,95,150,88,161,168,85,164,128,253,224,+47,7,107,164,96,155,142,56,129,18,117,176,161,45,162,174,0,58,172,20,+118,30,0,58,171,230,130,59,100,91,171,216,233,120,0,69,202,224,11,2,+96,197,101,13,0,58,171,234,96,59,172,209,128,165,0,51,97,196,108,95,+130,110,74,0,129,62,74,150,96,36,179,121,0,95,104,133,73,155,96,21,+2,75,32,58,225,220,1,1,64,58,194,136,0,58,162,125,9,79,46,114,+101,116,117,114,110,32,58,225,212,0,0,62,68,100,128,196,2,80,32,58,+128,187,227,74,47,0,58,227,157,3,226,142,9,240,8,1,130,118,64,200,+1,95,50,111,254,224,0,255,224,0,255,224,0,255,224,0,255,224,0,255,+224,0,255,224,0,255,224,0,255,224,0,18,1,32,125,+};+unsigned char *combexpr = data;+int combexprlen = 105715; #include "mhsffi.h" static struct ffi_entry table[] = { { 0,0 }
− ghc/Compat.hs
@@ -1,64 +0,0 @@--- Copyright 2023 Lennart Augustsson--- See LICENSE file for full license.-{-# OPTIONS_GHC -Wno-orphans #-}-{-# LANGUAGE DataKinds #-}--- Functions for GHC that are defined in the UHS libs.-module Compat(module Compat, Type) where-import Data.Maybe-import Data.List-import Data.Text(Text, append, pack)-import Control.Exception-import GHC.Types-import System.Environment-import System.IO--------- List ----------takeWhileEnd :: forall a . (a -> Bool) -> [a] -> [a]-takeWhileEnd p = reverse . takeWhile p . reverse--stripSuffix :: forall a . Eq a => [a] -> [a] -> Maybe [a]-stripSuffix s t =- case stripPrefix (reverse s) (reverse t) of- Nothing -> Nothing- Just x -> Just (reverse x)--------- IO ----------openFileM :: FilePath -> IOMode -> IO (Maybe Handle)-openFileM path m = do- r <- (try $ openFile path m) :: IO (Either IOError Handle)- case r of- Left _ -> return Nothing- Right h -> return (Just h)--openTmpFile :: String -> IO (String, Handle)-openTmpFile tmplt = do- mtmp <- lookupEnv "TMPDIR"- let tmp = fromMaybe "/tmp" mtmp- res <- try $ openTempFile tmp tmplt- case res of- Right x -> return x- Left (_::SomeException) -> openTempFile "." tmplt--------- Read ----------usingMhs :: Bool-usingMhs = False--_wordSize :: Int-_wordSize = 64--_isWindows :: Bool-_isWindows = False---- This cannot be implemented with GHC.-rnfNoErr :: forall a . a -> ()-rnfNoErr _ = ()---- This cannot be implemented with GHC.-rnfErr :: forall a . a -> ()-rnfErr _ = ()--appendDot :: Text -> Text -> Text-appendDot x y = x `append` pack "." `append` y
ghc/MHSPrelude.hs view
@@ -1,2 +1,63 @@-module MHSPrelude(module Prelude) where+module MHSPrelude(module Prelude, module MHSPrelude, Type) where import Prelude+import Data.Maybe+import Data.List+import Data.Text(Text, append, pack)+import Control.Exception+import GHC.Types+import System.Environment+import System.IO++------- List --------++takeWhileEnd :: forall a . (a -> Bool) -> [a] -> [a]+takeWhileEnd p = reverse . takeWhile p . reverse++stripSuffix :: forall a . Eq a => [a] -> [a] -> Maybe [a]+stripSuffix s t =+ case stripPrefix (reverse s) (reverse t) of+ Nothing -> Nothing+ Just x -> Just (reverse x)++------- IO --------++openFileM :: FilePath -> IOMode -> IO (Maybe Handle)+openFileM path m = do+ r <- (try $ openFile path m) :: IO (Either IOError Handle)+ case r of+ Left _ -> return Nothing+ Right h -> return (Just h)++openTmpFile :: String -> IO (String, Handle)+openTmpFile tmplt = do+ mtmp <- lookupEnv "TMPDIR"+ let tmp = fromMaybe "/tmp" mtmp+ res <- try $ openTempFile tmp tmplt+ case res of+ Right x -> return x+ Left (_::SomeException) -> openTempFile "." tmplt++------- Read --------++usingMhs :: Bool+usingMhs = False++_wordSize :: Int+_wordSize = 64++_isWindows :: Bool+_isWindows = False++-- This cannot be implemented with GHC.+rnfNoErr :: forall a . a -> ()+rnfNoErr _ = ()++-- This cannot be implemented with GHC.+rnfErr :: forall a . a -> ()+rnfErr _ = ()++appendDot :: Text -> Text -> Text+appendDot x y = x `append` pack "." `append` y++wantGMP :: Bool+wantGMP = False
ghc/PrimTable.hs view
@@ -19,10 +19,10 @@ type AnyType = Any -primitive :: String -> Any---primitive s | trace ("primitive " ++ show s) False = undefined-primitive "dynsym" = unsafeCoerce dynsym-primitive s = fromMaybe (error $ "PrimTable.primitive: " ++ s) $ lookup s primOps+_primitive :: String -> Any+--_primitive s | trace ("_primitive " ++ show s) False = undefined+_primitive "dynsym" = unsafeCoerce dynsym+_primitive s = fromMaybe (error $ "PrimTable._primitive: " ++ s) $ lookup s primOps primOps :: [(String, Any)] primOps =@@ -62,6 +62,9 @@ , arithwi "shl" shiftL , arithwi "shr" shiftR , arith "ashr" shiftR+ , arithu "popcount" popCount+ , arithu "clz" countLeadingZeros+ , arithu "ctz" countTrailingZeros , cmp "==" (==) , cmp "/=" (/=) , cmp "<" (<)
+ hugs/Data/Integer.hs view
@@ -0,0 +1,26 @@+-- Copyright 2023 Lennart Augustsson+-- See LICENSE file for full license.+module Data.Integer(+ _integerToIntList,+ _intListToInteger,+ ) where++-- For the combinator file we need a portable way to store+-- the Integer type. We use [Int], with digits in a small base.+integerListBase :: Integer+integerListBase = 32768++-- These two functions return an (opaque) representation of an+-- Integer as [Int].+-- This is used by the compiler to generate Integer literals.+-- First _integerToIntList is used in the compiler to get a list of+-- Int, and the generated code will have a call to _intListToInteger.+_integerToIntList :: Integer -> [Int]+_integerToIntList i = if i < 0 then (-1::Int) : f (-i) else f i+ where f 0 = []+ f i = fromInteger r : f q where (q, r) = quotRem i integerListBase++_intListToInteger :: [Int] -> Integer+_intListToInteger ads@(x : ds) = if x == -1 then - f ds else f ads+ where f = foldr (\ d a -> a * integerListBase + toInteger d) 0+
+ hugs/MHSPrelude.hs view
@@ -0,0 +1,172 @@+-- Copyright 2023 Lennart Augustsson+-- See LICENSE file for full license.+module MHSPrelude(+ module Prelude,+ module MHSPrelude,+-- module Control.Monad.Fail,+ module Data.Monoid,+ module Data.Semigroup,+ (<$>), Applicative(..), (*>),+ ) where+import Hugs.Prelude()+import Prelude hiding(fail)+import qualified Prelude+import Control.Applicative+import Control.Exception(Exception, try)+--import Control.Monad.Fail+import Data.List+import Data.Maybe+import Data.Monoid+import Data.Semigroup+import Data.Text(Text, append, pack)+import Data.Version+import Debug.Trace+import System.IO+import System.Environment++------- List --------++intercalate :: forall a . [a] -> [[a]] -> [a]+intercalate xs xss = concat (intersperse xs xss)++stripPrefix :: forall a . Eq a => [a] -> [a] -> Maybe [a]+stripPrefix = stripPrefixBy (==)++stripPrefixBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> Maybe [a]+stripPrefixBy eq [] s = Just s+stripPrefixBy eq (c:cs) [] = Nothing+stripPrefixBy eq (c:cs) (d:ds) | eq c d = stripPrefixBy eq cs ds+ | otherwise = Nothing++takeWhileEnd :: forall a . (a -> Bool) -> [a] -> [a]+takeWhileEnd p = reverse . takeWhile p . reverse++dropWhileEnd :: (a -> Bool) -> [a] -> [a]+dropWhileEnd p = foldr (\x xs -> if p x && Prelude.null xs then [] else x : xs) []++spanEnd :: (a -> Bool) -> [a] -> ([a], [a])+spanEnd p xs = (dropWhileEnd p xs, takeWhileEnd p xs)++breakEnd :: (a -> Bool) -> [a] -> ([a], [a])+breakEnd p = spanEnd (not . p)++------- Version --------++makeVersion :: [Int] -> Version+makeVersion b = Version b []++------- Debug --------++traceM :: Monad m => String -> m ()+traceM s = do () <- trace s $ return (); return ()++-------++void :: Functor f => f a -> f ()+void = fmap (const ())++asum :: Alternative f => [f a] -> f a+asum [] = empty+asum (a:as) = a <|> asum as+++------- List --------++stripSuffix :: forall a . Eq a => [a] -> [a] -> Maybe [a]+stripSuffix s t =+ case stripPrefix (reverse s) (reverse t) of+ Nothing -> Nothing+ Just x -> Just (reverse x)++------- IO --------++type SomeException = Exception++data TextEncoding = UTF8++displayException :: Exception -> String+displayException = show++utf8 :: TextEncoding+utf8 = UTF8++mkTextEncoding :: String -> IO TextEncoding+mkTextEncoding "UTF-8//ROUNDTRIP" = return UTF8+mkTextEncoding _ = error "unknown text encoding"++-- Always in UTF8 mode+hSetEncoding :: Handle -> TextEncoding -> IO ()+hSetEncoding _ _ = return ()++lookupEnv :: String -> IO (Maybe String)+lookupEnv var = do+ r <- try $ getEnv var+ case r of+ Left _ -> return Nothing+ Right s -> return (Just s)++openFileM :: FilePath -> IOMode -> IO (Maybe Handle)+openFileM path m = do+ r <- (try $ openFile path m)+ case r of+ Left _ -> return Nothing+ Right h -> return (Just h)++splitTmp :: String -> (String, String)+splitTmp tmpl =+ case span (/= '.') (reverse tmpl) of+ (rsuf, "") -> (tmpl, "")+ (rsuf, _:rpre) -> (reverse rpre, '.':reverse rsuf)++-- Sloppy implementation of openTempFile+openTempFile' :: (FilePath -> IOMode -> IO Handle) -> FilePath -> String -> IO (String, Handle)+openTempFile' open tmp tmplt = do+ let (pre, suf) = splitTmp tmplt+ loop n = do+ let fn = tmp ++ "/" ++ pre ++ show n ++ suf+ mh <- openFileM fn ReadMode+ case mh of+ Just h -> do+ hClose h+ loop (n+1 :: Int)+ Nothing -> do+ h <- open fn ReadWriteMode+ return (fn, h)+ loop 0++openTempFile :: FilePath -> String -> IO (String, Handle)+openTempFile = openTempFile' openFile++openTmpFile :: String -> IO (String, Handle)+openTmpFile tmplt = do+ mtmp <- lookupEnv "TMPDIR"+ let tmp = fromMaybe "/tmp" mtmp+ res <- try $ openTempFile tmp tmplt+ case res of+ Right x -> return x+ Left (_::SomeException) -> openTempFile "." tmplt++------- Read --------++usingMhs :: Bool+usingMhs = False++_wordSize :: Int+_wordSize = 64++_isWindows :: Bool+_isWindows = False++-- This cannot be implemented with Hugs.+rnfNoErr :: forall a . a -> ()+rnfNoErr _ = ()++-- This cannot be implemented with Hugs.+rnfErr :: forall a . a -> ()+rnfErr _ = ()++appendDot :: Text -> Text -> Text+appendDot x y = x `append` pack "." `append` y++wantGMP :: Bool+wantGMP = False
+ hugs/MicroHs/Instances.hs view
@@ -0,0 +1,5 @@+module MicroHs.Instances(compiledWithGHC) where++-- TODO: rename to compiledWithMicroHs+compiledWithGHC :: Bool+compiledWithGHC = True
+ hugs/PrimTable.hs view
@@ -0,0 +1,284 @@+module PrimTable(module PrimTable) where+import Control.Exception+import Data.Bits+import Data.Char+import Data.Maybe+import Data.Word+import System.IO+import System.IO.TimeMilli+import Unsafe.Coerce+import GHC.Types(Any)+import Foreign.C.String+import Foreign.C.Types+import Foreign.Marshal.Alloc+import Foreign.Ptr+--import System.Environment+import System.IO.Unsafe+--import Debug.Trace++type AnyType = Any++_primitive :: String -> Any+--primitive s | trace ("_primitive " ++ show s) False = undefined+_primitive "dynsym" = unsafeCoerce dynsym+_primitive s = fromMaybe (error $ "PrimTable._primitive: " ++ s) $ lookup s primOps++primOps :: [(String, Any)]+primOps =+ [ comb "S" (\ f g x -> f x (g x))+ , comb "K" (\ x _y -> x)+ , comb "I" (\ x -> x)+ , comb "B" (\ f g x -> f (g x))+ , comb "C" (\ f g x -> f x g)+ , comb "S'" (\ k f g x -> k (f x) (g x))+ , comb "B'" (\ k f g x -> k f (g x))+ , comb "C'" (\ k f g x -> k (f x) g)+ , comb "A" (\ _x y -> y)+ , comb "U" (\ x y -> y x)+ , comb "Y" (\ f -> let r = f r in r)+ , comb "Z" (\ f g _x -> f g)+ , comb "P" (\ x y f -> f x y)+ , comb "R" (\ x y f -> y f x)+ , comb "O" (\ x y _g f -> f x y)+ , comb "K2" (\ x _y _z -> x)+ , comb "K3" (\ x _y _z _w -> x)+ , comb "K4" (\ x _y _z _w _v -> x)+ , comb "C'B" (\ x y z w -> x z (y w))++ , arith "+" (+)+ , arith "-" (-)+ , arith "*" (*)+ , arith "quot" quot+ , arith "rem" rem+ , arith "subtract" subtract+ , arithu "neg" negate+ , arithu "inv" complement+ , arithw "uquot" quot+ , arithw "urem" rem+ , arithw "and" (.&.)+ , arithw "or" (.|.)+ , arithw "xor" xor+ , arithwi "shl" shiftL+ , arithwi "shr" shiftR+ , arith "ashr" shiftR+ , arithu "popcount" popCount+ , arithu "clz" countLeadingZeros+ , arithu "ctz" countTrailingZeros+ , cmp "==" (==)+ , cmp "/=" (/=)+ , cmp "<" (<)+ , cmp "<=" (<=)+ , cmp ">" (>)+ , cmp ">=" (>=)+ , cmpw "u<" (<)+ , cmpw "u<=" (<=)+ , cmpw "u>" (>)+ , cmpw "u>=" (>=)+ , comb "icmp" (\ x y -> fromOrdering (compare (x::Int) y))++ , comb "scmp" (\ x y -> fromOrdering (compare (toString x) (toString y)))+ , comb "sequal" (\ x y -> fromBool (toString x == toString y))++ , comb "p==" (\ x y -> fromBool ((x :: Ptr ()) == y))+ , comb "pnull" nullPtr+ , comb "pcast" castPtr+ , comb "p+" plusPtr+ , comb "p-" minusPtr++ , farith "f+" (+)+ , farith "f-" (-)+ , farith "f*" (*)+ , farith "f/" (/)+ , farithu "fneg" negate+ , fcmp "f==" (==)+ , fcmp "f/=" (/=)+ , fcmp "f<" (<)+ , fcmp "f<=" (<=)+ , fcmp "f>" (>)+ , fcmp "f>=" (>=)+ , comb "fshow" (fromString . (show :: Double -> String))+ , comb "fread" ((read :: String -> Double) . toString)+ , comb "itof" (fromIntegral :: Int -> Double)++ , comb "seq" seq+ , comb "rnf" rnf+ , comb "error" err+ , comb "ord" ord+ , comb "chr" chr++ , comb "IO.performIO" unsafePerformIO+ , comb "IO.catch" (\ io hdl -> Control.Exception.catch (io :: IO Any) (\ (exn :: Exception) -> hdl (fromString $ takeWhile (/= '\n') $ show exn) :: IO Any))+ , comb "IO.>>=" iobind+ , comb "IO.>>" iothen+ , comb "IO.return" ioret+ , comb "IO.print" ioprint+ , comb "IO.performio" unsafePerformIO+ , comb "IO.serialize" ioserialize+ , comb "IO.deserialize" iodeserialize+ , comb "newCAStringLen" (fmap fromPair . newCAStringLen . toString)+ , comb "IO.getArgRef" iogetargref++ , comb0 "IO.stdin" stdin+ , comb0 "IO.stdout" stdout+ , comb0 "IO.stderr" stderr++ ]+ where+ comb0 n f = (n, unsafeCoerce f)+ comb n f = (n, unsafeCoerce f)+-- comb n f = (n, unsafeCoerce (\ x -> trace (seq x n) (f x)))+ arith :: String -> (Int -> Int -> Int) -> (String, Any)+ arith = comb+ arithw :: String -> (Word -> Word -> Word) -> (String, Any)+ arithw = comb+ arithwi :: String -> (Word -> Int -> Word) -> (String, Any)+ arithwi = comb+ arithu :: String -> (Int -> Int) -> (String, Any)+ arithu = comb+ farith :: String -> (Double -> Double -> Double) -> (String, Any)+ farith = comb+ farithu :: String -> (Double -> Double) -> (String, Any)+ farithu = comb+ cmp :: String -> (Int -> Int -> Bool) -> (String, Any)+ cmp n f = comb n (\ x y -> fromBool (f x y))+ cmpw :: String -> (Word -> Word -> Bool) -> (String, Any)+ cmpw n f = comb n (\ x y -> fromBool (f x y))+ fcmp :: String -> (Double -> Double -> Bool) -> (String, Any)+ fcmp n f = comb n (\ x y -> fromBool (f x y))++ err s = error $ "error: " ++ toString s++ iobind :: IO a -> (a -> IO b) -> IO b+ iobind = (>>=)+ iothen :: IO a -> IO b -> IO b+ iothen = (>>)+ ioret :: a -> IO a+ ioret = return+ -- Can't implement this+ ioprint :: Handle -> a -> IO ()+ ioprint h _ = hPutStrLn h "ghc does not support cprint"+ ioserialize :: Handle -> a -> IO ()+ ioserialize h _ = hPutStrLn h "ghc does not support serialize"+ iodeserialize :: Handle -> IO a+ iodeserialize _ = error "ghc does not support deserialize"++{-+ iogetargs :: IO Any+ iogetargs = do+ args <- getArgs+ return $ fromList $ map fromString args+-}+ iogetargref = error "ghc: no IO.getArgRef"++ -- Can't implement this+ rnf :: a -> ()+ rnf x = seq x ()++fromBool :: Bool -> Any+fromBool False = unsafeCoerce $ \ x _y -> x+fromBool True = unsafeCoerce $ \ _x y -> y++fromOrdering :: Ordering -> (Any -> Any -> Any -> Any)+fromOrdering LT = \ x _y _z -> x+fromOrdering EQ = \ _x y _z -> y+fromOrdering GT = \ _x _y z -> z++fromPair :: (a, b) -> Any+fromPair (x, y) = unsafeCoerce $ \ pair -> pair x y++fromString :: String -> Any+fromString = fromList . map (unsafeCoerce . ord)++fromList :: [Any] -> Any+fromList [] = unsafeCoerce $ \ nil _cons -> nil+fromList (x:xs) = unsafeCoerce $ \ _nil cons -> cons (unsafeCoerce x) (fromList xs)++toList :: Any -> [Int]+toList a = (unsafeCoerce a) [] (\ i is -> i : toList is)++toString :: Any -> String+toString = map chr . toList++dynsym :: Any -> Any+dynsym acfun =+ let s = toString acfun+ in+-- trace ("dynsym: " ++ show s) $+ fromMaybe (error $ "ghc: unimplemented FFI: " ++ s) $ lookup s cops++popCount :: Int -> Int+popCount = undefined++countLeadingZeros :: Int -> Int+countLeadingZeros = undefined++countTrailingZeros :: Int -> Int+countTrailingZeros = undefined++cops :: [(String, Any)]+cops =+ [ comb "getTimeMilli" getTimeMilli+ , comb "fputc" fputc+ , comb "fgetc" fgetc+ , comb "fopen" fopen+ , comb "fclose" fclose+ , comb "putb" putb+ , comb "add_FILE" add_FILE+ , comb "add_utf8" add_utf8+ , comb "free" free+ , comb "exp" (fio exp)+ , comb "log" (fio log)+ , comb "sqrt" (fio sqrt)+ , comb "sin" (fio sin)+ , comb "cos" (fio cos)+ , comb "tan" (fio tan)+ , comb "asin" (fio asin)+ , comb "acos" (fio acos)+ , comb "atan" (fio atan)+ , comb "sinh" (fio sinh)+ , comb "cosh" (fio cosh)+ , comb "tanh" (fio tanh)+ , comb "asinh" (fio asinh)+ , comb "acosh" (fio acosh)+ , comb "atanh" (fio atanh)+ , comb "atan2" (fio2 atan2)+ ]+ where+ comb n f = (n, unsafeCoerce f)++ fio :: (Double -> Double) -> (Double -> IO Double)+ fio f = return . f++ fio2 :: (Double -> Double -> Double) -> (Double -> Double -> IO Double)+ fio2 f = \ x y -> return (f x y)++ add_FILE :: Handle -> IO Handle+ add_FILE h = return h++ add_utf8 :: Handle -> IO Handle+ add_utf8 h = do {-hSetEncoding h utf8;-} return h++ putb :: Int -> Handle -> IO ()+ putb c h = hPutChar h (chr c)++ fputc :: Int -> Handle -> IO Int+ fputc c h = hPutChar h (chr c) >> return 0++ fgetc :: Handle -> IO Int+ fgetc h = handle (\ (_ :: Exception) -> return (-1)) (do c <- hGetChar h; return (ord c))++ fopen :: Ptr CChar -> Ptr CChar -> IO Handle+ fopen name mode = do+ sname <- peekCAString name+ smode <- peekCAString mode+ let hmode =+ case smode of+ "r" -> ReadMode+ "w" -> WriteMode+ "a" -> AppendMode+ "w+" -> ReadWriteMode+ _ -> error "fopen"+ openFile sname hmode++ fclose :: Handle -> IO Int+ fclose h = do hClose h; return 0
+ hugs/System/Compress.hs view
@@ -0,0 +1,4 @@+module System.Compress(compress) where++compress :: String -> String+compress _ = error "compress: not available with hugs"
+ hugs/System/Console/SimpleReadline.hs view
@@ -0,0 +1,14 @@+module System.Console.SimpleReadline(+ getInputLine,+ getInputLineHist,+ getInputLineHistComp,+ ) where++getInputLine :: String -> IO (Maybe String)+getInputLine _ = return Nothing++getInputLineHist :: FilePath -> String -> IO (Maybe String)+getInputLineHist _ _ = return Nothing++getInputLineHistComp :: ((String, String) -> IO [String]) -> FilePath -> String -> IO (Maybe String)+getInputLineHistComp _ _ _ = return Nothing
+ hugs/System/IO/MD5.hs view
@@ -0,0 +1,14 @@+-- Copyright 2023 Lennart Augustsson+-- See LICENSE file for full license.+module System.IO.MD5(MD5CheckSum, md5File, md5Handle) where+import System.IO+import Data.Word++newtype MD5CheckSum = MD5 [Word] -- actually returns 16 bytes+ deriving (Eq, Show)++md5File :: FilePath -> IO (Maybe MD5CheckSum)+md5File _ = return (Just $ MD5 []) -- dummy MD5++md5Handle :: Handle -> IO MD5CheckSum+md5Handle _ = return $ MD5 [] -- dummy MD5
+ hugs/System/IO/Serialize.hs view
@@ -0,0 +1,33 @@+-- Copyright 2024 Lennart Augustsson+-- See LICENSE file for full license.+module System.IO.Serialize(+{-+ hSerialize, hDeserialize,+ writeSerialized,+-}+ writeSerialized,+ writeSerializedCompressed,+ readSerialized,+ ) where+--import System.IO++{-+hSerialize :: forall a . Handle -> a -> IO ()+hSerialize = errghc+hDeserialize :: forall a . Handle -> IO a+hDeserialize = errghc+writeSerialized :: forall a . FilePath -> a -> IO ()+writeSerialized = errghc+-}++writeSerializedCompressed :: FilePath -> a -> IO ()+writeSerializedCompressed = errghc++writeSerialized :: FilePath -> a -> IO ()+writeSerialized = errghc++readSerialized :: FilePath -> IO a+readSerialized = errghc++errghc :: a+errghc = error "System.IO.Serialize: serialization not available with hugs"
+ hugs/System/IO/TimeMilli.hs view
@@ -0,0 +1,6 @@+module System.IO.TimeMilli(getTimeMilli) where+import Data.Time+import Data.Time.Clock.POSIX++getTimeMilli :: IO Int+getTimeMilli = fmap (floor . (1000 *) . toRational . utcTimeToPOSIXSeconds) getCurrentTime
lib/AllOfLib.hs view
@@ -21,8 +21,11 @@ import Data.Bitraversable import Data.Bounded import Data.ByteString+import Data.ByteString.Char8+import Data.ByteString.Lazy.Char8 import Data.Char import Data.Char_Type+import Data.Coerce import Data.Complex import Data.Constraint import Data.Dynamic@@ -76,6 +79,9 @@ import Data.STRef import Data.String import Data.Text+import Data.Text.IO+import Data.Text.Lazy+import Data.Text.Lazy.IO import Data.Traversable import Data.Tuple import Data.Tuple.Instances
lib/Control/DeepSeq.hs view
@@ -1,5 +1,5 @@ module Control.DeepSeq (- NFData(..),+ NFData(..), NFData1(..), NFData2(..), deepseq, force, ($!!),@@ -82,27 +82,39 @@ instance NFData Word64 instance NFData (Proxy a) where rnf Proxy = ()+instance NFData1 Proxy where liftRnf _ Proxy = () instance NFData a => NFData (Ratio a) where rnf x = rnf (numerator x, denominator x) instance NFData a => NFData (Maybe a) where- rnf Nothing = ()- rnf (Just a) = rnf a+ rnf = rnf1+instance NFData1 Maybe where+ liftRnf _ Nothing = ()+ liftRnf rnfa (Just a) = rnfa a instance NFData a => NFData [a] where- rnf = foldr (\ x r -> rnf x `seq` r) ()+ rnf = rnf1+instance NFData1 [] where+ liftRnf rnfa = foldr (\ x r -> rnfa x `seq` r) () instance (NFData a, NFData b) => NFData (Either a b) where- rnf (Left a) = rnf a- rnf (Right b) = rnf b+ rnf = rnf2+instance NFData2 Either where+ liftRnf2 rnfa _ (Left a) = rnfa a+ liftRnf2 _ rnfb (Right b) = rnfb b instance (NFData a) => NFData (Complex a) where- rnf (x :+ y) = rnf x `seq` rnf y+ rnf = rnf1+instance NFData1 Complex where+ liftRnf rnfa (x :+ y) = rnfa x `seq` rnfa y instance NFData a => NFData (NonEmpty a) where- rnf = rnf . toList+ rnf = rnf1+instance NFData1 NonEmpty where+ liftRnf rnfa = liftRnf rnfa . toList +-- Fixed is a newtype over Integer instance NFData (Fixed a) -- rnf = rnf @@ -524,3 +536,21 @@ NFData (a1, a2, a3, a4, a5) where rnf (a1, a2, a3, a4, a5) = rnf a1 `seq` rnf a2 `seq` rnf a3 `seq` rnf a4 `seq` rnf a5++----------------------------------------------------------------------------+-- NFData1 and NFData 2 are not totally compatible with GHC, but they sometimes work.+-- To be compatible, we need QuantifiedConstraints.++class NFData1 f where+ liftRnf :: (a -> ()) -> f a -> ()++class NFData2 p where+ liftRnf2 :: (a -> ()) -> (b -> ()) -> p a b -> ()++rnf1 :: (NFData1 f, NFData a) => f a -> ()+rnf1 = liftRnf rnf++rnf2 :: (NFData2 p, NFData a, NFData b) => p a b -> ()+rnf2 = liftRnf2 rnf rnf++
lib/Control/Exception.hs view
@@ -12,11 +12,13 @@ handle, handleJust, bracket, finally, bracket_, bracketOnError,- + try, throwIO, onException, displaySomeException,+ evaluate,+ mapException, -- ArithException(..), ) where@@ -28,6 +30,9 @@ instance Show SomeException where showsPrec p (SomeException e) = showsPrec p e +-- NOTE: The runtime system knows about this instance.+-- It uses displayException to show an uncaught exception.+-- Any changes here must be reflected in eval.c instance Exception SomeException where toException se = se fromException = Just
lib/Control/Exception/Internal.hs view
@@ -16,10 +16,10 @@ import Text.Show primRaise :: forall a . SomeException -> a-primRaise = primitive "raise"+primRaise = _primitive "raise" primCatch :: forall a . IO a -> (SomeException -> IO a) -> IO a-primCatch = primitive "catch"+primCatch = _primitive "catch" throw :: forall e a. Exception e => e -> a throw e = primRaise (toException e)@@ -41,7 +41,7 @@ -- NOTE: The runtime system knows about this class. -- It uses displayException to show an uncaught exception.--- Any changes here must be refleced in eval.c+-- Any changes here must be reflected in eval.c class (Typeable e, Show e) => Exception e where toException :: e -> SomeException fromException :: SomeException -> Maybe e@@ -54,6 +54,8 @@ ------------------ -- Errors generated by the compiler+-- NOTE: Do not change the names or locations of these definitions.+-- The compiler knows about them. newtype PatternMatchFail = PatternMatchFail String deriving (Typeable) newtype NoMethodError = NoMethodError String deriving (Typeable)
lib/Control/Monad.hs view
@@ -32,6 +32,8 @@ liftM, liftM2, liftM3,+ liftM4,+ liftM5, ap, ) where import Prelude() -- do not import Prelude@@ -171,6 +173,10 @@ liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) } liftM3 :: forall m r a1 a2 a3 . (Monad m) => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r liftM3 f m1 m2 m3 = do { x1 <- m1; x2 <- m2; x3 <- m3; return (f x1 x2 x3) }+liftM4 :: forall m r a1 a2 a3 a4 . (Monad m) => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r+liftM4 f m1 m2 m3 m4 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; return (f x1 x2 x3 x4) }+liftM5 :: forall m r a1 a2 a3 a4 a5 . (Monad m) => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r+liftM5 f m1 m2 m3 m4 m5 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; x5 <- m5; return (f x1 x2 x3 x4 x5) } ap :: forall m a b . Monad m => m (a -> b) -> m a -> m b ap f a = do@@ -180,14 +186,14 @@ ----- -instance forall a . Functor ((->) a) where+instance Functor ((->) a) where fmap = (.) -instance forall a . Applicative ((->) a) where+instance Applicative ((->) a) where pure = const f <*> g = \ a -> f a (g a) -instance forall a . Monad ((->) a) where+instance Monad ((->) a) where x >>= y = \ z -> y (x z) z instance Monad Dual where
lib/Data/Array.hs view
@@ -43,8 +43,8 @@ instance (Ix a, Eq b) => Eq (Array a b) where (==) (Array b1 _ a1) (Array b2 _ a2) = b1 == b2 && primArrEQ a1 a2 -instance (Ix a, Ord b) => Ord (Array a b) where- compare = undefined+instance (Ix a, Ord b) => Ord (Array a b) where+ compare arr1 arr2 = compare (assocs arr1) (assocs arr2) instance (Ix a, Show a, Show b) => Show (Array a b) where showsPrec p a =
lib/Data/Bits.hs view
@@ -93,17 +93,44 @@ w = finiteBitSize x +bitDefault :: (Bits a, Num a) => Int -> a+bitDefault i = 1 `shiftL` i++testBitDefault :: (Bits a, Num a) => a -> Int -> Bool+testBitDefault x i = (x .&. bit i) /= 0++popCountDefault :: (Bits a, Num a) => a -> Int+popCountDefault = go 0+ where+ go c 0 = c+ go c w = go (c + 1) (w .&. (w - 1)) -- clear the least significant bit++_overflowError :: a+_overflowError = error "arithmetic overflow"+ instance Bits Int where (.&.) = primIntAnd (.|.) = primIntOr xor = primIntXor complement = primIntInv- shiftL = primIntShl- shiftR = primIntShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= _wordSize = 0+ | otherwise = x `primIntShl` i+ unsafeShiftL = primIntShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= _wordSize = 0+ | otherwise = x `primIntShr` i+ unsafeShiftR = primIntShr bitSizeMaybe _ = Just _wordSize bitSize _ = _wordSize- bit n = primIntShl 1 n+ bit = bitDefault+ testBit = testBitDefault+ popCount = primIntPopcount zeroBits = 0 instance FiniteBits Int where finiteBitSize _ = _wordSize+ countLeadingZeros = primIntClz+ countTrailingZeros = primIntCtz
lib/Data/ByteString.hs view
@@ -172,14 +172,17 @@ type StrictByteString = ByteString primBS2FPtr :: ByteString -> ForeignPtr Char-primBS2FPtr = primitive "I" -- same representation+primBS2FPtr = _primitive "I" -- same representation bsUnimp :: String -> a bsUnimp s = P.error $ "Data.ByteString." P.++ s P.++ " unimplemented" ----------------------------------------- +fromStrict :: ByteString -> a fromStrict = bsUnimp "fromStrict"++toStrict :: a -> ByteString toStrict = bsUnimp "toStrict" fromFilePath :: FilePath -> IO ByteString@@ -220,9 +223,6 @@ unsnoc :: ByteString -> Maybe (ByteString, Word8) unsnoc bs | null bs = Nothing | otherwise = Just (init bs, last bs)--null :: ByteString -> Bool-null bs = length bs == 0 map :: (Word8 -> Word8) -> ByteString -> ByteString map f = pack . P.map f . unpack
+ lib/Data/ByteString/Char8.hs view
@@ -0,0 +1,325 @@+module Data.ByteString.Char8(module Data.ByteString.Char8) where+import qualified Data.ByteString as B+import Data.Coerce+import Data.List.NonEmpty+import Data.Word(Word8)+import Foreign.C.String(CString, CStringLen)+import System.IO(Handle)++newtype ByteString = BS B.ByteString+ deriving (Eq, Ord)++fromFilePath :: FilePath -> IO ByteString+fromFilePath = coerce B.fromFilePath++toFilePath :: ByteString -> IO FilePath+toFilePath = coerce B.toFilePath++cons :: Char -> ByteString -> ByteString+cons = coerce B.cons++snoc :: ByteString -> Char -> ByteString+snoc = coerce B.snoc++head :: ByteString -> Char+head = coerce B.head++tail :: ByteString -> ByteString+tail = coerce B.tail++uncons :: ByteString -> Maybe (Char, ByteString)+uncons = coerce B.uncons++last :: ByteString -> Char+last = coerce B.last++init :: ByteString -> ByteString+init = coerce B.init++unsnoc :: ByteString -> Maybe (ByteString, Char)+unsnoc = coerce B.unsnoc++null :: ByteString -> Bool+null = coerce B.null++map :: (Char -> Char) -> ByteString -> ByteString+map = coerce B.map++reverse :: ByteString -> ByteString+reverse = coerce B.reverse++intersperse :: Char -> ByteString -> ByteString+intersperse = coerce B.intersperse++transpose :: [ByteString] -> [ByteString]+transpose = coerce B.transpose++foldl :: (a -> Char -> a) -> a -> ByteString -> a+foldl f z x = B.foldl (coerce f) z (coerce x)++foldl' :: (a -> Char -> a) -> a -> ByteString -> a+foldl' f z x = B.foldl' (coerce f) z (coerce x)++foldr :: (Char -> a -> a) -> a -> ByteString -> a+foldr f z x = B.foldr (coerce f) z (coerce x)++foldr' :: (Char -> a -> a) -> a -> ByteString -> a+foldr' f z x = B.foldr' (coerce f) z (coerce x)++foldl1 :: (Char -> Char -> Char) -> ByteString -> Char+foldl1 = coerce B.foldl1++foldl1' :: (Char -> Char -> Char) -> ByteString -> Char+foldl1' = coerce B.foldl1'++foldr1 :: (Char -> Char -> Char) -> ByteString -> Char+foldr1 = coerce B.foldr1++foldr1' :: (Char -> Char -> Char) -> ByteString -> Char+foldr1' = coerce B.foldr1'++concat :: [ByteString] -> ByteString+concat = coerce B.concat++concatMap :: (Char -> ByteString) -> ByteString -> ByteString+concatMap = coerce B.concatMap++any :: (Char -> Bool) -> ByteString -> Bool+any = coerce B.any++all :: (Char -> Bool) -> ByteString -> Bool+all = coerce B.all++maximum :: ByteString -> Char+maximum = coerce B.maximum++minimum :: ByteString -> Char+minimum = coerce B.minimum++mapAccumL :: (acc -> Char -> (acc, Char)) -> acc -> ByteString -> (acc, ByteString)+mapAccumL f s x = coerce (B.mapAccumL (coerce f) s (coerce x))++mapAccumR :: (acc -> Char -> (acc, Char)) -> acc -> ByteString -> (acc, ByteString)+mapAccumR f s x = coerce (B.mapAccumR (coerce f) s (coerce x))++scanl1 :: (Char -> Char -> Char) -> ByteString -> ByteString+scanl1 = coerce B.scanl1++scanr1 :: (Char -> Char -> Char) -> ByteString -> ByteString+scanr1 = coerce B.scanr1++replicate :: Int -> Char -> ByteString+replicate = coerce B.replicate++unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString+unfoldr f a = coerce (B.unfoldr (coerce f) a)++unfoldrN :: Int -> (a -> Maybe (Char, a)) -> a -> (ByteString, Maybe a)+unfoldrN n f a = coerce (B.unfoldrN n (coerce f) a)++take :: Int -> ByteString -> ByteString+take = coerce B.take++takeEnd :: Int -> ByteString -> ByteString+takeEnd = coerce B.takeEnd++drop :: Int -> ByteString -> ByteString+drop = coerce B.drop++dropEnd :: Int -> ByteString -> ByteString+dropEnd = coerce B.dropEnd++splitAt :: Int -> ByteString -> (ByteString, ByteString)+splitAt = coerce B.splitAt++takeWhile :: (Char -> Bool) -> ByteString -> ByteString+takeWhile = coerce B.takeWhile++takeWhileEnd :: (Char -> Bool) -> ByteString -> ByteString+takeWhileEnd = coerce B.takeWhileEnd++dropWhile :: (Char -> Bool) -> ByteString -> ByteString+dropWhile = coerce B.dropWhile++dropWhileEnd :: (Char -> Bool) -> ByteString -> ByteString+dropWhileEnd = coerce B.dropWhileEnd++break :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+break = coerce B.break++breakEnd :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+breakEnd = coerce B.breakEnd++span :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+span = coerce B.span++spanEnd :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+spanEnd = coerce B.spanEnd++splitWith :: (Char -> Bool) -> ByteString -> [ByteString]+splitWith = coerce B.splitWith++split :: Char -> ByteString -> [ByteString]+split = coerce B.split++group :: ByteString -> [ByteString]+group = coerce B.group++groupBy :: (Char -> Char -> Bool) -> ByteString -> [ByteString]+groupBy = coerce B.groupBy++intercalate :: ByteString -> [ByteString] -> ByteString+intercalate = coerce B.intercalate++index :: ByteString -> Int -> Char+index = coerce B.index++indexMaybe :: ByteString -> Int -> Maybe Char+indexMaybe = coerce B.indexMaybe++(!?) :: ByteString -> Int -> Maybe Char+(!?) = coerce (B.!?)++elemIndex :: Char -> ByteString -> Maybe Int+elemIndex = coerce B.elemIndex++elemIndexEnd :: Char -> ByteString -> Maybe Int+elemIndexEnd = coerce B.elemIndexEnd++elemIndices :: Char -> ByteString -> [Int]+elemIndices = coerce B.elemIndices++count :: Char -> ByteString -> Int+count = coerce B.count++findIndex :: (Char -> Bool) -> ByteString -> Maybe Int+findIndex = coerce B.findIndex++findIndexEnd :: (Char -> Bool) -> ByteString -> Maybe Int+findIndexEnd = coerce B.findIndexEnd++findIndices :: (Char -> Bool) -> ByteString -> [Int]+findIndices = coerce B.findIndices++elem :: Char -> ByteString -> Bool+elem = coerce B.elem++notElem :: Char -> ByteString -> Bool+notElem = coerce B.notElem++filter :: (Char -> Bool) -> ByteString -> ByteString+filter = coerce B.filter++find :: (Char -> Bool) -> ByteString -> Maybe Char+find = coerce B.find++partition :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+partition = coerce B.partition++isPrefixOf :: ByteString -> ByteString -> Bool+isPrefixOf = coerce B.isPrefixOf++stripPrefix :: ByteString -> ByteString -> Maybe ByteString+stripPrefix = coerce B.stripPrefix++isSuffixOf :: ByteString -> ByteString -> Bool+isSuffixOf = coerce B.isSuffixOf++stripSuffix :: ByteString -> ByteString -> Maybe ByteString+stripSuffix = coerce B.stripSuffix++isInfixOf :: ByteString -> ByteString -> Bool+isInfixOf = coerce B.isInfixOf++isValidUtf8 :: ByteString -> Bool+isValidUtf8 = coerce B.isValidUtf8++breakSubstring :: ByteString -> ByteString -> (ByteString,ByteString)+breakSubstring = coerce B.breakSubstring++zip :: ByteString -> ByteString -> [(Char,Char)]+zip = coerce B.zip++zipWith :: (Char -> Char -> a) -> ByteString -> ByteString -> [a]+zipWith f x y = B.zipWith (coerce f) (coerce x) (coerce y)++packZipWith :: (Char -> Char -> Char) -> ByteString -> ByteString -> ByteString+packZipWith = coerce B.packZipWith++unzip :: [(Char,Char)] -> (ByteString,ByteString)+unzip = coerce B.unzip++inits :: ByteString -> [ByteString]+inits = coerce B.inits++initsNE :: ByteString -> NonEmpty ByteString+initsNE = coerce B.initsNE++tails :: ByteString -> [ByteString]+tails = coerce B.tails++tailsNE :: ByteString -> NonEmpty ByteString+tailsNE = coerce B.tailsNE++sort :: ByteString -> ByteString+sort = coerce B.sort++useAsCString :: ByteString -> (CString -> IO a) -> IO a+useAsCString x = B.useAsCString (coerce x)++useAsCStringLen :: ByteString -> (CStringLen -> IO a) -> IO a+useAsCStringLen x = B.useAsCStringLen (coerce x)++packCString :: CString -> IO ByteString+packCString = coerce B.packCString++packCStringLen :: CStringLen -> IO ByteString+packCStringLen = coerce B.packCStringLen++copy :: ByteString -> ByteString+copy = coerce B.copy++getLine :: IO ByteString+getLine = coerce B.getLine++hGetLine :: Handle -> IO ByteString+hGetLine = coerce B.hGetLine++hPut :: Handle -> ByteString -> IO ()+hPut = coerce B.hPut++hPutNonBlocking :: Handle -> ByteString -> IO ByteString+hPutNonBlocking = coerce B.hPutNonBlocking++hPutStr :: Handle -> ByteString -> IO ()+hPutStr = coerce B.hPutStr++putStr :: ByteString -> IO ()+putStr = coerce B.putStr++hGet :: Handle -> Int -> IO ByteString+hGet = coerce B.hGet++hGetNonBlocking :: Handle -> Int -> IO ByteString+hGetNonBlocking = coerce B.hGetNonBlocking++hGetSome :: Handle -> Int -> IO ByteString+hGetSome = coerce B.hGetSome++hGetContents :: Handle -> IO ByteString+hGetContents = coerce B.hGetContents++getContents :: IO ByteString+getContents = coerce B.getContents++interact :: (ByteString -> ByteString) -> IO ()+interact = coerce B.interact++readFile :: FilePath -> IO ByteString+readFile = coerce B.readFile++writeFile :: FilePath -> ByteString -> IO ()+writeFile = coerce B.writeFile++appendFile :: FilePath -> ByteString -> IO ()+appendFile = coerce B.appendFile
lib/Data/ByteString/Internal.hs view
@@ -5,31 +5,31 @@ data ByteString -- primitive type primBSappend :: ByteString -> ByteString -> ByteString-primBSappend = primitive "bs++"+primBSappend = _primitive "bs++" primBSappend3 :: ByteString -> ByteString -> ByteString -> ByteString-primBSappend3 = primitive "bs+++"+primBSappend3 = _primitive "bs+++" primBSEQ :: ByteString -> ByteString -> Bool-primBSEQ = primitive "bs=="+primBSEQ = _primitive "bs==" primBSNE :: ByteString -> ByteString -> Bool-primBSNE = primitive "bs/="+primBSNE = _primitive "bs/=" primBSLT :: ByteString -> ByteString -> Bool-primBSLT = primitive "bs<"+primBSLT = _primitive "bs<" primBSLE :: ByteString -> ByteString -> Bool-primBSLE = primitive "bs<="+primBSLE = _primitive "bs<=" primBSGT :: ByteString -> ByteString -> Bool-primBSGT = primitive "bs>"+primBSGT = _primitive "bs>" primBSGE :: ByteString -> ByteString -> Bool-primBSGE = primitive "bs>="+primBSGE = _primitive "bs>=" primBScmp :: ByteString -> ByteString -> Ordering-primBScmp = primitive "bscmp"+primBScmp = _primitive "bscmp" primBSpack :: [Word8] -> ByteString-primBSpack = primitive "bspack"+primBSpack = _primitive "bspack" primBSunpack :: ByteString -> [Word8]-primBSunpack = primitive "bsunpack"+primBSunpack = _primitive "bsunpack" primBSlength :: ByteString -> Int-primBSlength = primitive "bslength"+primBSlength = _primitive "bslength" primBSsubstr :: ByteString -> Int -> Int -> ByteString-primBSsubstr = primitive "bssubstr"+primBSsubstr = _primitive "bssubstr" ----------------------------------------- @@ -87,3 +87,5 @@ unpack :: ByteString -> [Word8] unpack = primBSunpack +null :: ByteString -> Bool+null bs = length bs == 0
+ lib/Data/ByteString/Lazy/Char8.hs view
@@ -0,0 +1,325 @@+module Data.ByteString.Lazy.Char8(module Data.ByteString.Lazy.Char8) where+import qualified Data.ByteString as B+import Data.Coerce+import Data.List.NonEmpty+import Data.Word(Word8)+import Foreign.C.String(CString, CStringLen)+import System.IO(Handle)++newtype ByteString = BS B.ByteString+ deriving (Eq, Ord)++fromFilePath :: FilePath -> IO ByteString+fromFilePath = coerce B.fromFilePath++toFilePath :: ByteString -> IO FilePath+toFilePath = coerce B.toFilePath++cons :: Char -> ByteString -> ByteString+cons = coerce B.cons++snoc :: ByteString -> Char -> ByteString+snoc = coerce B.snoc++head :: ByteString -> Char+head = coerce B.head++tail :: ByteString -> ByteString+tail = coerce B.tail++uncons :: ByteString -> Maybe (Char, ByteString)+uncons = coerce B.uncons++last :: ByteString -> Char+last = coerce B.last++init :: ByteString -> ByteString+init = coerce B.init++unsnoc :: ByteString -> Maybe (ByteString, Char)+unsnoc = coerce B.unsnoc++null :: ByteString -> Bool+null = coerce B.null++map :: (Char -> Char) -> ByteString -> ByteString+map = coerce B.map++reverse :: ByteString -> ByteString+reverse = coerce B.reverse++intersperse :: Char -> ByteString -> ByteString+intersperse = coerce B.intersperse++transpose :: [ByteString] -> [ByteString]+transpose = coerce B.transpose++foldl :: (a -> Char -> a) -> a -> ByteString -> a+foldl f z x = B.foldl (coerce f) z (coerce x)++foldl' :: (a -> Char -> a) -> a -> ByteString -> a+foldl' f z x = B.foldl' (coerce f) z (coerce x)++foldr :: (Char -> a -> a) -> a -> ByteString -> a+foldr f z x = B.foldr (coerce f) z (coerce x)++foldr' :: (Char -> a -> a) -> a -> ByteString -> a+foldr' f z x = B.foldr' (coerce f) z (coerce x)++foldl1 :: (Char -> Char -> Char) -> ByteString -> Char+foldl1 = coerce B.foldl1++foldl1' :: (Char -> Char -> Char) -> ByteString -> Char+foldl1' = coerce B.foldl1'++foldr1 :: (Char -> Char -> Char) -> ByteString -> Char+foldr1 = coerce B.foldr1++foldr1' :: (Char -> Char -> Char) -> ByteString -> Char+foldr1' = coerce B.foldr1'++concat :: [ByteString] -> ByteString+concat = coerce B.concat++concatMap :: (Char -> ByteString) -> ByteString -> ByteString+concatMap = coerce B.concatMap++any :: (Char -> Bool) -> ByteString -> Bool+any = coerce B.any++all :: (Char -> Bool) -> ByteString -> Bool+all = coerce B.all++maximum :: ByteString -> Char+maximum = coerce B.maximum++minimum :: ByteString -> Char+minimum = coerce B.minimum++mapAccumL :: (acc -> Char -> (acc, Char)) -> acc -> ByteString -> (acc, ByteString)+mapAccumL f s x = coerce (B.mapAccumL (coerce f) s (coerce x))++mapAccumR :: (acc -> Char -> (acc, Char)) -> acc -> ByteString -> (acc, ByteString)+mapAccumR f s x = coerce (B.mapAccumR (coerce f) s (coerce x))++scanl1 :: (Char -> Char -> Char) -> ByteString -> ByteString+scanl1 = coerce B.scanl1++scanr1 :: (Char -> Char -> Char) -> ByteString -> ByteString+scanr1 = coerce B.scanr1++replicate :: Int -> Char -> ByteString+replicate = coerce B.replicate++unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString+unfoldr f a = coerce (B.unfoldr (coerce f) a)++unfoldrN :: Int -> (a -> Maybe (Char, a)) -> a -> (ByteString, Maybe a)+unfoldrN n f a = coerce (B.unfoldrN n (coerce f) a)++take :: Int -> ByteString -> ByteString+take = coerce B.take++takeEnd :: Int -> ByteString -> ByteString+takeEnd = coerce B.takeEnd++drop :: Int -> ByteString -> ByteString+drop = coerce B.drop++dropEnd :: Int -> ByteString -> ByteString+dropEnd = coerce B.dropEnd++splitAt :: Int -> ByteString -> (ByteString, ByteString)+splitAt = coerce B.splitAt++takeWhile :: (Char -> Bool) -> ByteString -> ByteString+takeWhile = coerce B.takeWhile++takeWhileEnd :: (Char -> Bool) -> ByteString -> ByteString+takeWhileEnd = coerce B.takeWhileEnd++dropWhile :: (Char -> Bool) -> ByteString -> ByteString+dropWhile = coerce B.dropWhile++dropWhileEnd :: (Char -> Bool) -> ByteString -> ByteString+dropWhileEnd = coerce B.dropWhileEnd++break :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+break = coerce B.break++breakEnd :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+breakEnd = coerce B.breakEnd++span :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+span = coerce B.span++spanEnd :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+spanEnd = coerce B.spanEnd++splitWith :: (Char -> Bool) -> ByteString -> [ByteString]+splitWith = coerce B.splitWith++split :: Char -> ByteString -> [ByteString]+split = coerce B.split++group :: ByteString -> [ByteString]+group = coerce B.group++groupBy :: (Char -> Char -> Bool) -> ByteString -> [ByteString]+groupBy = coerce B.groupBy++intercalate :: ByteString -> [ByteString] -> ByteString+intercalate = coerce B.intercalate++index :: ByteString -> Int -> Char+index = coerce B.index++indexMaybe :: ByteString -> Int -> Maybe Char+indexMaybe = coerce B.indexMaybe++(!?) :: ByteString -> Int -> Maybe Char+(!?) = coerce (B.!?)++elemIndex :: Char -> ByteString -> Maybe Int+elemIndex = coerce B.elemIndex++elemIndexEnd :: Char -> ByteString -> Maybe Int+elemIndexEnd = coerce B.elemIndexEnd++elemIndices :: Char -> ByteString -> [Int]+elemIndices = coerce B.elemIndices++count :: Char -> ByteString -> Int+count = coerce B.count++findIndex :: (Char -> Bool) -> ByteString -> Maybe Int+findIndex = coerce B.findIndex++findIndexEnd :: (Char -> Bool) -> ByteString -> Maybe Int+findIndexEnd = coerce B.findIndexEnd++findIndices :: (Char -> Bool) -> ByteString -> [Int]+findIndices = coerce B.findIndices++elem :: Char -> ByteString -> Bool+elem = coerce B.elem++notElem :: Char -> ByteString -> Bool+notElem = coerce B.notElem++filter :: (Char -> Bool) -> ByteString -> ByteString+filter = coerce B.filter++find :: (Char -> Bool) -> ByteString -> Maybe Char+find = coerce B.find++partition :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)+partition = coerce B.partition++isPrefixOf :: ByteString -> ByteString -> Bool+isPrefixOf = coerce B.isPrefixOf++stripPrefix :: ByteString -> ByteString -> Maybe ByteString+stripPrefix = coerce B.stripPrefix++isSuffixOf :: ByteString -> ByteString -> Bool+isSuffixOf = coerce B.isSuffixOf++stripSuffix :: ByteString -> ByteString -> Maybe ByteString+stripSuffix = coerce B.stripSuffix++isInfixOf :: ByteString -> ByteString -> Bool+isInfixOf = coerce B.isInfixOf++isValidUtf8 :: ByteString -> Bool+isValidUtf8 = coerce B.isValidUtf8++breakSubstring :: ByteString -> ByteString -> (ByteString,ByteString)+breakSubstring = coerce B.breakSubstring++zip :: ByteString -> ByteString -> [(Char,Char)]+zip = coerce B.zip++zipWith :: (Char -> Char -> a) -> ByteString -> ByteString -> [a]+zipWith f x y = B.zipWith (coerce f) (coerce x) (coerce y)++packZipWith :: (Char -> Char -> Char) -> ByteString -> ByteString -> ByteString+packZipWith = coerce B.packZipWith++unzip :: [(Char,Char)] -> (ByteString,ByteString)+unzip = coerce B.unzip++inits :: ByteString -> [ByteString]+inits = coerce B.inits++initsNE :: ByteString -> NonEmpty ByteString+initsNE = coerce B.initsNE++tails :: ByteString -> [ByteString]+tails = coerce B.tails++tailsNE :: ByteString -> NonEmpty ByteString+tailsNE = coerce B.tailsNE++sort :: ByteString -> ByteString+sort = coerce B.sort++useAsCString :: ByteString -> (CString -> IO a) -> IO a+useAsCString x = B.useAsCString (coerce x)++useAsCStringLen :: ByteString -> (CStringLen -> IO a) -> IO a+useAsCStringLen x = B.useAsCStringLen (coerce x)++packCString :: CString -> IO ByteString+packCString = coerce B.packCString++packCStringLen :: CStringLen -> IO ByteString+packCStringLen = coerce B.packCStringLen++copy :: ByteString -> ByteString+copy = coerce B.copy++getLine :: IO ByteString+getLine = coerce B.getLine++hGetLine :: Handle -> IO ByteString+hGetLine = coerce B.hGetLine++hPut :: Handle -> ByteString -> IO ()+hPut = coerce B.hPut++hPutNonBlocking :: Handle -> ByteString -> IO ByteString+hPutNonBlocking = coerce B.hPutNonBlocking++hPutStr :: Handle -> ByteString -> IO ()+hPutStr = coerce B.hPutStr++putStr :: ByteString -> IO ()+putStr = coerce B.putStr++hGet :: Handle -> Int -> IO ByteString+hGet = coerce B.hGet++hGetNonBlocking :: Handle -> Int -> IO ByteString+hGetNonBlocking = coerce B.hGetNonBlocking++hGetSome :: Handle -> Int -> IO ByteString+hGetSome = coerce B.hGetSome++hGetContents :: Handle -> IO ByteString+hGetContents = coerce B.hGetContents++getContents :: IO ByteString+getContents = coerce B.getContents++interact :: (ByteString -> ByteString) -> IO ()+interact = coerce B.interact++readFile :: FilePath -> IO ByteString+readFile = coerce B.readFile++writeFile :: FilePath -> ByteString -> IO ()+writeFile = coerce B.writeFile++appendFile :: FilePath -> ByteString -> IO ()+appendFile = coerce B.appendFile
lib/Data/Char.hs view
@@ -87,6 +87,12 @@ isAscii :: Char -> Bool isAscii c = c <= '\127' +isControl :: Char -> Bool+isControl c = c <= '\31' || c == '\127'++isLetter :: Char -> Bool+isLetter = isAlpha+ digitToInt :: Char -> Int digitToInt c | (primCharLE '0' c) && (primCharLE c '9') = ord c - ord '0' | (primCharLE 'a' c) && (primCharLE c 'f') = ord c - (ord 'a' - 10)
+ lib/Data/Coerce.hs view
@@ -0,0 +1,9 @@+module Data.Coerce(Coercible, coerce) where+import Prelude()+import Primitives++type Coercible :: forall k . k -> k -> Constraint+class Coercible a b++coerce :: forall a b . Coercible a b => a -> b+coerce = primUnsafeCoerce
lib/Data/Complex.hs view
@@ -6,10 +6,10 @@ data Complex a = !a :+ !a deriving(Typeable) -instance forall a . Eq a => Eq (Complex a) where+instance Eq a => Eq (Complex a) where (x :+ y) == (x' :+ y') = x == x' && y == y' -- parser bug -instance forall a . Show a => Show (Complex a) where+instance Show a => Show (Complex a) where show (x :+ y) = show x ++ " :+ " ++ show y realPart :: forall a . Complex a -> a@@ -46,7 +46,7 @@ | otherwise = atan2 y x -instance forall a . (RealFloat a) => Num (Complex a) where+instance (RealFloat a) => Num (Complex a) where (x:+y) + (x':+y') = (x+x') :+ (y+y') (x:+y) - (x':+y') = (x-x') :+ (y-y') (x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x')@@ -57,7 +57,7 @@ | otherwise = x/r :+ y/r where r = magnitude z fromInteger n = fromInteger n :+ 0 -instance forall a . (RealFloat a) => Fractional (Complex a) where+instance (RealFloat a) => Fractional (Complex a) where (x:+y) / (x':+y') = (x*x''+y*y'') / d :+ (y*x''-x*y'') / d where x'' = scaleFloat k x' y'' = scaleFloat k y'@@ -66,7 +66,7 @@ fromRational a = fromRational a :+ 0 -instance forall a . (RealFloat a) => Floating (Complex a) where+instance (RealFloat a) => Floating (Complex a) where pi = pi :+ 0 exp (x:+y) = expx * cos y :+ expx * sin y where expx = exp x
lib/Data/Constraint.hs view
@@ -10,7 +10,7 @@ type Dict :: Constraint -> Type data Dict c = c => Dict -instance forall c . Show (Dict c) where+instance Show (Dict c) where showsPrec _ Dict = showString "Dict" withDict :: forall c r . Dict c -> (c => r) -> r
lib/Data/Either.hs view
@@ -28,20 +28,20 @@ isRight (Left _) = False isRight (Right _) = True -instance forall a b . (Show a, Show b) => Show (Either a b) where+instance (Show a, Show b) => Show (Either a b) where showsPrec p (Left a) = showParen (p>=appPrec1) (showString "Left " . showsPrec appPrec1 a) showsPrec p (Right b) = showParen (p>=appPrec1) (showString "Right " . showsPrec appPrec1 b) -instance forall a . Functor (Either a) where+instance Functor (Either a) where fmap _ (Left a) = Left a fmap f (Right b) = Right (f b) -instance forall a . Applicative (Either a) where+instance Applicative (Either a) where pure b = Right b Right f <*> Right x = Right (f x) Right _ <*> Left a = Left a Left a <*> _ = Left a -instance forall a . Monad (Either a) where+instance Monad (Either a) where Right b >>= k = k b Left a >>= _ = Left a
lib/Data/Enum.hs view
@@ -40,6 +40,25 @@ i_n1 = fromEnum n1 i_n2 = fromEnum n2 +numericEnumFrom :: (Num a) => a -> [a]+numericEnumFrom n = n : numericEnumFrom (n + 1)++numericEnumFromThen :: (Num a) => a -> a -> [a]+numericEnumFromThen n m = from n+ where+ d = m - n+ from i = i : from (i + d)++numericEnumFromTo :: (Num a, Ord a) => a -> a -> [a]+numericEnumFromTo l h = takeWhile (<= h) (numericEnumFrom l)++numericEnumFromThenTo :: (Num a, Ord a) => a -> a -> a -> [a]+numericEnumFromThenTo l m h =+ if m > l then+ takeWhile (<= h) (numericEnumFromThen l m)+ else+ takeWhile (>= h) (numericEnumFromThen l m)+ -- This instance is difficult to put in Data.Int, -- so it gets to live here. instance Enum Int where@@ -47,16 +66,10 @@ pred x = x - 1 toEnum x = x fromEnum x = x- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo -- Likewise for Bool instance Enum Bool where
lib/Data/Fixed.hs view
@@ -84,7 +84,7 @@ class HasResolution a where resolution :: p a -> Integer -instance forall n . KnownNat n => HasResolution n where+instance KnownNat n => HasResolution n where resolution _ = natVal (Proxy :: Proxy n) withType :: (Proxy a -> f a) -> f a
lib/Data/FloatW.hs view
@@ -12,6 +12,7 @@ import Data.Fractional import Data.Function import Data.Integer+import Data.Integer.Internal(_integerToFloatW, _wordToInteger) import Data.Integral import Data.List import Data.Ord
lib/Data/Foldable.hs view
@@ -163,7 +163,7 @@ sum = List.sum toList = id -instance forall a . Foldable (Either a) where+instance Foldable (Either a) where foldMap _ (Left _) = mempty foldMap f (Right y) = f y @@ -181,7 +181,7 @@ instance Foldable Identity where foldMap f (Identity a) = f a -instance forall m . Foldable (Const m) where+instance Foldable (Const m) where foldMap _ _ = mempty {-
lib/Data/IORef.hs view
@@ -14,7 +14,7 @@ newtype IORef a = R (IOArray a) deriving (Typeable) -instance forall a . Eq (IORef a) where+instance Eq (IORef a) where R x == R y = primArrEQ x y newIORef :: forall a . a -> IO (IORef a)
lib/Data/Int/Instances.hs view
@@ -12,6 +12,7 @@ import Data.Integer_Type import Data.Integral import Data.List+import Data.Maybe_Type import Data.Num import Data.Ord import Data.Ratio_Type@@ -72,16 +73,10 @@ pred x = x - 1 toEnum = i8 fromEnum = unI8- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Int8 where (==) = cmp8 primIntEQ@@ -94,20 +89,32 @@ (>) = cmp8 primIntGT (>=) = cmp8 primIntGE -{- instance Bits Int8 where (.&.) = bin8 primIntAnd (.|.) = bin8 primIntOr xor = bin8 primIntXor complement = una8 primIntInv- shiftL = bini8 primIntShl- shiftR = bini8 primIntShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 8 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini8 primIntShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 8 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini8 primIntShr bitSizeMaybe _ = Just 8 bitSize _ = 8- bit n = i8 (primIntShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount (I8 x) = primIntPopcount (x .&. 0xff) zeroBits = 0--} +instance FiniteBits Int8 where+ finiteBitSize _ = 8+ countLeadingZeros (I8 x) = primIntClz (x .&. 0xff) - (_wordSize - 8)+ countTrailingZeros (I8 x) = if x == 0 then 8 else primIntCtz x -------------------------------------------------------------------------------- ---- Int16@@ -162,16 +169,10 @@ pred x = x - 1 toEnum = i16 fromEnum = unI16- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Int16 where (==) = cmp16 primIntEQ@@ -184,20 +185,32 @@ (>) = cmp16 primIntGT (>=) = cmp16 primIntGE -{- instance Bits Int16 where (.&.) = bin16 primIntAnd (.|.) = bin16 primIntOr xor = bin16 primIntXor complement = una16 primIntInv- shiftL = bini16 primIntShl- shiftR = bini16 primIntShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 16 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini16 primIntShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 16 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini16 primIntShr bitSizeMaybe _ = Just 16 bitSize _ = 16- bit n = i16 (primIntShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount (I16 x) = primIntPopcount (x .&. 0xffff) zeroBits = 0--} +instance FiniteBits Int16 where+ finiteBitSize _ = 16+ countLeadingZeros (I16 x) = primIntClz (x .&. 0xffff) - (_wordSize - 16)+ countTrailingZeros (I16 x) = if x == 0 then 16 else primIntCtz x -------------------------------------------------------------------------------- ---- Int32@@ -252,16 +265,10 @@ pred x = x - 1 toEnum = i32 fromEnum = unI32- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Int32 where (==) = cmp32 primIntEQ@@ -274,20 +281,33 @@ (>) = cmp32 primIntGT (>=) = cmp32 primIntGE -{- instance Bits Int32 where (.&.) = bin32 primIntAnd (.|.) = bin32 primIntOr xor = bin32 primIntXor complement = una32 primIntInv- shiftL = bini32 primIntShl- shiftR = bini32 primIntShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 32 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini32 primIntShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 32 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini32 primIntShr bitSizeMaybe _ = Just 32 bitSize _ = 32- bit n = i32 (primIntShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount (I32 x) = primIntPopcount (x .&. 0xffffffff) zeroBits = 0--} +instance FiniteBits Int32 where+ finiteBitSize _ = 32+ countLeadingZeros (I32 x) = primIntClz (x .&. 0xffffffff) - (_wordSize - 32)+ countTrailingZeros (I32 x) = if x == 0 then 32 else primIntCtz x+ -------------------------------------------------------------------------------- ---- Int64 @@ -340,16 +360,10 @@ pred x = x - 1 toEnum = i64 fromEnum = unI64- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Int64 where (==) = cmp64 primIntEQ@@ -362,19 +376,29 @@ (>) = cmp64 primIntGT (>=) = cmp64 primIntGE -{- instance Bits Int64 where (.&.) = bin64 primIntAnd (.|.) = bin64 primIntOr xor = bin64 primIntXor complement = una64 primIntInv- shiftL = bini64 primIntShl- shiftR = bini64 primIntShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 64 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini64 primIntShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 64 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini64 primIntShr bitSizeMaybe _ = Just 64 bitSize _ = 64- bit n = i64 (primIntShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount (I64 x) = primIntPopcount x zeroBits = 0--} --+instance FiniteBits Int64 where+ finiteBitSize _ = 64+ countLeadingZeros = primIntClz . unI64+ countTrailingZeros = primIntCtz . unI64
lib/Data/Integer.hs view
@@ -2,27 +2,19 @@ -- See LICENSE file for full license. module Data.Integer( Integer,- _intToInteger,- _integerToInt,- _wordToInteger,- _integerToWord,- _integerToFloatW,- _integerToRational, _integerToIntList, _intListToInteger, ) where import Prelude() -- do not import Prelude-import Primitives-import Control.Error+import Data.Bits import Data.Bool-import Data.Char import Data.Enum import Data.Eq-import Data.Function import Data.Int-import Data.Integer_Type+import Data.Integer.Internal import Data.Integral import Data.List+import Data.Maybe_Type import Data.Num import Data.Ord import Data.Ratio_Type@@ -30,31 +22,15 @@ import Numeric.Show import Text.Show ------ The Integer is stored in sign-magniture format with digits in base maxD (2^31)--- It has the following invariants:--- * each digit is >= 0 and < maxD--- * least signification digits first, most significant last--- * no trailing 0s in the digits--- * 0 is positive-{- These definitions are in Integer_Type-data Integer = I Sign [Digit]- --deriving Show--type Digit = Int--maxD :: Digit-maxD = 2147483648 -- 2^31, this is used so multiplication of two digit doesn't overflow a 64 bit Int--data Sign = Plus | Minus- --deriving Show--}+-- This module does not know about the representation of Integer.+-- It uses functions defined in Data.Integer.Internal instance Eq Integer where (==) = eqI (/=) = neI instance Ord Integer where+ compare = cmpI (<) = ltI (<=) = leI (>) = gtI@@ -64,8 +40,7 @@ showsPrec = showIntegral {- in Text.Read.Internal-instance Read Integer where- readsPrec = readIntegral+instance Read Integer -} instance Num Integer where@@ -93,234 +68,41 @@ pred x = x - 1 toEnum x = _intToInteger x fromEnum x = _integerToInt x- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)----------------------------------------------------isZero :: Integer -> Bool-isZero (I _ ds) = null ds--instance Eq Sign where- (==) Plus Plus = True- (==) Minus Minus = True- (==) _ _ = False---- Trim off 0s and make an Integer-sI :: Sign -> [Digit] -> Integer-sI s ds =- case trim0 ds of- [] -> I Plus []- ds' -> I s ds'--zeroD :: Digit-zeroD = 0--addI :: Integer -> Integer -> Integer-addI (I Plus xs) (I Plus ys) = I Plus (add xs ys)-addI (I Plus xs) (I Minus ys) | ltW xs ys = sI Minus (sub ys xs)- | True = sI Plus (sub xs ys)-addI (I Minus xs) (I Plus ys) | ltW ys xs = sI Minus (sub xs ys)- | True = sI Plus (sub ys xs)-addI (I Minus xs) (I Minus ys) = I Minus (add xs ys)--negateI :: Integer -> Integer-negateI i@(I _ []) = i-negateI (I Plus x) = I Minus x-negateI (I Minus x) = I Plus x--absI :: Integer -> Integer-absI (I _ x) = I Plus x--subI :: Integer -> Integer -> Integer-subI x y = addI x (negateI y)--add :: [Digit] -> [Digit] -> [Digit]-add = add' zeroD--add' :: Digit -> [Digit] -> [Digit] -> [Digit]-add' ci (x : xs) (y : ys) = s : add' co xs ys where (co, s) = addD ci x y-add' ci (x : xs) [] = s : add' co xs [] where (co, s) = addD ci x zeroD-add' ci [] (y : ys) = s : add' co [] ys where (co, s) = addD ci zeroD y-add' ci [] [] = if ci == zeroD then [] else [ci]---- Add 3 digits with carry-addD :: Digit -> Digit -> Digit -> (Digit, Digit)-addD x y z = (quot s maxD, rem s maxD) where s = x + y + z---- Invariant: xs >= ys, so result is always >= 0-sub :: [Digit] -> [Digit] -> [Digit]-sub xs ys = sub' zeroD xs ys--sub' :: Digit -> [Digit] -> [Digit] -> [Digit]-sub' bi (x : xs) (y : ys) = d : sub' bo xs ys where (bo, d) = subW bi x y-sub' bi (x : xs) [] = d : sub' bo xs [] where (bo, d) = subW bi x zeroD-sub' 0 [] [] = []-sub' _ [] _ = undefined---- Subtract with borrow-subW :: Digit -> Digit -> Digit -> (Digit, Digit)-subW b x y =- let d = x - y + b- in if d < 0 then- (quot d maxD - 1, rem d maxD + maxD)- else- (quot d maxD, rem d maxD)---- Remove trailing 0s-trim0 :: [Digit] -> [Digit]-trim0 = reverse . dropWhile (== (0::Int)) . reverse---- Is axs < ays?-ltW :: [Digit] -> [Digit] -> Bool-ltW axs ays = lxs < lys || lxs == lys && cmp (reverse axs) (reverse ays)- where- lxs = length axs- lys = length ays- cmp (x:xs) (y:ys) = x < y || x == y && cmp xs ys- cmp [] [] = False- cmp _ _ = error "ltW.cmp"- -mulI :: Integer -> Integer -> Integer-mulI (I _ []) _ = I Plus [] -- 0 * x = 0-mulI _ (I _ []) = I Plus [] -- x * 0 = 0-mulI (I sx [x]) (I sy ys) = I (mulSign sx sy) (mulD zeroD ys x)-mulI (I sx xs) (I sy [y]) = I (mulSign sx sy) (mulD zeroD xs y)-mulI (I sx xs) (I sy ys) = I (mulSign sx sy) (mulM xs ys)--mulSign :: Sign -> Sign -> Sign-mulSign s t = if s == t then Plus else Minus---- Multiply with a single digit, and add carry.-mulD :: Digit -> [Digit] -> Digit -> [Digit]-mulD ci [] _ = if ci == 0 then [] else [ci]-mulD ci (x:xs) y = r : mulD q xs y- where- xy = x * y + ci- q = quot xy maxD- r = rem xy maxD--mulM :: [Digit] -> [Digit] -> [Digit]-mulM xs ys =- let rs = map (mulD zeroD xs) ys- ss = zipWith (++) (map (`replicate` (0::Int)) [0::Int ..]) rs- in foldl1 add ss---- Signs:--- + + -> (+,+)--- + - -> (-,+)--- - + -> (-,-)--- - - -> (+,-)-quotRemI :: Integer -> Integer -> (Integer, Integer)-quotRemI _ (I _ []) = error "Integer: division by 0" -- n / 0-quotRemI (I _ []) _ = (I Plus [], I Plus []) -- 0 / n-quotRemI (I sx xs) (I sy ys) | all (== (0::Int)) ys' =- -- All but the MSD are 0. Scale numerator accordingly and divide.- -- Then add back (the ++) the remainder we scaled off.- case quotRemD xs' y of- (q, r) -> qrRes sx sy (q, rs ++ r)- where ys' = init ys- y = last ys- n = length ys'- (rs, xs') = splitAt n xs -- xs' is the scaled number-quotRemI (I sx xs) (I sy ys) = qrRes sx sy (quotRemB xs ys)--qrRes :: Sign -> Sign -> ([Digit], [Digit]) -> (Integer, Integer)-qrRes sx sy (ds, rs) = (sI (mulSign sx sy) ds, sI sx rs)--quotI :: Integer -> Integer -> Integer-quotI x y =- case quotRemI x y of- (q, _) -> q---- Divide by a single digit.--- Does not return normalized numbers.-quotRemD :: [Digit] -> Digit -> ([Digit], [Digit])-quotRemD axs y = qr zeroD (reverse axs) []- where- qr ci [] res = (res, [ci])- qr ci (x:xs) res = qr r xs (q:res)- where- cx = ci * maxD + x- q = quot cx y- r = rem cx y---- Simple iterative long division.-quotRemB :: [Digit] -> [Digit] -> ([Digit], [Digit])-quotRemB xs ys =- let n = I Plus xs- d = I Plus ys- a = I Plus $ replicate (length ys - (1::Int)) (0::Int) ++ [last ys] -- only MSD of ys- aq = quotI n a- ar = addI d oneI- loop q r =- if absI r `geI` d then- let r' = n `subI` (q `mulI` d)- qn = q `addI` (r' `quotI` a)- q' = (q `addI` qn) `quotI` twoI- in loop q' r'- else- q- q' = loop aq ar- r = n `subI` (q' `mulI` d)- in if r `ltI` zeroI then- (digits (q' `subI` oneI), digits (r `addI` d))- else- (digits q', digits r)--digits :: Integer -> [Digit]-digits (I _ ds) = ds--zeroI :: Integer-zeroI = I Plus []--oneI :: Integer-oneI = I Plus [1]--twoI :: Integer-twoI = I Plus [2]--tenI :: Integer-tenI = I Plus [10]--negOneI :: Integer-negOneI = I Minus [1]------------------eqI :: Integer -> Integer -> Bool-eqI (I sx xs) (I sy ys) = sx == sy && xs == ys--neI :: Integer -> Integer -> Bool-neI x y = not (eqI x y)--ltI :: Integer -> Integer -> Bool-ltI (I Plus xs) (I Plus ys) = ltW xs ys-ltI (I Minus _) (I Plus _) = True-ltI (I Plus _) (I Minus _) = False-ltI (I Minus xs) (I Minus ys) = ltW ys xs--leI :: Integer -> Integer -> Bool-leI x y = not (ltI y x)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo -gtI :: Integer -> Integer -> Bool-gtI x y = ltI y x+instance Bits Integer where+ (.&.) = andI+ (.|.) = orI+ xor = xorI+ complement x = negOneI - x -- -x = complement x + 1 => complement x = -1 - x+ unsafeShiftL = shiftLI+ x `shiftL` i+ | i < 0 = _overflowError+ | otherwise = x `unsafeShiftL` i+ unsafeShiftR = shiftRI+ x `shiftR` i+ | i < 0 = _overflowError+ | otherwise = x `unsafeShiftR` i+ x `shift` i+ | i < 0 = x `unsafeShiftR` (-i)+ | i > 0 = x `unsafeShiftL` i+ | otherwise = x+ rotate = shift+ bit i = oneI `shiftL` i+ testBit = testBitI+ zeroBits = zeroI+ bitSizeMaybe _ = Nothing+ popCount = popCountI -geI :: Integer -> Integer -> Bool-geI x y = not (ltI x y)+----------------- --- To make the [Int] representing an integer portable, we--- need to base that does not depend on the word size+-- For the combinator file we need a portable way to store+-- the Integer type. We use [Int], with digits in a small base. integerListBase :: Integer-integerListBase = 32768+integerListBase = _intToInteger 32768 -- These two functions return an (opaque) representation of an -- Integer as [Int].@@ -333,150 +115,7 @@ f i = fromInteger r : f q where (q, r) = quotRem i integerListBase _intListToInteger :: [Int] -> Integer+_intListToInteger [] = _intToInteger 0 _intListToInteger ads@(x : ds) = if x == -1 then - f ds else f ads where f = foldr (\ d a -> a * integerListBase + toInteger d) 0 -----------------------------------{--pIntegerToInteger :: P.Integer -> Integer-pIntegerToInteger i | i >= 0 = I Plus (f i)- | otherwise = I Minus (f (negate i))- where- f 0 = []- f x = fromInteger (rem x (toInteger maxD)) : f (quot x (toInteger maxD))--integerToPInteger :: Integer -> P.Integer-integerToPInteger (I s xs) =- let r = foldr (\ d r -> r * toInteger maxD + toInteger d) 0 xs- in case s of- Plus -> r- Minus -> negate r--instance Num Integer where- (+) = addI- (-) = subI- (*) = mulI- abs x = if x < 0 then -x else x- signum x = if x > 0 then 1 else if x < 0 then -1 else 0- fromInteger = pIntegerToInteger--instance Enum Integer where- fromEnum = fromEnum . integerToPInteger- toEnum = _intToInteger--instance Real Integer where- toRational = toRational . toInteger--instance Integral Integer where- quotRem = quotRemI- toInteger = integerToPInteger----instance Show Integer where--- show = showInteger--instance Eq Integer where- (==) = eqI--instance Ord Integer where- x < y = x `ltI` y- x <= y = x == y || x `ltI` y- x > y = y `ltI` x- x >= y = x == y || y `ltI` x--instance Arbitrary Integer where- arbitrary = do- ndig <- frequency- [(5, pure 0)- ,(25, pure 1)- ,(20, pure 2)- ,(10, pure 3)- ,(10, pure 4)- ,(2, pure 5)- ,(2, pure 6)- ]- digits <- vectorOf ndig (chooseInt (0, maxD - 1))- sign <- elements [Plus, Minus]- pure $ if null digits then I Plus [] else I sign digits--{--newtype SmallInteger = SmallInteger Integer- deriving Show--instance Arbitrary SmallInteger where- arbitrary = do- ndig <- frequency- [(25, pure 1)- ,(20, pure 2)- ,(10, pure 3)- ,(10, pure 4)- ]- digit <- chooseInt (1, maxD - 1)- sign <- elements [Plus, Minus]- pure $ SmallInteger $ I sign (replicate (ndig - 1) 0 ++ [digit])--}-{--sanity :: HasCallStack => Integer -> Integer-sanity (I Minus []) = undefined-sanity (I _ ds) | any (< 0) ds = undefined-sanity (I _ ds) | length ds > 1 && last ds == 0 = undefined-sanity i = i--}--prop_roundtrip1 :: Integer -> Bool-prop_roundtrip1 i = fromInteger (toInteger i) == i--prop_negate :: Integer -> Bool-prop_negate i = toInteger (negate i) == negate (toInteger i)--prop_abs :: Integer -> Bool-prop_abs i = toInteger (abs i) == abs (toInteger i)--prop_add :: Integer -> Integer -> Bool-prop_add x y = toInteger (addI x y) == toInteger x + toInteger y--prop_sub :: Integer -> Integer -> Bool-prop_sub x y = toInteger (subI x y) == toInteger x - toInteger y--prop_mul :: Integer -> Integer -> Bool-prop_mul x y = toInteger (mulI x y) == toInteger x * toInteger y--prop_div :: Integer -> NonZero Integer -> Bool-prop_div x (NonZero y) =- to (quotRemI x y) == toInteger x `quotRem` toInteger y- where to (a, b) = (toInteger a, toInteger b)- -prop_muldiv :: Integer -> NonZero Integer -> Bool-prop_muldiv x (NonZero y) =- let (q, r) = quotRemI x y- in q*y + r == x--prop_eq :: Integer -> Integer -> Bool-prop_eq x y = (eqI x y) == (toInteger x == toInteger y)--prop_ne :: Integer -> Integer -> Bool-prop_ne x y = (neI x y) == (toInteger x /= toInteger y)--prop_lt :: Integer -> Integer -> Bool-prop_lt x y = (ltI x y) == (toInteger x < toInteger y)--prop_gt :: Integer -> Integer -> Bool-prop_gt x y = (gtI x y) == (toInteger x > toInteger y)--prop_le :: Integer -> Integer -> Bool-prop_le x y = (leI x y) == (toInteger x <= toInteger y)--prop_ge :: Integer -> Integer -> Bool-prop_ge x y = (geI x y) == (toInteger x >= toInteger y)--prop_show :: Integer -> Bool-prop_show x = showInteger x == show (toInteger x)--checkAll :: IO ()-checkAll = do- let qc p = quickCheck (withMaxSuccess 100000 p)- mapM_ qc [prop_roundtrip1, prop_negate, prop_abs, prop_show]- mapM_ qc [prop_add, prop_sub, prop_mul,- prop_eq, prop_ne, prop_lt, prop_gt, prop_le, prop_ge]- mapM_ qc [prop_div, prop_muldiv]- --}
+ lib/Data/Integer/Internal.hs view
@@ -0,0 +1,512 @@+-- This module implements the operation needed to support+-- the Integer type.+module Data.Integer.Internal(+ Integer,+ zeroI, oneI, negOneI,+ eqI, neI, cmpI, ltI, leI, gtI, geI,+ addI, subI, mulI, quotRemI,+ negateI, absI,+ andI, orI, xorI,+ shiftLI, shiftRI,+ testBitI, popCountI,+ _intToInteger,+ _integerToFloatW,+ _integerToInt,+ _wordToInteger,+ ) where+import Prelude() -- do not import Prelude+--import Primitives+import Control.Error+import Data.Bits+import Data.Bool+import Data.Enum+import Data.Eq+import Data.Function+import Data.Int+import Data.Integral+import Data.List+import Data.Maybe_Type+import Data.Num+import Data.Ord+import Data.Word+import Data.Integer_Type++isZero :: Integer -> Bool+isZero (I _ ds) = null ds++instance Eq Sign where+ (==) Plus Plus = True+ (==) Minus Minus = True+ (==) _ _ = False++-- Trim off 0s and make an Integer+sI :: Sign -> [Digit] -> Integer+sI s ds =+ -- Remove trailing 0s+ case dropWhileEnd (== (0 :: Word)) ds of+ [] -> I Plus []+ ds' -> I s ds'++zeroD :: Digit+zeroD = 0++addI :: Integer -> Integer -> Integer+addI (I Plus xs) (I Plus ys) = I Plus (add xs ys)+addI (I Plus xs) (I Minus ys) | LT <- cmpW xs ys = sI Minus (sub ys xs)+ | True = sI Plus (sub xs ys)+addI (I Minus xs) (I Plus ys) | LT <- cmpW ys xs = sI Minus (sub xs ys)+ | True = sI Plus (sub ys xs)+addI (I Minus xs) (I Minus ys) = I Minus (add xs ys)++negateI :: Integer -> Integer+negateI i@(I _ []) = i+negateI (I Plus x) = I Minus x+negateI (I Minus x) = I Plus x++absI :: Integer -> Integer+absI (I _ x) = I Plus x++subI :: Integer -> Integer -> Integer+subI x y = addI x (negateI y)++add :: [Digit] -> [Digit] -> [Digit]+add = add' zeroD++add' :: Digit -> [Digit] -> [Digit] -> [Digit]+add' ci (x : xs) (y : ys) = s : add' co xs ys where (co, s) = addD ci x y+add' ci (x : xs) [] = s : add' co xs [] where (co, s) = addD ci x zeroD+add' ci [] (y : ys) = s : add' co [] ys where (co, s) = addD ci zeroD y+add' ci [] [] = if ci == zeroD then [] else [ci]++-- Add 3 digits with carry+addD :: Digit -> Digit -> Digit -> (Digit, Digit)+addD x y z = (quotMaxD s, remMaxD s) where s = x + y + z++-- Invariant: xs >= ys, so result is always >= 0+sub :: [Digit] -> [Digit] -> [Digit]+sub xs ys = sub' zeroD xs ys++sub' :: Digit -> [Digit] -> [Digit] -> [Digit]+sub' bi (x : xs) (y : ys) = d : sub' bo xs ys where (bo, d) = subW bi x y+sub' bi (x : xs) [] = d : sub' bo xs [] where (bo, d) = subW bi x zeroD+sub' 0 [] [] = []+sub' _ [] _ = error "impossible: xs >= ys"++-- Subtract with borrow+subW :: Digit -> Digit -> Digit -> (Digit, Digit)+subW b x y =+ let d = maxD + x - y - b+ in (1 - quotMaxD d, remMaxD d)++cmpW :: [Digit] -> [Digit] -> Ordering+cmpW (x : xs) (y : ys) =+ case cmpW xs ys of+ EQ -> compare x y+ res -> res+cmpW (_ : _) [] = GT+cmpW [] (_ : _) = LT+cmpW [] [] = EQ++mulI :: Integer -> Integer -> Integer+mulI (I _ []) _ = I Plus [] -- 0 * x = 0+mulI _ (I _ []) = I Plus [] -- x * 0 = 0+mulI (I sx [x]) (I sy ys) = I (mulSign sx sy) (mulD zeroD ys x)+mulI (I sx xs) (I sy [y]) = I (mulSign sx sy) (mulD zeroD xs y)+mulI (I sx xs) (I sy ys) = I (mulSign sx sy) (mulM xs ys)++mulSign :: Sign -> Sign -> Sign+mulSign s t = if s == t then Plus else Minus++-- Multiply with a single digit, and add carry.+mulD :: Digit -> [Digit] -> Digit -> [Digit]+mulD ci [] _ = if ci == 0 then [] else [ci]+mulD ci (x:xs) y = r : mulD q xs y+ where+ xy = x * y + ci+ q = quotMaxD xy+ r = remMaxD xy++mulM :: [Digit] -> [Digit] -> [Digit]+mulM xs ys =+ let rs = map (mulD zeroD xs) ys+ ss = zipWith (++) (map (`replicate` (0 :: Word)) [0 :: Int ..]) rs+ in foldl1 add ss++-- Signs:+-- + + -> (+,+)+-- + - -> (-,+)+-- - + -> (-,-)+-- - - -> (+,-)+quotRemI :: Integer -> Integer -> (Integer, Integer)+quotRemI _ (I _ []) = error "Integer: division by 0" -- n / 0+quotRemI (I _ []) _ = (I Plus [], I Plus []) -- 0 / n+quotRemI (I sx xs) (I sy ys) | Just (y, n) <- msd ys =+ -- All but the MSD are 0. Scale numerator accordingly and divide.+ -- Then add back (the ++) the remainder we scaled off.+ let (rs, xs') = splitAt n xs -- xs' is the scaled number+ in case quotRemD xs' y of+ (q, r) -> qrRes sx sy (q, rs ++ r)+quotRemI (I sx xs) (I sy ys) = qrRes sx sy (quotRemB xs ys)++msd :: [Digit] -> Maybe (Digit, Int)+msd = go 0+ where+ go _ [] = Nothing+ go n [d] = Just (d, n)+ go n (d : ds) = if d == 0 then go (n + 1) ds else Nothing++qrRes :: Sign -> Sign -> ([Digit], [Digit]) -> (Integer, Integer)+qrRes sx sy (ds, rs) = (sI (mulSign sx sy) ds, sI sx rs)++quotI :: Integer -> Integer -> Integer+quotI x y =+ case quotRemI x y of+ (q, _) -> q++-- Divide by a single digit.+-- Does not return normalized numbers.+quotRemD :: [Digit] -> Digit -> ([Digit], [Digit])+quotRemD axs y = qr zeroD (reverse axs) []+ where+ qr ci [] res = (res, [ci])+ qr ci (x:xs) res = qr r xs (q:res)+ where+ --cx = ci `unsafeShiftL` shiftD + x+ cx = ci * maxD + x+ q = quot cx y+ r = rem cx y++-- Simple iterative long division.+quotRemB :: [Digit] -> [Digit] -> ([Digit], [Digit])+quotRemB xs ys =+ let n = I Plus xs+ d = I Plus ys+ a = I Plus $ replicate (length ys - (1 :: Int)) (0 :: Word) ++ [last ys] -- only MSD of ys+ aq = quotI n a+ ar = addI d oneI+ loop q r =+ if absI r `geI` d then+ let r' = n `subI` (q `mulI` d)+ qn = q `addI` (r' `quotI` a)+ q' = (q `addI` qn) `quotI` twoI+ in loop q' r'+ else+ q+ q' = loop aq ar+ r = n `subI` (q' `mulI` d)+ in if r `ltI` zeroI then+ (digits (q' `subI` oneI), digits (r `addI` d))+ else+ (digits q', digits r)++digits :: Integer -> [Digit]+digits (I _ ds) = ds++zeroI :: Integer+zeroI = I Plus []++oneI :: Integer+oneI = I Plus [1]++twoI :: Integer+twoI = I Plus [2]++tenI :: Integer+tenI = I Plus [10]++negOneI :: Integer+negOneI = I Minus [1]++--------------++eqI :: Integer -> Integer -> Bool+eqI (I sx xs) (I sy ys) = sx == sy && xs == ys++neI :: Integer -> Integer -> Bool+neI x y = not (eqI x y)++cmpI :: Integer -> Integer -> Ordering+cmpI (I Plus xs) (I Plus ys) = cmpW xs ys+cmpI (I Minus _) (I Plus _) = LT+cmpI (I Plus _) (I Minus _) = GT+cmpI (I Minus xs) (I Minus ys) = cmpW ys xs++ltI :: Integer -> Integer -> Bool+ltI x y =+ case cmpI x y of+ LT -> True+ _ -> False++leI :: Integer -> Integer -> Bool+leI x y =+ case cmpI x y of+ GT -> False+ _ -> True++gtI :: Integer -> Integer -> Bool+gtI x y =+ case cmpI x y of+ GT -> True+ _ -> False++geI :: Integer -> Integer -> Bool+geI x y =+ case cmpI x y of+ LT -> False+ _ -> True++---------------------------------++andI :: Integer -> Integer -> Integer+andI (I Plus xs) (I Plus ys) = bI Plus (andDigits xs ys)+andI (I Plus xs) (I Minus ys) = bI Plus (andNotDigits (sub1 ys) xs)+andI (I Minus xs) (I Plus ys) = bI Plus (andNotDigits (sub1 xs) ys)+andI (I Minus xs) (I Minus ys) = bI Minus (orDigits (sub1 xs) (sub1 ys))++orI :: Integer -> Integer -> Integer+orI (I Plus xs) (I Plus ys) = bI Plus (orDigits xs ys)+orI (I Plus xs) (I Minus ys) = bI Minus (andNotDigits xs (sub1 ys))+orI (I Minus xs) (I Plus ys) = bI Minus (andNotDigits ys (sub1 xs))+orI (I Minus xs) (I Minus ys) = bI Minus (andDigits (sub1 xs) (sub1 ys))++xorI :: Integer -> Integer -> Integer+xorI (I Plus xs) (I Plus ys) = bI Plus (xorDigits xs ys)+xorI (I Plus xs) (I Minus ys) = bI Minus (xorDigits xs (sub1 ys))+xorI (I Minus xs) (I Plus ys) = bI Minus (xorDigits (sub1 xs) ys)+xorI (I Minus xs) (I Minus ys) = bI Plus (xorDigits (sub1 xs) (sub1 ys))++bI :: Sign -> [Digit] -> Integer+bI Plus ds = sI Plus ds+bI Minus ds = sI Minus (add1 ds)++add1 :: [Digit] -> [Digit]+add1 ds = add ds [1]++sub1 :: [Digit] -> [Digit]+sub1 ds = sub ds [1]++andDigits :: [Digit] -> [Digit] -> [Digit]+andDigits (x : xs) (y : ys) = (x .&. y) : andDigits xs ys+andDigits _ _ = []++andNotDigits :: [Digit] -> [Digit] -> [Digit]+andNotDigits [] [] = []+andNotDigits [] ys = ys+andNotDigits xs [] = []+andNotDigits (x : xs) (y : ys) = (complement x .&. y) : andNotDigits xs ys++orDigits :: [Digit] -> [Digit] -> [Digit]+orDigits [] [] = []+orDigits [] ys = ys+orDigits xs [] = xs+orDigits (x : xs) (y : ys) = (x .|. y) : orDigits xs ys++xorDigits :: [Digit] -> [Digit] -> [Digit]+xorDigits [] [] = []+xorDigits [] ys = ys+xorDigits xs [] = xs+xorDigits (x : xs) (y : ys) = (x `xor` y) : xorDigits xs ys++shiftLD :: [Digit] -> Int -> [Digit]+shiftLD ds 0 = ds+shiftLD ds i = go 0 ds+ where+ go ci [] = if ci == 0 then [] else [ci]+ go ci (d : ds) =+ let+ x = (d `unsafeShiftL` i) .|. ci+ co = quotMaxD x+ s = remMaxD x+ in s : go co ds++shiftRD :: [Digit] -> Int -> ([Digit], Bool)+shiftRD ds 0 = (ds, False)+shiftRD ds i =+ let (rs, ds') = splitAt 1 (shiftLD ds (shiftD - i))+ in (ds', any (/= 0) rs)++testBitI :: Integer -> Int -> Bool+testBitI (I Plus ds) i =+ case ds !? q of+ Just d -> testBit d r+ Nothing -> False+ where (q, r) = quotRem i shiftD+testBitI (I Minus ds) i =+ -- not (testBitI (complement (I Minus ds)) i)+ case ds !? q of+ Just d ->+ let d' = if all (== 0) (take q ds) then d - 1 else d+ in not (testBit d' r)+ Nothing -> True+ where (q, r) = quotRem i shiftD++shiftLI :: Integer -> Int -> Integer+shiftLI (I sign ds) i+ | null ds = zeroI+ | otherwise =+ let (q, r) = quotRem i shiftD+ in I sign (replicate q 0 ++ shiftLD ds r)++shiftRI :: Integer -> Int -> Integer+shiftRI (I sign ds) i+ | null ds = zeroI+ | otherwise =+ let+ (q, r) = quotRem i shiftD+ (rs, ds') = splitAt q ds+ (ds'', shiftedOut1s) = shiftRD ds' r+ in case sign of+ Minus | shiftedOut1s || any (/= 0) rs -> I sign (add1 ds'')+ _ -> I sign ds''++popCountI :: Integer -> Int+popCountI (I sign ds) =+ let count = sum (map popCount ds)+ in case sign of+ Plus -> count+ Minus -> -count++---------------------------------+{-+pIntegerToInteger :: P.Integer -> Integer+pIntegerToInteger i | i >= 0 = I Plus (f i)+ | otherwise = I Minus (f (negate i))+ where+ f 0 = []+ f x = fromInteger (rem x (toInteger maxD)) : f (quot x (toInteger maxD))++integerToPInteger :: Integer -> P.Integer+integerToPInteger (I s xs) =+ let r = foldr (\ d r -> r * toInteger maxD + toInteger d) 0 xs+ in case s of+ Plus -> r+ Minus -> negate r++instance Num Integer where+ (+) = addI+ (-) = subI+ (*) = mulI+ abs x = if x < 0 then -x else x+ signum x = if x > 0 then 1 else if x < 0 then -1 else 0+ fromInteger = pIntegerToInteger++instance Enum Integer where+ fromEnum = fromEnum . integerToPInteger+ toEnum = _intToInteger++instance Real Integer where+ toRational = toRational . toInteger++instance Integral Integer where+ quotRem = quotRemI+ toInteger = integerToPInteger++--instance Show Integer where+-- show = showInteger++instance Eq Integer where+ (==) = eqI++instance Ord Integer where+ x < y = x `ltI` y+ x <= y = x == y || x `ltI` y+ x > y = y `ltI` x+ x >= y = x == y || y `ltI` x++instance Arbitrary Integer where+ arbitrary = do+ ndig <- frequency+ [(5, pure 0)+ ,(25, pure 1)+ ,(20, pure 2)+ ,(10, pure 3)+ ,(10, pure 4)+ ,(2, pure 5)+ ,(2, pure 6)+ ]+ digits <- vectorOf ndig (chooseInt (0, maxD - 1))+ sign <- elements [Plus, Minus]+ pure $ if null digits then I Plus [] else I sign digits++{-+newtype SmallInteger = SmallInteger Integer+ deriving Show++instance Arbitrary SmallInteger where+ arbitrary = do+ ndig <- frequency+ [(25, pure 1)+ ,(20, pure 2)+ ,(10, pure 3)+ ,(10, pure 4)+ ]+ digit <- chooseInt (1, maxD - 1)+ sign <- elements [Plus, Minus]+ pure $ SmallInteger $ I sign (replicate (ndig - 1) 0 ++ [digit])+-}+{-+sanity :: HasCallStack => Integer -> Integer+sanity (I Minus []) = undefined+sanity (I _ ds) | length ds > 1 && last ds == 0 = undefined+sanity i = i+-}++prop_roundtrip1 :: Integer -> Bool+prop_roundtrip1 i = fromInteger (toInteger i) == i++prop_negate :: Integer -> Bool+prop_negate i = toInteger (negate i) == negate (toInteger i)++prop_abs :: Integer -> Bool+prop_abs i = toInteger (abs i) == abs (toInteger i)++prop_add :: Integer -> Integer -> Bool+prop_add x y = toInteger (addI x y) == toInteger x + toInteger y++prop_sub :: Integer -> Integer -> Bool+prop_sub x y = toInteger (subI x y) == toInteger x - toInteger y++prop_mul :: Integer -> Integer -> Bool+prop_mul x y = toInteger (mulI x y) == toInteger x * toInteger y++prop_div :: Integer -> NonZero Integer -> Bool+prop_div x (NonZero y) =+ to (quotRemI x y) == toInteger x `quotRem` toInteger y+ where to (a, b) = (toInteger a, toInteger b)++prop_muldiv :: Integer -> NonZero Integer -> Bool+prop_muldiv x (NonZero y) =+ let (q, r) = quotRemI x y+ in q*y + r == x++prop_eq :: Integer -> Integer -> Bool+prop_eq x y = (eqI x y) == (toInteger x == toInteger y)++prop_ne :: Integer -> Integer -> Bool+prop_ne x y = (neI x y) == (toInteger x /= toInteger y)++prop_lt :: Integer -> Integer -> Bool+prop_lt x y = (ltI x y) == (toInteger x < toInteger y)++prop_gt :: Integer -> Integer -> Bool+prop_gt x y = (gtI x y) == (toInteger x > toInteger y)++prop_le :: Integer -> Integer -> Bool+prop_le x y = (leI x y) == (toInteger x <= toInteger y)++prop_ge :: Integer -> Integer -> Bool+prop_ge x y = (geI x y) == (toInteger x >= toInteger y)++prop_show :: Integer -> Bool+prop_show x = showInteger x == show (toInteger x)++checkAll :: IO ()+checkAll = do+ let qc p = quickCheck (withMaxSuccess 100000 p)+ mapM_ qc [prop_roundtrip1, prop_negate, prop_abs, prop_show]+ mapM_ qc [prop_add, prop_sub, prop_mul,+ prop_eq, prop_ne, prop_lt, prop_gt, prop_le, prop_ge]+ mapM_ qc [prop_div, prop_muldiv]++-}+
lib/Data/Integer_Type.hs view
@@ -7,61 +7,82 @@ import Data.Bool_Type import Data.List_Type +--+-- The Integer is stored in sign-magnitude format with digits in base maxD (2^32)+-- It has the following invariants:+-- * each digit is >= 0 and < maxD+-- * least significant digits first, most significant last+-- * no trailing 0s in the digits+-- * 0 is positive+ data Integer = I Sign [Digit] data Sign = Plus | Minus -type Digit = Int+type Digit = Word maxD :: Digit-maxD =+maxD = 1 `primWordShl` shiftD++shiftD :: Int+shiftD = if _wordSize `primIntEQ` 64 then- (2147483648::Int) -- 2^31, this is used so multiplication of two digits doesn't overflow a 64 bit Int+ (32 :: Int) -- this is used so multiplication of two digits doesn't overflow a 64 bit Word else if _wordSize `primIntEQ` 32 then- (32768::Int) -- 2^15, this is used so multiplication of two digits doesn't overflow a 32 bit Int+ (16 :: Int) -- this is used so multiplication of two digits doesn't overflow a 32 bit Word else error "Integer: unsupported word size" +quotMaxD :: Digit -> Digit+quotMaxD d = d `primWordShr` shiftD++remMaxD :: Digit -> Digit+remMaxD d = d `primWordAnd` (maxD `primWordSub` 1)+ -- Sadly, we also need a bunch of functions. _intToInteger :: Int -> Integer-_intToInteger i | i `primIntGE` 0 = I Plus (f i)- | i `primIntEQ` ni = I Minus [0::Int,0::Int,2::Int] -- we are at minBound::Int.- | True = I Minus (f ni)+_intToInteger i+ | i `primIntEQ` 0 = I Plus []+ | i `primIntGE` 0 = f Plus (primIntToWord i)+ | True = f Minus (primIntToWord (0 `primIntSub` i)) where- ni = (0::Int) `primIntSub` i- f :: Int -> [Int]- f x = if primIntEQ x (0::Int) then [] else primIntRem x maxD : f (primIntQuot x maxD)+ f sign i =+ let+ high = quotMaxD i+ low = remMaxD i+ in if high `primWordEQ` 0 then I sign [low] else I sign [low, high] _integerToInt :: Integer -> Int-_integerToInt (I sign ds) = s `primIntMul` i- where- i =- case ds of- [] -> 0::Int- [d1] -> d1- [d1,d2] -> d1 `primIntAdd` (maxD `primIntMul` d2)- d1:d2:d3:_ -> d1 `primIntAdd` (maxD `primIntMul` (d2 `primIntAdd` (maxD `primIntMul` d3)))- s =- case sign of- Plus -> 1::Int- Minus -> 0 `primIntSub` 1+_integerToInt x = primWordToInt (_integerToWord x) _wordToInteger :: Word -> Integer-_wordToInteger i = I Plus (f i)+_wordToInteger i+ | i `primWordEQ` 0 = I Plus []+ | high `primWordEQ` 0 = I Plus [low]+ | True = I Plus [low, high] where- f :: Word -> [Int]- f x = if x `primWordEQ` (0::Word) then [] else primWordToInt (primWordRem x (primIntToWord maxD)) : f (primWordQuot x (primIntToWord maxD))+ high = quotMaxD i+ low = remMaxD i _integerToWord :: Integer -> Word-_integerToWord x = primIntToWord (_integerToInt x)+_integerToWord (I sign ds) =+ case sign of+ Plus -> i+ Minus -> 0 `primWordSub` i+ where+ i =+ case ds of+ [] -> 0 :: Word+ [d1] -> d1+ d1 : d2 : _ -> d1 `primWordAdd` (d2 `primWordShl` shiftD) _integerToFloatW :: Integer -> FloatW _integerToFloatW (I sign ds) = s `primFloatWMul` loop ds where- loop [] = 0.0::FloatW- loop (i : is) = primFloatWFromInt i `primFloatWAdd` (primFloatWFromInt maxD `primFloatWMul` loop is)+ loop [] = 0.0 :: FloatW+ loop (d : ds) = primFloatWFromInt (primWordToInt d) `primFloatWAdd` (primFloatWFromInt (primWordToInt maxD) `primFloatWMul` loop ds) s = case sign of- Plus -> 1.0::FloatW+ Plus -> 1.0 :: FloatW Minus -> 0.0 `primFloatWSub` 1.0
lib/Data/List.hs view
@@ -47,34 +47,46 @@ --import Text.Read import Text.Show -instance {-# OVERLAPPABLE #-} forall a . Eq a => Eq [a] where+instance {-# OVERLAPPABLE #-} Eq a => Eq [a] where [] == [] = True (x:xs) == (y:ys) = x == y && xs == ys _ == _ = False -instance forall a . Ord a => Ord [a] where- [] <= _ = True- (_:_) <= [] = False- (x:xs) <= (y:ys) = x < y || x == y && xs <= ys+instance Ord a => Ord [a] where+ compare [] [] = EQ+ compare [] (_:_) = LT+ compare (_:_) [] = GT+ compare (x:xs) (y:ys) =+ case compare x y of+ EQ -> compare xs ys+ other -> other instance Functor [] where fmap = map instance Applicative [] where pure a = [a]- fs <*> xs = concatMap (\ f -> map (\ x -> f x) xs) fs+ fs <*> xs = concatMap (\f -> map f xs) fs+ xs *> ys = concatMap (\_ -> ys) xs+ liftA2 f xs ys = concatMap (\x -> map (f x) ys) xs -instance forall a . Show a => Show [a] where+instance Show a => Show [a] where showsPrec _ = showList instance Alternative [] where empty = [] (<|>) = (++) -instance forall a . Semigroup [a] where+instance Semigroup [a] where (<>) = (++)+ stimes n x+ | n < 0 = error "stimes: negative multiplier"+ | otherwise = rep n+ where+ rep 0 = []+ rep i = x ++ rep (i - 1) -instance forall a . Monoid [a] where+instance Monoid [a] where mempty = [] mconcat = concat @@ -86,49 +98,34 @@ concat = foldr (++) [] map :: forall a b . (a -> b) -> [a] -> [b]-map f =- let- rec [] = []- rec (a : as) = f a : rec as- in rec+map _ [] = []+map f (x : xs) = f x : map f xs filter :: forall a . (a -> Bool) -> [a] -> [a]-filter p =- let- rec [] = []- rec (x : xs) = if p x then x : rec xs else rec xs- in rec+filter _ [] = []+filter p (x : xs) = if p x then x : filter p xs else filter p xs foldr :: forall a b . (a -> b -> b) -> b -> [a] -> b-foldr f z =- let- rec [] = z- rec (x : xs) = f x (rec xs)- in rec+foldr _ z [] = z+foldr f z (x : xs) = f x (foldr f z xs) foldr' :: forall a b . (a -> b -> b) -> b -> [a] -> b foldr' f z [] = z foldr' f z (x:xs) =- let y = foldr f z xs+ let y = foldr' f z xs in y `seq` f x y foldr1 :: forall a . (a -> a -> a) -> [a] -> a-foldr1 f =- let- rec [] = error "foldr1"- rec [x] = x- rec (x : xs) = f x (rec xs)- in rec+foldr1 _ [] = error "foldr1: empty list"+foldr1 _ [x] = x+foldr1 f (x : xs) = f x (foldr1 f xs) foldr1' :: forall a . (a -> a -> a) -> [a] -> a-foldr1' f =- let- rec [] = error "foldr1"- rec [x] = x- rec (x : xs) =- let y = rec xs- in y `seq` f x y- in rec+foldr1' f [] = error "foldr1: empty list"+foldr1' _ [x] = x+foldr1' f (x : xs) =+ let y = foldr1' f xs+ in y `seq` f x y foldl :: forall a b . (b -> a -> b) -> b -> [a] -> b foldl _ z [] = z@@ -138,22 +135,22 @@ foldl' _ z [] = z foldl' f z (x : xs) = let y = f z x- in y `seq` foldl f y xs+ in y `seq` foldl' f y xs foldl1 :: forall a . (a -> a -> a) -> [a] -> a-foldl1 _ [] = error "foldl1"+foldl1 _ [] = error "foldl1: empty list" foldl1 f (x : xs) = foldl f x xs foldl1' :: forall a . (a -> a -> a) -> [a] -> a-foldl1' _ [] = error "foldl1'"+foldl1' _ [] = error "foldl1': empty list" foldl1' f (x : xs) = foldl' f x xs minimum :: forall a . Ord a => [a] -> a-minimum [] = error "minimum"+minimum [] = error "minimum: empty list" minimum (x:ys) = foldr (\ y m -> if y < m then y else m) x ys maximum :: forall a . Ord a => [a] -> a-maximum [] = error "maximum"+maximum [] = error "maximum: empty list" maximum (x:ys) = foldr (\ y m -> if y > m then y else m) x ys sum :: forall a . Num a => [a] -> a@@ -304,13 +301,10 @@ (xs, ys, zs, ws, vs, us, ts) -> (x:xs, y:ys, z:zs, w:ws, v:vs, u:us, t:ts) stripPrefix :: forall a . Eq a => [a] -> [a] -> Maybe [a]-stripPrefix = stripPrefixBy (==)--stripPrefixBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> Maybe [a]-stripPrefixBy eq [] s = Just s-stripPrefixBy eq (c:cs) [] = Nothing-stripPrefixBy eq (c:cs) (d:ds) | eq c d = stripPrefixBy eq cs ds- | otherwise = Nothing+stripPrefix [] s = Just s+stripPrefix (c:cs) [] = Nothing+stripPrefix (c:cs) (d:ds) | c == d = stripPrefix cs ds+ | otherwise = Nothing stripSuffix :: forall a . Eq a => [a] -> [a] -> Maybe [a] stripSuffix s t =@@ -319,24 +313,15 @@ Just x -> Just (reverse x) isPrefixOf :: forall a . Eq a => [a] -> [a] -> Bool-isPrefixOf = isPrefixOfBy (==)--isPrefixOfBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> Bool-isPrefixOfBy eq (c:cs) (d:ds) = eq c d && isPrefixOfBy eq cs ds-isPrefixOfBy _ [] _ = True-isPrefixOfBy _ _ _ = False+isPrefixOf (c:cs) (d:ds) = c == d && isPrefixOf cs ds+isPrefixOf [] _ = True+isPrefixOf _ _ = False isSuffixOf :: forall a . Eq a => [a] -> [a] -> Bool-isSuffixOf = isSuffixOfBy (==)--isSuffixOfBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> Bool-isSuffixOfBy eq n h = isPrefixOfBy eq (reverse n) (reverse h)+isSuffixOf n h = isPrefixOf (reverse n) (reverse h) isInfixOf :: forall a . Eq a => [a] -> [a] -> Bool-isInfixOf = isInfixOfBy (==)--isInfixOfBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> Bool-isInfixOfBy eq cs ds = any (isPrefixOfBy eq cs) (inits ds)+isInfixOf cs ds = any (isPrefixOf cs) (tails ds) splitAt :: forall a . Int -> [a] -> ([a], [a]) splitAt n xs = (take n xs, drop n xs)@@ -371,11 +356,10 @@ dropWhileEnd p = foldr (\x xs -> if p x && null xs then [] else x : xs) [] span :: forall a . (a -> Bool) -> [a] -> ([a], [a])-span p =- let- rec r [] = (reverse r, [])- rec r (x:xs) = if p x then rec (x:r) xs else (reverse r, x:xs)- in rec []+span _ [] = ([], [])+span p axs@(x : xs)+ | p x = let (ys, zs) = span p xs in (x : ys, zs)+ | otherwise = ([], axs) break :: forall a . (a -> Bool) -> [a] -> ([a],[a]) break p = span (not . p)@@ -387,26 +371,26 @@ breakEnd p = spanEnd (not . p) spanUntil :: forall a . (a -> Bool) -> [a] -> ([a], [a])-spanUntil p =- let- rec r [] = (reverse r, [])- rec r (x:xs) = if p x then rec (x:r) xs else (reverse (x:r), xs)- in rec []+spanUntil _ [] = ([], [])+spanUntil p (x : xs)+ | p x = let (ys, zs) = spanUntil p xs in (x : ys, zs)+ | otherwise = ([x], xs) splitWith :: forall a . (a -> Bool) -> [a] -> [[a]]-splitWith p =- let- rec r s [] = reverse (reverse s : r)- rec r s (x:xs) | p x = rec (reverse s : r) [] xs- | otherwise = rec r (x : s) xs- in rec [] []+splitWith _ [] = [[]]+splitWith p (x : xs)+ | p x = [] : rs+ | otherwise = case rs of+ (r : rs') -> (x : r) : rs'+ [] -> [[x]] -- impossible+ where rs = splitWith p xs head :: forall a . [a] -> a-head [] = error "head"+head [] = error "head: empty list" head (x:_) = x tail :: forall a . [a] -> [a]-tail [] = error "tail"+tail [] = error "tail: empty list" tail (_:ys) = ys tails :: forall a . [a] -> [[a]]@@ -414,7 +398,8 @@ tails xxs@(_:xs) = xxs : tails xs inits :: forall a . [a] -> [[a]]-inits = map reverse . reverse . tails . reverse+-- use difference lists to build up the inits+inits = map ($ []) . scanl (\xs x -> xs . (x :)) id intersperse :: forall a . a -> [a] -> [a] intersperse _ [] = []@@ -427,10 +412,7 @@ intercalate xs xss = concat (intersperse xs xss) elem :: forall a . (Eq a) => a -> [a] -> Bool-elem = elemBy (==)--elemBy :: (a -> a -> Bool) -> a -> [a] -> Bool-elemBy eq a = any (eq a)+elem a = any (a ==) notElem :: forall a . (Eq a) => a -> [a] -> Bool notElem a as = not (elem a as)@@ -440,11 +422,8 @@ find p (x:xs) = if p x then Just x else find p xs lookup :: forall a b . Eq a => a -> [(a, b)] -> Maybe b-lookup = lookupBy (==)--lookupBy :: forall a b . (a -> a -> Bool) -> a -> [(a, b)] -> Maybe b-lookupBy eq x xys =- case find (eq x . fst) xys of+lookup x xys =+ case find ((x ==) . fst) xys of Nothing -> Nothing Just (_, b) -> Just b @@ -458,7 +437,9 @@ intersect = intersectBy (==) intersectBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> [a]-intersectBy eq xs ys = filter (\ x -> elemBy eq x ys) xs+intersectBy _ [] _ = []+intersectBy _ _ [] = []+intersectBy eq xs ys = filter (\x -> any (eq x) ys) xs delete :: (Eq a) => a -> [a] -> [a] delete = deleteBy (==)@@ -486,7 +467,7 @@ repeat x = let xs = x:xs in xs cycle :: [a] -> [a]-cycle [] = error "cycle: []"+cycle [] = error "cycle: empty list" cycle xs = let xs' = xs ++ xs' in xs' infix 5 \\@@ -506,10 +487,10 @@ (!!) :: forall a . [a] -> Int -> a (!!) axs i = if i < (0::Int) then- error "!!: <0"+ error "!!: negative index" else let- nth _ [] = error "!!: empty"+ nth _ [] = error "!!: index too large" nth n (x:xs) = if n == (0::Int) then x else nth (n - (1::Int)) xs in nth i axs @@ -525,28 +506,46 @@ in nth i axs partition :: forall a . (a -> Bool) -> [a] -> ([a], [a])-partition p xs = (filter p xs, filter (not . p) xs)+partition p = foldr select ([], [])+ where+ select x (ts, fs)+ | p x = (x : ts, fs)+ | otherwise = (ts, x : fs) sort :: forall a . Ord a => [a] -> [a]-sort = sortLE (<=)+sort = sortBy compare +-- A simple merge sort for now. sortBy :: forall a . (a -> a -> Ordering) -> [a] -> [a]-sortBy f = sortLE (\ x y -> f x y /= GT)+sortBy cmp = mergeAll . splatter+ where+ splatter [] = []+ splatter [a] = [[a]]+ splatter (a1 : a2 : as) = case cmp a1 a2 of+ GT -> [a2, a1] : splatter as+ _ -> [a1, a2] : splatter as --- A simple "quicksort" for now.-sortLE :: forall a . (a -> a -> Bool) -> [a] -> [a]-sortLE _ [] = []-sortLE le (x:xs) =- case partition (le x) xs of- (ge, lt) -> sortLE le lt ++ (x : sortLE le ge)+ mergeAll [] = []+ mergeAll [xs] = xs+ mergeAll xss = mergeAll (mergePairs xss) + mergePairs [] = []+ mergePairs [xs] = [xs]+ mergePairs (xs1 : xs2 : xss) = merge xs1 xs2 : mergePairs xss++ merge [] ys = ys+ merge xs [] = xs+ merge axs@(x : xs) ays@(y : ys) = case cmp x y of+ GT -> y : merge axs ys+ _ -> x : merge xs ays+ last :: forall a . [a] -> a-last [] = error "last: []"+last [] = error "last: empty list" last [x] = x last (_:xs) = last xs init :: forall a . [a] -> [a]-init [] = error "init: []"+init [] = error "init: empty list" init [_] = [] init (x:xs) = x : init xs @@ -555,7 +554,7 @@ anySameBy :: forall a . (a -> a -> Bool) -> [a] -> Bool anySameBy _ [] = False-anySameBy eq (x:xs) = elemBy eq x xs || anySameBy eq xs+anySameBy eq (x:xs) = any (eq x) xs || anySameBy eq xs iterate :: forall a . (a -> a) -> a -> [a] iterate f x = x : iterate f (f x)@@ -579,33 +578,29 @@ where (ys,zs) = span (eq x) xs scanl :: (b -> a -> b) -> b -> [a] -> [b]-scanl f = rec- where rec q ls = q : case ls of- [] -> []- x:xs -> rec (f q x) xs+scanl f q ls = q : case ls of+ [] -> []+ x:xs -> scanl f (f q x) xs scanl' :: (b -> a -> b) -> b -> [a] -> [b]-scanl' f = rec- where rec q ls = q : case ls of- [] -> []- x:xs -> let y = f q x in seq y (rec y xs)+scanl' f q ls = q : case ls of+ [] -> []+ x:xs -> let y = f q x in seq y (scanl' f y xs) scanl1 :: (a -> a -> a) -> [a] -> [a] scanl1 f (x:xs) = scanl f x xs scanl1 _ [] = [] scanr :: (a -> b -> b) -> b -> [a] -> [b]-scanr f z = rec- where rec [] = [z]- rec (x:xs) = f x q : qs- where qs@(q:_) = rec xs+scanr _ z [] = [z]+scanr f z (x:xs) = f x q : qs+ where qs@(q:_) = scanr f z xs scanr1 :: (a -> a -> a) -> [a] -> [a]-scanr1 f = rec- where rec [] = []- rec [x] = [x]- rec (x:xs) = f x q : qs- where qs@(q:_) = rec xs+scanr1 _ [] = []+scanr1 _ [x] = [x]+scanr1 f (x:xs) = f x q : qs+ where qs@(q:_) = scanr1 f xs isSubsequenceOf :: (Eq a) => [a] -> [a] -> Bool isSubsequenceOf [] _ = True@@ -618,8 +613,10 @@ uncons (x:xs) = Just (x, xs) unsnoc :: [a] -> Maybe ([a], a)-unsnoc [] = Nothing-unsnoc xs = Just (init xs, last xs)+unsnoc = foldr step Nothing+ where+ step x (Just (a, b)) = Just (x : a, b)+ step x Nothing = Just ([], x) singleton :: a -> [a] singleton x = [x]@@ -627,10 +624,9 @@ transpose :: [[a]] -> [[a]] transpose [] = [] transpose ([] : xss) = transpose xss-transpose ((x : xs) : xss) = combine x hds xs tls+transpose ((x : xs) : xss) = (x : hds) : transpose (xs : tls) where (hds, tls) = unzip [(hd, tl) | hd : tl <- xss]- combine y h ys t = (y:h) : transpose (ys:t) subsequences :: [a] -> [[a]] subsequences xs = [] : sub xs@@ -674,10 +670,10 @@ elemIndices x xs = findIndices (x ==) xs findIndices :: (a -> Bool) -> [a] -> [Int]-findIndices p = rec 0- where rec _ [] = []- rec i (x:xs) | p x = i : rec (i+1) xs- | otherwise = rec (i+1) xs+findIndices p = go 0+ where go _ [] = []+ go i (x:xs) | p x = i : go (i+1) xs+ | otherwise = go (i+1) xs findIndex :: (a -> Bool) -> [a] -> Maybe Int findIndex p xs =@@ -688,30 +684,32 @@ lines :: String -> [String] lines [] = [] lines s =- case span (not . (== '\n')) s of+ case break (== '\n') s of (l, s') -> case s' of [] -> [l] _:s'' -> l : lines s'' unlines :: [String] -> String-unlines = concatMap (++ ['\n'])+unlines [] = []+unlines (l:ls) = l ++ '\n' : unlines ls words :: String -> [String] words s = case dropWhile isSpace s of [] -> [] s' -> w : words s''- where (w, s'') = span (not . isSpace) s'+ where (w, s'') = break isSpace s' unwords :: [String] -> String-unwords ss = intercalate [' '] ss+unwords [] = []+unwords ws = foldr1 (\w s -> w ++ ' ' : s) ws sortOn :: Ord b => (a -> b) -> [a] -> [a] sortOn f = map snd . sortBy (comparing fst) . map (\x -> let y = f x in y `seq` (y, x)) insert :: Ord a => a -> [a] -> [a]-insert e ls = insertBy (compare) e ls+insert e ls = insertBy compare e ls insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a] insertBy _ x [] = [x]@@ -721,7 +719,7 @@ _ -> x : ys maximumBy :: (a -> a -> Ordering) -> [a] -> a-maximumBy _ [] = error "List.maximumBy: []"+maximumBy _ [] = error "List.maximumBy: empty list" maximumBy cmp xs = foldl1 maxBy xs where maxBy x y = case cmp x y of@@ -729,7 +727,7 @@ _ -> y minimumBy :: (a -> a -> Ordering) -> [a] -> a-minimumBy _ [] = error "List.minimumBy: []"+minimumBy _ [] = error "List.minimumBy: empty list" minimumBy cmp xs = foldl1 minBy xs where minBy x y = case cmp x y of@@ -756,8 +754,8 @@ genericIndex :: (Integral i, Ord i) => [a] -> i -> a genericIndex (x:_) 0 = x genericIndex (_:xs) n | n > 0 = genericIndex xs (n-1)- | otherwise = error "List.genericIndex: < 0"-genericIndex _ _ = error "List.genericIndex: index too large."+ | otherwise = error "List.genericIndex: negative index"+genericIndex _ _ = error "List.genericIndex: index too large" genericReplicate :: (Integral i, Ord i) => i -> a -> [a] genericReplicate n x = genericTake n (repeat x)
lib/Data/List/NonEmpty.hs view
@@ -161,8 +161,8 @@ showsPrec p = showsPrec p . toList instance Foldable NonEmpty where foldr f z = foldr f z . toList---instance Traversable NonEmpty where--- traverse f = fromList . traverse f . toList+instance Traversable NonEmpty where+ traverse f = fmap fromList . traverse f . toList ----- End MHS replacement
lib/Data/List_Type.hs view
@@ -10,14 +10,12 @@ infixr 5 ++ (++) :: forall a . [a] -> [a] -> [a] axs ++ ys =- let rec [] = ys- rec (x:xs) = x : rec xs- in rec axs+ let go [] = ys+ go (x:xs) = x : go xs+ in go axs -- Put concatMap here so list comprehensions can be desugared -- using only List_Type concatMap :: forall a b . (a -> [b]) -> [a] -> [b]-concatMap f = rec- where- rec [] = []- rec (x:xs) = f x ++ rec xs+concatMap _ [] = []+concatMap f (x : xs) = f x ++ concatMap f xs
lib/Data/Maybe.hs view
@@ -19,18 +19,18 @@ import Data.Ord import Text.Show -instance forall a . Eq a => Eq (Maybe a) where+instance Eq a => Eq (Maybe a) where Nothing == Nothing = True Just x == Just x' = x == x' _ == _ = False -instance forall a . Ord a => Ord (Maybe a) where+instance Ord a => Ord (Maybe a) where Nothing `compare` Nothing = EQ Nothing `compare` Just _ = LT Just _ `compare` Nothing = GT Just x `compare` Just y = x `compare` y -instance forall a . (Show a) => Show (Maybe a) where+instance (Show a) => Show (Maybe a) where showsPrec _ Nothing = showString "Nothing" showsPrec p (Just a) = showParen (p >= 11) (showString "Just " . showsPrec 11 a) @@ -61,12 +61,12 @@ Nothing <|> y = y x <|> _ = x -instance forall a . Semigroup a => Semigroup (Maybe a) where+instance Semigroup a => Semigroup (Maybe a) where Nothing <> b = b a <> Nothing = a Just a <> Just b = Just (a <> b) -instance forall a . Semigroup a => Monoid (Maybe a) where+instance Semigroup a => Monoid (Maybe a) where mempty = Nothing maybe :: forall a r . r -> (a -> r) -> Maybe a -> r
lib/Data/Monoid.hs view
@@ -21,19 +21,19 @@ newtype First a = First { getFirst :: Maybe a } -instance forall a . Semigroup (First a) where+instance Semigroup (First a) where a@(First (Just _)) <> _ = a First Nothing <> a = a -instance forall a . Monoid (First a) where+instance Monoid (First a) where mempty = First Nothing newtype Last a = Last { getLast :: Maybe a } -instance forall a . Semigroup (Last a) where+instance Semigroup (Last a) where _ <> a@(Last (Just _)) = a a <> Last Nothing = a -instance forall a . Monoid (Last a) where+instance Monoid (Last a) where mempty = Last Nothing
lib/Data/Ord.hs view
@@ -52,6 +52,9 @@ comparing :: (Ord b) => (a -> b) -> a -> a -> Ordering comparing f x y = compare (f x) (f y) +clamp :: (Ord a) => (a, a) -> a -> a+clamp (low, high) a = min high (max a low)+ {- newtype Down a = Down { getDown :: a -- ^ @since 4.14.0.0
lib/Data/Proxy.hs view
@@ -9,10 +9,10 @@ type Proxy :: forall (k::Kind) . k -> Type data Proxy a = Proxy -instance forall a . Show (Proxy a) where+instance Show (Proxy a) where show _ = "Proxy" -instance forall a . Eq (Proxy a) where+instance Eq (Proxy a) where _ == _ = True instance Functor Proxy where
lib/Data/Ratio.hs view
@@ -9,6 +9,7 @@ ) where import Prelude() -- do not import Prelude import Data.Bool+import Data.Enum import Data.Eq import Data.Fractional import Data.Function@@ -43,16 +44,26 @@ -- x/0 == 1/0 when x > 0 -- x/0 == -1/0 when x < 0 -instance forall a . Eq a => Eq (Ratio a) where+instance (Integral a) => Enum (Ratio a) where+ succ x = x + 1+ pred x = x - 1+ toEnum = fromIntegral+ fromEnum = fromInteger . truncate+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo++instance Eq a => Eq (Ratio a) where (x :% y) == (x' :% y') = x == x' && y == y' -instance forall a . (Integral a, Ord a) => Ord (Ratio a) where+instance (Integral a, Ord a) => Ord (Ratio a) where (x :% y) <= (x' :% y') = x * y' <= x' * y (x :% y) < (x' :% y') = x * y' < x' * y (x :% y) >= (x' :% y') = x * y' >= x' * y (x :% y) > (x' :% y') = x * y' > x' * y -instance forall a . (Integral a, Ord a) => Num (Ratio a) where+instance (Integral a, Ord a) => Num (Ratio a) where (x:%y) + (x':%y') = reduce (x*y' + x'*y) (y*y') (x:%y) - (x':%y') = reduce (x*y' - x'*y) (y*y') (x:%y) * (x':%y') = reduce (x * x') (y * y')@@ -61,20 +72,20 @@ signum (x:%_) = signum x :% 1 fromInteger x = fromInteger x :% 1 -instance forall a . (Integral a, Ord a) => Fractional (Ratio a) where+instance (Integral a, Ord a) => Fractional (Ratio a) where (x:%y) / (x':%y') = reduce (x*y') (y*x') recip (x:%y) | x < 0 = (-y) :% (-x) | otherwise = y :% x fromRational (x:%y) = fromInteger x % fromInteger y -instance forall a . (Show a) => Show (Ratio a) where+instance (Show a) => Show (Ratio a) where showsPrec p (x:%y) = showParen (p > 7) $ showsPrec 8 x . showString " % " . showsPrec 8 y -instance forall a . (Integral a, Ord a) => Real (Ratio a) where+instance (Integral a, Ord a) => Real (Ratio a) where toRational (x :% y) = toInteger x :% toInteger y rationalInfinity :: Rational
lib/Data/Text.hs view
@@ -3,9 +3,12 @@ pack, unpack, empty, append,+ null, head,+ tail,+ uncons, ) where-import Prelude(); import MiniPrelude hiding(head)+import Prelude(); import MiniPrelude hiding(head, tail, null) import Data.Monoid.Internal import Data.String import qualified Data.ByteString.Internal as BS@@ -41,13 +44,23 @@ empty = pack [] pack :: String -> Text-pack s = T (primitive "toUTF8" s)+pack s = T (_primitive "toUTF8" s) unpack :: Text -> String-unpack (T t) = primitive "fromUTF8" t+unpack (T t) = _primitive "fromUTF8" t append :: Text -> Text -> Text append (T x) (T y) = T (BS.append x y) +null :: Text -> Bool+null (T bs) = BS.null bs+ head :: Text -> Char-head (T t) = primitive "headUTF8" t+head (T t) = _primitive "headUTF8" t++tail :: Text -> Text+tail (T t) = _primitive "tailUTF8" t++uncons :: Text -> Maybe (Char, Text)+uncons t | null t = Nothing+ | otherwise = Just (head t, tail t)
+ lib/Data/Text/IO.hs view
@@ -0,0 +1,10 @@+module Data.Text.IO(readFile, writeFile) where+import Prelude hiding (readFile, writeFile)+import qualified Prelude as P+import Data.Text++readFile :: FilePath -> IO Text+readFile fn = pack <$> P.readFile fn++writeFile :: FilePath -> Text -> IO ()+writeFile fn t = P.writeFile fn (unpack t)
+ lib/Data/Text/Lazy.hs view
@@ -0,0 +1,67 @@+-- XXX Use coerce of Data.Text+module Data.Text.Lazy(+ Text,+ pack, unpack,+ empty,+ append,+ null,+ head,+ tail,+ uncons,+ ) where+import Prelude(); import MiniPrelude hiding(head)+import Data.Monoid.Internal+import Data.String+import qualified Data.ByteString.Internal as BS++newtype Text = T BS.ByteString++instance Eq Text where+ (==) = cmp (==)+ (/=) = cmp (/=)++instance Ord Text where+ (<) = cmp (<)+ (<=) = cmp (<=)+ (>) = cmp (>)+ (>=) = cmp (>=)++cmp :: (BS.ByteString -> BS.ByteString -> Bool) -> (Text -> Text -> Bool)+cmp op (T x) (T y) = op x y++instance Show Text where+ showsPrec p = showsPrec p . unpack++instance IsString Text where+ fromString = pack++instance Semigroup Text where+ (<>) = append++instance Monoid Text where+ mempty = empty++empty :: Text+empty = pack []++pack :: String -> Text+pack s = T (_primitive "toUTF8" s)++unpack :: Text -> String+unpack (T t) = _primitive "fromUTF8" t++append :: Text -> Text -> Text+append (T x) (T y) = T (BS.append x y)++null :: Text -> Bool+null (T bs) = BS.null bs++head :: Text -> Char+head (T t) = _primitive "headUTF8" t++tail :: Text -> Text+tail (T t) = _primitive "tailUTF8" t++uncons :: Text -> Maybe (Char, Text)+uncons t | null t = Nothing+ | otherwise = Just (head t, tail t)
+ lib/Data/Text/Lazy/IO.hs view
@@ -0,0 +1,10 @@+module Data.Text.Lazy.IO(readFile, writeFile) where+import Prelude hiding (readFile, writeFile)+import qualified Prelude as P+import Data.Text.Lazy++readFile :: FilePath -> IO Text+readFile fn = pack <$> P.readFile fn++writeFile :: FilePath -> Text -> IO ()+writeFile fn t = P.writeFile fn (unpack t)
lib/Data/Traversable.hs view
@@ -70,7 +70,7 @@ traverse f = List.foldr cons_f (pure []) where cons_f x ys = liftA2 (:) (f x) ys -instance forall a . Traversable (Either a) where+instance Traversable (Either a) where traverse _ (Left x) = pure (Left x) traverse f (Right y) = Right <$> f y @@ -80,7 +80,7 @@ instance Traversable Proxy where traverse _ _ = pure Proxy -instance forall m . Traversable (Const m) where+instance Traversable (Const m) where traverse _ (Const m) = pure $ Const m {-
lib/Data/Tuple.hs view
@@ -46,66 +46,76 @@ instance Eq () where () == () = True -instance forall a b . (Eq a, Eq b) => Eq (a, b) where+instance (Eq a, Eq b) => Eq (a, b) where (a1, b1) == (a2, b2) = a1 == a2 && b1 == b2 -instance forall a b c . (Eq a, Eq b, Eq c) => Eq (a, b, c) where+instance (Eq a, Eq b, Eq c) => Eq (a, b, c) where (a1, b1, c1) == (a2, b2, c2) = a1 == a2 && b1 == b2 && c1 == c2 -instance forall a b c d . (Eq a, Eq b, Eq c, Eq d) => Eq (a, b, c, d) where+instance (Eq a, Eq b, Eq c, Eq d) => Eq (a, b, c, d) where (a1, b1, c1, d1) == (a2, b2, c2, d2) = a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2 +instance (Eq a, Eq b, Eq c, Eq d, Eq e) => Eq (a, b, c, d, e) where+ (a1, b1, c1, d1, e1) == (a2, b2, c2, d2, e2) = a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2 && e1 == e2+ ----------------------------------- instance Ord () where () `compare` () = EQ -instance forall a b . (Ord a, Ord b) => Ord (a, b) where+instance (Ord a, Ord b) => Ord (a, b) where (a1, b1) `compare` (a2, b2) = a1 `compare` a2 <> b1 `compare` b2 -instance forall a b c . (Ord a, Ord b, Ord c) => Ord (a, b, c) where+instance (Ord a, Ord b, Ord c) => Ord (a, b, c) where (a1, b1, c1) `compare` (a2, b2, c2) = a1 `compare` a2 <> b1 `compare` b2 <> c1 `compare` c2 -instance forall a b c d . (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d) where+instance (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d) where (a1, b1, c1, d1) `compare` (a2, b2, c2, d2) = a1 `compare` a2 <> b1 `compare` b2 <> c1 `compare` c2 <> d1 `compare` d2 +instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e) where+ (a1, b1, c1, d1, e1) `compare` (a2, b2, c2, d2, e2) = a1 `compare` a2 <> b1 `compare` b2 <> c1 `compare` c2 <> d1 `compare` d2 <> e1 `compare` e2+ ----------------------------------- instance Show () where showsPrec _ () = showString "()" -instance forall a . Show a => Show (Solo a) where+instance Show a => Show (Solo a) where showsPrec p (MkSolo a) = showParen (p > 10) (showString "MkSolo " . showsPrec 11 a) -instance forall a b . (Show a, Show b) => Show (a, b) where+instance (Show a, Show b) => Show (a, b) where showsPrec _ (a, b) = showParen True (showsPrec 0 a . showString "," . showsPrec 0 b) -instance forall a b c . (Show a, Show b, Show c) => Show (a, b, c) where+instance (Show a, Show b, Show c) => Show (a, b, c) where showsPrec _ (a, b, c) = showParen True (showsPrec 0 a . showString "," . showsPrec 0 b . showString "," . showsPrec 0 c) -instance forall a b c d . (Show a, Show b, Show c, Show d) => Show (a, b, c, d) where+instance (Show a, Show b, Show c, Show d) => Show (a, b, c, d) where showsPrec _ (a, b, c, d) = showParen True (showsPrec 0 a . showString "," . showsPrec 0 b . showString "," . showsPrec 0 c . showString "," . showsPrec 0 d) +instance (Show a, Show b, Show c, Show d, Show e) => Show (a, b, c, d, e) where+ showsPrec _ (a, b, c, d, e) = showParen True (showsPrec 0 a . showString "," . showsPrec 0 b . showString "," . showsPrec 0 c .+ showString "," . showsPrec 0 d . showString "," . showsPrec 0 e)+ ----------------------------------- instance Bounded () where minBound = () maxBound = () -instance forall a . (Bounded a) => Bounded (Solo a) where+instance (Bounded a) => Bounded (Solo a) where minBound = MkSolo minBound maxBound = MkSolo maxBound -instance forall a b . (Bounded a, Bounded b) => Bounded (a, b) where+instance (Bounded a, Bounded b) => Bounded (a, b) where minBound = (minBound, minBound) maxBound = (maxBound, maxBound) -instance forall a b c . (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c) where+instance (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c) where minBound = (minBound, minBound, minBound) maxBound = (maxBound, maxBound, maxBound) -instance forall a b c d . (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d) where+instance (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d) where minBound = (minBound, minBound, minBound, minBound) maxBound = (maxBound, maxBound, maxBound, maxBound) @@ -114,16 +124,16 @@ instance Semigroup () where _ <> _ = () -instance forall a . Semigroup a => Semigroup (Solo a) where+instance Semigroup a => Semigroup (Solo a) where MkSolo a <> MkSolo b = MkSolo (a <> b) -instance forall a b . (Semigroup a, Semigroup b) => Semigroup (a, b) where+instance (Semigroup a, Semigroup b) => Semigroup (a, b) where (a, b) <> (a', b') = (a <> a', b <> b') -instance forall a b c . (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) where+instance (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) where (a, b, c) <> (a', b', c') = (a <> a', b <> b', c <> c') -instance forall a b c d . (Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) where+instance (Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) where (a, b, c, d) <> (a', b', c', d') = (a <> a', b <> b', c <> c', d <> d') -----------------------------------@@ -131,39 +141,39 @@ instance Monoid () where mempty = () -instance forall a . Monoid a => Monoid (Solo a) where+instance Monoid a => Monoid (Solo a) where mempty = MkSolo mempty -instance forall a b . (Monoid a, Monoid b) => Monoid (a, b) where+instance (Monoid a, Monoid b) => Monoid (a, b) where mempty = (mempty, mempty) -instance forall a b c . (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) where+instance (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) where mempty = (mempty, mempty, mempty) -instance forall a b c d . (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) where+instance (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) where mempty = (mempty, mempty, mempty, mempty) ----------------------------------- -- Virtual fields for tuples. -instance forall a b . HasField "_1" (a, b) a where getField _ (a, b) = a-instance forall a b . SetField "_1" (a, b) a where setField _ (a, b) = \ a -> (a, b)-instance forall a b . HasField "_2" (a, b) b where getField _ (a, b) = b-instance forall a b . SetField "_2" (a, b) b where setField _ (a, b) = \ b -> (a, b)+instance HasField "_1" (a, b) a where getField _ (a, b) = a+instance SetField "_1" (a, b) a where setField _ (a, b) = \ a -> (a, b)+instance HasField "_2" (a, b) b where getField _ (a, b) = b+instance SetField "_2" (a, b) b where setField _ (a, b) = \ b -> (a, b) -instance forall a b c . HasField "_1" (a, b, c) a where getField _ (a, b, c) = a-instance forall a b c . SetField "_1" (a, b, c) a where setField _ (a, b, c) = \ a -> (a, b, c)-instance forall a b c . HasField "_2" (a, b, c) b where getField _ (a, b, c) = b-instance forall a b c . SetField "_2" (a, b, c) b where setField _ (a, b, c) = \ b -> (a, b, c)-instance forall a b c . HasField "_3" (a, b, c) c where getField _ (a, b, c) = c-instance forall a b c . SetField "_3" (a, b, c) c where setField _ (a, b, c) = \ c -> (a, b, c)+instance HasField "_1" (a, b, c) a where getField _ (a, b, c) = a+instance SetField "_1" (a, b, c) a where setField _ (a, b, c) = \ a -> (a, b, c)+instance HasField "_2" (a, b, c) b where getField _ (a, b, c) = b+instance SetField "_2" (a, b, c) b where setField _ (a, b, c) = \ b -> (a, b, c)+instance HasField "_3" (a, b, c) c where getField _ (a, b, c) = c+instance SetField "_3" (a, b, c) c where setField _ (a, b, c) = \ c -> (a, b, c) -instance forall a b c d . HasField "_1" (a, b, c, d) a where getField _ (a, b, c, d) = a-instance forall a b c d . SetField "_1" (a, b, c, d) a where setField _ (a, b, c, d) = \ a -> (a, b, c, d)-instance forall a b c d . HasField "_2" (a, b, c, d) b where getField _ (a, b, c, d) = b-instance forall a b c d . SetField "_2" (a, b, c, d) b where setField _ (a, b, c, d) = \ b -> (a, b, c, d)-instance forall a b c d . HasField "_3" (a, b, c, d) c where getField _ (a, b, c, d) = c-instance forall a b c d . SetField "_3" (a, b, c, d) c where setField _ (a, b, c, d) = \ c -> (a, b, c, d)-instance forall a b c d . HasField "_4" (a, b, c, d) d where getField _ (a, b, c, d) = d-instance forall a b c d . SetField "_4" (a, b, c, d) d where setField _ (a, b, c, d) = \ d -> (a, b, c, d)+instance HasField "_1" (a, b, c, d) a where getField _ (a, b, c, d) = a+instance SetField "_1" (a, b, c, d) a where setField _ (a, b, c, d) = \ a -> (a, b, c, d)+instance HasField "_2" (a, b, c, d) b where getField _ (a, b, c, d) = b+instance SetField "_2" (a, b, c, d) b where setField _ (a, b, c, d) = \ b -> (a, b, c, d)+instance HasField "_3" (a, b, c, d) c where getField _ (a, b, c, d) = c+instance SetField "_3" (a, b, c, d) c where setField _ (a, b, c, d) = \ c -> (a, b, c, d)+instance HasField "_4" (a, b, c, d) d where getField _ (a, b, c, d) = d+instance SetField "_4" (a, b, c, d) d where setField _ (a, b, c, d) = \ d -> (a, b, c, d)
lib/Data/Typeable.hs view
@@ -175,5 +175,5 @@ instance Typeable (,,) where typeRep = nullary "Data.Tuple" ",," instance Typeable (,,,) where typeRep = nullary "Data.Tuple" ",,," -instance forall f a . (Typeable f, Typeable a) => Typeable (f a) where+instance (Typeable f, Typeable a) => Typeable (f a) where typeRep _ = mkAppTy (typeRep (Proxy :: Proxy f)) (typeRep (Proxy :: Proxy a))
lib/Data/Word.hs view
@@ -12,12 +12,13 @@ import Data.Eq import Data.Function import Data.Int() -- instances only-import Data.Integer+import Data.Integer_Type import Data.Integral import Data.List import Data.Maybe_Type import Data.Num import Data.Ord+import Data.Ratio_Type import Data.Real import Numeric.Show import Text.Show@@ -28,7 +29,7 @@ (*) = primWordMul abs x = x signum x = if x == 0 then 0 else 1- fromInteger x = primIntToWord (_integerToInt x)+ fromInteger = _integerToWord instance Integral Word where quot = primWordQuot@@ -57,16 +58,10 @@ pred x = x - 1 toEnum = primIntToWord fromEnum = primWordToInt- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo -------------------------------- @@ -88,16 +83,27 @@ (.|.) = primWordOr xor = primWordXor complement = primWordInv- shiftL = primWordShl- shiftR = primWordShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= _wordSize = 0+ | True = x `primWordShl` i+ unsafeShiftL = primWordShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= _wordSize = 0+ | True = x `primWordShr` i+ unsafeShiftR = primWordShr bitSizeMaybe _ = Just _wordSize bitSize _ = _wordSize- bit n = primWordShl 1 n+ bit = bitDefault+ testBit = testBitDefault+ popCount = primWordPopcount zeroBits = 0 - instance FiniteBits Word where finiteBitSize _ = _wordSize+ countLeadingZeros = primWordClz+ countTrailingZeros = primWordCtz -------------------------------------------------------------------------------- ---- Word8@@ -127,7 +133,7 @@ (*) = bin8 primWordMul abs x = x signum x = if x == 0 then 0 else 1- fromInteger i = w8 (primIntToWord (_integerToInt i))+ fromInteger i = w8 (_integerToWord i) instance Integral Word8 where quot = bin8 primWordQuot@@ -154,16 +160,10 @@ pred x = x - 1 toEnum = w8 . primIntToWord fromEnum = primWordToInt . unW8- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Word8 where (==) = cmp8 primWordEQ@@ -181,15 +181,27 @@ (.|.) = bin8 primWordOr xor = bin8 primWordXor complement = una8 primWordInv- shiftL = bini8 primWordShl- shiftR = bini8 primWordShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 8 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini8 primWordShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 8 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini8 primWordShr bitSizeMaybe _ = Just 8 bitSize _ = 8- bit n = w8 (primWordShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount = primWordPopcount . unW8 zeroBits = 0 instance FiniteBits Word8 where finiteBitSize _ = 8+ countLeadingZeros (W8 x) = primWordClz x - (_wordSize - 8)+ countTrailingZeros (W8 x) = if x == 0 then 8 else primWordCtz x -------------------------------------------------------------------------------- ---- Word16@@ -219,7 +231,7 @@ (*) = bin16 primWordMul abs x = x signum x = if x == 0 then 0 else 1- fromInteger i = w16 (primIntToWord (_integerToInt i))+ fromInteger i = w16 (_integerToWord i) instance Integral Word16 where quot = bin16 primWordQuot@@ -245,17 +257,10 @@ succ x = x + 1 pred x = x - 1 toEnum = w16 . primIntToWord- fromEnum = primWordToInt . unW16- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Word16 where (==) = cmp16 primWordEQ@@ -273,15 +278,27 @@ (.|.) = bin16 primWordOr xor = bin16 primWordXor complement = una16 primWordInv- shiftL = bini16 primWordShl- shiftR = bini16 primWordShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 16 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini16 primWordShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 16 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini16 primWordShr bitSizeMaybe _ = Just 16 bitSize _ = 16- bit n = w16 (primWordShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount = primWordPopcount . unW16 zeroBits = 0 instance FiniteBits Word16 where finiteBitSize _ = 16+ countLeadingZeros (W16 x) = primWordClz x - (_wordSize - 16)+ countTrailingZeros (W16 x) = if x == 0 then 16 else primWordCtz x -------------------------------------------------------------------------------- ---- Word32@@ -311,7 +328,7 @@ (*) = bin32 primWordMul abs x = x signum x = if x == 0 then 0 else 1- fromInteger i = w32 (primIntToWord (_integerToInt i))+ fromInteger i = w32 (_integerToWord i) instance Integral Word32 where quot = bin32 primWordQuot@@ -338,16 +355,10 @@ pred x = x - 1 toEnum = w32 . primIntToWord fromEnum = primWordToInt . unW32- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Word32 where (==) = cmp32 primWordEQ@@ -365,15 +376,27 @@ (.|.) = bin32 primWordOr xor = bin32 primWordXor complement = una32 primWordInv- shiftL = bini32 primWordShl- shiftR = bini32 primWordShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 32 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini32 primWordShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 32 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini32 primWordShr bitSizeMaybe _ = Just 32 bitSize _ = 32- bit n = w32 (primWordShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount = primWordPopcount . unW32 zeroBits = 0 instance FiniteBits Word32 where finiteBitSize _ = 32+ countLeadingZeros (W32 x) = primWordClz x - (_wordSize - 32)+ countTrailingZeros (W32 x) = if x == 0 then 32 else primWordCtz x -------------------------------------------------------------------------------- ---- Word64@@ -403,7 +426,7 @@ (*) = bin64 primWordMul abs x = x signum x = if x == 0 then 0 else 1- fromInteger i = w64 (primIntToWord (_integerToInt i))+ fromInteger i = w64 (_integerToWord i) instance Integral Word64 where quot = bin64 primWordQuot@@ -430,16 +453,10 @@ pred x = x - 1 toEnum = w64 . primIntToWord fromEnum = primWordToInt . unW64- enumFrom n = n : enumFrom (n+1)- enumFromThen n m = from n- where d = m - n- from i = i : from (i+d)- enumFromTo l h = takeWhile (<= h) (enumFrom l)- enumFromThenTo l m h =- if m > l then- takeWhile (<= h) (enumFromThen l m)- else- takeWhile (>= h) (enumFromThen l m)+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Eq Word64 where (==) = cmp64 primWordEQ@@ -457,12 +474,24 @@ (.|.) = bin64 primWordOr xor = bin64 primWordXor complement = una64 primWordInv- shiftL = bini64 primWordShl- shiftR = bini64 primWordShr+ x `shiftL` i+ | i < 0 = _overflowError+ | i >= 64 = 0+ | True = x `unsafeShiftL` i+ unsafeShiftL = bini64 primWordShl+ x `shiftR` i+ | i < 0 = _overflowError+ | i >= 64 = 0+ | True = x `unsafeShiftR` i+ unsafeShiftR = bini64 primWordShr bitSizeMaybe _ = Just 64 bitSize _ = 64- bit n = w64 (primWordShl 1 n)+ bit = bitDefault+ testBit = testBitDefault+ popCount = primWordPopcount . unW64 zeroBits = 0 instance FiniteBits Word64 where finiteBitSize _ = 64+ countLeadingZeros = primWordClz . unW64+ countTrailingZeros = primWordCtz . unW64
lib/Debug/Trace.hs view
@@ -3,7 +3,7 @@ import Primitives trace :: forall a . String -> a -> a-trace msg a = primitive "IO.performIO" (+trace msg a = _primitive "IO.performIO" ( do putStrLn msg return a
lib/Foreign/C/String.hs view
@@ -2,8 +2,10 @@ CString, CStringLen, newCAString, newCAStringLen, peekCAString, peekCAStringLen,- withCAString,- peekCString,+ withCAString, withCAStringLen,+ newCString, newCStringLen,+ peekCString, peekCStringLen,+ withCString, withCStringLen, ) where import Prelude() -- do not import Prelude import Primitives@@ -27,13 +29,36 @@ free cs `primThen` primReturn a +withCAStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a+withCAStringLen s io =+ newCAStringLen s `primBind` \ cs@(p, _) ->+ io cs `primBind` \ a ->+ free p `primThen`+ primReturn a+ peekCAString :: CString -> IO String peekCAString = primPeekCAString peekCAStringLen :: CStringLen -> IO String peekCAStringLen (p, i) = primPeekCAStringLen p i --- Not quite right+------------------------------------------------------+-- XXX: No encoding!++newCString :: String -> IO CString+newCString = newCAString++newCStringLen :: String -> IO CStringLen+newCStringLen = newCAStringLen++withCString :: forall a . String -> (CString -> IO a) -> IO a+withCString = withCAString++withCStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a+withCStringLen = withCAStringLen+ peekCString :: CString -> IO String-peekCString = primPeekCAString+peekCString = peekCAString +peekCStringLen :: CStringLen -> IO String+peekCStringLen = peekCAStringLen
lib/Foreign/ForeignPtr.hs view
@@ -85,4 +85,4 @@ castForeignPtr = primUnsafeCoerce plusForeignPtr :: ForeignPtr a -> Int -> ForeignPtr b-plusForeignPtr = primitive "fp+"+plusForeignPtr = _primitive "fp+"
lib/Foreign/Ptr.hs view
@@ -12,17 +12,17 @@ import Numeric.Show(showHex) import Text.Show -instance forall a . Eq (Ptr a) where+instance Eq (Ptr a) where p == q = primPtrToWord p == primPtrToWord q -instance forall a . Ord (Ptr a) where+instance Ord (Ptr a) where p `compare` q = primPtrToWord p `compare` primPtrToWord q p < q = primPtrToWord p < primPtrToWord q p <= q = primPtrToWord p <= primPtrToWord q p > q = primPtrToWord p > primPtrToWord q p >= q = primPtrToWord p >= primPtrToWord q -instance forall a . Show (Ptr a) where+instance Show (Ptr a) where showsPrec _ p = showString "0x" . showHex (primPtrToWord p) nullPtr :: forall a . Ptr a@@ -39,13 +39,13 @@ ------- -instance forall a . Show (FunPtr a) where+instance Show (FunPtr a) where showsPrec _ p = showString "0x" . showHex (primFunPtrToWord p) -instance forall a . Eq (FunPtr a) where+instance Eq (FunPtr a) where p == q = primFunPtrToWord p == primFunPtrToWord q -instance forall a . Ord (FunPtr a) where+instance Ord (FunPtr a) where p `compare` q = primFunPtrToWord p `compare` primFunPtrToWord q p < q = primFunPtrToWord p < primFunPtrToWord q p <= q = primFunPtrToWord p <= primFunPtrToWord q
lib/Foreign/Storable.hs view
@@ -48,7 +48,7 @@ foreign import ccall "peekPtr" c_peekPtr :: Ptr (Ptr ()) -> IO (Ptr ()) foreign import ccall "pokePtr" c_pokePtr :: Ptr (Ptr ()) -> Ptr () -> IO () -instance forall a . Storable (Ptr a) where+instance Storable (Ptr a) where sizeOf _ = wordSizeInBytes alignment _ = wordSizeInBytes peek p = c_peekPtr (castPtr p) `primBind` \ q -> primReturn (castPtr q)
lib/Primitives.hs view
@@ -25,7 +25,8 @@ -- Types data AnyType-data Char+--data Char+newtype Char = Char Word data Int data FloatW data IO a@@ -37,216 +38,228 @@ -- (), (,), (,,), etc are built in to the compiler primIntAdd :: Int -> Int -> Int-primIntAdd = primitive "+"+primIntAdd = _primitive "+" primIntSub :: Int -> Int -> Int-primIntSub = primitive "-"+primIntSub = _primitive "-" primIntMul :: Int -> Int -> Int-primIntMul = primitive "*"+primIntMul = _primitive "*" primIntQuot :: Int -> Int -> Int-primIntQuot = primitive "quot"+primIntQuot = _primitive "quot" primIntRem :: Int -> Int -> Int-primIntRem = primitive "rem"+primIntRem = _primitive "rem" primIntSubR :: Int -> Int -> Int-primIntSubR = primitive "subtract"+primIntSubR = _primitive "subtract" primIntNeg :: Int -> Int-primIntNeg = primitive "neg"+primIntNeg = _primitive "neg" primIntEQ :: Int -> Int -> Bool-primIntEQ = primitive "=="+primIntEQ = _primitive "==" primIntNE :: Int -> Int -> Bool-primIntNE = primitive "/="+primIntNE = _primitive "/=" primIntLT :: Int -> Int -> Bool-primIntLT = primitive "<"+primIntLT = _primitive "<" primIntLE :: Int -> Int -> Bool-primIntLE = primitive "<="+primIntLE = _primitive "<=" primIntGT :: Int -> Int -> Bool-primIntGT = primitive ">"+primIntGT = _primitive ">" primIntGE :: Int -> Int -> Bool-primIntGE = primitive ">="+primIntGE = _primitive ">=" primFloatWAdd :: FloatW -> FloatW -> FloatW-primFloatWAdd = primitive "f+"+primFloatWAdd = _primitive "f+" primFloatWSub :: FloatW -> FloatW -> FloatW-primFloatWSub = primitive "f-"+primFloatWSub = _primitive "f-" primFloatWMul :: FloatW -> FloatW -> FloatW-primFloatWMul = primitive "f*"+primFloatWMul = _primitive "f*" primFloatWDiv :: FloatW -> FloatW -> FloatW-primFloatWDiv = primitive "f/"+primFloatWDiv = _primitive "f/" primFloatWNeg :: FloatW -> FloatW-primFloatWNeg = primitive "fneg"+primFloatWNeg = _primitive "fneg" primFloatWEQ :: FloatW -> FloatW -> Bool-primFloatWEQ = primitive "f=="+primFloatWEQ = _primitive "f==" primFloatWNE :: FloatW -> FloatW -> Bool-primFloatWNE = primitive "f/="+primFloatWNE = _primitive "f/=" primFloatWLT :: FloatW -> FloatW -> Bool-primFloatWLT = primitive "f<"+primFloatWLT = _primitive "f<" primFloatWLE :: FloatW -> FloatW -> Bool-primFloatWLE = primitive "f<="+primFloatWLE = _primitive "f<=" primFloatWGT :: FloatW -> FloatW -> Bool-primFloatWGT = primitive "f>"+primFloatWGT = _primitive "f>" primFloatWGE :: FloatW -> FloatW -> Bool-primFloatWGE = primitive "f>="+primFloatWGE = _primitive "f>=" primFloatWShow :: FloatW -> [Char]-primFloatWShow = primitive "fshow"+primFloatWShow = _primitive "fshow" primFloatWRead :: [Char] -> FloatW-primFloatWRead = primitive "fread"+primFloatWRead = _primitive "fread" primFloatWFromInt :: Int -> FloatW-primFloatWFromInt = primitive "itof"+primFloatWFromInt = _primitive "itof" primWordAdd :: Word -> Word -> Word-primWordAdd = primitive "+"+primWordAdd = _primitive "+" primWordSub :: Word -> Word -> Word-primWordSub = primitive "-"+primWordSub = _primitive "-" primWordMul :: Word -> Word -> Word-primWordMul = primitive "*"+primWordMul = _primitive "*" primWordQuot :: Word -> Word -> Word-primWordQuot = primitive "uquot"+primWordQuot = _primitive "uquot" primWordRem :: Word -> Word -> Word-primWordRem = primitive "urem"+primWordRem = _primitive "urem" primWordAnd :: Word -> Word -> Word-primWordAnd = primitive "and"+primWordAnd = _primitive "and" primWordOr :: Word -> Word -> Word-primWordOr = primitive "or"+primWordOr = _primitive "or" primWordXor :: Word -> Word -> Word-primWordXor = primitive "xor"+primWordXor = _primitive "xor" primWordShl :: Word -> Int -> Word-primWordShl = primitive "shl"+primWordShl = _primitive "shl" primWordShr :: Word -> Int -> Word-primWordShr = primitive "shr"+primWordShr = _primitive "shr" primWordAshr :: Word -> Int -> Word-primWordAshr = primitive "ashr"+primWordAshr = _primitive "ashr" primWordInv :: Word -> Word-primWordInv = primitive "inv"+primWordInv = _primitive "inv"+primWordPopcount :: Word -> Int+primWordPopcount = _primitive "popcount"+primWordClz :: Word -> Int+primWordClz = _primitive "clz"+primWordCtz :: Word -> Int+primWordCtz = _primitive "ctz" primWordToFloatWRaw :: Word -> FloatW-primWordToFloatWRaw = primitive "toDbl"+primWordToFloatWRaw = _primitive "toDbl" primWordFromFloatWRaw :: FloatW -> Word-primWordFromFloatWRaw = primitive "toInt"+primWordFromFloatWRaw = _primitive "toInt" primIntAnd :: Int -> Int -> Int-primIntAnd = primitive "and"+primIntAnd = _primitive "and" primIntOr :: Int -> Int -> Int-primIntOr = primitive "or"+primIntOr = _primitive "or" primIntXor :: Int -> Int -> Int-primIntXor = primitive "xor"+primIntXor = _primitive "xor" primIntShl :: Int -> Int -> Int-primIntShl = primitive "shl"+primIntShl = _primitive "shl" primIntShr :: Int -> Int -> Int-primIntShr = primitive "ashr"+primIntShr = _primitive "ashr" primIntInv :: Int -> Int-primIntInv = primitive "inv"+primIntInv = _primitive "inv"+primIntPopcount :: Int -> Int+primIntPopcount = _primitive "popcount"+primIntClz :: Int -> Int+primIntClz = _primitive "clz"+primIntCtz :: Int -> Int+primIntCtz = _primitive "ctz" primWordEQ :: Word -> Word -> Bool-primWordEQ = primitive "=="+primWordEQ = _primitive "==" primWordNE :: Word -> Word -> Bool-primWordNE = primitive "/="+primWordNE = _primitive "/=" primWordLT :: Word -> Word -> Bool-primWordLT = primitive "u<"+primWordLT = _primitive "u<" primWordLE :: Word -> Word -> Bool-primWordLE = primitive "u<="+primWordLE = _primitive "u<=" primWordGT :: Word -> Word -> Bool-primWordGT = primitive "u>"+primWordGT = _primitive "u>" primWordGE :: Word -> Word -> Bool-primWordGE = primitive "u>="+primWordGE = _primitive "u>=" primWordToInt :: Word -> Int-primWordToInt = primitive "I"+primWordToInt = _primitive "I" primIntToWord :: Int -> Word-primIntToWord = primitive "I"+primIntToWord = _primitive "I" --- Char is represented by Int+-- Char is represented by Word primCharEQ :: Char -> Char -> Bool-primCharEQ = primitive "=="+primCharEQ = _primitive "==" primCharNE :: Char -> Char -> Bool-primCharNE = primitive "/="+primCharNE = _primitive "/=" primCharLT :: Char -> Char -> Bool-primCharLT = primitive "<"+primCharLT = _primitive "u<" primCharLE :: Char -> Char -> Bool-primCharLE = primitive "<="+primCharLE = _primitive "u<=" primCharGT :: Char -> Char -> Bool-primCharGT = primitive ">"+primCharGT = _primitive "u>" primCharGE :: Char -> Char -> Bool-primCharGE = primitive ">="+primCharGE = _primitive "u>=" primFix :: forall a . (a -> a) -> a-primFix = primitive "Y"+primFix = _primitive "Y" primSeq :: forall a b . a -> b -> b-primSeq = primitive "seq"+primSeq = _primitive "seq" --primEqual :: forall a . a -> a -> Bool---primEqual = primitive "equal"+--primEqual = _primitive "equal" -- Works for Int, Char, String-primStringCompare :: forall a . [Char] -> [Char] -> Ordering-primStringCompare = primitive "scmp"-primIntCompare :: forall a . Int -> Int -> Ordering-primIntCompare = primitive "icmp"-primCharCompare :: forall a . Char -> Char -> Ordering-primCharCompare = primitive "icmp"-primWordCompare :: forall a . Word -> Word -> Ordering-primWordCompare = primitive "ucmp"+primStringCompare :: [Char] -> [Char] -> Ordering+primStringCompare = _primitive "scmp"+primIntCompare :: Int -> Int -> Ordering+primIntCompare = _primitive "icmp"+primCharCompare :: Char -> Char -> Ordering+primCharCompare = _primitive "icmp"+primWordCompare :: Word -> Word -> Ordering+primWordCompare = _primitive "ucmp" primStringEQ :: [Char] -> [Char] -> Bool-primStringEQ = primitive "sequal"+primStringEQ = _primitive "sequal" primChr :: Int -> Char-primChr = primitive "chr"+primChr = _primitive "chr" primOrd :: Char -> Int-primOrd = primitive "ord"+primOrd = _primitive "ord" primUnsafeCoerce :: forall a b . a -> b-primUnsafeCoerce = primitive "I"+primUnsafeCoerce = _primitive "I" primBind :: forall a b . IO a -> (a -> IO b) -> IO b-primBind = primitive "IO.>>="+primBind = _primitive "IO.>>=" primThen :: forall a b . IO a -> IO b -> IO b-primThen = primitive "IO.>>"+primThen = _primitive "IO.>>" primReturn :: forall a . a -> IO a-primReturn = primitive "IO.return"+primReturn = _primitive "IO.return" primGetArgRef :: IO (IOArray [[Char]])-primGetArgRef = primitive "IO.getArgRef"+primGetArgRef = _primitive "IO.getArgRef" primPerformIO :: forall a . IO a -> a-primPerformIO = primitive "IO.performIO"+primPerformIO = _primitive "IO.performIO" primRnfErr :: forall a . a -> ()-primRnfErr = primitive "rnf" (0::Int)+primRnfErr = _primitive "rnf" (0::Int) primRnfNoErr :: forall a . a -> ()-primRnfNoErr = primitive "rnf" (1::Int)+primRnfNoErr = _primitive "rnf" (1::Int) primNewCAStringLen :: [Char] -> IO (Ptr Char, Int)-primNewCAStringLen = primitive "newCAStringLen"+primNewCAStringLen = _primitive "newCAStringLen" primPeekCAString :: Ptr Char -> IO [Char]-primPeekCAString = primitive "peekCAString"+primPeekCAString = _primitive "peekCAString" primPeekCAStringLen :: Ptr Char -> Int -> IO [Char]-primPeekCAStringLen = primitive "peekCAStringLen"+primPeekCAStringLen = _primitive "peekCAStringLen" primWordToPtr :: forall a . Word -> Ptr a-primWordToPtr = primitive "toPtr"+primWordToPtr = _primitive "toPtr" primPtrToWord :: forall a . Ptr a -> Word-primPtrToWord = primitive "toInt"+primPtrToWord = _primitive "toInt" primIntToPtr :: forall a . Int -> Ptr a-primIntToPtr = primitive "toPtr"+primIntToPtr = _primitive "toPtr" primPtrToInt :: forall a . Ptr a -> Int-primPtrToInt = primitive "toInt"+primPtrToInt = _primitive "toInt" primFunPtrToWord :: forall a . FunPtr a -> Word-primFunPtrToWord = primitive "toInt"+primFunPtrToWord = _primitive "toInt" primIntToFunPtr :: forall a . Int -> FunPtr a-primIntToFunPtr = primitive "toFunPtr"+primIntToFunPtr = _primitive "toFunPtr" primFunPtrToPtr :: forall a b . FunPtr a -> Ptr b-primFunPtrToPtr = primitive "toPtr"+primFunPtrToPtr = _primitive "toPtr" primPtrToFunPtr :: forall a b . Ptr a -> FunPtr b-primPtrToFunPtr = primitive "toFunPtr"+primPtrToFunPtr = _primitive "toFunPtr" -- Size in bits of Word/Int. -- Will get constant folded on first use.@@ -262,33 +275,33 @@ _isWindows = primPerformIO c_iswindows `primIntEQ` 1 primArrAlloc :: forall a . Int -> a -> IO (IOArray a)-primArrAlloc = primitive "A.alloc"+primArrAlloc = _primitive "A.alloc" primArrCopy :: forall a . IOArray a -> IO (IOArray a)-primArrCopy = primitive "A.copy"+primArrCopy = _primitive "A.copy" primArrSize :: forall a . IOArray a -> IO Int-primArrSize = primitive "A.size"+primArrSize = _primitive "A.size" primArrRead :: forall a . IOArray a -> Int -> IO a-primArrRead = primitive "A.read"+primArrRead = _primitive "A.read" primArrWrite :: forall a . IOArray a -> Int -> a -> IO ()-primArrWrite = primitive "A.write"+primArrWrite = _primitive "A.write" -- Not referentially transparent primArrEQ :: forall a . IOArray a -> IOArray a -> Bool-primArrEQ = primitive "A.=="+primArrEQ = _primitive "A.==" primGC :: IO ()-primGC = primitive "IO.gc"+primGC = _primitive "IO.gc" primForeignPtrToPtr :: ForeignPtr a -> Ptr a-primForeignPtrToPtr = primitive "fp2p"+primForeignPtrToPtr = _primitive "fp2p" primNewForeignPtr :: Ptr a -> IO (ForeignPtr a)-primNewForeignPtr = primitive "fpnew"+primNewForeignPtr = _primitive "fpnew" primAddFinalizer :: FunPtr (Ptr a -> IO ()) -> ForeignPtr a -> IO ()-primAddFinalizer = primitive "fpfin"+primAddFinalizer = _primitive "fpfin"
lib/System/Exit.hs view
@@ -11,7 +11,7 @@ import System.IO data ExitCode = ExitSuccess | ExitFailure Int- deriving (Eq, Typeable, Show)+ deriving (Eq, Ord, Typeable, Show) instance Exception ExitCode
lib/System/IO.hs view
@@ -28,6 +28,8 @@ BufferMode(..), hSetBuffering, + IOException(..),+ ) where import Prelude() -- do not import Prelude import Primitives@@ -58,13 +60,13 @@ data FILE primHPrint :: forall a . Ptr BFILE -> a -> IO ()-primHPrint = primitive "IO.print"+primHPrint = _primitive "IO.print" primStdin :: ForeignPtr BFILE-primStdin = primitive "IO.stdin"+primStdin = _primitive "IO.stdin" primStdout :: ForeignPtr BFILE-primStdout = primitive "IO.stdout"+primStdout = _primitive "IO.stdout" primStderr :: ForeignPtr BFILE-primStderr = primitive "IO.stderr"+primStderr = _primitive "IO.stderr" foreign import ccall "fopen" c_fopen :: CString -> CString -> IO (Ptr FILE) foreign import ccall "closeb" c_closeb :: Ptr BFILE -> IO ()
lib/System/IO/Internal.hs view
@@ -87,7 +87,7 @@ {- primSetDesc :: [Char] -> ForeignPtr BFILE -> IO ()-primSetDesc = primitive "fpstr"+primSetDesc = _primitive "fpstr" -} -- Create a Handle with the appropriate finalizer.
lib/System/IO/Serialize.hs view
@@ -11,9 +11,9 @@ import System.IO.Internal primHSerialize :: forall a . Ptr BFILE -> a -> IO ()-primHSerialize = primitive "IO.serialize"+primHSerialize = _primitive "IO.serialize" primHDeserialize :: forall a . Ptr BFILE -> IO a-primHDeserialize = primitive "IO.deserialize"+primHDeserialize = _primitive "IO.deserialize" hSerialize :: forall a . Handle -> a -> IO () hSerialize h a = withHandleWr h $ \ p -> primHSerialize p a
lib/Text/ParserCombinators/ReadP.hs view
@@ -312,7 +312,7 @@ scan s where scan (c:cs) | p c = do _ <- get; s <- scan cs; return (c:s)- scan _ = return ""+ scan _ = return (""::String) munch1 :: (Char -> Bool) -> ReadP String -- ^ Parses the first one or more characters satisfying the predicate.
lib/dist-mcabal/autogen/Paths_libs.hs view
@@ -1,4 +1,4 @@ module Paths_libs where import Data.Version-version :: Version; version = makeVersion [0,10,6,0]-getDataDir :: IO FilePath; getDataDir = return "/Users/augustss/.mcabal/mhs-0.10.6.0/packages/base-0.10.6.0/data"+version :: Version; version = makeVersion [0,11,4,0]+getDataDir :: IO FilePath; getDataDir = return "/Users/augustss/.mcabal/mhs-0.11.4.0/packages/base-0.11.4.0/data"
+ lib/gmp/Data/Integer/Internal.hs view
@@ -0,0 +1,306 @@+-- This module implements the operation needed to support+-- the Integer type.+module Data.Integer.Internal(+ Integer,+ zeroI, oneI, negOneI,+ eqI, neI, cmpI, ltI, leI, gtI, geI,+ addI, subI, mulI, quotRemI,+ negateI, absI,+ andI, orI, xorI,+ shiftLI, shiftRI,+ testBitI, popCountI,+ _intToInteger,+ _integerToFloatW,+ _integerToInt,+ _wordToInteger,+ ) where+import Prelude()+import Primitives+import Mhs.Builtin+import Data.Bool+import Data.Function+import Data.Ord+--import Foreign.Ptr(Ptr)+--import Foreign.ForeignPtr(withForeignPtr)+import System.IO.Internal+import System.IO.Unsafe+import Data.Integer_Type++-- We cannot import Foreign.ForeignPtr; it is circular.+withForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b+withForeignPtr fp io = + io (primForeignPtrToPtr fp) `primBind` \ b ->+ primSeq fp (primReturn b)++-----++foreign import capi "mpz_add" mpz_add :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_sub" mpz_sub :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_mul" mpz_mul :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_neg" mpz_neg :: Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_abs" mpz_abs :: Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_tdiv_qr" mpz_tdiv_qr :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_cmp" mpz_cmp :: Ptr MPZ -> Ptr MPZ -> IO Int+foreign import capi "mpz_and" mpz_and :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_ior" mpz_ior :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_xor" mpz_xor :: Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()+foreign import capi "mpz_mul_2exp" mpz_mul_2exp :: Ptr MPZ -> Ptr MPZ -> Int -> IO ()+foreign import capi "mpz_tdiv_q_2exp" mpz_tdiv_q_2exp :: Ptr MPZ -> Ptr MPZ -> Int -> IO ()+foreign import capi "mpz_popcount" mpz_popcount :: Ptr MPZ -> IO Int+foreign import capi "mpz_tstbit" mpz_tstbit :: Ptr MPZ -> Int -> IO Int++binop :: (Ptr MPZ -> Ptr MPZ -> Ptr MPZ -> IO ()) -> Integer -> Integer -> Integer+binop f (I x) (I y) = unsafePerformIO $ do+ z <- newMPZ+ withForeignPtr x $ \ px ->+ withForeignPtr y $ \ py ->+ withForeignPtr z $ \ pz ->+ f pz px py+ return (I z)++unop :: (Ptr MPZ -> Ptr MPZ -> IO ()) -> Integer -> Integer+unop f (I x) = unsafePerformIO $ do+ z <- newMPZ+ withForeignPtr x $ \ px ->+ withForeignPtr z $ \ pz ->+ f pz px+ return (I z)++addI :: Integer -> Integer -> Integer+addI = binop mpz_add++subI :: Integer -> Integer -> Integer+subI = binop mpz_sub++mulI :: Integer -> Integer -> Integer+mulI = binop mpz_mul++negateI :: Integer -> Integer+negateI = unop mpz_neg++absI :: Integer -> Integer+absI = unop mpz_abs++quotRemI :: Integer -> Integer -> (Integer, Integer)+quotRemI (I x) (I y) = unsafePerformIO $ do+ q <- newMPZ+ r <- newMPZ+ withForeignPtr x $ \ px ->+ withForeignPtr y $ \ py ->+ withForeignPtr q $ \ pq ->+ withForeignPtr r $ \ pr ->+ mpz_tdiv_qr pq pr px py+ return (I q, I r)++-- XXX should do quot and rem too++zeroI :: Integer+zeroI = _intToInteger (0::Int)++oneI :: Integer+oneI = _intToInteger (1::Int)++negOneI :: Integer+negOneI = _intToInteger (primIntNeg 1)++isZero :: Integer -> Bool+isZero = eqI zeroI++cmpop :: (Int -> a) -> Integer -> Integer -> a+cmpop f (I x) (I y) = unsafePerformIO $ + withForeignPtr x $ \ px ->+ withForeignPtr y $ \ py -> do+ s <- mpz_cmp px py+ return (f s)++eqI :: Integer -> Integer -> Bool+eqI = cmpop ((0::Int) ==)++neI :: Integer -> Integer -> Bool+neI = cmpop ((0::Int) /=)++cmpI :: Integer -> Integer -> Ordering+cmpI = cmpop (\ i -> if i < (0::Int) then LT else if i > (0::Int) then GT else EQ)++ltI :: Integer -> Integer -> Bool+ltI = cmpop (< (0::Int))++leI :: Integer -> Integer -> Bool+leI = cmpop (<= (0::Int))++gtI :: Integer -> Integer -> Bool+gtI = cmpop (> (0::Int))++geI :: Integer -> Integer -> Bool+geI = cmpop (>= (0::Int))++andI :: Integer -> Integer -> Integer+andI = binop mpz_and++orI :: Integer -> Integer -> Integer+orI = binop mpz_ior++xorI :: Integer -> Integer -> Integer+xorI = binop mpz_xor++-- XXX add complement++testBitI :: Integer -> Int -> Bool+testBitI (I x) i = unsafePerformIO $+ withForeignPtr x $ \ px -> do+ r <- mpz_tstbit px i+ return (r == (1::Int))++shiftLI :: Integer -> Int -> Integer+shiftLI x i = unop (\ pz px -> mpz_mul_2exp pz px i) x++shiftRI :: Integer -> Int -> Integer+shiftRI x i = unop (\ pz px -> mpz_tdiv_q_2exp pz px i) x++popCountI :: Integer -> Int+popCountI (I x) = unsafePerformIO $ withForeignPtr x $ mpz_popcount++---------------------------------+{-+pIntegerToInteger :: P.Integer -> Integer+pIntegerToInteger i | i >= 0 = I Plus (f i)+ | otherwise = I Minus (f (negate i))+ where+ f 0 = []+ f x = fromInteger (rem x (toInteger maxD)) : f (quot x (toInteger maxD))++integerToPInteger :: Integer -> P.Integer+integerToPInteger (I s xs) =+ let r = foldr (\ d r -> r * toInteger maxD + toInteger d) 0 xs+ in case s of+ Plus -> r+ Minus -> negate r++instance Num Integer where+ (+) = addI+ (-) = subI+ (*) = mulI+ abs x = if x < 0 then -x else x+ signum x = if x > 0 then 1 else if x < 0 then -1 else 0+ fromInteger = pIntegerToInteger++instance Enum Integer where+ fromEnum = fromEnum . integerToPInteger+ toEnum = _intToInteger++instance Real Integer where+ toRational = toRational . toInteger++instance Integral Integer where+ quotRem = quotRemI+ toInteger = integerToPInteger++--instance Show Integer where+-- show = showInteger++instance Eq Integer where+ (==) = eqI++instance Ord Integer where+ x < y = x `ltI` y+ x <= y = x == y || x `ltI` y+ x > y = y `ltI` x+ x >= y = x == y || y `ltI` x++instance Arbitrary Integer where+ arbitrary = do+ ndig <- frequency+ [(5, pure 0)+ ,(25, pure 1)+ ,(20, pure 2)+ ,(10, pure 3)+ ,(10, pure 4)+ ,(2, pure 5)+ ,(2, pure 6)+ ]+ digits <- vectorOf ndig (chooseInt (0, maxD - 1))+ sign <- elements [Plus, Minus]+ pure $ if null digits then I Plus [] else I sign digits++{-+newtype SmallInteger = SmallInteger Integer+ deriving Show++instance Arbitrary SmallInteger where+ arbitrary = do+ ndig <- frequency+ [(25, pure 1)+ ,(20, pure 2)+ ,(10, pure 3)+ ,(10, pure 4)+ ]+ digit <- chooseInt (1, maxD - 1)+ sign <- elements [Plus, Minus]+ pure $ SmallInteger $ I sign (replicate (ndig - 1) 0 ++ [digit])+-}+{-+sanity :: HasCallStack => Integer -> Integer+sanity (I Minus []) = undefined+sanity (I _ ds) | length ds > 1 && last ds == 0 = undefined+sanity i = i+-}++prop_roundtrip1 :: Integer -> Bool+prop_roundtrip1 i = fromInteger (toInteger i) == i++prop_negate :: Integer -> Bool+prop_negate i = toInteger (negate i) == negate (toInteger i)++prop_abs :: Integer -> Bool+prop_abs i = toInteger (abs i) == abs (toInteger i)++prop_add :: Integer -> Integer -> Bool+prop_add x y = toInteger (addI x y) == toInteger x + toInteger y++prop_sub :: Integer -> Integer -> Bool+prop_sub x y = toInteger (subI x y) == toInteger x - toInteger y++prop_mul :: Integer -> Integer -> Bool+prop_mul x y = toInteger (mulI x y) == toInteger x * toInteger y++prop_div :: Integer -> NonZero Integer -> Bool+prop_div x (NonZero y) =+ to (quotRemI x y) == toInteger x `quotRem` toInteger y+ where to (a, b) = (toInteger a, toInteger b)++prop_muldiv :: Integer -> NonZero Integer -> Bool+prop_muldiv x (NonZero y) =+ let (q, r) = quotRemI x y+ in q*y + r == x++prop_eq :: Integer -> Integer -> Bool+prop_eq x y = (eqI x y) == (toInteger x == toInteger y)++prop_ne :: Integer -> Integer -> Bool+prop_ne x y = (neI x y) == (toInteger x /= toInteger y)++prop_lt :: Integer -> Integer -> Bool+prop_lt x y = (ltI x y) == (toInteger x < toInteger y)++prop_gt :: Integer -> Integer -> Bool+prop_gt x y = (gtI x y) == (toInteger x > toInteger y)++prop_le :: Integer -> Integer -> Bool+prop_le x y = (leI x y) == (toInteger x <= toInteger y)++prop_ge :: Integer -> Integer -> Bool+prop_ge x y = (geI x y) == (toInteger x >= toInteger y)++prop_show :: Integer -> Bool+prop_show x = showInteger x == show (toInteger x)++checkAll :: IO ()+checkAll = do+ let qc p = quickCheck (withMaxSuccess 100000 p)+ mapM_ qc [prop_roundtrip1, prop_negate, prop_abs, prop_show]+ mapM_ qc [prop_add, prop_sub, prop_mul,+ prop_eq, prop_ne, prop_lt, prop_gt, prop_le, prop_ge]+ mapM_ qc [prop_div, prop_muldiv]++-}+
+ lib/gmp/Data/Integer_Type.hs view
@@ -0,0 +1,58 @@+module Data.Integer_Type(+ Integer(..),+ MPZ, newMPZ,+ _intToInteger, _wordToInteger, _integerToInt, _integerToWord,+ _integerToFloatW,+ ) where+import Prelude()+import Primitives+--import Foreign.ForeignPtr+--import Mhs.Builtin+--import System.IO.Unsafe++-- We cannot import Foreign.ForeignPtr; it is circular.+withForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b+withForeignPtr fp io = + io (primForeignPtrToPtr fp) `primBind` \ b ->+ primSeq fp (primReturn b)++-----++data MPZ++newtype Integer = I (ForeignPtr MPZ)++foreign import capi "new_mpz" new_mpz :: IO (Ptr MPZ) -- it really returns a ForeignPtr+foreign import capi "mpz_init_set_si" mpz_init_set_si :: Ptr MPZ -> Int -> IO ()+foreign import capi "mpz_init_set_ui" mpz_init_set_ui :: Ptr MPZ -> Word -> IO ()+foreign import capi "mpz_get_si" mpz_get_si :: Ptr MPZ -> IO Int+foreign import capi "mpz_get_ui" mpz_get_ui :: Ptr MPZ -> IO Word+foreign import capi "mpz_get_d" mpz_get_d :: Ptr MPZ -> IO FloatW++newMPZ :: IO (ForeignPtr MPZ)+newMPZ = + new_mpz `primBind` \ x ->+ primReturn (primUnsafeCoerce x)++_intToInteger :: Int -> Integer+_intToInteger i = primPerformIO (+ newMPZ `primBind` \ x -> + withForeignPtr x ( \ p -> mpz_init_set_si p i) `primThen`+ primReturn (I x)+ )++_wordToInteger :: Word -> Integer+_wordToInteger i = primPerformIO (do+ newMPZ `primBind` \ x ->+ withForeignPtr x ( \ p -> mpz_init_set_ui p i) `primThen`+ primReturn (I x)+ )++_integerToInt :: Integer -> Int+_integerToInt (I x) = primPerformIO (withForeignPtr x mpz_get_si)++_integerToWord :: Integer -> Word+_integerToWord (I x) = primPerformIO (withForeignPtr x mpz_get_ui)++_integerToFloatW :: Integer -> FloatW+_integerToFloatW (I x) = primPerformIO (withForeignPtr x mpz_get_d)
− mhs/Compat.hs
@@ -1,22 +0,0 @@--- Copyright 2023 Lennart Augustsson--- See LICENSE file for full license.-module Compat(rnfNoErr, rnfErr, NFData, appendDot) where-import Prelude() -- do not import Prelude-import Primitives-import Data.Text--- So we can import Compat, which is full of stuff for GHC.---- Define these here to avoid dragging in Control.DeepSeq-rnfNoErr :: forall a . a -> ()-rnfNoErr = primRnfNoErr--rnfErr :: forall a . a -> ()-rnfErr = primRnfErr--class NFData a--appendDot :: Text -> Text -> Text-appendDot x y =- primitive "bs++." x y- --x `append` pack "." `append` y-
mhs/MHSPrelude.hs view
@@ -29,8 +29,11 @@ module System.IO, module Text.Show, usingMhs, _wordSize, _isWindows,+ rnfNoErr, rnfErr, NFData, appendDot,+ wantGMP, ) where import Prelude()+--import Primitives(primRnfNoErr, primRnfErr) import Control.Applicative(Applicative(..)) import Control.Error(error, undefined) import Control.Monad(Monad(..), mapM, mapM_, sequence, sequence_, (=<<))@@ -71,7 +74,30 @@ cprint, cuprint) import Text.Show(Show(..), ShowS, shows, showChar, showString, showParen) import Primitives(_wordSize, _isWindows)+import Data.Text(Text) -- So we can detect mhs vs ghc usingMhs :: Bool usingMhs = True++-------++-- Define these here to avoid dragging in Control.DeepSeq+rnfNoErr :: forall a . a -> ()+rnfNoErr = _primitive "rnf" (1::Int)++rnfErr :: forall a . a -> ()+rnfErr = _primitive "rnf" (0::Int)++class NFData a++appendDot :: Text -> Text -> Text+appendDot x y =+ _primitive "bs++." x y+ --x `append` pack "." `append` y++-- Exported by the runtime system to indicate if GMP is desired.+foreign import capi "want_gmp" want_gmp :: Int++wantGMP :: Bool+wantGMP = want_gmp /= 0
mhs/System/FilePath.hs view
@@ -13,7 +13,7 @@ import Prelude(); import MHSPrelude import Data.List -infixr 7 <.>, -<.>+infixr 7 <.> infixr 5 </> (</>) :: FilePath -> FilePath -> FilePath
paths/Paths_MicroHs.hs view
@@ -10,4 +10,4 @@ getDataDir = return "." version :: Version-version = makeVersion [0,10,7,0]+version = makeVersion [0,11,4,0]
src/MicroHs/Abstract.hs view
@@ -67,6 +67,15 @@ isP :: Exp -> Bool isP = isPrim "P" +isZ :: Exp -> Bool+isZ = isPrim "Z"++isK2 :: Exp -> Bool+isK2 = isPrim "K2"++isK3 :: Exp -> Bool+isK3 = isPrim "K3"+ cId :: Exp cId = Lit (LPrim "I") @@ -272,6 +281,12 @@ Lit (LPrim "R") else if isCC ff && isB aa then Lit (LPrim "C'B")+ else if isZ ff && isK aa then+ Lit (LPrim "K2")+ else if isZ ff && isK2 aa then+ Lit (LPrim "K3")+ else if isZ ff && isK3 aa then+ Lit (LPrim "K4") else let def =
src/MicroHs/Builtin.hs view
@@ -1,6 +1,7 @@ module MicroHs.Builtin( builtinMdl, mkBuiltin,+ mkBuiltinQ, ) where import Prelude(); import MHSPrelude import MicroHs.Ident@@ -12,6 +13,13 @@ -- cannot be used accidentally in user code. builtinMdl :: String builtinMdl = "B@"+builtinMdlQ :: String+builtinMdlQ = "Mhs.Builtin" +-- Identifier for a builtin that will be renamed. mkBuiltin :: SLoc -> String -> Ident mkBuiltin loc name = mkIdentSLoc loc ((builtinMdl ++ ".") ++ name)++-- Identifier for a builtin that is alread renamed.+mkBuiltinQ :: SLoc -> String -> Ident+mkBuiltinQ loc name = mkIdentSLoc loc ((builtinMdlQ ++ ".") ++ name)
src/MicroHs/Compile.hs view
@@ -36,12 +36,12 @@ import MicroHs.Ident import qualified MicroHs.IdentMap as M import MicroHs.List+import MicroHs.MRnf import MicroHs.Package import MicroHs.Parse import MicroHs.StateIO import MicroHs.SymTab import MicroHs.TypeCheck-import Compat import MicroHs.Instances() -- for ghc import Paths_MicroHs(version, getDataDir) @@ -205,6 +205,8 @@ modify $ setCacheTables glob' when (verbosityGT flags 3) $ liftIO $ putStrLn $ "type checked:\n" ++ showTModule showEDefs tmdl ++ "-----\n"+ () <- when False $ do -- Always forcing is slower. Maybe add a flag?+ mrnf tmdl `seq` return () let dmdl = desugar flags tmdl () <- return $ rnfErr $ tBindingsOf dmdl@@ -228,7 +230,7 @@ putStrLnInd $ "importing done " ++ showIdent mn ++ ", " ++ show tThis ++ "ms (" ++ show tParse ++ " + " ++ show tTCDesug ++ " + " ++ show tAbstract ++ ")" when (loading flags && mn /= mkIdent "Interactive" && not (verbosityGT flags 0)) $- liftIO $ putStrLn $ "loaded " ++ showIdent mn+ liftIO $ putStrLn $ "loaded " ++ showIdent mn ++ " (" ++ pathfn ++ ")" case impt of ImpNormal -> modify $ workToDone (cmdl, map snd imported, chksum)@@ -305,22 +307,24 @@ where s = unIdent m readModulePath :: Flags -> String -> IdentModule -> IO (Maybe (FilePath, String))-readModulePath flags suf mn | Just fn <- getFileName mn = do- mh <- openFileM fn ReadMode- case mh of- Nothing -> errorMessage (getSLoc mn) $ "File not found: " ++ show fn- Just h -> readRest fn h-- | otherwise = do- mh <- findModulePath flags suf mn- case mh of- Nothing -> do- mhc <- findModulePath flags (suf ++ "c") mn -- look for hsc file- case mhc of- Nothing -> return Nothing- Just (_fn, _h) -> undefined -- hsc2hs no implemented yet- Just (fn, h) -> readRest fn h- where readRest fn h = do+readModulePath flags suf mn = do+ case getFileName mn of+ Just fn -> do+ mh <- openFileM fn ReadMode+ case mh of+ Nothing -> errorMessage (getSLoc mn) $ "File not found: " ++ show fn+ Just h -> readRest fn h+ _ -> do+ mh <- findModulePath flags suf mn+ case mh of+ Nothing -> do+ mhc <- findModulePath flags (suf ++ "c") mn -- look for hsc file+ case mhc of+ Nothing -> return Nothing+ Just (_fn, _h) -> undefined -- hsc2hs no implemented yet+ Just (fn, h) -> readRest fn h+ where readRest :: FilePath -> Handle -> IO (Maybe (FilePath, String))+ readRest fn h = do hasCPP <- hasLangCPP fn file <- if hasCPP || doCPP flags then do
src/MicroHs/CompileCache.hs view
@@ -1,7 +1,8 @@ module MicroHs.CompileCache( CModule, Cache, addWorking, getWorking, emptyCache, deleteFromCache, workToDone, addBoot, getBoots,- cachedModules, cachedModuleNames, lookupCache, lookupCacheChksum, getImportDeps,+ cachedModules, cachedModuleNames, cachedNonPkgModuleNames,+ lookupCache, lookupCacheChksum, getImportDeps, addPackage, getCompMdls, getPathPkgs, getPkgs, getCacheTables, setCacheTables, saveCache, loadCached,@@ -11,12 +12,12 @@ import MicroHs.Expr(IdentModule) import MicroHs.Ident(showIdent) import qualified MicroHs.IdentMap as M+import MicroHs.MRnf import MicroHs.Package import MicroHs.TypeCheck(TModule, tModuleName, GlobTables, emptyGlobTables, mergeGlobTables) import System.IO import System.IO.Serialize import System.IO.MD5(MD5CheckSum)-import Compat type CModule = (TModule [LDef], [IdentModule], MD5CheckSum) @@ -29,6 +30,10 @@ (TModule [LDef]) -- the cached module -- deriving (Show) +instance MRnf CacheEntry where+ mrnf (CompMdl a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (PkgMdl a) = mrnf a+ tModuleOf :: CacheEntry -> TModule [LDef] tModuleOf (CompMdl t _ _) = t tModuleOf (PkgMdl t) = t@@ -46,6 +51,12 @@ } -- deriving (Show) +instance MRnf Cache where+ mrnf (Cache a b c d e) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e++forceCache :: Cache -> Cache+forceCache c = mrnf c `seq` c+ getCacheTables :: Cache -> GlobTables getCacheTables = tables @@ -87,6 +98,9 @@ cachedModuleNames :: Cache -> [IdentModule] cachedModuleNames = M.keys . cache +cachedNonPkgModuleNames :: Cache -> [IdentModule]+cachedNonPkgModuleNames c = [ i | (i, CompMdl _ _ _) <- M.toList (cache c) ]+ lookupCache :: IdentModule -> Cache -> Maybe (TModule [LDef]) lookupCache mn c = tModuleOf <$> M.lookup mn (cache c) @@ -114,7 +128,7 @@ where ins t = M.insert (tModuleName t) (PkgMdl t) saveCache :: FilePath -> Cache -> IO ()-saveCache fn cash = writeSerializedCompressed fn cash+saveCache fn cash = writeSerializedCompressed fn (forceCache cash) loadCached :: FilePath -> IO (Maybe Cache) loadCached fn = do
src/MicroHs/Deriving.hs view
@@ -107,12 +107,17 @@ rhs = eLam [eFld] conApp getName = mkGetName tycon fld - pure [ Sign [getName] $ eForall iks $ lhsToType (qtycon, iks) `tArrow` fldty- , Fcn getName $ map conEqnGet cs- , Instance hdrGet [BFcn igetField [eEqn [eDummy] $ EVar getName] ]- , Instance hdrSet [BFcn isetField $ map conEqnSet cs]- ]+ -- XXX A hack, we can't handle forall yet.+ validType (EForall _ _ _) = False+ validType _ = True + pure $ [ Sign [getName] $ eForall iks $ lhsToType (qtycon, iks) `tArrow` fldty+ , Fcn getName $ map conEqnGet cs ]+ ++ if not (validType fldty) then [] else+ [ Instance hdrGet [Fcn igetField [eEqn [eDummy] $ EVar getName] ]+ , Instance hdrSet [Fcn isetField $ map conEqnSet cs]+ ]+ nameHasField :: String nameHasField = "Data.Records.HasField" @@ -141,8 +146,8 @@ hdr = EApp etyp (EVar $ qualIdent mn i) mdl = ELit loc $ LStr $ unIdent mn nam = ELit loc $ LStr $ unIdent i- eqns = eEqns [eDummy] $ eApp2 (EVar imkTyConApp) (eApp2 (EVar imkTyCon) mdl nam) (EListish (LList []))- inst = Instance hdr [BFcn itypeRep eqns]+ eqns = eEqns [eDummy] $ eAppI2 imkTyConApp (eAppI2 imkTyCon mdl nam) (EListish (LList []))+ inst = Instance hdr [Fcn itypeRep eqns] return [inst] --------------------------------------------@@ -152,8 +157,10 @@ getFieldTys (Right ts) = map (snd . snd) ts decomp :: EType -> [EType]-decomp t | Just (c, ts) <- getAppM t, isConIdent c = concatMap decomp ts- | otherwise = [t]+decomp t =+ case getAppM t of+ Just (c, ts) | isConIdent c -> concatMap decomp ts+ _ -> [t] -- If there is no mctx we use the default strategy to derive the instance context. -- The default strategy basically extracts all subtypes with variables.@@ -193,7 +200,7 @@ eAnd = EApp . EApp (EVar $ mkBuiltin loc "&&") eTrue = EVar $ mkBuiltin loc "True" eFalse = EVar $ mkBuiltin loc "False"- inst = Instance hdr [BFcn iEq eqns]+ inst = Instance hdr [Fcn iEq eqns] -- traceM $ showEDefs [inst] return [inst] derEq _ (c, _) _ e = cannotDerive "Eq" c e@@ -217,7 +224,7 @@ eEQ = EVar $ mkBuiltin loc "EQ" eLT = EVar $ mkBuiltin loc "LT" eGT = EVar $ mkBuiltin loc "GT"- inst = Instance hdr [BFcn iCompare eqns]+ inst = Instance hdr [Fcn iCompare eqns] -- traceM $ showEDefs [inst] return [inst] derOrd _ (c, _) _ e = cannotDerive "Ord" c e@@ -236,7 +243,7 @@ iMaxBound = mkIdentSLoc loc "maxBound" minEqn = mkEqn iMinBound c0 maxEqn = mkEqn iMaxBound (last cs)- inst = Instance hdr [BFcn iMinBound [minEqn], BFcn iMaxBound [maxEqn]]+ inst = Instance hdr [Fcn iMinBound [minEqn], Fcn iMaxBound [maxEqn]] -- traceM $ showEDefs [inst] return [inst] derBounded _ (c, _) _ e = cannotDerive "Bounded" c e@@ -257,7 +264,7 @@ iToEnum = mkIdentSLoc loc "toEnum" fromEqns = zipWith mkFrom cs [0..] toEqns = zipWith mkTo cs [0..]- inst = Instance hdr [BFcn iFromEnum fromEqns, BFcn iToEnum toEqns]+ inst = Instance hdr [Fcn iFromEnum fromEqns, Fcn iToEnum toEqns] --traceM $ showEDefs [inst] return [inst] derEnum _ (c, _) _ e = cannotDerive "Enum" c e@@ -299,7 +306,7 @@ where fld (f, x) = eShowString (unIdentPar f ++ "=") `ejoin` eShowsPrec 0 x eqns = map mkEqn cs- inst = Instance hdr [BFcn iShowsPrec eqns]+ inst = Instance hdr [Fcn iShowsPrec eqns] -- traceM $ showEDefs [inst] return [inst] derShow _ (c, _) _ e = cannotDerive "Show" c e@@ -330,7 +337,7 @@ loc = getSLoc eread iReadPrec = mkIdentSLoc loc "readPrec" err = eEqn [] $ EApp (EVar $ mkBuiltin loc "error") (ELit loc (LStr "readPrec not defined"))- inst = Instance hdr [BFcn iReadPrec [err]]+ inst = Instance hdr [Fcn iReadPrec [err]] return [inst] --------------------------------------------
src/MicroHs/Desugar.hs view
@@ -46,6 +46,11 @@ in zipWith dsConstr [0::Int ..] cs Newtype _ (Constr _ _ c _) _ -> [ (qualIdent mn c, Lit (LPrim "I")) ] Fcn f eqns -> [(f, wrapTick (useTicks flags) f $ dsEqns (getSLoc f) eqns)]+ PatBind p e ->+ case patVarsQ p of+ [] -> [] -- no bound variable, just throw it away+ -- Create a unique varible by adding a "$g" suffix to one of the bound variables.+ v : _ -> dsPatBind (addIdentSuffix v "$g") p e ForImp ie i t -> [(i, if isIO t then frgn else App perf frgn)] where frgn = Lit $ LForImp (fromMaybe (unIdent (unQualIdent i)) ie) cty cty = CType t@@ -56,7 +61,7 @@ Class ctx (c, _) _ bs -> let f = mkIdent "$f" meths :: [Ident]- meths = [ qualIdent mn i | (BSign is _) <- bs, i <- is ]+ meths = [ qualIdent mn i | (Sign is _) <- bs, i <- is ] supers :: [Ident] supers = [ qualIdent mn $ mkSuperSel c i | i <- [1 .. length ctx] ] xs = [ mkIdent ("$x" ++ show j) | j <- [ 1 .. length ctx + length meths ] ]@@ -84,28 +89,34 @@ dsBind :: Ident -> EBind -> [LDef] dsBind v abind = case abind of- BFcn f eqns -> [(f, dsEqns (getSLoc f) eqns)]- BPat p e ->- let- de = (v, dsExpr e)- ds = [ (i, dsExpr (ECase (EVar v) [(p, oneAlt $ EVar i)])) | i <- patVars p ]- in de : ds- BSign _ _ -> []- BDfltSign _ _ -> []+ Fcn f eqns -> [(f, dsEqns (getSLoc f) eqns)]+ PatBind p e -> dsPatBind v p e+ _ -> [] +dsPatBind :: Ident -> EPat -> Expr -> [LDef]+dsPatBind v p e =+ let de = (v, dsExpr e)+ ds = [ (i, dsExpr (ECase (EVar v) [(p, oneAlt $ EVar i)])) | i <- patVarsQ p ]+ in de : ds++-- patVars does not work wth qualified bound variable names,+-- but that's what we get for a top level PatBind+patVarsQ :: EPat -> [Ident]+patVarsQ = filter (\ i -> not (isDummyIdent i) && not (isConIdent $ unQualIdent i)) . allVarsExpr+ dsEqns :: SLoc -> [Eqn] -> Exp dsEqns loc eqns = case eqns of Eqn aps _ : _ -> let- vs = allVarsBind $ BFcn (mkIdent "") eqns+ vs = allVarsBind $ Fcn (mkIdent "") eqns xs = take (length aps) $ newVars "$q" vs mkArm (Eqn ps alts) = let ps' = map dsPat ps in (ps', dsAlts alts) ex = dsCaseExp loc (vs ++ xs) (map Var xs) (map mkArm eqns) in foldr Lam ex xs- _ -> impossible+ _ -> eMatchErr loc dsAlts :: EAlts -> (Exp -> Exp) dsAlts (EAlts alts bs) = dsBinds bs . dsAltsL alts@@ -128,7 +139,7 @@ dsBinds :: [EBind] -> Exp -> Exp dsBinds [] ret = ret-dsBinds ads@(BPat (ELazy False p) e : ds) ret =+dsBinds ads@(PatBind (ELazy False p) e : ds) ret = -- Turn a strict let/where into a case. -- XXX This does no reordering of bindings. let rest = dsBinds ds ret@@ -160,6 +171,8 @@ letE i e b = eLet i e b -- do some minor optimizations --App (Lam i b) e +-- Do a single recursive definition 'let i = e in b'+-- by 'let i = Y (\i.e) in b' letRecE :: Ident -> Exp -> Exp -> Exp letRecE i e b = letE i (App (Lit (LPrim "Y")) (Lam i e)) b @@ -178,7 +191,7 @@ -- in body mutualRec :: Ident -> [LDef] -> Exp -> Exp mutualRec v ies body =- let !(is, es) = unzip ies+ let (is, es) = unzip ies n = length is ev = Var v one m i = letE i (mkTupleSelE m n ev)@@ -207,7 +220,7 @@ EApp (EApp (EVar app) (EListish (LCompr e stmts))) l | app == mkIdent "Data.List_Type.++" -> dsExpr $ dsCompr e stmts l EApp f a -> App (dsExpr f) (dsExpr a)- ELam qs -> dsEqns (getSLoc aexpr) qs+ ELam l qs -> dsEqns l qs ELit l (LExn s) -> Var (mkIdentSLoc l s) ELit _ (LChar c) -> Lit (LInt (ord c)) ELit _ (LInteger i) -> encodeInteger i@@ -233,9 +246,11 @@ dsCompr e [] l = EApp (EApp consCon e) l dsCompr e (SThen c : ss) l = EIf c (dsCompr e ss l) l dsCompr e (SLet ds : ss) l = ELet ds (dsCompr e ss l)+-- Special case for the idiom [ ... | ..., p <- [x], ... ]. This is a little more efficient.+dsCompr e (SBind p (EListish (LList [x])) : ss) l = ECase x [(p, oneAlt $ dsCompr e ss l), (EVar dummyIdent, oneAlt l)] dsCompr e xss@(SBind p g : ss) l = ELet [hdef] (EApp eh g) where- hdef = BFcn h [eqn1, eqn2, eqn3]+ hdef = Fcn h [eqn1, eqn2, eqn3] eqn1 = eEqn [nilCon] l eqn2 = eEqn [EApp (EApp consCon p) vs] (dsCompr e ss (EApp eh vs)) eqn3 = eEqn [EApp (EApp consCon u) vs] (EApp eh vs)@@ -363,7 +378,7 @@ ELazy False p' -> lazy (n, bs, is) p' -- ignore ! on non-variables for now ELazy True p' -> ((n+1, b:bs, is), EVar v) where v = mkIdent ("~" ++ show n)- b = BPat p' (EVar v)+ b = PatBind p' (EVar v) EVar _ -> (s, ap) EViewPat e p -> (s', EViewPat e p') where (s', p') = lazy s p ECon _ -> (s, ap)@@ -375,6 +390,15 @@ eSeq :: Exp -> Exp -> Exp eSeq e1 e2 = App (App (Lit (LPrim "seq")) e1) e2 +-- XXX quadratic. but only used for short lists+groupEq :: forall a . (a -> a -> Bool) -> [a] -> [[a]]+groupEq eq axs =+ case axs of+ [] -> []+ x:xs ->+ case partition (eq x) xs of+ (es, ns) -> (x:es) : groupEq eq ns+ -- Desugar a pattern matrix. -- The input is a (usually identifier) vector e1, ..., en -- and patterns matrix p11, ..., p1n -> e1@@ -393,7 +417,7 @@ case leftMost aarm of EVar _ -> do -- Find all variables, substitute with i, and proceed- let !(vars, nvars) = span (isPVar . leftMost) aarms+ let (vars, nvars) = span (isPVar . leftMost) aarms vars' = map (sub . unAt i) vars sub (EVar x : ps, rhs) = (ps, substAlpha x i . rhs) sub _ = impossible@@ -477,6 +501,7 @@ _ -> False eLet :: Ident -> Exp -> Exp -> Exp+eLet i e b | cheap e = substExp i e b -- always inline variables and literals eLet i e b = if i == dummyIdent then b@@ -515,21 +540,12 @@ ELit _ _ -> [] _ -> impossible --- XXX quadratic-groupEq :: forall a . (a -> a -> Bool) -> [a] -> [[a]]-groupEq eq axs =- case axs of- [] -> []- x:xs ->- case partition (eq x) xs of- (es, ns) -> (x:es) : groupEq eq ns--getDups :: forall a . (a -> a -> Bool) -> [a] -> [[a]]-getDups eq = filter ((> 1) . length) . groupEq eq+getDups :: (Ord a) => [a] -> [[a]]+getDups = filter ((> 1) . length) . groupSort checkDup :: [LDef] -> [LDef] checkDup ds =- case getDups (==) (filter (/= dummyIdent) $ map fst ds) of+ case getDups $ filter (/= dummyIdent) $ map fst ds of [] -> ds (i1:_i2:_) : _ -> errorMessage (getSLoc i1) $ "duplicate definition " ++ showIdent i1
src/MicroHs/EncodeData.hs view
@@ -9,7 +9,7 @@ import Prelude(); import MHSPrelude import Data.List import MicroHs.Exp-import MicroHs.Expr(Con(..), Lit(..))+import MicroHs.Expr(Con(..), Lit(..), impossible) import MicroHs.Ident --@@ -60,10 +60,8 @@ (SPat (ConData cs _ _) _, _) : _ -> let arm (c, k) =- let- !(vs, rhs) = head $ [ (xs, e) | (SPat (ConData _ i _) xs, e) <- pes, c == i ] ++- [ (replicate k dummyIdent, dflt) ]- in lams vs rhs+ head $ [ lams xs e | (SPat (ConData _ i _) xs, e) <- pes, c == i ] +++ [ lams (replicate k dummyIdent) dflt ] in apps var (map arm cs) _ -> undefined @@ -140,14 +138,16 @@ -- Why? A 3-way branch should be better than a 2-way. [(i, xs, e), (_, xs', e')] | hi - lo == 2 -> encIf (eqInt n i) (match tup xs e) (match tup xs' e')- let !(pesl, (i, xs, e) : pesh) = splitAt (length pes `quot` 2) pes+ let (pesl, (i, xs, e) : pesh) = splitAt (length pes `quot` 2) pes in encTri (cmpInt n i) (caseTree n tup lo i pesl dflt) (match tup xs e) (caseTree n tup (i+1) hi pesh dflt) -} _ ->- let !(pesl, pesh@((i, _, _):_)) = splitAt (length pes `quot` 2) pes- in encIf (ltInt n i) (caseTree n tup lo i pesl dflt) (caseTree n tup i hi pesh dflt)+ case splitAt (length pes `quot` 2) pes of+ (pesl, pesh@((i, _, _):_)) ->+ encIf (ltInt n i) (caseTree n tup lo i pesl dflt) (caseTree n tup i hi pesh dflt)+ _ -> impossible where eqInt :: Exp -> Int -> Exp eqInt x i = app2 (Lit (LPrim "==")) x (Lit (LInt i))
src/MicroHs/Exp.hs view
@@ -15,6 +15,7 @@ import MicroHs.Ident import MicroHs.Expr(Lit(..), showLit) import MicroHs.List+import MicroHs.MRnf import Text.PrettyPrint.HughesPJLite import Debug.Trace @@ -26,6 +27,12 @@ | Lam Ident Exp | Lit Lit deriving (Eq)++instance MRnf Exp where+ mrnf (Var a) = mrnf a+ mrnf (App a b) = mrnf a `seq` mrnf b+ mrnf (Lam a b) = mrnf a `seq` mrnf b+ mrnf (Lit a) = mrnf a app2 :: Exp -> Exp -> Exp -> Exp app2 f a1 a2 = App (App f a1) a2
src/MicroHs/Expr.hs view
@@ -6,11 +6,11 @@ ImportItem(..), ImpType(..), EDef(..), showEDefs,- Expr(..), eLam, eEqn, eEqns, showExpr, eqExpr,+ Expr(..), eLam, eLamWithSLoc, eEqn, eEqns, showExpr, eqExpr, Listish(..), Lit(..), showLit, CType(..),- EBind(..), showEBind, showEBinds,+ EBind, showEBind, showEBinds, Eqn(..), EStmt(..), EAlts(..),@@ -30,16 +30,16 @@ Con(..), conIdent, conArity, conFields, tupleConstr, getTupleConstr, mkTupleSel,- eApp2, eApp3, eApps,+ eApp2, eAppI2, eApp3, eApps, lhsToType, subst,- allVarsExpr, allVarsBind, allVarsEqns,+ allVarsExpr, allVarsBind, allVarsEqns, allVarsPat, setSLocExpr, errorMessage, Assoc(..), Fixity, getBindsVars, HasLoc(..),- eForall, eForall',+ eForall, eForall', unForall, eDummy, impossible, impossibleShow, getArrow, getArrows,@@ -54,6 +54,7 @@ import Data.List import Data.Maybe import MicroHs.Ident+import MicroHs.MRnf import Text.PrettyPrint.HughesPJLite import GHC.Stack @@ -67,7 +68,6 @@ data ExportItem = ExpModule IdentModule | ExpTypeSome Ident [Ident]- | ExpTypeAll Ident | ExpValue Ident | ExpDefault Ident --DEBUG deriving (Show)@@ -77,6 +77,7 @@ | Newtype LHS Constr Deriving | Type LHS EType | Fcn Ident [Eqn]+ | PatBind EPat Expr | Sign [Ident] EType | KindSign Ident EKind | Import ImportSpec@@ -86,29 +87,57 @@ | Instance EConstraint [EBind] | Default (Maybe Ident) [EType] | Pattern LHS EPat (Maybe [Eqn])- | PatternSign [Ident] EType | Deriving EConstraint+ | DfltSign Ident EType -- only in class declarations --DEBUG deriving (Show) +instance MRnf EDef where+ mrnf (Data a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (Newtype a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (Type a b) = mrnf a `seq` mrnf b+ mrnf (Fcn a b) = mrnf a `seq` mrnf b+ mrnf (PatBind a b) = mrnf a `seq` mrnf b+ mrnf (Sign a b) = mrnf a `seq` mrnf b+ mrnf (KindSign a b) = mrnf a `seq` mrnf b+ mrnf (Import a) = mrnf a+ mrnf (ForImp a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (Infix a b) = mrnf a `seq` mrnf b+ mrnf (Class a b c d) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d+ mrnf (Instance a b) = mrnf a `seq` mrnf b+ mrnf (Default a b) = mrnf a `seq` mrnf b+ mrnf (Pattern a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (Deriving a) = mrnf a+ mrnf (DfltSign a b) = mrnf a `seq` mrnf b+ data ImpType = ImpNormal | ImpBoot deriving (Eq) +instance MRnf ImpType+ data ImportSpec = ImportSpec ImpType Bool Ident (Maybe Ident) (Maybe (Bool, [ImportItem])) -- first Bool indicates 'qualified', second 'hiding' --DEBUG deriving (Show) +instance MRnf ImportSpec where+ mrnf (ImportSpec a b c d e) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e+ data ImportItem = ImpTypeSome Ident [Ident] | ImpTypeAll Ident | ImpValue Ident --DEBUG deriving (Show) +instance MRnf ImportItem where+ mrnf (ImpTypeSome a b) = mrnf a `seq` mrnf b+ mrnf (ImpTypeAll a) = mrnf a+ mrnf (ImpValue a) = mrnf a+ type Deriving = [EConstraint] data Expr = EVar Ident | EApp Expr Expr | EOper Expr [(Ident, Expr)]- | ELam [Eqn]+ | ELam SLoc [Eqn] | ELit SLoc Lit | ECase Expr [ECaseArm] | ELet [EBind] Expr@@ -124,6 +153,7 @@ | ENegApp Expr | EUpdate Expr [EField] | ESelect [Ident]+ | ETypeArg EType -- @type -- only in patterns | EAt Ident EPat | EViewPat Expr EPat@@ -133,16 +163,53 @@ | EForall Bool [IdKind] EType -- True indicates explicit forall in the code -- only while type checking | EUVar Int+ | EQVar Expr EType -- already resolved identifier -- only after type checking | ECon Con --DEBUG deriving (Show) +instance MRnf Expr where+ mrnf (EVar a) = mrnf a+ mrnf (EApp a b) = mrnf a `seq` mrnf b+ mrnf (EOper a b) = mrnf a `seq` mrnf b+ mrnf (ELam a b) = mrnf a `seq` mrnf b+ mrnf (ELit a b) = mrnf a `seq` mrnf b+ mrnf (ECase a b) = mrnf a `seq` mrnf b+ mrnf (ELet a b) = mrnf a `seq` mrnf b+ mrnf (ETuple a) = mrnf a+ mrnf (EParen a) = mrnf a+ mrnf (EListish a) = mrnf a+ mrnf (EDo a b) = mrnf a `seq` mrnf b+ mrnf (ESectL a b) = mrnf a `seq` mrnf b+ mrnf (ESectR a b) = mrnf a `seq` mrnf b+ mrnf (EIf a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (EMultiIf a) = mrnf a+ mrnf (ESign a b) = mrnf a `seq` mrnf b+ mrnf (ENegApp a) = mrnf a+ mrnf (EUpdate a b) = mrnf a `seq` mrnf b+ mrnf (ESelect a) = mrnf a+ mrnf (ETypeArg a) = mrnf a+ mrnf (EAt a b) = mrnf a `seq` mrnf b+ mrnf (EViewPat a b) = mrnf a `seq` mrnf b+ mrnf (ELazy a b) = mrnf a `seq` mrnf b+ mrnf (EOr a) = mrnf a+ mrnf (EForall a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (EUVar a) = mrnf a+ mrnf (EQVar a b) = mrnf a `seq` mrnf b+ mrnf (ECon a) = mrnf a++ data EField = EField [Ident] Expr -- a.b = e | EFieldPun [Ident] -- a.b | EFieldWild -- .. --DEBUG deriving (Show) +instance MRnf EField where+ mrnf (EField a b) = mrnf a `seq` mrnf b+ mrnf (EFieldPun a) = mrnf a+ mrnf EFieldWild = ()+ unEField :: EField -> ([Ident], Expr) unEField (EField is e) = (is, e) unEField _ = impossible@@ -150,8 +217,11 @@ type FunDep = ([Ident], [Ident]) eLam :: [EPat] -> Expr -> Expr-eLam ps e = ELam $ eEqns ps e+eLam = eLamWithSLoc noSLoc +eLamWithSLoc :: SLoc -> [EPat] -> Expr -> Expr+eLamWithSLoc loc ps e = ELam loc $ eEqns ps e+ eEqns :: [EPat] -> Expr -> [Eqn] eEqns ps e = [eEqn ps e] @@ -163,8 +233,14 @@ data Con = ConData ConTyInfo Ident [FieldName] | ConNew Ident [FieldName]+ | ConSyn Ident Int (Expr, EType) --DEBUG deriving(Show) +instance MRnf Con where+ mrnf (ConData a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ mrnf (ConNew a b) = mrnf a `seq` mrnf b+ mrnf (ConSyn a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ data Listish = LList [Expr] | LCompr Expr [EStmt]@@ -174,23 +250,35 @@ | LFromThenTo Expr Expr Expr --DEBUG deriving(Show) +instance MRnf Listish where+ mrnf (LList a) = mrnf a+ mrnf (LCompr a b) = mrnf a `seq` mrnf b+ mrnf (LFrom a) = mrnf a+ mrnf (LFromTo a b) = mrnf a `seq` mrnf b+ mrnf (LFromThen a b) = mrnf a `seq` mrnf b+ mrnf (LFromThenTo a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ conIdent :: HasCallStack => Con -> Ident conIdent (ConData _ i _) = i conIdent (ConNew i _) = i+conIdent (ConSyn i _ _) = i conArity :: Con -> Int conArity (ConData cs i _) = fromMaybe (error "conArity") $ lookup i cs conArity (ConNew _ _) = 1+conArity (ConSyn _ n _) = n conFields :: Con -> [FieldName] conFields (ConData _ _ fs) = fs conFields (ConNew _ fs) = fs+conFields (ConSyn _ _ _) = [] instance Eq Con where- (==) (ConData _ i _) (ConData _ j _) = i == j- (==) (ConNew i _) (ConNew j _) = i == j- (==) _ _ = False+ (==) (ConData _ i _) (ConData _ j _) = i == j+ (==) (ConNew i _) (ConNew j _) = i == j+ (==) (ConSyn i _ _) (ConSyn j _ _) = i == j+ (==) _ _ = False data Lit = LInt Int@@ -207,30 +295,51 @@ --DEBUG deriving (Show) deriving (Eq) +instance MRnf Lit where+ mrnf (LInt a) = mrnf a+ mrnf (LInteger a) = mrnf a+ mrnf (LDouble a) = mrnf a+ mrnf (LRat a) = mrnf a+ mrnf (LChar a) = mrnf a+ mrnf (LStr a) = mrnf a+ mrnf (LUStr a) = mrnf a+ mrnf (LPrim a) = mrnf a+ mrnf (LExn a) = mrnf a+ mrnf (LForImp a b) = mrnf a `seq` mrnf b+ mrnf (LTick a) = mrnf a+ -- A type of a C FFI function newtype CType = CType EType instance Eq CType where _ == _ = True -- Just ignore the CType+instance MRnf CType where+ mrnf (CType t) = mrnf t type ECaseArm = (EPat, EAlts) data EStmt = SBind EPat Expr | SThen Expr | SLet [EBind] --DEBUG deriving (Show) -data EBind- = BFcn Ident [Eqn]- | BPat EPat Expr- | BSign [Ident] EType- | BDfltSign Ident EType -- only in class declarations---DEBUG deriving (Show)+instance MRnf EStmt where+ mrnf (SBind a b) = mrnf a `seq` mrnf b+ mrnf (SThen a) = mrnf a+ mrnf (SLet a) = mrnf a +type EBind = EDef -- subset with Fcn, PatBind, Sign, and DfltSign+ -- A single equation for a function data Eqn = Eqn [EPat] EAlts --DEBUG deriving (Show) +instance MRnf Eqn where+ mrnf (Eqn a b) = mrnf a `seq` mrnf b+ data EAlts = EAlts [EAlt] [EBind] --DEBUG deriving (Show) +instance MRnf EAlts where+ mrnf (EAlts a b) = mrnf a `seq` mrnf b+ type EAlt = ([EStmt], Expr) type ConTyInfo = [(Ident, Int)] -- All constructors with their arities@@ -278,6 +387,9 @@ (Either [SType] [ConstrField]) -- types or named fields deriving(Show) +instance MRnf Constr where+ mrnf (Constr a b c d) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d+ type ConstrField = (Ident, SType) -- record label and type type SType = (Bool, EType) -- the Bool indicates strict @@ -294,6 +406,9 @@ instance Show IdKind where show (IdKind i k) = "(" ++ show i ++ "::" ++ show k ++ ")" +instance MRnf IdKind where+ mrnf (IdKind a b) = mrnf a `seq` mrnf b+ idKindIdent :: IdKind -> Ident idKindIdent (IdKind i _) = i @@ -330,6 +445,9 @@ eApp2 :: Expr -> Expr -> Expr -> Expr eApp2 a b c = EApp (EApp a b) c +eAppI2 :: Ident -> Expr -> Expr -> Expr+eAppI2 a b c = EApp (EApp (EVar a) b) c+ eApp3 :: Expr -> Expr -> Expr -> Expr -> Expr eApp3 a b c d = EApp (eApp2 a b c) d @@ -348,12 +466,20 @@ instance HasLoc Ident where getSLoc = slocIdent +instance HasLoc EDef where+ getSLoc (Fcn i _) = getSLoc i+ getSLoc (PatBind p _) = getSLoc p+ getSLoc (Sign i _) = getSLoc i+ getSLoc (DfltSign i _) = getSLoc i+ getSLoc (Infix _ is) = getSLoc is+ getSLoc _ = error "HasLoc EDef: unimplemented"+ -- Approximate location; only identifiers and literals carry a location instance HasLoc Expr where getSLoc (EVar i) = getSLoc i getSLoc (EApp e _) = getSLoc e getSLoc (EOper e _) = getSLoc e- getSLoc (ELam qs) = getSLoc qs+ getSLoc (ELam l _) = l getSLoc (ELit l _) = l getSLoc (ECase e _) = getSLoc e getSLoc (ELet bs _) = getSLoc bs@@ -369,17 +495,19 @@ getSLoc (ESign e _) = getSLoc e getSLoc (ENegApp e) = getSLoc e getSLoc (EUpdate e _) = getSLoc e- getSLoc (ESelect is) = getSLoc (head is)+ getSLoc (ESelect is) = getSLoc is+ getSLoc (ETypeArg t) = getSLoc t getSLoc (EAt i _) = getSLoc i getSLoc (EViewPat e _) = getSLoc e getSLoc (ELazy _ e) = getSLoc e getSLoc (EOr es) = getSLoc es getSLoc (EUVar _) = error "getSLoc EUVar"+ getSLoc (EQVar e _) = getSLoc e getSLoc (ECon c) = getSLoc c getSLoc (EForall _ [] e) = getSLoc e getSLoc (EForall _ iks _) = getSLoc iks -instance forall a . HasLoc a => HasLoc [a] where+instance HasLoc a => HasLoc [a] where getSLoc [] = noSLoc -- XXX shouldn't happen getSLoc (a:_) = getSLoc a @@ -389,6 +517,7 @@ instance HasLoc Con where getSLoc (ConData _ i _) = getSLoc i getSLoc (ConNew i _) = getSLoc i+ getSLoc (ConSyn i _ _) = getSLoc i instance HasLoc Listish where getSLoc (LList es) = getSLoc es@@ -403,12 +532,6 @@ getSLoc (SThen e) = getSLoc e getSLoc (SLet bs) = getSLoc bs -instance HasLoc EBind where- getSLoc (BFcn i _) = getSLoc i- getSLoc (BPat p _) = getSLoc p- getSLoc (BSign i _) = getSLoc i- getSLoc (BDfltSign i _) = getSLoc i- instance HasLoc Eqn where getSLoc (Eqn [] a) = getSLoc a getSLoc (Eqn (p:_) _) = getSLoc p@@ -428,6 +551,8 @@ type Fixity = (Assoc, Int) +instance MRnf Assoc+ --------------------------------- -- Enough to handle subsitution in types@@ -478,10 +603,12 @@ allVarsBind' :: EBind -> DList Ident allVarsBind' abind = case abind of- BFcn i eqns -> (i:) . composeMap allVarsEqn eqns- BPat p e -> allVarsPat p . allVarsExpr' e- BSign is _ -> (is ++)- BDfltSign i _ -> (i:)+ Fcn i eqns -> (i:) . composeMap allVarsEqn eqns+ PatBind p e -> allVarsPat p . allVarsExpr' e+ Sign is _ -> (is ++)+ DfltSign i _ -> (i:)+ Infix _ _ -> id+ _ -> impossible allVarsEqns :: [Eqn] -> [Ident] allVarsEqns eqns = composeMap allVarsEqn eqns []@@ -509,7 +636,7 @@ EVar i -> (i:) EApp e1 e2 -> allVarsExpr' e1 . allVarsExpr' e2 EOper e1 ies -> allVarsExpr' e1 . composeMap (\ (i,e2) -> (i :) . allVarsExpr' e2) ies- ELam qs -> composeMap allVarsEqn qs+ ELam _ qs -> composeMap allVarsEqn qs ELit _ _ -> id ECase e as -> allVarsExpr' e . composeMap allVarsCaseArm as ELet bs e -> composeMap allVarsBind' bs . allVarsExpr' e@@ -526,11 +653,13 @@ ENegApp e -> allVarsExpr' e EUpdate e ies -> allVarsExpr' e . composeMap field ies ESelect _ -> id+ ETypeArg _ -> id EAt i e -> (i :) . allVarsExpr' e EViewPat e p -> allVarsExpr' e . allVarsExpr' p ELazy _ p -> allVarsExpr' p EOr ps -> composeMap allVarsExpr' ps EUVar _ -> id+ EQVar e _ -> allVarsExpr' e ECon c -> (conIdent c :) EForall _ iks e -> (map (\ (IdKind i _) -> i) iks ++) . allVarsExpr' e where field (EField _ e) = allVarsExpr' e@@ -566,6 +695,7 @@ setSLocCon :: SLoc -> Con -> Con setSLocCon l (ConData ti i fs) = ConData ti (setSLocIdent l i) fs setSLocCon l (ConNew i fs) = ConNew (setSLocIdent l i) fs+setSLocCon l (ConSyn i n m) = ConSyn (setSLocIdent l i) n m errorMessage :: forall a . HasCallStack =>@@ -615,6 +745,9 @@ ppCommaSep :: [Doc] -> Doc ppCommaSep = hsep . punctuate (text ",") +ppEBind :: EBind -> Doc+ppEBind = ppEDef+ ppEDef :: EDef -> Doc ppEDef def = case def of@@ -623,6 +756,7 @@ Newtype lhs c ds -> text "newtype" <+> ppLHS lhs <+> text "=" <+> ppConstr c <+> ppDeriving ds Type lhs t -> text "type" <+> ppLHS lhs <+> text "=" <+> ppEType t Fcn i eqns -> ppEqns (ppIdent i) (text "=") eqns+ PatBind p e -> ppEPat p <+> text "=" <+> ppExpr e Sign is t -> hsep (punctuate (text ",") (map ppIdent is)) <+> text "::" <+> ppEType t KindSign i t -> text "type" <+> ppIdent i <+> text "::" <+> ppEKind t Import (ImportSpec b q m mm mis) -> text "import" <+>@@ -637,8 +771,9 @@ Class sup lhs fds bs -> ppWhere (text "class" <+> ppCtx sup <+> ppLHS lhs <+> ppFunDeps fds) bs Instance ct bs -> ppWhere (text "instance" <+> ppEType ct) bs Default mc ts -> text "default" <+> (maybe empty ppIdent mc) <+> parens (hsep (punctuate (text ", ") (map ppEType ts)))- Pattern lhs@(i,_) p meqns -> text "pattern" <+> ppLHS lhs <+> text "=" <+> ppExpr p <+> maybe empty (ppWhere (text ";") . (:[]) . BFcn i) meqns+ Pattern lhs@(i,_) p meqns -> text "pattern" <+> ppLHS lhs <+> text "=" <+> ppExpr p <+> maybe empty (ppWhere (text ";") . (:[]) . Fcn i) meqns Deriving ct -> text "deriving instance" <+> ppEType ct+ DfltSign i t -> text "default" <+> ppIdent i <+> text "::" <+> ppEType t ppDeriving :: Deriving -> Doc ppDeriving [] = empty@@ -714,7 +849,7 @@ cop = head op EApp _ _ -> ppApp [] ae EOper e ies -> ppE (foldl (\ e1 (i, e2) -> EApp (EApp (EVar i) e1) e2) e ies)- ELam qs -> parens $ text "\\" <> ppEqns empty (text "->") qs+ ELam _ qs -> parens $ text "\\" <> ppEqns empty (text "->") qs ELit _ i -> text (showLit i) ECase e as -> text "case" <+> ppE e <+> text "of" $$ nest 2 (vcat (map ppCaseArm as)) ELet bs e -> text "let" $$ nest 2 (vcat (map ppEBind bs)) $$ text "in" <+> ppE e@@ -730,14 +865,16 @@ ENegApp e -> text "-" <+> ppE e EUpdate ee ies -> ppE ee <> text "{" <+> hsep (punctuate (text ",") (map ppField ies)) <+> text "}" ESelect is -> parens $ hcat $ map (\ i -> text "." <> ppIdent i) is+ ETypeArg t -> text "@" <> ppE t EAt i e -> ppIdent i <> text "@" <> ppE e EViewPat e p -> parens $ ppE e <+> text "->" <+> ppE p ELazy True p -> text "~" <> ppE p ELazy False p -> text "!" <> ppE p EOr ps -> parens $ hsep (punctuate (text ";") (map ppE ps)) EUVar i -> text ("_a" ++ show i)- ECon c -> ppCon c- EForall _ iks e -> ppForall iks <+> ppEType e+ EQVar e t -> parens $ ppE e <> text "::" <> ppE t+ ECon c -> text "***" <> ppCon c+ EForall _ iks e -> parens $ ppForall iks <+> ppEType e ppApp :: [Expr] -> Expr -> Doc ppApp as (EApp f a) = ppApp (a:as) f@@ -772,6 +909,7 @@ ppCon :: Con -> Doc ppCon (ConData _ s _) = ppIdent s ppCon (ConNew s _) = ppIdent s+ppCon (ConSyn s _ _) = ppIdent s -- Literals are tagged the way they appear in the combinator file: -- # Int@@ -802,14 +940,6 @@ SThen e -> ppExpr e SLet bs -> text "let" $$ nest 2 (vcat (map ppEBind bs)) -ppEBind :: EBind -> Doc-ppEBind ab =- case ab of- BFcn i eqns -> ppEDef (Fcn i eqns)- BPat p e -> ppEPat p <+> text "=" <+> ppExpr e- BSign is t -> ppEDef (Sign is t)- BDfltSign i t -> text "default" <+> ppEBind (BSign [i] t)- ppCaseArm :: ECaseArm -> Doc ppCaseArm arm = case arm of@@ -830,10 +960,9 @@ getBindVars :: EBind -> [Ident] getBindVars abind = case abind of- BFcn i _ -> [i]- BPat p _ -> patVars p- BSign _ _ -> []- BDfltSign _ _ -> []+ Fcn i _ -> [i]+ PatBind p _ -> patVars p+ _ -> [] getBindsVars :: [EBind] -> [Ident] getBindsVars = concatMap getBindVars@@ -845,6 +974,10 @@ eForall' _ [] t = t eForall' b vs t = EForall b vs t +unForall :: EType -> ([IdKind], EType)+unForall (EForall _ xs t) = (xs, t)+unForall t = ([], t)+ eDummy :: Expr eDummy = EVar dummyIdent @@ -854,8 +987,7 @@ impossible = error "impossible" impossibleShow :: forall a b .- HasCallStack =>- (Show a, HasLoc a) => a -> b+ (HasCallStack, Show a, HasLoc a) => a -> b impossibleShow a = error $ "impossible: " ++ show (getSLoc a) ++ " " ++ show a -----------@@ -920,4 +1052,3 @@ getImplies (EApp (EApp (EVar n) a) b) = if isIdent "=>" n || isIdent "Primitives.=>" n then Just (a, b) else Nothing getImplies _ = Nothing-
src/MicroHs/FFI.hs view
@@ -73,7 +73,7 @@ iIO = mkIdent "Primitives.IO" iUnit :: Ident-iUnit = mkIdent "Primitives.()"+iUnit = mkIdent "()" iPtr :: Ident iPtr = mkIdent "Primitives.Ptr"@@ -117,7 +117,7 @@ body = mkRet r 0 (s ++ "&" ++ fn) in mkMhsFun ("addr_" ++ fn) body mkHdr (ImpStatic _ _ Func fn, t) =- let !(as, ior) = getArrows t+ let (as, ior) = getArrows t r = checkIO ior n = length as call = fn ++ "(" ++ intercalate ", " (zipWith mkArg as [0..]) ++ ")"@@ -189,5 +189,10 @@ "peek_flt", "poke_flt", "sizeof_int", "sizeof_long", "sizeof_llong", "opendir", "closedir", "readdir", "c_d_name", "chdir", "mkdir", "getcwd",- "get_buf", "openb_rd_buf", "openb_wr_buf"+ "get_buf", "openb_rd_buf", "openb_wr_buf",+ "new_mpz", "mpz_abs", "mpz_add", "mpz_and", "mpz_cmp", "mpz_get_d", + "mpz_get_si", "mpz_get_ui", "mpz_init_set_si", "mpz_init_set_ui", "mpz_ior", + "mpz_mul", "mpz_mul_2exp", "mpz_neg", "mpz_popcount", "mpz_sub", "mpz_tdiv_q_2exp", + "mpz_tdiv_qr", "mpz_tstbit", "mpz_xor",+ "want_gmp" ]
src/MicroHs/Flags.hs view
@@ -1,4 +1,4 @@-module MicroHs.Flags(Flags(..), verbosityGT, defaultFlags) where+module MicroHs.Flags(Flags(..), verbosityGT, defaultFlags, wantGMP) where import Prelude(); import MHSPrelude data Flags = Flags {@@ -8,6 +8,7 @@ paths :: [FilePath], -- module search path output :: String, -- output file loading :: Bool, -- show loading message+ speed :: Bool, -- show lines/s readCache :: Bool, -- read and use cache writeCache :: Bool, -- generate cache useTicks :: Bool, -- emit ticks@@ -31,9 +32,10 @@ verbose = 0, runIt = False, mhsdir = dir,- paths = [".", dir ++ "/lib"],+ paths = ["."] ++ gmp ++ [dir ++ "/lib"], output = "out.comb", loading = False,+ speed = False, readCache = False, writeCache = False, useTicks = False,@@ -47,3 +49,6 @@ installPkg = False, target = "default" }+ -- This is a hack so that the in-place mhs picks up GMP.+ where gmp | dir == "." && wantGMP = ["lib/gmp"]+ | otherwise = []
src/MicroHs/Ident.hs view
@@ -16,16 +16,16 @@ qualOf, addIdentSuffix, SLoc(..), noSLoc,- showSLoc,+ showSLoc, slocFile, ) where import Prelude(); import MHSPrelude hiding(head) import Data.Char import Text.PrettyPrint.HughesPJLite import GHC.Stack import MicroHs.List(dropEnd)+import MicroHs.MRnf import Data.Text(Text, pack, unpack, append, head)-import Compat {- -- Uncomment this section, and comment out the two lines above@@ -53,6 +53,9 @@ instance Show SLoc where show (SLoc f l c) = show f ++ "," ++ show l ++ ":" ++ show c +instance MRnf SLoc where+ mrnf (SLoc a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ data Ident = Ident SLoc Text --deriving (Show) @@ -69,6 +72,9 @@ instance Show Ident where show = showIdent +instance MRnf Ident where+ mrnf (Ident a b) = mrnf a `seq` mrnf b+ slocIdent :: Ident -> SLoc slocIdent (Ident l _) = l @@ -179,3 +185,6 @@ if l == 0 then "no location" else if l == -1 then "end-of-file" else "line " ++ show l ++ ", col " ++ show c++slocFile :: SLoc -> FilePath+slocFile (SLoc f _ _) = f
src/MicroHs/IdentMap.hs view
@@ -19,6 +19,7 @@ ) where import Prelude(); import MHSPrelude hiding(lookup, mapM, null) import MicroHs.Ident+import MicroHs.MRnf data Map a = Nil -- empty tree@@ -36,6 +37,11 @@ show m = show (toList m) -} +instance MRnf a => MRnf (Map a) where+ mrnf Nil = ()+ mrnf (One a b) = mrnf a `seq` mrnf b+ mrnf (Node a b c d e) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e+ empty :: forall a . Map a empty = Nil @@ -63,8 +69,14 @@ mapM :: forall m a b . Monad m => (a -> m b) -> Map a -> m (Map b) mapM _ Nil = return Nil-mapM f (One k v) = One k <$> f v-mapM f (Node l s k v r) = Node <$> mapM f l <*> return s <*> return k <*> f v <*> mapM f r+mapM f (One k v) = do+ v' <- f v+ return $ One k v'+mapM f (Node l s k v r) = do+ l' <- mapM f l+ v' <- f v+ r' <- mapM f r+ return $ Node l' s k v' r' size :: forall a . Map a -> Int size Nil = 0
src/MicroHs/Instances.hs view
@@ -7,7 +7,6 @@ import MicroHs.Ident import MicroHs.Exp import MicroHs.Expr-import Compat compiledWithGHC :: Bool compiledWithGHC = False
src/MicroHs/Interactive.hs view
@@ -33,6 +33,7 @@ mainInteractive :: Flags -> IO () mainInteractive flags = do putStrLn $ "Welcome to interactive MicroHs, version " ++ showVersion version+ when wantGMP $ putStrLn "Using GMP" let flags' = flags{ loading = True } cash <- getCached flags' _ <- runStateIO start $ IState preamble flags' cash noSymbols
src/MicroHs/Lex.hs view
@@ -8,6 +8,7 @@ import Prelude(); import MHSPrelude hiding(lex) import Data.Char import Data.List+import Data.Maybe (fromJust) import MicroHs.Ident import Text.ParserComb(TokenMachine(..)) @@ -80,10 +81,15 @@ case span isIdentChar cs of (ds, rs) -> tIdent loc [] (d:ds) (lex (addCol loc $ 1 + length ds) rs) lex loc cs@(d:_) | isUpper d = upperIdent loc loc [] cs-lex loc ('0':x:cs) | toLower x == 'x' = hexNumber loc cs- | toLower x == 'o' = octNumber loc cs- | toLower x == 'b' = binNumber loc cs-lex loc cs@(d:_) | isDigit d = number loc cs+lex loc ('0':x:cs)+ | toLower x == 'x' = lexNumBasePrefix x 16 isHexDigit loc cs+ | toLower x == 'o' = lexNumBasePrefix x 8 isOctDigit loc cs+ | toLower x == 'b' = lexNumBasePrefix x 2 isBinDigit loc cs+ where isBinDigit c = c == '0' || c == '1'+lex loc cs@(d:_) | isDigit d =+ case readNumDec cs of+ (Left n, len, rs) -> TInt loc n : lex (addCol loc len) rs+ (Right q, len, rs) -> TRat loc q : lex (addCol loc len) rs lex loc ('.':cs@(d:_)) | isLower_ d = TSpec loc '.' : lex (addCol loc 1) cs -- Recognize #line 123 "file/name.hs"@@ -123,43 +129,65 @@ nested loc ('#':cs) = pragma loc cs nested loc cs = skipNest loc 1 cs -hexNumber :: SLoc -> String -> [Token]-hexNumber loc cs =- case span isHexDigit cs of- (ds, rs) -> TInt loc (readBase 16 ds) : lex (addCol loc $ length ds + 2) rs+-- lex a number of the form '0':x:cs+lexNumBasePrefix :: Char -> Integer -> (Char -> Bool) -> SLoc -> String -> [Token]+lexNumBasePrefix x base isDig loc cs =+ case readIntBase base isDig cs of+ Just (n, len, rs) -> TInt loc n : lex (addCol loc $ len + 2) rs+ Nothing -> TInt loc 0 : lex (addCol loc 1) (x : cs) -octNumber :: SLoc -> String -> [Token]-octNumber loc cs =- case span isOctDigit cs of- (ds, rs) -> TInt loc (readBase 8 ds) : lex (addCol loc $ length ds + 2) rs+readIntBase :: Integer -> (Char -> Bool) -> String -> Maybe (Integer, Int, String)+readIntBase base isDig ds =+ let (n, len, rest) = goDig 0 0 ds+ in if len > 0 then Just (n, len, rest) else Nothing+ where+ goSep acc lastLen lastRest len ('_' : cs) = goSep acc lastLen lastRest (len + 1) cs+ goSep acc _ _ len (d : cs) | isDig d = goDig (addDigit acc d) (len + 1) cs+ goSep acc lastLen lastRest _ _ = (acc, lastLen, lastRest) -binNumber :: SLoc -> String -> [Token]-binNumber loc cs =- case span isBinDigit cs of- (ds, rs) -> TInt loc (readBase 2 ds) : lex (addCol loc $ length ds + 2) rs- where isBinDigit c = c == '0' || c == '1'+ goDig acc len rest@('_' : cs) = goSep acc len rest (len + 1) cs+ goDig acc len (d : cs) | isDig d = goDig (addDigit acc d) (len + 1) cs+ goDig acc len rest = (acc, len, rest) -number :: SLoc -> String -> [Token]-number loc cs =- case span isDigit cs of- (ds, rs) | null rs || not (head rs == '.') || (take 2 rs) == ".." ->- case expo rs of- Nothing -> TInt loc (readBase 10 ds) : lex (addCol loc $ length ds) rs- Just (es, rs') -> mkD (ds ++ es) rs'- | otherwise ->- case span isDigit (tail rs) of- (ns, rs') ->- let s = ds ++ '.':ns- in case expo rs' of- Nothing -> mkD s rs'- Just (es, rs'') -> mkD (s ++ es) rs''+ addDigit x d = x * base + toInteger (digitToInt d)++readNumDec :: String -> (Either Integer Rational, Int, String)+readNumDec cs =+ case readIntDec cs of+ Just (n, nLen, rest) ->+ case rest of+ '.' : rs@(d : _) | isDigit d ->+ case readIntDec rs of+ Just (m, mLen, rest') ->+ let q = toRational n + toRational m * 10 ^^ negate (length $ filter isDigit $ take mLen rs)+ in case expo rest' of+ Just (e, eLen, rest'') -> (Right $ q * 10 ^^ e, nLen + 1 + mLen + eLen, rest'')+ Nothing -> (Right q, nLen + 1 + mLen, rest')+ Nothing -> (Left n, nLen, rest) -- this can't happen+ _ ->+ case expo rest of+ Just (e, eLen, rest') -> (Right $ toRational n * 10 ^^ e, nLen + eLen, rest')+ Nothing -> (Left n, nLen, rest)+ Nothing -> error "impossible: first char is a digit" where- expo (e:'-':xs@(d:_)) | toLower e == 'e' && isDigit d = Just ('e':'-':as, bs) where (as, bs) = span isDigit xs- expo (e:'+':xs@(d:_)) | toLower e == 'e' && isDigit d = Just ('e':'+':as, bs) where (as, bs) = span isDigit xs- expo (e: xs@(d:_)) | toLower e == 'e' && isDigit d = Just ('e': as, bs) where (as, bs) = span isDigit xs- expo _ = Nothing- mkD x r = TRat loc (readRational x) : lex (addCol loc $ length x) r+ readIntDec = readIntBase 10 isDigit + -- try to read an exponent+ expo :: String -> Maybe (Integer, Int, String)+ expo = go 0++ go len ('_' : xs) = go (len + 1) xs+ go len (e:'-':xs@(d:_)) | toLower e == 'e' && isDigit d =+ let (n, len', rest) = fromJust $ readIntDec xs+ in Just (-n, len + 2 + len', rest)+ go len (e:'+':xs@(d:_)) | toLower e == 'e' && isDigit d =+ let (n, len', rest) = fromJust $ readIntDec xs+ in Just (n, len + 2 + len', rest)+ go len (e: xs@(d:_)) | toLower e == 'e' && isDigit d =+ let (n, len', rest) = fromJust $ readIntDec xs+ in Just (n, len + 1 + len', rest)+ go _ _ = Nothing+ -- Skip a {- -} style comment skipNest :: SLoc -> Int -> String -> [Token] skipNest loc 0 cs = lex loc cs@@ -243,7 +271,8 @@ ("SP", '\SP'), ("DEL", '\DEL')] conv :: Int -> Int -> String -> String-conv b r (c:ds) | isHexDigit c, let { n = digitToInt c }, n < b = conv b (r * b + n) ds+conv b r (c:ds) | isHexDigit c && n < b = conv b (r * b + n) ds+ where n = digitToInt c conv _ r ds = chr r : decodeEscs ds -- Multiline string literals@@ -306,7 +335,7 @@ (ds, rs) -> case rs of '.':cs@(d:_) | isUpper d -> upperIdent (addCol loc $ 1 + length ds) sloc (ds:qs) cs- | isLower d -> ident isIdentChar+ | isLower_ d -> ident isIdentChar | isOperChar d -> ident isOperChar where { ident p =@@ -428,30 +457,3 @@ lexTopLS :: FilePath -> String -> LexState lexTopLS f s = LS $ layoutLS (lexStart $ lex (SLoc f 1 1) s) [] -- error $ show $ map showToken $ lex (SLoc f 1 1) s----------------- Convert string in scientific notation to a rational number.-readRational :: String -> Rational-readRational "" = undefined-readRational acs@(sgn:as) | sgn == '-' = negate $ rat1 as- | otherwise = rat1 acs- where- rat1 s1 =- case span isDigit s1 of- (ds1, cr1) | ('.':r1) <- cr1 -> rat2 f1 r1- | (c:r1) <- cr1, toLower c == 'e' -> rat3 f1 r1- | otherwise -> f1- where f1 = toRational (readBase 10 ds1)-- rat2 f1 s2 =- case span isDigit s2 of- (ds2, cr2) | (c:r2) <- cr2, toLower c == 'e' -> rat3 f2 r2- | otherwise -> f2- where f2 = f1 + toRational (readBase 10 ds2) * 10 ^^ (negate $ length ds2)-- rat3 f2 ('+':s) = f2 * expo s- rat3 f2 ('-':s) = f2 / expo s- rat3 f2 s = f2 * expo s-- expo s = 10 ^ (readBase 10 s)
src/MicroHs/List.hs view
@@ -12,12 +12,31 @@ elemBy :: (a -> a -> Bool) -> a -> [a] -> Bool elemBy eq a = any (eq a) --- A simple "quicksort" for now.+-- A simple merge sort for now. sortLE :: forall a . (a -> a -> Bool) -> [a] -> [a]-sortLE _ [] = []-sortLE le (x:xs) = sortLE le lt ++ (x : sortLE le ge)- where (ge, lt) = partition (le x) xs+sortLE le = mergeAll . splatter+ where+ splatter [] = []+ splatter [a] = [[a]]+ splatter (a1 : a2 : as)+ | a1 `le` a2 = [a1, a2] : splatter as+ | otherwise = [a2, a1] : splatter as + mergeAll [] = []+ mergeAll [xs] = xs+ mergeAll xss = mergeAll (mergePairs xss)++ mergePairs [] = []+ mergePairs [xs] = [xs]+ mergePairs (xs1 : xs2 : xss) = merge xs1 xs2 : mergePairs xss++ merge [] ys = ys+ merge xs [] = xs+ merge axs@(x : xs) ays@(y : ys)+ | x `le` y = x : merge xs ays+ | otherwise = y : merge axs ys++ showListS :: (a -> String) -> [a] -> String showListS sa arg = let@@ -30,13 +49,20 @@ [] -> "[]" a : as -> "[" ++ sa a ++ showRest as -anySame :: (Eq a) => [a] -> Bool-anySame = anySameBy (==)+anySame :: (Ord a) => [a] -> Bool+anySame = anySameByLE (<=) -anySameBy :: (a -> a -> Bool) -> [a] -> Bool-anySameBy _ [] = False-anySameBy eq (x:xs) = elemBy eq x xs || anySameBy eq xs+anySameByLE :: (a -> a -> Bool) -> [a] -> Bool+anySameByLE le = anySameAdj . sortLE le+ where+ anySameAdj (x1 : xs@(x2 : _))+ | x2 `le` x1 = True+ | otherwise = anySameAdj xs+ anySameAdj _ = False +groupSort :: (Ord a) => [a] -> [[a]]+groupSort = group . sortLE (<=)+ deleteAllBy :: forall a . (a -> a -> Bool) -> a -> [a] -> [a] deleteAllBy _ _ [] = [] deleteAllBy eq x (y:ys) = if eq x y then deleteAllBy eq x ys else y : deleteAllBy eq x ys@@ -56,8 +82,10 @@ substString :: forall a . Eq a => [a] -> [a] -> [a] -> [a] substString _ _ [] = []-substString from to xs@(c:cs) | Just rs <- stripPrefix from xs = to ++ substString from to rs- | otherwise = c : substString from to cs+substString from to xs@(c:cs) =+ case stripPrefix from xs of+ Just rs -> to ++ substString from to rs+ _ -> c : substString from to cs showPairS :: forall a b . (a -> String) -> (b -> String) -> (a, b) -> String showPairS sa sb (a, b) = "(" ++ sa a ++ "," ++ sb b ++ ")"@@ -65,10 +93,12 @@ findCommonPrefix :: Eq a => [[a]] -> [a] findCommonPrefix [] = [] findCommonPrefix ([] : _) = []-findCommonPrefix ((x:xs) : ys) | Just ys' <- mapM (f x) ys = x : findCommonPrefix (xs:ys')- | otherwise = []- where f a (b:bs) | a == b = Just bs- f _ _ = Nothing+findCommonPrefix ((x:xs) : ys) =+ let f a (b:bs) | a == b = Just bs+ f _ _ = Nothing+ in case mapM (f x) ys of+ Just ys' -> x : findCommonPrefix (xs:ys')+ _ -> [] dropEnd :: Int -> [a] -> [a] dropEnd n = reverse . drop n . reverse
+ src/MicroHs/MRnf.hs view
@@ -0,0 +1,34 @@+module MicroHs.MRnf where+import Prelude(); import MHSPrelude+import Data.Text+import Data.Version+import System.IO.MD5(MD5CheckSum)++class MRnf a where+ mrnf :: a -> ()+ mrnf a = seq a ()++instance MRnf Int+instance MRnf Char+instance (MRnf a, MRnf b) => MRnf (a, b) where+ mrnf (a, b) = mrnf a `seq` mrnf b+instance (MRnf a, MRnf b) => MRnf (Either a b) where+ mrnf (Left a) = mrnf a+ mrnf (Right a) = mrnf a+instance MRnf a => MRnf [a] where+ mrnf [] = ()+ mrnf (x:xs) = mrnf x `seq` mrnf xs+instance MRnf a => MRnf (Maybe a) where+ mrnf Nothing = ()+ mrnf (Just x) = mrnf x+instance MRnf Text+instance MRnf Version where+ mrnf v = mrnf (versionBranch v)+instance MRnf Rational where+ mrnf x = (x == 0) `seq` ()+instance MRnf Double+instance MRnf Integer where+ mrnf x = (x == 0) `seq` ()+instance MRnf Bool+instance MRnf (a -> b)+instance MRnf MD5CheckSum -- Not quite NF, but close
src/MicroHs/Main.hs view
@@ -30,7 +30,6 @@ import System.IO import System.IO.Serialize import System.IO.TimeMilli-import Compat import MicroHs.Instances() -- for GHC import MicroHs.TargetConfig import Paths_MicroHs(getDataDir)@@ -59,12 +58,13 @@ if installPkg flags then mainInstallPackage flags mdls else withArgs rargs $ do case mdls of- [] -> mainInteractive flags+ [] | null (cArgs flags) -> mainInteractive flags+ | otherwise -> mainCompileC flags [] "" [s] -> mainCompile flags (mkIdentSLoc (SLoc "command-line" 0 0) s) _ -> error usage usage :: String-usage = "Usage: mhs [--version] [--numeric-version] [-v] [-q] [-l] [-r] [-C[R|W]] [-XCPP] [-DDEF] [-IPATH] [-T] [-z] [-iPATH] [-oFILE] [-a[PATH]] [-L[PATH|PKG]] [-PPKG] [-Q PKG [DIR]] [-tTARGET] [-optc OPTION] [MODULENAME..|FILE]"+usage = "Usage: mhs [--version] [--numeric-version] [-v] [-q] [-l] [-s] [-r] [-C[R|W]] [-XCPP] [-DDEF] [-IPATH] [-T] [-z] [-iPATH] [-oFILE] [-a[PATH]] [-L[PATH|PKG]] [-PPKG] [-Q PKG [DIR]] [-tTARGET] [-optc OPTION] [MODULENAME..|FILE]" decodeArgs :: Flags -> [String] -> [String] -> (Flags, [String], [String]) decodeArgs f mdls [] = (f, mdls, [])@@ -75,6 +75,7 @@ "-q" -> decodeArgs f{verbose = -1} mdls args "-r" -> decodeArgs f{runIt = True} mdls args "-l" -> decodeArgs f{loading = True} mdls args+ "-s" -> decodeArgs f{speed = True} mdls args "-CR" -> decodeArgs f{readCache = True} mdls args "-CW" -> decodeArgs f{writeCache = True} mdls args "-C" -> decodeArgs f{readCache=True, writeCache = True} mdls args@@ -125,24 +126,27 @@ readTarget :: Flags -> FilePath -> IO TTarget readTarget flags dir = do- targets <- readTargets flags dir+ targets <- readTargets flags dir compiler <- lookupEnv "CC"- conf <- lookupEnv "MHSCONF"+ ccflags <- lookupEnv "MHSCCFLAGS"+ conf <- lookupEnv "MHSCONF" let dConf = "unix-" ++ show _wordSize case findTarget (target flags) targets of Nothing -> do when (verbose flags > 0) $ putStrLn $ unwords ["Could not find", target flags, "in file"]- return TTarget { tName = "default"- , tCC = fromMaybe "cc" compiler - , tConf = fromMaybe dConf conf+ return TTarget { tName = "default"+ , tCC = fromMaybe "cc" compiler+ , tCCFlags = fromMaybe "" ccflags+ , tConf = fromMaybe dConf conf } Just (Target n cs) -> do when (verbose flags > 0) $ putStrLn $ "Found target: " ++ show cs- return TTarget { tName = n- , tCC = fromMaybe "cc" $ compiler <|> lookup "cc" cs- , tConf = fromMaybe dConf $ conf <|> lookup "conf" cs+ return TTarget { tName = n+ , tCC = fromMaybe "cc" $ compiler <|> lookup "cc" cs+ , tCCFlags = fromMaybe "" $ ccflags <|> lookup "ccflags" cs+ , tConf = fromMaybe dConf $ conf <|> lookup "conf" cs } @@ -156,16 +160,18 @@ (name, ver) = splitNameVer namever (exported, other) = partition ((`elem` mns) . tModuleName) mdls pkgDeps = map (\ p -> (pkgName p, pkgVersion p)) $ getPkgs cash- pkg = Package { pkgName = mkIdent name, pkgVersion = ver+ pkg = Package { pkgName = mkIdent name+ , pkgVersion = ver , pkgCompiler = mhsVersion- , pkgExported = exported, pkgOther = other+ , pkgExported = exported+ , pkgOther = other , pkgTables = getCacheTables cash , pkgDepends = pkgDeps } --print (map tModuleName $ pkgOther pkg) t1 <- getTimeMilli when (verbose flags > 0) $ putStrLn $ "Writing package " ++ namever ++ " to " ++ output flags- writeSerializedCompressed (output flags) pkg+ writeSerializedCompressed (output flags) (forcePackage pkg) t2 <- getTimeMilli when (verbose flags > 0) $ putStrLn $ "Compression time " ++ show (t2 - t1) ++ " ms" @@ -173,7 +179,8 @@ splitNameVer :: String -> (String, Version) splitNameVer s = case span (\ c -> isDigit c || c == '.') (reverse s) of- (rver, '-':rname) | is@(_:_) <- readVersion (reverse rver) -> (reverse rname, makeVersion is)+ (rver, '-':rname) | not (null is) -> (reverse rname, makeVersion is)+ where is = readVersion (reverse rver) _ -> error $ "package name not of the form name-version:" ++ show s where readVersion = map readInt . words . map (\ c -> if c == '.' then ' ' else c) @@ -207,6 +214,7 @@ mainCompile :: Flags -> Ident -> IO () mainCompile flags mn = do+ t0 <- getTimeMilli (cash, (rmn, allDefs)) <- do cash <- getCached flags (rds, _, cash') <- compileCacheTop flags mn cash@@ -236,6 +244,11 @@ when (verbosityGT flags 0) $ putStrLn $ "final pass " ++ padLeft 6 (show (t2-t1)) ++ "ms" + when (speed flags) $ do+ let fns = filter (isSuffixOf ".hs") $ map (slocFile . slocIdent) $ cachedNonPkgModuleNames cash+ locs <- sum . map (length . lines) <$> mapM readFile fns+ putStrLn $ show (locs * 1000 `div` (t2 - t0)) ++ " lines/s"+ let cCode = makeCArray flags outData ++ makeFFI flags allDefs -- Decode what to do:@@ -249,41 +262,49 @@ writeFile outFile cCode else do (fn, h) <- openTmpFile "mhsc.c"+ let ppkgs = map fst $ getPathPkgs cash hPutStr h cCode hClose h- ct1 <- getTimeMilli- mcc <- lookupEnv "MHSCC"- let dir = mhsdir flags- ppkgs = map fst $ getPathPkgs cash- incDirs = map (convertToInclude "include") ppkgs- cDirs = map (convertToInclude "cbits") ppkgs- incDirs' <- filterM doesDirectoryExist incDirs- cDirs' <- filterM doesDirectoryExist cDirs- -- print (map fst $ getPathPkgs cash, (incDirs, incDirs'), (cDirs, cDirs'))- let incs = unwords $ map ("-I" ++) incDirs'- defs = "-D__MHS__"- cpps = concatMap (\ a -> "'" ++ a ++ "' ") (cppArgs flags) -- Use all CPP args from the command line- TTarget _ compiler conf <- readTarget flags dir- let dcc = compiler ++ " -w -Wall -O3 -I" ++ dir ++ "/src/runtime " ++- incs ++ " " ++- defs ++ " " ++- cpps ++- dir ++ "/src/runtime/eval-" ++ conf ++ ".c " ++- unwords (cArgs flags) ++- unwords (map (++ "/*.c") cDirs') ++- " $IN -lm -o $OUT"- cc = fromMaybe dcc mcc- cmd = substString "$IN" fn $ substString "$OUT" outFile cc- when (verbosityGT flags 0) $- putStrLn $ "Execute: " ++ show cmd- ec <- system cmd+ mainCompileC flags ppkgs fn removeFile fn- when (ec /= ExitSuccess) $- error $ "command failed: " ++ cmd- ct2 <- getTimeMilli- when (verbosityGT flags 0) $- putStrLn $ "C compilation " ++ padLeft 6 (show (ct2-ct1)) ++ "ms" +mainCompileC :: Flags -> [FilePath] -> FilePath -> IO ()+mainCompileC flags ppkgs infile = do+ ct1 <- getTimeMilli+ mcc <- lookupEnv "MHSCC"+ let dir = mhsdir flags+ incDirs = map (convertToInclude "include") ppkgs+ cDirs = map (convertToInclude "cbits") ppkgs+ outFile = output flags+ incDirs' <- filterM doesDirectoryExist incDirs+ cDirs' <- filterM doesDirectoryExist cDirs+ -- print (map fst $ getPathPkgs cash, (incDirs, incDirs'), (cDirs, cDirs'))+ let incs = unwords $ map ("-I" ++) incDirs'+ defs = "-D__MHS__"+ cpps = concatMap (\ a -> "'" ++ a ++ "' ") (cppArgs flags) -- Use all CPP args from the command line+ TTarget _ compiler ccflags conf <- readTarget flags dir+ extra <- fromMaybe "" <$> lookupEnv "MHSEXTRACCFLAGS"+ let dcc = compiler ++ " -w -Wall -O3 -I" ++ dir ++ "/src/runtime " +++ ccflags ++ " " +++ incs ++ " " +++ defs ++ " " +++ extra ++ " " +++ cpps +++ dir ++ "/src/runtime/eval-" ++ conf ++ ".c " +++ unwords (cArgs flags) +++ unwords (map (++ "/*.c") cDirs') +++ " $IN -lm -o $OUT"+ cc = fromMaybe dcc mcc+ cmd = substString "$IN" infile $ substString "$OUT" outFile cc+ when (verbosityGT flags 0) $+ putStrLn $ "Execute: " ++ show cmd+ ec <- system cmd+ when (ec /= ExitSuccess) $+ error $ "command failed: " ++ cmd+ ct2 <- getTimeMilli+ when (verbosityGT flags 0) $+ putStrLn $ "C compilation " ++ padLeft 6 (show (ct2-ct1)) ++ "ms"+ mainInstallPackage :: Flags -> [FilePath] -> IO () mainInstallPackage flags [pkgfn, dir] = do when (verbosityGT flags (-1)) $@@ -314,7 +335,7 @@ ok <- doesDirectoryExist pdir when ok $ do files <- getDirectoryContents pdir- let pkgs = [ b | f <- files, Just b <- [stripSuffix ".pkg" f] ]+ let pkgs = [ b | f <- files, Just b <- [stripSuffix packageSuffix f] ] putStrLn $ pdir ++ ":" mapM_ (\ p -> putStrLn $ " " ++ p) pkgs
src/MicroHs/Package.hs view
@@ -1,11 +1,13 @@ module MicroHs.Package( IdentPackage, Package(..),+ forcePackage, ) where import Prelude(); import MHSPrelude import Data.Version import MicroHs.Desugar(LDef) import MicroHs.Ident(Ident)+import MicroHs.MRnf import MicroHs.TypeCheck(TModule, GlobTables) --@@ -35,3 +37,11 @@ pkgDepends :: [(IdentPackage, Version)] -- used packages } -- deriving (Show)++instance MRnf Package where+ mrnf (Package a b c d e f g) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e `seq` mrnf f `seq` mrnf g++-- Fully evaluate a package+forcePackage :: Package -> Package+forcePackage p = mrnf p `seq` p+
src/MicroHs/Parse.hs view
@@ -1,10 +1,11 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license. {-# OPTIONS_GHC -Wno-incomplete-uni-patterns -Wno-unused-do-bind #-}-module MicroHs.Parse(P, pTop, pTopModule, parseDie, parse, pExprTop, keywords) where-import Prelude(); import MHSPrelude-import Control.Applicative+module MicroHs.Parse(P, pTop, pTopModule, parseDie, parse, pExprTop, keywords, dotDotIdent) where+import Prelude(); import MHSPrelude hiding ((*>))+import Control.Applicative hiding ((*>)) import Control.Monad+import Control.Monad.Fail import Data.Char import Data.List import Text.ParserComb as P@@ -14,6 +15,11 @@ import MicroHs.Ident --import Debug.Trace +-- Hugs can't define the efficient *>+infixl 4 *>+(*>) :: Prsr s t a -> Prsr s t b -> Prsr s t b+(*>) = (>>)+ type P a = Prsr LexState Token a parseDie :: forall a . (Show a) =>@@ -45,7 +51,7 @@ t <- nextToken case t of TEnd _ -> pure ()- _ -> fail "eof"+ _ -> Control.Monad.Fail.fail "expected eof" pTop :: P EModule pTop = (pModule <|< pModuleEmpty) <* eof@@ -98,13 +104,12 @@ pUIdentSym :: P Ident pUIdentSym = pUIdent <|< pParens pUSymOper --- Special "identifiers": () [] (,) ...+-- Special "identifiers": [] (,) ... pUIdentSpecial :: P Ident pUIdentSpecial = do loc <- getSLoc let mk = mkIdentSLoc loc- (mk . map (const ',') <$> (pSpec '(' *> esome (pSpec ',') <* pSpec ')')) <|< (mk "[]" <$ (pSpec '[' *> pSpec ']')) -- Allow [] as a constructor name @@ -146,7 +151,7 @@ keywords = ["case", "class", "data", "default", "deriving", "do", "else", "forall", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance",- "let", "module", "newtype", "of", "pattern", "primitive", "then", "type", "where"]+ "let", "module", "newtype", "of", "pattern", "_primitive", "then", "type", "where"] pSpec :: Char -> P () pSpec c = () <$ satisfy (showToken $ TSpec (SLoc "" 0 0) c) is@@ -254,14 +259,12 @@ pExportItem :: P ExportItem pExportItem = ExpModule <$> (pKeyword "module" *> pUQIdent)- <|< expType <$> pUQIdentSym <*> (pSpec '(' *> pConList <* pSpec ')')+ <|< ExpTypeSome <$> pUQIdentSym <*> pParens pConList <|< ExpTypeSome <$> pUQIdentSym <*> pure [] <|< ExpValue <$> pLQIdentSym <|< ExpValue <$> (pKeyword "pattern" *> pUQIdentSym) <|< ExpTypeSome <$> (pKeyword "type" *> pLQIdentSym) <*> pure [] <|< ExpDefault <$> (pKeyword "default" *> pUQIdentSym)- where expType i Nothing = ExpTypeAll i- expType i (Just is) = ExpTypeSome i is pKeyword :: String -> P () pKeyword kw = () <$ satisfy kw is@@ -304,30 +307,23 @@ pDef :: P EDef pDef =- uncurry Data <$> (pKeyword "data" *> pData) <*> pDeriving+ pBind -- Fcn, Sign, PatBind, Infix+ <|< uncurry Data <$> (pKeyword "data" *> pData) <*> pDeriving <|< Newtype <$> (pKeyword "newtype" *> pLHS) <*> (pSpec '=' *> (Constr [] [] <$> pUIdentSym <*> pField)) <*> pDeriving <|< Type <$> (pKeyword "type" *> pLHS) <*> (pSpec '=' *> pType)- <|< uncurry Fcn <$> pEqns- <|< Sign <$> ((esepBy1 pLIdentSym (pSpec ',')) <* dcolon) <*> pType <|< Import <$> (pKeyword "import" *> pImportSpec) <|< ForImp <$> (pKeyword "foreign" *> pKeyword "import" *> (pKeyword "ccall" <|> pKeyword "capi") *> eoptional (pKeyword "unsafe") *> eoptional pString) <*> pLIdent <*> (dcolon *> pType)- <|< Infix <$> ((,) <$> pAssoc <*> pPrec) <*> esepBy1 pTypeOper (pSpec ',') <|< Class <$> (pKeyword "class" *> pContext) <*> pLHS <*> pFunDeps <*> pWhere pClsBind <|< Instance <$> (pKeyword "instance" *> pType) <*> pWhere pInstBind <|< Default <$> (pKeyword "default" *> eoptional clsSym) <*> pParens (esepBy pType (pSpec ',')) <|< KindSign <$> (pKeyword "type" *> pTypeIdentSym) <*> (dcolon *> pKind) <|< mkPattern <$> (pKeyword "pattern" *> pPatSyn)- <|< PatternSign <$> (pKeyword "pattern" *> (esepBy1 pUIdentSym (pSpec ',')) <* dcolon) <*> pType+ <|< Sign <$> (pKeyword "pattern" *> (esepBy1 pUIdentSym (pSpec ',')) <* dcolon) <*> pType <|< Deriving <$> (pKeyword "deriving" *> pKeyword "instance" *> pType) <|< noop <$ (pKeyword "type" <* pKeyword "role" <* pTypeIdentSym <* (pKeyword "nominal" <|> pKeyword "phantom" <|> pKeyword "representational")) where- pAssoc = (AssocLeft <$ pKeyword "infixl") <|< (AssocRight <$ pKeyword "infixr") <|< (AssocNone <$ pKeyword "infix")- dig (TInt _ ii) | 0 <= i && i <= 9 = Just i where i = fromInteger ii- dig _ = Nothing- pPrec = satisfyM "digit" dig- pFunDeps = (pSpec '|' *> esepBy1 pFunDep (pSpec ',')) <|< pure [] pFunDep = (,) <$> esome pLIdent <*> (pSRArrow *> esome pLIdent) pField = guardM pFields ((== 1) . either length length)@@ -348,7 +344,7 @@ ) <|> ( do pSymbol "<-" p <- pPat- meqns <- optional (pKeyword "where" *> pBraces (pEqns' (\ n _ -> i == n)))+ meqns <- optional (pKeyword "where" *> pBraces (pEqnsU i)) pure (lhs, p, fmap snd meqns) ) @@ -410,7 +406,7 @@ where pCtx = ((:[]) <$> pTypeApp) <|> (eq <$> pTypeArg <*> pTilde <*> pTypeArg) -- A hack to allow a~b => ...- eq t1 i t2 = [eApp2 (EVar i) t1 t2]+ eq t1 i t2 = [eAppI2 i t1 t2] pTilde = do i <- pQSymOper; guard (i == mkIdent "~"); return i pDRArrow :: P ()@@ -465,17 +461,21 @@ pImportItem :: P ImportItem pImportItem =- impType <$> pUQIdentSym <*> (pSpec '(' *> pConList <* pSpec ')')+ impType <$> pUQIdentSym <*> pParens pConList <|< ImpTypeSome <$> pUQIdentSym <*> pure [] <|< ImpValue <$> pLQIdentSym- where impType i Nothing = ImpTypeAll i- impType i (Just is) = ImpTypeSome i is+ <|< ImpValue <$> (pKeyword "pattern" *> pUQIdentSym)+ <|< ImpTypeSome <$> (pKeyword "type" *> pLQIdentSym) <*> pure []+ where impType i [d] | d == dotDotIdent = ImpTypeAll i+ impType i is = ImpTypeSome i is -pConList :: P (Maybe [Ident])-pConList =- (Nothing <$ pSymbol "..")- <|< (Just <$> esepBy (pQIdent <|< pUIdentSpecial <|< pParens pSymOper) (pSpec ','))+pConList :: P [Ident]+pConList = esepBy (pDotDot <|< pQIdent <|< pUIdentSpecial <|< pParens pSymOper) (pSpec ',')+ where pDotDot = dotDotIdent <$ pSymbol ".." +dotDotIdent :: Ident+dotDotIdent = mkIdent ".."+ -------- -- Types @@ -542,7 +542,7 @@ <|< pLit <|< (eTuple <$> (pSpec '(' *> esepBy pPat (pSpec ',') <* pSpec ')')) <|< (EListish . LList <$> (pSpec '[' *> esepBy1 pPat (pSpec ',') <* pSpec ']'))- <|< (EViewPat <$> (pSpec '(' *> pAExpr) <*> (pSRArrow *> pAPat <* pSpec ')'))+ <|< (EViewPat <$> (pSpec '(' *> pExpr) <*> (pSRArrow *> pPat <* pSpec ')')) <|< (ELazy True <$> (pSpec '~' *> pAPat)) <|< (ELazy False <$> (pSpec '!' *> pAPat)) <|< (EOr <$> (pSpec '(' *> esepBy1 pPat (pSpec ';') <* pSpec ')')) -- if there is a single pattern it will be matched by the tuple case@@ -551,6 +551,8 @@ pPat :: P EPat pPat = pPatOp+ -- This is where view patterns belong, but it's too slow+ -- <|> (EViewPat <$> pExpr <*> (pSRArrow *> pPatApp)) pPatOp :: P EPat pPatOp = pOperators pUOper pPatArg@@ -570,37 +572,44 @@ ------------- +-- Regular function definition pEqns :: P (Ident, [Eqn])-pEqns = pEqns' (\ _ _ -> True)+pEqns = pEqns' pLIdentSym pLOper (\ _ _ -> True)+ where pLOper = guardM pOper (not . isConIdent) -pEqns' :: (Ident -> Int -> Bool) -> P (Ident, [Eqn])-pEqns' pfst = do- (name, eqn@(Eqn ps alts)) <- pEqn pfst+-- Pattern synonym function; must have name i.+pEqnsU :: Ident -> P (Ident, [Eqn])+pEqnsU i = pEqns' pUIdentSym pUOper (\ n _ -> i == n)++-- pEqns' is used to parse oridinary function definitions as well+-- as the 'constructor' of pattern synonyms, which has an upper case identifier.+pEqns' :: P Ident -> P Ident -> (Ident -> Int -> Bool) -> P (Ident, [Eqn])+pEqns' ident oper test = do+ (name, eqn@(Eqn ps alts)) <- pEqn ident oper test case (ps, alts) of ([], EAlts [_] []) -> -- don't collect equations when of the form 'i = e' pure (name, [eqn]) _ -> do- neqns <- emany (pSpec ';' *> pEqn (\ n l -> n == name && l == length ps))+ neqns <- emany (pSpec ';' *> pEqn ident oper (\ n l -> n == name && l == length ps)) pure (name, eqn : map snd neqns) -pEqn :: (Ident -> Int -> Bool) -> P (Ident, Eqn)-pEqn test = do- (name, pats) <- pEqnLHS+pEqn :: P Ident -> P Ident -> (Ident -> Int -> Bool) -> P (Ident, Eqn)+pEqn ident oper test = do+ (name, pats) <- pEqnLHS ident oper alts <- pAlts (pSpec '=') guard (test name (length pats)) pure (name, Eqn pats alts) -pEqnLHS :: P (Ident, [EPat])-pEqnLHS =- ((,) <$> pLIdentSym <*> emany pAPat)+pEqnLHS :: P Ident -> P Ident -> P (Ident, [EPat])+pEqnLHS ident oper =+ ((,) <$> ident <*> emany pAPat) <|> -- XXX this <|> causes a slowdown, but is necessary pOpLHS <|< ((\ (i, ps1) ps2 -> (i, ps1 ++ ps2)) <$> pParens pOpLHS <*> emany pAPat) where- pOpLHS = (\ p1 i p2 -> (i, [p1,p2])) <$> pPatApp <*> pLOper <*> pPatApp- pLOper = guardM pOper (not . isConIdent)+ pOpLHS = (\ p1 i p2 -> (i, [p1,p2])) <$> pPatApp <*> oper <*> pPatApp pAlts :: P () -> P EAlts pAlts sep = do@@ -646,14 +655,15 @@ pure $ foldl EApp f as pLam :: P Expr-pLam =- pSpec '\\' *>- ( eLam <$> esome pAPat <*> (pSRArrow *> pExpr)- <|< eLamCase <$> (pKeyword "case" *> pBlock pCaseArm)- )+pLam = do+ loc <- getSLoc+ pSpec '\\' *>+ ( eLamWithSLoc loc <$> esome pAPat <*> (pSRArrow *> pExpr)+ <|< eLamCase loc <$> (pKeyword "case" *> pBlock pCaseArm)+ ) -eLamCase :: [ECaseArm] -> Expr-eLamCase as = ELam [ Eqn [p] a | (p, a) <- as ]+eLamCase :: SLoc -> [ECaseArm] -> Expr+eLamCase loc as = ELam loc [ Eqn [p] a | (p, a) <- as ] pCase :: P Expr pCase = ECase <$> (pKeyword "case" *> pExpr) <*> (pKeyword "of" *> pBlock pCaseArm)@@ -725,7 +735,8 @@ <|< (ESectL <$> (pSpec '(' *> pExprOp) <*> (pOperComma <* pSpec ')')) <|< (ESectR <$> (pSpec '(' *> pOperCommaNoMinus) <*> (pExprOp <* pSpec ')')) <|< (ESelect <$> (pSpec '(' *> esome pSelect <* pSpec ')'))- <|< (ELit noSLoc . LPrim <$> (pKeyword "primitive" *> pString))+ <|< (ELit noSLoc . LPrim <$> (pKeyword "_primitive" *> pString))+ <|< (ETypeArg <$> (pSpec '@' *> pAType)) ) -- This weirdly slows down parsing -- <?> "aexpr"@@ -768,22 +779,37 @@ ------------- -- Bindings +-- Bindings allowed in a let pBind :: P EBind-pBind = - BPat <$> pPatNotVar <*> ((pSpec '=' *> pExpr)- <|< (EMultiIf <$> pAlts (pSpec '=')))- <|< pClsBind+pBind =+ pBind'+ <|< PatBind <$> pPatNotVar <*> ((pSpec '=' *> pExpr)+ <|<+ (EMultiIf <$> pAlts (pSpec '='))) +-- Bindings allowed in top level, let, class+pBind' :: P EBind+pBind' =+ uncurry Fcn <$> pEqns+ <|< Sign <$> ((esepBy1 pLIdentSym (pSpec ',')) <* dcolon) <*> pType+ <|< Infix <$> ((,) <$> pAssoc <*> pPrec) <*> esepBy1 pTypeOper (pSpec ',')+ where+ pAssoc = (AssocLeft <$ pKeyword "infixl") <|< (AssocRight <$ pKeyword "infixr") <|< (AssocNone <$ pKeyword "infix")+ dig (TInt _ ii) | 0 <= i && i <= 9 = Just i where i = fromInteger ii+ dig _ = Nothing+ pPrec = satisfyM "digit" dig <|< pure 9++-- Bindings allowed in a class definition pClsBind :: P EBind-pClsBind = - uncurry BFcn <$> pEqns- <|< BSign <$> ((esepBy1 pLIdentSym (pSpec ',')) <* dcolon) <*> pType- <|< BDfltSign <$> (pKeyword "default" *> pLIdentSym <* dcolon) <*> pType+pClsBind =+ pBind'+ <|< DfltSign <$> (pKeyword "default" *> pLIdentSym <* dcolon) <*> pType +-- Bindings allowed in an instance definition pInstBind :: P EBind pInstBind = - uncurry BFcn <$> pEqns--- no InstanceSig yet <|< BSign <$> (pLIdentSym <* dcolon) <*> pType+ uncurry Fcn <$> pEqns+-- no InstanceSig yet <|< Sign <$> (pLIdentSym <* dcolon) <*> pType -------------
src/MicroHs/State.hs view
@@ -1,32 +1,33 @@+{-# OPTIONS_GHC -Wno-noncanonical-monad-instances #-} module MicroHs.State( module MicroHs.State, ) where-import Prelude(); import MHSPrelude+import Prelude(); import MHSPrelude hiding(fail)+import Control.Monad.Fail import Control.Monad---import Control.Monad.Fail -data State s a = S (s -> (a, s))+newtype State s a = S (s -> (a, s)) -instance forall s . Functor (State s) where+instance Functor (State s) where fmap f sa = S $ \ s -> case runState sa s of (a, ss) -> (f a, ss) -instance forall s . Applicative (State s) where+instance Applicative (State s) where pure a = S $ \ s -> (a, s) (<*>) = ap- (*>) m k = S $ \ s ->- case runState m s of- (_, ss) -> runState k ss+ -- Hugs doesn't have *> here -instance forall s . Monad (State s) where+instance Monad (State s) where (>>=) m k = S $ \ s -> case runState m s of (a, ss) -> runState (k a) ss- (>>) = (*>)+ (>>) m k = S $ \ s ->+ case runState m s of+ (_, ss) -> runState k ss return = pure -instance forall s . MonadFail (State s) where+instance MonadFail (State s) where fail = error runState :: forall s a . State s a -> (s -> (a,s))@@ -35,35 +36,6 @@ evalState :: forall s a . State s a -> (s -> a) evalState sa = fst . runState sa -{--(>>=) :: forall s a b . State s a -> (a -> State s b) -> State s b-(>>=) m k = S $ \ s ->- case runState m s of- (a, ss) -> runState (k a) ss--(>>) :: forall s a b . State s a -> State s b -> State s b-(>>) m k = S $ \ s ->- case runState m s of- (_, ss) -> runState k ss--return :: forall s a . a -> State s a-return a = S $ \ s -> (a, s)--fmap :: forall s a b . (a -> b) -> State s a -> State s b-fmap f sa = S $ \ s ->- case runState sa s of- (a, ss) -> (f a, ss)--(<$>) :: forall s a b . (a -> b) -> State s a -> State s b-(<$>) = Control.Monad.State.Strict.fmap--(<*>) :: forall s a b . State s (a -> b) -> State s a -> State s b-(<*>) sf sa = Control.Monad.State.Strict.do- f <- sf- a <- sa- Control.Monad.State.Strict.return (f a)--}- modify :: forall s . (s -> s) -> State s () modify f = S $ \ s -> ((), f s) @@ -76,37 +48,3 @@ gets :: forall s a . (s -> a) -> State s a gets f = S $ \ s -> (f s, s) -{--mapM :: forall s a b . (a -> State s b) -> [a] -> State s [b]-mapM f =- let- rec arg =- case arg of- [] -> Control.Monad.State.Strict.return []- a : as -> Control.Monad.State.Strict.do- b <- f a- bs <- rec as- Control.Monad.State.Strict.return (b : bs)- in rec--mapM_ :: forall s a b . (a -> State s b) -> [a] -> State s ()-mapM_ f =- let- rec arg =- case arg of- [] -> Control.Monad.State.Strict.return ()- a : as -> Control.Monad.State.Strict.do- f a- rec as- in rec--fail :: forall s a . String -> State s a-fail = error--when :: forall s . Bool -> State s () -> State s ()-when True s = s-when False _ = Control.Monad.State.Strict.return ()--sequence :: forall s a . [State s a] -> State s [a]-sequence = Control.Monad.State.Strict.mapM id--}
src/MicroHs/StateIO.hs view
@@ -1,6 +1,6 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license.-{-# OPTIONS_GHC -Wno-unused-imports -Wno-dodgy-imports #-}+{-# OPTIONS_GHC -Wno-unused-imports -Wno-dodgy-imports -Wno-noncanonical-monad-instances #-} -- State monad over IO module MicroHs.StateIO( module MicroHs.StateIO,@@ -13,12 +13,10 @@ import Control.Monad import Data.Functor hiding(unzip) -data StateIO s a = S (s -> IO (a,s))+newtype StateIO s a = S (s -> IO (a,s)) runStateIO :: forall s a . StateIO s a -> (s -> IO (a,s))-runStateIO sa =- case sa of- S x -> x+runStateIO (S x) = x execStateIO :: forall s a . StateIO s a -> s -> IO s execStateIO sa s = do@@ -26,26 +24,27 @@ case as of (_, ss) -> return ss -instance forall s . Functor (StateIO s) where+instance Functor (StateIO s) where fmap f sa = S $ \ s -> do (a, ss) <- runStateIO sa s return (f a, ss) -instance forall s . Applicative (StateIO s) where+instance Applicative (StateIO s) where pure a = S $ \ s -> return (a, s) (<*>) = ap- (*>) m k = S $ \ s -> do- (_, ss) <- runStateIO m s- runStateIO k ss+ -- Hugs doesn't have *> here -instance forall s . Monad (StateIO s) where+instance Monad (StateIO s) where (>>=) m k = S $ \ s -> do (a, ss) <- runStateIO m s runStateIO (k a) ss- (>>) = (*>)+ (>>) m k = S $ \ s -> do+ (_, ss) <- runStateIO m s+ runStateIO k ss+ return = pure {--instance forall s . MonadFail (StateIO s) where+instance MonadFail (StateIO s) where fail = error -}
src/MicroHs/SymTab.hs view
@@ -22,6 +22,7 @@ import MicroHs.Expr(Expr(..), EType, conIdent) import MicroHs.Ident(Ident, showIdent, unIdent, mkIdentSLoc, slocIdent) import MicroHs.List+import MicroHs.MRnf import qualified MicroHs.IdentMap as M -- Symbol table@@ -39,6 +40,9 @@ instance Eq Entry where Entry x _ == Entry y _ = getIdent x == getIdent y +instance MRnf Entry where+ mrnf (Entry a b) = mrnf a `seq` mrnf b+ getIdent :: Expr -> Ident getIdent ae = case ae of@@ -74,7 +78,7 @@ mapMSymTab :: forall m . Monad m => (Entry -> m Entry) -> SymTab -> m SymTab mapMSymTab f (SymTab l ug qg) = do- l' <- mapM (\ (i, a) -> (,) i <$> f a) l+ l' <- mapM (\ (i, a) -> f a >>= \ a' -> return (i, a')) l ug' <- M.mapM (mapM f) ug qg' <- M.mapM (mapM f) qg return $ SymTab l' ug' qg'@@ -98,8 +102,10 @@ -- also not be imported. So as a last recourse, look for the identifier -- unqualified. hackBuiltin :: Ident -> Ident-hackBuiltin i | Just ('.':s) <- stripPrefix builtinMdl (unIdent i) = mkIdentSLoc (slocIdent i) s-hackBuiltin i = i+hackBuiltin i =+ case stripPrefix builtinMdl (unIdent i) of+ Just ('.':s) -> mkIdentSLoc (slocIdent i) s+ _ -> i stFromList :: [(Ident, [Entry])] -> [(Ident, [Entry])] -> SymTab stFromList us qs = SymTab [] (M.fromListWith union us) (M.fromListWith union qs)
src/MicroHs/TCMonad.hs view
@@ -7,12 +7,14 @@ import Data.Functor.Identity import GHC.Stack import Control.Applicative+import Control.Monad.Fail import Data.Functor import Data.List(nub) import MicroHs.Expr import MicroHs.Ident import qualified MicroHs.IdentMap as M import qualified MicroHs.IntMap as IM+import MicroHs.MRnf import MicroHs.State import MicroHs.SymTab import Debug.Trace@@ -40,6 +42,29 @@ seq s' (put s') -----------------------------------------------++data TypeExport = TypeExport+ Ident -- unqualified name+ Entry -- symbol table entry+ [ValueExport] -- associated values, i.e., constructors, selectors, methods+-- deriving (Show)++--instance Show TypeExport where show (TypeExport i _ vs) = showIdent i ++ show vs++instance MRnf TypeExport where+ mrnf (TypeExport a b c) = mrnf a `seq` mrnf b `seq` mrnf c++data ValueExport = ValueExport+ Ident -- unqualified name+ Entry -- symbol table entry+-- deriving (Show)++--instance Show ValueExport where show (ValueExport i _) = showIdent i++instance MRnf ValueExport where+ mrnf (ValueExport a b) = mrnf a `seq` mrnf b++----------------------------------------------- -- Tables type ValueTable = SymTab -- type of value identifiers, used during type checking values@@ -48,7 +73,7 @@ type SynTable = M.Map EType -- body of type synonyms type DataTable = M.Map EDef -- data/newtype definitions (only used for standalone deriving) type FixTable = M.Map Fixity -- precedence and associativity of operators-type AssocTable = M.Map [Ident] -- maps a type identifier to its associated constructors/selectors/methods+type AssocTable = M.Map [ValueExport] -- maps a type identifier to its associated constructors/selectors/methods type ClassTable = M.Map ClassInfo -- maps a class identifier to its associated information type InstTable = M.Map InstInfo -- indexed by class name type MetaTable = [(Ident, EConstraint)] -- instances with unification variables@@ -72,20 +97,26 @@ [IFunDep] -- deriving (Show) +instance MRnf InstInfo where+ mrnf (InstInfo a b c) = mrnf a `seq` mrnf b `seq` mrnf c+ -- This is the dictionary expression, instance variables, instance context, -- and instance. type InstDictC = (Expr, [IdKind], [EConstraint], EConstraint, [IFunDep]) -- This is the dictionary expression, instance context, and types. -- An instance (C T1 ... Tn) has the type list [T1,...,Tn]--- The types and constraint have their type variables normalized to EUVar (-1), EUVar (-2), etc-type InstDict = (Expr, [EConstraint], [EType])+-- The types and constraint can be instantiated by providing a starting TRef+type InstDict = (Expr, TRef -> ([EConstraint], [EType])) --- All known type equalities, contains the transitive&commutative closure.-type TypeEqTable = [(EType, EType)]+-- All known type equalities, normalized into a substitution.+type TypeEqTable = [(Ident, EType)] data ClassInfo = ClassInfo [IdKind] [EConstraint] EKind [Ident] [IFunDep] -- class tyvars, superclasses, class kind, methods, fundeps type IFunDep = ([Bool], [Bool]) -- the length of the lists is the number of type variables +instance MRnf ClassInfo where+ mrnf (ClassInfo a b c d e) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e+ ----------------------------------------------- -- TCState data TCState = TC {@@ -224,7 +255,6 @@ addConstraints cs t = tupleConstraints cs `tImplies` t tupleConstraints :: [EConstraint] -> EConstraint-tupleConstraints [] = error "tupleConstraints" tupleConstraints [c] = c tupleConstraints cs = tApps (tupleConstr noSLoc (length cs)) cs @@ -253,3 +283,7 @@ tImplies :: EType -> EType -> EType tImplies a r = tApp (tApp (tConI builtinLoc "Primitives.=>") a) r++etImplies :: EType -> EType -> EType+etImplies (EVar i) t | i == tupleConstr noSLoc 0 = t+etImplies a t = tImplies a t
src/MicroHs/TargetConfig.hs view
@@ -25,9 +25,10 @@ deriving Show data TTarget = TTarget- { tName :: String- , tCC :: String- , tConf :: String+ { tName :: String+ , tCC :: String+ , tCCFlags :: String+ , tConf :: String } findTarget :: String -> [Target] -> Maybe Target
src/MicroHs/Translate.hs view
@@ -44,119 +44,125 @@ -- 99% of the hits are among the combinators. primTable :: [(String, AnyType)] primTable = [- ("B", primitive "B"),- ("O", primitive "O"),- ("K", primitive "K"),- ("C'", primitive "C'"),- ("C", primitive "C"),- ("A", primitive "A"),- ("S'", primitive "S'"),- ("P", primitive "P"),- ("I", primitive "I"),- ("S", primitive "S"),- ("U", primitive "U"),- ("Y", primitive "Y"),- ("B'", primitive "B'"),- ("Z", primitive "Z"),- ("R", primitive "R"),- ("K2", primitive "K2"),- ("K3", primitive "K3"),- ("K4", primitive "K4"),- ("C'B", primitive "C'B"),- ("+", primitive "+"),- ("-", primitive "-"),- ("*", primitive "*"),- ("quot", primitive "quot"),- ("rem", primitive "rem"),- ("uquot", primitive "uquot"),- ("urem", primitive "urem"),- ("neg", primitive "neg"),- ("and", primitive "and"),- ("or", primitive "or"),- ("xor", primitive "xor"),- ("inv", primitive "inv"),- ("shl", primitive "shl"),- ("shr", primitive "shr"),- ("ashr", primitive "ashr"),- ("subtract", primitive "subtract"),- ("==", primitive "=="),- ("/=", primitive "/="),- ("<", primitive "<"),- ("<=", primitive "<="),- (">", primitive ">"),- (">=", primitive ">="),- ("u<", primitive "u<"),- ("u<=", primitive "u<="),- ("u>", primitive "u>"),- ("u>=", primitive "u>="),- ("ord", primitive "ord"),- ("chr", primitive "chr"),- ("f+", primitive "f+"),- ("f-", primitive "f-"),- ("f*", primitive "f*"),- ("f/", primitive "f/"),- ("f==", primitive "f=="),- ("f/=", primitive "f/="),- ("f<", primitive "f<"),- ("f<=", primitive "f<="),- ("f>", primitive "f>"),- ("f>=", primitive "f>="),- ("fneg", primitive "fneg"),- ("fshow", primitive "fshow"),- ("fread", primitive "fread"),- ("itof", primitive "itof"),- ("seq", primitive "seq"),- ("sequal", primitive "sequal"),- ("equal", primitive "equal"),- ("scmp", primitive "scmp"),- ("icmp", primitive "icmp"),- ("rnf", primitive "rnf"),- ("IO.>>=", primitive "IO.>>="),- ("IO.>>", primitive "IO.>>"),- ("IO.return", primitive "IO.return"),- ("IO.print", primitive "IO.print"),- ("IO.serialize", primitive "IO.serialize"),- ("IO.deserialize", primitive "IO.deserialize"),- ("IO.stdin", primitive "IO.stdin"),- ("IO.stdout", primitive "IO.stdout"),- ("IO.stderr", primitive "IO.stderr"),- ("IO.getArgRef", primitive "IO.getArgRef"),- ("IO.performIO", primitive "IO.performIO"),- ("IO.gc", primitive "IO.gc"),- ("raise", primitive "raise"),- ("catch", primitive "catch"),- ("dynsym", primitive "dynsym"),- ("newCAStringLen", primitive "newCAStringLen"),- ("peekCAString", primitive "peekCAString"),- ("peekCAStringLen", primitive "peekCAStringLen"),- ("toInt", primitive "toInt"),- ("toPtr", primitive "toPtr"),- ("toDbl", primitive "toDbl"),- ("toFunPtr", primitive "toFunPtr"),- ("A.alloc", primitive "A.alloc"),- ("A.size", primitive "A.size"),- ("A.read", primitive "A.read"),- ("A.write", primitive "A.write"),- ("A.==", primitive "A.=="),- ("bs++", primitive "bs++"),- ("bs++.", primitive "bs++."),- ("bs+++", primitive "bs+++"),- ("bs==", primitive "bs=="),- ("bs/=", primitive "bs/="),- ("bs<", primitive "bs<"),- ("bs<=", primitive "bs<="),- ("bs>", primitive "bs>"),- ("bs>=", primitive "bs>="),- ("bscmp", primitive "bscmp"),- ("bspack", primitive "bspack"),- ("bsunpack", primitive "bsunpack"),- ("bslength", primitive "bslength"),- ("bssubstr", primitive "bssubstr"),- ("fromUTF8", primitive "fromUTF8"),- ("toUTF8", primitive "toUTF8"),- ("headUTF8", primitive "headUTF8"),- ("fp+", primitive "fp+"),- ("fp2p", primitive "fp2p"),- ("fpnew", primitive "fpnew"),- ("fpfin", primitive "fpfin")+ ("B", _primitive "B"),+ ("O", _primitive "O"),+ ("K", _primitive "K"),+ ("C'", _primitive "C'"),+ ("C", _primitive "C"),+ ("A", _primitive "A"),+ ("S'", _primitive "S'"),+ ("P", _primitive "P"),+ ("I", _primitive "I"),+ ("S", _primitive "S"),+ ("U", _primitive "U"),+ ("Y", _primitive "Y"),+ ("B'", _primitive "B'"),+ ("Z", _primitive "Z"),+ ("R", _primitive "R"),+ ("K2", _primitive "K2"),+ ("K3", _primitive "K3"),+ ("K4", _primitive "K4"),+ ("C'B", _primitive "C'B"),+ ("+", _primitive "+"),+ ("-", _primitive "-"),+ ("*", _primitive "*"),+ ("quot", _primitive "quot"),+ ("rem", _primitive "rem"),+ ("uquot", _primitive "uquot"),+ ("urem", _primitive "urem"),+ ("neg", _primitive "neg"),+ ("and", _primitive "and"),+ ("or", _primitive "or"),+ ("xor", _primitive "xor"),+ ("inv", _primitive "inv"),+ ("shl", _primitive "shl"),+ ("shr", _primitive "shr"),+ ("ashr", _primitive "ashr"),+ ("subtract", _primitive "subtract"),+ ("popcount", _primitive "popcount"),+ ("clz", _primitive "clz"),+ ("ctz", _primitive "ctz"),+ ("==", _primitive "=="),+ ("/=", _primitive "/="),+ ("<", _primitive "<"),+ ("<=", _primitive "<="),+ (">", _primitive ">"),+ (">=", _primitive ">="),+ ("u<", _primitive "u<"),+ ("u<=", _primitive "u<="),+ ("u>", _primitive "u>"),+ ("u>=", _primitive "u>="),+ ("ord", _primitive "ord"),+ ("chr", _primitive "chr"),+ ("f+", _primitive "f+"),+ ("f-", _primitive "f-"),+ ("f*", _primitive "f*"),+ ("f/", _primitive "f/"),+ ("f==", _primitive "f=="),+ ("f/=", _primitive "f/="),+ ("f<", _primitive "f<"),+ ("f<=", _primitive "f<="),+ ("f>", _primitive "f>"),+ ("f>=", _primitive "f>="),+ ("fneg", _primitive "fneg"),+ ("fshow", _primitive "fshow"),+ ("fread", _primitive "fread"),+ ("itof", _primitive "itof"),+ ("seq", _primitive "seq"),+ ("sequal", _primitive "sequal"),+ ("equal", _primitive "equal"),+ ("scmp", _primitive "scmp"),+ ("icmp", _primitive "icmp"),+ ("ucmp", _primitive "ucmp"),+ ("rnf", _primitive "rnf"),+ ("IO.>>=", _primitive "IO.>>="),+ ("IO.>>", _primitive "IO.>>"),+ ("IO.return", _primitive "IO.return"),+ ("IO.print", _primitive "IO.print"),+ ("IO.serialize", _primitive "IO.serialize"),+ ("IO.deserialize", _primitive "IO.deserialize"),+ ("IO.stdin", _primitive "IO.stdin"),+ ("IO.stdout", _primitive "IO.stdout"),+ ("IO.stderr", _primitive "IO.stderr"),+ ("IO.getArgRef", _primitive "IO.getArgRef"),+ ("IO.performIO", _primitive "IO.performIO"),+ ("IO.gc", _primitive "IO.gc"),+ ("raise", _primitive "raise"),+ ("catch", _primitive "catch"),+ ("dynsym", _primitive "dynsym"),+ ("newCAStringLen", _primitive "newCAStringLen"),+ ("peekCAString", _primitive "peekCAString"),+ ("peekCAStringLen", _primitive "peekCAStringLen"),+ ("toInt", _primitive "toInt"),+ ("toPtr", _primitive "toPtr"),+ ("toDbl", _primitive "toDbl"),+ ("toFunPtr", _primitive "toFunPtr"),+ ("A.alloc", _primitive "A.alloc"),+ ("A.copy", _primitive "A.copy"),+ ("A.size", _primitive "A.size"),+ ("A.read", _primitive "A.read"),+ ("A.write", _primitive "A.write"),+ ("A.==", _primitive "A.=="),+ ("bs++", _primitive "bs++"),+ ("bs++.", _primitive "bs++."),+ ("bs+++", _primitive "bs+++"),+ ("bs==", _primitive "bs=="),+ ("bs/=", _primitive "bs/="),+ ("bs<", _primitive "bs<"),+ ("bs<=", _primitive "bs<="),+ ("bs>", _primitive "bs>"),+ ("bs>=", _primitive "bs>="),+ ("bscmp", _primitive "bscmp"),+ ("bspack", _primitive "bspack"),+ ("bsunpack", _primitive "bsunpack"),+ ("bslength", _primitive "bslength"),+ ("bssubstr", _primitive "bssubstr"),+ ("fromUTF8", _primitive "fromUTF8"),+ ("toUTF8", _primitive "toUTF8"),+ ("headUTF8", _primitive "headUTF8"),+ ("tailUTF8", _primitive "tailUTF8"),+ ("fp+", _primitive "fp+"),+ ("fp2p", _primitive "fp2p"),+ ("fpnew", _primitive "fpnew"),+ ("fpfin", _primitive "fpfin") ]
src/MicroHs/TypeCheck.hs view
@@ -1,6 +1,6 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license.-{-# OPTIONS_GHC -Wno-incomplete-uni-patterns -Wno-unused-imports #-}+{-# OPTIONS_GHC -Wno-incomplete-uni-patterns -Wno-unused-imports -Wno-unused-do-bind #-} {-# LANGUAGE FlexibleContexts #-} module MicroHs.TypeCheck( typeCheck,@@ -32,6 +32,8 @@ import qualified MicroHs.IdentMap as M import qualified MicroHs.IntMap as IM import MicroHs.List+import MicroHs.MRnf+import MicroHs.Parse(dotDotIdent) import MicroHs.SymTab import MicroHs.TCMonad import GHC.Stack@@ -109,6 +111,9 @@ nameKnownSymbol :: String nameKnownSymbol = "Data.TypeLits.KnownSymbol" +nameCoercible :: String+nameCoercible = "Data.Coerce.Coercible"+ --primitiveKinds :: [String] --primitiveKinds = [nameType, nameConstraint, nameSymbol, nameNat] @@ -123,6 +128,9 @@ gInstInfo :: InstTable -- instances are implicitely global } +instance MRnf GlobTables where+ mrnf (GlobTables a b c d) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d+ emptyGlobTables :: GlobTables emptyGlobTables = GlobTables { gSynTable = M.empty, gDataTable = M.empty, gClassTable = M.empty, gInstInfo = M.empty } @@ -145,24 +153,12 @@ } -- deriving (Show) +instance MRnf a => MRnf (TModule a) where+ mrnf (TModule a b c d e f) = mrnf a `seq` mrnf b `seq` mrnf c `seq` mrnf d `seq` mrnf e `seq` mrnf f+ setBindings :: TModule b -> a -> TModule a setBindings (TModule x y z w v _) a = TModule x y z w v a -data TypeExport = TypeExport- Ident -- unqualified name- Entry -- symbol table entry- [ValueExport] -- associated values, i.e., constructors, selectors, methods--- deriving (Show)----instance Show TypeExport where show (TypeExport i _ vs) = showIdent i ++ show vs--data ValueExport = ValueExport- Ident -- unqualified name- Entry -- symbol table entry--- deriving (Show)----instance Show ValueExport where show (ValueExport i _) = showIdent i- type FixDef = (Ident, Fixity) type Sigma = EType@@ -253,21 +249,23 @@ case M.lookup m impMap of Just (TModule _ _ te ve _ _) -> (te, ve) _ -> errorMessage (getSLoc m) $ "undefined module: " ++ showIdent m-getTVExps _ tys vals ast (ExpTypeSome i is) = getTypeExp tys vals ast i (`elem` is)-getTVExps _ tys vals ast (ExpTypeAll i ) = getTypeExp tys vals ast i (const True)+getTVExps _ tys vals ast (ExpTypeSome ti is) =+ let e = expLookup ti tys+ assc = getAssocs vals ast $ tyQIdent e -- all associated values+ ves = concatMap one is+ one i | i == dotDotIdent = assc -- '..' means all assocaited values+ | otherwise =+ case filter (\ (ValueExport i' _) -> i == i') assc of+ ee : _ -> [ee] -- Pick the assocaited value if it exists+ [] -> [ValueExport (unQualIdent i) $ expLookup i vals]+ -- otherwise, just look up a pattern synonym.+ -- This might accidentally pick up a constructor from+ -- another type, but it doesn't really matter.+ in ([TypeExport (unQualIdent ti) e ves], [])+ getTVExps _ _ vals _ (ExpValue i) = ([], [ValueExport (unQualIdent i) (expLookup i vals)]) getTVExps _ _ _ _ (ExpDefault _) = ([], []) --- Export a type, filter exported values by p.-getTypeExp :: TypeTable -> ValueTable -> AssocTable -> Ident -> (Ident -> Bool) ->- ([TypeExport], [ValueExport])-getTypeExp tys vals ast ti p =- let- e = expLookup ti tys- qi = tyQIdent e- ves = filter (\ (ValueExport i _) -> p i) $ getAssocs vals ast qi- in ([TypeExport (unQualIdent ti) e ves], [])- expLookup :: Ident -> SymTab -> Entry expLookup i m = either (errorMessage (getSLoc i)) id $ stLookup "export" i m @@ -297,7 +295,11 @@ case stLookup "" (qualIdent mn i) tt of Right e -> e _ -> impossible- -- error $ show (qualIdent mn i, M.toList tt)+ ventry i t =+ let qi = qualIdent mn i in+ case stLookup "" qi vt of+ Right e -> e+ _ -> Entry (EVar qi) t -- XXX A hack for boot modules -- Find all value Entry for names associated with a type. assoc i = case impt of@@ -305,7 +307,7 @@ _ -> getAssocs vt at (qualIdent mn i) -- All top level values possible to export.- ves = [ ValueExport i (Entry (EVar (qualIdent mn i)) ts) | Sign is ts <- tds, i <- is ]+ ves = [ ValueExport i (ventry i t) | Sign is t <- tds, i <- is ] -- All top level types possible to export. tes =@@ -323,13 +325,9 @@ in TModule mn fes tes ves des impossible -- Find all value Entry for names associated with a type.+-- XXX join stLookup code with tentry getAssocs :: (HasCallStack) => ValueTable -> AssocTable -> Ident -> [ValueExport]-getAssocs vt at ai =- let qis = fromMaybe [] $ M.lookup ai at- val qi = case stLookup "" qi vt of- Right e -> e- _ -> impossible- in map (\ qi -> ValueExport (unQualIdent qi) (val qi)) qis+getAssocs _vt at ai = fromMaybe [] $ M.lookup ai at mkTCState :: IdentModule -> GlobTables -> [(ImportSpec, TModule a)] -> TCState mkTCState mdlName globs mdls =@@ -367,11 +365,7 @@ allFixes = M.fromList (concatMap (tFixDefs . snd) mdls) allAssocs :: AssocTable allAssocs =- let- assocs (ImportSpec _ _ _ mas _, TModule mn _ tes _ _ _) =- let- m = fromMaybe mn mas- in [ (qualIdent m i, [qualIdent m a | ValueExport a _ <- cs]) | TypeExport i _ cs <- tes ]+ let assocs (_, TModule _ _ tes _ _ _) = [ (tyQIdent e, cs) | TypeExport _ e cs <- tes ] in M.fromList $ concatMap assocs mdls dflts = foldr mergeDefaults M.empty (map (tDefaults . snd) mdls)@@ -413,7 +407,7 @@ -- Approximate equality for dictionaries. -- The important thing is to avoid exact duplicates in the instance table. eqInstDict :: InstDict -> InstDict -> Bool-eqInstDict (e, _, _) (e', _, _) = eqExpr e e'+eqInstDict (e, _) (e', _) = eqExpr e e' -- Identifier should only be seen with it's qualified name. isInstId :: Ident -> Bool@@ -447,7 +441,7 @@ putTCMode otcm return a -addAssocTable :: Ident -> [Ident] -> T ()+addAssocTable :: Ident -> [ValueExport] -> T () addAssocTable i ids = modify $ \ ts -> ts { assocTable = M.insert i ids (assocTable ts) } addClassTable :: Ident -> ClassInfo -> T ()@@ -460,17 +454,19 @@ -- Change type variable to unique unification variables. -- These unification variables will never leak, but as an extra caution -- we use negative numbers..- freshSubst iks =- zipWith (\ ik j -> (idKindIdent ik, EUVar j)) iks [-1, -2 ..]+ freshSubst u iks =+ zipWith (\ ik j -> (idKindIdent ik, EUVar j)) iks [u ..] mkInstInfo :: InstDictC -> T (Ident, InstInfo) mkInstInfo (e, iks, ctx, ct, fds) = do case (iks, ctx, getApp ct) of ([], [], (c, [EVar i])) -> return $ (c, InstInfo (M.singleton i e) [] fds)- (_, _, (c, ts )) -> return $ (c, InstInfo M.empty [(e, ctx', ts')] fds)- where ctx' = map (subst s) ctx- ts' = map (subst s) ts- s = freshSubst iks+ (_, _, (c, ts )) -> return $ (c, InstInfo M.empty [(e, ii)] fds)+ where ii u =+ let ctx' = map (subst s) ctx+ ts' = map (subst s) ts+ s = freshSubst u iks+ in (ctx', ts') iis <- mapM mkInstInfo ics it <- gets instTable putInstTable $ foldr (uncurry $ M.insertWith mergeInstInfo) it iis@@ -499,7 +495,7 @@ -- tcTrace $ "--- withDict leave " ++ show (i, c) return a -addDict :: (Ident, EConstraint) -> T ()+addDict :: HasCallStack => (Ident, EConstraint) -> T () addDict (i, c) = do c' <- expandSyn c >>= derefUVar if null (metaTvs [c']) then@@ -508,7 +504,7 @@ _ -> addInstDict i c' else -- With constraint variables we might get unification variables.- -- We stash them away in how that we will learn more later.+ -- We stash them away in hope that we will learn more later. addMetaDict i c' addInstDict :: HasCallStack => Ident -> EConstraint -> T ()@@ -749,9 +745,11 @@ unifyR :: HasCallStack => SLoc -> EType -> EType -> T ()-unifyR _ (EVar x1) (EVar x2) | x1 == x2 = return ()+unifyR _ (EVar x1) (EVar x2) | x1 == x2 = return () unifyR loc (EApp f1 a1) (EApp f2 a2) = do { unifyR loc f1 f2; unifyR loc a1 a2 }-unifyR _ (EUVar r1) (EUVar r2) | r1 == r2 = return ()+unifyR loc t1@(EUVar r1) t2@(EUVar r2) | r1 < r2 = unifyVar loc r2 t1 -- always make higher+ | r1 > r2 = unifyVar loc r1 t2 -- TRefs point to lower+ | otherwise = return () unifyR loc (EUVar r1) t2 = unifyVar loc r1 t2 unifyR loc t1 (EUVar r2) = unifyVar loc r2 t1 unifyR loc t1 t2 = do@@ -942,14 +940,16 @@ dst <- tcDefsType ds -- tcTrace ("tcDefs 2:\n" ++ showEDefs dst) mapM_ addTypeAndData dst- dst' <- tcExpand impt dst--- tcTrace ("tcDefs 3:\n" ++ showEDefs dst')+ dste <- tcExpandClassInst impt dst+-- tcTrace ("tcDefs 3:\n" ++ showEDefs dste) case impt of ImpNormal -> do- setDefault dst'- tcDefsValue dst'+ setDefault dste+ dste' <- tcDefsValue dste+ mapM_ addAssocs dste'+ return dste' ImpBoot ->- return dst'+ return dste setDefault :: [EDef] -> T () setDefault defs = do@@ -994,8 +994,8 @@ return $ M.fromList iks' -- Expand class and instance definitions (must be done after type synonym processing)-tcExpand :: ImpType -> [EDef] -> T [EDef]-tcExpand impt dst = withTypeTable $ do+tcExpandClassInst :: ImpType -> [EDef] -> T [EDef]+tcExpandClassInst impt dst = withTypeTable $ do dsc <- concat <$> mapM (expandClass impt) dst -- Expand all class definitions dsf <- concat <$> mapM expandField dsc -- Add HasField instances -- tcTrace $ showEDefs dsf@@ -1030,21 +1030,16 @@ guessIsKind :: EType -> Bool guessIsKind (EVar i) = i == mkIdent "Kind"-guessIsKind t | Just (f, a) <- getArrow t = guessIsKind f || guessIsKind a-guessIsKind _ = False+guessIsKind t =+ case getArrow t of+ Just (f, a) -> guessIsKind f || guessIsKind a+ _ -> False -- Add symbol a table entry (with kind) for each top level typeish definition. -- If there is a kind signature, use it. If not, use a kind variable. addTypeKind :: M.Map EKind -> EDef -> T () addTypeKind kdefs adef = do let- addAssoc i is = do- mn <- gets moduleName- addAssocTable (qualIdent mn i) (map (qualIdent mn) is)--- assocData (Constr _ _ c _) = [c]- assocData (Constr _ _ c (Left _)) = [c]- assocData (Constr _ _ c (Right its)) = c : map fst its- addDef (i, _) = do k <- case M.lookup i kdefs of@@ -1053,19 +1048,35 @@ extValQTop i k case adef of- Data lhs@(i, _) cs _ -> do- addDef lhs- addAssoc i (nub $ concatMap assocData cs)- Newtype lhs@(i, _) c _ -> do- addDef lhs- addAssoc i (assocData c)- Type lhs _ ->- addDef lhs- Class _ lhs@(i, _) _ ms -> do- addDef lhs- addAssoc i [ x | BSign ns _ <- ms, m <- ns, x <- [m, mkDefaultMethodId m] ]- _ -> return ()+ Data lhs _ _ -> addDef lhs+ Newtype lhs _ _ -> addDef lhs+ Type lhs _ -> addDef lhs+ Class _ lhs _ _ -> addDef lhs+ _ -> return () +-- Add symbols associated with a type.+addAssocs :: EDef -> T ()+addAssocs adef = do+ mn <- gets moduleName+ let+ addAssoc ti is = do+ vt <- gets valueTable+ let val i =+ case stLookup "" i vt of+ Right e -> ValueExport i e+ _ -> impossibleShow i+ addAssocTable (qualIdent mn ti) (map val is)++ assocData (Constr _ _ c (Left _)) = [c]+ assocData (Constr _ _ c (Right its)) = c : map fst its++ case adef of+ Data (i, _) cs _ | not (isMatchDataTypeName i)+ -> addAssoc i (nub $ concatMap assocData cs)+ Newtype (i, _) c _ -> addAssoc i (assocData c)+ Class _ (i, _) _ ms -> addAssoc i [ x | Sign ns _ <- ms, m <- ns, x <- [m, mkDefaultMethodId m] ]+ _ -> return ()+ -- Add type synonyms to the synonym table, and data/newtype to the data table addTypeAndData :: EDef -> T () addTypeAndData adef = do@@ -1074,7 +1085,7 @@ Type (i, vs) t -> extSyn (qualIdent mn i) (EForall True vs t) Data (i, _) _ _ -> extData (qualIdent mn i) adef Newtype (i, _) _ _ -> extData (qualIdent mn i) adef- _ -> return ()+ _ -> return () -- Do kind checking of all typeish definitions. tcDefType :: HasCallStack => EDef -> T EDef@@ -1085,16 +1096,16 @@ Newtype lhs c ds -> withLHS lhs $ \ lhs' -> flip (,) kType <$> (Newtype lhs' <$> tcConstr c <*> mapM tcDerive ds) Type lhs t -> withLHS lhs $ \ lhs' -> first (Type lhs') <$> tInferTypeT t Class ctx lhs fds ms -> withLHS lhs $ \ lhs' -> flip (,) kConstraint <$> (Class <$> tcCtx ctx <*> return lhs' <*> mapM tcFD fds <*> mapM tcMethod ms)- Sign is t -> Sign is <$> tCheckTypeTImpl kType t- ForImp ie i t -> ForImp ie i <$> tCheckTypeTImpl kType t- Instance ct m -> Instance <$> tCheckTypeTImpl kConstraint ct <*> return m+ Sign is t -> Sign is <$> tCheckTypeTImpl False kType t+ ForImp ie i t -> ForImp ie i <$> tCheckTypeTImpl False kType t+ Instance ct m -> Instance <$> tCheckTypeTImpl True kConstraint ct <*> return m Default mc ts -> Default (Just c) <$> mapM (tcDefault c) ts where c = fromMaybe num mc- Deriving ct -> Deriving <$> tCheckTypeTImpl kConstraint ct+ Deriving ct -> Deriving <$> tCheckTypeTImpl False kConstraint ct _ -> return def where- tcMethod (BSign is t) = BSign is <$> tCheckTypeTImpl kType t- tcMethod (BDfltSign i t) = BDfltSign i <$> tCheckTypeTImpl kType t+ tcMethod (Sign is t) = Sign is <$> tCheckTypeTImpl False kType t+ tcMethod (DfltSign i t) = DfltSign i <$> tCheckTypeTImpl False kType t tcMethod m = return m tcFD (is, os) = (,) <$> mapM tcV is <*> mapM tcV os where tcV i = do { _ <- tLookup "fundep" i; return i }@@ -1177,12 +1188,12 @@ expandClass impt dcls@(Class ctx (iCls, vks) fds ms) = do mn <- gets moduleName let- meths = [ b | b@(BSign _ _) <- ms ]- methIds = concatMap (\ (BSign is _) -> is) meths- mdflts = [ (i, eqns) | BFcn i eqns <- ms ]- dflttys = [ (i, t) | BDfltSign i t <- ms ]+ meths = [ b | b@(Sign _ _) <- ms ]+ methIds = concatMap (\ (Sign is _) -> is) meths+ mdflts = [ (i, eqns) | Fcn i eqns <- ms ]+ dflttys = [ (i, t) | DfltSign i t <- ms ] tCtx = tApps (qualIdent mn iCls) (map (EVar . idKindIdent) vks)- mkDflt (BSign is t) = concatMap method is+ mkDflt (Sign is t) = concatMap method is where method methId = [ Sign [iDflt] $ EForall True vks $ tCtx `tImplies` ty, def $ lookup methId mdflts ] where ty = fromMaybe t $ lookup methId dflttys def Nothing = Fcn iDflt $ simpleEqn noDflt@@ -1225,10 +1236,12 @@ splitInst (EForall _ iks t) = case splitInst t of (iks', ctx, ct) -> (iks ++ iks', ctx, ct)-splitInst act | Just (ctx, ct) <- getImplies act =- case splitInst ct of- (iks, ctxs, ct') -> (iks, ctx : ctxs, ct')-splitInst ct = ([], [], ct)+splitInst act =+ case getImplies act of+ Just (ctx, ct) ->+ case splitInst ct of+ (iks, ctxs, ct') -> (iks, ctx : ctxs, ct')+ _ -> ([], [], act) expandInst :: EDef -> T [EDef] expandInst dinst@(Instance act bs) = do@@ -1248,12 +1261,12 @@ -- XXX this ignores type signatures and other bindings -- XXX should tack on signatures with ESign let clsMdl = qualOf qiCls -- get class's module name- ies = [(i, ELam qs) | BFcn i qs <- bs]- meth i = fromMaybe (ELam $ simpleEqn $ EVar $ setSLocIdent loc $ mkDefaultMethodId $ qualIdent clsMdl i) $ lookup i ies+ ies = [(i, ELam noSLoc qs) | Fcn i qs <- bs]+ meth i = fromMaybe (ELam noSLoc $ simpleEqn $ EVar $ setSLocIdent loc $ mkDefaultMethodId $ qualIdent clsMdl i) $ lookup i ies meths = map meth mis sups = map (const (EVar $ mkIdentSLoc loc dictPrefixDollar)) supers args = sups ++ meths- instBind (BFcn i _) = i `elem` mis+ instBind (Fcn i _) = i `elem` mis instBind _ = False case filter (not . instBind) bs of [] -> return ()@@ -1271,37 +1284,68 @@ -- tcTrace $ "tcDefsValue: ------------ start" -- Gather up all type signatures, and put them in the environment. mapM_ addValueType defs- let smap = M.fromList [ (i, ()) | Sign is _ <- defs, i <- is ]+ let smap = M.fromList $ [ (i, ()) | Sign is _ <- defs, i <- is ] -- Split Fcn into those without and with type signatures unsigned = filter noSign defs- where noSign (Fcn i _) = isNothing $ M.lookup i smap+ where noSign (Fcn i _) = hasNoSign i+ noSign (Pattern (i, _) _ _) = hasNoSign i+ noSign (PatBind p _) = any hasNoSign (patVars p) noSign _ = False+ hasNoSign i = isNothing $ M.lookup i smap -- split the unsigned defs into strongly connected components sccs = stronglyConnComp $ map node unsigned- where node d@(Fcn i e) = (d, i, allVarsEqns e)+ where node d@(Fcn i e) = (d, i, tr $ allVarsEqns e)+ node d@(Pattern (i, _) p me) = (d, i, tr $ allVarsPat p $ maybe [] allVarsEqns me)+ node d@(PatBind p e) = (d, head $ patVars p, tr $ allVarsExpr e) -- use the first bound var as the key node _ = undefined- tcSCC (AcyclicSCC d) = tInferDefs [d]- tcSCC (CyclicSCC ds) = tInferDefs ds+ tr x | null sub = x -- do nothing when there are no PatBinds+ | otherwise = map (\ i -> fromMaybe i $ lookup i sub) x+ -- Map all (bound) identifiers in a PatBind into the first (bound) identifier+ sub = [ (d, i) | PatBind p _ <- unsigned, i:ds <- [patVars p], d <- ds ]+ tcSCC (AcyclicSCC d@(Pattern _ _ _)) = tcPatSyn d+ tcSCC (AcyclicSCC d) = tInferDefs smap [d]+ tcSCC (CyclicSCC ds) = tInferDefs smap ds+ --traceM $ "tcDefsValue: unsigned=" ++ show unsigned -- type infer and enter each SCC in the symbol table -- return inferred Sign signDefs <- mapM tcSCC sccs- -- type check all definitions (the inferred ones will be rechecked)+ defs' <- concat <$> mapM expandPatSyn defs+-- traceM $ "tcDefsValue: ------------ expandPatSyn"+-- traceM $ showEDefs defs' -- tcTrace $ "tcDefsValue: ------------ check"- defs' <- mapM (\ d -> do { tcReset; tcDefValue d}) defs- return $ concat signDefs ++ defs'+ -- type check all definitions (the inferred ones will be rechecked)+ defs'' <- mapM (\ d -> do { tcReset; tcDefValue d}) defs'+ let defs''' = concat signDefs ++ defs''+-- traceM $ "tcDefsValue: ------------ done"+-- traceM $ showEDefs defs'''+ pure defs''' -- Infer a type for a definition-tInferDefs :: [EDef] -> T [EDef]-tInferDefs fcns = do+tInferDefs :: M.Map () -> [EDef] -> T [EDef]+tInferDefs smap fcns = do+-- traceM "tInferDefs" tcReset -- Invent type variables for the definitions- xts <- mapM (\ (Fcn i _) -> (,) i <$> newUVar) fcns+ xts <- + let f (Fcn i _) = do t <- newUVar; pure [(i, t)]+ f (Pattern (i, _) _ _) = do t <- newUVar; pure [(i, t)]+ f (PatBind p _) = concat <$> mapM g (patVars p)+ f _ = impossible+ -- Only add type variables for those variables that don't have a signature+ g i = case M.lookup i smap of+ Nothing -> do t <- newUVar; pure [(i, t)]+ _ -> pure []+ in concat <$> mapM f fcns --tcTrace $ "tInferDefs: " ++ show (map fst xts) -- Temporarily extend the local environment with the type variables withExtVals xts $ do -- Infer types for all the Fcns, ignore the new bodies. -- The bodies will be re-typecked in tcDefsValues.- zipWithM_ (\ (Fcn _ eqns) (_, t) -> tcEqns False t eqns) fcns xts+ let tc (Fcn _ eqns) (_, t) = do tcEqns False t eqns; return ()+ tc (Pattern (i,_) _ _) _ = tcError (getSLoc i) "Cannot infer recursive pattern synonym types"+ tc (PatBind p e) _ = do tcPatBind PatBind p e; return ()+ tc _ _ = impossible+ zipWithM_ tc fcns xts -- Get the unsolved constraints ctx <- getUnsolved -- For each definition, quantify over the free meta variables, and include@@ -1337,7 +1381,13 @@ (fe, fty) <- tLookup "???" $ mkGetName tycon fld extValETop fld fty fe case adef of- Sign is t -> mapM_ (\ i -> extValQTop i t) is+ Sign is@(i:_) t | isConIdent i -> do+ -- pattern synonym+ t' <- canonPatSynType t+ mapM_ (addPatSyn t') is+ Sign is t ->+ -- regular synonym+ mapM_ (\ i -> extValQTop i t) is Data (tycon, vks) cs _ -> do let cti = [ (qualIdent mn c, either length length ets + if null ctx then 0 else 1) | Constr _ ctx c ets <- cs ]@@ -1360,14 +1410,25 @@ Class ctx (i, vks) fds ms -> addValueClass ctx i vks fds ms _ -> return () +-- Add a pattern synonym to the symbol table.+addPatSyn :: EType -> Ident -> T ()+addPatSyn at i = do+ mn <- gets moduleName+ let (_, _, _, _, t) = splitPatSynType at+ n = length $ fst $ getArrows t+ qi = qualIdent mn i+ qip = mkPatSynMatch qi+ mtch = (EVar qip, mkPatSynMatchType qip at)+ extValETop i at $ ECon $ ConSyn qi n mtch+ -- XXX FunDep addValueClass :: [EConstraint] -> Ident -> [IdKind] -> [FunDep] -> [EBind] -> T () addValueClass ctx iCls vks fds ms = do mn <- gets moduleName let- meths = [ b | b@(BSign _ _) <- ms ]- methTys = map (\ (BSign _ t) -> t) meths- methIds = concatMap (\ (BSign is _) -> is) meths+ meths = [ b | b@(Sign _ _) <- ms ]+ methTys = map (\ (Sign _ t) -> t) meths+ methIds = concatMap (\ (Sign is _) -> is) meths supTys = ctx -- XXX should do some checking targs = supTys ++ methTys qiCls = qualIdent mn iCls@@ -1376,7 +1437,7 @@ iCon = mkClassConstructor iCls iConTy = EForall True vks $ foldr tArrow tret targs extValETop iCon iConTy (ECon $ ConData cti (qualIdent mn iCon) [])- let addMethod (BSign is t) = mapM_ method is+ let addMethod (Sign is t) = mapM_ method is where method i = extValETop i (EForall True vks $ tApps qiCls (map (EVar . idKindIdent) vks) `tImplies` t) (EVar $ qualIdent mn i) addMethod _ = impossible -- tcTrace ("addValueClass " ++ showEType (ETuple ctx))@@ -1395,6 +1456,9 @@ Fcn i eqns -> do (_, t) <- tLookup "type signature" i t' <- expandSyn t+-- when (isConIdent i) $ do+-- tcTrace $ "tcDefValue: patsyn\n" ++ show i ++ " :: " ++ show t'+-- tcTrace $ "tcDefValue:\n" ++ showEDefs [adef] -- tcTrace $ "tcDefValue: ------- start " ++ showIdent i -- tcTrace $ "tcDefValue: " ++ showIdent i ++ " :: " ++ showExpr t' -- tcTrace $ "tcDefValue: " ++ showEDefs [adef]@@ -1406,22 +1470,56 @@ mn <- gets moduleName -- tcTrace $ "tcDefValue: " ++ showIdent i ++ " done" return $ Fcn (qualIdent mn i) teqns+ PatBind p e -> tcPatBind PatBind p e ForImp ie i t -> do mn <- gets moduleName t' <- expandSyn t return (ForImp ie (qualIdent mn i) t')+ Pattern _ _ _ -> impossible _ -> return adef +-- This is only used during inference.+-- When doing type checking the actual Pattern definition will have been+-- removed by expandPatSyn.+-- The important thing here is the call to addPatSyn+tcPatSyn :: EDef -> T [EDef]+tcPatSyn (Pattern (ip, vks) p me) = do+-- traceM $ "tcPatSyn: enter " ++ show (ip, vks, p, me)+ let step [] t = tcPat (Check t) p+ step (ik:iks) t = do+ (ti, tr) <- unArrow (getSLoc ik) t+ withExtVal (idKindIdent ik) ti $ step iks tr+ pty <- newUVar -- invent a type+ (sks, dicts, _p) <- step vks pty+ let ctx2 = map snd dicts+-- traceM $ "tcPatSyn: pat " ++ show (sks, ctx2)+ case me of Nothing -> pure (); Just e -> void $ tcEqns False pty e+ ctx1 <- getUnsolved+-- traceM $ "tcPatSyn: ctx " ++ show ctx1+ ty0 <- addConstraints ctx2 <$> derefUVar pty+ let ctx1' = deleteFirstsBy eqEType ctx1 ctx2 -- remove provided from required+ (sks', sub) = tyVarSubst sks ty0 -- turn skolems+ ty1 = subst sub ty0 -- into rigid tyvars+ ty2 <- quantify (metaTvs [ty1]) (addConstraints ctx1' ty1)+ let (vs, ty3) = unForall ty2+ ty4 = eForall' False (sks' ++ vs) ty3 -- add the skolems tyvars+ ty5 <- canonPatSynType ty4+-- traceM $ "tcPatSyn: tys " ++ show (ty0, ty1, ty2, ty3, ty4, ty5)+ addPatSyn ty5 ip+-- traceM ("tcPatSyn: after " ++ show (ip, ty5))+ return [ Sign [ip] ty3 ]+tcPatSyn _ = impossible+ -- Add implicit forall and type check.-tCheckTypeTImpl :: HasCallStack => EType -> EType -> T EType-tCheckTypeTImpl tchk t@(EForall _ _ _) = tCheckTypeT tchk t-tCheckTypeTImpl tchk t = do+tCheckTypeTImpl :: HasCallStack => Bool -> EType -> EType -> T EType+tCheckTypeTImpl _ tchk t@(EForall _ _ _) = tCheckTypeT tchk t+tCheckTypeTImpl impl tchk t = do bvs <- stKeysLcl <$> gets valueTable -- bound outside let fvs = freeTyVars [t] -- free variables in t -- these are free, and need quantification. eDummy indicates missing kind iks = map (\ i -> IdKind i eDummy) (fvs \\ bvs) --when (not (null iks)) $ tcTrace ("tCheckTypeTImpl: " ++ show (t, eForall iks t))- tCheckTypeT tchk (eForall' False iks t)+ tCheckTypeT tchk (eForall' impl iks t) tCheckTypeT :: HasCallStack => EType -> EType -> T EType tCheckTypeT = tCheck tcTypeT@@ -1512,7 +1610,7 @@ tcExpr :: HasCallStack => Expected -> Expr -> T Expr tcExpr mt ae = do--- tcTrace ("tcExpr enter: " ++ showExpr ae)+-- tcTrace ("tcExpr enter: mt=" ++ show mt ++ " ae=" ++ showExpr ae) r <- tcExprR mt ae -- tcTrace ("tcExpr exit: " ++ showExpr r) return r@@ -1530,7 +1628,7 @@ Check t -> addConstraint d t return (EVar d) - | isDummyIdent i -> impossibleShow ae+ | isDummyIdent i -> tcError loc "_ cannot be used as a variable" | otherwise -> do -- Type checking an expression (or type) (e, t) <- tLookupV i@@ -1541,30 +1639,15 @@ case t of EUVar r -> fmap (fromMaybe t) (getUVar r) _ -> return t- --tcTrace $ "EVar: " ++ showIdent i ++ " :: " ++ showExpr t ++ " = " ++ showExpr t' ++ " mt=" ++ show mt+-- tcTrace $ "EVar: " ++ showIdent i ++ " :: " ++ showExpr t ++ " = " ++ showExpr t' ++ " mt=" ++ show mt instSigma loc e t' mt+ EQVar e t -> -- already resolved, just instantiate+ instSigma loc e t mt - EApp f a -> do--- tcTrace $ "txExpr(0) EApp: expr=" ++ show ae ++ ":: " ++ show mt- (f', ft) <- tInferExpr f--- tcTrace $ "tcExpr(1) EApp: f=" ++ show f ++ "; f'=" ++ show f' ++ " :: " ++ show ft- (at, rt) <- unArrow loc ft--- tcTrace $ "tcExpr(2) EApp: f=" ++ show f ++ " :: " ++ show ft ++ ", arg=" ++ show a ++ " :: " ++ show at ++ " retty=" ++ show rt- -- We want to do the unification of rt ant mt before checking the argument to- -- have more type information. See tests/Eq1.hs.- -- But instSigma may transform the input expression, so we have to be careful.- let etmp = EUVar ugly- ugly = -1::Int- etmp' <- instSigma loc etmp rt mt- a' <- checkSigma a at--- tcTrace $ "tcExpr(3) EApp: f = " ++ show f ++ " :: " ++ show ft ++ ", arg=" ++ show a' ++ " :: " ++ show at ++ " retty=" ++ show rt ++ " mt = " ++ show mt- let res = EApp f' a'- case etmp' of- EUVar _ -> return res -- instSigma did nothing, this is the common case- _ -> return $ substEUVar [(ugly, res)] etmp'+ EApp _ _ -> tcExprAp mt ae [] EOper e ies -> tcOper e ies >>= tcExpr mt- ELam qs -> tcExprLam mt qs+ ELam _ qs -> tcExprLam mt loc qs ELit _ lit -> do tcm <- gets tcMode case tcm of@@ -1605,7 +1688,7 @@ mex <- getExpected mt case mex of Just (EApp (EVar lst) (EVar c))- | lst == identList, c == identChar -> tcLit mt loc lit+ | lst == identList && c == identChar -> tcLit mt loc lit _ -> do (f, ft) <- tInferExpr (EVar (mkBuiltin loc "fromString")) (_at, rt) <- unArrow loc ft@@ -1651,7 +1734,7 @@ failMsg s = EApp (EVar (mkBuiltin loc "fail")) (ELit loc (LStr s)) failAlt = if nofail then []- else [(EVar dummyIdent, simpleAlts $ failMsg "bind")]+ else [(eDummy, simpleAlts $ failMsg "bind")] tcExpr mt (EApp (EApp (EVar sbind) a) (eLam [x] (ECase x (patAlt ++ failAlt)))) SThen a -> do@@ -1738,11 +1821,84 @@ ESelect is -> do let x = eVarI loc "$x" tcExpr mt $ eLam [x] $ foldl (\ e i -> EApp (eGetField i) e) x is+ ETypeArg _ ->+ tcError loc $ "Bad type application" _ -> error $ "tcExpr: cannot handle: " ++ show (getSLoc ae) ++ " " ++ show ae -- impossible --- Approximation of failure free.--- XXX single constructor types should be transparent+tcExprAp :: HasCallStack =>+ Expected -> Expr -> [Expr] -> T Expr+tcExprAp mt ae args =+ case ae of+ EApp f a -> tcExprAp mt f (a : args)+ EParen f -> tcExprAp mt f args+ EOper e ies -> tcOper e ies >>= \ eop -> tcExprAp mt eop args+ EVar i | isIdent dictPrefixDollar i -> impossibleShow ae+ | isDummyIdent i -> impossibleShow ae+ | otherwise -> do+ -- Type checking an expression (or type)+ (fn, t) <- tLookupV i+ -- Variables bound in patterns start out with an (EUVar ref) type,+ -- which can be instantiated to a polytype.+ -- Dereference such a ref.+ t' <-+ case t of+ EUVar r -> fmap (fromMaybe t) (getUVar r)+ _ -> return t+-- tcTrace $ "exExprAp: EVar " ++ showIdent i ++ " :: " ++ showExpr t ++ " = " ++ showExpr t' ++ " mt=" ++ show mt+ case fn of+ EVar ii | ii == mkIdent "Data.Function.$", f:as <- args -> tcExprAp mt f as+ _ -> tcExprApFn mt fn t' args+ EQVar f t -> -- already resolved+ tcExprApFn mt f t args+ _ -> do+ (f, t) <- tInferExpr ae+ tcExprApFn mt f t args+ +tcExprApFn :: Expected -> Expr -> EType -> [Expr] -> T Expr+--tcExprApFn _ fn fnt args | trace (show (fn, fnt, args)) False = undefined+tcExprApFn mt fn (EForall {-True-}_ (IdKind i _:iks) ft) (ETypeArg t : args) = do+ t' <- if t `eqEType` EVar dummyIdent then newUVar else tcType (Check kType) t+ tcExprApFn mt fn (eForall iks (subst [(i, t')] ft)) args+tcExprApFn mt fn tfn args = do+-- traceM $ "tcExprApFn: " ++ show (mt, fn, tfn, args)+-- xx <- gets ctxTables+-- traceM $ "tcExprApFn: ctxTables=" ++ show xx+ let loc = getSLoc fn+ (fn', tfn') <- tInst fn tfn+ let loop ats [] ft = final ats ft+ loop ats as@(_:_) (EForall _ vks ft) = do+ ft' <- tInstForall vks ft+ loop ats as ft'+ loop ats (a:as) ft = do+ (at, rt) <- unArrow loc ft+ loop ((a, at):ats) as rt+ final aats rt = do++ -- We want to do the unification of rt ant mt before checking the argument to+ -- have more type information. See tests/Eq1.hs.+ -- But instSigma may transform the input expression, so we have to be careful.+ let etmp = EUVar ugly+ ugly = -1::Int+ etmp' <- instSigma loc etmp rt mt++ let apply f [] = return f+ apply f ((a,at):ats) = do+ a' <- checkSigma a at+ apply (EApp f a') ats+ res <- apply fn' (reverse aats)+-- cc <- gets constraints+-- traceM $ "tcExprApFn: constraints=" ++ show cc++ case etmp' of+ EUVar _ -> return res -- instSigma did nothing, this is the common case+ _ -> return $ substEUVar [(ugly, res)] etmp'++ instSigma loc res rt mt+ + loop [] args tfn'++-- Is a pattern failure free? failureFree :: EPat -> T Bool failureFree p@(EVar _) = failureFreeAp [] p failureFree p@(EApp _ _) = failureFreeAp [] p@@ -1912,6 +2068,7 @@ unArrow :: HasCallStack => SLoc -> EType -> T (EType, EType)+--unArrow loc t@(EForall _ _ _) | trace ("unArrow: " ++ show t) False = undefined unArrow loc t = do case getArrow t of Just ar -> return ar@@ -1941,13 +2098,13 @@ newDictIdent :: SLoc -> T Ident newDictIdent loc = newIdent loc dictPrefix -tcExprLam :: Expected -> [Eqn] -> T Expr-tcExprLam mt qs = do+tcExprLam :: Expected -> SLoc -> [Eqn] -> T Expr+tcExprLam mt loc qs = do t <- tGetExpType mt- ELam <$> tcEqns False t qs+ ELam loc <$> tcEqns False t qs tcEqns :: Bool -> EType -> [Eqn] -> T [Eqn]---tcEqns _ t eqns | trace ("tcEqns: " ++ showEBind (BFcn dummyIdent eqns) ++ " :: " ++ show t) False = undefined+--tcEqns _ t eqns | trace ("tcEqns: " ++ showEBind (Fcn dummyIdent eqns) ++ " :: " ++ show t) False = undefined tcEqns top (EForall expl iks t) eqns | expl = withExtTyps iks $ tcEqns top t eqns | otherwise = tcEqns top t eqns tcEqns top t eqns | Just (ctx, t') <- getImplies t = do@@ -1959,19 +2116,19 @@ let eqn = case eqns' of [Eqn [] alts] -> Eqn [EVar d] alts- _ -> Eqn [EVar d] $ EAlts [([], EVar f)] [BFcn f eqns']+ _ -> Eqn [EVar d] $ EAlts [([], EVar f)] [Fcn f eqns'] return [eqn] tcEqns top t eqns = do let loc = getSLoc eqns f <- newIdent loc "fcnS" (eqns', ds) <- solveAndDefault top $ mapM (tcEqn t) eqns--- tcTrace $ "tcEqns done: " ++ showEBind (BFcn dummyIdent eqns')+-- tcTrace $ "tcEqns done: " ++ showEBind (Fcn dummyIdent eqns') case ds of [] -> return eqns' _ -> do let bs = eBinds ds- eqn = Eqn [] $ EAlts [([], EVar f)] (bs ++ [BFcn f eqns'])+ eqn = Eqn [] $ EAlts [([], EVar f)] (bs ++ [Fcn f eqns']) return [eqn] tcEqn :: EType -> Eqn -> T Eqn@@ -2038,7 +2195,7 @@ return $ ELet (eBinds bs) e' eBinds :: [(Ident, Expr)] -> [EBind]-eBinds ds = [BFcn i $ simpleEqn e | (i, e) <- ds]+eBinds ds = [Fcn i $ simpleEqn e | (i, e) <- ds] instPatSigma :: HasCallStack => SLoc -> Sigma -> Expected -> T ()@@ -2104,6 +2261,7 @@ unify loc t ext return ([], [], p) | otherwise -> tcPatAp mt [] ae+ EQVar _ _ -> tcPatAp mt [] ae EApp f _ | isNeg f -> lit -- if it's (negate e) it must have been a negative literal | otherwise -> tcPatAp mt [] ae@@ -2126,8 +2284,8 @@ te <- newUVar munify loc mt (tApp (tList loc) te) xs <- mapM (tCheckPat te) es- let !(sks, ds, es') = unzip3 xs- return (concat sks, concat ds, EListish (LList es'))+ case unzip3 xs of+ (sks, ds, es') -> return (concat sks, concat ds, EListish (LList es')) ELit _ _ -> lit @@ -2160,20 +2318,20 @@ EUpdate p [] -> do (p', _) <- tInferExpr p case p' of- ECon c -> tcPat mt $ eApps p (replicate (conArity c) (EVar dummyIdent)) + ECon c -> tcPat mt $ eApps p (replicate (conArity c) eDummy) _ -> impossible EUpdate p isps -> do- me <- dsUpdate (const $ EVar dummyIdent) p isps+ me <- dsUpdate (const eDummy) p isps case me of Just p' -> tcPat mt p' Nothing -> impossible EOr ps -> do- let orFun = ELam $ [ eEqn [p] true | p <- ps] ++ [ eEqn [EVar dummyIdent] (eFalse loc) ]+ let orFun = ELam noSLoc $ [ eEqn [p] true | p <- ps] ++ [ eEqn [eDummy] (eFalse loc) ] true = eTrue loc tcPat mt $ EViewPat orFun true - _ -> error $ "tcPat: " ++ show (getSLoc ae) ++ " " ++ show ae+ _ -> error $ "tcPat: not handled " ++ show (getSLoc ae) ++ " " ++ show ae -- The expected type is for (eApps afn (reverse args)) tcPatAp :: HasCallStack =>@@ -2182,13 +2340,43 @@ tcPatAp mt args afn = case afn of EVar i | isConIdent i -> do- let loc = getSLoc i (con, xpt) <- tLookupV i--- tcTrace (show xpt)+ tcPatApCon mt args con xpt++ EQVar con xpt -> tcPatApCon mt args con xpt++ EApp f a -> tcPatAp mt (a:args) f++ EParen e -> tcPatAp mt args e++ _ -> tcError (getSLoc afn) ("Bad pattern " ++ show afn)++tcPatApCon :: Expected -> [EPat] -> EPat -> EType -> T EPatRet+tcPatApCon mt args con xpt = do+ let loc = getSLoc con+ nargs = length args+ checkArity ary =+ if nargs < ary then+ tcError loc "too few arguments"+ else if nargs > ary then+ tcError loc "too many arguments"+ else+ return ()+ case con of+ -- Pattern synonym+ ECon (ConSyn qi n (e, t)) -> do+ checkArity n+ let (_, yes, _) = mkMatchDataTypeConstr (mkPatSynMatch qi) xpt+ vp = EViewPat (EQVar e t) (eApps yes args)+ --traceM ("patsyn " ++ show vp)+ tcPat mt vp++ -- Regular constructor+ _ -> do case xpt of -- Sanity check EForall _ _ (EForall _ _ _) -> return ()- _ -> impossibleShow i+ _ -> impossibleShow con EForall _ avs apt <- tInst' xpt (sks, spt) <- shallowSkolemise avs apt@@ -2203,13 +2391,7 @@ where arity (ECon c) = conArity c arity (EApp f _) = arity f - 1 -- deal with dictionary added above arity e = impossibleShow e- nargs = length args- if nargs < ary then- tcError loc "too few arguments"- else if nargs > ary then- tcError loc "too many arguments"- else- return ()+ checkArity ary let step [] t r = return (t, r) step (a:as) t (sk, d, f) = do@@ -2223,13 +2405,6 @@ Infer r -> do { tSetRefType loc r tt; return pr } return (skr, dr, pp) - EApp f a -> tcPatAp mt (a:args) f-- EParen e -> tcPatAp mt args e-- _ -> tcError (getSLoc afn) ("Bad pattern " ++ show afn)- - eTrue :: SLoc -> Expr eTrue l = EVar $ mkBuiltin l "True" @@ -2243,9 +2418,9 @@ tcError (getSLoc v) $ "Multiply defined: " ++ showIdent v tcBinds :: forall a . [EBind] -> ([EBind] -> T a) -> T a-tcBinds xbs ta = do+tcBinds xbs ta = withFixes [ (i, fx) | Infix fx is <- xbs, i <- is ] $ do let- tmap = M.fromList [ (i, t) | BSign is t <- xbs, i <- is ]+ tmap = M.fromList [ (i, t) | Sign is t <- xbs, i <- is ] xs = getBindsVars xbs multCheck xs xts <- mapM (tcBindVarT tmap) xs@@ -2253,6 +2428,16 @@ nbs <- mapM tcBind xbs ta nbs +-- Temporarily exten the fixity table+withFixes :: [FixDef] -> T a -> T a+withFixes [] ta = ta+withFixes fixs ta = do+ ft <- gets fixTable+ modify $ \ st -> st{ fixTable = foldr (uncurry M.insert) ft fixs }+ a <- ta+ modify $ \ st -> st{ fixTable = ft }+ return a+ tcBindVarT :: HasCallStack => M.Map EType -> Ident -> T (Ident, EType) tcBindVarT tmap x = do case M.lookup x tmap of@@ -2260,26 +2445,29 @@ t <- newUVar return (x, t) Just t -> do- tt <- withTypeTable $ tCheckTypeTImpl kType t+ tt <- withTypeTable $ tCheckTypeTImpl False kType t return (x, tt) tcBind :: EBind -> T EBind tcBind abind = case abind of- BFcn i eqns -> do+ Fcn i eqns -> do (_, tt) <- tLookupV i teqns <- tcEqns False tt eqns- return $ BFcn i teqns- BPat p a -> do- ((sk, ds, ep), tp) <- tInferPat p -- pattern variables already bound- -- This is just to complicated.- when (not (null sk) || not (null ds)) $- tcError (getSLoc p) "existentials not allowed in pattern binding"- ea <- tCheckExprAndSolve tp a- return $ BPat ep ea- BSign _ _ -> return abind- BDfltSign _ _ -> return abind+ return $ Fcn i teqns+ PatBind p a -> tcPatBind PatBind p a+ _ -> return abind +tcPatBind :: (EPat -> Expr -> a) -> EPat -> Expr -> T a+tcPatBind con p a = do+ ((sk, ds, ep), tp) <- tInferPat p -- pattern variables already bound+ -- This is just to complicated.+ when (not (null sk) || not (null ds)) $+ tcError (getSLoc p) "existentials not allowed in pattern binding"+ ea <- tCheckExprAndSolve tp a+ return $ con ep ea++ -- Desugar [T] and (T,T,...) dsType :: EType -> EType dsType at =@@ -2323,24 +2511,29 @@ getEnvTypes :: T [EType] getEnvTypes = gets (map entryType . stElemsLcl . valueTable) +tyVarSubst :: [a] -> EType -> ([IdKind], [(a, EType)])+tyVarSubst tvs ty =+ let usedVars = allVarsExpr ty -- Avoid used type variables+ newVars = take (length tvs) (allBinders \\ usedVars)+ newVarsK = map (\ i -> IdKind i noKind) newVars+ noKind = eDummy+ in (newVarsK, zipWith (\ tv n -> (tv, EVar n)) tvs newVars)+ -- Quantify over the specified type variables. -- The type should be zonked. quantify :: [TRef] -> Rho -> T Sigma quantify [] ty = return ty quantify tvs ty = do- let usedVars = allVarsExpr ty -- Avoid used type variables- newVars = take (length tvs) (allBinders \\ usedVars)- newVarsK = map (\ i -> IdKind i noKind) newVars- noKind = EVar dummyIdent+ let (newVarsK, sub) = tyVarSubst tvs ty osubst <- gets uvarSubst- zipWithM_ (\ tv n -> setUVar tv (EVar n)) tvs newVars+ mapM_ (uncurry setUVar) sub ty' <- derefUVar ty putUvarSubst osubst -- reset the setUVar we did above return (EForall False newVarsK ty') -allBinders :: [Ident] -- a,b,..z, a1, b1,... z1, a2, b2,...+allBinders :: [Ident] -- a,b,...,z,a1,a2,... allBinders = [ mkIdent [x] | x <- ['a' .. 'z'] ] ++- [ mkIdent (x : show i) | i <- [1::Int ..], x <- ['a' .. 'z']]+ [ mkIdent ('a' : show i) | i <- [1::Int ..]] -- Skolemize the given variables shallowSkolemise :: [IdKind] -> EType -> T ([TyVar], EType)@@ -2417,6 +2610,11 @@ subsCheckRho :: HasCallStack => SLoc -> Expr -> Sigma -> Rho -> T Expr --subsCheckRho _ e1 t1 t2 | trace ("subsCheckRho: " ++ show e1 ++ " :: " ++ show t1 ++ " = " ++ show t2) False = undefined+-- XXX Is this even right? It's not part of the paper.+subsCheckRho loc exp1 (EForall _ vs1 t1) (EForall _ vs2 t2) | length vs1 == length vs2 = do+ let sub = [(v1, EVar v2) | (IdKind v1 _, IdKind v2 _) <- zip vs1 vs2]+ unify loc (subst sub t1) t2+ return exp1 subsCheckRho loc exp1 sigma1@(EForall _ _ _) rho2 = do -- Rule SPEC (exp1', rho1) <- tInst exp1 sigma1 subsCheckRho loc exp1' rho1 rho2@@ -2457,13 +2655,172 @@ ----- +--+-- Pattern synonyms look like+-- pattern P :: forall a1...an . ctxr => forall b1...bm . ctxp => t1 -> ... -> ti -> t+-- pattern P x1...xi <- p where P = e+-- (this type is the canonicalized type, generated by canonPatSynType).+-- The synonym is translated into a builder, a matcher and a type.+-- Each synonym use is replaced by a simple view pattern.+--+-- The builder is simple. It gets the same name and type as the pattern synonym,+-- and the definition is the one provided in the definition.+-- P :: forall a1...an . ctxr => forall b1...bm . ctxp => t1 -> ... ti -> t+-- P = e+--+-- The matcher needs to account for possible existentials so we get a data type+-- for the match result that can have existentials.+-- data P%T a1...an = forall b1...bm . ctxp => M t1 ... ti+-- | N+--+-- The matcher itself has the required part of the synonym type, whereas+-- the provided part is in the data type. The matcher simply matches on the given pattern.+-- P% :: forall a1...an . ctxr => t -> P%T a1...an+-- P% p = M x1...xi+-- P% _ = N+-- So when the synonym P matches the matcher P% will return the M constructor+-- of the P%T type, and then N constructor when there is no match.+--+-- Each use of the pattern synonym+-- P p1...pi+-- is replaced by+-- (P% -> M p1...pi)+--+-- The data type, P%T, is not entered into any symbol tables.+-- The matcher, P%, is in the symbol table, but is not part of the exported symbols.+-- The transformed expression simply carries enough information about the types+-- (using EQVar). The exported ECon for P has this information.+--++emptyCtx :: EConstraint+emptyCtx = EVar $ tupleConstr noSLoc 0++isEmptyCtx :: EConstraint -> Bool+isEmptyCtx (EVar i) = i == tupleConstr noSLoc 0+isEmptyCtx _ = False++-- Expand a pattern synonym into the builder and matcher definitions.+-- Removes that actual pattern definition+expandPatSyn :: EDef -> T [EDef]+expandPatSyn (Pattern (i, vks) p me) = do+ (_, t) <- tLookup "type signature" i+ (im, qim) <- addPatSynMatch i t+ let (ddata, yes, no) = mkMatchDataTypeConstr qim t+ mexp = fmap (Fcn i) me+ pat = Fcn im [ eEqn [p] match+ , eEqn [eDummy] no]+ match = eApps yes (map (EVar . idKindIdent) vks)+ dname = case ddata of Data (n, _) _ _ -> n; _ -> impossible+ kvar <- newUVar -- We don't care about the kind+ withTypeTable $ extValQTop dname kvar+ pure $ maybeToList mexp ++ [pat, ddata]+expandPatSyn d = pure [d]++-- Add the matcher for a pattern synonym to the symbol table.+-- Return the added identifier.+addPatSynMatch :: Ident -> EType -> T (Ident, Ident)+addPatSynMatch i at = do+ mn <- gets moduleName+ let ip = mkPatSynMatch i+ qip = qualIdent mn ip+ extValETop ip (mkPatSynMatchType qip at) (EVar qip)+ return (ip, qip)++mkPatSynMatchType :: Ident -> EType -> EType+mkPatSynMatchType qip at =+ let (vks1, ctx1, _vks2, _ctx2, ty) = splitPatSynType at+ (_ats, rt) = getArrows ty+ pstycon = mkMatchDataTypeName qip+ in eForall vks1 $ etImplies ctx1 $ rt `tArrow` tApps pstycon (map (EVar . idKindIdent) vks1)++-- Given the (qualified) name of a synonym and its type generate:+-- match-constructor, nomatch-constructor+mkMatchDataTypeConstr :: HasCallStack => Ident -> EType -> (EDef, Expr, Expr)+mkMatchDataTypeConstr qi at =+ let (vks1, _ctx1, vks2, ctx2, ty) = splitPatSynType at+ (ats, _rt) = getArrows ty+ n = length ats+ mi = addIdentSuffix qi "M"+ ni = addIdentSuffix qi "N"+ cti = [ (mi, n + if isEmptyCtx ctx2 then 0 else 1), (ni, 0) ]+ conm = ConData cti mi []+ conn = ConData cti ni []+ tycon = mkMatchDataTypeName qi+ tr = tApps tycon $ map (EVar . idKindIdent) vks1+ tn = EForall True vks1 $ EForall True [] tr+ tm = EForall True vks1 $ EForall True vks2 $ etImplies ctx2 $ foldr tArrow tr ats++ ddata = Data lhs [cm, cn] []+ where lhs = (unQualIdent tycon, vks1)+ cm = Constr vks2 (if isEmptyCtx ctx2 then [] else [ctx2]) (unQualIdent mi) (Left $ zip (repeat False) ats)+ cn = Constr [] [] (unQualIdent ni) (Left [])++ in -- trace ("M :: " ++ show tm ++ ", N :: " ++ show tn) $+ -- trace (showEDefs [ddata]) $+ (ddata, EQVar (ECon conm) tm, EQVar (ECon conn) tn)++mkPatSynMatch :: Ident -> Ident+mkPatSynMatch i = addIdentSuffix i "%"++mkMatchDataTypeName :: Ident -> Ident+mkMatchDataTypeName i = addIdentSuffix i "T"++isMatchDataTypeName :: Ident -> Bool+isMatchDataTypeName = isSuffixOf "%T" . unIdent++-- A pattern synonym always has a type of the form+-- forall vs1 . ctx1 => forall vs2 . ctx2 => ty+-- required provided+-- The input has forall inserted, but the implicit forall+-- may be in the wrong place.+canonPatSynType :: EType -> T EType+canonPatSynType at = do+ let mkTyp rVks rCtx pVks pCtx ty =+ EForall True rVks $ tImplies rCtx $+ EForall True pVks $ tImplies pCtx ty+ getImplies' :: EType -> (EConstraint, EType)+ getImplies' ty = fromMaybe (emptyCtx, ty) $ getImplies ty++ at' <- expandSyn at+ case at' of+ EForall False vks t0 -> do+ -- Implicit forall, the xs need to be split between required and provided.+ let (reqCtx, t1) = getImplies' t0+ (proCtx, t2) = getImplies' t1+ proVs = freeTyVars [proCtx]+ (proVks, reqVks) = partition ((`elem` proVs) . idKindIdent) vks+-- traceM "%%% implicit"+ pure $ mkTyp reqVks reqCtx proVks proCtx t2++ EForall True reqVks t0 -> do+ -- Explicit forall+ let (reqCtx, t1) = getImplies' t0+ (proVks, t2) = unForall t1+ (proCtx, t3) = getImplies' t2+-- traceM "%%% explicit"+ pure $ mkTyp reqVks reqCtx proVks proCtx t3++ ty -> do+ -- No forall at all. XXX doesn't work with nullary classes+-- traceM "%%% none"+ pure $ mkTyp [] emptyCtx [] emptyCtx ty++splitPatSynType :: EType -> ([IdKind], EConstraint, [IdKind], EConstraint, EType)+splitPatSynType (EForall _ vks1 t0)+ | Just (ctx1, EForall _ vks2 t1) <- getImplies t0+ , Just (ctx2, ty) <- getImplies t1+ = (vks1, ctx1, vks2, ctx2, ty)+splitPatSynType t = impossibleShow t++-----+ -- Given a dictionary of a (constraint type), split it up -- * components of a tupled constraint -- * superclasses of a constraint expandDict :: HasCallStack => Expr -> EConstraint -> T [InstDictC] expandDict edict ct = expandDict' [] [] edict =<< expandSyn ct -expandDict' :: [IdKind] -> [EConstraint] -> Expr -> EConstraint -> T [InstDictC]+expandDict' :: HasCallStack => [IdKind] -> [EConstraint] -> Expr -> EConstraint -> T [InstDictC] expandDict' avks actx edict acc = do let (bvks, bctx, cc) = splitInst acc@@ -2476,12 +2833,16 @@ Nothing -> do ct <- gets classTable case M.lookup iCls ct of- Nothing -> do+ Nothing ->+ -- XXX ~ could be in the symbol table+ if iCls == mkIdent "Primitives.~" then+ return []+ else do -- if iCls is a variable it's not in the class table, otherwise it's an error when (isConIdent iCls) $ --impossible -- XXX it seems we can get here, e.g., Control.Monad.Fail without Applicative import- error ("expandDict: " ++ show iCls)+ error ("expandDict: " ++ showExprRaw acc) return [(edict, vks, ctx, cc, [])] Just (ClassInfo iks sups _ _ fds) -> do let @@ -2508,6 +2869,7 @@ a <- ta -- compute, generating constraints ds <- solveConstraints -- solve those un <- gets constraints -- get remaining unsolved+-- traceM $ "solveLocalConstraints: " ++ show (cs, ds, un) putConstraints (un ++ cs) -- put back unsolved and old constraints return (a, ds) @@ -2559,18 +2921,22 @@ Nothing -> error $ "getSuperClasses: " ++ show i Just (ClassInfo _ supers _ _ _) -> loop done (concatMap flatten supers ++ is)- flatten a | (c, ts) <- getApp a =- case getTupleConstr c of- Nothing -> [c]- Just _ -> concatMap flatten ts+ flatten a =+ case getApp a of+ (c, ts) ->+ case getTupleConstr c of+ Nothing -> [c]+ Just _ -> concatMap flatten ts return $ loop [] ais ++ {- showInstInfo :: InstInfo -> String showInstInfo (InstInfo m ds fds) = "InstInfo " ++ show (M.toList m) ++ " " ++ showListS showInstDict ds ++ show fds showInstDict :: InstDict -> String-showInstDict (e, ctx, ts) = showExpr e ++ " :: " ++ show (addConstraints ctx (tApps (mkIdent "_") ts))+showInstDict (e, ctx, ts) = showExpr e ++ " :: " ++ show (addConstraints (ctx 10000) (tApps (mkIdent "_") ts)) showInstDef :: InstDef -> String showInstDef (cls, InstInfo m ds _) = "instDef " ++ show cls ++ ": "@@ -2598,7 +2964,8 @@ else do addMetaDicts -- tcTrace "------------------------------------------\nsolveConstraints"- cs' <- mapM (\ (i,t) -> do { t' <- derefUVar t; return (i,t') }) cs+ eqs <- gets typeEqTable+ cs' <- mapM (\ (i,t) -> do { t' <- derefUVar t; return (i, normTypeEq eqs t') }) cs -- tcTrace ("constraints:\n" ++ unlines (map showConstraint cs')) (unsolved, solved, improves) <- solveMany cs' [] [] [] putConstraints unsolved@@ -2625,6 +2992,7 @@ , ((== mkIdent nameTypeEq), solveTypeEq) -- handle equality constraints, i.e. (t1 ~ t2) , ((== mkIdent nameKnownNat), solveKnownNat) -- KnownNat 123 constraints , ((== mkIdent nameKnownSymbol), solveKnownSymbol) -- KnownSymbol "abc" constraints+ , ((== mkIdent nameCoercible), solveCoercible) -- Coercible a b constraints , (const True, solveInst) -- handle constraints with instances ] @@ -2635,7 +3003,7 @@ solveMany (cns@(di, ct) : cnss) uns sol imp = do -- tcTrace ("trying " ++ showEType ct) let loc = getSLoc di- !(iCls, cts) = getApp ct+ (iCls, cts) = getApp ct solver = head [ s | (p, s) <- solvers, p iCls ] ads <- gets argDicts -- Check if we have an exact match among the arguments dictionaries.@@ -2654,6 +3022,11 @@ solveInst loc iCls cts = do it <- gets instTable -- tcTrace ("instances:\n" ++ unlines (map showInstDef (M.toList it)))+ -- XXX The solveGen&co functions are not in the T monad.+ -- But we sometimes need to instantiate type variable, so we use the+ -- hack to pass dowwn a starting uniq.+ -- This ought to be fixed, but is will be less efficient.+ uniq <- do ts <- get; let { u = unique ts }; put ts{ unique = u+100 }; return u -- make room for many UVars case M.lookup iCls it of Nothing -> return Nothing -- no instances, so no chance Just (InstInfo atomMap insts fds) -> do@@ -2664,19 +3037,19 @@ -- If the goal is just (C T) and there is an instance, the solution is simple Just e -> return $ Just (e, [], []) -- Not found, but there might be a generic instance- Nothing -> solveGen (M.null atomMap) fds insts loc iCls cts- _ -> solveGen (M.null atomMap) fds insts loc iCls cts+ Nothing -> solveGen uniq (M.null atomMap) fds insts loc iCls cts+ _ -> solveGen uniq (M.null atomMap) fds insts loc iCls cts -- When matching constraint (C _a) against an instance of the form -- instance (C b) then we don't want to match if the -- _a is later instantiated and it turns out we should -- have matched a (C T) instead.-solveGen :: Bool -> [IFunDep] -> [InstDict] -> SolveOne-solveGen noAtoms fds insts loc iCls cts = do+solveGen :: TRef -> Bool -> [IFunDep] -> [InstDict] -> SolveOne+solveGen uniq noAtoms fds insts loc iCls cts = do -- tcTrace ("solveGen: " ++ show (iCls, cts)) -- tcTrace ("solveGen: insts=" ++ show insts)- let matches = getBestMatches $ findMatches noAtoms loc fds insts cts--- tcTrace ("solveGen: matches allMatches =" ++ showListS show (findMatches noAtoms loc fds insts cts))+ let matches = getBestMatches $ findMatches uniq noAtoms loc fds insts cts+-- tcTrace ("solveGen: matches allMatches =" ++ showListS show (findMatches uniq noAtoms loc fds insts cts)) -- tcTrace ("solveGen: matches bestMatches=" ++ showListS showMatch matches) case matches of [] -> return Nothing@@ -2707,14 +3080,60 @@ --tcTrace ("solveTypeEq eqs=" ++ show eqs) case solveEq eqs t1 t2 of Nothing -> return Nothing- Just (de, tts) -> do+ Just tts -> do let mkEq (u1, u2) = do i <- newDictIdent loc return (i, mkEqType loc u1 u2) ncs <- mapM mkEq tts- return $ Just (de, ncs, [])+ return $ Just (ETuple [], ncs, []) solveTypeEq _ _ _ = impossible +solveCoercible :: SolveOne+solveCoercible loc _iCls [t1, t2] = do+ st <- gets synTable+ extNewtypeSyns -- pretend newtypes are type synonyms+ t1' <- expandSyn t1+ t2' <- expandSyn t2+ putSynTable st+ -- walk over the types in parallel,+ -- and generate new Coercible constraints when not equal.+-- traceM $ "solveCoercible: " ++ showExprRaw t1' ++ " and " ++ showExprRaw t2'+ case genCoerce t1' t2' of+ Nothing -> return Nothing+ Just [(u1, u2)] | u1 `eqEType` t1 && u2 `eqEType` t2 -> return Nothing -- Nothing has improved+ Just tts -> do+ let mkCo (u1, u2) = do+ i <- newDictIdent loc+ return (i, mkCoercible loc u1 u2)+ ncs <- mapM mkCo tts+ return $ Just (ETuple [], ncs, [])+solveCoercible _ _ _ = impossible++genCoerce :: EType -> EType -> Maybe [(EType, EType)]+genCoerce t1 t2 | eqEType t1 t2 = Just []+genCoerce t1@(EUVar _) t2 = Just [(t1, t2)]+genCoerce t1@(EVar _) t2 = Just [(t1, t2)]+genCoerce t1 t2@(EUVar _) = Just [(t1, t2)]+genCoerce t1 t2@(EVar _) = Just [(t1, t2)]+genCoerce (EApp f1 a1) (EApp f2 a2) = (++) <$> genCoerce f1 f2 <*> genCoerce a1 a2+genCoerce _ _ = Nothing++-- Pretend newtypes are type synonyms.+-- XXX It's rather inefficient to do this over and over.+extNewtypeSyns :: T ()+extNewtypeSyns = do+ dt <- gets dataTable+ let ext (qi, Newtype (_, vs) (Constr _ _ _c et) _) = do+ -- XXX We should check that the constructor name (_c) is visible.+ -- But this is tricky since we don't know under what qualified name it+ -- it should be visible.+ let t = either (snd . head) (snd . snd . head) et+-- traceM $ "extNewtypeSyns: " ++ showIdent qi ++ show vs ++ " = " ++ showExprRaw t+ extSyn qi (EForall True vs t) -- extend synonym table+ ext _ = return ()+ mapM_ ext $ M.toList dt+ + isEUVar :: EType -> Bool isEUVar (EUVar _) = True isEUVar _ = False@@ -2739,12 +3158,15 @@ -- For each matching instance return: (subst-size, (dict-expression, new-constraints)) -- The subst-size is the size of the substitution that made the input instance match. -- It is a measure of how exact the match is.-findMatches :: Bool -> SLoc -> [IFunDep] -> [InstDict] -> [EType] -> [(Int, (Expr, [EConstraint], [Improve]))]-findMatches False _ _ _ [EUVar _] = []-findMatches _ loc fds ds its =+findMatches :: TRef -> Bool -> SLoc -> [IFunDep] -> [InstDict] -> [EType] -> [(Int, (Expr, [EConstraint], [Improve]))]+findMatches _ False _ _ _ [EUVar _] = []+findMatches uniq _ loc fds ds its = let rrr = [ (length s, (de, map (substEUVar s) ctx, imp))- | (de, ctx, ts) <- ds, Just (s, imp) <- [matchTypes loc ts its fds] ]+ | (de, ctxts) <- ds+ , let (ctx, ts) = ctxts uniq+ , Just (s, imp) <- [matchTypes loc ts its fds]+ ] in --trace ("findMatches: " ++ showListS showInstDict ds ++ "; " ++ show its ++ "; " ++ show fds ++ "; " ++ show rrr) rrr @@ -2780,12 +3202,6 @@ tm <- combineTySubsts tms -- combine all substitutions is <- combineTySubsts [ s | (True, s) <- zip ins tms] -- subst from input FDs let imp = [ (loc, substEUVar is t, t') | (True, t, t') <- zip3 outs ts ts' ] -- improvements- -- We don't allow output FDs to have tyvars that are not instantiated- let outImpTvs = metaTvs [ t | (_,t,_) <- imp ]- outTvs = metaTvs [ t | (True, t) <- zip ins ts' ] -- these tyvars were present in input positions in ts--- tcTrace $ "matchTypesFD: " ++ show (ts, ts') ++ show (ins, outs) ++ show (tm, imp) ++ show (outTvs, outImpTvs)- when (not (null (outImpTvs \\ outTvs))) $- errorMessage loc $ "free type variable in output fundep" pure (tm, imp) -- Match two types, instantiate variables in the first type.@@ -2826,7 +3242,7 @@ getBestMatches ams = let isDictArg (EVar i) = (adictPrefix ++ uniqIdentSep) `isPrefixOf` unIdent i isDictArg _ = True- !(args, insts) = partition (\ (_, (ei, _, _)) -> isDictArg ei) ams+ (args, insts) = partition (\ (_, (ei, _, _)) -> isDictArg ei) ams pick ms = let b = minimum (map fst ms) -- minimum substitution size in [ ec | (s, ec) <- ms, s == b ] -- pick out the smallest@@ -2852,30 +3268,57 @@ addConstraint d (mkEqType loc t1 t2) mkEqType :: SLoc -> EType -> EType -> EConstraint-mkEqType loc t1 t2 = EApp (EApp (EVar (mkIdentSLoc loc nameTypeEq)) t1) t2+mkEqType loc t1 t2 = eAppI2 (mkIdentSLoc loc nameTypeEq) t1 t2 +mkCoercible :: SLoc -> EType -> EType -> EConstraint+mkCoercible loc t1 t2 = eAppI2 (mkIdentSLoc loc nameCoercible) t1 t2+ -- Possibly solve a type equality.-solveEq :: TypeEqTable -> EType -> EType -> Maybe (Expr, [(EType, EType)])+-- Just normalize both types and compare.+solveEq :: TypeEqTable -> EType -> EType -> Maybe [(EType, EType)] --solveEq eqs t1 t2 | trace ("solveEq: " ++ show (t1,t2) ++ show eqs) False = undefined-solveEq eqs t1 t2 | t1 `eqEType` t2 = Just (ETuple [], [])- | elemBy eqTyTy (t1, t2) eqs = Just (ETuple [], [])+solveEq eqs t1 t2 | normTypeEq eqs t1 `eqEType` normTypeEq eqs t2 = Just [] | otherwise = case (t1, t2) of- (EApp f1 a1, EApp f2 a2) -> Just (ETuple [], [(f1, f2), (a1, a2)])+ (EApp f1 a1, EApp f2 a2) -> Just [(f1, f2), (a1, a2)] _ -> Nothing -- Add the equality t1~t2.--- The type table is always the symmetric&transitive closure of all equalities.--- This isn't very efficient, but it's simple.+-- Type equalities are saved as a rewrite system where all the rules+-- have the form+-- v -> rhs+-- where v is a type variable (rigid or skolem), and the rhs contains+-- only type constructors and type variables that are not the LHS of any rule.+-- To find out if two type are equal according to the known equalites,+-- we just normalize both type using the rewrite rules (which is just a substitution).+-- When we get TypeFamilies the LHS has to be a type expression as well.+-- And the rewrite rules can probably be obtained with Knuth-Bendix completion+-- of the equalities.+-- Note: there should be no meta variables in t1 and t2.+-- XXX This guaranteed by how it's called, but I'm not sure it always works properly. addTypeEq :: EType -> EType -> TypeEqTable -> TypeEqTable-addTypeEq t1 t2 aeqs | t1 `eqEType` t2 || elemBy eqTyTy (t1, t2) aeqs || elemBy eqTyTy (t2, t1) aeqs = aeqs- | otherwise = (t1, t2) : (t2, t1) : -- symmetry- trans t1 t2 aeqs ++ trans t2 t1 aeqs ++ -- transitivity- aeqs- where trans a1 a2 eqs = [ ab | (b1, b2) <- eqs, eqEType a2 b1, ab <- [(a1, b2), (b2, a1)] ]+addTypeEq t1 t2 aeqs =+ let deref (EVar i) | Just t <- lookup i aeqs = t+ deref (ESign t _) = t+ deref t = t+ t1' = deref t1+ t2' = deref t2+ isVar = not . isConIdent+ in case (t1', t2') of+ (EVar i1, EVar i2) | isVar i1 && isVar i2 ->+ if i1 < i2 then (i2, t1') : aeqs -- always point smaller to bigger+ else if i1 > i2 then (i1, t2') : aeqs+ else aeqs+ (EVar i1, _) | isVar i1 -> (i1, t2') : aeqs+ (_, EVar i2) | isVar i2 -> (i2, t1') : aeqs+ (EApp f1 a1, EApp f2 a2) -> addTypeEq f1 f2 (addTypeEq a1 a2 aeqs)+ _ | t1' `eqEType` t2 -> aeqs+ _ -> errorMessage (getSLoc t1) $ "inconsisten type equality " ++ showEType t1' ++ " ~ " ++ showEType t2' -eqTyTy :: (EType, EType) -> (EType, EType) -> Bool-eqTyTy (t1, t2) (u1, u2) = eqEType t1 u1 && eqEType t2 u2+-- Normalize a type with the known type equalties.+-- For now, it's just substitution.+normTypeEq :: TypeEqTable -> EType -> EType+normTypeEq = subst ---------------------
src/Text/ParserComb.hs view
@@ -1,6 +1,6 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license.-{-# OPTIONS_GHC -Wno-type-defaults #-}+{-# OPTIONS_GHC -Wno-type-defaults -Wno-noncanonical-monad-instances #-} {-# LANGUAGE FunctionalDependencies #-} module Text.ParserComb( Prsr, runPrsr,@@ -19,8 +19,9 @@ TokenMachine(..), mapTokenState, ) where-import Prelude(); import MHSPrelude+import Prelude(); import MHSPrelude hiding (fail) import Control.Applicative+import Control.Monad.Fail import Control.Monad data LastFail t@@ -60,7 +61,7 @@ data Res tm t a = Many [(a, tm)] (LastFail t) --deriving (Show) -data Prsr tm t a = P (tm -> Res tm t a)+newtype Prsr tm t a = P (tm -> Res tm t a) --instance Show (Prsr s t a) where show _ = "<<Prsr>>" runP :: forall tm t a . Prsr tm t a -> (tm -> Res tm t a)@@ -69,17 +70,18 @@ mapTokenState :: forall tm t . (tm -> tm) -> Prsr tm t () mapTokenState f = P (\ tm -> Many [((), f tm)] noFail) -instance forall tm t . Functor (Prsr tm t) where+instance Functor (Prsr tm t) where fmap f p = P $ \ t -> case runP p t of Many aus lf -> Many [ (f a, u) | (a, u) <- aus ] lf -instance forall tm t . Applicative (Prsr tm t) where+instance Applicative (Prsr tm t) where pure a = P $ \ t -> Many [(a, t)] noFail (<*>) = ap- (*>) p k = p >>= \ _ -> k+-- Hugs does not have *> here+-- (*>) p k = p >>= \ _ -> k -instance forall tm t . Monad (Prsr tm t) where+instance Monad (Prsr tm t) where (>>=) p k = P $ \ t -> case runP p t of Many aus plf ->@@ -87,12 +89,13 @@ lfs = map (\ (Many _ lf) -> lf) ms rrs = [ r | Many rs _ <- ms, r <- rs ] in Many rrs (longests (plf : lfs))+ (>>) p k = p >>= \ _ -> k return = pure -instance forall t tm . TokenMachine tm t => MonadFail (Prsr tm t) where+instance TokenMachine tm t => MonadFail (Prsr tm t) where fail m = P $ \ ts -> Many [] (LastFail (tmLeft ts) (firstToken ts) [m]) -instance forall t tm . TokenMachine tm t => Alternative (Prsr tm t) where+instance TokenMachine tm t => Alternative (Prsr tm t) where empty = P $ \ ts -> Many [] (LastFail (tmLeft ts) (firstToken ts) ["empty"]) (<|>) p q = P $ \ t ->@@ -101,6 +104,10 @@ case runP q t of Many b lfb -> Many (a ++ b) (longest lfa lfb) +instance TokenMachine tm t => MonadPlus (Prsr tm t) where+ mzero = empty+ mplus = (<|>)+ -- Left biased choice infixl 3 <|< (<|<) :: forall tm t a . Prsr tm t a -> Prsr tm t a -> Prsr tm t a@@ -189,10 +196,10 @@ choice ps = foldr1 (<|>) ps sepBy1 :: forall tm t a sep . TokenMachine tm t => Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a]-sepBy1 p sep = (:) <$> p <*> many (sep *> p)+sepBy1 p sep = (:) <$> p <*> many (sep >> p) esepBy1 :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a]-esepBy1 p sep = (:) <$> p <*> emany (sep *> p)+esepBy1 p sep = (:) <$> p <*> emany (sep >> p) esepBy :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] esepBy p sep = esepBy1 p sep <|< pure []@@ -201,5 +208,5 @@ esepEndBy p sep = esepEndBy1 p sep <|< pure [] esepEndBy1 :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a]-esepEndBy1 p sep = (:) <$> p <*> ((sep *> esepEndBy p sep) <|< pure [])+esepEndBy1 p sep = (:) <$> p <*> ((sep >> esepEndBy p sep) <|< pure [])
src/runtime/config-mingw-64.h view
@@ -43,6 +43,22 @@ */ #define FFS __builtin_ffsll +#define POPCOUNT __builtin_popcountll++#include <inttypes.h>++static inline uint64_t clz(uint64_t x) {+ if (x == 0) return 64;+ return __builtin_clzll(x);+}+#define CLZ clz++static inline uint64_t ctz(uint64_t x) {+ if (x == 0) return 64;+ return __builtin_ctzll(x);+}+#define CTZ ctz+ /* * This is the character used for comma-separation in printf. * Defaults to "'".
src/runtime/config-stm32f4.h view
@@ -142,6 +142,8 @@ } #define FFS ffs +#define CLZ __CLZ+ #define FFI_EXTRA \ { "set_led", (funptr_t)set_led, FFI_IIV }, \ { "busy_wait", (funptr_t)busy_wait, FFI_IV },
src/runtime/config-windows-64.h view
@@ -62,6 +62,32 @@ } #define FFS ffs +#if defined(_M_X64)+#define POPCOUNT __popcnt64+#elif defined(_M_IX86)+#define POPCOUNT __popcnt+#endif++static inline uint64_t clz(uint64_t x) {+ unsigned long count;+ if (_BitScanReverse64(&count, x)) {+ return 63 - (uint64_t)count;+ } else {+ return 64;+ }+}+#define CLZ clz++static inline uint64_t ctz(uint64_t x) {+ unsigned long count;+ if (_BitScanForward64(&count, x)) {+ return (uint64_t)count;+ } else {+ return 64;+ }+}+#define CTZ ctz+ /* * This is the character used for comma-separation in printf. * Defaults to "'".
src/runtime/eval.c view
@@ -1,6 +1,10 @@ /* Copyright 2023 Lennart Augustsson * See LICENSE file for full license. */+#if !defined(WANT_GMP)+#define WANT_GMP 0+#endif+ #include <inttypes.h> #if WANT_STDIO #include <stdio.h>@@ -22,6 +26,9 @@ #if WANT_TIME #include <time.h> #endif+#if WANT_GMP+#include <gmp.h>+#endif #if WANT_MD5 #include "md5.h"@@ -127,6 +134,60 @@ } #endif /* !defined(FFS) */ +#if !defined(POPCOUNT)+uvalue_t POPCOUNT(uvalue_t x) {+#if defined(__GNUC__)+ return __builtin_popcountl(x);+#elif defined(__clang__) && __has_builtin(__builtin_popcountl)+ return __builtin_popcountl(x);+#else+ uvalue_t count = 0;+ while (x) {+ x = x & (x - 1); // clear lowest 1 bit+ count += 1;+ }+ return count;+#endif+}+#endif++#if !defined(CLZ)+uvalue_t CLZ(uvalue_t x) {+#if defined(__GNUC__)+ if (x == 0) return WORD_SIZE;+ return __builtin_clzl(x);+#elif defined(__clang__) && __has_builtin(__builtin_clzl)+ if (x == 0) return WORD_SIZE;+ return __builtin_clzl(x);+#else+ value_t count = WORD_SIZE;+ while (x) {+ x = x >> 1;+ count -= 1;+ }+ return count;+#endif+}+#endif++#if !defined(CTZ)+uvalue_t CTZ(uvalue_t x) {+ if (x == 0) return WORD_SIZE;+#if defined(__GNUC__)+ return __builtin_ctzl(x);+#elif defined(__clang__) && __has_builtin(__builtin_ctzl)+ return __builtin_ctzl(x);+#else+ uvalue_t count = 0;+ while ((x & 1) == 0) {+ x = x >> 1;+ count += 1;+ }+ return count;+#endif+}+#endif+ #if !defined(WANT_ARGS) #define WANT_ARGS 1 #endif@@ -183,6 +244,7 @@ T_K2, T_K3, T_K4, T_CCB, T_ADD, T_SUB, T_MUL, T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM, T_NEG, T_AND, T_OR, T_XOR, T_INV, T_SHL, T_SHR, T_ASHR,+ T_POPCOUNT, T_CLZ, T_CTZ, T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE, T_ICMP, T_UCMP, T_FPADD, T_FP2P, T_FPNEW, T_FPFIN, // T_FPSTR, T_TOPTR, T_TOINT, T_TODBL, T_TOFUNPTR,@@ -200,12 +262,12 @@ T_IO_CCBIND, T_IO_SERIALIZE, T_IO_DESERIALIZE, T_IO_STDIN, T_IO_STDOUT, T_IO_STDERR, T_IO_GETARGREF,- T_IO_PERFORMIO, T_IO_GETTIMEMILLI, T_IO_PRINT, T_CATCH,+ T_IO_PERFORMIO, T_IO_PRINT, T_CATCH, T_IO_CCALL, T_IO_GC, T_DYNSYM, T_NEWCASTRINGLEN, T_PEEKCASTRING, T_PEEKCASTRINGLEN, T_BSAPPEND, T_BSAPPEND3, T_BSEQ, T_BSNE, T_BSLT, T_BSLE, T_BSGT, T_BSGE, T_BSCMP, T_BSPACK, T_BSUNPACK, T_BSLENGTH, T_BSSUBSTR,- T_BSFROMUTF8, T_BSTOUTF8, T_BSHEADUTF8,+ T_BSFROMUTF8, T_BSTOUTF8, T_BSHEADUTF8, T_BSTAILUTF8, T_BSAPPENDDOT, T_LAST_TAG, };@@ -217,6 +279,7 @@ "K2", "K3", "K4", "CCB", "ADD", "SUB", "MUL", "QUOT", "REM", "SUBR", "UQUOT", "UREM", "NEG", "AND", "OR", "XOR", "INV", "SHL", "SHR", "ASHR",+ "POPCOUNT", "CLZ", "CTZ", "EQ", "NE", "LT", "LE", "GT", "GE", "ULT", "ULE", "UGT", "UGE", "FPADD", "FP2P", "FPNEW", "FPFIN", "TOPTR", "TOINT", "TODBL", "TOFUNPTR",@@ -233,7 +296,7 @@ "C'BIND", "IO_SERIALIZE", "IO_DESERIALIZE", "IO_STDIN", "IO_STDOUT", "IO_STDERR", "IO_GETARGREF",- "IO_PERFORMIO", "IO_GETTIMEMILLI", "IO_PRINT", "CATCH",+ "IO_PERFORMIO", "IO_PRINT", "CATCH", "IO_CCALL", "IO_GC", "DYNSYM", "NEWCASTRINGLEN", "PEEKCASTRING", "PEEKCASTRINGLEN", "BSFROMUTF8",@@ -369,9 +432,9 @@ NODEPTR *stack; stackptr_t stack_ptr = -1; #if STACKOVL-#define PUSH(x) do { if (stack_ptr >= stack_size-1) ERR("stack overflow"); stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#define PUSH(x) do { if (stack_ptr >= stack_size-1) stackerr(); stack[++stack_ptr] = (x); MAXSTACK; } while(0) #else /* STACKOVL */-#define PUSH(x) do { stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#define PUSH(x) do { stack[++stack_ptr] = (x); MAXSTACK; } while(0) #endif /* STACKOVL */ #define TOP(n) stack[stack_ptr - (n)] #define POP(n) stack_ptr -= (n)@@ -411,6 +474,14 @@ EXIT(1); } +NORETURN+void+stackerr(void)+{+ ERR("stack overflow");+ EXIT(1);+}+ /***************************************/ #include "bfile.c"@@ -618,14 +689,15 @@ /* Needed during reduction */ NODEPTR intTable[HIGH_INT - LOW_INT];-NODEPTR combFalse, combTrue, combUnit, combCons, combPair;-NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND;+NODEPTR combK, combTrue, combUnit, combCons, combPair;+NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND, combB, combC; NODEPTR combLT, combEQ, combGT;-NODEPTR combShowExn, combU, combK2;+NODEPTR combShowExn, combU, combK2, combK3; NODEPTR combBININT1, combBININT2, combUNINT1; NODEPTR combBINDBL1, combBINDBL2, combUNDBL1; NODEPTR combBINBS1, combBINBS2; NODEPTR comb_stdin, comb_stdout, comb_stderr;+#define combFalse combK /* One node of each kind for primitives, these are never GCd. */ /* We use linear search in this, because almost all lookups@@ -675,6 +747,9 @@ { "shl", T_SHL }, { "shr", T_SHR }, { "ashr", T_ASHR },+ { "popcount", T_POPCOUNT },+ { "clz", T_CLZ },+ { "ctz", T_CTZ }, #if WANT_FLOAT { "f+" , T_FADD, T_FADD}, { "f-" , T_FSUB, T_FSUB},@@ -735,6 +810,7 @@ { "fromUTF8", T_BSFROMUTF8 }, { "toUTF8", T_BSTOUTF8 }, { "headUTF8", T_BSHEADUTF8 },+ { "tailUTF8", T_BSTAILUTF8 }, /* IO primops */ { "IO.>>=", T_IO_BIND }, { "IO.>>", T_IO_THEN },@@ -747,7 +823,6 @@ { "IO.stdout", T_IO_STDOUT }, { "IO.stderr", T_IO_STDERR }, { "IO.getArgRef", T_IO_GETARGREF },- { "IO.getTimeMilli", T_IO_GETTIMEMILLI }, { "IO.performIO", T_IO_PERFORMIO }, { "IO.gc", T_IO_GC }, { "raise", T_RAISE },@@ -814,15 +889,18 @@ //MARK(n) = MARKED; SETTAG(n, primops[j].tag); switch (primops[j].tag) {- case T_K: combFalse = n; break;+ case T_K: combK = n; break; case T_A: combTrue = n; break; case T_I: combUnit = n; break; case T_O: combCons = n; break; case T_P: combPair = n; break; case T_CC: combCC = n; break;+ case T_B: combB = n; break;+ case T_C: combC = n; break; case T_Z: combZ = n; break; case T_U: combU = n; break; case T_K2: combK2 = n; break;+ case T_K3: combK3 = n; break; case T_IO_BIND: combIOBIND = n; break; case T_IO_RETURN: combIORETURN = n; break; case T_IO_CCBIND: combIOCCBIND = n; break;@@ -848,15 +926,18 @@ NODEPTR n = HEAPREF(heap_start++); SETTAG(n, t); switch (t) {- case T_K: combFalse = n; break;+ case T_K: combK = n; break; case T_A: combTrue = n; break; case T_I: combUnit = n; break; case T_O: combCons = n; break; case T_P: combPair = n; break; case T_CC: combCC = n; break;+ case T_B: combB = n; break;+ case T_C: combC = n; break; case T_Z: combZ = n; break; case T_U: combU = n; break; case T_K2: combK2 = n; break;+ case T_K3: combK3 = n; break; case T_IO_BIND: combIOBIND = n; break; case T_IO_RETURN: combIORETURN = n; break; case T_IO_CCBIND: combIOCCBIND = n; break;@@ -928,6 +1009,7 @@ #if GCRED int red_a, red_k, red_i, red_int, red_flip; #endif+int red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r; //counter_t mark_depth; //counter_t max_mark_depth = 0;@@ -1589,13 +1671,20 @@ struct forptr *mkForPtr(struct bytestring bs); +/* Create a forptr that has a free() finalizer. */+struct forptr *+mkForPtrFree(struct bytestring str)+{+ struct forptr *fp = mkForPtr(str); /* Create a foreign pointer */+ fp->finalizer->final = (HsFunPtr)FREE; /* and set the finalizer to just free it */+ return fp;+}+ NODEPTR mkStrNode(struct bytestring str) { NODEPTR n = alloc_node(T_BSTR);- struct forptr *fp = mkForPtr(str); /* Create a foreign pointer */- fp->finalizer->final = (HsFunPtr)FREE; /* and set the finalizer to just free it */- FORPTR(n) = fp;+ FORPTR(n) = mkForPtrFree(str); //printf("mkForPtr n=%p fp=%p %d %s payload.string=%p\n", n, fp, (int)FORPTR(n)->payload.size, (char*)FORPTR(n)->payload.string, FORPTR(n)->payload.string); return n; }@@ -1697,6 +1786,8 @@ case '\n': continue; }+ if (num_free < 3)+ ERR("out of heap reading code"); GCCHECK(1); switch(c) { case '@':@@ -2138,6 +2229,9 @@ case T_SHL: putsb("shl", f); break; case T_SHR: putsb("shr", f); break; case T_ASHR: putsb("ashr", f); break;+ case T_POPCOUNT: putsb("popcount", f); break;+ case T_CLZ: putsb("clz", f); break;+ case T_CTZ: putsb("ctz", f); break; #if WANT_FLOAT case T_FADD: putsb("f+", f); break; case T_FSUB: putsb("f-", f); break;@@ -2197,7 +2291,6 @@ case T_IO_PRINT: putsb("IO.print", f); break; case T_IO_DESERIALIZE: putsb("IO.deserialize", f); break; case T_IO_GETARGREF: putsb("IO.getArgRef", f); break;- case T_IO_GETTIMEMILLI: putsb("IO.getTimeMilli", f); break; case T_IO_PERFORMIO: putsb("IO.performIO", f); break; case T_IO_GC: putsb("IO.gc", f); break; case T_RAISE: putsb("raise", f); break;@@ -2219,6 +2312,7 @@ case T_BSFROMUTF8: putsb("fromUTF8", f); break; case T_BSTOUTF8: putsb("toUTF8", f); break; case T_BSHEADUTF8: putsb("headUTF8", f); break;+ case T_BSTAILUTF8: putsb("tailUTF8", f); break; case T_TICK: putb('!', f); print_string(f, tick_table[GETVALUE(n)].tick_name);@@ -2364,7 +2458,7 @@ final_root = fin; fin->final = 0; fin->arg = bs.string;- fin->size = bs.size;+ fin->size = bs.size; /* The size is not really needed */ fin->back = fp; fin->marked = 0; fp->next = 0;@@ -2621,10 +2715,12 @@ return FORPTR(n); } -/* Evaluate a string, returns a newly allocated buffer. */-/* XXX this is cheating, should use continuations */-/* XXX the malloc()ed string is leaked if we yield in here. */-/* Does UTF-8 encoding */+/* Evaluate a string, returns a newly allocated buffer.+ * XXX this is cheating, should use continuations.+ * XXX the malloc()ed string is leaked if we yield in here.+ * Caller is responsible to free().+ * Does UTF-8 encoding.+ */ struct bytestring evalstring(NODEPTR n) {@@ -2973,7 +3069,8 @@ /* Reset stack pointer and return. */ #define RET do { goto ret; } while(0) /* Check that there are at least n arguments, return if not. */-#define CHECK(n) do { if (stack_ptr - stk < (n)) RET; } while(0)+#define HASNARGS(n) (stack_ptr - stk >= (n))+#define CHECK(n) do { if (!HASNARGS(n)) RET; } while(0) #define SETIND(n, x) do { SETTAG((n), T_IND); INDIR((n)) = (x); } while(0) #define GOIND(x) do { SETIND(n, (x)); goto ind; } while(0)@@ -2999,6 +3096,7 @@ #define SETPTR(n,r) do { SETTAG((n), T_PTR); PTR(n) = (r); } while(0) #define SETFUNPTR(n,r) do { SETTAG((n), T_FUNPTR); FUNPTR(n) = (r); } while(0) #define SETFORPTR(n,r) do { SETTAG((n), T_FORPTR); FORPTR(n) = (r); } while(0)+#define SETBSTR(n,r) do { SETTAG((n), T_BSTR); FORPTR(n) = (r); } while(0) #define OPINT1(e) do { CHECK(1); xi = evalint(ARG(TOP(0))); e; POP(1); n = TOP(-1); } while(0); #define OPPTR2(e) do { CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0); #define CMPP(op) do { OPPTR2(r = xp op yp); GOIND(r ? combTrue : combFalse); } while(0)@@ -3027,6 +3125,12 @@ case T_ARR: RET; case T_BADDYN: ERR1("FFI unknown %s", CSTR(n)); + /*+ * Some of these reductions, (e.g., Z x y = K (x y)) are there to avoid+ * that increase in arity that some "optimizations" in Abstract.hs+ * stop reductions from happening. This can be important for "full laziness".+ * In practice, these reductions almost never happen, but there they are anyway. :)+ */ case T_S: GCCHECK(2); CHKARG3; GOAP(new_ap(x, z), new_ap(y, z)); /* S x y z = x z (y z) */ case T_SS: GCCHECK(3); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), new_ap(z, w)); /* S' x y z w = x (y w) (z w) */ case T_K: CHKARG2; GOIND(x); /* K x y = *x */@@ -3035,17 +3139,31 @@ case T_I: CHKARG1; GOIND(x); /* I x = *x */ case T_Y: CHKARG1; GOAP(x, n); /* n@(Y x) = x n */ case T_B: GCCHECK(1); CHKARG3; GOAP(x, new_ap(y, z)); /* B x y z = x (y z) */- case T_BB: GCCHECK(2); CHKARG4; GOAP(new_ap(x, y), new_ap(z, w)); /* B' x y z w = x y (z w) */- case T_Z: CHKARG3; GOAP(x, y); /* Z x y z = x y */+ case T_BB: if (!HASNARGS(4)) {+ GCCHECK(1); CHKARG2; red_bb++; GOAP(combB, new_ap(x, y)); } else { /* B' x y = B (x y) */+ GCCHECK(2); CHKARG4; GOAP(new_ap(x, y), new_ap(z, w)); } /* B' x y z w = x y (z w) */+ case T_Z: if (!HASNARGS(3)) {+ GCCHECK(1); CHKARG2; red_z++; GOAP(combK, new_ap(x, y)); } else { /* Z x y = K (x y) */+ CHKARG3; GOAP(x, y); } /* Z x y z = x y */ case T_C: GCCHECK(1); CHKARG3; GOAP(new_ap(x, z), y); /* C x y z = x z y */ case T_CC: GCCHECK(2); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), z); /* C' x y z w = x (y w) z */ case T_P: GCCHECK(1); CHKARG3; GOAP(new_ap(z, x), y); /* P x y z = z x y */- case T_R: GCCHECK(1); CHKARG3; GOAP(new_ap(y, z), x); /* R x y z = y z x */+ case T_R: if(!HASNARGS(3)) {+ GCCHECK(1); CHKARG2; red_r++; GOAP(new_ap(combC, y), x); } else { /* R x y = C y x */+ GCCHECK(1); CHKARG3; GOAP(new_ap(y, z), x); } /* R x y z = y z x */ case T_O: GCCHECK(1); CHKARG4; GOAP(new_ap(w, x), y); /* O x y z w = w x y */- case T_K2: CHKARG3; GOIND(x); /* K2 x y z = *x */- case T_K3: CHKARG4; GOIND(x); /* K3 x y z w = *x */- case T_K4: CHECK(5); POP(5); n = TOP(-1); x = ARG(TOP(-5)); GOIND(x); /* K4 x y z w v = *x */- case T_CCB: GCCHECK(2); CHKARG4; GOAP(new_ap(x, z), new_ap(y, w)); /* C'B x y z w = x z (y w) */+ case T_K2: if (!HASNARGS(3)) {+ CHKARG2; red_k2++; GOAP(combK, x); } else { /* K2 x y = K x */+ CHKARG3; GOIND(x); } /* K2 x y z = *x */+ case T_K3: if (!HASNARGS(4)) {+ CHKARG2; red_k3++; GOAP(combK2, x); } else { /* K3 x y = K2 x */+ CHKARG4; GOIND(x); } /* K3 x y z w = *x */+ case T_K4: if (!HASNARGS(5)) {+ CHKARG2; red_k4++; GOAP(combK3, x); } else { /* K4 x y = K3 x */+ CHECK(5); POP(5); n = TOP(-1); x = ARG(TOP(-5)); GOIND(x); } /* K4 x y z w v = *x */+ case T_CCB: if (!HASNARGS(4)) {+ GCCHECK(2); CHKARG3; red_ccb++; GOAP(new_ap(combB, new_ap(x, z)), y); } else { /* C'B x y z = B (x z) y */+ GCCHECK(2); CHKARG4; GOAP(new_ap(x, z), new_ap(y, w)); } /* C'B x y z w = x z (y w) */ /* * Strict primitives require evaluating the arguments before we can proceed.@@ -3157,6 +3275,9 @@ goto top; case T_NEG: case T_INV:+ case T_POPCOUNT:+ case T_CLZ:+ case T_CTZ: CHECK(1); n = ARG(TOP(0)); PUSH(combUNINT1);@@ -3254,8 +3375,7 @@ struct bytestring bs = evalstring(ARG(TOP(0))); POP(1); n = TOP(-1);- SETTAG(n, T_BSTR);- FORPTR(n) = mkForPtr(bs);+ SETBSTR(n, mkForPtrFree(bs)); RET; } @@ -3268,6 +3388,21 @@ SETINT(n, headutf8(BSTR(x), (void**)0)); RET; + case T_BSTAILUTF8:+ CHECK(1);+ x = evali(ARG(TOP(0)));+ if (GETTAG(x) != T_BSTR) ERR("TAILUTF8");+ POP(1);+ n = TOP(-1);+ { xfp = FORPTR(x); /* foreign pointer to the string */+ void *out;+ (void)headutf8(xfp->payload, &out); /* skip one UTF8 character */+ xi = (char*)out - (char*)xfp->payload.string; /* offset */+ yi = xfp->payload.size - xi; /* remaining length */+ SETBSTR(n, bssubstr(xfp, xi, yi)); /* make a substring */+ }+ RET;+ case T_BSFROMUTF8: if (doing_rnf) RET; CHECK(1);@@ -3290,15 +3425,12 @@ GOIND(bsunpack(BSTR(x))); case T_BSPACK:- {- CHECK(1);- struct bytestring bs = evalbytestring(ARG(TOP(0)));- POP(1);- n = TOP(-1);- SETTAG(n, T_BSTR);- FORPTR(n) = mkForPtr(bs);- RET;- }+ CHECK(1);+ struct bytestring rbs = evalbytestring(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETBSTR(n, mkForPtrFree(rbs));+ RET; case T_BSSUBSTR: CHECK(3);@@ -3307,8 +3439,7 @@ yi = evalint(ARG(TOP(2))); POP(3); n = TOP(-1);- SETTAG(n, T_BSTR);- FORPTR(n) = bssubstr(xfp, xi, yi);+ SETBSTR(n, bssubstr(xfp, xi, yi)); RET; case T_BSLENGTH:@@ -3390,7 +3521,6 @@ case T_IO_PRINT: case T_IO_DESERIALIZE: case T_IO_GETARGREF:- case T_IO_GETTIMEMILLI: case T_IO_CCALL: case T_CATCH: case T_NEWCASTRINGLEN:@@ -3518,9 +3648,12 @@ n = TOP(-1); unint: switch (GETTAG(p)) {- case T_IND: p = INDIR(p); goto unint;- case T_NEG: ru = -xu; break;- case T_INV: ru = ~xu; break;+ case T_IND: p = INDIR(p); goto unint;+ case T_NEG: ru = -xu; break;+ case T_INV: ru = ~xu; break;+ case T_POPCOUNT: ru = POPCOUNT(xu); break;+ case T_CLZ: ru = CLZ(xu); break;+ case T_CTZ: ru = CTZ(xu); break; default: //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0)))); ERR("UNINT");@@ -3639,8 +3772,7 @@ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0)))); ERR("BINBS"); }- SETTAG((n), T_BSTR);- FORPTR(n) = mkForPtr(rbs);+ SETBSTR(n, mkForPtrFree(rbs)); goto ret; default:@@ -3794,6 +3926,7 @@ case T_IO_DESERIALIZE: CHECKIO(1); ptr = (struct BFILE*)evalptr(ARG(TOP(1)));+ gc(); /* make sure we have room. GC during parse is dodgy. */ n = parse_top(ptr); RETIO(n); #endif@@ -4120,6 +4253,9 @@ } prog = parse_top(bf); closeb(bf);+#if WANT_STDIO+ file_size = combexprlen;+#endif } else { #if WANT_STDIO prog = parse_file(inname, &file_size);@@ -4202,6 +4338,7 @@ (double)gc_scan_time / 1000); #if GCRED PRINT(" GC reductions A=%d, K=%d, I=%d, int=%d flip=%d\n", red_a, red_k, red_i, red_int, red_flip);+ PRINT(" special reductions B'=%d K4=%d K3=%d K2=%d C'B=%d, Z=%d, R=%d\n", red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r); #endif } #endif /* WANT_STDIO */@@ -4242,6 +4379,7 @@ MHS_FROM(mhs_from_Word, SETINT, uvalue_t); MHS_FROM(mhs_from_Word8, SETINT, uvalue_t); MHS_FROM(mhs_from_Ptr, SETPTR, void*);+MHS_FROM(mhs_from_ForPtr, SETFORPTR, struct forptr *); MHS_FROM(mhs_from_FunPtr, SETFUNPTR, HsFunPtr); MHS_FROM(mhs_from_CChar, SETINT, char); MHS_FROM(mhs_from_CSChar, SETINT, signed char);@@ -4337,6 +4475,7 @@ void mhs_addr_closeb(int s) { mhs_from_FunPtr(s, 0, (HsFunPtr)&closeb); } void mhs_flushb(int s) { flushb(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); } void mhs_fopen(int s) { mhs_from_Ptr(s, 2, fopen(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+ void mhs_getb(int s) { mhs_from_Int(s, 1, getb(mhs_to_Ptr(s, 0))); } void mhs_putb(int s) { putb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); } void mhs_ungetb(int s) { ungetb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }@@ -4437,6 +4576,72 @@ void mhs_getcwd(int s) { mhs_from_Ptr(s, 2, getcwd(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); } #endif /* WANT_DIR */ +/* Use this to detect if we have (and want) GMP or not. */+void mhs_want_gmp(int s) { mhs_from_Int(s, 0, WANT_GMP); }++#if WANT_GMP+void+free_mpz(void *p)+{+ /* printf("free_mpz %p\n", p);*/+ mpz_clear(p); /* free any extra storage */+ FREE(p); /* and free the mpz itself */+}++/* Allocate an initialize a GMP integer */+struct forptr *+new_mpz(void)+{+#if 0+ {+ static int done = 0;+ if (!done) {+ printf("GMP\n");+ done = 1;+ }+ }+#endif+ mpz_ptr p = MALLOC(sizeof(*p));+ if (!p) memerr();+ mpz_init(p);+ struct forptr *fp = mkForPtrP(p);+ fp->finalizer->final = (HsFunPtr)free_mpz;+ /* printf("new_mpz %p %p\n", p, fp); */+ return fp;+}++#if 0+void+print_mpz(mpz_ptr p)+{+ mpz_out_str(stdout, 10, p);+}+#endif++void mhs_new_mpz(int s) { mhs_from_ForPtr(s, 0, new_mpz()); }++/* Stubs for GMP functions */+void mhs_mpz_abs(int s) { mpz_abs(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_mpz_add(int s) { mpz_add(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_and(int s) { mpz_and(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_cmp(int s) { mhs_from_Int(s, 2, mpz_cmp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+void mhs_mpz_get_d(int s) { mhs_from_FloatW(s, 1, mpz_get_d(mhs_to_Ptr(s, 0))); }+void mhs_mpz_get_si(int s) { mhs_from_Int(s, 1, mpz_get_si(mhs_to_Ptr(s, 0))); }+void mhs_mpz_get_ui(int s) { mhs_from_Word(s, 1, mpz_get_ui(mhs_to_Ptr(s, 0))); }+void mhs_mpz_init_set_si(int s) { mpz_init_set_si(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+void mhs_mpz_init_set_ui(int s) { mpz_init_set_ui(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }+void mhs_mpz_ior(int s) { mpz_ior(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_mul(int s) { mpz_mul(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_mul_2exp(int s) { mpz_mul_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_neg(int s) { mpz_neg(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_mpz_popcount(int s) { mhs_from_Int(s, 1, mpz_popcount(mhs_to_Ptr(s, 0))); }+void mhs_mpz_sub(int s) { mpz_sub(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_tdiv_q_2exp(int s) { mpz_tdiv_q_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }+void mhs_mpz_tdiv_qr(int s) { mpz_tdiv_qr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2), mhs_to_Ptr(s, 3)); mhs_from_Unit(s, 4); }+void mhs_mpz_tstbit(int s) { mhs_from_Int(s, 2, mpz_tstbit(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }+void mhs_mpz_xor(int s) { mpz_xor(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }+#endif /* WANT_GMP */+ struct ffi_entry ffi_table[] = { { "GETRAW", mhs_GETRAW}, { "GETTIMEMILLI", mhs_GETTIMEMILLI},@@ -4559,6 +4764,29 @@ { "mkdir", mhs_mkdir}, { "getcwd", mhs_getcwd}, #endif /* WANT_DIR */+{ "want_gmp", mhs_want_gmp},+#if WANT_GMP+{ "new_mpz", mhs_new_mpz},+{ "mpz_abs", mhs_mpz_abs},+{ "mpz_add", mhs_mpz_add},+{ "mpz_and", mhs_mpz_and},+{ "mpz_cmp", mhs_mpz_cmp},+{ "mpz_get_d", mhs_mpz_get_d},+{ "mpz_get_si", mhs_mpz_get_si},+{ "mpz_get_ui", mhs_mpz_get_ui},+{ "mpz_init_set_si", mhs_mpz_init_set_si},+{ "mpz_init_set_ui", mhs_mpz_init_set_ui},+{ "mpz_ior", mhs_mpz_ior},+{ "mpz_mul", mhs_mpz_mul},+{ "mpz_mul_2exp", mhs_mpz_mul_2exp},+{ "mpz_neg", mhs_mpz_neg},+{ "mpz_popcount", mhs_mpz_popcount},+{ "mpz_sub", mhs_mpz_sub},+{ "mpz_tdiv_q_2exp", mhs_mpz_tdiv_q_2exp},+{ "mpz_tdiv_qr", mhs_mpz_tdiv_qr},+{ "mpz_tstbit", mhs_mpz_tstbit},+{ "mpz_xor", mhs_mpz_xor},+#endif /* WANT_GMP */ { 0,0 } };
src/runtime/mhsffi.h view
@@ -32,6 +32,7 @@ extern struct ffi_entry *xffi_table; void mhs_from_Double(intptr_t, int, flt_t);+void mhs_from_FloatW(intptr_t, int, flt_t); void mhs_from_Int(intptr_t, int, intptr_t); void mhs_from_Word(intptr_t, int, uintptr_t); void mhs_from_Word8(intptr_t, int, uintptr_t);@@ -56,6 +57,7 @@ void mhs_from_Unit(intptr_t, int); flt_t mhs_to_Double(intptr_t, int);+flt_t mhs_to_FloatW(intptr_t, int); intptr_t mhs_to_Int(intptr_t, int); uintptr_t mhs_to_Word(intptr_t, int); uint8_t mhs_to_Word8(intptr_t, int);
+ tests/BitCount.hs view
@@ -0,0 +1,149 @@+module BitCount where++import Data.Bits+import Data.Int+import Data.Word++main :: IO ()+main = do+ -- popcount+ print $ popCount (0 :: Word8)+ print $ popCount (42 :: Word8)+ print $ popCount (64 :: Word8)+ print $ popCount (maxBound :: Word8)+ print $ popCount (0 :: Word16)+ print $ popCount (42 :: Word16)+ print $ popCount (64 :: Word16)+ print $ popCount (maxBound :: Word16)+ print $ popCount (0 :: Word32)+ print $ popCount (42 :: Word32)+ print $ popCount (64 :: Word32)+ print $ popCount (maxBound :: Word32)+ print $ popCount (0 :: Word)+ print $ popCount (42 :: Word)+ print $ popCount (64 :: Word)+ print $ popCount (maxBound :: Word) == _wordSize+ print $ popCount (0 :: Int8)+ print $ popCount (42 :: Int8)+ print $ popCount (64 :: Int8)+ print $ popCount (-1 :: Int8)+ print $ popCount (-42 :: Int8)+ print $ popCount (minBound :: Int8)+ print $ popCount (maxBound :: Int8)+ print $ popCount (0 :: Int16)+ print $ popCount (42 :: Int16)+ print $ popCount (64 :: Int16)+ print $ popCount (-1 :: Int16)+ print $ popCount (-42 :: Int16)+ print $ popCount (minBound :: Int16)+ print $ popCount (maxBound :: Int16)+ print $ popCount (0 :: Int32)+ print $ popCount (42 :: Int32)+ print $ popCount (64 :: Int32)+ print $ popCount (-1 :: Int32)+ print $ popCount (-42 :: Int32)+ print $ popCount (minBound :: Int32)+ print $ popCount (maxBound :: Int32)+ print $ popCount (0 :: Int)+ print $ popCount (42 :: Int)+ print $ popCount (64 :: Int)+ print $ popCount (-1 :: Int) == _wordSize+ print $ popCount (-42 :: Int) == _wordSize - 3+ print $ popCount (minBound :: Int)+ print $ popCount (maxBound :: Int) == _wordSize - 1++ putStrLn ""++ -- clz+ print $ countLeadingZeros (0 :: Word8)+ print $ countLeadingZeros (42 :: Word8)+ print $ countLeadingZeros (64 :: Word8)+ print $ countLeadingZeros (maxBound :: Word8)+ print $ countLeadingZeros (0 :: Word16)+ print $ countLeadingZeros (42 :: Word16)+ print $ countLeadingZeros (64 :: Word16)+ print $ countLeadingZeros (maxBound :: Word16)+ print $ countLeadingZeros (0 :: Word32)+ print $ countLeadingZeros (42 :: Word32)+ print $ countLeadingZeros (64 :: Word32)+ print $ countLeadingZeros (maxBound :: Word32)+ print $ countLeadingZeros (0 :: Word) == _wordSize+ print $ countLeadingZeros (42 :: Word) == _wordSize - 6+ print $ countLeadingZeros (64 :: Word) == _wordSize - 7+ print $ countLeadingZeros (maxBound :: Word)+ print $ countLeadingZeros (0 :: Int8)+ print $ countLeadingZeros (42 :: Int8)+ print $ countLeadingZeros (64 :: Int8)+ print $ countLeadingZeros (-1 :: Int8)+ print $ countLeadingZeros (-42 :: Int8)+ print $ countLeadingZeros (minBound :: Int8)+ print $ countLeadingZeros (maxBound :: Int8)+ print $ countLeadingZeros (0 :: Int16)+ print $ countLeadingZeros (42 :: Int16)+ print $ countLeadingZeros (64 :: Int16)+ print $ countLeadingZeros (-1 :: Int16)+ print $ countLeadingZeros (-42 :: Int16)+ print $ countLeadingZeros (minBound :: Int16)+ print $ countLeadingZeros (maxBound :: Int16)+ print $ countLeadingZeros (0 :: Int32)+ print $ countLeadingZeros (42 :: Int32)+ print $ countLeadingZeros (64 :: Int32)+ print $ countLeadingZeros (-1 :: Int32)+ print $ countLeadingZeros (-42 :: Int32)+ print $ countLeadingZeros (minBound :: Int32)+ print $ countLeadingZeros (maxBound :: Int32)+ print $ countLeadingZeros (0 :: Int) == _wordSize+ print $ countLeadingZeros (42 :: Int) == _wordSize - 6+ print $ countLeadingZeros (64 :: Int) == _wordSize - 7+ print $ countLeadingZeros (-1 :: Int)+ print $ countLeadingZeros (-42 :: Int)+ print $ countLeadingZeros (minBound :: Int)+ print $ countLeadingZeros (maxBound :: Int)++ putStrLn ""++ -- ctz+ print $ countTrailingZeros (0 :: Word8)+ print $ countTrailingZeros (42 :: Word8)+ print $ countTrailingZeros (64 :: Word8)+ print $ countTrailingZeros (maxBound :: Word8)+ print $ countTrailingZeros (0 :: Word16)+ print $ countTrailingZeros (42 :: Word16)+ print $ countTrailingZeros (64 :: Word16)+ print $ countTrailingZeros (maxBound :: Word16)+ print $ countTrailingZeros (0 :: Word32)+ print $ countTrailingZeros (42 :: Word32)+ print $ countTrailingZeros (64 :: Word32)+ print $ countTrailingZeros (maxBound :: Word32)+ print $ countTrailingZeros (0 :: Word) == _wordSize+ print $ countTrailingZeros (42 :: Word)+ print $ countTrailingZeros (64 :: Word)+ print $ countTrailingZeros (maxBound :: Word)+ print $ countTrailingZeros (0 :: Int8)+ print $ countTrailingZeros (42 :: Int8)+ print $ countTrailingZeros (64 :: Int8)+ print $ countTrailingZeros (-1 :: Int8)+ print $ countTrailingZeros (-42 :: Int8)+ print $ countTrailingZeros (minBound :: Int8)+ print $ countTrailingZeros (maxBound :: Int8)+ print $ countTrailingZeros (0 :: Int16)+ print $ countTrailingZeros (42 :: Int16)+ print $ countTrailingZeros (64 :: Int16)+ print $ countTrailingZeros (-1 :: Int16)+ print $ countTrailingZeros (-42 :: Int16)+ print $ countTrailingZeros (minBound :: Int16)+ print $ countTrailingZeros (maxBound :: Int16)+ print $ countTrailingZeros (0 :: Int32)+ print $ countTrailingZeros (42 :: Int32)+ print $ countTrailingZeros (64 :: Int32)+ print $ countTrailingZeros (-1 :: Int32)+ print $ countTrailingZeros (-42 :: Int32)+ print $ countTrailingZeros (minBound :: Int32)+ print $ countTrailingZeros (maxBound :: Int32)+ print $ countTrailingZeros (0 :: Int) == _wordSize+ print $ countTrailingZeros (42 :: Int)+ print $ countTrailingZeros (64 :: Int)+ print $ countTrailingZeros (-1 :: Int)+ print $ countTrailingZeros (-42 :: Int)+ print $ countTrailingZeros (minBound :: Int) == _wordSize - 1+ print $ countTrailingZeros (maxBound :: Int)
+ tests/BitCount.ref view
@@ -0,0 +1,134 @@+0+3+1+8+0+3+1+16+0+3+1+32+0+3+1+True+0+3+1+8+5+1+7+0+3+1+16+13+1+15+0+3+1+32+29+1+31+0+3+1+True+True+1+True++8+2+1+0+16+10+9+0+32+26+25+0+True+True+True+0+8+2+1+0+0+0+1+16+10+9+0+0+0+1+32+26+25+0+0+0+1+True+True+True+0+0+0+1++8+1+6+0+16+1+6+0+32+1+6+0+True+1+6+0+8+1+6+0+1+7+0+16+1+6+0+1+15+0+32+1+6+0+1+31+0+True+1+6+0+1+True+0
+ tests/Coerce.hs view
@@ -0,0 +1,28 @@+module Coerce where+import Data.Coerce+import Data.Word++newtype NT = NT Int+ deriving (Show)++newtype List a = List [a]+ deriving (Show)++toInt :: (Coercible a Int) => a -> Int+toInt = coerce++toInts :: (Coercible a Int) => [a] -> [Int]+toInts = coerce++casbs :: (Coercible a b) => [a] -> [b]+casbs = coerce++main :: IO ()+main = do+ print (toInt (NT 5))+ print (toInts [NT 1, NT 2] :: [Int])+ print (casbs [NT 1, NT 2, NT 3] :: [Int])+ print (coerce (List [3::Int, 4]) :: [Int])+ print (coerce (List [NT 5, NT 6]) :: [NT])+ print (coerce (List [NT 7, NT 8]) :: [Int])+ print (coerce "hello" :: [Word8])
+ tests/Coerce.ref view
@@ -0,0 +1,7 @@+5+[1,2]+[1,2,3]+[3,4]+[NT 5,NT 6]+[7,8]+[104,101,108,108,111]
+ tests/EmptyCase.hs view
@@ -0,0 +1,12 @@+module EmptyCase where++data Void++absurd1 :: Void -> a+absurd1 x = case x of {}++absurd2 :: Void -> a+absurd2 = \case {}++main :: IO ()+main = pure ()
tests/ForeignPtr.hs view
@@ -4,7 +4,7 @@ import Foreign.Storable gc :: IO ()-gc = primitive "IO.gc"+gc = _primitive "IO.gc" add :: Ptr a -> Int -> Ptr a add = plusPtr
tests/FunDep.hs view
@@ -31,6 +31,28 @@ isoL = ord isoR = chr +data T a = T a++instance C a b => C (T a) b where+ f (T a) = f a++{-+class D a where+ d :: a -> Int++instance D Char where+ d _ = 999++class E a++-- This currently not allowed (unbound b), but it could be.+class C a b => E a where+ e :: a -> a+ e = id++instance E Int+-}+ main :: IO () main = do print $ f 'a' + 1@@ -40,3 +62,5 @@ print $ plus (1::Double) (2::Double) print $ isoL 'a' print $ isoR (100::Int)+ print $ f (T 'b')+-- print $ d (f (e (0::Int)))
tests/FunDep.ref view
@@ -5,3 +5,4 @@ 3.0 97 'd'+98
− tests/Interactive.hs
@@ -1,6 +0,0 @@-module Interactive(module Interactive) where-import Prelude-import System.IO.PrintOrRun-default Num (Integer, Double)-default IsString (String)-default Show (())
tests/ListTest.hs view
@@ -1,9 +1,11 @@ module ListTest(module ListTest) where-import Prelude +import Data.List+ main :: IO () main = do- putStrLn $ show $ sum [1,2,3::Int]- putStrLn $ show $ product [1,2,3,4::Int]- putStrLn $ show $ and [True]- putStrLn $ show $ and [True, False]+ print $ sum [1, 2, 3 :: Int]+ print $ product [1, 2, 3, 4 :: Int]+ print $ and [True]+ print $ and [True, False]+ print $ [2] `isInfixOf` [1, 2, 3 :: Int]
tests/ListTest.ref view
@@ -2,3 +2,4 @@ 24 True False+True
+ tests/LocalFix.hs view
@@ -0,0 +1,15 @@+module LocalFix where++main :: IO ()+main = do+ let+ (.-) :: Int -> Int -> Int+ (.-) = (-)+ x = 1 .- 2 .- 3+ print x+ let+ infixr .-+ (.-) :: Int -> Int -> Int+ (.-) = (-)+ x = 1 .- 2 .- 3+ print x
+ tests/LocalFix.ref view
@@ -0,0 +1,2 @@+-4+2
tests/Makefile view
@@ -77,6 +77,14 @@ $(TMHS) Bang && $(EVAL) > Bang.out && diff Bang.ref Bang.out $(TMHS) MString && $(EVAL) > MString.out && diff MString.ref MString.out $(TMHS) OrPat && $(EVAL) > OrPat.out && diff OrPat.ref OrPat.out+ $(TMHS) PartRed && $(EVAL) > PartRed.out && diff PartRed.ref PartRed.out+ $(TMHS) PatSyn && $(EVAL) > PatSyn.out && diff PatSyn.ref PatSyn.out+ $(TMHS) Coerce && $(EVAL) > Coerce.out && diff Coerce.ref Coerce.out+ $(TMHS) PatBind && $(EVAL) > PatBind.out && diff PatBind.ref PatBind.out+ $(TMHS) EmptyCase && $(EVAL) > EmptyCase.out+ $(TMHS) NumUnder && $(EVAL) > NumUnder.out && diff NumUnder.ref NumUnder.out+ $(TMHS) LocalFix && $(EVAL) > LocalFix.out && diff LocalFix.ref LocalFix.out+ $(TMHS) TypeApp && $(EVAL) > TypeApp.out && diff TypeApp.ref TypeApp.out errtest: sh errtester.sh $(MHS) < errmsg.test
+ tests/NumUnder.hs view
@@ -0,0 +1,36 @@+module NumUnder where++main :: IO ()+main = do+ print 1_000_000+ print 1__000000++ print 0.062_5+ print 0.062__5++ print 3_0e1+ print 3__0e1+ print 4_e+1+ print 4__e+1+ print 4e+0_1+ print 4e+0__1+ print 5_e-1+ print 5__e-1+ print 5e-0_1+ print 5e-0__1+ print 6_e1+ print 6__e1+ print 6e0_1+ print 6e0__1++ print 7_7.2_5+ print 7__7.2__5++ print 8_0.2_5_e0_1+ print 8__0.2__5e0__1++ print 0xffff+ print 0xff_ff+ print 0xff__ff+ print 0x_ffff+ print 0x__ffff
+ tests/NumUnder.ref view
@@ -0,0 +1,27 @@+1000000+1000000+0.0625+0.0625+300.0+300.0+40.0+40.0+40.0+40.0+0.5+0.5+0.5+0.5+60.0+60.0+60.0+60.0+77.25+77.25+802.5+802.5+65535+65535+65535+65535+65535
+ tests/PartRed.hs view
@@ -0,0 +1,93 @@+module PartRed where+import Primitives++k2 :: Int -> Int -> Int -> Int+k2 x y z = x++f2 :: Int -> Int+f2 = k2 1 2++k3 :: Int -> Int -> Int -> Int -> Int+k3 x y z w = x++f3 :: Int -> Int+f3 = k3 1 2 3++f32 :: Int -> Int -> Int+f32 = k3 1 2++k4 :: Int -> Int -> Int -> Int -> Int -> Int+k4 x y z w v = x++f4 :: Int -> Int+f4 = k4 1 2 3 4++f42 :: Int -> Int -> Int -> Int+f42 = k4 1 2++f43 :: Int -> Int -> Int+f43 = k4 1 2 3+++-----++type S a = (a->a, a->a)++sInt :: S Int+sInt = (id, primIntNeg)++j :: S a -> (a -> a) -> a -> a+j d x y = snd d (x y)++k :: (Int -> Int) -> Int -> Int+k = j sInt++---++c'b :: (Int -> Int -> Int) -> (Int -> Int) -> Int -> Int -> Int+c'b x y z w = x z (y w)++fc'b :: Int -> Int+fc'b = c'b primIntAdd primIntNeg 99++---++cZ :: (Int -> Int) -> Int -> Int -> Int+cZ x y z = x y++fcZ :: Int -> Int+fcZ = cZ primIntNeg 11++---++r :: Int -> (Int -> Int -> Int) -> Int -> Int+r x y z = y z x++fr :: Int -> Int+fr = r 22 primIntAdd++main :: IO ()+main = do+ cprint k2+ cprint f2+ cprint k3+ cprint f3+ cprint f32+ cprint k4+ cprint f4+ cprint f42+ cprint f43+ --+ cprint k+ --+ cprint c'b+ cprint fc'b+ --+ cprint cZ+ cprint fcZ+ --+ cprint r+ cprint fr+++-- R x y = C y x
+ tests/PartRed.ref view
@@ -0,0 +1,16 @@+K2+(K #1)+K3+(K #1)+(K2 #1)+K4+(K #1)+(K3 #1)+(K2 #1)+(B neg)+C'B+((B (+ #99)) neg)+Z+(K #-11)+R+((C +) #22)
+ tests/PatBind.hs view
@@ -0,0 +1,17 @@+module PatBind where++Just x = Just ()++y,z :: Int+(y,z) = (20,30)++u :: Int+(u, v) = (40, True)++main :: IO ()+main = do+ print x+ print y+ print z+ print u+ print v
+ tests/PatBind.ref view
@@ -0,0 +1,5 @@+()+20+30+40+True
tests/PatSyn.hs view
@@ -1,16 +1,80 @@ module PatSyn where+import PatSynE -pattern Sing :: a -> [a]-pattern Sing a = [a]+f1 :: [a] -> (a, [a])+f1 (Sings a as) = (a, as) -f :: [Int] -> Int-f (Sing x) = x-f _ = 0+f2 :: [a] -> a+f2 (Sing a) = a +pattern Dup :: Eq a => a -> [a]+pattern Dup a <- (dup -> (Just a))+ where Dup a = [a, a] +dup :: (Eq a) => [a] -> Maybe a+dup [x,x'] | x==x' = Just x+dup _ = Nothing++f3 :: [Int] -> Int+f3 (Dup x) = x+f3 _ = 0++f4 :: Int -> Int+f4 One = 99+f4 _ = 88++data S b = forall a . Show a => S (a,b)++instance Show b => Show (S b) where+ show (S xy) = show xy++pattern SP :: () => Show a => a -> S Bool+pattern SP a = S (a, True)++f5 :: S Bool -> String+f5 (SP x) = show x++ss :: S Bool+ss = S ((), True)++----++data T a = forall b . Show b => MkT a b++pattern ExNumPat1 :: (Num a, Eq a) => (Show b) => b -> T a+pattern ExNumPat1 x = MkT 42 x++pattern ExNumPat2 x = MkT 42 x++ft1 :: (Eq a, Num a) => T a -> String+ft1 (ExNumPat1 x) = show x++ft2 :: (Eq a, Num a) => T a -> String+ft2 (ExNumPat2 x) = show x++ main :: IO () main = do- print (Sing True)- print (f [])- print (f [1])- print (f [2,3])+ print $ Sing 1+ print $ Swap 1 2+ print $ f1 [3]+ print $ f2 [4]+-- print (Sings 1 [2]) this is an error, of course+ print (Dup 22)+ print $ f3 [11,11]+ print $ f3 [11,12]+ print (One :: Int)+ print (One :: Double)+ print $ f4 1+ print $ f4 2+ print $ SP ()+ print $ f5 ss++ let x = MkT 42 True+ y = ExNumPat1 ()+ z = ExNumPat2 ()+ print (ft1 x, ft2 x)+ print (ft1 y, ft2 y)+ print (ft1 z, ft2 z)+ print AA+ case A of AA -> print 42
+ tests/PatSyn.ref view
@@ -0,0 +1,18 @@+[1]+[2,1]+(3,[3])+4+[22,22]+11+0+1+1.0+99+88+((),True)+"()"+("True","True")+("()","()")+("()","()")+A+42
+ tests/PatSynE.hs view
@@ -0,0 +1,17 @@+module PatSynE(pattern Sing, pattern Sings, pattern Swap, pattern One, T(..,AA)) where++pattern Sing :: a -> [a]+pattern Sing a = [a]++pattern Sings :: a -> [a] -> [a]+pattern Sings a as <- as@[a]++pattern Swap :: a -> a -> [a]+pattern Swap a b = [b, a]++pattern One :: (Eq a, Num a) => a+pattern One = 1++data T = A deriving (Show)+pattern AA :: T+pattern AA = A
tests/Text.hs view
@@ -1,5 +1,5 @@ module Text where-import Data.Text+import Data.Text as T bs1 :: Text bs1 = pack "abc"@@ -24,3 +24,8 @@ ] print [ compare x y | x <- [bs1, bs2, bs3, bs4], y <- [bs1, bs2, bs3, bs4] ] print ("abc" :: Text)+ print (T.head bs1)+ print (T.tail bs1)+ print (T.uncons bs1)+ print (T.null bs1)+ print (T.null (pack ""))
tests/Text.ref view
@@ -4,3 +4,8 @@ [True,False,False,False,False,True,False,False,False,False,True,False,False,False,False,True,False,True,True,True,True,False,True,True,True,True,False,True,True,True,True,False,False,True,False,True,False,False,False,True,True,True,False,True,False,False,False,False,True,True,False,True,False,True,False,True,True,True,True,True,False,False,False,True,False,False,True,False,True,False,True,False,False,False,False,False,True,True,True,False,True,False,True,False,True,True,True,False,False,False,True,False,True,True,True,True] [EQ,LT,GT,LT,GT,EQ,GT,LT,LT,LT,EQ,LT,GT,GT,GT,EQ] "abc"+'a'+"bc"+Just ('a',"bc")+False+True
+ tests/TypeApp.hs view
@@ -0,0 +1,11 @@+module TypeApp where+import Data.Typeable++foo :: forall a b . (a, b)+foo = (undefined, undefined)++main :: IO ()+main = do+ print $ read @Int "123"+ let (x, y) = foo @_ @Bool+ print $ typeOf y
+ tests/TypeApp.ref view
@@ -0,0 +1,2 @@+123+Bool