[MLton-commit] r5557

Ville Laurikari ville at mlton.org
Tue May 15 23:26:09 PDT 2007


Added an implementation of the Mersenne Twister.

----------------------------------------------------------------------

A   mltonlib/trunk/org/mlton/ville/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/LICENSE
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/Makefile
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/README
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/detail/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/detail/mt-19937.sml
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/lib.mlb
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/export.sml
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/rng.sig
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.ok
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.sml
A   mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/tests.mlb

----------------------------------------------------------------------

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/LICENSE
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/LICENSE	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/LICENSE	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,20 @@
+COPYRIGHT NOTICE, LICENSE AND DISCLAIMER.
+
+Copyright (C) 2007 Ville Laurikari
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both the copyright notice and this permission notice and warranty
+disclaimer appear in supporting documentation, and that the name of
+the above copyright holders, or their entities, not be used in
+advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+The above copyright holders disclaim all warranties with regard to
+this software, including all implied warranties of merchantability and
+fitness. In no event shall the above copyright holders be liable for
+any special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether in an
+action of contract, negligence or other tortious action, arising out
+of or in connection with the use or performance of this software.

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/Makefile
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/Makefile	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/Makefile	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,32 @@
+.PHONY : all check clean help
+
+help :
+	@echo "Targets:"
+	@echo "    all      Build the unit test program"
+	@echo "    check    Build and run the unit test and report results"
+	@echo "    clean    Removes generated files"
+	@echo "    help     You are reading it"
+
+all : tests
+
+-include $(wildcard *.dep)
+
+tests : tests.mlb Makefile
+	mlton -stop f $<            				  \
+	  | sed $$'s#\r##g'                                       \
+	  | awk 'BEGIN { srcs = "" ; printf "$@ :" }              \
+	               { srcs = srcs $$1 ":\n" ; printf " " $$1 } \
+	           END { printf "\n" srcs }'                      \
+	  > $@.dep
+	mlton -verbose 1 -output $@ $<
+
+check : tests
+	./tests > test/first-5000.out
+	@if diff test/first-5000.ok test/first-5000.out; then \
+	  echo "Passed."; \
+	else \
+	  echo "FAILED!"; \
+	fi
+
+clean :
+	rm -f tests tests.dep test/first-5000.out


