emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] 01/01: Fix chess-polyglot to work on 32-bit Emacsen.


From: Mario Lang
Subject: [elpa] 01/01: Fix chess-polyglot to work on 32-bit Emacsen.
Date: Mon, 26 May 2014 18:23:04 +0000

mlang pushed a commit to branch externals/chess
in repository elpa.

commit 3ba4ea465affe6de3b15ff02b341e470152ab975
Author: Mario Lang <address@hidden>
Date:   Mon May 26 20:21:10 2014 +0200

    Fix chess-polyglot to work on 32-bit Emacsen.
    
    Splitting 64-bit values up into 32-bit fixnums does not always work on
    32-bit Emacsen due to the tagging bits.  A key is now a
    list of 4 16-bit values, instead of a cons of 32-bit values.
---
 NEWS              |   17 ++-
 chess-polyglot.el |  563 +++++++++++++++++++++++++++--------------------------
 2 files changed, 297 insertions(+), 283 deletions(-)

diff --git a/NEWS b/NEWS
index 2f82b12..6a359e7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,11 +1,20 @@
--*- mode: text; outline-layout: (1 :) -*-
-
 This is the NEWS file for Emacs Chess, a chess client and analysis library
 written in Emacs Lisp.
 
-Please note that proper documentation is still on its way.
 
-* Release 2.0:
+* Release 2.0.1:
+
+** chess-polyglot now works on 32-bit platforms.
+
+
+* Release 2.0.0:
 
 Began keeping this file.  See doc/chess.info for information about Emacs
 Chess.
+
+
+Local variables:
+coding: utf-8
+mode: outline
+paragraph-separate: "[         ]*$"
+end:
diff --git a/chess-polyglot.el b/chess-polyglot.el
index f1e5d44..a6be4ae 100644
--- a/chess-polyglot.el
+++ b/chess-polyglot.el
@@ -23,7 +23,7 @@
 ;; The polyglot book format uses a 64 bit zorbist hash to encode positions.
 ;; Since 2 bits are used for tagging in Emacs Lisp, 64 bit values can not be
 ;; represented as fixnums.  So we split the 64 bit value up into equally sized
-;; chunks (32 bit fixnums for now).  781 predefined zorbist hash keys are
+;; chunks (16 bit fixnums).  781 predefined zorbist hash keys are
 ;; stored as constants (see `chess-polyglot-zorbist-keys') and used to 
calculate
 ;; zorbist hashes from positions.
 
@@ -74,9 +74,9 @@ polyglot book file.")
 
 (defsubst chess-polyglot-read-key ()
   "Read a polyglot position hash (a 64 bit value) from the current buffer.
-A `cons' with the most significant 32 bits in `car' and the least significant
-32 bits in `cdr' is returned."
-  (cons (chess-polyglot-read-octets 4) (chess-polyglot-read-octets 4)))
+A list with 16-bit values (most significant first) is returned."
+  (list (chess-polyglot-read-octets 2) (chess-polyglot-read-octets 2)
+       (chess-polyglot-read-octets 2) (chess-polyglot-read-octets 2)))
 
 (defun chess-polyglot-read-move ()
   "Read a polyglot move (a 32 bit value) from the current buffer.
@@ -133,8 +133,11 @@ On reaching end or beginning of buffer, stop and signal 
error."
 
 (defsubst chess-polyglot-key-<= (lhs rhs)
   "Non-nil if the polyglot key LHS is less than or equal to RHS."
-  (or (< (car lhs) (car rhs))
-      (and (= (car lhs) (car rhs)) (<= (cdr lhs) (cdr rhs)))))
+  (while (and lhs rhs (= (car lhs) (car rhs)))
+    (setq lhs (cdr lhs) rhs (cdr rhs)))
+  (if (and (null lhs) (null rhs))
+      t
+    (<= (car lhs) (car rhs))))
 
 (defun chess-polyglot-read-moves (key)
   "Read all moves associated with KEY from the current buffer."
@@ -157,271 +160,267 @@ On reaching end or beginning of buffer, stop and signal 
error."
     moves))
 
 (defconst chess-polyglot-zorbist-keys
-  [(2637767806 . 863464769) (720845184 . 95069639) (1155203408 . 610415943)
-   (2618685246 . 1655139042) (1971536997 . 1218186377) (848342074 . 540017087)
-   (263957791 . 1627660921) (3896152207 . 4076560586) (226391645 . 1484086288)
-   (436746274 . 3467632685) (2516964848 . 3797861296) (3491888988 . 3510251221)
-   (1086189917 . 1248276018) (18044180 . 1876255637) (1572111136 . 1190386149)
-   (597658413 . 2146900428) (97624494 . 2243205793) (1738507407 . 1854916977)
-   (1950989311 . 2149575947) (2098318769 . 3283594736) (2194108574 . 
2015279052)
-   (4079062812 . 2500884588) (856979699 . 2941369318) (1270058469 . 3877737539)
-   (2858720366 . 3170717948) (2378012835 . 1387254795) (2278688587 . 
2178388503)
-   (435406673 . 3555273441) (3031118064 . 1655806655) (2063925420 . 1107589828)
-   (3376753832 . 436852829) (615148625 . 1302492416) (1285502018 . 1963045959)
-   (346460119 . 1016137793) (2803604355 . 1176288659) (55085973 . 2968618255)
-   (1669016372 . 4287873088) (164740250 . 1037634196) (896886403 . 883023163)
-   (1935551383 . 2764331555) (410153072 . 4055711755) (533441746 . 1505690343)
-   (3541084098 . 3466290517) (3214426080 . 4267541060) (2675233103 . 
1951705124)
-   (1374411850 . 3115986997) (1552073989 . 3684348154) (4244110986 . 875606593)
-   (844343081 . 3115990494) (2356462440 . 135999605) (3116133511 . 377238503)
-   (2129956651 . 2197966368) (299173332 . 3276914047) (1701379241 . 745972291)
-   (1306570996 . 254977976) (2530644806 . 214138461) (1122123979 . 1667800879)
-   (1831591130 . 3801192033) (1116211970 . 920967505) (1594837592 . 2551651254)
-   (972591349 . 2046373768) (2479207924 . 1935030411) (1675376029 . 2367888248)
-   (3960916618 . 3935874422) (1398143232 . 3265801671) (133930885 . 1520005442)
-   (1351827834 . 2829577566) (2076951437 . 2723839804) (435980918 . 2364847828)
-   (1668970368 . 3738157273) (2185864314 . 3993911799) (2041407829 . 31969768)
-   (346864372 . 2004703094) (4047877822 . 3437142421) (3669961416 . 538399484)
-   (616810829 . 4190688246) (3144558884 . 4030272234) (216165387 . 2513010905)
-   (2761740594 . 3216997572) (3919406634 . 4096014649) (669429112 . 2434161727)
-   (2234904640 . 3111407601) (1421079802 . 1598085235) (1924213810 . 310373675)
-   (4002762044 . 2067865415) (2592451728 . 2586110625) (1890340057 . 
4031717877)
-   (4189625662 . 2577429954) (2276713138 . 3049850801) (2741429688 . 
3310307512)
-   (2924122950 . 3426712818) (421576781 . 1193704381) (2277442246 . 3030264553)
-   (153237420 . 595540057) (4278711886 . 4176286928) (2380848297 . 4030514510)
-   (2618700582 . 1303682185) (3018992701 . 185284845) (957243316 . 1291916363)
-   (1543415220 . 1898408169) (504378001 . 531073412) (2591337657 . 1692896435)
-   (1333852064 . 903543556) (1661259930 . 188168388) (561112646 . 2197961224)
-   (1536910315 . 2632972300) (1349168372 . 2307429186) (411152329 . 2745631190)
-   (1694697476 . 1081411140) (3755185459 . 2631660711) (4019355068 . 
4027326706)
-   (2066937809 . 3761668332) (3120395808 . 3878773315) (94890149 . 2109283191)
-   (3045629038 . 358812277) (1249184265 . 3465901047) (3477490924 . 2308583306)
-   (4114113436 . 3875911716) (1014604031 . 1434513279) (3991324799 . 
2222416029)
-   (2040431088 . 1539915569) (2253613964 . 4081224332) (2547464012 . 
1611168627)
-   (2722521980 . 4281500978) (71289574 . 213969824) (2450408597 . 903689630)
-   (1894451515 . 364024012) (1939968537 . 374938813) (1447259295 . 3785468557)
-   (4021046128 . 1664847745) (3139524504 . 3562928047) (1173487682 . 
4065269608)
-   (2467266804 . 3907744866) (4284945151 . 3486998177) (2925674454 . 
1953016432)
-   (3710671816 . 1271453948) (2129465869 . 1422863833) (587093076 . 18243356)
-   (3373793513 . 2411305257) (2156648078 . 1791034213) (3737413652 . 
1534461430)
-   (468575139 . 2935304962) (1129551363 . 3603256834) (2861996892 . 1763494778)
-   (2826449619 . 2465197654) (1704209531 . 1014895022) (3738359347 . 
3402630390)
-   (569410928 . 4095796581) (3021312909 . 2108247612) (2444777957 . 2664129360)
-   (282063667 . 3773661258) (682545472 . 3188439005) (3318488457 . 1917822038)
-   (1447622272 . 4045023041) (757420137 . 4038580915) (2613420942 . 4146703316)
-   (4012836163 . 150381244) (2938127093 . 3428591704) (1208226490 . 3086335530)
-   (2935205706 . 1446903363) (430957978 . 3830532479) (1381578755 . 3757172800)
-   (4109399782 . 1596778224) (288855589 . 1954372339) (3169178148 . 2256716053)
-   (2644780093 . 3895892303) (107966643 . 1071681559) (1304747544 . 2607225372)
-   (1359190711 . 1898207171) (3229237120 . 3273634996) (3027167685 . 
3863637628)
-   (3011615298 . 2883984519) (564135827 . 978463264) (770797430 . 362326607)
-   (1983662611 . 1907583229) (4153656423 . 48268960) (3609759233 . 720080177)
-   (3727911466 . 1270989899) (200708787 . 2366086947) (744508026 . 393422515)
-   (1213261630 . 65757284) (3485747185 . 3845951003) (2958861301 . 1680248217)
-   (2598470344 . 3163845864) (2767997908 . 4233451722) (3881113485 . 
1492930166)
-   (1773764017 . 2764062206) (4189435844 . 2898689174) (4234838742 . 
1267095035)
-   (2624081078 . 3302114327) (2395569449 . 390426320) (1728307101 . 690284926)
-   (3309827454 . 1118258254) (2028172868 . 3888829086) (4271523049 . 909051386)
-   (146617804 . 942892565) (2467685867 . 974297806) (2483428231 . 503635829)
-   (3743260573 . 2018222096) (1002067894 . 2289153437) (3535252974 . 
3738302271)
-   (4154611160 . 1002664952) (3623154244 . 2349656961) (3646679180 . 
3524329383)
-   (862933752 . 4282853607) (2806008282 . 3272780913) (2734037942 . 3828874677)
-   (1328176304 . 2137666995) (2278785213 . 2780788825) (381286368 . 1816476193)
-   (2074232908 . 2316293454) (4087773386 . 3651330956) (967884669 . 3728964514)
-   (4239349185 . 3213509668) (419231360 . 1463788948) (1275421624 . 2672384707)
-   (1088456595 . 436245261) (2365565249 . 783696577) (1758083333 . 845223583)
-   (2048846183 . 3530914274) (2635948261 . 124738415) (940630937 . 3069598626)
-   (839474029 . 1253439921) (902477345 . 165479306) (2836079689 . 2681188273)
-   (2007115168 . 2093139645) (1363041891 . 1282466609) (1130479818 . 
1063857938)
-   (3644959908 . 1260430427) (1385135238 . 46497915) (1386975934 . 3110156681)
-   (2635987502 . 4233461619) (1915744629 . 4117939016) (487743653 . 285736599)
-   (2049219159 . 3960249250) (69242857 . 3908563670) (1511066720 . 1488527520)
-   (215590039 . 1703564952) (1459430344 . 4184955468) (676103291 . 2642967214)
-   (83799035 . 3182827979) (1949179493 . 476101251) (2593534694 . 1493478716)
-   (2283504289 . 995211746) (1349412676 . 3449243940) (2954378677 . 1878813305)
-   (249149717 . 3329151870) (1578231917 . 1483986052) (4135085182 . 890874990)
-   (461755528 . 3505523909) (3669622373 . 634949665) (219487622 . 2914465301)
-   (2825233742 . 3703631897) (2479105382 . 2935590907) (2582097898 . 
3187672881)
-   (1221328648 . 1843341402) (2140891889 . 3958868911) (1482849818 . 345750049)
-   (751922730 . 3178831411) (3546542069 . 4036458902) (216179596 . 877293293)
-   (444615341 . 3117393729) (2424254530 . 494454238) (1344234989 . 3003337991)
-   (929188581 . 2760877801) (2507911009 . 1879899982) (980166547 . 1311840394)
-   (3566535507 . 1790747461) (143525013 . 2311336672) (4181962471 . 4273938872)
-   (1815842366 . 862009811) (911175674 . 1179575598) (3591335374 . 3694215714)
-   (1452686093 . 3393294272) (385158879 . 2447709103) (4011414929 . 1264623507)
-   (1448477120 . 911094312) (3971299641 . 2289992053) (3133647265 . 2234591563)
-   (3007628400 . 964409938) (1708345684 . 3673411261) (3031964479 . 2843021794)
-   (3022128657 . 2480338599) (118850112 . 473449293) (2048127371 . 3202109429)
-   (3158349745 . 382018770) (1505327237 . 3807570472) (2568424029 . 3272693060)
-   (1866609495 . 3888556537) (844703982 . 1852802964) (3504617058 . 682636099)
-   (1448882679 . 3733580327) (821387540 . 2215744532) (3631471417 . 311618895)
-   (2077838877 . 2383929020) (3352949096 . 1688694420) (2491080787 . 
3998672444)
-   (3368630402 . 4182204255) (983299419 . 2837414346) (3651215291 . 1033373924)
-   (265429091 . 3988955082) (3019003608 . 2896212153) (2955948456 . 3025235588)
-   (903690197 . 2266253487) (3925215275 . 89402958) (3959093811 . 3609545561)
-   (2455088053 . 223552128) (3115011301 . 2133669107) (1765081558 . 673805649)
-   (3324795129 . 2111392191) (3443871631 . 432345706) (3152559950 . 3425427147)
-   (3699649406 . 672784944) (3129545774 . 7668664) (2747044893 . 173040075)
-   (3925243406 . 852328481) (164095314 . 3161868591) (2234471571 . 1302682825)
-   (2164784335 . 105893718) (159995093 . 536831360) (599199451 . 425051327)
-   (3274759746 . 1680930461) (1192619331 . 3903085578) (2832721114 . 
3078660237)
-   (91404660 . 4030521531) (3044880024 . 1578375623) (3906596030 . 754177855)
-   (803516785 . 1894094672) (288455592 . 2030430096) (2143232492 . 2317305324)
-   (388352703 . 3406060288) (2521731420 . 3588403719) (1043041227 . 4028028525)
-   (3195290851 . 2468913324) (4166724431 . 3168683191) (1228226538 . 968516529)
-   (500177583 . 3444787306) (533367442 . 4252082053) (4236023256 . 657816314)
-   (413575568 . 3367198397) (3435884549 . 3334062733) (1004255532 . 1135705894)
-   (2859513268 . 4170618274) (3914086821 . 1251487871) (3080761716 . 
3489067886)
-   (3571165255 . 699353261) (773372954 . 3648014952) (769693293 . 2939128604)
-   (3116440923 . 507748478) (1687629160 . 3739431776) (2489486648 . 3502376324)
-   (3686847158 . 2878383449) (3530767427 . 902211375) (2121652637 . 2493976397)
-   (1827477891 . 930064171) (2549918411 . 4029725732) (2071415163 . 844118802)
-   (2236083679 . 3088894868) (2040110303 . 4144562891) (3489536313 . 
1133419300)
-   (2190878435 . 2301466071) (2465915458 . 2448602097) (1675766804 . 
2073834499)
-   (3329799896 . 1613253148) (1483966600 . 1348836071) (159505618 . 2527621997)
-   (2674227354 . 1695130688) (2683539437 . 1927873839) (3833196123 . 
2570082188)
-   (3891433165 . 759819981) (1455453349 . 2179602430) (1430583255 . 1957776111)
-   (2067726741 . 4235143439) (303380021 . 2998980439) (2136024795 . 3126725799)
-   (2054591852 . 1051702291) (1029141665 . 489794361) (2317027384 . 569642164)
-   (2068461795 . 624418658) (2499875684 . 1830645251) (1302894490 . 4319401)
-   (1002663431 . 2406815191) (1560941298 . 2060652753) (2141002286 . 515773223)
-   (3661248027 . 475092913) (3705503008 . 2419919909) (914567990 . 3496539911)
-   (3462935583 . 2039034761) (2878378006 . 2379243316) (1133857586 . 
1390159333)
-   (3023618742 . 2140726761) (282908558 . 944874642) (3686955701 . 1148723903)
-   (2604456805 . 4163675010) (3061545110 . 377179268) (3218002352 . 76459088)
-   (2836503392 . 916455101) (536836808 . 151306053) (2886925079 . 404221671)
-   (2936593041 . 2011015485) (453815187 . 1852163908) (3042568989 . 82176306)
-   (3279635891 . 4174836410) (3282689058 . 2360003049) (4088968807 . 
1516570623)
-   (2680453086 . 1322680794) (1731693966 . 3438253771) (1842894553 . 
1294307894)
-   (2736377365 . 2964642609) (121205621 . 521330014) (2324595870 . 3005710757)
-   (3784465521 . 676493813) (1958759409 . 2030833406) (1306150933 . 1016370058)
-   (2636541290 . 482366508) (1950415745 . 1695073534) (322077955 . 3746046623)
-   (3602873262 . 3829181504) (1211684447 . 1861645455) (504701736 . 4080111082)
-   (2407799203 . 1223857855) (1925743434 . 1498920209) (3617596327 . 845198428)
-   (2498480299 . 3484773806) (2680229135 . 2560201696) (3731399221 . 
1536412390)
-   (2756509305 . 2924710846) (2635957500 . 3459716133) (1372762539 . 769635894)
-   (802677945 . 3878474636) (1707760534 . 3075809808) (3714687192 . 2872792173)
-   (1615679922 . 1606381794) (1940556374 . 1337437342) (445390489 . 731124040)
-   (2864974375 . 64601760) (1984806574 . 2141516710) (513390958 . 1890172555)
-   (744398315 . 1475299139) (982749166 . 852662657) (652663695 . 4260736510)
-   (1184061125 . 82616221) (3363191899 . 147951756) (1064069880 . 1507328085)
-   (2138882964 . 547595589) (2616926846 . 3186935246) (2298715513 . 3606862940)
-   (2414381911 . 811477686) (2694745228 . 900437726) (4202576185 . 2201114451)
-   (3602305260 . 3323446937) (3756663274 . 2658490339) (3061587876 . 
2171079416)
-   (3390977925 . 2850497765) (486312941 . 224925241) (3515712841 . 3510684394)
-   (1322319486 . 2647200565) (3839619171 . 1148450258) (392296762 . 1154854654)
-   (1401523788 . 957405781) (1934485528 . 527352730) (645968162 . 3131215255)
-   (696971825 . 3361451947) (2038689491 . 1946699733) (1723966113 . 2785859721)
-   (2652365974 . 1118037185) (3988018407 . 3134982149) (1354171594 . 
3053634345)
-   (1287854075 . 2631782435) (1723106141 . 2662328866) (563845090 . 1878819261)
-   (639520332 . 171129501) (534957223 . 1696062352) (3612364282 . 2283204027)
-   (3109494688 . 1304463816) (500957989 . 630925278) (3477030536 . 2149497258)
-   (4109750364 . 281719363) (951472732 . 564407054) (922095147 . 2767874048)
-   (3946156928 . 829677774) (2622281253 . 2086286851) (2936811901 . 850242186)
-   (630086272 . 3340782667) (2340986210 . 1296336989) (4107355543 . 3865114709)
-   (3560210278 . 3968418243) (3868847493 . 2967450637) (611513888 . 2083325060)
-   (3265390517 . 3025776309) (2874106961 . 3424470508) (1668707698 . 
2923258228)
-   (2778598353 . 24320552) (292356118 . 3415510793) (754567370 . 86994591)
-   (185141877 . 1621715171) (2884558258 . 3722473457) (1492107531 . 111281805)
-   (3336927864 . 4225337056) (782994598 . 1021838039) (346133860 . 18281270)
-   (2080909533 . 1649329040) (3612065399 . 3859901127) (2151962287 . 284556115)
-   (3957975594 . 3745718727) (52533817 . 3998775856) (1232633839 . 397383972)
-   (2716413964 . 3629253960) (1531307298 . 3836851439) (3030137657 . 
2500401718)
-   (3561556693 . 653345841) (313061910 . 2945718466) (2065276 . 3342140708)
-   (410498334 . 1470588117) (2726640512 . 4051654894) (2570984935 . 758567696)
-   (3008987264 . 3462702678) (623860175 . 228525243) (3527183895 . 1829844480)
-   (467272850 . 3890501742) (568376656 . 650516927) (990477018 . 4035508558)
-   (2366955227 . 817792110) (4183621538 . 989198068) (946958343 . 1639184195)
-   (3395758993 . 3924097558) (1690887473 . 3220519765) (605184237 . 1255270525)
-   (275515833 . 1926424610) (2142902612 . 283494960) (2021972412 . 1823828440)
-   (105373677 . 3448326697) (1666662384 . 1042433908) (1338566998 . 261206307)
-   (498685668 . 1344755577) (3101233780 . 3119109371) (2733370951 . 3808165089)
-   (3656512268 . 3449289481) (4025308119 . 1607880299) (778896067 . 1612183167)
-   (2846510368 . 3674754715) (3058428120 . 2991822529) (1892379383 . 
3268787440)
-   (2565895844 . 4154602030) (3213117192 . 98999135) (2495816991 . 116985075)
-   (1040203361 . 1785041385) (3106252493 . 69316595) (1639829808 . 2087117568)
-   (3213709576 . 3799911752) (604681594 . 2340981536) (4236730699 . 2938666503)
-   (4009938384 . 1878897714) (2701667332 . 1725918218) (2182473079 . 1258184)
-   (3550198211 . 2760750799) (657991062 . 875584532) (1640976276 . 3380476221)
-   (460041378 . 2924352091) (1972323596 . 2287414795) (2510248061 . 1350206297)
-   (2959337826 . 3762681165) (1625877874 . 3235902929) (2070189957 . 
1429368735)
-   (4245163299 . 1839731898) (2358312347 . 138364248) (275739390 . 2179122576)
-   (2037777210 . 972544338) (2766930226 . 1984733259) (1933485829 . 4209310327)
-   (3034118011 . 3286589799) (2653025529 . 62078937) (2641780289 . 2679545709)
-   (3540781195 . 2787026415) (1569993599 . 3215949659) (441337890 . 3947723353)
-   (1878946792 . 459505587) (3724105660 . 920173002) (1691411102 . 3934795955)
-   (148741087 . 3647709027) (142506469 . 2776440083) (3811107376 . 3823285243)
-   (472209891 . 252266174) (1913386482 . 1867329194) (2960608550 . 482740699)
-   (1145005292 . 1513558421) (1091751784 . 1687823886) (3625186042 . 
3086337482)
-   (1712140887 . 940065262) (1504455800 . 1945702563) (3896940088 . 2003245591)
-   (2478191531 . 4197739000) (3233871270 . 250924495) (3404865229 . 1131917964)
-   (1462204167 . 429621621) (1349259705 . 3641608989) (3627860584 . 2048468319)
-   (1244251718 . 1513180369) (3979211282 . 371413143) (3043187861 . 4285699810)
-   (581894202 . 3060983825) (1390895705 . 1811317301) (2599134010 . 3337406128)
-   (2488233440 . 2436161462) (1816641224 . 2208816697) (1792034756 . 815866116)
-   (2779893723 . 2695577703) (2084952115 . 2951772258) (1351806869 . 169269771)
-   (2469979804 . 86740603) (1163545420 . 4264616949) (1795352113 . 2511146232)
-   (1796715044 . 3134635815) (3521170642 . 1538900329) (3725363621 . 
1455009392)
-   (1342594643 . 1512127734) (2618386938 . 662157428) (2028859350 . 2494504685)
-   (1841905045 . 648351336) (4002935891 . 4033319405) (850071259 . 1768358867)
-   (979915719 . 3876018087) (830889197 . 1629549437) (1744763229 . 2455795856)
-   (522919199 . 368499868) (3063822504 . 2522639205) (2861636095 . 407686388)
-   (4097602344 . 1945259027) (4215946617 . 1251639506) (894485042 . 534122652)
-   (924809191 . 1807237502) (1811585710 . 1589663609) (3439653887 . 1722232)
-   (3810997538 . 105152714) (2677100683 . 4291805514) (77233985 . 102407776)
-   (4239834691 . 2851274395) (148802076 . 2006440603) (2409138150 . 126301601)
-   (3048474397 . 3217504870) (588133437 . 4221603123) (1139638106 . 263087485)
-   (982032635 . 3165674595) (562514827 . 1294842959) (467575086 . 905357513)
-   (1405117894 . 3370530088) (3813285157 . 242912619) (3601878331 . 1985076606)
-   (1586505598 . 2092146221) (738488098 . 103663229) (2970334297 . 321718822)
-   (1068097019 . 1742926233) (235518094 . 420804527) (283685722 . 4092504887)
-   (2666392744 . 3799169331) (3569817788 . 1256762975) (2169728352 . 292617248)
-   (2444571896 . 2239859206) (3967907832 . 1066404216) (420376911 . 2913277294)
-   (3046293305 . 2956347747) (2311278792 . 2477686209) (2885955184 . 
4172514290)
-   (3030078181 . 2275536480) (4212469731 . 4280736393) (1046900335 . 
1773022229)
-   (995380926 . 1414273529) (3892683234 . 2429494358) (615726237 . 2127712535)
-   (3880203074 . 2071130305) (176180504 . 3070850165) (1474506861 . 2283723599)
-   (1256707747 . 1857412043) (764236850 . 359687368) (3521530334 . 511649419)
-   (2318567964 . 3992868140) (128167623 . 2518992858) (2220129756 . 1042300052)
-   (2567608573 . 1349636707) (441446694 . 384760969) (4143447316 . 829506048)
-   (817912603 . 2738025500) (2368091832 . 357934982) (1187643061 . 1561463042)
-   (3438021235 . 3030161697) (1318922279 . 895468690) (434876457 . 1130220303)
-   (1180291767 . 1132759596) (2520707785 . 1798553137) (1962430872 . 
2958700157)
-   (1510954061 . 3534879512) (57831539 . 3269538993) (3354831405 . 3852135009)
-   (891783098 . 2698494511) (2555636406 . 996018997) (2881342935 . 3982231648)
-   (3473267445 . 2894952368) (1238029452 . 3958679326) (2051805420 . 559465638)
-   (3655936674 . 1186951582) (330209165 . 167662935) (1929681327 . 2450868735)
-   (1313566811 . 2458925988) (4283920930 . 3243182650) (1438004300 . 
4185567150)
-   (3093439067 . 89876832) (3401620219 . 3721579956) (3673745794 . 2682874719)
-   (3053321309 . 825410712) (822915968 . 3681514755) (3900685126 . 561657358)
-   (553823814 . 1857753416) (4166295066 . 983949325) (128359165 . 3426887194)
-   (3300989119 . 3884968622) (4193552686 . 3647722552) (452189154 . 1569670618)
-   (4122259632 . 3537825460) (2519387887 . 2821594244) (74333898 . 2940550377)
-   (4032631446 . 2173999692) (2521268686 . 1934310532) (2620314688 . 
2177785789)
-   (1378755571 . 2455646622) (394133753 . 4231198609) (734399075 . 2800989170)
-   (573292462 . 1634883078) (1214417373 . 3426576256) (2110224475 . 2399009920)
-   (2331215665 . 3224086912) (531326186 . 698539511) (3839443603 . 583861850)
-   (2644531398 . 2017784332) (616620850 . 3070237104) (590349237 . 2798642861)
-   (3582377217 . 3317831670) (1582708616 . 1596570667) (2126148205 . 
2358511947)
-   (173450736 . 3219362418) (3616831144 . 1323437318) (2655785577 . 3131359031)
-   (401600069 . 2967397952) (496349349 . 4244179910) (2479612086 . 2579650653)
-   (1710903074 . 2049666425) (3589924952 . 690291925) (3266682943 . 1900485231)
-   (1496318498 . 3025542656) (3459221058 . 3389461212) (2091479615 . 
3140389256)
-   (663040899 . 1207089672) (3323704225 . 1105530508) (353318429 . 2879253542)
-   (2674540957 . 941987316) (1688550857 . 620657353) (338551967 . 4286217277)
-   (204689992 . 2239736295) (178008789 . 3940832005) (3871613304 . 3300636974)
-   (1911672356 . 2429684487) (4055679954 . 1974461722) (3878217928 . 
1009991796)
-   (2533095482 . 310920740) (2174833823 . 3596041637) (1604814460 . 2939543881)
-   (1452830254 . 4092397851) (2441027029 . 4169690209) (3524103304 . 
3372213855)
-
-   (836181454 . 1689436944) (4049974663 . 3750330768) (2776523577 . 3710710688)
-   (519497435 . 2979405513)
-
-   (1892447193 . 197291556) (3793382197 . 3742120663)
-   (3838936 . 2994760034) (479846099 . 1018728609) (3476112862 . 182272649)
-   (3504620154 . 1427438450) (2009473484 . 2679350403) (1738755500 . 
1129731339)
-
-   (4174784170 . 2938602761)]
+  [(40249 9342 13175 27969) (10999 14720 1450 42439) (17627 336 9314 13639)
+   (39957 63294 25255 27362) (30083 17509 18588 3209) (12944 44090 8240 447)
+   (4027 44319 24836 8825) (59450 37007 62203 24778) (3454 30301 22645 23568)
+   (6664 14370 52911 57389) (38405 54768 57950 50096) (53281 65372 53562 11989)
+   (16573 61789 19047 11826) (275 21780 28629 25493) (23988 33568 18163 55781)
+   (9119 35629 32759 6604) (1489 41390 34228 39585) (26527 33935 28303 51569)
+   (29769 48127 32799 60683) (32017 52657 50103 44528) (33479 28830 30750 
47052)
+   (62241 36636 38160 30828) (13076 30963 44881 48102) (19379 36325 59169 
37955)
+   (43620 40046 48381 20732) (36285 39075 21167 54283) (34770 1867 33239 37399)
+   (6643 51025 54249 10977) (46251 12528 25265 39615) (31493 172 16900 31428)
+   (51525 11432 6665 55389) (9386 27729 19874 29952) (19615 13378 29953 46151)
+   (5286 36823 15505 2113) (42779 39811 17948 48531) (840 35733 45297 34063)
+   (25467 11060 65427 49216) (2513 48282 15833 2708) (13685 26243 13473 56635)
+   (29534 11159 42180 23075) (6258 28784 61885 16395) (8139 44242 22975 743)
+   (54032 42946 52891 25941) (49048 16352 65117 33348) (40820 53583 29780 
43044)
+   (20971 56394 47546 12341) (23682 50437 56218 45306) (64759 65162 13360 
45633)
+   (12883 42793 47546 15838) (35956 50024 2075 12405) (47548 27783 5756 13287)
+   (32500 36651 33538 20000) (4565 1492 50001 48511) (25960 64681 11382 41539)
+   (19936 45300 3890 42936) (38614 37702 3267 32349) (17122 16587 25448 40751)
+   (27947 56538 58001 38497) (17032 2818 14052 55633) (24335 19032 38935 7094)
+   (14840 37109 31225 12168) (37829 46580 29526 14475) (25564 13725 36131 7032)
+   (60438 51850 60056 44406) (21333 63744 49832 11719) (2043 40837 23193 28994)
+   (20627 16762 43175 60766) (31691 50061 41562 32572) (6652 35446 36084 46804)
+   (25466 30592 57039 49369) (33353 42106 60942 16887) (31149 26965 487 53736)
+   (5292 47860 30589 22390) (61765 46782 52446 41365) (55999 10952 8215 21244)
+   (9411 51533 63944 54262) (47982 10532 61497 4842) (3298 27659 38345 32985)
+   (42140 53554 49087 31940) (59805 26154 62500 14649) (10214 44408 37142 
23615)
+   (34101 61504 47476 20465) (21683 62714 24384 55411) (29361 11314 4735 60715)
+   (61077 19772 31553 8007) (39557 44176 39460 60065) (28844 19673 61519 8693)
+   (63928 40254 39328 30146) (34739 58034 46537 1969) (41830 58808 50511 18616)
+   (44618 37702 52287 31986) (6432 49229 18214 31677) (34751 710 46238 10985)
+   (2338 14252 9087 14425) (65287 63054 63725 5328) (36328 56489 61500 50510)
+   (39958 13094 19892 40073) (46066 11325 2827 14573) (14606 24500 19713 5195)
+   (23550 42420 28967 26857) (7696 12945 8103 35204) (39540 44217 25831 36019)
+   (20352 63392 13786 64260) (25348 53402 2871 14532) (8561 58950 33538 14856)
+   (23451 25579 40175 63500) (20586 44276 35208 37698) (6273 45001 41895 470)
+   (25859 2052 16501 1604) (57299 38195 40155 62631) (61330 32188 61452 8434)
+   (31538 63441 57398 33004) (47613 30240 59185 25155) (1447 59557 32185 7031)
+   (46472 40046 5475 2677) (19061 2569 52885 29687) (53062 19692 35226 12170)
+   (62776 25500 59141 47140) (15481 41215 21888 61311) (60902 51327 33911 
24733)
+   (31134 33264 23497 16177) (34387 27532 62274 35468) (38871 14156 24584 
31603)
+   (41542 25468 65330 34098) (1087 51942 3264 60320) (37390 17557 13789 13726)
+   (28907 2363 5554 37068) (29601 37401 5721 7357) (22083 27807 57761 43661)
+   (61356 19312 25403 36737) (47905 22424 54365 63407) (17906 66 62031 5992)
+   (37647 33012 59627 29794) (65383 4863 53207 24225) (44642 16342 29800 43632)
+   (56620 23496 19400 55548) (32493 4621 21711 11737) (8958 21588 278 24348)
+   (51480 233 36793 39209) (32907 54926 27329 869) (57028 26644 23414 1526)
+   (7149 58275 44789 13058) (17235 38403 54981 22018) (43670 39772 26908 52090)
+   (43128 13011 37615 61014) (26004 11387 15486 4526) (57042 54835 51920 1270)
+   (8688 34160 62496 58725) (46101 37773 32169 20028) (37304 23013 40651 25424)
+   (4303 62259 57581 32842) (10414 53568 48651 47069) (50636 7561 29263 42070)
+   (22088 63104 61722 10049) (11557 20585 61623 55987) (39877 41870 63273 
43988)
+   (61231 1347 2294 41660) (44832 17141 52316 10328) (18436 4794 47093 48682)
+   (44787 44874 22077 65091) (6575 58778 58449 18815) (21081 14339 57329 59456)
+   (62704 30438 24364 59120) (4407 38437 29821 23283) (48357 53796 34434 49429)
+   (40356 9277 59446 39247) (1647 28851 16352 36887) (19908 56856 39783 6684)
+   (20739 39607 28964 22467) (49274 16256 49951 46260) (46190 59845 58954 
28284)
+   (45953 39490 44006 7303) (8608 1939 14930 10784) (11761 28534 5528 43599)
+   (30268 18963 29107 26877) (63379 50279 736 34464) (55080 36353 10987 36145)
+   (56883 27178 19393 50251) (3062 37555 36103 40739) (11360 19066 6003 9907)
+   (18512 59198 1003 24676) (53188 18417 58684 36379) (45148 41973 25638 36249)
+   (39649 33480 48276 29928) (42236 19412 64597 22730) (59221 6029 22780 20086)
+   (27065 32177 42176 15870) (63925 47044 44230 31894) (64618 33494 19334 
22011)
+   (40040 19638 50386 17431) (36553 32041 5957 28368) (26371 57245 10532 59774)
+   (50503 62846 17063 17486) (30947 30276 59338 53918) (65178 17641 13871 1530)
+   (2237 13772 14387 26133) (37653 58859 14866 39630) (37894 7047 7684 57205)
+   (57117 40861 30795 40976) (15290 22454 34929 46493) (53943 44526 57041 
63295)
+   (63394 21976 15299 29688) (55284 62020 35852 60289) (55643 59532 53776 
65447)
+   (13167 21240 65351 10471) (42816 18906 49938 44145) (41718 7094 58423 64949)
+   (20266 23728 32618 13747) (34771 32957 42431 30809) (5817 63456 27717 14881)
+   (31650 18508 35343 54606) (62374 30922 55714 58252) (14768 49021 56899 
31650)
+   (64687 21953 49034 17444) (6396 63104 22335 42388) (19461 25528 40777 23235)
+   (16608 34707 6656 37645) (36095 43329 11958 17089) (26826 14597 12897 5791)
+   (31262 59751 53877 31202) (40221 24805 1903 23407) (14352 58265 46838 23458)
+   (12809 23405 19125 63921) (13770 46625 2525 906) (43275 9289 40911 44977)
+   (30626 9632 31938 50877) (20798 24163 19568 58161) (17249 49354 16233 12050)
+   (55617 44196 19232 42075) (21135 31878 709 32891) (21163 37566 47457 14729)
+   (40221 64046 64597 32627) (29231 61813 62834 49992) (7442 24741 4359 65175)
+   (31268 39511 60428 39842) (1056 36841 59639 62166) (23057 3168 22713 8352)
+   (3289 42135 25994 22168) (22269 9160 63857 23116) (10316 33915 40328 31406)
+   (1278 44027 48566 6603) (29742 7781 7264 47747) (39574 13030 22788 44348)
+   (34843 33441 15185 47586) (20590 26436 52631 18724) (45080 15797 28668 
27257)
+   (3801 47381 50798 54142) (24081 59501 22643 54404) (63096 25726 13593 44142)
+   (7045 54408 53490 3269) (55993 65125 9688 36897) (3349 7558 44471 13845)
+   (43109 42318 56512 61465) (37828 9574 44793 36859) (39399 45034 48640 1841)
+   (18635 65288 28127 10330) (32667 27377 60407 35759) (22626 32282 5275 47649)
+   (11473 28202 48505 7731) (54115 61429 61591 31126) (3298 41868 13386 28397)
+   (6784 19117 47567 42817) (36991 12354 7544 50654) (20511 26093 45827 19719)
+   (14178 19173 42127 42729) (38267 44897 28684 65358) (14956 10131 20017 6282)
+   (54421 851 27324 41797) (2190 1173 35268 13024) (63811 44775 65215 8632)
+   (27707 36414 13153 14803) (13903 28666 17998 58670) (54799 28110 56369 
16930)
+   (22166 15117 51777 36800) (5877 3807 37349 5039) (61209 21905 19296 40851)
+   (22102 448 13902 12840) (60597 14649 34942 33141) (47815 43425 34097 10571)
+   (45892 50288 14715 47698) (26067 18772 56051 52925) (46264 6975 43381 4578)
+   (46114 1553 37846 63143) (1813 33344 7224 17229) (31251 61835 48860 20469)
+   (48192 38833 5829 9426) (22969 30853 58098 59944) (39191 2653 49937 21828)
+   (28482 13143 59334 43513) (12889 10478 28271 34708) (53476 13922 10416 
13123)
+   (22108 12791 56969 59943) (12533 24852 33809 37908) (55411 56121 4754 60751)
+   (31705 19997 36375 57020) (51161 61800 25767 28308) (38010 57427 61014 
58940)
+   (51401 14466 63815 24415) (15003 62811 43295 33226) (55713 8123 15768 2276)
+   (4050 8291 60866 40906) (46066 22232 44192 45241) (45104 12712 46161 28292)
+   (13789 14293 34580 18607) (59894 2091 1364 11854) (60410 64051 55077 19289)
+   (37461 43957 3411 8832) (47531 19685 32557 13555) (26933 470 10281 30033)
+   (50732 22777 32217 18879) (52549 20367 6597 4714) (48104 16206 52267 57035)
+   (56452 11134 10265 57904) (47753 5166 117 952) (41916 37917 2640 25035)
+   (59894 30222 13005 32801) (2503 58706 48246 18735) (34095 21651 19877 23753)
+   (33031 64719 1615 53078) (2441 21717 8191 25984) (9143 3803 6485 50367)
+   (49968 56898 25648 63133) (18197 60739 59556 23562) (43223 58586 46976 
41101)
+   (1394 47476 61500 57531) (46461 11928 24084 6599) (59609 60606 11507 55103)
+   (12260 45425 28901 38736) (4401 31656 30981 59280) (32703 8684 35359 17900)
+   (5925 51903 51972 23296) (38478 37212 54754 45575) (15915 35787 61462 54893)
+   (48756 17635 37672 41132) (63579 11087 48350 17591) (18741 16362 14778 
25521)
+   (7632 6831 52563 18538) (8138 35474 64881 40837) (64636 38360 10037 31482)
+   (6310 43408 51379 24253) (52427 28677 50873 49805) (15323 47404 17329 32550)
+   (43632 46516 63638 38306) (59724 14757 19096 12415) (47008 45428 53238 
62318)
+   (54491 43079 10671 18605) (11800 48154 55664 19048) (11744 38509 44847 
35612)
+   (47553 7515 7747 41086) (25751 11624 57059 13152) (37986 36152 53442 1412)
+   (56256 53942 43920 42329) (53875 15427 13766 42799) (32373 55709 38055 3917)
+   (27885 6531 14191 42795) (38908 43723 61488 48164) (31607 18811 12880 15122)
+   (34119 60895 47132 52116) (31129 40159 63241 715) (53246 6457 17294 39716)
+   (33430 9955 35117 38359) (37626 57922 37362 46065) (25570 11284 31644 13315)
+   (50808 46808 24616 18972) (22643 34952 20581 39655) (2433 56530 38568 29549)
+   (40805 30874 25865 42048) (40947 36845 29417 1327) (58489 61019 39216 22412)
+   (59378 36557 11593 61133) (22208 29861 33258 6142) (21828 63447 29873 19183)
+   (31551 405 64623 10511) (4629 13877 45760 53079) (32593 9947 47710 3239)
+   (31350 38252 16047 46099) (15703 29857 7473 43833) (35355 2104 8692 3252)
+   (31562 14563 9527 57186) (38145 4964 27933 28163) (19880 38810 65 59561)
+   (15299 28167 36725 5591) (23818 4850 31443 4305) (32669 6702 7870 4903)
+   (55866 13851 7249 22449) (56541 32032 36925 3109) (13955 13110 53352 63239)
+   (52840 13343 31113 13193) (43920 36886 36304 24372) (17301 19250 21212 9701)
+   (46136 49846 32664 58857) (4316 55182 14417 42130) (56258 31413 17528 8895)
+   (39740 56165 63532 41858) (46715 30870 5755 19588) (49102 53680 1166 44112)
+   (43281 39776 13983 65213) (8191 31432 2308 48965) (44050 64279 6167 61159)
+   (44808 55953 30685 43325) (6924 43923 28261 51012) (46425 60189 1253 59698)
+   (50043 17843 63702 62138) (50089 56354 36010 51689) (62392 46695 23141 2047)
+   (40900 30686 20182 33242) (26423 36238 52463 38603) (28120 22233 19749 
37430)
+   (41753 52757 45236 56113) (1849 29557 7954 56670) (35470 33950 45863 33189)
+   (57746 23665 10322 31221) (29888 19441 30988 3838) (19930 18453 15508 37770)
+   (40230 28010 7360 21548) (29760 64385 25864 50430) (4914 34051 57160 8863)
+   (54975 31662 58428 44096) (18488 54879 28406 29839) (7701 9000 62257 36330)
+   (36740 6563 18674 38591) (29384 33610 22871 46353) (55200 9127 12896 46172)
+   (38123 51371 53173 28078) (40897 3343 39065 37856) (56936 41525 23443 51942)
+   (42060 65145 44627 35774) (40221 34044 52791 5157) (20946 45483 11743 46646)
+   (12247 58553 59180 54156) (26058 23446 46933 8720) (56681 41176 43835 21613)
+   (24653 20914 24511 28898) (29610 35414 20407 44190) (6796 7833 11156 4424)
+   (43716 2599 985 48800) (30285 48814 32676 62374) (7833 47470 28841 48779)
+   (11358 40427 22511 18243) (14995 36846 13010 39297) (9958 56207 65013 44542)
+   (18067 22213 1260 40861) (51318 15451 2257 37004) (16236 27384 23000 85)
+   (32636 50068 8355 42309) (39931 8830 48628 50638) (35075 40313 55036 23644)
+   (36840 35671 12382 10934) (41118 35980 13739 38622) (64126 14649 33586 
22355)
+   (54966 53484 50711 50841) (57322 8682 40565 22499) (46716 8100 33128 2808)
+   (51742 14213 43495 9445) (7420 35821 3432 5689) (53645 34121 53568 51946)
+   (20176 65150 40393 4917) (58587 61539 17523 62930) (5985 63802 17621 44798)
+   (21385 36428 14608 55893) (29517 59416 8046 50074) (9856 45346 47778 36247)
+   (10634 62001 51291 44971) (31107 61139 29704 18389) (26305 41633 42508 
55433)
+   (40471 58518 17059 58561) (60852 21735 47836 2053) (20663 1226 46594 49961)
+   (19651 6139 40157 53283) (26292 33629 40623 59938) (8603 38882 28668 33213)
+   (9758 20044 2611 15005) (8162 52391 25879 56208) (55120 19962 34838 60859)
+   (47447 8096 19904 35272) (7644 805 9627 10206) (53055 18056 32798 47530)
+   (62709 53340 4298 45635) (14518 21084 8612 11022) (14070 3627 42234 26624)
+   (60213 37760 12659 57550) (40012 54821 31834 13827) (44812 12669 12973 
43658)
+   (9614 23168 50976 19531) (35720 40290 19780 34909) (62673 17815 58976 63573)
+   (54324 32614 60553 16835) (59033 60805 45279 46093) (9330 63008 31789 1156)
+   (49825 59317 46169 44725) (43855 25681 52253 17900) (25462 30066 44605 
24948)
+   (42398 3025 371 6696) (4461 22 52116 36617) (11513 51402 1327 28319)
+   (2825 2677 24745 26851) (44014 56754 56800 28657) (22767 49419 1698 1677)
+   (50917 31352 64473 34528) (11947 36006 15592 727) (5281 38244 278 62262)
+   (31752 10461 25166 50064) (55115 48759 58897 27335) (32836 22191 4341 64339)
+   (60393 59946 57155 8647) (801 39481 61016 31280) (18808 32751 6063 39204)
+   (41449 12300 55378 1352) (23365 58658 58545 46319) (46236 15161 38153 6710)
+   (54345 2773 9969 17457) (4776 61974 44948 6338) (31 33660 50997 1316)
+   (6263 46366 22439 25813) (41605 15232 61823 22766) (39230 7655 11574 54032)
+   (45913 32896 52836 42582) (9519 22991 3487 1211) (53820 36375 27921 13824)
+   (7130 1170 59364 22638) (8672 48464 9926 6591) (15113 31450 61576 63822)
+   (36116 57051 12478 33902) (63836 65442 15093 63220) (14449 28679 25011 
63299)
+   (51815 11153 59876 64022) (25800 58673 49141 15189) (9234 24813 19153 59517)
+   (4204 2489 29394 59426) (32698 6484 4325 51760) (30852 55740 27829 27096)
+   (1607 57325 52617 18985) (25431 16368 15906 18292) (20424 59734 3985 45347)
+   (7609 22244 20519 22393) (47321 4724 47593 54523) (41707 60999 58107 64737)
+   (55793 62220 52631 64265) (61421 21463 24534 20075) (11885 707 24599 63103)
+   (43434 19744 56072 20123) (46667 59608 45651 38593) (28875 27383 49877 
48368)
+   (39152 30372 63394 12846) (49028 18184 1510 39775) (38083 9503 1785 3315)
+   (15872 15969 27237 37353) (47397 42701 1057 45043) (25021 53552 31846 58112)
+   (49037 20744 57982 3400) (9226 46458 35720 35616) (64647 24907 44840 32263)
+   (61186 52688 28669 46130) (41224 11268 26335 27658) (33301 58743 19 13000)
+   (54171 47555 42125 46799) (10040 9622 13360 23572) (25039 20372 51581 63805)
+   (7019 44194 44622 4699) (30095 17676 34903 11787) (38303 22653 20602 33625)
+   (45155 59746 57413 62797) (24808 60786 49375 62929) (31588 38789 21810 
28575)
+   (64776 3363 28072 5306) (35984 64923 2111 17752) (4207 29438 33250 50576)
+   (31094 826 14839 55634) (42220 306 30284 41035) (29502 42757 64228 64119)
+   (46296 63355 50149 24935) (40481 62713 947 16345) (40310 24129 40886 40813)
+   (54028 2187 42526 42479) (23956 13183 49071 32603) (6734 18466 60237 31321)
+   (28670 29672 7011 32691) (56825 22460 14040 47562) (25808 58014 60040 14515)
+   (2269 39903 55659 40803) (2174 31205 42365 7443) (58152 57904 58338 46075)
+   (7205 23011 3849 18110) (29195 62962 28493 11946) (45175 19750 7366 2523)
+   (17471 25836 23095 4501) (16658 53096 25754 9742) (55315 62202 47093 50634)
+   (26125 12887 14344 16878) (22956 11384 29689 4259) (59462 38456 30567 6679)
+   (37814 13227 64052 27128) (49344 62886 3828 52687) (51954 7885 17271 45708)
+   (22311 30471 6555 33141) (20588 4537 55566 35613) (55356 49768 31257 9567)
+   (18985 50758 23089 19665) (60717 61970 5667 20631) (46435 23701 65394 38626)
+   (8879 58 46706 59409) (21223 25177 27638 33333) (39659 41786 50924 50864)
+   (37967 28128 37172 57270) (27719 48840 33703 56889) (27344 18372 12449 8452)
+   (42417 53211 41131 16487) (31813 55347 45040 30818) (20626 61333 2582 55819)
+   (37688 59036 1323 36475) (17754 19276 65072 58357) (27394 58929 38317 3320)
+   (27415 45604 47830 48935) (53728 52434 23481 49513) (56844 35237 22201 
44656)
+   (20486 24147 23073 15606) (39953 27130 10103 47220) (30957 61398 38063 7917)
+   (28105 15765 9893 3688) (61079 62547 61543 37357) (12971 3803 26983 979)
+   (14952 21447 59143 22439) (12678 23789 24864 62333) (26622 63837 37472 
30864)
+   (7979 7455 5622 56476) (46750 14504 38492 27493) (43665 6655 6220 52468)
+   (62524 29480 29682 19475) (64330 15737 19098 32978) (13648 49714 8150 4252)
+   (14111 30695 27576 16766) (27642 39598 24256 22393) (52484 62463 26 18296)
+   (58151 13602 1604 32970) (40849 20619 65487 49482) (1178 32577 1562 40544)
+   (64694 48707 43506 65179) (2270 35356 30615 55963) (36760 34790 1927 13729)
+   (46516 1821 49095 14950) (8974 13373 64416 36147) (17389 32602 4014 25981)
+   (14984 41211 48304 23651) (8583 19339 19757 48207) (7134 41262 13814 43209)
+   (21440 26054 51430 13608) (58186 7461 3706 36203) (54960 19771 30289 56702)
+   (24208 10110 31923 40493) (11268 28450 1581 50813) (45323 46169 4909 2598)
+   (16297 56827 26594 61849) (3593 47246 6420 63407) (4328 45914 62446 43831)
+   (40685 60584 57970 47411) (54471 6332 19176 44639) (33107 28000 4464 64544)
+   (37301 13560 34177 35334) (60545 30712 16272 2424) (6414 29007 44453 5486)
+   (46482 48953 45110 18787) (35267 20680 37806 32193) (44036 11888 63667 
33778)
+   (46235 21221 34721 61024) (64277 12259 65318 55945) (15974 28271 27054 
11285)
+   (15188 20158 21580 6649) (59397 41442 37071 9302) (9395 15517 32466 20759)
+   (59207 13122 31602 61633) (2688 19736 46857 29813) (22499 12397 34846 56143)
+   (19175 54947 28341 56267) (11661 21554 5488 25800) (53734 18910 7807 9867)
+   (35378 35356 60926 21804) (1955 44743 38436 51162) (33876 32220 15904 15508)
+   (39178 39165 20593 53859) (6735 61734 5870 64649) (63223 64788 12657 16896)
+   (12480 23323 41778 62492) (36134 14008 5461 42886) (18121 65205 23826 2306)
+   (52460 2675 46236 39201) (20125 10279 13663 50322) (6635 45097 17245 51983)
+   (18009 53943 17284 35372) (38462 62153 27443 48689) (29944 20888 45146 
11901)
+   (23055 21581 53937 64280) (882 28787 49889 13489) (51190 43565 58778 60001)
+   (13607 34746 41175 49711) (38995 60086 15198 2869) (43965 52695 60764 2144)
+   (52997 56053 44173 30640) (18890 54412 60404 42782) (31308 4332 8536 50342)
+   (55785 10914 18111 29086) (5038 38797 2558 21847) (29444 39343 37397 18943)
+   (20043 28763 37520 15268) (65367 29218 49487 2618) (21942 13388 63866 44974)
+   (47202 8795 1371 26976) (51904 39675 56786 52660) (56056 59778 40937 27487)
+   (46589 64605 12594 50328) (12556 45952 56175 29955) (59519 47942 8570 13838)
+   (8450 44614 28347 4424) (63572 40474 15013 57357) (1958 39677 52290 9754)
+   (50369 6335 59279 60078) (63988 35118 55659 54328) (6899 56290 23951 17882)
+   (62900 45232 53982 61108) (38442 52975 43054 7300) (1134 16074 44869 15593)
+   (61533 4758 33172 39500) (38471 33230 29515 15492) (39982 54336 33230 24509)
+   (21038 9203 37470 12702) (6014 249 64562 63377) (11206 2659 42739 46066)
+   (8747 49070 24946 22022) (18530 35293 52285 26496) (32199 30811 36605 64640)
+   (35571 34609 49195 43392) (8107 25834 10658 56823) (58585 17043 8909 1626)
+   (40352 22726 30788 61964) (9408 58162 46848 6576) (9008 949 42703 59053)
+   (54662 48385 50626 6134) (24150 14216 24361 48171) (32442 29293 35988 2379)
+   (2646 42480 49123 37490) (55188 30376 20194 3334) (40524 4713 47780 48951)
+   (6127 60997 45278 58944) (7573 45221 64761 3014) (37835 57526 39362 22621)
+   (26106 20258 31275 28025) (54777 59480 10533 1237) (49845 41023 28999 6767)
+   (22832 546 46166 7680) (52783 34370 51719 4828) (31913 29247 47918 35208)
+   (10117 13187 18418 47624) (50715 45985 16869 3724) (5391 13853 43933 60454)
+   (40810 16797 14373 38388) (25765 15817 9470 31433) (5165 58527 65402 31805)
+   (3123 21064 34175 43495) (2716 13013 60132 21253) (59076 8568 50363 47406)
+   (29169 52772 37074 2823) (61884 50130 30127 58650) (59176 59592 15411 16500)
+   (38651 63546 4744 17956) (33185 21663 54871 15781) (24487 34428 44853 57673)
+   (22168 28206 62445 2331) (37247 7637 63624 27745) (53773 35976 51455 58975)
+   (12759 7630 25778 49936) (61797 46471 57225 33168) (42366 25401 56620 62368)
+   (7926 59099 45462 7881) (28876 29657 3010 28196) (57882 27445 57100 15063)
+   (58 37848 45696 26978) (7321 57043 15544 37025) (53041 17886 2781 17033)
+   (53476 17018 21780 64370) (30662 8652 40883 42115) (26531 19884 17238 21771)
+   (63702 9898 44839 34057)]
   "Zorbist hashes for polyglot.")
 
 (defconst chess-polyglot-zorbist-piece-type '(?p ?P ?n ?N ?b ?B ?r ?R ?q ?Q ?k 
?K)
@@ -431,7 +430,7 @@ On reaching end or beginning of buffer, stop and signal 
error."
   "Calculate the polyglot zorbist hash for POSITION.
 Uses 781 predefined hash values from `chess-polyglot-zorbist-keys'."
   (cl-assert (vectorp position))
-  (let ((h32 0) (l32 0))
+  (let ((a16 0) (b16 0) (c16 0) (d16 0))
     (dotimes (rank 8)
       (dotimes (file 8)
        (let ((piece (cl-position (chess-pos-piece position (chess-rf-to-index
@@ -440,21 +439,27 @@ Uses 781 predefined hash values from 
`chess-polyglot-zorbist-keys'."
          (when piece
            (let ((piece-key (aref chess-polyglot-zorbist-keys
                                   (+ (* 64 piece) (* (- 7 rank) 8) file))))
-             (setq h32 (logxor h32 (car piece-key))
-                   l32 (logxor l32 (cdr piece-key))))))))
+             (setq a16 (logxor a16 (nth 0 piece-key))
+                   b16 (logxor b16 (nth 1 piece-key))
+                   c16 (logxor c16 (nth 2 piece-key))
+                   d16 (logxor d16 (nth 3 piece-key))))))))
     (let ((sides '(?K ?Q ?k ?q)))
       (dolist (side sides)
        (when (chess-pos-can-castle position side)
          (let ((castle-key (aref chess-polyglot-zorbist-keys
                                  (+ 768 (cl-position side sides)))))
-           (setq h32 (logxor h32 (car castle-key))
-                 l32 (logxor l32 (cdr castle-key)))))))
+           (setq a16 (logxor a16 (nth 0 castle-key))
+                 b16 (logxor b16 (nth 1 castle-key))
+                 c16 (logxor c16 (nth 2 castle-key))
+                 d16 (logxor d16 (nth 3 castle-key)))))))
     ;; TODO: en passant
     (when (chess-pos-side-to-move position)
       (let ((turn-key (aref chess-polyglot-zorbist-keys 780)))
-       (setq h32 (logxor h32 (car turn-key))
-             l32 (logxor l32 (cdr turn-key)))))
-    (cons h32 l32)))
+       (setq a16 (logxor a16 (nth 0 turn-key))
+             b16 (logxor b16 (nth 1 turn-key))
+             c16 (logxor c16 (nth 2 turn-key))
+             d16 (logxor d16 (nth 3 turn-key)))))
+    (list a16 b16 c16 d16)))
 
 ;;; Public interface:
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]