Property changes on: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/Makefile
___________________________________________________________________
Name: svn:eol-style
   + native

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/README
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/README	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/README	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,38 @@
+Overview
+--------
+
+This is an implementation of the Mersenne Twister random number
+generator for Standard ML.
+
+Mersenne Twister (MT) is a pseudorandom number generating algorithm
+developed in 1997 by by Makoto Matsumoto and Takuji Nishimura.  It has
+the following properties:
+
+  * Very long period (2^19937-1).
+  * Very high order of dimensional equidistribution (623-dimensional
+    equidistribution is assured).
+  * Fast.
+  * Memory efficient.
+  * Passes the Diehard tests for statistical randomness.
+
+Note that MT is not cryptographically secure!  Observing a sufficient
+number of iterates allows one to deduce the internal state of the
+generator, thus predicting all future iterates.  MT has been designed
+with Monte carlo simulations and other statistical simulations in
+mind.
+
+For more information on MT, see the wikipedia entry:
+  http://en.wikipedia.org/wiki/Mersenne_twister
+
+There is also a new version of the MT optimized for 128 bit operations
+(SIMD).  I don't know if it can be implemented efficiently for MLton.
+
+
+Usage
+-----
+
+The library is available via the MLB file "lib.mlb".  The exported
+interface may change, but the implementation correct, stable, and
+reasonably efficient.
+
+Run "make check" to build and run the test program.

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/detail/mt-19937.sml
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/detail/mt-19937.sml	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/detail/mt-19937.sml	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,69 @@
+structure MersenneTwister: RNG = struct
+  open Word32
+  val && = andb
+  val || = orb
+  val op^ = xorb
+  infix >> << && ||
+
+  val n = 0w624
+  val m = 0w397
+
+  datatype t = D of {mt: word array,
+                     i: word ref}
+
+  fun new seed = let
+    val mt = Array.array(toIntX n, 0w0)
+    val _ = Array.update (mt, 0, seed);
+    fun loop (prev, i) =
+      if i < n then
+        let
+          val v = 0w1812433253 * (prev ^ (prev >> 0w30)) + i
+        in (
+          Array.update (mt, toIntX i, v);
+          loop (v, i + 0w1) )
+        end
+      else i
+    val i = loop (seed, 0w1)
+  in
+    D {mt = mt, i = ref i}
+  end
+
+  fun twist (mt, i, a, b) = let
+    val y1 = Array.sub (mt, toIntX a) && 0wx80000000
+    val y2 = Array.sub (mt, toIntX b) && 0wx7fffffff
+    val y = y1 || y2
+    val v = (y >> 0w1) ^ (if (y && 0w1) = 0w0 then 0w0 else 0wx9908b0df)
+  in
+    Array.update (mt, toIntX a, Array.sub (mt, toIntX i) ^ v)
+  end
+
+  fun generate mt = let
+    fun loop (k, max, add) =
+      if k < max then (
+        twist (mt, k + add, k, k + 0w1);
+        loop (k + 0w1, max, add) )
+      else ()
+  in ( loop (0w0, n - m, m);
+       loop (n - m, n - 0w1, m - n);
+       twist (mt, m - 0w1, n - 0w1, 0w0);
+       0w0 )
+  end
+
+  fun temper y = let
+    val y = y ^ (y >> 0w11)
+    val y = y ^ ((y << 0w7) && 0wx9d2c5680)
+    val y = y ^ ((y << 0w15) && 0wxefc60000)
+    val y = y ^ (y >> 0w18)
+  in y end
+
+  fun rand (D self) = let
+    val i = !(#i self)
+    val mt = #mt self
+    val i = if i >= n then generate mt else i
+    val y = temper (Array.sub (mt, toIntX i))
+  in (
+    (#i self) := i + 0w1;
+    y )
+  end
+
+end

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/lib.mlb
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/lib.mlb	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/lib.mlb	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,8 @@
+local
+   $(SML_LIB)/basis/basis.mlb
+
+   public/rng.sig
+   detail/mt-19937.sml
+in
+   public/export.sml
+end

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/export.sml
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/export.sml	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/export.sml	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,2 @@
+signature RNG = RNG
+structure MersenneTwister : RNG = MersenneTwister

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/rng.sig
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/rng.sig	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/public/rng.sig	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,17 @@
+(*
+ * A minimal signature for an imperative random number generator
+ * objects.
+ *)
+signature RNG = sig
+  type t
+
+  val new: word -> t
+  (**
+   * Creates a new random number generator and seeds it with the
+   * given seed.
+   *)
+
+  val rand: t -> word
+  (** Returns the next 32 bit random number. *)
+
+end

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.ok
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.ok	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.ok	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,625 @@
+9E695582 572B97FF 9774A566 2626E42F E380C48C 3B810F33 E4437D21 6E8B2BAB
+75232469 D840313C C737558E 2B6C5689 445E4A84 2DC1FE2C FF00D120 262E6FA
+8A43A8B9 182D0826 899B0424 3501C93F 66A7E52C CDEF7F10 B495793F C95067D7
+67BA3E33 570DDD1B F33297E5 C91F0DC1 7DF7C76 53FA54CF 22D287EC 9DE709AE
+153DFF78 766D4D3 6C6BF435 584C17C1 3C0802BA 73A4C86B BF57EAA7 E6223011
+A6DAF72C 4454604A B0A2F9ED F742195F 2A04B2BA 6BD51868 E05D22CA BD47C361
+72846CD1 3AD71632 94266825 34CA42C8 8616567D 9504F267 A07BE65E 92C7D1AB
+5944071B B52A1D78 4318D21B 558FCD99 1331ECFD 7988FF68 2DED882A C3F4B1E2
+D47A80DC C8EB549B FCD33CB1 9DF4E5D1 1CFEAC28 29F82A04 A37262EE 7DEA97CF
+BB066F5A 7BCC7A15 E21A21A7 CC8B52FA 86F73CBA 6A2B3B1C AA355C72 9AA686B5
+BDF9CFE6 F9380B13 F0DACA34 1DF84C43 B383E4AC 8A4E9E59 4B9BA234 F716FA28
+C2E76B65 F7BBD361 C6A3ECE9 DAEDB0BA 5EAED393 2B37668F E52B3739 CB710F57
+54B126EA BA1459C0 DC70475E 9621469E C4DBC7D3 BC7151E2 9D09FECB 9202AF4
+704F3CDF 108508F7 EB4C74C1 C1C54DF1 C503D3F7 424120AB 82B90311 BE2613B4
+B5FED75 D1514BCD 931B5A30 6CD387F0 505682FD D2C59BA2 69870FDF 739F1D61
+371F1666 8DBCF24A 849BDD0 BA1A8638 AAA7B82 DEA8BFF2 BB28E9AD B44A2A47
+BEDD0DE8 7C1B8A73 A5AC7DA0 1D850966 C697C898 2B2C6554 A55FC440 9D13FB22
+2B3A49D1 BA8557BC 7C1F71B8 90E450A2 89D75DA6 D8797ED9 FF351123 DDD2FF5E
+3C8FE660 F05667 A8B7C55 2FDD4900 770B3C38 A09936E2 5B7DEA2E 3C766F80
+3AE306C2 6520720E 88C1D995 39C25401 B765A576 FA8363DC D18E1F55 68F99BC3
+BD6CEEAB 2B6101DA 14595981 3A3EC0CD C1C31190 821562C1 21E517DE 706E6B76
+7C12667E 536BC46C 34CCA372 30337084 5E232C9 75CA5A54 8AE67091 9985E0EF
+AE653D85 26CCE20D 5BDF360E 3A08E3B3 5CEB0B1E 77652686 AC768D6F ECADA968
+4B88DFF7 FC71DB0F AA6407FF 1945ECD8 EFBFF0B3 6044A972 5E17D78D 64F368BE
+EAF9FA9F 9376D354 C25CB3F0 4377550D 7C971ADD 21E156BD 75AD8433 141724DD
+8BCCC558 74764E91 62E8D15A A492DE3A 77326BB2 B11C0AF0 E746C54A 8B10D3E1
+F8F3DD49 19C0D7C5 7AEC1462 B95366B 5870E608 AE95070F 9FF64CB 73D42365
+207CADC8 2FF21616 2082DC41 5AAB6189 3998D037 744550FD F0EECB9C 7298F7B9
+97340739 66F097C2 1B082320 6B2B49E0 D37FF826 F6F34818 2E147D04 44F8599F
+D78570A1 D49A107F 4389CCFB F49F118E 8085CA25 F3980D9D 2C7BBB06 F3A7CDB8
+A5470C64 5254B4A5 47BAC934 F52D9DBF 136CBEEF 27AD2B13 BE42766C 380D3380
+3C7FBD8B 61307D63 CCFBF7A5 2EBE18FA 223FC18E 45DA0E0D C143070B CF204232
+F514A768 12D1795B CBC15AE1 847A79FE 45EF955A 20C10D7D C3703F28 DF5C7B74
+E8C9210F 36BCA49D 7152C3BB EC91ED7A 3FDEC44D D3110998 775A8184 948C5B6A
+8F5F5B61 45B96153 A6312ADB 8F319ED7 1E585F5B DA0EBD9 174C0ED4 E969E498
+7DF76A16 9F6C016C 5FF1B121 770B062C 35785DCE B86E804 6E355829 5A9D92FE
+FB8F6864 8E7AE25D 2336113B 4E68A74F CDEAFAA 8BC2D6E7 7ABB8CD 68708B2E
+916931CF B262F63 5C6C8BE2 229CCB14 B8D671EC F75DA11E 5F466F16 AFE3A212
+488AC361 553F7694 7BC1F81 9950E0FD F4962BAF 52F23BA9 BBBB2E97 C7A3AAE5
+9EA8E3E4 D78FEA1F F0C2F7E7 338F0BFB 3E05E706 C9E7FBB7 561FFCD5 5FA8056E
+5B5FF481 A41F8604 CE7AC7BB 8B841CED 35B4E689 E8DA6D2E 5F802FB4 605CA718
+81FBD349 C8AB5193 C063E9A5 2E6CE155 B810EAFF DFF315FA 39776D28 DC588E85
+C00C5105 127ED969 112CE4E0 8880FE4E CD75085A B877223A A25C7E27 E5F78759
+E16C696 4104E6CC DFA4075B FA6601F8 A415D74F 9DF28110 1F8821E6 77C66A4
+D00E6620 4C121EC5 5C03AA3A 52743FA4 7B44D823 CB778A0F 4FA52A47 C557731D
+773E15AB 75BA3514 D9089DDD 820ED109 3DDCC852 938E72F2 B3DDAFD8 E3ED70EB
+270973BB 454FDA7A 6E0E8577 D65269A6 95ABB08F FC4316D9 270926F6 E1729E26
+A76613C3 C8E938C5 54E680DE 42E4F3C4 2E88B57E F912236A E3C363B5 45A7FF57
+79116D38 8B2C784B AC775361 8D3C8F28 B0157A57 49E7350F 7EC8ECFB 8FACDC20
+3931B04D 413962E5 491CD2BC 6BE309B3 FBE22BA3 2EFB0961 76428738 A4150596
+3B2BC49C 1A05BD0 A0CD55FC E221EEE1 CADDAFCB E73C854F B3F42BC5 D500E45F
+FB06309 AA18ECA1 F6054B2A E2DA57A5 5AFE995B C51642C1 1063F23B 61F57806
+71F3350F D3CF2BD2 1BF721EB B1E17579 15F7D214 25993449 F3822D19 B106AC5C
+6BDC0D9A 4BDE83A F9A72A85 66441372 E559CDAB 9DE9F69 60951DFA 764B5C7F
+75E35E92 189B6264 4E33AC92 A1F5EFEB 9C885194 D2B0A775 DBAD7BBF F937B85
+F43C8300 9EA9673 3C035998 9A3B32B7 FDB4ED2 C2D08762 81FE41B2 16A0B14F
+39803511 99DCA641 7FBFF3DB 1EE383E0 86044396 1F03832F 9D5E6A02 40473844
+EA63DE9B 7AE35E20 10A6758E D1824951 20AC851C 2996C41A 596A0502 A3A5649B
+EC894DF0 92D12ED8 9FAE042A E6010C3F 1D1E74AE 5DD13784 ED7FC87B 77E62423
+7D2E5535 DD5FF137 44390DB4 5E6F86D7 80A319A1 1CFF74BB 198C8D54 BAF4BB7F
+3C71AA1A 9770465D 9D1CFABD 51289FE1 15215B8C 34480AC3 FD3044FC F912EA9
+D60A46AA 973E6117 452D20E7 54225ED1 A031C1C8 FF034650 64857989 8E6B06AE
+EB1CB3 1A85DD50 C5760B3B F4EC94BA E3FE9795 FEE24C62 147FEA51 2D63D47C
+9C4E7DC9 9BB50C33 14B3EB64 9E0F88DD 26380715 E5369B9 B5A7524B 8C69CB1
+C0085658 1B3F140A D16BD471 E9E6D568 DBD8A034 3EEB6EEC 466262DE AAB578FF
+91B00373 65174233 73CADB84 65898D3C B173D462 AF362B57 A5ADF642 22EF2F27
+68792C6E F3DBB426 DE7A369C B70F383A A50B247 C5403CBA 82E73C69 82F1A1B5
+F1A4F9EB B1ED7CF9 40624285 2C2C5C8F EFBC076E C2A6FA7D 1AE7A220 E90EAE90
+DEAC60 DE74B360 93D77009 B329CD65 E0B913C7 A6D9D09F 1CD045BD C6563374
+1D4C1AFC 8C4B7405 82ADEC6F C1511F2 350D03A8 D1A32EB3 B610A926 6BD1594F
+99B96BAC E0FCAFC DF6F9735 17C8C3F1 F0A25B12 73ABDE45 4F2A4D5D 35BB01E6
+633BA8A3 3EE0B639 269FC8E6 C4D5DC96 4BBD6FF F3755189 108DF45F F5B27EA7
+90C1DD6 CF6DCD65 B492994C A367FAA1 ED99F336 BE408909 14536409 1CC362F6
+BECB00CF E0966843 399730E7 6EF83A6E DAD185C8 13D5EBFF E3392DB 8B6E672B
+F0F2BA11 27708F2 8ED4D002 B5A5A771 2A52C60C E41CAE51 5580075E B6A63445
+8C58239C 35128A8D 8D69C2EE 1E04569A 65825A52 FCF8EF1F 31F2408 4F9F77A
+AE21E6D3 93BA2917 3038B9B0 46368B36 B3FD74B1 25BF6E65 27912F6A 3F746B6D
+F7181A23 27B495E6 8761F63F EF28456A C1105BED D208B08 96DA8025 815D5D49
+7D4C249F 432313B4 99CD15B3 644F613A A20CA712 D260C70F 2663B2FC 19DE6FDB
+428A33FD FB386E5E CEE8D80C DB613F34 275AB516 8E8F1A78 DF8CE608 F7FA8A07
+881BFFD4 1666701B 98874CEC B6AC2E93 2655404 D1E9BDE1 D9AED022 17879426
+C719DC85 E4A11505 6D726502 9481CCCD 6FCCFEBE 526813DA AA58A2DE 33A828CC
+560A77D0 44DC5FF6 73192942 DDD11E42 D896CDEF 6F3D5D2 5ED545E6 E7BCD1DD
+10D7DA83 296D7CAD 87449F7E 6E40D542 80B2E562 C70AFF74 C826DC28 A185417D
+19503C01 82E9FBA8 88BC18FC 66B8B06A E2279AAC 24301218 5E3EE64 2E71E4E7
+C95AA220 F5C7040A E746C179 7ADD22EC 79576EC8 3F64CB96 820D78FD 6E41BCC6
+AFCC8BD5 FD3D39DC 7F561BF1 20969BF5 2FF6D865 CFC939AA DB7B4A7B 62690F7E
+B1560756 FBE0A90C 4A903ADB B6195DF2 EA28DCE8 D3568ED0 DD99F324 8753CC11
+BDE9E659 978E001C AC982373 4394958C A912F269 1092E07E 432B011 73624FBB
+FFD11BEB 21CBED22 31D7C278 2FE916CE ECE80C0A 786E944E 5BF08320 C687E54F
+EF97DDDE F672A0DC BB2EFFF4 E802852 E84DB654 517F57F4 284B9ACD 9D682956
+E8DFFA06 2587C5A6 493CC6E2 B61A8BC7 61C18673 2E8A39F5 8A8BBEA2 65C25DF3
+DEC5A610 F9C5C3A8 FA3B743 A0BB3D00 B2BC586A A9C2F84D DD4FEC48 48629403
+758BA8AF 19830F0E 2D6F20D6 14E883F8 7CF2C12F 68A01264 C739D37A FE406341
+871143ED 7B03FB4C 6C7E9A40 B49D8A89 B5AD02FD 9AAD61AB DAE201BB 149724F0
+A505FD65 C9884164 E86050D5 C5B11FC7 6A2E489 E883C64A C4370A1C 4719A926
+4F92C6DD E0C2EB5B 5F02EAE1 B638B8ED D3030E5F EA778C59 493813A6 A10E9B17
+DF8D7FA0 A1A3DE73 AFAEED3B 5B5D155 310A7DA2 7E3A5E18 6DF3417C 14BF173C
+3159D38C AB4305F9 12ABE5F9 5FE0B2CA 56146CD8 ABFE4C02 8D7EA7AA C6E2E3F6
+CAD335C0 3DE9E3C4 23009A0C 35F93DC2 1A4B0049 DDE30264 36C1F79D 791392D2
+21CBA830 8151895D 93907DF7 F4F2A5BB 3F1FCC5F 4DDA3DEE 62D6E665 3D72C4C6
+4A1462D5 B72A03E4 4D73839E CA3C7815 E5CC4964 462CCF0D A669D00B 2B8D71CF
+5E61165F 1664ACBD 11719744 892AFBC 49B4A420 21B3B63E B385975C E9731898
+AC86F4B1 6369C35D 1D1220A7 A01C0E32 32F195EE 231C93FE 9932B3CC 7D56D09D
+FC921FD6 B3471932 65DD81BD B4B34834 9F8294CC EF62103C ED7D0F65 78119428
+242BCD3C D1EF95CC 527E7637 34FA71B3 9C22B1BC FE580F2B EE0B556D 21209AD2
+A23FFA70 55B90FC5 8710BDCF 8B65E329 4F3D192 81F728BD 170951FB F4D64004
+632E58F9 55816448 84A403D8 206C0A0F 993FC7EB FDEEDD88 6D894B2F CC6C7001
+8016908F F697B4A3 E4E6B6F3 998AABAA 6D1B16F1 8796CF9F EC573365 13CFAC24
+20AF0FAE 5498C0AB 15DA3D12 E0AC51A8 58A18 7C0F8E30 AEE25361 D075B506
+AF7BCBA9 BE29E2C3 14A8E035 25458153 69A5A74E 1019A77 E60D3E24 E672F7C1
+4D540A6B DAAF52CF 888134BD C261323A 5A757E8C 270FEDC5 F50CFCF5 A16DA987
+864CAF32 BF4CDFE CA6BE1CB 4E4F14E0 37B07BAF FDE882E 31D1AF18 BC1C4F57
+1E74D75B 1781F99B EF0F20CF 81C2BC4E CC00B300 4DE2F64B A1303732 4169CA44
+FC1E1E20 2969235F 75EF204E 6424EA21 F0316554 937895A9 DC5D7597 BBF0E7A7
+75A06965 784B308B D07B0EE3 D48B658D C94C7B83 B7C8282E 75A50421 8C12084E
+5D3D4867 AB9B2D5A A27C7B07 2BC53D5E 3BFF8C83 444E7073 82F60912 3D37A4C7
+56D26310 78480D7 8A21B667 561F1152 866484E7 D0B98F43 EA93DA9B BE2D2959
+44932C30 766CDB15 F2D12315 574EFF1A 5F1C3042 2F7E0683 F942FEAC 845D390B
+9A969892 7EED2EFA 67828642 7D8BA1EE 68289307 34021557 F3788296 BE96C0A5
+E5E5CD1C 8A4DC606 C76ED7A6 F8BB8685 89B2A52F BA9B119 4EEBD086 FCCC98F6
+C35998ED D77E0F54 3B543A77 A6C8DBA 3E449980 E8A203A7 7512D4FB 39AA04E1
+C99CB9C2 3D49AAB2 90FBD47A E3FF052F E0F1E010 32DF78BF E031FBCF BC26C8E4
+9C21BDFC B0BEDE6A C3CFDC2A 9AC2F846 E9549352 81F7E2E7 745193B7 81284417
+951981B1 EBAF7380 AFEEB182 BFCE6978 7E49085D 1916F4B7 6DFA14E9 D97E154D
+642E62 301DCB95 A45196BE 5AD63498 C77E559A 8B5BEDAD 6FFEF BE97BAFB
+FF867337 785FE529 12527974 B0074C72 C4EA0561 CCE7DB8E C7FB6EA0 C1B6B670
+841AF66E E7A4C1A1 CCCB1819 4AFE6BA6 59EEBB23 E2241A58 30A77BE 24B62A14
+BF1D5B07 53D401FF ABB4A046 B9821D9C EEDDECFE 44F1D2FA D18074E1 7AF6F417
+3628BC88 55AC582E 1B464B4B F56FA6B0 9FA382 49AA5179 FA82F8C7 D27479BA
+27CEE5EC 6EC8E161 EEE8591F 7C328D3F 6EFB45CD 5714D261 A83B3791 C643F52B
+9FCA086A A978F7DC 14333A79 71A8F18D D069E492 1335F401 9C172DCF B3E86CDD
+7D8926FA 2853D0D2 1AE14F3B 402CF36B 6713318B 4E8BAD8B E2F8D9D6 ECE7F6D2
+BE2F6E2B 48477C2E E0FFABA 25D2B33 54D29AE8 DAA7E0EE AFEB14C4 E3F4CFB1
+9F4C8FBC 35F44DC1 B629327 40EF0346 41F1D160 DFAF2D43 346B502 B92A2C25
+AB2AA646 32A32982 E791160D 150F6E2A 98A50DFE E90A9056 D37F593B D3808FE4
+EE8D4566 51F60590 4099507 6821CB36 D84B136C 4377FACC 7D102FA8 B2CCCCF2
+1E16C786 5A3DBC22 7ACEFA8B 64C31778 6746149E BB633EE7 96867643 DCCBFB61
+351038BE 492278EC 323455CA EEC845A7 F6B67205 451EA580 82964F41 3D38C3FD
+3CAD5639 84350235 DC4A5DAA B84FB2CF C8888E8E E74581D 1460820 1AA2E0BD
+3ACC8E44 C774F4D8 F111A918 46519000 1618236 67A76C9F B9458FB0 1CE6BDDE
+117B2F68 D5A5A468 6C632C2E A3992EE4 64BCAC4B 739925B2 3DAC295C 7D58B8FB
+9DD45A64 65C7B2 A1A334F7 DDAA6DAC 68560372 4A9092FB E82A748B 692BE014
+25BB9D6B 71D2B586 C6592762 63E69D6B C3B3EFF1 7187A148 AD418D31 D7EB2E5B
+39242EB4 96CFA9B3 6B31E73A 26CECF7B D9DE9AF7 912618F0 9F85B08A 5CFA424A
+9D0EBD5 DE5D391 B09F1826 87B19C01 AC50FA48 B349BB78 7D544529 AC6B38C6
+8D11125E B9D55934 8EE89C7F FA7A1B77 31B58B7E 1716EE29 C55217E4 32D16C26
+CF96F0F2 72170B1B 1D328BEB E3E5CC32 304D71B6 D44D1529 3808638 CF966C89
+8CE2A210 581641BA F31A9007 E460B260 36490190 59930FDB B4DC33D8 C509823E
+BFD38087 D893B0B1 20FC11EB AF983C75 48D3CB15 E72FE857 9945D855 F27A354C
+ACCC152A 2EFB8035 9C320DF2 18F1A8F8 93FA035B F55718DF 5D77E9EE 379CEA7C
+5F45526A E2084480 2B6689DC 38F3C53F D4267049 92B4A056 60D1983A 294C3F4
+A5808344 F2F1534D 62436888 E82909F8 B2C47BF1 426B8E7C 592E2536 3B1539CF
+7A1FFFD1 D14BA61F 98AF9C3D 827963FC 484195D2 B33F10C2 E20C25C5 EE00CDA8
+C6BF7121 9BD03B0C 30D50DBF AF2BDABB 10580C2D 267413F3 B699538D F477D38
+D847B063 868D1987 B908BF0F 343F72BA 56816C81 D5F5DD16 210F8A55 3CEC1BCC
+6E30E5E3 2ADC942B 278C6BC7 608ABA23 B826D241 9260C50 7259A7F5 D0D2525B
+41D60AB2 3324815A 83EAE2EF 5A881C89 DB9A66C7 DED84A19 95896C7C 6B5C231B
+B971370E 9EDB573 2B2E0A70 85E944F 22727242 6A08EE0A 8C30281C 3A15D697
+6B5F6225 5A5521A5 D0878865 4E0D3FFD 40D34B5F DB3D5D9E A03DDE7B EBB0CFCD
+AF61EC34 E3351C8C 2447902D F600097D D84CCA2B B8C7FA5B 131B4A76 47282E17
+F503B06 6C11ACFB 3A1E45CC 47876366 2C052FE5 74B6BB44 531F1BA4 33FA7E01
+78A56167 344E30F E7BBEB40 DF71B2A8 3C74D262 E7241AB8 89266F00 872E6025
+EC05149D D7F00132 698D67A8 75A3F9A3 A5705F91 415F5B48 6ED523BE 2CBDAC22
+42F83D23 1CAB3CD C0C06395 CDFA4077 EA1CBA46 72073F96 F7241E05 C2A5B5DF
+D092E8CF 580F0F10 BDDD6A0C 7B72B56E 13B2074A CE722505 56F1BC56 A2477CC6
+C2416F90 9DD60FF 29AE2985 71326CE0 569F19AE A30F9903 FFB11088 560BEDE5
+CFD8F4D0 E54945B9 9FCB28DB C4AD8D1 5A2A9091 1CAF527D 295A9034 D9308074
+CAE77799 56A3CDCF AC94A449 EA0E98DE A1A4D130 546E88A1 1EEE8029 F6A2739E
+7285656 9BCAE405 7FCC133D 4C7E02A1 FEAA5709 161329FB 3B17FF0F 5049F4AF
+BA6DBD63 A7B5DD4F CECC5709 5B3575F 1729863F D2757406 AE671692 A31ABA07
+D605BDA0 913EBE48 A90FA3FC A0BB22AB 371E645A 155F1AB0 5F0BEC6 A5ACBA6B
+DB18CD60 A38BBBEC 4F6B6765 5F85C557 A88945A2 BC98A991 1F2804A8 DA65790B
+DBB47D4 3F86BCAC 1AD7191D 4EB63595 D3C9D7E6 3E12C24D 73274554 C2AA3263
+2AC08C6F AB776671 6398EC02 C6E04D64 CB7FAFFC 29D3180C 89500B17 843132FE
+E0BCD947 E19E9CF6 663F9D01 8F2C7565 13788342 E8591BB1 D0F1B877 6C30288D
+81E12ADF C0A6E7D1 26959D99 D6E7FD7F E5C395B8 C0BF169D B2770A0B 953A22BF
+A7BF3EC6 DAB3F6 52C81290 C585DCF6 B178A00C C9202A83 4CEF56B 7041D0D9
+212AB85B 65C3AF3D CFC877A3 695874CA FA375303 8748950D 4E116944 63E41374
+1896E871 F11E3A15 D7ECD3AD E2E660C9 5553394 C34C0B5E ACB9C1F2 6DE05A52
+A3A5B180 A7DAF13D 7C43EE8D 3DF41A76 19597747 FE110A4B D821A598 80097C8A
+46842344 6547611D 9A91FABD DA014FFF 21FBBBEF 5C395291 3BC78F3E 586B6868
+B1E3070D 67272D23 8BCD2257 24D7592D B54D8910 64B05B72 EB97D2CB 94B8C28E
+DFD965CA C70656BE 8D81628F BE541AF4 4A1BEAF5 3069E6A9 8F64E4E8 8F43AE4E
+17DCBD40 64FDF5EC C052B81B 798821DA 580AE9B7 879B10D7 8AF8072E 9E65F748
+5EFEE932 6527AF12 AF769CF1 DA5F60CB 20903D47 96B0AB96 E67583F2 BFDED25A
+FBE7131C 74B7B61F 1D0B086A C28437A1 614F11AF C58BA9E1 857E76AC C184883D
+655DC659 D1563A77 9EAE5EF1 6C6382A6 7F3159EC D748A1BA 14438D23 958BB3F2
+FA03C335 699B2E14 ED780AFE F3C04C4F 60CADCA8 E2206BA7 3109BF98 49A1AF4F
+C0094F5A 467ED121 A460BF14 56F3686F 60675C65 5D428409 FB2CF9A2 2B21613C
+AFB95F8F 1C8E95A8 EF01B646 CBAA930C 2925F83B B2E5A3E8 D46B9446 680F9E9F
+FE82DE2C A1B57CEB 1128063B CE2D5C17 99E50CEE A9C5D0CC 9760299C 4C39C9D9
+10676F8D 12221A10 269F9F3E B8692E62 380398C4 FDCEED96 C0FB8613 3552439A
+284B0BA DBB6951F EB191E27 328555EB EED65548 56925932 272E3215 74A92C51
+169528AB F5EBD95C A55B7A5F FB846896 30F5D34C C73E4F36 D27BF177 6557070E
+C1A08CB3 23E8F429 64A17665 C2182DD6 2B2ED2D6 89F825C1 B0B7954E 2F7B8306
+F1D02BE5 711841B4 A10DFB5F 1E401032 389B85EF C9B8E07C 3F2F2498 E618B204
+9E0852D8 D8FD96FC 50FCA44F D10F4619 CC14C819 5252577E 5518E631 CD79988F
+30B70211 5E0DA837 C49E273 2CDB7EE6 52256512 B4933049 E243B948 566CBBFA
+B4287014 BABD2175 2C89637A 9813C16D 21131A0D 9C67798 901BFE4F 1D4CB715
+EFE38EEF B3A3AF39 887A8EBF 2B5B1466 C8E3CE7B 132BC154 A307D0C1 798E8199
+4BF90962 EF51DA9A 3654C5B5 7BF5BA4D ADB95DEE A3B5F8D4 A5B0DD73 CB001E6F
+76070C3D 87F1DC54 B12AD84F 61A8837 9EA7FBB5 B08A9ACD AD04D7DD A48C4AB4
+6A065AF9 8DBD6830 77C33654 8482C32A F04AD6B7 83F7A204 BC8AE6A3 265C9DE0
+B989BFDA 96ED3A49 1F686DEB F440195A BA0A00E1 6FBF75FC 8E165844 987EB963
+DAC8A96D 965F2B1D 61549221 FEEE2A3E A2E49E51 66D07928 85D56477 1541D62B
+6C1D9C80 38C162B4 E5AA4414 3E64246C FFFA19D0 A3304C9D B57ECB5F 494B67DD
+979DC6DA EC3EE74 B299B21E 21587E90 9F90B1B6 4ED37A58 9308E6A8 E5C28D37
+27765BF9 396309DF 6F92EA5E A381F739 95C62221 2026E7D2 319E22B8 49DD6B3
+A578C799 35A77C03 6311BE36 3FB0F54D D44B5171 9606BA4 C3BC4043 2109431F
+ED447764 C3CD553D D455493 6B98F3C 8AD0E10A A11ED51E 2D76E570 716DA581
+37C30038 913E5CBD 332CEF7 E1B08DF7 F236B1D A2B3BB5C D300FE4E AA596A5B
+FABED942 DF8F30A4 97A95C8A 2E8EC3D3 5C985EA1 DAA265C7 9253F692 1B049E32
+7102F764 318D330E 6168057F 5E54FC7A A2921BBC 4CF5BEAA 622B871D 297A4456
+687510D8 1EDF83D3 7CBB479C DE980035 E135977E 482DE91C 5CC25050 C133AC38
+B09931E 8832DEAA EB6715A1 D1BA494E 5B32BD31 69AFCC4 B577B343 6C52EE00
+B87AA624 3312D994 97777C4E 26FABBDF 9ADD5966 8E905CF6 9095EB4A B25DD54D
+CC36BDBE 3F15700A 248E9A23 FA56369B 9F95A49 82CA5B8F BB90D034 CCD3FFBA
+9FD9B76D EE896365 6A1CD4B9 8EFF5A20 58806390 6E34CBF2 8112C511 1E572DFC
+4590E3BC A6088B8C 3B8309FD EFFDD9C1 45E1591D BE34C66E 631FB884 859E8471
+A130ACAD ADC979F0 2B0FCCF7 A200E32E C6808F9E AFAF4F3B 609425BB 50F0BCF3
+9E6E084E 2FE20BAF A775415A 53FA2E2B 8AC73797 6F89D473 7ADA826C 22616B5B
+8B5FA841 B5F995DB B9464C4E CA7FBC98 5C413463 7C762A28 87FBD57A F0FE022
+D9C498FC 7933B4AC 281B46A2 802A7436 5D1C48C1 D1146B36 FF98DE58 4EA052A
+3212C0DB 12C0B371 D711479 F0E159A9 99107740 8F18CF82 D94CB538 12225E43
+3AD9E7A2 5CEAA6B3 3B25BAA7 BC1DADCF 5200FD97 B4BF3F7A 31C8DDD7 C75A1717
+DCA412DC 4188707C 876793B4 7CD9978B BEBC844D 1D4CF085 AB72DBB2 6A50E02
+A5FD9F0 E69D14DC 33C4ED99 CF7C3F58 91307311 2A109CDE 32474ED8 52FCE8F3
+7871EEF0 CEF5C10B AAB0A9C1 742027C4 A5F858EA F81F613F 18C92F8F 6DA2DC7F
+C1EA1E2C 430DC801 7E8AD050 1C726E20 FE478062 6DC2C79E 3B046AD0 8ACDDD68
+EBFB017F 679284BE 71F700E2 FEEA80EF 1780DBF2 47B7545F 75D04FC0 12557DA2
+85966FEC 1123F516 F7777232 E27ECB86 D9B1C275 5419B4C8 AEBABAB0 EF6385F3
+5EBE32E3 C09819E2 FFFAFA38 59647A75 98942D60 5E66EA7D 62519BEA 355A29C5
+D86D1853 8534B623 D4418DBF 88A492D 45580660 703652F2 536AC3AD 459FE178
+E3EDC14 8F025ED0 1523723A 9D231BA2 3BCC413B 9163291E 91C40573 D5F20FF1
+727BAF8F 742EBF41 A05D704D 124732B5 DBDCAC24 B69D8759 CB5AFCBF FE6671E2
+C9A2407 D473FBEB 5DE3F55 5C3F988D BFF0A776 B41B487D 9462C701 4A104064
+C89FDF2D 25E13DCC 1A438FF2 934CCA28 AC3F9B8D 26324944 C8D70F0D 38F2F0A9
+C7752F08 E638C8BC C92C7E28 48542C3C 2DC94940 8766FD43 6D9D0A12 B29112BA
+A05B5370 4FB3A8A4 9D5F260E CC6740EA 534AD21D C66F00D1 932760A4 BAB57D16
+D15CA3C8 9D83F870 87532BEA 317C2D84 F7968213 EAB8152A 3B674A97 11A5BF20
+762B6502 FD70D636 64056357 CA1C26CC 8A7A08F5 33CF785A 9CA4AB49 6BC17A66
+DB425A11 CE52975 E2072F4D C2736A79 769EB8C1 8987CF7C 16A7AD01 7F311303
+86FC32E1 A860B305 6FC36B94 EBE2F69 D43013EF 98D27070 CD54D19E 1D08433F
+185C6A31 2FC628D1 A3FD19F4 14AF2B55 AD9A839F B53B6F26 9A145117 A3DFA87C
+6E46C276 D575C0AF 49A2D693 9E401BA7 CE9FB343 EFC1FD41 19E2596A 758D7A8D
+3478A3D0 3C6E3A34 C3F64D54 BE25B7FE 1BF7A92E 80B7C95A 5EEE91F6 2AEEE9C
+43936969 8F18243D 1C9D4811 89A8396A EDD63284 FA5764A4 A25BE2FF B0CBD1AB
+5E31F9F7 1A15B81B 6B1CED41 D4A12D73 A8100942 3D79E266 EF05A94F 2BB05882
+A3CB20E1 BD434E98 AD99D2E2 92C9AFA0 8BAEF48F B14CA2C0 64042A54 CC083277
+9FAD607D FE05C18D B4715F4D 70394158 FDF0C942 5E9A2C88 6FB483EA A3EF501C
+7B93D67E 95BDE376 E0D0C4C9 6282D7EE 703F5502 4AA062CB BED76AAD 79A6C209
+69931F08 F2C24B35 4922C87F 1FC8B8B5 273AFE7A C6149788 76125825 DD764EED
+E65B83DA 615B460 294A8707 9678EA44 3A38B35D 71B08BAE B425F641 D59350E0
+4FFD1DF A0AF3E90 CA7D14F4 504802CA C0BC3AA1 D1A930CC CE8D43F B16CB124
+F9B1E05A 6CC93484 F4A754C0 8B85AB2F 26F8ED29 C980686D 6F4EE170 B186D23D
+CF404FEC 59AF424A 84E01A73 68893D89 B4834570 A9A0CAB 60F96674 859BE791
+8D5C6BC6 4CD5896A 5247E3BE 7AF76C82 F8887A6 A8D925AA F74DE9B3 42A71BAE
+26FDA9F4 C22F3C5D 66678C07 C953D51D AFFB7D83 936440C7 7AC42FA0 21EBD65A
+368FE537 28BE92D7 4D12AB0C C5783716 5E4A01C3 FCC234B1 8F9D7347 E40CA3A
+49EDC409 AA6512D5 C30BF7AC 9368E377 2D9D160C EF55D6CD 45AFB3DE 8F2782E
+F7BF5B3D CFE849B3 1B6040BB EC86D590 C25E5E60 F2DF8BC0 D36B09D3 6F14711
+961E89D1 DD2750B0 816DA398 753B2506 5ACC4A32 3C6B0EA0 F19A29ED 9203386
+59932186 4049F6CF CDF52DD 7CF41B14 85871DFF 388B67C6 32330D3E 848C7442
+DEBFD101 1BC2D244 FE243272 AD1D20D1 D9E3E147 C402AD52 74D1236 A8250C84
+8A724876 567C4AE2 E0691EEC E1177E5F ABFA9937 3B03BA32 3182D89A 443EC75E
+523BD2FF 945B68FE E4F0277F A6D471AD 5CFE7313 1C63335F 41FF9905 41446C86
+76948CE0 9613ABBE 2C1EDF30 A6623889 98A6A08D 227EC77B F8D0853D E801ABF6
+1CE07FF7 55F4F653 D52E9ACA 96BA5788 4050A9A5 6654434C 2F711800 DFC94C8B
+39C71E9 C3709CA3 DF9C5E60 B4BEC52C 768D04D7 B6B640D9 99C01FD9 42793F76
+AA68757F 59675535 926E0D78 E3457B3B D70CBAF4 5DC3F2EA FAA6A7E2 1370CAF
+6F170EE8 730B3E5A 23B62D4E E0200168 80CEBAE5 CFAB2BE1 AB293738 8CAE0786
+94415D8E 7E793491 510868B 10972EB2 7770C889 8DCF7D85 C54D7189 E3930FF9
+B3990427 984F9767 17420ABA A876BAB4 4C737DB8 B10B4CC8 7FFC06ED E8C42014
+3A2B9A42 BB51DD48 1EDD0308 6C20F52B 4AC64A17 F8B7A2ED 3E7BB2A8 23A7C917
+551EE9D8 9D2B3076 FCFD7CA5 62318CC6 DDD969F8 78E3803C 8A12B82C CE9D6501
+2D46E3BA 8057628C 90021771 9B5734A3 A8C76359 35A14E02 553AB72C 3ACC93B3
+5D590903 17C8E219 EA8E3670 864545AF 738FCAD6 7D363BAD F3912B1C C0AA5905
+92193FBD 29BB672B E2844FC5 2A95C94 2CCAA738 1DF5B6F 75207363 A4CB90
+F6DC72F7 F2ACC8BC D309B27D 5BF0906F A8DCFD3B 55F26307 67FE1C6F 31E795D
+8BC5110F 8474EA0E B7B22C5D 8DE81851 7D4E2A61 52A795D0 E4F3F270 4EADD823
+798D6801 1CDF6B0D 6CF0986 87EDE7A5 B1F591ED 2E02771C 1C2BBF2B ED7FF719
+A8279BFB 8E0034D9 84649371 DC20C819 BB6879F 15539BD6 A5D82D10 43970044
+A3EB5ED0 A46DA624 112D07FF A8D39776 40842AD9 A98A74C3 AE413723 23B76E79
+36541593 17D34921 8A9B9440 17EBB618 E0A4BF29 6B7087DE 4B421B35 3BFF2F38
+C2E76C1F 6DA3867E C55EFD43 CAF02584 23808A00 86B3AF36 9EE73E65 673568D2
+AE163353 55D70001 C5E6549B E90D18E9 F75F96F 11D0460C 5287A86B EA140A5B
+79679A72 A18723C0 9B67C14 5C6A757F 22BE0CE0 987A5A49 69F3CCDA 9670EDDE
+6B45D237 76579654 18422C73 7DC8C55F C94400F1 E0847450 3617B70C 245137D2
+2324E528 90D0CD5C C56E5544 CD0621F0 5EB20D54 32A30E0C 58049CDF 9F9063A5
+485E824A D53A39BE B197C7B9 A5B63571 F728DF0D B02A9203 5868ABA2 E7698C80
+43B6F7A1 8AAA53A 115119AD 655E7339 487467CB B09A228E 6ED33899 399EA6DB
+D4D252AB 8D80A20B 91AC2E03 25B5D61 C1B37C93 444AB210 B8BC23CA 19E5B9E1
+DD0C8F5 8770F985 1F58529 A9FB9D63 1854AA10 6F3DF7B6 81148C9C 2121F31C
+9A3EACD5 4ACF2E40 41FBA75F 29632781 18D2F5BC 93D9A4C2 B22329B4 94BCDFD3
+5A0D19AA F218BC7C E9A44339 9B8C7B9 81662BF4 34D0926B EA57390A AE91B4C4
+E2DE9FB9 E0363CD2 14816DD9 601BE358 8614421D DD954A47 3494073E D90B17D6
+7A3114D2 EFB21BB7 18DD5498 50F82D0B C4A7642E 137C58F0 5B94E9ED F8157D41
+F032D8B9 DFFAE04D 353A2EF1 B9D0F647 35831D2D 9F537578 B760490 BC9CE2BA
+D4EFE54A F56F1193 AB652E11 E1223B3F DF466388 2A9A80A1 BBF723F5 BB21819C
+1A5CCB8E B94F276E 45F5065A 8A35B76A FFDF6322 5A6C4A16 36808E87 529997F5
+66CCAA35 10EBCBB2 36131D87 FD7459DF 4E83F1AD B954E929 41042EC B953FAE
+60FCA65C 495DE997 D41F0CE3 80BADD64 917165AB 4E0B2E48 D55C3398 3E95E689
+85D57078 A7805761 D92ED398 771EC08 72766282 E8978D64 3DA34D4B C6A6209D
+C17A9BD5 5D186D98 36F69205 8642E40A B9B4629F 9ADDE1B8 11F00C56 BD9C2735
+61B1B17B 107F5B80 DF11AD47 D65BA064 FACBBAD FB2DA37C 6E001098 DEB620EE
+501F17B 3367F69E 2C894E6B 3EC04941 DABD6D3F CFAEC9 780A913E 99F888DF
+AC13ACFD E5A34C3A 2202BAA7 2F31C7B5 A2115E2D 6B105F7A 6DC836CC B48B27AE
+7442A40F 9EE2A9A7 F143BA69 6FE496C7 B8D4FE36 5B7F1334 50122B3D 80A0E757
+2BCB26A4 A0BB1D55 5136C209 32EE71DC 7F1507D1 B67F28A5 D231D04E F82BC03C
+BD753623 1917AD07 CED6C0E5 876C70D 2F27CE2B 32B6F7B3 74FE21EE F0823E76
+7FA0935D 47BBC01F 351159A2 B95E79D AF164B0C 507501D2 2E66BE5D 1ADAC20A
+ED0ACA22 9604DE0B 79DCDE16 EE07A12A E2A9A35C 1AE33C5 33B1A308 E3250201
+9787F946 103AB546 91C242EC 61471D5E 65BA6C87 92C66298 829AF92A B3CA008B
+75556974 C2C23EFD 7BF8C8A0 8B238B92 C2893EE2 47B31B0 FEB2D93F EE57A26B
+D1DF665 644C39E8 F0E4675A 837ABAE 5A9CFE6 1253A871 998C3E0C 8923BC2D
+571A5D88 952FED1C D5DF1F28 8562916E 5AB502E8 7D0E1593 1650907F BABAF83D
+1F681346 C02C7E6E B090C74 EFC771FE 39B0FA68 2CEB211A 7628EA26 EEC6FA0F
+B74B51B7 CB623099 5DDDC252 54AB374 1B5D7CE5 5E6A9AA8 CA56836D C09F4EA4
+A8E8B806 40AAD070 74A047DE ECC624C1 7162DC15 2FB69D6D 4AD3ED11 B46F7EED
+27E38376 9BF62A7F 85143DCB 8E7C4F33 76E40F1C 816DD667 1F3F18D6 461FD41E
+5AD24931 B55354CA C419B6B B1A0EC58 FF1F08F5 CD9802DE 2E57D93 1C29949C
+F9C15ED0 28B25EB0 5626B12B E0E22F17 CDC2B6B7 DF020AE1 84DB1923 9322E273
+4A2714C4 DF2E4C4A FA5422FB 5E443483 6F7BA175 C08B227B ED88E18B 6796A1E6
+943EC907 721E698C BFF44166 49E3365F 9482A884 254F13CC 3FA3AE6D F7F976A9
+E1751A42 F21A09CF 424AA9CF A07C7AF9 2E807FEA BBC57463 360B8E3B FBD9A00C
+C3219628 79C42E73 DE1BCC2F 407BB488 6B7077F3 AA7634AC F159D4D2 CF2F5606
+705A8E5E F4B1A6A3 40965CB1 8E8981E1 2D8F6422 82E59DD2 97A48E2D CB6A7581
+743CBC47 E5CBB912 42F5918B D54E5B9C C256B8F6 345477F1 49312218 C0D0AC2C
+3A09400A 10F7E424 A1B44850 6D506D14 1B6C1CEB 31732F9A 678ADC19 95CB1CC9
+441B79B1 37660EEA 4F95D584 E57344AC 18F15AF3 9A6511D AE385355 32F7816C
+FC008178 82D1C0D8 B77002D4 55109B29 DB9FA64E 42919D9A 7B86F5BE EB81948F
+AC241BD5 48CDFBE5 25B62735 325783D9 9B22228C 10A39152 591C35EB 6C8C6003
+7D51F749 728E2D74 85059C74 100F0FD6 E2B46B74 F264D38B E1B012F9 E613B2DC
+3EEDC515 E4B58A19 179AC9B0 364188CA 74B9C12F 98A7CCC5 F2D884FC CC254891
+54D820F 79C80319 6A4E20ED 21F6DCA6 6F6F590E AC0BBE5C AAB90294 671F8F8B
+56F8E3EB 3A268C78 B18AA50A 6A3235ED E792553D 3135F6BC 38A36406 6F141A8C
+92B6513A 4EAEB5FF C38331F2 DA7225A2 3B707E27 2F4F888E 3913AA3F 6C0821E6
+B046A40D CA4D6C66 BA192F6F 44E9FE31 418B09AC F38C13A9 C1D9CCEF 2F8B9CA0
+2BDF29C4 33062BE1 30C0A037 C78A510 F217442 5EA168C3 25439377 1A61F0B3
+5A5AECE5 FF0FCE6F 1A529B45 9456FA75 6FC50C26 74F9975A E3711E59 440FBCCD
+8A08224B 8F365C5C 4B4F024F 48B37544 29D476CF 46B04E20 269E8B11 B8BB5459
+C9A2331B 3E795966 1533C97E FA49CCEC 17B28441 E9E8E9DF C7180A9A 2BC5DC0D
+38DDB92E 88FB6A56 88001C73 83F70932 558E0628 5D7ECF88 CF1B1044 88FC69E
+DA4B91CA 8A39D049 1F57B1BC 4F63B5C9 4DCF70C7 4AC6A0D3 F1B7A7F0 B051D4FA
+87E161B 6B2D1DB2 991F9C1C 7A3DB508 170F801D B7C4CBCA DF0D1DFE E5BBE0CD
+16FFC2C1 DCAA024F 7B42EFFD B86D42E6 65762230 6758301D 3037AA9E 22CA0B87
+113237C8 71740DEF 4222B4A 13E9680 95F15BD5 10620A7A 57573098 DF6D8124
+D3038FBF 2306BB55 7BAD9468 AA128A51 CAD3A87B D7BD1504 D41DE75A 9F6103E2
+1FC391C9 B10C694B A99A7E06 EAFDC898 D254E1CE 60AB7228 6B5EC1F1 93C75F45
+36681D2C 792C7146 F412EB50 6A5C65DD C251027 28EC3A74 2293C22 FDBBEBC0
+1C176AD7 35B06A4C B9067DA7 4D225E1E F2D402B8 73E4489E 40A2C221 116191DE
+A026A69E 9E1CA7B8 CAE4D56B 9F211B5A 10DF8F5C 9D26DAC9 E6A6F8B CF4D10B1
+8A57FE94 75B179A4 CD81A292 216D71CA 59C0ED3B 57D9C9FF FACC3BCF AFF93301
+97CD0F24 62092B8A 9328FBC2 3CD85562 5C44DE26 306EBE03 2937A05B E05C3A1B
+6A5DFADA A26F07FF FACF31A8 A2AFA9F0 670D7D75 F8FD501E 961FDA93 80D5AE29
+21BB72E7 17F7CC8B A4F618B0 7CBBE8E3 42BA7942 E62FA768 A9590BF 9722DA0B
+68F8EA58 B3F8D235 55F31BA4 F4C98C75 7DC2F894 77F71B08 47313FC1 7CFBE171
+ABB0DD2A 4CFF9A5C 13F29D5B FDEFD49C 8C164983 11577692 652FE17F F767C2A7
+C1FEAEE 8157249D 47E3BFCF B273FD65 D977CD7F 76DFC6EF AD54529B 86C7C028
+D61A121D 930B5BE0 7CBFAA88 41B2FE3 FF21EC96 D184D4C3 63C0ED3 FB985C7E
+CF7DD9B3 58280C35 F07F6C0 A2DCBEA DB66F557 D5430AFC B0E664EF ABDD74AD
+E63265B4 48BB0F01 CF3619E4 AF9FE2C9 E66784AC DD98A682 72C88D82 FFBEB174
+B10698EF 50C0CF70 20CEE17E 740A3267 A847D4B7 721D0A5E 90BEF8F2 A093531A
+C3FAA753 BBAA4CA1 B57ED78F 7593EFA1 85454BD5 4B137549 B1D2FBB3 89D9A47A
+69C3F858 6BF673AF 5A80851 33A79FD0 3BC37606 63BBDB2F 18386191 EE0643C0
+3CE619C4 18775ADE 2E50A06F D9DC8F3B 26094D0F 440F18A7 AB2DBE6A C894D012
+9DDE2489 2FABE0BC 9EACB5F1 1A3014C3 2715AA7 8795FD0D E527586E 31BB068A
+6F825EF3 1A0F1C4A 77AA3586 63978235 EBA8B402 20E7727D 2E118F80 3AAF3BDA
+58008BEC 5FFF546 737B9DA7 9B576977 C3C96037 C7B7D9A7 4FEB0DCC 2DFDF4B
+919796D5 D9D57CBE 8461A854 9B1B4943 1C2B95BA CBD9743F E53AA5B5 6440BD3D
+9CE179B8 46586829 808D4811 D6532086 AC43A904 E5139052 9CCF731F ABE8BD55
+F8FF6451 915EB405 7A9818B7 29A2B4F4 2B67E04D 63C36107 C43AD761 41D39C14
+16011E56 4FE43585 9CD8E8F3 2B66524B F3ADD4B4 B44E860E BEC0C6CE A6166B15
+1932F7D8 2FE45CB1 1DD6A3B0 414E57A8 F4A52B14 225ED877 52C258CE ACBE55A4
+EDCAE31D 54BFC662 93EA5E9 7A3F3301 11EC36B EC45FB9E C4255764 257D08EC
+31D4F047 722765DB 3A742DF2 7CC4C861 F90E0D81 6687A144 6BDC4CE5 290844F5
+142F56CD 8D97435C 3DB28264 F8E4B66C 67B23827 1EB929E EEDD9E73 44C313EE
+F1046AD4 78FD274A 6F94F362 1330AF50 85296141 73BC37A1 55F30A16 161A2EEB
+A88448E3 E16F797B 5E61D0F7 58607EC5 FBB8B239 6EB1C4F7 6FBAB8DD AE4FA726
+99D72ABB 581E21FC DF51593E AA7C8C7A 49E37C22 14BC2513 1C7543C F0347EA0
+7F430819 43215AF0 816D559A 434128A 98DD3C56 FB07F3AB A1B31467 97BFCBA1
+FF32EB2A FCBECCC6 1F1C1975 77131F2 8D06920E 899AF1FB 90CFBB87 83EB5886
+8FAE7BFC 2B6AB804 23ADBC9E D77F4D78 95295C7C 9556BE8B 98B3095F 807E453D
+D93A41C5 C5CCC9CA 3D166B28 AEC398F1 EED9CC74 80C3CE6A BD4D878E 6D3FED1F
+A42259C2 6DF22CFC 9894039A 30C04F42 998A42BF B3FF8C31 B8373B0C C5833A82
+94E6944A 2E2CCADA BA66DBC9 B0B2932B 33378AD2 516DFE20 3A452E40 8C34CA20
+9E496661 920DA695 364C60D7 890D97E9 D23B2B12 942C9C94 A906DC6A 7C82353D
+6429923A 511C9568 1FDF15AF 90DE4C94 8D38B12A 46EBE94 729726EB AB6167D5
+9AC572AB EE427276 CE66FFBD DC46FD59 A0EC3C6A 3BADD008 10C5820E 5F53F4EA
+31032EA9 852031EE 73835266 AA31C6CF 88029A31 21F58CA6 4D377707 53E89B15
+342D944B A184AF1F 7BC4732D A463FF02 DB2BE6DE C100D4CB 45E6C129 1BED6A0D
+B578D8A8 DCA84011 7D733106 5323C10C B66EFE07 40FB9D67 17F0930F 7CB3C7B9
+81CE9E0A 5B754122 8D9FEC33 29142E2B 215CAE37 C63D0D43 BE8D4AE8 70028418
+71CB0E58 D997245C CCDFBA0 243A71D8 BA4E4338 B2A7402E 425DC652 EE805063
+7C1208D2 3DD6310F C02383B1 9B3F5E33 E05C4E51 B02E79CE 9D9E3877 E0C83032
+FEBCD227 A8E0C8CD 9768AAE4 AA7ADE14 C2DC2067 30150095 F5B5CD75 90663BA6
+D94638B8 DF2EA334 D8E5A5F9 2910C6CE 3F2345F8 6F812C0B F88DA5FA AE7C4AD4
+F42926C8 1E123675 22551D76 515373BF 6FC1726C 2C606998 5880DF29 6F9FD8C
+17084F0D 3FBB9B1 2CACC31E 4AAA9B33 E737E1E7 E8ADA40C 94854931 8E8B39E6
+CA70418D D29BCF12 6A40EF68 8848BE16 174DE351 99F54C6F A5E7F878 B872A3A7
+9A79F7A0 6453E8CC 2F2207E8 2B7EC49C 5AA258F1 5E91781C 565F31C4 1C9F4C35
+CF1617D4 FA44E462 1836FF4E A0E8F67C 3EA4D06E BE861AE6 E96A7883 5E42B562
+546F58 3FCFBF2A 27E96782 ADDAD9BC 67AC9626 61B73257 B11A277C 8801DF15
+3170011B 3F2D097B C995C41D 10B87202 B158D86 634C3BB7 3DE23B8E E21C8728
+500BF5A9 C9306714 16AB7FB5 346A993C 70812C7 67BA874 7495C21D 7F843E8E
+11399BD3 4455EC83 F9971A1C 7442E23D 86BEA54 8F09466F E37ED94F 9E07E0CE
+B16BD358 23BBDF93 1835D309 31346F97 9D27860A 8678D8CC BE6B975A 6CD5FB30
+D6B237 A9C7877B 51C78F75 CFDC809E 63585B97 B0ACBF25 1D89332F F5AFBF9
+A872365F 62751B54 948F19F8 4004C7DC 78990A48 F41767E F387C191 A46DCB5D
+D1B9AD26 4A79F8F0 B33F5427 FA22F94C 9B0B4316 7534AE60 B1BABC99 C716848D
+47388F78 FC721372 DDC7EE8 16C0200B 38268FDE 76CD6C85 70472053 258369C8
+C290C4E 70169594 5EAD31ED 7244A55A CE14074A D4101DCC A1FF42F2 AEC59D94
+F8EA735C 5DA5BF0B DF8F6A57 B0BF3D86 D41A9DA9 BD11472F 4FE68AAD 74D33783
+B368D12C F6CFE14F 130860D0 DF0E71D5 CE3FC6AF 42738C12 D5B72FC7 5391EDF0
+3797A1B4 3D48EB8A E85F426C EE128B83 3D1F39BF D1AE629B 6C3A8AD6 DDB769FF
+293501E8 492A3CD5 4A0B7A93 3C1F7950 B10F3F00 A52DC11F 2BF3F97E E70B56FF
+B66DC984 CD1BAB82 CABC9E9 CA2593E F150B2C7 73ABE154 D8162F98 76B89D4F
+103C9E73 F46AA18D 39CADAFC 551B3CCD 6677D509 348504EC 3BED45DF 5626BD9C
+344F2709 AA25E38D 4216553 13E5E9B 64F7D085 5C1D53E ADF17D9D EDB9424A
+C7104233 E016D785 D92B6B4A D28FF2A E4D2BBD4 82679324 98C4258B 503C785F
+8C1C126A D0A68123 98AB3B98 BD4E3D06 2F1D2593 6E7DF0C3 ABC6E181 474AE557
+8378F4B1 659E9F58 8D0F4C13 2C89C5D2 53839221 BB068B95 12C66CD9 956F96BB
+13BA42DC CD2C0C63 17422F59 B5DF5887 2E506A33 E0BA33C9 F4AF348F 7B4103E0
+C27DD3E1 4D961DA3 EBC199CE 43034CF7 3D2EA99B 94BF7D98 4D8A8B32 4A63AFC3
+2BD3623D CCF113CC 8384716 F84BA1C C8DDB979 83D750D3 3874D161 B455C75A
+3908D02A ED86B070 69F83E1F 5B83D185 A1A4912D 68E106FC F9301273 F39CB227
+86F621B9 56D5EE8C 38E622D8 124E5031 56E3CC3F FBF8D2D8 43719CD6 FC7EC2EE
+AF30E32D 72310EB6 9EF752DC 6823A90E 16B4D7FE 756E5EF7 CFC3B96A 3FA02B03
+3D351ECF 6E1A4FBD 9BA30D31 869F1B96 94E8C711 624488BC 45977465 62E9C121
+A97DFD71 40613322 4E79E245 841C6D2A 9E5DE3A4 281A3444 C899F018 3B2C422
+FFE95D90 4B613131 70C2464A F0498B73 AA968171 5A1DF208 F6415EE5 282D056D
+FDB3CCD2 7223ED7F 5972D363 41AAC13F 7298F3F 6D7EE8E5 C00A063 381A4023
+2F8ED68 4BCC1001 6120C6C3 1277AFA4 87D33EB5 D98C23BF 232F5EE3 21F87336
+E177288C B6D87E41 E448B2DB 94CFF758 5717EAAB 3CB9E6DA 229E0DE2 40F14C88
+C6AF3BA3 39AE89DE 50127A28 7D0BEAB2 AF7AB7D0 B7BE4EAD 31357439 D4214B61
+A262B8F2 1659B845 62F1548A E36A54C 80AD2E2 85709E0B 939035B2 7E5A252A
+F8B71F47 99183D99 D760AC02 2833A35E 72ACA6CE 8FD98703 876C97C3 AA7869FD
+47894614 721172E7 C9548B68 935401B2 D76C522D E7B1C6E3 B45D2AD6 B98EA781
+997FB5AD B70EF2BD 7E223630 9A4AB863 80F72FCC F5D78448 C709D0A 633E6E4D
+B04BBA73 1C4E0605 3D2017BE FB3A5719 1A546BBF 6972EDCB 22CA27BD B4D9BF67
+D34A21BA 28ACB009 3553D583 8E956D59 7A8729EF A6D8DA65 60BE2CD0 6CF1644C
+993BEA3 39400B25 88BC0B7 D7768920 FAFF10C5 FA78891 36545CCC 8FF9FA83
+5556E9F2 F53D4FB8 9669AC1B 30EF820 66054CF9 CD3E3D3B CB9B8E81 5756E05A
+C36FD88A DB54AE30 725328 BD0887E1 1B96C5A8 489DB826 3BAFF12E D1155B79
+FD90A252 EAC9949D 1FD58566 8F84936A 87DB6F46 FF66F900 9CCE417 CECA2E21
+DD9182B7 D9DFF795 5BED6F72 3DF2EA74 E28A0817 EEE32C34 53470EEB 726CE7F9
+3AD6D124 3DE4F8A1 13F8B6F3 F7057BB0 2693F14C 721BFA46 C74928B1 493FFBE6
+34516CFF 53EAD7BD 311056AB E70E7A25 245580F8 DEFD98F 60319F3A 8717F92C
+DD34F5EF 7C43717A 714E6B43 760F3DAD 3757FC9D EAC2515D F16CF950 58B98CCD
+43A17254 28093373 8F0CAD08 B6DBFCDA E7885EE6 C46CC1F5 57CA0532 61F466D7
+B66E53B8 67B94724 2AA564C9 7B03991D 1023DEA7 2C5D08A1 5FEFB20A B4D38410
+67C7BCFB 8152BF9B DB8581A5 4A59140 47314F7A 8A7FBA1E A6399F75 BFB70983
+38D61B2D A5B75DC 88F483F 5BE556A6 D01D2039 C6BC2B88 84C9819F 5A41EF47
+70855167 1317B3CE D99C36C9 EE861FA F0D1A75E E5DDE7D6 B2EF140C 78CDAA5D
+4C3146DD 39DCF185 AB4E0030 84C76110 1CB90C65 AC91A427 3FD2EFB9 6F54EC58
+CD0EEBD6 82770C5D CBF1FFC3 40738D71 D633B6D8 8CC48165 C3BDEF1F B90128BB
+5EDE69C2 B9A120B C1AF35AE 27399EAE 652CD61D 781DDDCE 9337D5E6 AB6FAA5E
+3EAFD8BB C2C20F0C 84144F0 8B5A5655 C03A0E2A C0135AB9 3E3F6BB4 F0C3F6EE
+27034BD7 8780DC37 F6C1B17D 570A1791 338F4476 2AC1EE0F 56FA9131 675934B8
+C6D2F48F A9B16AC0 8C4368A8 63561745 5173C925 B15B069 C4C0415B D631B2B2
+FB16A190 227499CD 8D5ED8E1 4FACDA6F 922FCB5F 4CAF26D9 C1073420 82B644E9
+E6745C5D 51B29C7B 29D2A2 A25BB326 B04F9C49 3BE1441F F1EC0138 38792CDC
+24F09B08 56B14FF6 8E5AD752 FDF2ED1 E6805FF2 910E75E6 E038308F 56FDADC8
+E71B9B25 732D9F5E 678359CA 393A308 C71690A2 2681DCD F30F87D4 7CDF863
+CD134898 2EA57D5D 3A135324 E31DF363 92DEF32E 219C1721 18E59F25 9D01C1F4
+FDB16787 2C90F559 3EED7049 CF343409 DDE5471D 894BC281 987011F4 64CD0501
+95EC524E D5DD5DA4 5E1FEB41 521DB91D 5A1DEB01 6235DFEA E689CE05 BD68430
+99A96BCD 345215C1 6344A8B2 3BF4E8C4 38670CEB 4F6BA989 3E8D7843 D6F7117E
+11DDEDDF 5290AD0C 198BAEF7 2862F27A C57CF9F8 60836996 AF933BAA 14763528
+8F5F5210 CC9B460 D1760586 A0219801 9F1C4517 F3A07C8D 52279437 55398D01
+22FFA0B1 36BB3B14 9D3AF584 2E47694F 310DD55 41F88ED3 413675EB 33BF0D4B
+DDFE491E D7A37106 2ACFCCF 63B28EA8 746BE735 2D27CEB 91AD3CA0 67F57192
+1B8A9D2 A03A4257 1D2DE909 72707E40 1B6FD356 89033E12 A8EA9EB1 D38F6C97
+C19C4FCD F017D07E 423F57D9 73C3954B 53E37752 790B9BC7 D62E929C C18B1FE3
+DDB1775F 102DA7D1 A6A6940E CA4E9153 7B442A3C EA2FC463 2730688 25F50CF4
+BBEA097 5941F7E ACF1FCE9 830145AC 1DF2D57B 697A4475 AD049A3E 9B354ECE
+4676B347 E448F77E 2C530638 1C2F30E E668B20 5F8507B0 425679D0 FE6B931A
+2A08F1B5 B748EE25 4DBEC68E 1747B4AC 2AA58251 7E5F199C 8E24F8F8 755E0A05
+43C16CF2 394EC5CA 436FD0F 45B17C23 24DF8C21 D056FC9C 7F05AC5C 2A33906
+CB2140C7 E51690D5 EDD4ECF2 68595476 47573030 CC1B6427 2F58F646 9887EB38
+2D8B8A86 B3D33133 7C9A70AD 4A9CC450 4DD128EA 4853C45C 22C2D325 4B69A4CE
+74817D16 32374B1C 4D04D880 1975FC7A A92F00BB 1902731 3E3AAE90 71043F3E
+7851BE19 6375B8A5 A8E2017 953BCD14 E4A4BFE7 98A57A1F 63CBE4ED 98B572A1
+863C319 B912B53C 34134C2 CBC00FC2 2CC2DC66 C7CAE805 8906F802 E77C058A
+5E2BF669 F89E4A55 7D608987 4F221895 AFD01330 21973489 9C72613E 384390
+15145089 CD7F4EF6 7AB9BFDF E10BBEB2 7EFD2804 F90B068D BC8BDB3F 754EC8DF
+E79E57B7 9D091C9D BCDCDB47 540EC4A3 794130D0 8323DBF4 78D2298D 89EE2303
+B860AE9 4CC713CA 8C5EC9D2 5165C3C1 81858552 CC532D17 E67D3CAB A7B8964C
+E3E785E2 BD592432 EAA0FC0 DCC0BD4E 8AD893B4 E7B74CFA 685A9E8F 41AFFC54
+78B5FE1E 6D189D84 5CD67F54 53177AA2 6F88B791 F656577 680073E2 25E1C611
+E9C6696E BE84D138 9686C7F7 ACA131C2 5E73C133 510EF92D 3C51BAA9 B0E49C59
+4D7144CE F5E80372 28AF94D7 7FBC0F9C AE50928F D8AAD3D5 EDF3F453 5E635497
+CDC0684B BC79C1BD 4AA5430 3DBF0686 F5418995 4D05A744 CD207325 CAF8FCFC
+6371C05C 646E104F AE549683 F679495D 54A6DF37 51DCF2C4 823EFD95 AB6A506
+B6553024 EB602DD8 CDDCD287 6E022F3C C4CFCABF B92C4E4A B149D9F8 21B3709D
+DFCFBB1F 2BADB68B 65269EC0 46824A04 6DAC0351 1AA15A59 9A58B1E5 FF86AC9E
+94DDEFAF 51463015 18C73898 28B7BE10 E19EAF21 69DCD49B 1F32DF75 C0899CBE
+7C0A7974 480B3985 7F479C9D 73A6145E 5DE0E1FD BD6873DC E6B67EC5 C19CE608
+F11B6626 2F8C6904 100BA027 4FE1EC95 64B28F38 E067D36B EFE4F76C CDCDBD15
+4F5D36EC CDB0602B AEF5F161 2CBFA66E E98D7927 85DD247 CE9D0413 AB62FF6E
+35D9F3F4 D2A63966 4CBEBDB8 D276317B 171BE6E5 53C91762 38D6AE71 A2BB8455
+373B277F 1AF8FB63 E1C1E3DF 3408C089 42099A1 11CBCE45 589BE0B9 12B8C320
+5F473E2C 6326D952 FD1F882 2BCD4BB 2680CEA0 D1A3BB71 EF988988 7659749
+7E5AC0B6 A69F05C3 C8027832 7D07B67 C0484422 983ECA05 E0DD2A3B 319F0A2B
+17A11F56 B3D593BA 45F27BAE DED4386C 14CFB4CC 1981CDC9 B63D31E 687B3BDE
+A1D9BDBA ACAD809E E49B0DA5 42A9633D FD56B474 D216D5E0 5FFFAC37 FDD08A84
+2609DC1D 4FCCDC67 7E87B9AB 44DD34E0 1855ACDA 1F65095B C693F4E6 E887C869
+37B5CD30 51FADE87 51A62291 836B9C0C E4670E9 1EED3CA3 9ADEEE79 7645CC0
+F41C76DB DDE7FB54 52937A4D CE57929B 5484FB61 23B7AB9C C856EF98 A65A531E
+93975796 EB9EEE2D EF8E4554 128D6BE6 BC4C7DDF D3EB0303 D0FBC04B A78BD530
+EF0A216E 726F0749 FF1E702D 3EBD850B CB11381B 8981A3C0 A5DDAC89 E32CF764
+4523EC0C 3FE5E642 5C329275 AC8C995C 4491390 C708A37B 42087BA3 B280ABBB
+6C98CC4B C50B005E 3E26F1C 1D7DA93B D0992175 497AF0F2 F138B067 199EBB5F
+4DFDA5BA 2C55E6AC 96AB2514 650EC9B6 44279382 5F3CEB95 EC0E58E4 E46EC695
+F57F88F6 C1FA2947 7C2E9FE7 D8F33C1E A27F0933 5FD969C3 A97AA28F 48773FAF
+ED614F95 19D8D558 771D77CC D35572A6 817CBEE3 C3C7DCDD B170C7B5 20EE1871
+54B4EC58 A5D2549C 671BF55C CB32546F 2926F57 5DFD519E 9E28637C 88456063
+26C2ECE5 E9BD8F0D 235A508B 5AC58897 1FEB6A7A 8DF7E812 534F87DC 473A3A40
+ABCECC85 6F768B94 EF8C6EF4 B64CB4AB E1233EB1 3234E964 7DC7E623 77E6D1BC
+71BB8EFA 78814F97 9CD0D46A A7C0F5DF 610A6ABF 9B81E4F0 EAF06E78 1C28C982
+67495896 41CD5BDC A7A9DB1D 84DE8CB0 AAF60B6D 269CBB4E 925AC331 2EC7AA55
+68A4FB1E 551BE4F8 73A95B70 288C170C A1AFE92 2987CC9C 1D7B5C4A F39E20AB
+25CCDBA B40FE0D9 D334CBE3 98816580 F4D88853 369C532C AE895517 1E437235
+2C0BF372 6585104F E865A525 762F847D 3F6D597D 5F4B11C6 DDC649E4 845912A4
+B45F7E0A 8E95CC90 239FD1A9 C31E3E2B 505C267A 7AA60138 5F25CA29 3259A6AC
+AEC0F53F 71562512 E07819B8 C52BCA8A E8E4148D 6B3A1799 87200802 8EA549B4
+8593D257 4B1AFF6F 7652526C 369F2A2A E85E3446 8ADD84D7 C268CF0F F6D8E2B5
+95752ED7 4DB75D14 838ECA7A C6806619 79CF0CC3 8DA0C1D4 7FB87033 86EFA067
+33E3434D 374A401F E96E7943 C384FFBD 27F5E869 3A52FBF2 F3BCA49B 268FADCC
+B9A333DF B63D0769 524E9D55 97CC8D99 5B4D270E E79125F6 29124D78 D25037F8
+4BA9E6B1 B7D4AE2D 71074E20 730CB2A1 62BE4C2 7E2BE8A3 1ACB7B8D 9806C36B
+CC47D204 ADB8659E 3C9E6DDE 7A505481 66BCAEE 1D9ADCCF 934848BF A6C8803
+8A0118BA F19023D9 F074B201 37A7E232 40E70837 9BB20D58 EDF0DB6A 8A402F2C
+229FB027 706393C8 4E6E50E4 2065097F 87751B0B ED4B9C29 834DCCF9 2C295718
+87AF24D C4895948 C06C165B 927F1662 5DDA6946 F563DE4E 68742B81 B4B6286A
+AA24839C 1C935916 8F4D3E53 22BC0B29 C7D3965A 2AEA77D6 1B52BFA4 71953E9F
+2E5C5C3 29BD1587 9AA29B11 97F31A63 EB4DDC28 84B8D909 DB86D57 9601C59D
+ED9FCD8 C446F009 CFD8FFFF 6B1F2E01 892F3F1 CCAE4D69 98F8C764 AD784378
+C16ACE42 10043566 E656C085 829AB8E0 9B5B0E34 6E9A3B75 2A77A31B 89036A7F
+E2AFD8C0 585687F6 6900A17E 7577F9FD 396E5B53 2A0934D3 F2C82F2C 7E839C71
+CA91CCF9 51A4342A 8DAC7B63 4D84E3A5 EA3D6A01 DA43883D D8E3ACEE B3D4F017
+45E1775E 912100F4 5159D4D1 7310563B 6CA958B1 1DBB883 627185E8 2014AE5
+75DCB21E 50ADB11C B5EB5E26 F0137368 47E083AB C573383E 60E11909 6E425BC0
+1BB63AA6 3CF591DC 284B800B F81D3EB1 3336EE03 DE1D3E78 317DC8B5 E28FF0C5
+BD5F63D2 9EB403A7 30BEAE28 D5F95348 9136169F FE0E610A 39CFEFBB 95A270C1
+4E734C57 3EFA2BB9 DD9B2A48 F30D646F 27698018 A5A3678C 4AC9DB7C D0901039
+18A5F992 F892A968 D2F97B81 5D239CAD 8F4DB388 7384D051 E7E2959A EDEA01E9
+7CA3A0A1 F0F63F5 9651C4DC 58643D4 E1C7A5FD DF81FC28 52F2083 EB9E9D9D
+E3B79869 D732EDA4 D9E67C1E BD4891D7 27320475 964C597E D22FA597 7C14ECEC
+B833D25B BBA07B34 51B7EFAB E2EDD812 AA2A0592 D8823856 E2AA7D3B F0D1F9FE
+AD1CECD6 7F00763C 9D833F42 81ED9399 7DF83CD 301E7CE5 974E0200 3B7CECEF
+1B7992A8 B24BA40C 476CEC63 3E1A2EA3 AB81A04C 14187938 D7DFAEC8 FB6631EF
+9D9E5157 8C1BEFF C2E622EB B74BA8B0 7C083743 8EB4A9A0 CF532AF5 57276A98
+BD321B10 CFDF85F4 C4C070BC A2D8BEFA B9B6C5B6 EE10EA14 50FB7B3F 8D0B681B
+51256728 278AEFBE 13269FA2 832E9BE4 1753815C 965DD0A 38AF0AAF 843D3F05
+51BB5B7C CB27FFEC BC6780C 5939E5B8 E048D5AE 7EB2E4CD 3D74D284 577DB9EE
+2499CA16 D9CEF266 947C63A4 6EFE0648 CAFB1B77 AEE1F42E 3A263482 E7BB95F4
+F247F93F 4C987418 DFB12CB3 83362181 18273A76 8473675B A82900AC 8B867F87
+9193E755 873AC4BE 7A4B6B45 7BA9C7B7 22D2A501 91F15E97 360AA8A3 E03660DE
+808C3082 AEC4B667 A640CD60 A664AF4 31FAF12D CE66446F 1C10F427 A77213EE
+69BC37A F32DB9B5 6A90A5D8 5A9D8B33 15026C2F 31E18CE2 83439104 E07EA0D1
+D70ADA83 4A8BB974 90EE7B9E 66944A47 AA59947D D00F2A9D 7B5BE193 88B0B0CB
+C4D8B0F4 4E277445 E52715B5 E63631F5 45F1DE60 321AD41E 8999819D 83E6D066
+AC663E9B 498B5A4F 6430367A 43A9BBAB 8A622444 F03A2B89 AC922364 DE1D6648
+2C9E6B2D 3E9705A4 4285E7C2 49E8B509 6C0C613C 77F02290 D71F83AD 559322D2
+90A895F9 190C0C58 4ABF7D7E 5DF08302 B22B958 F17CEA85 7990271 7A008051
+2B09A832 ADF801D8 5F7F2746 C2F903EE E4850244 6D68710F 39AA4DF3 F2214E
+78D9984D 78096EBD B643EB5C 9215AE17 C5853A55 7A6AE9D5 733AB2D3 6D480215
+86CAB1A6 6A766DA8 30A93A0E AE6CB3A 3647D7AC 46160B5A BA414B2D 7CE180FF
+38BDAF86 552B7DE2 FBC103A2 54209E2A 5AA91D29 3BDC956E BDE0A5C0 9690F22B
+82BD67CB 13F0F785 5FEB5462 B7EA9CF8 C789BADE B2ED93D8 9A151E48 5BCD9DA9
+CFC36B38 CFA429D3 FB91015C D88DBFAE 31D83847 64356C50 438E0B40 4E3A33D8
+23329FFA 6497D137 34A42758 1C2C0201 23B5E9EE D35A0484 BC093C45 4DD50B98
+176D482B 3FD4EDB9 534005AB C374BAC2 C20B73F4 A8CB0065 98A49FB3 C296AD62
+A21EB008 4B004C1A B4E12B32 C18BD5FA 6FE80789 6169E230 217070F7 6795A705
+96F5E847 DA7FDF12 FE49D9D3 F6DD2D75 BE4F952F 5B9A8C1A 81B6E566 FC47C2E4
+8D3EC034 7F041012 92DAD073 5543FBDE 47F760AC 780B376F 87CD41C5 3AC8FD56
+F442CCD7 62C5848A 8F15735 73EC100E 4A2D6E36 315BD403 C199D794 93130154
+76A591B1 E2ADFAF8 B61B933F 60E693B0 B2D8A082 2ADE86FE BCE1832E F973F037
+8B757991 13FD873B 39B51F11 F3FC39D4 7D694F9 E4F43A0A 6A90EC8F 618D5B71
+75F59E4 B74816D6 6D057B7D FEEE6A0B 2A61FAA B64B7F77 F1E55653 A09F27F6
+27E7D98F 841BC4F7 89B964B6 EB95EDE8 62A50D66 DA382A4D 749E194D A0196302
+FE1E9539 5F7BAC7F CD4F2BA6 C5101253 F3CFA272 A85E281F 55AB4EA5 6EAE24C5
+1FAB956A 56028B85 8F14C1C4 633DAF44 AF1A3A58 FF3C3D9F C1CDE57D 101946B5
+13CC2811 8ADF2CEB AEE195EB EDF03CEB 2899BCBB FC5F76B CC0DC7D0 9F3CFB28
+588AB088 BADEE689 1B469469 69676F02 B8E0908A B382B711 1F15990C CB0E5E52
+D3B468B5 F94D6E88 EEDB229E D1744505 49C28FB1 E9FB602F CEB922FE E2428515
+9269D1DD B3A56E1A 5B7B88EF 468B1965 DC0AB821 E98202C DA6DB41F 94C4FC34
+2330531A CA759ECB E837EC6D C7E3B6C2 3F6AF73D 5223148B 30CF6AF9 3ABF1D2B
+D34D0C54 7A7144FD CCD21A4C D15672D5 F803D0CA 4CE0114D E63F9869 5DA36E3C
+9D0FE453 F79E5919 D225685C F85794F7 7713225E 598954CA 39C0C1DD DC91E753
+DD26554D EFA6E084 B8FCAB9A 1EB5D3AA CBFCC536 33C64BB4 36C26DFF 20C24931
+9ECE85A1 348BA95D 25A6D537 D118AD9A 22E345AA DBB691A6 BBB2A68F F7123994
+26F2C38E 77DB3E59 7575B512 6B961C21 735CE9DA 241D4B62 6BD04366 D7578FBF
+69A85F0D BCDAFE6C 9569801A 712900CA A4A96DF5 6491E30F 711047E4 914118DF
+BAD6C6D1 1C1788BB B9F3C99D 32118976 AB8E1362 6B1D744C 4F7BED0B 2D00BB86
+13698BF1 D263756 83483909 ABFF25D7 117C59DE EABCA4A2 87216A60 E298DB98
+D82BC9CE EFCBA729 55F51824 498D97F4 8ADFAF17 54983316 DC3EFB69 BD8B000A
+AA415D1E EE61559B 7E34DF01 F0721F90 92BE96E2 D08098E2 43180836 F0217F26
+4F32ECB9 383A24C7 28D8E63B 6BEEEC70 13FAE0FA D6BBE29C 525E5775 6F4AF57C
+57F4F2CD 6DF0E381 DEC50B7E 6B6FAE1F 843413D3 54405832 952B069B 5A91C2D6
+FC44171D BB14BF1C 8E1D8A11 9BB2E9CF BA6B9F95 A51C0236 ED24440F FAA1B110
+17A6B564 8E0FF277 FAA29D19 5821AEF1 3862CE03 F771AD26 6C93DB7 EED34940
+D58E7723 F93D3FB7 A0821B20 102F26E2 8635BB6B 9AB804E AA80AA2C B8F5D491
+68126B25 F8AE7595 9DA1081B 5B18139C 91D535DF 48F1DC73 F5D209F2 D2A875F7
+356B2C4 7103D833 3EBC9BD7 D1157DB 178F10CF 6D8DF98D DC068E1A 22639EBF
+504DBBE0 EF256CFE F771FFAB 1A5A1F44 61E22C51 797D2495 89CF9744 E779A3B8
+21B328D6 C1827C5C 67FF9B21 3E614C33 DFE4EBFD DCA148CA 1F4A8F06 CBF1BC54
+5102229B 350CBF51 A2F6F157 F7F2C76B 8D6A5EC3 B2384AA4 801D5F82 4F289903
+2BB94373 2D1E4C51 6027C2DB CB655A15 D6DB209A BA81B247 D1225740 177C54C4
+6E489086 5B8B5086 E28B05C2 89A60550 AF1DE8BC CF5D8BE0 DE98AA26 BA1A4C47
+16664F0 9C5920A6 3B423DC4 A6F1C69E 575B24AE 83C83C66 18E8CE71 69CB4705
+33BD7743 8C64207E 27141A01 70BF03D5 600C771D 36EECE26 E0ED9986 53BC93B8
+ACC5A97B 150ECA19 78C680E 14BA19D3 89308DC4 21419A50 FF4E323C 6B71CF1A
+186E6A1E 16555C89 A8189C98 4ED9751A 647A1C16 76091FF6 7BC66FAE E8D501C3
+D3F39F68 15E08725 78A3DD07 B6BDF542 7FB7A7F6 C8EC5D6E 9D6C120F B209D8AD
+595C81E7 85F09B70 E6F56852 D1F81610 E9DC9288 AB409CBA D7A53B0C E442DC4B
+6D5FDE2C 14B7A6B1 1F8CCE37 55F59237 2C6BFA13 D2CB7185 D493E60C 496C36FF
+9FF5D020 4B644A72 6FFE4C0 12EF9B25 D6348765 9147332 47603882 E52D690B
+F2B31413 39A2F50F 57F9287F CE0EB48A AAC430E6 76E30BA7 44BE595A FEB732D9
+8A7A0FC9 B13D75E7 1CC76DCF 6142C7AB E9F04232 65CA29F4 523A6C33 E8EA59CD
+9CE7208 85BE9D09 A2FE547D 53F5ED3 DD2D1892 F5834FDA 78B53013 BB487CDD
+630F4823 C6E1CDA0 D61D2E0 4A50AF53 F8F0152B 3B062B65 1E487986 3962B5A2
+253DC0A7 4381591E ABEC9322 BCA7A665 C1652195 1843A1DF EFD35C01 B6157250

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.sml
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.sml	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/test/first-5000.sml	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,13 @@
+val () = let
+  open MersenneTwister
+  val mt = new 0w1234567890
+  fun loop 5000 = ()
+    | loop i = (
+      print (Word32.toString (rand mt));
+      if (i + 1) mod 8 = 0 then
+        print "\n"
+      else
+        print " ";
+      loop (i + 1) )
+  val _ = loop 0
+in () end

Added: mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/tests.mlb
===================================================================
--- mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/tests.mlb	2007-05-15 20:35:44 UTC (rev 5556)
+++ mltonlib/trunk/org/mlton/ville/mersenne-twister/unstable/tests.mlb	2007-05-16 06:26:07 UTC (rev 5557)
@@ -0,0 +1,7 @@
+local
+  $(SML_LIB)/basis/basis.mlb
+
+  lib.mlb
+  test/first-5000.sml
+in
+end




More information about the MLton-commit mailing list