Implemented multi-move possibility in a moves list => better support for multi-moves...
authorBenjamin Auder <benjamin.auder@somewhere>
Thu, 27 Feb 2020 23:41:50 +0000 (00:41 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Thu, 27 Feb 2020 23:41:50 +0000 (00:41 +0100)
23 files changed:
client/public/images/pieces/Check3/bk_1.svg [new file with mode: 0644]
client/public/images/pieces/Check3/bk_2.svg [new file with mode: 0644]
client/public/images/pieces/Check3/bk_3.svg [new file with mode: 0644]
client/public/images/pieces/Check3/wk_1.svg [new file with mode: 0644]
client/public/images/pieces/Check3/wk_2.svg [new file with mode: 0644]
client/public/images/pieces/Check3/wk_3.svg [new file with mode: 0644]
client/src/base_rules.js
client/src/components/BaseGame.vue
client/src/components/ComputerGame.vue
client/src/components/MoveList.vue
client/src/components/UpsertUser.vue
client/src/playCompMove.js
client/src/translations/about/en.pug
client/src/translations/about/es.pug
client/src/translations/about/fr.pug
client/src/utils/notation.js [new file with mode: 0644]
client/src/utils/playUndo.js [new file with mode: 0644]
client/src/variants/Check3.js
client/src/variants/Hidden.js
client/src/variants/Marseille.js
client/src/variants/Wormhole.js
client/src/views/Game.vue
client/src/views/Problems.vue

diff --git a/client/public/images/pieces/Check3/bk_1.svg b/client/public/images/pieces/Check3/bk_1.svg
new file mode 100644 (file)
index 0000000..04043f8
--- /dev/null
@@ -0,0 +1,16 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <g fill-rule="nonzero" fill="#fff" id="svg_1">
+   <path d="m1060,1261q172,3 282,17t198,33q55,-54 122,-103t94,-84q48,-65 48,-162q0,-89 -43,-149q-77,-113 -235,-113q-92,0 -192,40q-91,36 -132,78q-85,82 -124,216q-15,46 -16,117t-2,110z" id="svg_2"/>
+   <path d="m988,1260q0,-40 -2,-110t-15,-118q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q25,36 96,89t120,98q87,-19 196,-33t283,-16z" id="svg_3"/>
+   <path d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z" id="svg_4"/>
+  </g>
+  <g fill-rule="nonzero" id="svg_5">
+   <path d="m1133,865q0,29 6,82t21,84q37,81 106,150q20,20 86,54q65,32 139,32q56,0 111,-19t84,-60q25,-34 25,-110q0,-60 -49,-112q-32,-33 -69,-66t-71,-79q-58,20 -161,31t-228,13zm-73,-78q172,-3 282,-17t198,-33q55,54 122,103t94,84q48,65 48,162q0,89 -43,149q-77,113 -235,113q-92,0 -192,-40q-91,-36 -132,-78q-85,-82 -124,-216q-15,-46 -16,-117t-2,-110zm458,-173q-184,51 -490,51q-308,0 -496,-52l15,-101q189,49 481,49q291,0 474,-48l16,101zm26,-299l-30,118q-195,45 -490,45q-292,0 -488,-45l-32,-119q190,58 521,58q159,0 295,-16t224,-41zm-1081,207l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm525,266q0,40 -2,110t-15,118q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q25,-36 96,-89t120,-98q87,19 196,33t283,16zm36,251q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm35,520l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130zm-147,-694q-125,-2 -228,-13t-161,-31q-30,37 -69,74t-70,71q-50,51 -50,112q0,75 25,110q27,40 83,59t113,20q72,0 138,-32q65,-34 86,-54q68,-69 106,-150q13,-30 19,-83t8,-83zm112,345q-2,10 -5,17q-6,20 -10,29q-3,7 -8,17t-10,23q-3,7 -7,18t-8,22q-3,9 -3,19q0,53 51,53q53,0 53,-52q0,-13 -4,-19q-14,-38 -15,-41q-15,-30 -19,-39q-7,-16 -9,-29q-3,-6 -4,-10t-2,-8z" transform="translate(0,2048) scale(1,-1)" fill="#000" id="svg_6"/>
+   <path d="m1518,1434q-184,-51 -490,-51q-308,0 -496,52l15,101q189,-49 481,-49q291,0 474,48l16,-101z" fill="#fff" id="svg_7"/>
+   <path d="m1544,1733l-30,-118q-195,-45 -490,-45q-292,0 -488,45l-32,119q190,-58 521,-58q159,0 295,16t224,41z" fill="#fff" id="svg_8"/>
+  </g>
+  <path fill="none" stroke-width="65" id="svg_9" d="m699.49994,1026.35294c3.45908,-0.60726 4.35567,-0.98848 4.8331,-1.25194c1.06278,-0.5864 1.61926,-0.97511 2.19841,-1.40893c1.27837,-0.9576 1.92998,-1.55697 2.6207,-2.19363c0.73436,-0.6769 1.49364,-1.41969 2.28869,-2.21743c0.8417,-0.84458 1.71944,-1.75025 2.64204,-2.71013c1.99618,-2.07681 3.06407,-3.2055 4.19797,-4.38005c1.19179,-1.23456 2.45125,-2.52453 3.7923,-3.85994c1.40846,-1.40245 2.90005,-2.86097 4.49899,-4.35265c3.43614,-3.2057 5.34076,-4.85083 7.3246,-6.57375c2.0648,-1.79323 4.22162,-3.63565 6.4422,-5.5558c2.29163,-1.98157 4.64966,-4.02369 7.03106,-6.17181c4.94038,-4.45637 7.42077,-6.84677 9.93137,-9.30393c2.55572,-2.50127 5.11501,-5.08502 7.68274,-7.73626c2.60051,-2.68507 5.20293,-5.42888 7.8005,-8.22903c5.25379,-5.66353 7.85104,-8.57149 10.46874,-11.48299c2.62805,-2.92299 5.25533,-5.86537 7.90261,-8.80394c2.65341,-2.94532 5.3145,-5.89351 8.02037,-8.80387c5.41737,-5.82674 8.19889,-8.6676 10.99218,-11.49763c2.79622,-2.83297 5.62561,-5.63907 8.4679,-8.44257c2.84919,-2.81025 5.72004,-5.61367 8.58566,-8.4425c5.76432,-5.69027 8.63652,-8.58172 11.49817,-11.48673c2.85079,-2.89406 5.66324,-5.78196 8.43256,-8.64374c2.72319,-2.81406 5.37903,-5.57832 7.96146,-8.27414c4.90946,-5.12512 7.21189,-7.53489 9.40442,-9.84054c2.08819,-2.19591 4.06622,-4.28815 5.91614,-6.29492c1.74743,-1.89562 3.38298,-3.69105 4.85623,-5.43262c2.65642,-3.14021 3.7454,-4.63007 4.72135,-6.02624c0.90023,-1.2879 1.679,-2.5113 2.36333,-3.65463c0.62688,-1.04736 1.16444,-2.02641 1.6567,-2.91544c0.84956,-1.53418 1.22182,-2.18555 1.59472,-2.75217c0.34261,-0.52064 0.69116,-0.98781 1.05607,-1.40432c0.35782,-0.40849 0.74797,-0.79152 1.17377,-1.15797c0.9348,-0.80442 1.499,-1.20683 2.0903,-1.6498c0.61954,-0.4641 1.26323,-0.93448 1.91573,-1.41261c0.65257,-0.4782 1.29747,-0.94664 1.9158,-1.41254c1.14285,-0.86109 1.64124,-1.25896 2.08327,-1.64252c0.40644,-0.35262 0.76822,-0.69742 1.07173,-1.05124c0.28594,-0.33337 0.53686,-0.67837 0.71845,-1.05117c0.36549,-0.75035 0.44516,-1.1952 0.53392,-1.64252c0.09124,-0.45982 0.15348,-0.93441 0.2198,-1.41261c0.06626,-0.47813 0.12223,-0.95413 0.21987,-1.41254c0.18664,-0.8762 0.34708,-1.27266 0.52695,-1.63884c0.17571,-0.35776 0.38695,-0.68839 0.61634,-0.99784c0.22792,-0.30757 0.4773,-0.59556 0.7341,-0.87466c0.51328,-0.55793 0.78254,-0.82353 1.03991,-1.09869c0.25475,-0.27235 0.50273,-0.54403 0.7341,-0.82126c0.22574,-0.27041 0.43999,-0.53915 0.61634,-0.82126c0.33315,-0.5328 0.43628,-0.81859 0.52695,-1.09501c0.08901,-0.27135 0.15354,-0.54751 0.2198,-0.82126c0.06632,-0.27375 0.12639,-0.55158 0.21987,-0.82126c0.19303,-0.557 0.35392,-0.82574 0.52695,-1.09862c0.18185,-0.28679 0.39341,-0.57384 0.61634,-0.87466c0.23418,-0.31599 0.48612,-0.64274 0.7341,-0.99784c0.53168,-0.76131 0.78586,-1.19206 1.04687,-1.64619c0.27399,-0.47659 0.54848,-0.98507 0.83621,-1.51928c0.30204,-0.56081 0.61487,-1.15202 0.95397,-1.76576c0.72854,-1.31871 1.1378,-2.01285 1.5668,-2.72657c0.43814,-0.72903 0.89026,-1.45846 1.35044,-2.1804c0.45417,-0.71252 0.90355,-1.40298 1.35051,-2.05729c0.82049,-1.20108 1.20649,-1.71864 1.57031,-2.19002c0.33967,-0.44004 0.67366,-0.84625 1.00496,-1.22774c0.32478,-0.374 0.65966,-0.73818 1.00502,-1.10464c0.73621,-0.78116 1.14579,-1.20001 1.57031,-1.6498c0.44274,-0.46904 0.89653,-0.9568 1.35044,-1.46594c0.46044,-0.51649 0.91844,-1.04201 1.35051,-1.58912c0.84931,-1.0755 1.21505,-1.63543 1.57031,-2.18274c0.34785,-0.53588 0.67391,-1.07162 1.00496,-1.58912c0.32504,-0.50814 0.64516,-1.009 1.00502,-1.46594c0.70886,-0.90006 1.13582,-1.28168 1.57383,-1.64252c0.44076,-0.36311 0.91308,-0.69053 1.4015,-0.99784c0.49226,-0.30971 1.00208,-0.59629 1.51926,-0.87466c1.03933,-0.5594 1.56801,-0.82206 2.08678,-1.1023c0.51679,-0.2791 1.027,-0.56495 1.51926,-0.87466c0.48842,-0.30724 0.96598,-0.62791 1.4015,-0.99784c0.86362,-0.73357 1.22284,-1.18617 1.57383,-1.63884c0.35239,-0.45454 0.67692,-0.93441 1.00496,-1.41261c0.32798,-0.47813 0.64688,-0.96295 1.00502,-1.41254c0.71193,-0.89384 1.13582,-1.278 1.57383,-1.63884c0.44076,-0.36311 0.91308,-0.69053 1.4015,-0.99784c0.49226,-0.30971 1.00208,-0.59629 1.51926,-0.87466c1.03933,-0.5594 1.56801,-0.82206 2.08678,-1.1023c0.51679,-0.2791 1.027,-0.56495 1.51926,-0.87466c0.48842,-0.30724 0.96598,-0.62791 1.4015,-0.99784c0.86362,-0.73357 1.22284,-1.18617 1.57383,-1.63884c0.35239,-0.45454 0.67692,-0.93441 1.00496,-1.41261c0.32798,-0.47813 0.64688,-0.96288 1.00502,-1.41254c0.71193,-0.89377 1.13582,-1.278 1.57383,-1.63884c0.44076,-0.36311 0.91308,-0.69053 1.4015,-0.99784c0.49226,-0.30971 1.00208,-0.59629 1.51926,-0.87466c1.03933,-0.5594 1.56788,-0.8232 2.09023,-1.1023c0.52452,-0.28024 1.04962,-0.56789 1.57031,-0.87466c0.52625,-0.31004 1.05422,-0.63526 1.57031,-0.99784c1.06246,-0.7464 1.57478,-1.18731 2.0903,-1.63884c0.52018,-0.45554 1.02547,-0.931 1.51926,-1.41261c0.48676,-0.47479 0.95339,-0.94911 1.4015,-1.41254c0.83698,-0.86557 1.21294,-1.26758 1.57383,-1.63884c0.34242,-0.35228 0.67366,-0.68639 1.00496,-0.99784c0.32485,-0.30537 0.655,-0.60071 1.00502,-0.87466c0.7272,-0.56916 1.14361,-0.82701 1.57031,-1.1023c0.44044,-0.28411 0.89627,-0.56829 1.35044,-0.87466c0.46018,-0.31044 0.92202,-0.62978 1.35051,-0.99784c0.85774,-0.73678 1.22054,-1.18484 1.5668,-1.63884c0.34574,-0.45334 0.65717,-0.93127 0.95397,-1.41261c0.2929,-0.47506 0.56261,-0.95312 0.83621,-1.41254c0.52005,-0.87319 0.78343,-1.27012 1.05032,-1.63884c0.2568,-0.35482 0.52011,-0.68559 0.78516,-0.99784c0.25852,-0.30463 0.52178,-0.59389 0.78516,-0.87466c0.52018,-0.55452 0.78516,-0.82493 1.04687,-1.09869c0.26172,-0.27375 0.52344,-0.54751 0.78516,-0.82126c0.26172,-0.27375 0.52344,-0.54751 0.78516,-0.82126c0.52344,-0.54751 0.78381,-0.82219 1.04687,-1.09134c0.26044,-0.26647 0.52011,-0.52585 0.78516,-0.76786c0.25852,-0.23613 0.51545,-0.46022 0.78516,-0.64468c0.50938,-0.34847 0.7826,-0.45641 1.04687,-0.55118c0.25942,-0.0931 0.52344,-0.1606 0.78516,-0.22998c0.26172,-0.06931 0.52733,-0.13213 0.78516,-0.22991c0.53251,-0.20191 0.79027,-0.36772 1.04342,-0.55118c0.25935,-0.18794 0.50542,-0.40548 0.7341,-0.64468c0.22868,-0.2392 0.4412,-0.4933 0.61634,-0.76786c0.33616,-0.52699 0.43628,-0.81498 0.52695,-1.0914c0.08901,-0.27135 0.15354,-0.54751 0.2198,-0.82126c0.06632,-0.27375 0.12639,-0.55158 0.21987,-0.82126c0.19309,-0.55693 0.35162,-0.82741 0.5304,-1.09501c0.18741,-0.2805 0.41232,-0.55412 0.66739,-0.82126c0.26817,-0.28084 0.56874,-0.55693 0.90292,-0.82126c0.71832,-0.56816 1.13537,-0.82594 1.56686,-1.09501c0.44695,-0.27863 0.91627,-0.55031 1.4015,-0.82126c0.49532,-0.27663 1.00349,-0.54891 1.51926,-0.82126c1.04202,-0.55025 1.56686,-0.82012 2.08678,-1.09501c0.51564,-0.27262 1.02387,-0.54463 1.51926,-0.82126c0.48523,-0.27095 0.95621,-0.53969 1.4015,-0.82126c0.84266,-0.53287 1.21716,-0.81725 1.57383,-1.09501c0.34651,-0.26988 0.67698,-0.54751 1.00496,-0.82126c0.32804,-0.27375 0.65672,-0.55386 1.00502,-0.82126c0.73052,-0.56094 1.14361,-0.82333 1.57031,-1.09862c0.44044,-0.28411 0.89627,-0.56829 1.35044,-0.87466c0.46018,-0.31044 0.92202,-0.62978 1.35051,-0.99784c0.85774,-0.73678 1.22054,-1.18484 1.5668,-1.63884c0.34574,-0.45334 0.65717,-0.93127 0.95397,-1.41261c0.2929,-0.47506 0.56261,-0.95312 0.83621,-1.41254c0.52005,-0.87319 0.78343,-1.27012 1.05032,-1.63884c0.2568,-0.35482 0.52011,-0.68559 0.78516,-0.99784c0.25852,-0.30463 0.52178,-0.59389 0.78516,-0.87466c0.52018,-0.55452 0.78381,-0.82587 1.04687,-1.09501c0.26044,-0.26647 0.52011,-0.52585 0.78516,-0.76786c0.25852,-0.23613 0.51545,-0.46022 0.78516,-0.64468c0.50938,-0.34847 0.7826,-0.45641 1.04687,-0.55118c0.25942,-0.0931 0.52344,-0.1606 0.78516,-0.22998c0.26172,-0.06931 0.52733,-0.13213 0.78516,-0.22991c0.53251,-0.20191 0.79027,-0.36772 1.04342,-0.55118c0.25935,-0.18794 0.50542,-0.40548 0.7341,-0.64468c0.22868,-0.2392 0.4412,-0.4933 0.61634,-0.76786c0.33616,-0.52699 0.43552,-0.81478 0.52695,-1.08773c0.08811,-0.26293 0.15169,-0.52251 0.2198,-0.76786c0.0646,-0.23278 0.11974,-0.45741 0.21987,-0.64468c0.18479,-0.34553 0.3543,-0.45848 0.52344,-0.55118c0.17495,-0.09584 0.36989,-0.16067 0.56529,-0.22998c0.19546,-0.06937 0.39398,-0.12712 0.56535,-0.22991c0.32581,-0.19549 0.43481,-0.3706 0.52344,-0.54751c0.09169,-0.18306 0.15348,-0.3869 0.2198,-0.59135c0.06626,-0.20438 0.12153,-0.41203 0.21987,-0.59128c0.18696,-0.34079 0.35437,-0.45581 0.52695,-0.54751c0.18281,-0.09718 0.39379,-0.16241 0.61634,-0.22998c0.23456,-0.07125 0.48427,-0.13347 0.7341,-0.22991c0.52829,-0.20398 0.78631,-0.36899 1.04336,-0.55118c0.26677,-0.18907 0.52663,-0.40856 0.78516,-0.64468c0.26504,-0.24201 0.52516,-0.50092 0.78516,-0.76786c0.79001,-0.8111 1.20342,-1.47189 1.99956,-1.98932c0.75551,-0.49103 1.12444,0.507 1.13761,1.13886c0.02473,1.18644 0.00345,2.10561 0.00345,3.10117c0,1.0503 0,1.58912 0,3.22936c0,0.55706 0,1.72873 0,2.35972c0,0.67208 0,1.39343 0,3.9352c0,1.00245 0,2.10608 0,3.33022c0,1.36375 0,2.8863 0,4.58677c0,1.89756 0,4.01139 0,8.96447c0,2.86893 0,5.97879 0,9.29664c0,3.49309 0,7.12854 0,10.87346c0,3.82158 0,7.68701 0,15.41779c0,3.80608 0,7.56289 0,11.27587c0,3.67468 0,7.31654 0,10.93101c0,3.59254 0,7.16864 0,14.2935c0,3.55926 0,7.12125 0,10.68873c0,3.57563 0,7.16229 0,10.76258c0,3.61673 0,7.25265 0,14.59285c0,3.71164 0,7.46431 0,11.27179c0,3.87585 0,7.83391 0,11.88774c0,4.1633 0,8.44978 0,17.44714c0,4.73414 0,9.62152 0,14.65127c0,5.16114 0,10.44278 0,15.8339c0,5.48963 0,11.06688 0,22.44046c0,5.77434 0,11.59253 0,17.44353c0,5.87292 0,11.75674 0,17.64063c0,5.87292 0,11.72393 0,23.31646c0,5.72188 0,11.39176 0,17.01239c0,5.57404 0,11.10431 0,16.59354c0,5.45087 0,10.86618 0,21.60096c0,5.32174 0,10.59971 0,15.81739c0,5.14109 0,10.18908 0,15.12759c0,4.8126 0,9.48284 0,18.33049c0,4.15014 0,8.12504 0,11.94114c0,3.67374 0,7.22157 0,10.65993c0,3.34532 0,6.61392 0,12.98683c0,3.13546 0,6.24887 0,9.34596c0,3.08614 0,6.16679 0,9.24732c0,3.08614 0,6.18324 0,12.4321c0,3.16326 0,6.36195 0,9.60461c0,3.29466 0,6.64947 0,10.07272c0,3.49997 0,7.0847 0,14.54179c0,3.88133 0,7.83658 0,11.83019c0,3.99642 0,7.95982 0,11.85492c0,3.79097 0.00089,7.44239 0,14.18409c-0.00045,3.02813 0.00217,5.82915 -0.02351,8.42191c-0.02383,2.40416 -0.06613,4.63923 -0.16492,6.72205c-0.09265,1.95343 -0.17067,3.80567 -0.68394,7.21248c-0.24459,1.62354 -0.59973,3.18652 -0.97359,4.7058c-0.36625,1.48853 -0.77327,2.93576 -1.16201,4.36093c-0.38242,1.40191 -0.8072,2.77309 -1.35396,5.53347c-0.26983,1.36235 -0.44427,2.73913 -0.57321,4.11859c-0.12939,1.38387 -0.20083,2.78177 -0.24338,4.19251c-0.04307,1.42638 -0.05233,2.87254 -0.05585,5.83276c-0.00179,1.52021 0,3.07331 0,4.66476c0,1.63517 0,3.31966 0,5.05895c0,1.79944 0.00045,3.66465 0,7.61402c-0.00026,2.09231 0.00032,4.25587 -0.01176,6.47971c-0.01233,2.27303 -0.03508,4.58456 -0.08243,6.92322c-0.04767,2.35524 -0.09054,4.71796 -0.34197,9.40972c-0.12409,2.3154 -0.30146,4.60688 -0.48682,6.88219c-0.18453,2.26541 -0.38842,4.52401 -0.58101,6.78354c-0.19303,2.26461 -0.406,4.53818 -0.67698,9.14707c-0.13744,2.33719 -0.22089,4.69029 -0.31015,7.04232c-0.08869,2.33826 -0.16856,4.64992 -0.28657,6.91908c-0.11527,2.21582 -0.18945,4.37377 -0.71187,8.39505c-0.24293,1.87002 -0.59564,3.63257 -0.97359,5.3053c-0.36267,1.60509 -0.77065,3.13559 -1.16201,4.61557c-0.37986,1.4364 -0.80586,2.82441 -1.35396,5.59189c-0.27002,1.36342 -0.44427,2.74702 -0.59673,4.14319c-0.15482,1.41809 -0.27277,2.872 -0.4083,4.36494c-0.14006,1.54293 -0.25667,3.15016 -0.73979,6.54828c-0.25916,1.82297 -0.60861,3.70943 -0.97359,5.65845c-0.37462,2.00048 -0.77768,4.03558 -1.16201,6.10196c-0.38689,2.08001 -0.80528,4.15829 -1.35396,8.31471c-0.26856,2.03417 -0.44274,4.04294 -0.57321,6.01161c-0.12741,1.92255 -0.20006,3.79765 -0.24338,5.61742c-0.04185,1.75908 -0.05233,3.45292 -0.05585,6.62127c-0.0016,1.46541 0,2.85422 0,4.17193c0,1.25194 0,2.44373 0,3.58071c0,1.08766 0,2.13161 0,4.1099c0,0.9445 0,1.8616 0,2.7513c0,0.8623 0,1.69719 0,2.50481c0,0.78022 0,1.53304 0,2.95648c0,0.67168 0,1.32131 0,1.95463c0,0.62236 0,1.23924 0,1.85599c0,0.62236 0,1.25568 0,2.57699c0,0.69708 0,1.41622 0,2.15166c0,0.7464 0,1.49842 0,2.25031c0,0.7464 0.00045,1.48185 0,2.89807c-0.00026,0.67168 0.00064,1.32145 -0.01176,1.95463c-0.01214,0.62249 -0.03521,1.23977 -0.08243,1.85599c-0.04779,0.62303 -0.10102,1.26103 -0.34197,2.57699c-0.12824,0.70029 -0.30351,1.41715 -0.48682,2.15166c-0.18651,0.74734 -0.3874,1.49789 -0.58101,2.25031c-0.19194,0.74587 -0.39763,1.47557 -0.67698,2.89807c-0.13131,0.66848 -0.22102,1.31677 -0.28657,1.94234c-0.06332,0.60458 -0.10019,1.19419 -0.12172,1.76977c-0.02109,0.56421 -0.02613,1.12054 -0.02792,2.2193c-0.00089,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,2.19002c0,0.54791 0,1.09862 0,1.65482c0,0.56435 0,1.13966 0,1.72873c0,0.60538 0,1.23002 0,2.54772c0,0.69762 0,1.41983 0,2.16396c0,0.76338 0,1.54307 0,2.33652c0,0.80442 0,1.61699 0,3.2559c0,0.82166 0,1.64613 0,2.47607c0,0.8381 0,1.68716 0,2.54999c0,0.87914 0,1.77752 0,3.64273c0,0.97043 0,1.96011 0,2.96062c0,1.00332 0,2.00115 0,2.98522c0,0.96228 -0.00051,1.89448 0,3.63551c0.00026,0.79439 -0.00096,1.53679 0.01182,2.22972c0.01195,0.64669 0.03297,1.25007 0.08243,1.81081c0.04626,0.52425 0.08249,1.02484 0.34197,1.89074c0.12159,0.40568 0.30076,0.77728 0.48676,1.13337c0.18402,0.35222 0.38874,0.68986 0.58107,1.03473c0.19335,0.34674 0.41092,0.69173 0.67698,1.48198c0.14025,0.41651 0.22293,0.87072 0.28657,1.3427c0.06588,0.48816 0.10044,0.9953 0.12166,1.51527c0.02166,0.5304 0.0262,1.06948 0.02792,2.16088c0.00089,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,2.19002c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,2.19002c0,0.54791 0,1.09862 0,1.65482c0,0.56435 0,1.13966 0,1.72873c0,0.60538 0,1.23002 0,2.54772c0,0.69708 0,1.41622 0,2.15166c0,0.7464 0,1.49842 0,2.25031c0,0.7464 0,1.48185 0,2.89807c0,0.67115 0,1.3177 0,1.94234c0,0.60538 0,1.19446 0,1.76977c0,0.56435 -0.00045,1.12054 0,2.2193c0.00026,0.54697 -0.00051,1.0914 0.01182,1.63009c0.01214,0.5308 0.03406,1.05117 0.08243,1.5563c0.04696,0.49056 0.08383,0.97351 0.34197,1.83233c0.12204,0.40595 0.30242,0.78009 0.48676,1.14567c0.18555,0.36812 0.39181,0.73304 0.58107,1.12108c0.19661,0.40314 0.41756,0.82848 0.67698,1.83955c0.14524,0.56622 0.22281,1.18871 0.28657,1.83968c0.06569,0.67048 0.10013,1.35406 0.12166,2.03671c0.02115,0.67142 0.0262,1.32131 0.02792,2.51123c0.00077,0.52144 0,0.9965 0,1.43306c0,0.40649 0,0.79118 0,1.16211c0,0.36545 0,0.73371 0,1.51112c0,0.42386 0,0.87232 0,1.3427c0,0.48963 0,0.99556 0,1.51527c0,0.53066 0,1.06948 0,2.16088c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,2.19002c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,1.64252c0,0.54751 0,1.09501 0,2.19002c0,0.54697 0,1.09127 0,1.63009c0,0.53066 0,1.05037 0,1.5563c0,0.48963 -0.00051,0.96001 0,1.83233c0.00026,0.3974 -0.00083,0.77033 0.01182,1.12108c0.01201,0.33177 0.03412,0.64829 0.08243,0.94851c0.04703,0.2922 0.09917,0.5868 0.34197,1.12429c0.12773,0.28271 0.30696,0.55486 0.48676,0.84585c0.19003,0.30757 0.39392,0.63212 0.58107,0.99369c0.1991,0.3847 0.41807,0.80268 0.67698,1.81041c0.14568,0.56702 0.22344,1.19607 0.28657,1.86427c0.06658,0.7043 0.10051,1.44349 0.12166,2.20914c0.02172,0.78744 0.02575,1.59146 0.02792,3.22676c0.00109,0.823 -0.00006,1.65709 0.01182,2.51297c0.0124,0.88876 0.03661,1.82163 0.08243,2.80878c0.04888,1.05344 0.10818,2.18468 0.34197,4.71582c0.13131,1.42156 0.30485,2.93122 0.48676,4.51278c0.18792,1.6341 0.38791,3.30027 0.58107,4.98102c0.19246,1.6746 0.39616,3.32246 0.67698,6.47517c0.13041,1.46394 0.22031,2.85021 0.28657,4.15963c0.06249,1.2347 0.09974,2.39881 0.12166,3.49449c0.02057,1.02965 0.0262,1.99647 0.02792,3.75221c0.00077,0.79519 0,1.544 0,2.25432c0,0.68024 0,1.33869 0,1.98337c0,0.6392 0,1.28121 0,2.60613c0,0.69708 0,1.41622 0,2.15166c0,0.7464 0,1.49842 0,2.25031c0,0.7464 0,1.48185 0,2.89807c0,0.67115 0,1.3177 0,1.94234c0,0.60538 0,1.19446 0,1.76977c0,0.56435 0,1.12054 0,2.2193c0,0.54697 0,1.09127 0,1.63009c0,0.53066 0,1.05037 0,1.5563c0,0.48963 0,0.96001 0,1.83233c0,0.3974 0,0.7702 0,1.12108c0,0.33163 0,0.64696 0,0.94851c0,0.2906 -0.00045,0.57304 0,1.12429c0.00026,0.27375 -0.00038,0.54764 0.01182,0.82126c0.0122,0.27402 0.03514,0.54884 0.08243,0.82126c0.04779,0.27536 0.09981,0.56101 0.34197,1.09501c0.12798,0.28217 0.3053,0.55232 0.48676,0.83356c0.18837,0.29193 0.39092,0.58868 0.58107,0.90748c0.19565,0.32816 0.41117,0.66594 0.67698,1.45271c0.14044,0.41584 0.22249,0.86711 0.28657,1.3304c0.06524,0.47131 0.10019,0.95065 0.12166,1.42905c0.02121,0.47238 0.0262,0.93434 0.02792,1.80305c0.00077,0.3974 0,0.7702 0,1.12108c0,0.33163 0,0.64696 0,0.94851l0,0.2906l0,0.28244" stroke="#bf0000"/>
+ </g>
+</svg>
diff --git a/client/public/images/pieces/Check3/bk_2.svg b/client/public/images/pieces/Check3/bk_2.svg
new file mode 100644 (file)
index 0000000..cc5b2aa
--- /dev/null
@@ -0,0 +1,16 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <g id="svg_1" fill="#fff" fill-rule="nonzero">
+   <path id="svg_2" d="m1060,1261q172,3 282,17t198,33q55,-54 122,-103t94,-84q48,-65 48,-162q0,-89 -43,-149q-77,-113 -235,-113q-92,0 -192,40q-91,36 -132,78q-85,82 -124,216q-15,46 -16,117t-2,110z"/>
+   <path id="svg_3" d="m988,1260q0,-40 -2,-110t-15,-118q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q25,36 96,89t120,98q87,-19 196,-33t283,-16z"/>
+   <path id="svg_4" d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z"/>
+  </g>
+  <g id="svg_5" fill-rule="nonzero">
+   <path id="svg_6" fill="#000" transform="translate(0,2048) scale(1,-1)" d="m1133,865q0,29 6,82t21,84q37,81 106,150q20,20 86,54q65,32 139,32q56,0 111,-19t84,-60q25,-34 25,-110q0,-60 -49,-112q-32,-33 -69,-66t-71,-79q-58,20 -161,31t-228,13zm-73,-78q172,-3 282,-17t198,-33q55,54 122,103t94,84q48,65 48,162q0,89 -43,149q-77,113 -235,113q-92,0 -192,-40q-91,-36 -132,-78q-85,-82 -124,-216q-15,-46 -16,-117t-2,-110zm458,-173q-184,51 -490,51q-308,0 -496,-52l15,-101q189,49 481,49q291,0 474,-48l16,101zm26,-299l-30,118q-195,45 -490,45q-292,0 -488,-45l-32,-119q190,58 521,58q159,0 295,-16t224,-41zm-1081,207l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm525,266q0,40 -2,110t-15,118q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q25,-36 96,-89t120,-98q87,19 196,33t283,16zm36,251q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm35,520l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130zm-147,-694q-125,-2 -228,-13t-161,-31q-30,37 -69,74t-70,71q-50,51 -50,112q0,75 25,110q27,40 83,59t113,20q72,0 138,-32q65,-34 86,-54q68,-69 106,-150q13,-30 19,-83t8,-83zm112,345q-2,10 -5,17q-6,20 -10,29q-3,7 -8,17t-10,23q-3,7 -7,18t-8,22q-3,9 -3,19q0,53 51,53q53,0 53,-52q0,-13 -4,-19q-14,-38 -15,-41q-15,-30 -19,-39q-7,-16 -9,-29q-3,-6 -4,-10t-2,-8z"/>
+   <path id="svg_7" fill="#fff" d="m1518,1434q-184,-51 -490,-51q-308,0 -496,52l15,101q189,-49 481,-49q291,0 474,48l16,-101z"/>
+   <path id="svg_8" fill="#fff" d="m1544,1733l-30,-118q-195,-45 -490,-45q-292,0 -488,45l-32,119q190,-58 521,-58q159,0 295,16t224,41z"/>
+  </g>
+  <path stroke="#bf0000" d="m669.49994,1071.16373c1.18472,-2.51598 1.97721,-2.74289 2.44744,-3.6842c0.31967,-0.63997 0.30363,-1.48141 0.48465,-2.32098c0.26725,-1.23941 0.62779,-1.97114 1.09741,-2.66609c0.53055,-0.78509 0.91271,-1.18243 2.00543,-2.81894c0.44534,-0.66702 0.8898,-1.41346 1.3537,-2.21389c0.48709,-0.84045 0.97296,-1.72017 1.45394,-2.62731c0.48655,-0.91762 0.97045,-1.83736 1.83461,-3.67011c0.41386,-0.8776 0.78888,-1.73787 1.14059,-2.57769c0.34266,-0.81825 0.66145,-1.62379 0.96508,-2.41673c0.29893,-0.78073 0.58366,-1.55572 1.14385,-3.09124c0.27928,-0.76552 0.55578,-1.53028 0.84818,-2.28657c0.29071,-0.75193 0.59243,-1.49425 0.92332,-2.21763c0.32749,-0.71589 0.64758,-1.43029 1.47808,-2.73042c0.40814,-0.63897 0.87763,-1.23667 1.3537,-1.82315c0.47472,-0.58473 0.97052,-1.15351 1.45394,-1.73114c0.48403,-0.57825 0.99404,-1.14603 1.83461,-2.40364c0.42678,-0.63859 0.79528,-1.31933 1.14059,-2.01839c0.34939,-0.70717 0.66492,-1.43702 0.96508,-2.17935c0.30247,-0.74806 0.58508,-1.50759 1.14385,-3.03675c0.27955,-0.76502 0.55448,-1.52617 0.8356,-2.2751c0.27602,-0.73522 0.55142,-1.45061 0.8356,-2.13721c0.27309,-0.65979 0.51096,-1.30038 1.11414,-2.39679c0.52171,-0.94829 1.12393,-1.73114 1.7715,-2.4206c0.32763,-0.34885 1.48066,-1.4071 1.90839,-1.80476c0.91646,-0.85204 1.38655,-1.30418 1.83277,-1.78568c0.89068,-0.96107 1.33929,-1.44145 1.91492,-2.50021c0.53558,-0.98513 0.64418,-1.51613 0.87042,-2.50014c0.21264,-0.92485 0.45792,-2.20915 0.85648,-2.89936c0.38604,-0.66858 0.97147,-1.24677 1.6712,-1.74653c1.16235,-0.83016 1.67045,-1.0183 2.61452,-1.5627c0.9801,-0.56516 1.52255,-0.81433 2.80764,-1.93031c0.42963,-0.3731 1.16779,-1.25094 1.53751,-1.70907c0.37965,-0.47047 1.16636,-1.46383 1.62659,-1.95418c0.98072,-1.04492 1.58926,-1.53726 2.22827,-2.03934c0.66152,-0.51972 1.36785,-1.02441 2.09322,-1.53203c0.73414,-0.51379 1.48284,-1.01668 2.21848,-1.53203c1.44496,-1.01225 2.12559,-1.52717 2.78167,-2.04607c0.64928,-0.51354 1.28094,-1.04186 1.90513,-1.58184c0.63112,-0.54602 1.26265,-1.11249 1.9052,-1.69673c1.34806,-1.22564 2.05289,-1.8805 2.78908,-2.54995c0.75577,-0.68728 1.53044,-1.38541 2.32714,-2.0836c0.80391,-0.70455 1.61714,-1.40629 2.45247,-2.08354c1.6508,-1.33841 2.49762,-1.95337 3.33867,-2.54995c0.8303,-0.58897 1.66794,-1.15158 2.5068,-1.69673c0.83234,-0.54091 1.66957,-1.06524 2.5068,-1.58184c1.66801,-1.02914 2.50721,-1.53427 3.33873,-2.04613c0.82765,-0.50949 1.64747,-1.01836 2.45247,-1.53203c0.79562,-0.50768 1.57634,-1.01356 2.32714,-1.53203c1.4572,-1.00633 2.13157,-1.52823 2.78908,-2.0427c0.64785,-0.50694 1.27754,-1.02135 1.90513,-1.53203c0.62765,-0.51068 1.2551,-1.02752 1.9052,-1.53203c1.33269,-1.03419 2.05106,-1.53689 2.79275,-2.04607c0.7623,-0.52333 1.55846,-1.04697 2.38148,-1.58184c0.84818,-0.5512 1.72812,-1.11249 2.63213,-1.69673c1.89663,-1.22564 2.8838,-1.87788 3.8958,-2.55338c1.03709,-0.69227 2.09172,-1.40498 3.16275,-2.13334c1.08666,-0.73902 2.18319,-1.48983 3.28807,-2.24823c2.22541,-1.5276 3.33785,-2.29461 4.44913,-3.05726c1.10495,-0.75828 2.20134,-1.50927 3.28807,-2.24823c1.07109,-0.72836 2.12477,-1.4422 3.16275,-2.13334c1.99734,-1.32999 2.96241,-1.95231 3.90321,-2.55681c0.92169,-0.59221 1.83461,-1.17121 2.74073,-1.74653c0.90619,-0.57538 1.81985,-1.15332 2.7408,-1.74647c1.9054,-1.22726 2.89122,-1.88131 3.90321,-2.55681c1.03709,-0.69227 2.09172,-1.40498 3.16275,-2.13334c1.08666,-0.73902 2.18319,-1.48983 3.28807,-2.24823c2.22541,-1.5276 3.33812,-2.29592 4.45654,-3.06069c1.12196,-0.76726 2.25187,-1.53502 3.39674,-2.29804c1.15398,-0.76907 2.32388,-1.53938 3.52207,-2.29804c2.44349,-1.54711 3.7175,-2.3029 5.00987,-3.06063c1.30175,-0.76321 2.6188,-1.51289 3.94401,-2.24823c1.31909,-0.73198 2.63451,-1.44581 3.94408,-2.13334c2.54713,-1.33722 3.794,-1.9525 5.00987,-2.55681c1.19166,-0.59228 2.36727,-1.16847 3.52207,-1.74653c1.14399,-0.57264 2.2807,-1.14491 3.39674,-1.74647c2.24609,-1.21061 3.34825,-1.87994 4.46395,-2.55001c1.12468,-0.6755 2.24908,-1.36571 3.39674,-2.03373c1.15126,-0.67008 2.31232,-1.33367 3.52207,-1.9189c2.42214,-1.17177 3.71458,-1.61525 5.00613,-2.04607c1.29067,-0.43057 2.59663,-0.8084 3.88975,-1.19503c1.28053,-0.38282 2.55121,-0.74706 3.76435,-1.19496c2.3572,-0.87031 3.42795,-1.44949 4.45654,-2.03928c1.01322,-0.58093 1.97109,-1.20986 2.92046,-1.81928c0.93352,-0.5992 1.84025,-1.20581 2.79506,-1.70439c1.86324,-0.97304 2.88557,-1.27576 3.91063,-1.53203c1.03682,-0.2592 2.11546,-0.43369 3.21708,-0.59365c1.12672,-0.16364 2.28723,-0.29255 3.46773,-0.47876c2.45852,-0.38787 3.72185,-0.69083 5.0062,-1.02821c1.31005,-0.34411 2.62404,-0.73983 3.94401,-1.15282c1.32433,-0.4143 2.63689,-0.8498 3.94408,-1.26778c2.55169,-0.81588 3.79359,-1.18206 5.00987,-1.5286c1.19125,-0.33937 2.36631,-0.65873 3.52207,-0.98052c1.14297,-0.31824 2.27825,-0.63267 3.39674,-0.98046c2.24133,-0.69688 3.34805,-1.11193 4.46021,-1.52866c1.11611,-0.41823 2.22582,-0.85316 3.34241,-1.26771c1.11176,-0.4128 2.21868,-0.82025 3.34241,-1.15289c2.21079,-0.65437 3.33867,-0.85073 4.45287,-1.02135c1.10237,-0.16881 2.20161,-0.28152 3.28807,-0.37914c1.07129,-0.09625 2.12831,-0.16495 3.16275,-0.26431c2.00441,-0.19256 2.96581,-0.34567 3.90689,-0.51404c0.93352,-0.167 1.86031,-0.36225 2.79513,-0.55157c0.94801,-0.192 1.91574,-0.39286 2.92039,-0.55151c2.12171,-0.33501 3.26767,-0.42621 4.45654,-0.50725c1.22607,-0.0836 2.4843,-0.13247 3.76442,-0.1647c1.29359,-0.03254 2.5931,-0.04488 3.88968,-0.04981c2.55141,-0.00966 3.79087,-0.00343 5.00246,-0.00343c1.18377,0 2.33972,0 3.4678,0c1.10019,0 2.17251,0 3.21701,0c2.0055,0 2.96779,0 3.91063,0c0.93169,0 1.86065,0 2.79513,0c0.94835,0 1.91907,0 2.92039,0c2.12804,0 3.27046,-0.00193 4.47143,0.00343c1.26217,0.00561 2.58861,0.01839 3.98162,0.04981c1.46291,0.03298 2.99866,0.08042 4.60832,0.1647c3.4593,0.18116 5.30941,0.33862 7.23447,0.51404c1.99401,0.18172 4.04574,0.39859 6.14583,0.65112c2.14483,0.25789 4.32305,0.54471 6.52188,0.8809c4.45178,0.68061 6.67529,1.10252 8.90193,1.52523c2.22997,0.42334 4.45654,0.87155 6.68481,1.31752c2.22827,0.44603 4.45375,0.89917 6.68481,1.31758c4.45117,0.83477 6.68229,1.18755 8.90193,1.53203c2.20066,0.34149 4.37915,0.65736 6.52188,0.98046c2.10213,0.31699 4.15754,0.62332 6.14583,0.98052c3.78611,0.68017 5.55313,1.09728 7.24188,1.53882c1.63428,0.42733 3.2047,0.90154 4.71705,1.41714c1.48474,0.50619 2.9314,1.0529 4.34094,1.64692c2.81635,1.18686 4.1927,1.86884 5.57802,2.54659c1.38791,0.67899 2.76113,1.37942 4.12374,2.08354c1.352,0.69863 2.68238,1.40043 3.99835,2.0836c2.55536,1.32656 3.79557,1.95119 5.00994,2.54652c1.18118,0.57906 2.3368,1.12876 3.46766,1.64698c1.09754,0.50295 2.16816,0.97902 3.21715,1.41708c1.99707,0.83396 2.96745,1.18755 3.90315,1.54568c0.91476,0.35009 1.81523,0.6952 2.68646,1.08007c0.87083,0.38469 1.73907,0.79893 2.56107,1.30985c1.7252,1.07228 2.52489,1.79983 3.35356,2.55681c0.8677,0.79257 1.72588,1.66263 2.61547,2.56996c0.92278,0.94125 1.86038,1.92875 2.86612,2.91469c2.09716,2.05598 3.25659,3.06138 4.44906,4.07519c1.21043,1.02908 2.45852,2.0427 3.71016,3.06406c1.2515,1.02135 2.5049,2.02974 3.71002,3.06406c2.35067,2.01764 3.42142,3.05527 4.44906,4.07861c1.0018,0.99754 1.94702,1.99421 2.86612,2.9645c0.89327,0.94312 1.74818,1.86872 2.61547,2.73466c1.65243,1.64979 2.50585,2.37808 3.34989,3.07085c0.82744,0.67918 1.6712,1.32095 2.5068,1.96098c0.8356,0.64009 1.68467,1.2765 2.5068,1.96104c1.69963,1.41533 2.51768,2.22517 3.34241,3.07085c0.84689,0.86837 1.67787,1.78575 2.5068,2.73466c0.8424,0.96444 1.6746,1.95699 2.5068,2.96444c1.678,2.03123 2.50803,3.05601 3.3386,4.07861c0.82853,1.02011 1.64985,2.03965 2.45254,3.06406c0.79793,1.0183 1.58212,2.03522 2.32714,3.06406c1.46869,2.02824 2.13334,3.06007 2.78534,4.07861c0.64139,1.00209 1.25082,1.99539 1.85086,2.9645c0.58468,0.94424 1.1461,1.86448 1.72547,2.73466c1.09292,1.64156 1.66671,2.37428 2.22827,3.06742c0.54088,0.66764 1.08911,1.29645 1.61694,1.91123c0.51572,0.60063 1.02941,1.18674 1.49154,1.79628c0.92101,1.2151 1.30345,1.88143 1.67487,2.56024c0.377,0.68903 0.72313,1.40498 1.06966,2.13334c0.35157,0.73896 0.69361,1.4945 1.06953,2.24823c0.76678,1.53733 1.21342,2.29673 1.66753,3.06063c0.4567,0.76813 0.93012,1.52935 1.38288,2.29804c0.44963,0.7634 0.89286,1.52106 1.25762,2.29804c0.70993,1.5122 0.92754,2.29368 1.11414,3.06069c0.1836,0.75442 0.30682,1.5074 0.41358,2.24823c0.10472,0.72662 0.17925,1.44089 0.28833,2.13334c0.20917,1.32787 0.37319,1.95387 0.56441,2.55338c0.187,0.58623 0.41114,1.15045 0.65594,1.69673c0.24181,0.53985 0.50743,1.06493 0.78134,1.58184c0.54496,1.02846 0.83683,1.53433 1.10665,2.05629c0.27527,0.53256 0.5436,1.08849 0.78134,1.68139c0.24957,0.62251 0.48172,1.29408 0.65594,2.02612c0.3887,1.63364 0.46717,2.57339 0.56074,3.56794c0.09819,1.04392 0.16388,2.12786 0.23406,3.23636c0.07086,1.12134 0.13043,2.24393 0.23392,3.35131c0.19911,2.13048 0.36979,3.12615 0.55707,4.07182c0.17898,0.90391 0.38883,1.76118 0.60168,2.57769c0.20332,0.7801 0.41834,1.52093 0.60154,2.23284c0.34178,1.32806 0.46051,1.95705 0.55707,2.56709c0.09452,0.59783 0.16429,1.19478 0.23406,1.79622c0.07127,0.61403 0.1375,1.24976 0.23392,1.9113c0.2104,1.44264 0.37836,2.23109 0.55707,3.06406c0.18673,0.87024 0.39509,1.76667 0.60168,2.68479c0.20944,0.93046 0.42215,1.86454 0.60154,2.79987c0.34994,1.82452 0.46268,2.70848 0.5534,3.56788c0.08827,0.83708 0.14416,1.6577 0.17966,2.46274c0.03495,0.7917 0.04883,1.57367 0.05427,2.34779c0.01061,1.53552 0.00381,2.30153 0.00381,3.06755c0,0.76601 0,1.53203 0,2.29804c0,0.76601 0,1.53203 0,2.29804c0,1.53203 0,2.29804 0,3.06406c0,0.76601 0,1.53203 0,2.29804c0,0.76601 0,1.53203 0,2.29804c0,1.53203 0,2.29754 0,3.06057c0,0.75791 0,1.50821 0,2.2483c0,0.72724 0,1.43927 0,2.13334c0,1.32432 0.00231,1.95082 -0.00381,2.55675c-0.00598,0.59072 -0.01904,1.17159 -0.05427,1.7466c-0.03536,0.57563 -0.0865,1.1575 -0.17966,1.74647c-0.19571,1.23692 -0.37156,1.88486 -0.55707,2.55675c-0.19204,0.69595 -0.41522,1.40735 -0.65594,2.13334c-0.24576,0.74133 -0.5096,1.49101 -0.78134,2.2483c-0.54904,1.52991 -0.83179,2.29468 -1.11033,3.06069c-0.27853,0.76601 -0.55707,1.53203 -0.8356,2.29804c-0.27853,0.76601 -0.55707,1.53203 -0.8356,2.29804c-0.55707,1.53203 -0.83451,2.29892 -1.11794,3.06742c-0.28574,0.77462 -0.5791,1.55709 -0.88987,2.34779c-0.31689,0.80616 -0.64941,1.62803 -1.01526,2.46274c-0.76529,1.7466 -1.2107,2.64689 -1.66753,3.57137c-0.46595,0.94293 -0.95052,1.89284 -1.43714,2.84961c-0.48648,0.95664 -0.97392,1.90544 -1.43728,2.84949c-0.89639,1.82651 -1.29298,2.71184 -1.6712,3.57473c-0.3702,0.84444 -0.72041,1.68189 -1.06953,2.51261c-0.34898,0.8306 -0.69688,1.66905 -1.06966,2.51249c-0.7729,1.74847 -1.21179,2.65212 -1.67855,3.5781c-0.48009,0.95253 -0.99472,1.92052 -1.54594,2.89936c-0.56278,0.99928 -1.15575,2.00842 -1.79646,3.01431c-1.30876,2.05467 -2.03923,3.06543 -2.78167,4.08204c-0.74938,1.02609 -1.52922,2.0457 -2.32714,3.06406c-0.80269,1.02447 -1.6236,2.0442 -2.45254,3.06406c-1.66291,2.04582 -2.50585,3.06156 -3.33125,4.08541c-0.82146,1.01886 -1.62863,2.03672 -2.39814,3.06406c-0.76053,1.01549 -1.49508,2.02837 -2.14748,3.06406c-1.26999,2.01602 -1.76532,3.05757 -2.23194,4.08541c-0.46091,1.01512 -0.86416,2.04071 -1.24932,3.06406c-0.38366,1.01936 -0.73986,2.04557 -1.12379,3.06406c-0.77236,2.04869 -1.21097,3.06854 -1.68235,4.08541c-0.4756,1.02609 -0.99173,2.04769 -1.54594,3.06406c-0.55979,1.02646 -1.15426,2.05081 -1.79646,3.06406c-1.30563,2.05966 -2.04072,3.06667 -2.77419,4.08192c-0.73442,1.01637 -1.48352,2.01789 -2.21861,3.01431c-0.72422,0.98158 -1.43823,1.94122 -2.09308,2.89936c-1.24307,1.81878 -1.75457,2.71209 -2.23208,3.57473c-0.46173,0.83396 -0.88103,1.6592 -1.30345,2.46274c-0.41698,0.79319 -0.82812,1.58502 -1.30359,2.34779c-0.97242,1.55996 -1.58892,2.30926 -2.22827,3.06406c-0.64928,0.76639 -1.34085,1.51096 -2.03882,2.2483c-0.69103,0.72998 -1.3856,1.43316 -2.03895,2.13334c-1.22525,1.31297 -1.75036,1.94558 -2.22827,2.56024c-0.46132,0.59334 -0.88701,1.19316 -1.30345,1.79622c-0.42283,0.61229 -0.84512,1.25175 -1.30359,1.9113c-1.00574,1.447 -1.59722,2.23284 -2.23194,3.06406c-0.66587,0.87199 -1.36914,1.76767 -2.09322,2.68479c-0.7355,0.93158 -1.48093,1.86529 -2.21848,2.79987c-1.44095,1.82577 -2.12396,2.70673 -2.77419,3.56788c-0.63078,0.83533 -1.23246,1.65396 -1.7966,2.46274c-0.54986,0.78808 -1.07306,1.56607 -1.54581,2.34779c-0.92006,1.52118 -1.30332,2.29954 -1.68235,3.07428c-0.38135,0.77948 -0.7457,1.58015 -1.12393,2.39766c-0.39046,0.84381 -0.7929,1.72266 -1.24919,2.62744c-0.98779,1.95855 -1.59232,2.99698 -2.23208,4.09214c-0.67281,1.15189 -1.39743,2.34866 -2.14748,3.60029c-0.77998,1.30163 -1.59164,2.65 -2.39814,4.05985c-1.6878,2.95048 -2.50368,4.51517 -3.33493,6.10779c-0.83995,1.60933 -1.66576,3.22975 -2.5068,4.83347c-0.83016,1.5829 -1.64414,3.13338 -2.5068,4.60381c-1.62075,2.76259 -2.48654,3.97918 -3.34989,5.11013c-0.83302,1.09117 -1.7116,2.11626 -2.61547,3.1062c-0.9085,0.99505 -1.8733,1.97725 -2.86612,2.99125c-2.12382,2.16913 -3.2691,3.35181 -4.45654,4.60967c-1.23967,1.31322 -2.51265,2.68454 -3.81869,4.10212c-1.33813,1.45236 -2.6953,2.93813 -4.06934,4.44672c-2.7799,3.05234 -4.17189,4.58524 -5.5632,6.12126c-1.39403,1.53913 -2.78874,3.08525 -4.17807,4.64583c-1.39614,1.56818 -2.7937,3.15071 -4.17801,4.76078c-2.80241,3.25955 -4.18195,4.9377 -5.55578,6.62183c-1.36316,1.67104 -2.6866,3.32613 -3.96074,4.94842c-1.22879,1.56444 -2.3893,3.06368 -3.45944,4.48886c-1.89459,2.52321 -2.66504,3.62336 -3.37212,4.6199c-0.66322,0.9347 -1.30576,1.84746 -1.9887,2.75386c-0.72047,0.95627 -1.53228,1.98373 -2.49008,3.09847c-2.34455,2.7288 -3.87635,4.33239 -5.56326,6.12475c-1.82033,1.93424 -3.75742,3.95674 -5.75727,6.04383c-2.0259,2.11414 -4.04833,4.21183 -6.00799,6.27361c-3.63549,3.82496 -5.21904,5.54375 -6.65883,7.11892c-1.31834,1.44226 -2.51796,2.77742 -3.63903,4.00237c-1.0443,1.14104 -2.02767,2.21476 -3.01233,3.19808c-1.88663,1.88399 -2.89917,2.7465 -3.92178,3.59855c-1.02655,0.85541 -2.08792,1.68501 -3.16275,2.51261c-1.08292,0.83384 -2.18808,1.66057 -3.28807,2.51249c-2.23555,1.73139 -3.34506,2.6424 -4.44913,3.5781c-1.11216,0.94268 -2.20923,1.91042 -3.28807,2.89936c-1.07891,0.98906 -2.1383,1.99159 -3.16275,3.01431c-2.02406,2.02076 -2.96853,3.05695 -3.90321,4.08204c-0.92781,1.01761 -1.83461,2.0427 -2.7408,3.06406c-0.90612,1.02135 -1.80972,2.04894 -2.74073,3.06406c-1.88507,2.05542 -2.88482,3.06792 -3.89947,4.08541c-1.02233,1.02522 -2.06486,2.0427 -3.10848,3.06406c-1.04355,1.02135 -2.08921,2.03635 -3.10841,3.06406c-2.01318,2.03011 -2.96479,3.06032 -3.89947,4.08541c-0.92781,1.01761 -1.83461,2.0427 -2.7408,3.06406c-0.90612,1.02135 -1.80972,2.04894 -2.74073,3.06406c-1.88507,2.05542 -2.88482,3.06792 -3.89947,4.08541c-1.02233,1.02522 -2.06486,2.0427 -3.10848,3.06406c-1.04355,1.02135 -2.08921,2.03622 -3.10841,3.06406c-2.01325,2.03011 -2.96466,3.05957 -3.89573,4.08192c-0.91924,1.00926 -1.80938,2.01827 -2.68646,3.01431c-0.86471,0.98195 -1.7101,1.95493 -2.56114,2.89936c-1.66216,1.84472 -2.50497,2.72095 -3.34615,3.57473c-0.83009,0.84257 -1.66767,1.66107 -2.5068,2.46274c-0.83213,0.79506 -1.66943,1.57529 -2.5068,2.34779c-1.66773,1.53864 -2.50776,2.30029 -3.33867,3.06755c-0.82819,0.76477 -1.64883,1.52879 -2.45247,2.29804c-0.79698,0.7629 -1.57981,1.52392 -2.32714,2.29804c-1.46407,1.51644 -2.13314,2.29355 -2.78534,3.06057c-0.64105,0.75405 -1.25272,1.50747 -1.85086,2.2483c-0.58651,0.72649 -1.1533,1.44363 -1.72554,2.13334c-1.10577,1.33279 -1.66794,1.95543 -2.23201,2.55001c-0.55027,0.58 -1.10706,1.12982 -1.6712,1.64686c-0.55027,0.50432 -1.10353,0.9817 -1.6712,1.4172c-1.09421,0.83932 -1.66773,1.19216 -2.22453,1.53876c-0.5453,0.33937 -1.09027,0.65767 -1.61687,0.98058c-0.51695,0.31705 -1.02662,0.62937 -1.49154,0.98046c-0.91571,0.69158 -1.30148,1.10975 -1.67494,1.53203c-0.37496,0.4239 -0.72047,0.87149 -1.06959,1.31758c-0.34905,0.44597 -0.68845,0.89817 -1.06953,1.31746c-0.75767,0.83371 -1.21015,1.19091 -1.67494,1.53203c-0.4703,0.34511 -0.97453,0.66353 -1.49154,0.98058c-0.5266,0.32291 -1.07388,0.63797 -1.61687,0.98046c-1.12148,0.70729 -1.6729,1.11112 -2.2246,1.53539c-0.56264,0.43275 -1.1176,0.89206 -1.6712,1.36733c-0.5606,0.48125 -1.1159,0.97809 -1.6712,1.48228c-1.11767,1.01474 -1.6712,1.52866 -2.22827,2.03934c-0.55707,0.51068 -1.11414,1.02135 -1.6712,1.53203c-0.55707,0.51068 -1.11414,1.02135 -1.6712,1.53203c-1.11414,1.02135 -1.6712,1.53203 -2.22827,2.0427c-0.55707,0.51068 -1.11414,1.02135 -1.6712,1.53203c-0.55707,0.51068 -1.11414,1.02135 -1.6712,1.53203c-1.11414,1.02135 -1.66889,1.53415 -2.23194,2.03921c-0.56312,0.50519 -1.13365,1.00427 -1.72554,1.48228c-0.59284,0.47876 -1.20111,0.94642 -1.85086,1.36733c-1.31311,0.85054 -2.04494,1.1939 -2.7816,1.53539c-0.74332,0.34461 -1.5078,0.66054 -2.27288,0.98058c-0.76502,0.31992 -1.53296,0.62962 -2.27281,0.98046c-1.45843,0.69158 -2.13144,1.10663 -2.7816,1.53203c-0.64329,0.42091 -1.25435,0.86837 -1.85086,1.31758c-0.58814,0.44298 -1.15405,0.89306 -1.72554,1.31746c-1.10727,0.82237 -1.67229,1.1853 -2.23201,1.53552c-0.55448,0.34685 -1.1174,0.67986 -1.6712,1.0302c-0.5604,0.35446 -1.12889,0.72163 -1.6712,1.14528c-1.1465,0.89568 -1.68059,1.45685 -2.22827,2.0427c-0.56693,0.60643 -1.11747,1.25387 -1.6712,1.91878c-0.56047,0.67301 -1.10904,1.35948 -1.6712,2.03385c-1.10414,1.32457 -1.66535,1.94733 -2.22453,2.54316c-0.54306,0.57862 -1.08483,1.12633 -1.61687,1.64686c-0.51171,0.5007 -1.01125,0.97198 -1.49154,1.4172c-0.88443,0.81987 -1.29094,1.18904 -1.67494,1.53539c-0.36435,0.32865 -0.71694,0.64022 -1.06959,0.93071c-0.34565,0.28476 -0.69708,0.5603 -1.06953,0.81576c-0.77392,0.531 -1.21709,0.7715 -1.6712,1.02821c-0.46873,0.26506 -0.95386,0.53 -1.43728,0.81576c-0.48975,0.2895 -0.98119,0.58735 -1.43721,0.93071c-0.91285,0.68722 -1.30032,1.10476 -1.66746,1.53203c-0.36945,0.43001 -0.70259,0.89082 -1.01526,1.36733c-0.31512,0.48025 -0.60671,0.97772 -0.88993,1.48228c-0.56917,1.01412 -0.83819,1.52866 -1.11788,2.03585c-0.27745,0.50307 -0.55414,0.99891 -0.8356,1.48228c-0.27568,0.47327 -0.54911,0.93296 -0.8356,1.36733c-0.54218,0.82212 -0.83152,1.18755 -1.11414,1.53539c-0.27466,0.33812 -0.55707,0.66054 -0.8356,0.98058c-0.27853,0.31992 -0.56353,0.64071 -0.8356,0.98046c-0.57074,0.71278 -0.83921,1.11461 -1.11414,1.53203c-0.28227,0.42864 -0.55707,0.87149 -0.8356,1.31758c-0.27853,0.44597 -0.55074,0.89032 -0.8356,1.31746c-0.54503,0.81713 -0.83009,1.18468 -1.11414,1.52866c-0.2733,0.33102 -0.55353,0.63947 -0.8356,0.93071c-0.27513,0.28414 -0.5553,0.55394 -0.8356,0.81576c-0.5536,0.51728 -0.8356,0.76951 -1.11414,1.02484c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.55707,0.51068 -0.8356,0.76601 -1.11414,1.02135c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.55707,0.51068 -0.8356,0.76601 -1.11414,1.02135c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.55707,0.51068 -0.83655,0.76477 -1.1104,1.02135c-0.27112,0.25409 -0.53504,0.50743 -0.78127,0.76601c-0.24025,0.25222 -0.46826,0.50295 -0.65594,0.76601c-0.35456,0.49696 -0.4635,0.76327 -0.56081,1.01786c-0.09371,0.24524 -0.1615,0.48736 -0.23399,0.71627c-0.06875,0.21706 -0.12743,0.42664 -0.23392,0.60132c-0.19659,0.32229 -0.3772,0.42764 -0.55707,0.51404c-0.18626,0.08952 -0.39366,0.14986 -0.60168,0.21457c-0.20795,0.06458 -0.41923,0.11844 -0.60161,0.21444c-0.34674,0.1824 -0.46275,0.3456 -0.55707,0.51068c-0.09751,0.17068 -0.16341,0.36081 -0.23399,0.55157c-0.07052,0.19063 -0.12934,0.38438 -0.23392,0.55145c-0.19897,0.31793 -0.3772,0.42515 -0.56081,0.51068c-0.19462,0.09064 -0.41909,0.15161 -0.65594,0.21457c-0.2497,0.06645 -0.51531,0.12443 -0.78127,0.21444c-0.5623,0.19026 -0.83737,0.34299 -1.10672,0.51404c-0.27602,0.1753 -0.53796,0.37827 -0.78127,0.60132c-0.24338,0.22305 -0.46955,0.46018 -0.65594,0.71627c-0.35776,0.4916 -0.46438,0.76015 -0.56081,1.01799c-0.09473,0.25309 -0.16341,0.51068 -0.23399,0.76601c-0.07052,0.25534 -0.13444,0.51442 -0.23392,0.76601c-0.20543,0.51953 -0.37544,0.77063 -0.56081,1.02135c-0.19238,0.2602 -0.41569,0.51379 -0.65594,0.76601c-0.24623,0.25858 -0.50981,0.5123 -0.78127,0.76601c-0.54979,0.51392 -0.83193,0.76601 -1.11046,1.02135c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.27853,0.25534 -0.55707,0.51068 -0.8356,0.76601c-0.55707,0.51068 -0.83417,0.76689 -1.11414,1.01786c-0.27717,0.24848 -0.55353,0.49048 -0.8356,0.71627c-0.27513,0.22018 -0.54857,0.42926 -0.8356,0.60132c-0.54211,0.32503 -0.83275,0.4249 -1.1104,0.51404c-0.26752,0.0859 -0.53164,0.14812 -0.78127,0.21457c-0.23685,0.06296 -0.4654,0.11682 -0.65594,0.21444c-0.35157,0.18028 -0.46921,0.34498 -0.55707,0.51404c-0.09241,0.17779 -0.14505,0.38363 -0.17966,0.60132c-0.03638,0.22841 -0.04903,0.46891 -0.05433,0.71627c-0.01095,0.50719 -0.00129,0.76215 -0.00741,1.01449c-0.00598,0.24736 -0.01802,0.48786 -0.05433,0.71627c-0.03461,0.21769 -0.07902,0.42727 -0.17966,0.60132c-0.18762,0.32453 -0.37346,0.42764 -0.55333,0.51404c-0.18626,0.08952 -0.39366,0.14986 -0.60168,0.21457c-0.20795,0.06458 -0.41923,0.11844 -0.60161,0.21444c-0.34674,0.1824 -0.46377,0.34573 -0.55707,0.51404c-0.09887,0.17841 -0.16524,0.38425 -0.23399,0.60132c-0.07249,0.22891 -0.1358,0.47252 -0.23392,0.71627c-0.20754,0.51554 -0.37299,0.76876 -0.56455,1.01449c-0.19836,0.25447 -0.43603,0.49646 -0.71021,0.71627c-0.28302,0.22691 -0.6014,0.43749 -0.961,0.60132c-0.75849,0.34548 -1.20941,0.42602 -1.66746,0.51753c-0.47696,0.09525 -0.97772,0.16869 -1.49154,0.26419c-0.52994,0.09849 -1.07728,0.20322 -1.61687,0.37927c-1.1312,0.36904 -1.67834,0.68261 -2.21712,1.02472c-0.5521,0.35059 -1.07585,0.75641 -1.5626,1.20263c-0.48669,0.44609 -0.93917,0.92024 -1.31188,1.43241c-0.71544,0.98308 -0.92863,1.52031 -1.12155,2.03597c-0.18945,0.50619 -0.32681,1.02135 -0.46799,1.53203c-0.1411,0.51068 -0.26895,1.02896 -0.46792,1.53203c-0.41086,1.03893 -0.74958,1.5415 -1.12155,2.03921c-0.3836,0.51329 -0.82833,1.00676 -1.31188,1.48228c-0.48954,0.48138 -1.01139,0.94106 -1.5626,1.36733c-1.08428,0.83858 -1.65842,1.18929 -2.20971,1.52866c-0.52687,0.32428 -1.03566,0.61341 -1.50827,0.88084c-0.4299,0.24324 -0.81908,0.44809 -1.13222,0.65119c-0.44752,0.29025 -0.57114,0.42004 -0.55707,0.51404c0.01217,0.08129 0.14246,0.13478 0.29662,0.1647c0.19142,0.03715 0.42052,0.04488 0.67267,0.04975c0.54578,0.01047 0.82493,0.00349 1.10672,0.00349c0.28737,0 0.58304,0 0.88993,0c0.32076,0 0.65825,0 1.01526,0c0.78358,0 1.21485,0 1.6712,0c0.47859,0 0.9767,0 1.49154,0c0.52871,0 1.06864,0 1.61687,0c1.1104,0 1.66794,0 2.22827,0c0.56591,0 1.14011,0 1.72554,0c0.5993,0 1.21532,0 1.85086,0c1.34065,0 2.05092,0 2.78901,0c0.76597,0 1.55982,0 2.38148,0c0.84954,0 1.7269,0 2.63213,0c1.89404,0 2.88333,0 3.90321,0c1.05327,0 2.14286,0 3.27134,0c1.1703,0 2.38522,0 3.64739,0c2.67769,0 4.09865,0 5.57816,0c1.54071,0 3.14554,0 4.81722,0c1.74131,0 3.55505,0 5.44392,0c4.0146,0 6.144,0 8.3486,0c2.27145,0 4.60138,0 6.98143,0c2.42187,0 4.87713,0 7.35748,0c5.00246,0 7.50878,0 10.01239,0c2.49796,0 4.98756,0 7.46608,0c2.46458,0 4.91242,0 7.34075,0c4.7871,0 7.14069,0 9.46641,0c2.2979,0 4.56799,0 6.81021,0c2.21433,0 4.40078,0 6.55942,0c4.23377,0 6.30836,0 8.35234,0c2.01053,0 3.98488,0 5.9202,0c1.89357,0 3.74259,0 5.54422,0c3.45012,0 5.09535,0 6.69596,0c1.56723,0 3.11215,0 4.64592,0c1.53384,0 3.07876,0 4.64599,0c3.24584,0 4.94302,0 6.68481,0c1.77518,0 3.57266,0 5.38122,0c1.80863,0 3.60611,0 5.38129,0c3.43897,0 5.08372,0 6.68107,0c1.55846,0 3.08618,0 4.59166,0c1.49154,0 2.97751,0 4.46626,0c3.01933,0 4.56378,0 6.12774,0c1.57512,0 3.15302,0 4.72535,0c1.55839,0 3.09447,0 4.59996,0c2.88564,0 4.25138,0 5.567,0c1.27101,0 2.50306,0 3.70172,0c1.17071,0 2.31926,0 3.451,0c2.23568,0 3.34982,0 4.46395,0c1.11414,0 2.22827,0 3.34241,0c1.11414,0 2.22827,0 3.34241,0c2.22827,0 3.34288,0 4.46028,0c1.12298,0 2.25425,0 3.39674,0c1.15636,0 2.32946,0 3.52207,0c2.45478,0 3.72301,0 5.02469,0c1.34072,0 2.72597,0 4.16135,0c1.49107,0 3.0434,0 4.66265,0c3.4612,0 5.31207,0 7.23814,0c1.99292,0 4.04432,0 6.14583,0c2.14334,0 4.32006,0 6.52188,0c4.44539,0 6.67413,-0.00212 8.90567,0.00337c2.23711,0.00561 4.48259,0.01745 6.73914,0.04975c2.27064,0.03242 4.55834,0.07755 6.86447,0.1647c4.68455,0.17692 7.06419,0.34024 9.46641,0.50731c2.42003,0.16831 4.85013,0.36081 7.28649,0.55157c2.43622,0.19063 4.86591,0.38799 7.28635,0.55145c4.78159,0.32291 7.13661,0.42465 9.4628,0.50731c2.2975,0.08154 4.56779,0.13216 6.81007,0.1647c2.21426,0.03217 4.40092,0.04476 6.55955,0.04975c4.23363,0.00972 6.30781,0.00349 8.34853,0.00349c2.00169,0 3.95891,0 5.86594,0c1.85127,0 3.64134,0 5.3645,0c3.22367,0 4.71467,0 6.12774,0c1.34072,0 2.61452,0 3.82712,0c1.15684,0 2.2635,0 3.32568,0c2.01284,0 2.97384,0 3.90695,0c0.90523,0 1.78259,0 2.63206,0c0.82173,0 1.61558,0 2.38155,0c1.44829,0 2.13116,0.00224 2.78901,-0.00349c0.63554,-0.00549 1.25191,-0.01696 1.85086,-0.04975c0.5859,-0.03204 1.16228,-0.07668 1.72547,-0.1647c1.12447,-0.17579 1.67759,-0.34112 2.23575,-0.50731c0.56808,-0.16919 1.13943,-0.36268 1.72547,-0.55145c0.59855,-0.19275 1.21043,-0.39186 1.85086,-0.55157c1.3316,-0.33214 2.04888,-0.42378 2.78167,-0.51068c0.7472,-0.08865 1.50773,-0.14974 2.27288,-0.21444c0.76502,-0.06458 1.5265,-0.12006 2.27274,-0.21457c1.44544,-0.18315 2.12681,-0.34074 2.78167,-0.51068c0.63853,-0.1657 1.25231,-0.3587 1.85086,-0.55145c0.58617,-0.18876 1.15575,-0.38712 1.72547,-0.55157c1.11087,-0.32079 1.67351,-0.42527 2.23575,-0.50731c0.56428,-0.08229 1.13957,-0.13266 1.72547,-0.1647c0.59896,-0.03279 1.21532,-0.04488 1.85086,-0.04975c1.34072,-0.01022 2.05051,-0.00137 2.78534,-0.00686c0.75713,-0.00561 1.53411,-0.0177 2.32714,-0.04975c0.80758,-0.03254 1.62755,-0.07742 2.45254,-0.1647c1.67175,-0.17679 2.50476,-0.33999 3.33873,-0.50731c0.83737,-0.16806 1.6712,-0.36081 2.5068,-0.55145c0.8356,-0.19076 1.66821,-0.38849 2.5068,-0.55157c1.66576,-0.32391 2.50504,-0.42477 3.3386,-0.50731c0.82567,-0.08179 1.64495,-0.13216 2.45254,-0.1647c0.79303,-0.03204 1.57002,-0.04476 2.32714,-0.04975c1.44462,-0.00948 2.12708,-0.00112 2.78167,-0.00686c0.6267,-0.00549 1.22593,-0.01646 1.79646,-0.04975c0.54374,-0.03179 1.06245,-0.07294 1.54594,-0.1647c0.90047,-0.17106 1.301,-0.33688 1.67487,-0.50731c0.36258,-0.16532 0.69661,-0.3577 1.01526,-0.55145c0.309,-0.18776 0.59692,-0.38425 0.88987,-0.55157c0.55095,-0.31481 0.83587,-0.42428 1.11794,-0.50731c0.27554,-0.08116 0.55612,-0.13228 0.8356,-0.1647c0.27772,-0.03229 0.55693,-0.04488 0.8356,-0.04975c0.55693,-0.00972 0.83601,-0.00337 1.11781,-0.00337c0.28737,0 0.58304,0 0.88987,0c0.32083,0 0.65825,0 1.01526,0c0.78365,0 1.21532,0.00187 1.67501,-0.00349c0.48743,-0.00561 1.00302,-0.01833 1.54581,-0.04975c0.57135,-0.03304 1.1718,-0.08029 1.7966,-0.1647c1.34153,-0.18116 2.0482,-0.34299 2.78534,-0.50731c0.76719,-0.17093 1.55886,-0.36368 2.38141,-0.55145c0.84866,-0.19375 1.72356,-0.39173 2.6322,-0.55157c1.88758,-0.33189 2.88027,-0.42552 3.88832,-0.50731c1.01703,-0.08254 2.03855,-0.13216 3.05408,-0.1647c1.00098,-0.03204 1.98034,-0.04476 2.92882,-0.04975c1.77144,-0.00923 2.58011,-0.001 3.3386,-0.00686c0.71401,-0.00549 1.3894,-0.01658 2.03052,-0.04975c0.61432,-0.03179 1.20784,-0.07605 1.77987,-0.1647c1.12828,-0.17492 1.68127,-0.34112 2.23942,-0.50731c0.56808,-0.16919 1.13943,-0.36268 1.72547,-0.55145c0.59855,-0.19275 1.21043,-0.39186 1.85086,-0.55157c1.3316,-0.33214 2.04861,-0.42577 2.78167,-0.50731c0.74693,-0.08303 1.50732,-0.13228 2.27288,-0.1647c0.76474,-0.03229 1.52446,-0.04476 2.27274,-0.04975c1.44095,-0.00948 2.12382,-0.00337 2.78167,-0.00337c0.63554,0 1.2515,0 1.85086,0c0.58536,0 1.15956,0 1.72547,0c1.11794,0 1.67501,0.00199 2.23208,-0.00349c0.55707,-0.00561 1.11454,-0.01745 1.6712,-0.04975c0.55761,-0.03242 1.11672,-0.0773 1.6712,-0.1647c1.12053,-0.17667 1.67338,-0.33962 2.22446,-0.50731c0.55108,-0.16769 1.08911,-0.35857 1.61694,-0.55145c0.51572,-0.18851 1.01036,-0.38226 1.49154,-0.55157c0.88307,-0.31069 1.28985,-0.42253 1.6712,-0.50731c0.35524,-0.07905 0.69361,-0.13166 1.01526,-0.1647c0.30614,-0.03142 0.60236,-0.04488 0.88987,-0.04975c0.56074,-0.0096 0.83941,-0.00337 1.11794,-0.00337c0.27853,0 0.55707,0 0.8356,0c0.27853,0 0.55707,0 0.8356,0c0.55707,0 0.83601,0 1.11781,0c0.28737,0 0.58304,0 0.88987,0c0.32083,0 0.65825,0 1.01526,0c0.78365,0 1.21451,0 1.66753,0c0.46975,0 0.95066,0 1.43728,0c0.48648,0 0.96739,0 1.43714,0c0.88388,0 1.28822,0 1.66753,0c0.35701,0 0.69443,0 1.01526,0c0.30682,0 0.60249,0 0.88987,0c0.56088,0 0.83941,0 1.11794,0c0.27853,0 0.55707,0 0.8356,0c0.27853,0 0.55707,0 0.8356,0c0.55707,0 0.8356,0 1.11414,0c0.27853,0 0.55707,0 0.8356,0c0.27853,0 0.55707,0 0.8356,0c0.55707,0 0.8356,0 1.11414,0c0.27853,0 0.55707,0 0.8356,0l0.27853,0l0.27853,0l0.27853,0" id="svg_10" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="65" fill="none"/>
+ </g>
+</svg>
diff --git a/client/public/images/pieces/Check3/bk_3.svg b/client/public/images/pieces/Check3/bk_3.svg
new file mode 100644 (file)
index 0000000..21887b9
--- /dev/null
@@ -0,0 +1,16 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <g id="svg_1" fill="#fff" fill-rule="nonzero">
+   <path id="svg_2" d="m1060,1261q172,3 282,17t198,33q55,-54 122,-103t94,-84q48,-65 48,-162q0,-89 -43,-149q-77,-113 -235,-113q-92,0 -192,40q-91,36 -132,78q-85,82 -124,216q-15,46 -16,117t-2,110z"/>
+   <path id="svg_3" d="m988,1260q0,-40 -2,-110t-15,-118q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q25,36 96,89t120,98q87,-19 196,-33t283,-16z"/>
+   <path id="svg_4" d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z"/>
+  </g>
+  <g id="svg_5" fill-rule="nonzero">
+   <path id="svg_6" fill="#000" transform="translate(0,2048) scale(1,-1)" d="m1133,865q0,29 6,82t21,84q37,81 106,150q20,20 86,54q65,32 139,32q56,0 111,-19t84,-60q25,-34 25,-110q0,-60 -49,-112q-32,-33 -69,-66t-71,-79q-58,20 -161,31t-228,13zm-73,-78q172,-3 282,-17t198,-33q55,54 122,103t94,84q48,65 48,162q0,89 -43,149q-77,113 -235,113q-92,0 -192,-40q-91,-36 -132,-78q-85,-82 -124,-216q-15,-46 -16,-117t-2,-110zm458,-173q-184,51 -490,51q-308,0 -496,-52l15,-101q189,49 481,49q291,0 474,-48l16,101zm26,-299l-30,118q-195,45 -490,45q-292,0 -488,-45l-32,-119q190,58 521,58q159,0 295,-16t224,-41zm-1081,207l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm525,266q0,40 -2,110t-15,118q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q25,-36 96,-89t120,-98q87,19 196,33t283,16zm36,251q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm35,520l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130zm-147,-694q-125,-2 -228,-13t-161,-31q-30,37 -69,74t-70,71q-50,51 -50,112q0,75 25,110q27,40 83,59t113,20q72,0 138,-32q65,-34 86,-54q68,-69 106,-150q13,-30 19,-83t8,-83zm112,345q-2,10 -5,17q-6,20 -10,29q-3,7 -8,17t-10,23q-3,7 -7,18t-8,22q-3,9 -3,19q0,53 51,53q53,0 53,-52q0,-13 -4,-19q-14,-38 -15,-41q-15,-30 -19,-39q-7,-16 -9,-29q-3,-6 -4,-10t-2,-8z"/>
+   <path id="svg_7" fill="#fff" d="m1518,1434q-184,-51 -490,-51q-308,0 -496,52l15,101q189,-49 481,-49q291,0 474,48l16,-101z"/>
+   <path id="svg_8" fill="#fff" d="m1544,1733l-30,-118q-195,-45 -490,-45q-292,0 -488,45l-32,119q190,-58 521,-58q159,0 295,16t224,41z"/>
+  </g>
+  <path d="m714.49994,969.49994c5.50085,-2.75079 6.01178,-2.99701 7.05334,-3.55334c0.55359,-0.29572 1.12964,-0.62164 1.73248,-0.98248c0.6441,-0.3855 2.04974,-1.29419 2.82336,-1.82208c0.83325,-0.56854 1.71985,-1.19177 2.67749,-1.84875c1.02386,-0.70239 2.1217,-1.44427 3.3075,-2.20874c1.26068,-0.81274 4.06659,-2.51166 5.62085,-3.38831c1.63214,-0.92059 3.35333,-1.84552 5.14502,-2.78625c1.84491,-0.96869 3.74512,-1.93976 5.685,-2.92126c1.9668,-0.99512 5.95349,-2.99176 7.95581,-3.98792c2.00439,-0.99719 4.01599,-1.99036 6.05249,-2.94751c2.04523,-0.96124 4.11786,-1.89435 6.23248,-2.76752c2.1322,-0.88043 6.53986,-2.47705 8.82336,-3.17957c2.32324,-0.71472 4.71948,-1.36261 7.17749,-2.00623c2.52356,-0.66077 5.12848,-1.30963 7.8075,-2.00629c2.76776,-0.71973 8.57666,-2.32996 11.62335,-3.25415c3.16022,-0.95862 6.41986,-2.0014 9.80249,-3.05627c3.49908,-1.09119 7.11993,-2.20654 10.88251,-3.28125c3.88403,-1.10944 12.08868,-3.20862 16.42249,-4.14331c4.46631,-0.96326 9.09332,-1.82959 13.875,-2.59875c4.91846,-0.7912 9.9953,-1.4776 15.22498,-2.05872c5.37048,-0.59674 16.573,-1.48804 22.39752,-1.79004c5.95569,-0.30884 12.03448,-0.5058 18.21753,-0.64124c6.27197,-0.13739 12.61993,-0.20135 19.02747,-0.23627c6.45245,-0.03516 19.4325,-0.03375 25.93127,-0.03375c6.49121,0 12.96747,0 19.42126,0c6.42371,0 12.81,0 19.15125,0c6.2887,0 18.67871,-0.00378 24.76788,0.00128c6.02417,0.005 11.99341,0.01727 17.91748,0.07874c5.88928,0.0611 11.75415,0.1637 17.60254,0.34875c5.84497,0.18494 17.55981,0.78851 23.43921,1.23206c5.87415,0.44318 11.70068,0.98322 17.44495,1.58252c5.63416,0.58783 11.11536,1.23022 16.41003,1.89752c5.07861,0.64008 14.43225,1.92719 18.64624,2.55664c3.91589,0.58496 7.55286,1.16388 10.92371,1.79248c3.14648,0.58673 6.08093,1.21057 8.80872,1.92755c2.58228,0.67877 7.32068,2.28693 9.5022,3.24329c2.12549,0.93182 4.13916,1.97571 6.05249,3.08252c1.86853,1.08087 3.63831,2.22955 5.3324,3.39752c1.65247,1.13922 4.74976,3.43958 6.22339,4.55499c1.43298,1.08459 2.82117,2.15063 4.17749,3.1875c1.32532,1.01318 2.62341,2.00446 3.90747,2.96246c1.26257,0.94189 3.76807,2.74408 5.02295,3.60126c1.24854,0.85278 2.5105,1.68304 3.77625,2.5163c1.27502,0.83929 2.56689,1.68463 3.86621,2.56122c1.3241,0.89331 4.03003,2.80048 5.41125,3.83295c1.41895,1.06067 2.85254,2.17511 4.3125,3.32245c1.49011,1.17102 2.9989,2.37482 4.5376,3.59253c1.56128,1.2356 4.76038,3.7301 6.40039,4.97955c1.66333,1.26727 3.36633,2.54712 5.08875,3.88129c1.76855,1.36987 3.57581,2.80164 5.40369,4.33124c1.896,1.58661 5.80188,5.10254 7.81091,7.05377c2.08838,2.02826 4.19495,4.17932 6.34875,6.40497c2.20557,2.27924 4.43323,4.62329 6.70874,6.98999c2.30115,2.39331 6.99255,7.17883 9.38708,9.53333c2.39209,2.35217 4.80908,4.66919 7.20752,6.99005c2.38818,2.31085 4.7605,4.61285 7.07239,6.94495c2.29468,2.31476 6.69409,7.01208 8.75549,9.42212c2.04187,2.38708 3.98523,4.82056 5.83875,7.28625c1.83716,2.44397 3.58508,4.922 5.25378,7.42126c1.65442,2.47778 4.75366,7.47852 6.21204,9.98914c1.44812,2.49292 2.83545,5.00354 4.17749,7.52625c1.3396,2.51807 2.63611,5.05859 3.90747,7.61621c1.27539,2.5658 3.77881,7.77087 5.02209,10.41174c1.25342,2.66248 2.49976,5.35608 3.72375,8.08875c1.23535,2.75818 2.45154,5.55713 3.63379,8.40369c1.1947,2.87671 3.49414,8.77966 4.58752,11.80676c1.0968,3.03638 2.13367,6.07544 3.10864,9.08618c0.95215,2.94031 1.82739,5.79834 2.61377,8.54626c0.7428,2.59583 1.93982,7.25867 2.36792,9.27954c0.38281,1.80652 0.66455,3.43372 0.85498,4.89758c0.1709,1.31348 0.26709,2.50586 0.31506,3.59241c0.04419,1.00037 0.04626,2.82751 0.04456,3.69043c-0.00171,0.84045 -0.00562,1.66101 -0.02625,2.46375c-0.02026,0.78809 -0.05432,1.56409 -0.11621,2.32874c-0.0614,0.75867 -0.26184,2.26367 -0.41125,3.01135c-0.15039,0.75256 -0.3385,1.5033 -0.5625,2.25c-0.22607,0.75354 -0.48926,1.50427 -0.78748,2.25c-0.30164,0.75439 -1.00208,2.25549 -1.40088,3.00073c-0.40771,0.76172 -0.8606,1.52881 -1.36499,2.30261c-0.52686,0.80835 -1.11658,1.63428 -1.77002,2.48242c-0.69275,0.89917 -2.302,2.80457 -3.22253,3.82251c-0.979,1.08264 -2.04346,2.2063 -3.1875,3.375c-1.20557,1.23169 -2.49451,2.50562 -3.86243,3.82495c-1.43176,1.38098 -4.53418,4.27869 -6.19958,5.80042c-1.7312,1.58179 -3.53943,3.21057 -5.41125,4.90137c-1.93738,1.75 -3.94031,3.55933 -5.99622,5.44116c-2.12097,1.94141 -6.51746,6.04492 -8.78967,8.21008c-2.33459,2.22461 -4.71643,4.52295 -7.17749,6.85864c-2.52039,2.39197 -5.11316,4.82483 -7.8075,7.26379c-2.7522,2.49146 -8.5531,7.49011 -11.62122,9.96545c-3.1217,2.51855 -6.35046,5.00134 -9.67126,7.44751c-3.35669,2.47253 -6.79431,4.89624 -10.30127,7.26746c-3.52319,2.3822 -10.71375,6.97729 -14.36621,9.17712c-3.64758,2.1969 -7.33435,4.3175 -11.0625,6.34875c-3.72217,2.02795 -7.48425,3.96887 -11.28748,5.80872c-3.797,1.83691 -11.50012,5.23206 -15.39758,6.79004c-3.88269,1.552 -7.77966,2.99683 -11.65491,4.39124c-3.82996,1.37805 -7.62085,2.6875 -11.34009,3.98621c-3.64087,1.27136 -10.62488,3.771 -13.9375,5.03247c-3.22717,1.22888 -6.37524,2.47974 -9.50244,3.67126c-3.11292,1.18604 -6.24805,2.34583 -9.45752,3.40125c-3.27063,1.07544 -10.21204,2.97644 -13.92834,3.76672c-3.83069,0.81458 -7.77161,1.49365 -11.76746,2.08875c-4.0011,0.59583 -7.98413,1.08667 -11.90259,1.50378c-3.80847,0.4054 -10.95618,1.00549 -14.22498,1.21118c-3.07141,0.19324 -5.97937,0.32446 -8.75244,0.375c-2.66711,0.04858 -5.26086,0.02539 -7.8075,-0.07495c-2.53369,-0.09973 -7.67468,-0.50439 -10.34082,-0.8009c-2.78076,-0.30933 -5.70435,-0.7041 -8.80505,-1.17749c-3.32129,-0.50696 -6.88892,-1.11389 -10.73999,-1.8075c-4.1759,-0.75208 -13.62158,-2.5647 -18.94623,-3.62036c-5.68542,-1.1272 -11.6593,-2.3374 -17.85376,-3.61877c-6.35303,-1.31421 -12.79242,-2.67236 -19.24878,-4.06873c-6.41364,-1.38708 -18.82465,-4.16663 -24.69501,-5.54297c-5.61951,-1.31763 -10.97046,-2.61621 -16.0462,-3.88501c-4.80164,-1.20032 -9.31256,-2.36353 -13.52625,-3.47998c-3.91614,-1.0376 -10.80621,-2.9314 -13.77087,-3.77869c-2.67175,-0.76367 -5.07233,-1.47217 -7.22626,-2.14136c-1.94501,-0.60425 -3.7005,-1.17883 -5.2912,-1.73621c-1.4657,-0.51355 -4.10175,-1.52649 -5.32336,-2.03296c-1.17499,-0.48718 -2.29047,-0.97534 -3.34875,-1.44739c-1.00079,-0.44641 -1.93573,-0.87549 -2.80872,-1.26758c-0.80377,-0.36108 -2.19818,-0.96082 -2.79004,-1.17871c-0.51862,-0.19104 -0.98151,-0.33594 -1.39124,-0.45374c-0.36292,-0.10437 -0.69128,-0.18567 -0.98627,-0.2738c-0.27496,-0.08215 -0.78864,-0.28772 -1.0329,-0.43286c-0.24939,-0.14819 -0.48395,-0.32178 -0.69751,-0.51001c-0.20477,-0.18054 -0.38306,-0.36609 -0.51752,-0.55505c-0.11792,-0.16565 -0.22589,-0.47266 -0.17828,-0.57825c0.04779,-0.10596 0.17523,-0.17859 0.32245,-0.24011c0.17102,-0.07141 0.37408,-0.12439 0.59253,-0.19495c0.23499,-0.07593 0.73102,-0.27869 0.97833,-0.42163c0.25977,-0.15015 0.51996,-0.33105 0.80249,-0.51001c0.29907,-0.18945 0.62152,-0.38379 0.98248,-0.55505c0.38568,-0.18298 1.29504,-0.47717 1.82172,-0.57874c0.56677,-0.10938 1.17834,-0.18201 1.82245,-0.26624c0.67426,-0.08826 1.37543,-0.17822 2.09253,-0.31128c0.73651,-0.1366 2.23297,-0.54407 2.97998,-0.83203c0.7735,-0.29822 1.56232,-0.66296 2.40753,-1.02002c0.89966,-0.38 1.87244,-0.76978 2.94751,-1.10999c1.16479,-0.36853 3.88849,-0.95984 5.46704,-1.15588c1.71838,-0.21338 3.58832,-0.33911 5.59875,-0.42749c2.14886,-0.09448 4.43665,-0.13452 6.85876,-0.15747c2.5545,-0.02417 8.05127,-0.0249 10.98584,-0.02173c3.04205,0.0033 6.17426,0.01221 9.37872,0.05261c3.2597,0.04114 6.55731,0.10913 9.87378,0.23242c3.32025,0.12341 9.89868,0.52026 13.12122,0.82251c3.17767,0.2981 6.30408,0.67175 9.375,1.125c3.02924,0.44714 6.00586,0.97083 8.92505,1.57495c2.8811,0.59631 8.48279,1.99805 11.20081,2.79919c2.68884,0.7926 5.32794,1.66016 7.92749,2.57251c2.58221,0.90625 5.13013,1.86438 7.65753,2.84253c2.51935,0.9751 7.52246,2.97754 10.02246,3.97754c2.5,1 5,2 7.50006,3c2.5,1 5,2 7.5,3c2.5,1 7.50049,2.9989 10,4.00037c2.50049,1.00183 5.00171,2.00659 7.5,3.02625c2.50171,1.02112 5.00317,2.05591 7.5,3.11621c2.50317,1.06299 7.50403,3.26501 10.00037,4.41089c2.50696,1.15076 5.01282,2.33496 7.52625,3.53625c2.52734,1.20789 5.06311,2.43701 7.61621,3.67126c2.57019,1.24255 7.77148,3.74353 10.41052,4.98828c2.6543,1.25195 5.32593,2.49426 8.00989,3.72375c2.68445,1.22974 5.37097,2.44214 8.05505,3.63379c2.66919,1.18506 7.96338,3.47998 10.57837,4.58997c2.59167,1.1001 5.17285,2.17944 7.73999,3.26624c2.56458,1.08569 5.13086,2.18042 7.69495,3.31128c2.58264,1.13904 7.79089,3.54651 10.42175,4.83203c2.66272,1.30103 5.32971,2.65381 8.00989,4.02002c2.68823,1.37048 5.37036,2.75269 8.05505,4.10999c2.6687,1.34924 7.95862,3.94373 10.57837,5.15625c2.58704,1.19739 5.16833,2.33997 7.73999,3.45374c2.56018,1.10876 5.12634,2.1908 7.69495,3.2738c2.57813,1.08704 7.78687,3.29187 10.42212,4.43286c2.6615,1.15234 5.33887,2.32898 8.03625,3.51001c2.71179,1.18738 5.4342,2.37903 8.17126,3.55505c2.73962,1.17725 8.23633,3.47107 10.98828,4.57922c2.74463,1.10522 5.49243,2.18506 8.22375,3.29248c2.72791,1.10596 5.44629,2.2312 8.13379,3.42749c2.68945,1.19714 7.99329,3.80139 10.58667,5.24243c2.59021,1.43921 5.11023,2.96228 7.55627,4.53003c2.39966,1.53796 4.69531,3.10291 6.88123,4.66504c2.09717,1.49878 5.88074,4.38025 7.54626,5.7345c1.55371,1.26343 2.97974,2.48816 4.28247,3.69385c1.24182,1.14929 2.39526,2.30237 3.47253,3.46875c1.06274,1.15063 3.07629,3.57434 4.06787,4.85449c1.01196,1.3064 2.01013,2.65735 3.02625,4.02002c1.02466,1.37402 2.05298,2.75476 3.11621,4.10999c1.06018,1.35144 3.25842,3.94446 4.41003,5.15625c1.13879,1.19824 2.31372,2.33655 3.48376,3.45374c1.15747,1.10522 2.31726,2.1825 3.43872,3.2738c1.10864,1.07886 3.20923,3.28113 4.16748,4.43335c0.9519,1.14478 1.84265,2.33179 2.70374,3.53625c0.86145,1.20483 1.69092,2.43604 2.5238,3.67126c0.83716,1.24146 2.54077,3.74268 3.43213,4.98828c0.89526,1.25098 1.8092,2.4873 2.70752,3.72375c0.88831,1.22278 1.75806,2.42883 2.57239,3.63379c0.79211,1.17212 2.18933,3.46497 2.75671,4.58911c0.54517,1.08008 1.0061,2.15576 1.41748,3.21375c0.40173,1.0332 0.75452,2.06299 1.10254,3.07874c0.34521,1.00757 1.04785,3.01514 1.44458,4.01135c0.39978,1.00391 0.83301,2.00281 1.28625,3c0.45581,1.00281 0.93359,2.00146 1.42126,3c0.48901,1.00146 1.49133,2.99878 1.98792,4.00037c0.4967,1.00171 0.98853,2.00623 1.44751,3.02625c0.45935,1.02087 0.89148,2.05676 1.26746,3.11621c0.37756,1.06409 0.97595,3.26941 1.17834,4.4104c0.20447,1.15283 0.33679,2.32715 0.42749,3.51001c0.09094,1.18567 0.13403,2.37329 0.15747,3.55505c0.02319,1.17151 0.02515,3.46497 0.02173,4.57959c-0.0033,1.10205 -0.01221,2.20435 -0.05249,3.31873c-0.04114,1.14001 -0.11279,2.31799 -0.23254,3.54382c-0.12622,1.29102 -0.53394,4.10864 -0.82202,5.65613c-0.30774,1.65283 -0.68115,3.40186 -1.09875,5.25c-0.44104,1.95203 -0.93311,4.00085 -1.45886,6.15002c-0.55066,2.25098 -1.74927,7.05054 -2.38867,9.59717c-0.6604,2.63 -1.34204,5.32617 -2.0625,8.06616c-0.72949,2.77417 -1.48535,5.56091 -2.28748,8.3363c-0.79797,2.76135 -2.48926,8.14185 -3.39966,10.71997c-0.88696,2.51184 -1.81348,4.9281 -2.78625,7.23376c-0.93738,2.2218 -1.90686,4.3252 -2.92126,6.2887c-0.96399,1.86609 -2.95667,5.16431 -3.98828,6.56921c-0.96753,1.31763 -1.97131,2.49231 -2.97375,3.55872c-0.95789,1.01892 -1.93384,1.94629 -2.88379,2.83875c-0.92688,0.87085 -2.73706,2.58093 -3.5896,3.47839c-0.85425,0.89929 -1.67676,1.83472 -2.48999,2.78625c-0.81836,0.95764 -1.62549,1.93762 -2.44495,2.92126c-0.82727,0.99304 -2.52881,2.99426 -3.42212,3.98877c-0.90332,1.00562 -1.83521,2.00366 -2.78625,3c-0.95813,1.00378 -1.93481,2.00183 -2.92126,3c-0.99023,1.00183 -2.98743,3.00122 -3.98914,3.99951c-1.00171,0.99829 -2.00598,1.99426 -3.02625,2.97375c-1.02051,0.97974 -2.05505,1.94592 -3.11621,2.88379c-1.06226,0.93884 -3.2644,2.73877 -4.41089,3.58911c-1.15027,0.85315 -2.33337,1.66943 -3.53625,2.46375c-1.20642,0.79663 -2.43396,1.56775 -3.67126,2.32874c-1.23938,0.76233 -3.73816,2.26221 -4.98865,3.01086c-1.24951,0.74792 -2.4978,1.49292 -3.75,2.22375c-1.2478,0.72839 -2.49622,1.44336 -3.75,2.13379c-1.24634,0.68628 -3.74512,1.98633 -5.00171,2.5896c-1.25684,0.60339 -2.53943,1.18079 -3.85498,1.73999c-1.34766,0.57275 -2.75061,1.13379 -4.21497,1.69495c-1.52893,0.58594 -4.84351,1.78943 -6.64502,2.42249c-1.89844,0.66711 -3.89868,1.35376 -6,2.0625c-2.19873,0.74158 -4.4989,1.50342 -6.90002,2.28748c-2.4989,0.81604 -7.79858,2.51733 -10.60083,3.39966c-2.9043,0.91443 -5.91882,1.84863 -9.05249,2.78625c-3.24792,0.9718 -6.62292,1.95032 -10.13257,2.92126c-3.63684,1.00623 -11.34326,3.00586 -15.41577,3.98706c-4.17419,1.00574 -8.42273,1.97473 -12.70508,2.89502c-4.26453,0.91638 -8.4823,1.76904 -12.61499,2.53491c-3.99426,0.74011 -11.4408,1.93677 -14.82458,2.35669c-3.15344,0.39136 -6.11731,0.66919 -8.9137,0.85498c-2.65308,0.17627 -5.19629,0.26807 -7.65381,0.31506c-2.39929,0.0459 -7.13623,0.04504 -9.52332,0.04504c-2.40955,0 -4.83911,0 -7.28625,0c-2.46204,0 -4.93665,0 -7.42126,0c-2.49207,0 -7.48865,0 -9.98865,0c-2.5,0 -5,0 -7.5,0c-2.5,0 -5,0 -7.5,0c-2.5,0 -7.5,0 -10,0c-2.5,0 -5,0 -7.5,0c-2.5,0 -5,0 -7.5,0c-2.5,0 -7.5,0 -9.99963,0c-2.49707,0 -4.98914,0 -7.47375,0c-2.47461,0 -4.93665,0 -7.38373,0c-2.42957,0 -7.22626,0 -9.5896,0c-2.34332,0 -4.67169,0 -6.98999,0c-2.31335,0 -4.62665,0 -6.94501,0c-2.32831,0 -7.03497,0 -9.42169,0c-2.40662,0 -4.82831,0 -7.25995,0c-2.43671,0 -4.87335,0 -7.30505,0c-2.42163,0 -7.21497,0.00256 -9.57788,-0.00085c-2.34039,-0.0033 -4.66101,-0.01147 -6.96375,-0.05249c-2.28809,-0.04077 -4.56427,-0.10901 -6.82874,-0.23254c-2.25897,-0.12317 -6.7644,-0.52295 -9.01129,-0.82251c-2.25342,-0.30042 -4.50464,-0.67603 -6.75,-1.125c-2.25494,-0.45093 -4.5061,-0.97668 -6.75,-1.57495c-2.25635,-0.60156 -6.75562,-2.00879 -9.00165,-2.79834c-2.26746,-0.797 -4.54254,-1.65881 -6.85498,-2.52002c-2.35089,-0.87549 -4.74664,-1.76611 -7.21503,-2.60999c-2.52496,-0.86328 -7.83704,-2.4613 -10.64166,-3.1554c-2.8689,-0.70996 -5.80927,-1.33191 -8.78998,-1.90125c-2.99274,-0.57153 -5.99133,-1.07629 -8.97003,-1.54126c-2.93469,-0.45813 -8.60944,-1.25281 -11.31165,-1.61218c-2.61115,-0.34717 -5.14355,-0.67029 -7.60498,-0.98999c-2.40186,-0.31189 -4.75433,-0.61951 -7.065,-0.94495c-2.28265,-0.32141 -6.79706,-1.02344 -9.04376,-1.42212c-2.24335,-0.39807 -4.4696,-0.82898 -6.67126,-1.28625c-2.1759,-0.45203 -4.31226,-0.92712 -6.40125,-1.42126c-2.04095,-0.48279 -5.9306,-1.48193 -7.76709,-1.98792c-1.77008,-0.48767 -3.47107,-0.98035 -5.11499,-1.44751c-1.58771,-0.45117 -3.1236,-0.88513 -4.62,-1.26746c-1.4505,-0.37061 -4.25696,-0.97168 -5.62292,-1.17871c-1.33765,-0.20264 -2.65997,-0.3418 -3.96375,-0.45374c-1.28717,-0.11047 -2.56348,-0.1886 -3.82874,-0.2738c-1.25806,-0.08472 -3.76233,-0.28699 -5.01294,-0.43286c-1.26282,-0.14734 -2.54327,-0.32861 -3.85498,-0.51001c-1.35162,-0.18689 -2.75232,-0.3822 -4.21503,-0.55505c-1.53064,-0.18091 -4.8443,-0.47595 -6.64288,-0.57874c-1.88483,-0.10767 -3.84595,-0.18103 -5.86877,-0.26624c-2.073,-0.08728 -4.18414,-0.17688 -6.31873,-0.31128c-2.1488,-0.13538 -6.43408,-0.5376 -8.54462,-0.83203c-2.09637,-0.29248 -4.17255,-0.65149 -6.23999,-1.02002c-2.06433,-0.36804 -4.12482,-0.7572 -6.19501,-1.10999c-2.07654,-0.35388 -6.28265,-0.953 -8.42084,-1.15588c-2.14874,-0.20386 -4.30597,-0.33643 -6.45752,-0.42749c-2.13525,-0.09045 -4.24652,-0.13403 -6.32245,-0.15747c-2.03082,-0.02295 -5.91754,-0.02246 -7.75543,-0.02246c-1.76544,0 -3.46082,0 -5.08875,0c-1.56293,0 -3.06335,0 -4.50378,0c-1.38287,0 -3.98621,0.00256 -5.21246,-0.00085c-1.18378,-0.0033 -2.33289,-0.01123 -3.45374,-0.05249c-1.10168,-0.04053 -2.19183,-0.10962 -3.2738,-0.23254c-1.08832,-0.12366 -3.30029,-0.53101 -4.4325,-0.8208c-1.1582,-0.29651 -2.31915,-0.65149 -3.4837,-1.02002c-1.1629,-0.36804 -2.30835,-0.75183 -3.43878,-1.10999c-1.09967,-0.34839 -3.18781,-0.94531 -4.16583,-1.15625c-0.91907,-0.19812 -1.78833,-0.33826 -2.59875,-0.45374c-0.74884,-0.10669 -1.43665,-0.19006 -2.05872,-0.2738l-0.55463,-0.08618" id="svg_14" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="65" stroke="#bf0000" fill="none"/>
+ </g>
+</svg>
diff --git a/client/public/images/pieces/Check3/wk_1.svg b/client/public/images/pieces/Check3/wk_1.svg
new file mode 100644 (file)
index 0000000..5b66331
--- /dev/null
@@ -0,0 +1,15 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <path id="svg_1" fill="#000" transform="translate(0,2048) scale(1,-1) " fill-rule="nonzero" d="m524,583q190,48 504,48q308,0 497,-46l25,147q-201,53 -526,53q-327,0 -525,-54l25,-148zm-61,-61l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm1081,-117l-30,115q-198,44 -490,44q-291,0 -489,-44l-32,-116q191,56 522,56q329,0 519,-55zm26,-94q-193,78 -542,78q-362,0 -548,-80q176,-70 545,-70q176,0 321,19t224,53zm-581,542q-1,39 -3,77t-15,86q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q29,-37 74,-74t84,-67q175,63 538,68zm35,186q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm34,-186q172,-2 315,-20t224,-47q38,30 83,66t75,75q48,61 48,161q0,90 -43,150q-77,112 -234,112q-94,0 -193,-39q-87,-35 -132,-78q-84,-84 -124,-216q-14,-47 -16,-85t-3,-79zm1,706l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130z"/>
+  <g id="svg_2" fill="#fff" fill-rule="nonzero">
+   <path id="svg_3" d="m524,1465q190,-48 504,-48q308,0 497,46l25,-147q-201,-53 -526,-53q-327,0 -525,54l25,148z"/>
+   <path id="svg_4" d="m1544,1643l-30,-115q-198,-44 -490,-44q-291,0 -489,44l-32,116q191,-56 522,-56q329,0 519,55z"/>
+   <path id="svg_5" d="m1570,1737q-193,-78 -542,-78q-362,0 -548,80q176,70 545,70q176,0 321,-19t224,-53z"/>
+   <path id="svg_6" d="m989,1195q-1,-39 -3,-77t-15,-86q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q29,37 74,74t84,67q175,-63 538,-68z"/>
+   <path id="svg_7" d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z"/>
+   <path id="svg_8" d="m1058,1195q172,2 315,20t224,47q38,-30 83,-66t75,-75q48,-61 48,-161q0,-90 -43,-150q-77,-112 -234,-112q-94,0 -193,39q-87,35 -132,78q-84,84 -124,216q-14,47 -16,85t-3,79z"/>
+  </g>
+  <path d="m759.49994,1024.5c3.30499,0 4.1767,0 5.20837,0c0.58832,0 1.23163,0 1.935,0c1.60663,0 2.51788,0.00183 3.49664,-0.00342c1.03876,-0.00549 2.13013,-0.0177 3.26624,-0.04871c1.17395,-0.0321 2.37842,-0.07605 3.60376,-0.16125c2.49225,-0.17334 3.74316,-0.32538 4.9967,-0.51001c1.26837,-0.18683 2.55139,-0.42609 3.84747,-0.73499c1.33099,-0.31726 2.69312,-0.69794 4.07251,-1.185c2.9328,-1.03552 4.44025,-1.75232 6.01331,-2.50336c1.64917,-0.78741 3.35126,-1.66809 5.1225,-2.61371c1.85565,-0.99066 3.78271,-2.05737 5.79755,-3.17627c4.30884,-2.39276 6.61017,-3.66412 8.99329,-5.01001c2.47375,-1.39709 5.02179,-2.86865 7.60504,-4.46997c2.66412,-1.65143 5.37848,-3.40509 8.05499,-5.37c5.57642,-4.09381 8.26465,-6.5058 10.99335,-8.99335c2.79395,-2.547 5.55902,-5.24756 8.34747,-8.03253c2.83844,-2.8349 5.67517,-5.76135 8.57251,-8.70746c5.89362,-5.99292 8.92316,-8.98792 11.99664,-11.98334c3.09399,-3.01544 6.23016,-6.02325 9.37878,-9.04877c3.16138,-3.03778 6.33978,-6.07813 9.49121,-9.16125c6.31488,-6.17804 9.41321,-9.33533 12.51666,-12.51666c3.1333,-3.21191 6.28595,-6.49402 9.5025,-9.83252c3.2901,-3.41486 6.66351,-6.92627 10.17749,-10.50751c7.39899,-7.54059 11.37524,-11.45447 15.48004,-15.47662c4.19336,-4.10895 8.47021,-8.24658 12.77997,-12.40125c4.30359,-4.14868 8.58148,-8.24762 12.78003,-12.28876c8.05933,-7.75714 11.849,-11.42877 15.4433,-14.96338c3.42273,-3.36591 6.64789,-6.58258 9.6413,-9.67499c2.81561,-2.90869 5.42633,-5.65704 7.7287,-8.32501c4.07794,-4.72552 5.66949,-6.95166 7.04669,-9.06665c1.30518,-2.00439 2.43085,-4.04968 3.45374,-6.14996c1.05511,-2.16638 2.04895,-4.51465 3.11627,-7.05005c2.46771,-5.862 3.90637,-9.28424 5.51666,-12.97998c1.70917,-3.92279 3.51428,-7.99591 5.3775,-12.15747c1.87677,-4.19177 3.75183,-8.3421 5.60254,-12.38251c3.4447,-7.52039 5.01904,-10.86829 6.46667,-13.93671c1.32434,-2.80725 2.54578,-5.36365 3.65991,-7.69122c1.0127,-2.11578 1.93884,-4.03247 2.76001,-5.77875c1.41895,-3.01758 1.99902,-4.33569 2.52002,-5.53333c0.47205,-1.08502 0.88708,-2.07275 1.28247,-2.95874c0.35864,-0.80377 0.68665,-1.53748 1.0575,-2.17126c0.66638,-1.13879 1.08594,-1.59961 1.50671,-2.01666c0.40833,-0.40472 0.84717,-0.75494 1.29004,-1.07251c0.43091,-0.30902 0.86902,-0.58044 1.28992,-0.84747c0.7948,-0.50439 1.15869,-0.75305 1.4967,-1.00336c0.32275,-0.23895 0.62256,-0.47754 0.91125,-0.70123c0.27478,-0.21295 0.53418,-0.41907 0.79871,-0.58875c0.49182,-0.31549 0.75098,-0.41681 1.00342,-0.50336c0.2478,-0.08502 0.5,-0.14667 0.75,-0.21002c0.25,-0.06329 0.50366,-0.12067 0.75,-0.20996c0.50867,-0.18439 0.75452,-0.33698 1,-0.50336c0.25476,-0.17267 0.50305,-0.37311 0.75,-0.58875c0.25317,-0.22101 0.50159,-0.45758 0.75,-0.70123c0.50317,-0.49347 0.75,-0.7467 1,-0.9967c0.25,-0.25 0.5,-0.5 0.75,-0.75c0.25,-0.25 0.5,-0.5 0.75,-0.75c0.5,-0.5 0.74878,-0.75085 1,-0.99664c0.24878,-0.24335 0.49683,-0.48022 0.75,-0.70123c0.24695,-0.21564 0.49243,-0.42029 0.75,-0.58875c0.48657,-0.31824 0.74585,-0.4201 0.99658,-0.4967c0.23914,-0.07306 0.47632,-0.11285 0.70129,-0.11249c0.2124,0.00037 0.4187,0.0274 0.58875,0.11249c0.31995,0.16016 0.422,0.33014 0.4967,0.49335c0.07605,0.16614 0.11243,0.35291 0.11243,0.53998c0,0.18713 -0.02905,0.37744 -0.11243,0.54004c-0.16199,0.31592 -0.33276,0.41382 -0.49341,0.5033c-0.16785,0.09344 -0.35571,0.16516 -0.53992,0.25879c-0.18933,0.09625 -0.38708,0.20331 -0.54004,0.37122c-0.33948,0.37268 -0.41675,0.68188 -0.5033,1.00665c-0.09717,0.36438 -0.16785,0.7771 -0.25879,1.22626c-0.09875,0.48761 -0.20374,1.01459 -0.37122,1.56378c-0.36902,1.20996 -0.67358,1.83942 -1.00342,2.49664c-0.3479,0.69324 -0.74951,1.40222 -1.17749,2.13751c-0.44519,0.76483 -0.92188,1.54791 -1.40247,2.36249c-1.00061,1.69574 -1.50256,2.58264 -1.98669,3.50336c-0.49438,0.94012 -0.97034,1.91595 -1.40247,2.93622c-0.44177,1.04315 -0.85535,2.12982 -1.17749,3.27374c-0.67114,2.38287 -0.84192,3.67633 -1,5.01001c-0.16455,1.38824 -0.26038,2.84607 -0.32251,4.3725c-0.06519,1.60028 -0.08801,3.28162 -0.09753,5.04755c-0.02039,3.80658 -0.00659,5.85413 -0.00659,7.98663c0,2.20251 0,4.46002 0,6.75751c0,2.32251 0,4.65497 0,6.98248c0,4.58002 0,6.80585 0,8.98669c0,2.14081 0,4.24664 0,6.32251c0,2.05078 0,4.08167 0,6.09747c0,4.00665 0,6.01123 0,8.04333c0,2.0871 0,4.25665 0,6.53625c0,2.41705 0,4.99915 0,7.77374c0,6.23669 0,9.745 0,13.50336c0,3.98334 0,8.16663 0,12.52496c0,4.50836 0,9.14166 0,13.875c0,9.66669 0,14.55627 0,19.48334c0,4.97711 0,10.01666 0,15.13129c0,5.20209 0,10.50415 0,15.9187c0,11.21667 0,17.03668 0,22.97668c0,6.03003 0,12.12 0,18.23999c0,6.12 0,12.21002 0,18.23999c0,11.76001 0,17.43713 0,22.97668c0,5.41461 0,10.71667 0,15.91876c0,5.11456 0,10.15417 0,15.13123c0,9.81665 0,14.67957 0,19.52002c0,4.82043 0,9.62329 0,14.41125c0,4.77539 0,9.54077 0,14.29871c0,9.50342 0,14.25378 0,19.00671c0,4.75793 0,9.52332 0,14.29871c0,4.78796 0,9.59082 0,14.41125c0,9.70337 0,14.59082 0,19.50342c0,4.9375 0,9.8999 0,14.88745c0,5.01245 0,10.05005 0,15.11255c0,10.19995 0,15.33667 0,20.49329c0,5.17163 0,10.35327 0,15.54004c0,5.18665 0,10.36829 0,15.53992c0,10.29333 0,15.4071 0,20.50342c0,5.08618 0,10.16992 0,15.25867c0,5.10132 0,10.22253 0,15.37134c0,10.40991 0,15.67615 0,20.93994c0,5.20874 0,10.31006 0,15.25122c0,4.72876 0,9.1925 0,13.33875c0,7.13 0,10.02625 0,12.5c0,2.10376 0,3.89001 0,5.41125c0,1.30884 0,2.45752 0,3.49878c0,1.96997 0.00183,2.99414 -0.00342,4.06335c-0.00549,1.10913 -0.01746,2.25342 -0.04871,3.42749c-0.03198,1.19922 -0.07581,2.41931 -0.16125,3.65247c-0.17297,2.49573 -0.33264,3.74438 -0.4967,4.99341c-0.16431,1.25098 -0.35327,2.5 -0.53992,3.75c-0.18677,1.25 -0.38074,2.49841 -0.54004,3.75c-0.31787,2.49695 -0.41626,3.74927 -0.4967,5c-0.08044,1.24939 -0.12952,2.49988 -0.16125,3.75c-0.03162,1.24988 -0.04395,2.5 -0.04871,3.75c-0.00952,2.5 0.00085,3.75 -0.01001,5c-0.01086,1.25 -0.03418,2.50061 -0.09753,3.75c-0.06335,1.25073 -0.151,2.50378 -0.32251,3.75c-0.34521,2.50916 -0.66162,3.75464 -1,4.99658c-0.33997,1.24744 -0.74023,2.48132 -1.17749,3.70129c-0.43616,1.2168 -0.90735,2.41382 -1.40247,3.58875c-0.97168,2.30579 -1.49292,3.40942 -1.98669,4.5c-0.4845,1.07031 -0.96167,2.11963 -1.40247,3.16125c-0.4325,1.02197 -0.84583,2.03137 -1.17749,3.04871c-0.64758,1.98657 -0.83875,3.00012 -1,4.00342c-0.16028,0.99707 -0.25916,1.99915 -0.32251,3c-0.06323,0.99927 -0.08789,1.99988 -0.09753,3c-0.01917,1.99988 -0.00464,3.00037 -0.01001,4.0033c-0.00549,1.00793 -0.01721,2.02344 -0.04871,3.04871c-0.03186,1.03821 -0.07678,2.0918 -0.16125,3.16125c-0.17432,2.20581 -0.33472,3.34204 -0.4967,4.50671c-0.16626,1.19617 -0.35583,2.42297 -0.53992,3.68628c-0.18945,1.30005 -0.38416,2.63892 -0.54004,4.02368c-0.32642,2.89978 -0.41675,4.42566 -0.4967,5.98669c-0.08118,1.58496 -0.12952,3.18323 -0.16125,4.78125c-0.03149,1.58533 -0.04382,3.14587 -0.04871,4.6687c-0.00916,2.88342 0.00122,4.22217 -0.01001,5.49341c-0.01074,1.21118 -0.03296,2.37073 -0.09753,3.48376c-0.0625,1.07703 -0.14954,2.12732 -0.32251,3.14624c-0.34326,2.02185 -0.66638,3.0144 -0.99329,4.01001c-0.32983,1.00452 -0.70667,2 -1.07996,3c-0.37341,1 -0.75952,1.99243 -1.08008,3c-0.63196,1.98621 -0.83203,2.9967 -0.99329,4c-0.16028,0.99707 -0.25916,1.99915 -0.32251,3c-0.06323,0.99927 -0.08789,1.99988 -0.09753,3c-0.01917,1.99988 -0.00659,3 -0.00659,4c0,1 0,2 0,3c0,1 0,2 0,3c0,2 0,2.99915 0,3.99329c0,0.98413 0,1.95337 0,2.90247c0,0.92419 0,1.81836 0,2.67749c0,1.59338 0,2.31921 0,3c0,0.64087 0,1.2467 0,1.82251c0,0.5509 0,1.08167 0,1.59753c0,1.00671 0,1.50671 0,2.00671c0,0.5 0,1 0,1.5c0,0.5 0,1 0,1.5c0,1 0,1.49951 0,1.99658c0,0.49207 0,0.97668 0,1.45129c0,0.46204 0,0.90918 0,1.33875c0,0.79663 0,1.15955 0,1.5c0,0.32043 0,0.62329 0,0.91125c0,0.27539 0,0.54077 0,0.79871c0,0.50342 0,0.75342 0,1.00342c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75037 0,1.0033c0,0.25793 0,0.52332 0,0.79871c0,0.28796 0,0.59082 0,0.91125c0,0.70337 0,1.08997 0,1.4967c0,0.42163 0,0.85327 0,1.29004c0,0.43665 0,0.86829 0,1.28992c0,0.79333 0.00232,1.15588 -0.00342,1.49341c-0.00537,0.3125 -0.01514,0.60083 -0.04871,0.86243c-0.03064,0.23865 -0.06921,0.45972 -0.16125,0.63757c-0.1665,0.32178 -0.33508,0.422 -0.4967,0.50659c-0.16711,0.08752 -0.35327,0.14685 -0.53992,0.21008c-0.18677,0.06335 -0.37634,0.11609 -0.54004,0.20996c-0.31116,0.17859 -0.41858,0.33789 -0.4967,0.50659c-0.08411,0.18176 -0.13062,0.39893 -0.16125,0.63757c-0.03357,0.2616 -0.04395,0.5498 -0.04871,0.86243c-0.0105,0.69995 -0.0033,1.08716 -0.0033,1.4967c0,0.42957 0,0.87671 0,1.33875c0,0.47461 0,0.95923 0,1.45129c0,0.9967 0,1.49744 0,2.0033c0,0.51587 0,1.04663 0,1.59753c0,0.57581 0,1.18164 0,1.82251c0,1.40662 0,2.17993 0,2.99329c0,0.84338 0,1.70667 0,2.58008c0,0.87329 0,1.73657 0,2.57996c0,1.58667 0,2.31213 0,2.98999c0,0.63293 0,1.22339 0,1.7738c0,0.51282 0,0.99072 0,1.43616c0,0.80334 -0.00244,1.16626 0.0033,1.50671c0.00537,0.32043 0.01624,0.62402 0.04871,0.91125c0.03125,0.27625 0.07581,0.54529 0.16125,0.79871c0.17346,0.51453 0.33594,0.75635 0.4967,1.00671c0.16736,0.26074 0.3562,0.52136 0.54004,0.79871c0.1897,0.28601 0.38391,0.58289 0.53992,0.91125c0.3269,0.68835 0.41711,1.08765 0.4967,1.4967c0.08167,0.41956 0.12952,0.85278 0.16125,1.29004c0.03162,0.43628 0.04382,0.86829 0.04871,1.28992c0.00916,0.79333 0.00342,1.15625 0.00342,1.4967c0,0.32043 0,0.62329 0,0.91125c0,0.27539 0,0.54077 0,0.79871c0,0.50342 0,0.75342 0,1.00342c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75c0,0.25 0,0.5 0,0.75c0,0.5 0,0.75 0,1c0,0.25 0,0.5 0,0.75l0,0.25l0,0.25l0,0.25" id="svg_10" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="65" stroke="#bf0000" fill="none"/>
+ </g>
+</svg>
diff --git a/client/public/images/pieces/Check3/wk_2.svg b/client/public/images/pieces/Check3/wk_2.svg
new file mode 100644 (file)
index 0000000..25c8d51
--- /dev/null
@@ -0,0 +1,15 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <path id="svg_1" fill="#000" transform="translate(0,2048) scale(1,-1) " fill-rule="nonzero" d="m524,583q190,48 504,48q308,0 497,-46l25,147q-201,53 -526,53q-327,0 -525,-54l25,-148zm-61,-61l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm1081,-117l-30,115q-198,44 -490,44q-291,0 -489,-44l-32,-116q191,56 522,56q329,0 519,-55zm26,-94q-193,78 -542,78q-362,0 -548,-80q176,-70 545,-70q176,0 321,19t224,53zm-581,542q-1,39 -3,77t-15,86q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q29,-37 74,-74t84,-67q175,63 538,68zm35,186q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm34,-186q172,-2 315,-20t224,-47q38,30 83,66t75,75q48,61 48,161q0,90 -43,150q-77,112 -234,112q-94,0 -193,-39q-87,-35 -132,-78q-84,-84 -124,-216q-14,-47 -16,-85t-3,-79zm1,706l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130z"/>
+  <g id="svg_2" fill="#fff" fill-rule="nonzero">
+   <path id="svg_3" d="m524,1465q190,-48 504,-48q308,0 497,46l25,-147q-201,-53 -526,-53q-327,0 -525,54l25,148z"/>
+   <path id="svg_4" d="m1544,1643l-30,-115q-198,-44 -490,-44q-291,0 -489,44l-32,116q191,-56 522,-56q329,0 519,55z"/>
+   <path id="svg_5" d="m1570,1737q-193,-78 -542,-78q-362,0 -548,80q176,70 545,70q176,0 321,-19t224,-53z"/>
+   <path id="svg_6" d="m989,1195q-1,-39 -3,-77t-15,-86q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q29,37 74,74t84,67q175,-63 538,-68z"/>
+   <path id="svg_7" d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z"/>
+   <path id="svg_8" d="m1058,1195q172,2 315,20t224,47q38,-30 83,-66t75,-75q48,-61 48,-161q0,-90 -43,-150q-77,-112 -234,-112q-94,0 -193,39q-87,35 -132,78q-84,84 -124,216q-14,47 -16,85t-3,79z"/>
+  </g>
+  <path stroke="#bf0000" d="m691.99994,1008.16716c1.14669,-2.61829 1.922,-2.86664 2.62996,-3.54302c0.59476,-0.56818 1.081,-1.43076 1.36981,-1.88222c0.62359,-0.97475 0.93018,-1.51172 1.69849,-2.54661c0.80876,-1.08932 1.28814,-1.60793 1.76032,-2.15418c0.48419,-0.56013 0.98765,-1.12818 1.49515,-1.71789c0.52002,-0.60425 1.57117,-1.88131 2.09343,-2.56386c0.54044,-0.7063 1.08717,-1.45722 1.6608,-2.24805c0.60721,-0.83715 1.24923,-1.73093 1.94486,-2.67856c0.74539,-1.01543 2.43759,-3.25595 3.40007,-4.48637c1.022,-1.30658 2.10897,-2.66604 3.24276,-4.07364c1.16647,-1.44814 2.36317,-2.91964 3.57413,-4.40839c1.21565,-1.49446 3.62197,-4.45582 4.79267,-5.90493c1.15067,-1.42427 2.28221,-2.83011 3.40841,-4.21312c1.11632,-1.37081 2.23225,-2.72891 3.36109,-4.06962c1.12942,-1.34136 3.44938,-4.00383 4.65148,-5.32612c1.21045,-1.3315 2.44536,-2.64963 3.69247,-3.95803c1.24435,-1.30548 2.49473,-2.59189 3.73979,-3.86234c1.23067,-1.25572 3.64451,-3.69561 4.81636,-4.87789c1.14951,-1.15964 2.28189,-2.2995 3.40841,-3.41593c1.11593,-1.10593 2.23277,-2.1979 3.36109,-3.27243c1.12993,-1.07608 3.45073,-3.20652 4.65238,-4.26411c1.21783,-1.07187 2.46937,-2.14068 3.74769,-3.21664c1.29899,-1.09334 2.62919,-2.19401 3.98436,-3.31226c1.37996,-1.13869 4.22199,-3.4786 5.67983,-4.68794c1.4807,-1.22828 2.97565,-2.47447 4.48146,-3.73077c1.51158,-1.26104 3.02227,-2.52325 4.52878,-3.77865c1.49515,-1.24593 4.43369,-3.68354 5.8679,-4.86641c1.40962,-1.16263 2.80107,-2.30592 4.16979,-3.44383c1.35671,-1.12792 2.70078,-2.25538 4.02776,-3.39602c1.32756,-1.14109 3.96131,-3.48658 5.27218,-4.69988c1.32268,-1.22426 2.64023,-2.47602 3.97254,-3.73077c1.3406,-1.2626 2.68986,-2.53019 4.06725,-3.77865c1.3824,-1.253 4.22295,-3.69568 5.6912,-4.8655c1.46683,-1.16866 2.95857,-2.29275 4.45385,-3.38804c1.47935,-1.08361 2.95459,-2.1279 4.40653,-3.14891c1.42002,-0.99856 4.14693,-2.90855 5.43655,-3.82646c1.2491,-0.88911 2.46064,-1.76045 3.66088,-2.59085c1.18085,-0.81697 2.3617,-1.60871 3.56624,-2.35172c1.20814,-0.74522 3.74807,-2.12855 5.09638,-2.76537c1.3833,-0.65336 2.82862,-1.26928 4.31182,-1.90525c1.52455,-0.65368 3.09521,-1.31898 4.69052,-2.04876c1.64154,-0.75093 5.00937,-2.45942 6.71955,-3.44649c1.75127,-1.01082 3.49426,-2.10299 5.24283,-3.22066c1.75191,-1.11981 3.47904,-2.25811 5.19551,-3.3641c1.68154,-1.08348 4.925,-3.09539 6.48808,-3.96867c1.49874,-0.83734 2.97238,-1.59145 4.42226,-2.27595c1.4145,-0.66776 2.82553,-1.27564 4.23291,-1.8455c1.40147,-0.56746 4.25538,-1.63368 5.71669,-2.16216c1.48776,-0.53801 3.0091,-1.07543 4.56428,-1.62227c1.59114,-0.55948 3.22298,-1.12889 4.89566,-1.71789c1.7182,-0.60503 5.2985,-1.88404 7.16483,-2.56211c1.91725,-0.69656 3.87951,-1.41616 5.88979,-2.1364c2.04939,-0.73426 4.13807,-1.46962 6.26849,-2.18428c2.15816,-0.72394 6.57162,-2.1052 8.82442,-2.73922c2.26731,-0.63811 4.5603,-1.23023 6.87603,-1.76577c2.32279,-0.53717 4.66329,-1.01815 7.01805,-1.43095c2.35483,-0.4128 7.08701,-1.04546 9.45596,-1.26532c2.36516,-0.21947 4.7336,-0.37018 7.10088,-0.51018c2.36664,-0.13994 4.73456,-0.25872 7.10088,-0.41455c2.36767,-0.15596 7.10345,-0.58511 9.46829,-0.89638c2.3728,-0.31231 4.74606,-0.69364 7.12849,-1.08419c2.39444,-0.39249 4.79877,-0.80536 7.2232,-1.17982c2.43932,-0.37673 7.38667,-1.01302 9.89958,-1.22854c2.52986,-0.21694 5.07865,-0.35798 7.6374,-0.45445c2.56279,-0.0966 5.12662,-0.14253 7.68472,-0.16738c2.54751,-0.02472 7.59008,-0.02394 10.07583,-0.02394c2.46205,0 4.90311,0 7.32574,0c2.40683,0 4.8005,0 7.18371,0c2.37531,0 7.11276,0 9.47831,0c2.35784,0 4.69976,0 7.01805,0c2.28683,0 4.53411,0 6.734,0c2.1448,0 6.23703,0 8.17084,0c1.86023,0 3.65215,0 5.38088,0c1.67095,0 3.28924,0 4.86015,0c1.52892,0 4.48146,0 5.91573,0c1.41309,0 2.81051,0 4.1974,0c1.38163,0 2.76312,0 4.15001,0c1.39742,0 4.24479,0 5.70308,0c1.47678,0 2.96397,0 4.45385,0c1.48462,0 2.95613,0 4.40646,0c1.42156,0 4.14616,0 5.43571,0c1.24217,0 2.44234,0 3.60566,0c1.13173,0 2.23726,0 3.3216,0c1.06868,0 3.1797,0 4.23169,0c1.05198,0 2.10397,0 3.15595,0c1.05198,0 2.10397,0 3.15595,0c1.05198,0 3.15595,-0.00136 4.20742,0.00045c1.0489,0.00175 2.09266,0.00603 3.12834,0.0279c1.0254,0.0216 2.03796,0.05735 3.0337,0.12359c0.97853,0.06507 2.87022,0.27715 3.77568,0.43667c0.88658,0.15615 1.74954,0.35104 2.59182,0.56999c0.83136,0.2161 1.64603,0.45938 2.44979,0.7135c0.79875,0.25256 2.3789,0.78518 3.16789,1.05091c0.78899,0.26573 1.57797,0.53146 2.36696,0.79719c0.78899,0.26573 1.57797,0.53146 2.36696,0.79719c0.78899,0.26573 2.36722,0.79641 3.15633,1.06337c0.79233,0.26806 1.59043,0.53996 2.39457,0.82508c0.81685,0.28967 1.64642,0.59387 2.48921,0.92077c0.86501,0.33553 2.65744,1.08264 3.5882,1.49959c0.95927,0.42973 1.93625,0.88859 2.93109,1.36718c1.01371,0.48773 2.03809,0.99395 3.07312,1.51068c1.04441,0.5214 3.14465,1.58133 4.19612,2.11428c1.0525,0.53353 2.10615,1.07024 3.15595,1.62227c1.05417,0.55429 2.10782,1.12318 3.15595,1.71796c1.05596,0.59925 3.16134,1.8769 4.20793,2.5625c1.0575,0.69267 2.10769,1.4181 3.15595,2.16436c1.05571,0.75158 2.10589,1.5245 3.15595,2.30787c1.05391,0.78616 3.15646,2.37891 4.20742,3.17674c1.04941,0.79654 2.09446,1.59178 3.12834,2.39156c1.0272,0.79466 2.04091,1.58976 3.0337,2.39156c0.98148,0.79264 2.87266,2.38604 3.77709,3.18965c0.89801,0.79796 1.78293,1.61565 2.67465,2.44735c0.91073,0.84941 1.84277,1.7308 2.81667,2.63867c1.01782,0.9488 3.24006,2.9766 4.46296,4.0617c1.28069,1.13648 2.61596,2.30177 3.97652,3.50365c1.37996,1.21894 2.76274,2.448 4.11855,3.6949c1.33732,1.22984 3.84657,3.65928 4.98022,4.85402c1.08909,1.14777 2.10358,2.29087 3.06914,3.41593c0.94193,1.09749 1.84418,2.19343 2.73783,3.27243c0.88761,1.07167 2.68466,3.20587 3.62325,4.26359c0.94797,1.06823 1.92187,2.12719 2.90335,3.18874c0.98405,1.06428 1.97362,2.12317 2.95087,3.18874c0.97236,1.06025 2.8629,3.18284 3.76438,4.25211c0.8939,1.06025 1.76276,2.134 2.61943,3.21664c0.85987,1.08659 1.7123,2.19226 2.57204,3.31233c0.87259,1.13687 2.66643,3.48003 3.59873,4.68742c0.9472,1.22666 1.90428,2.46039 2.84826,3.70294c0.93551,1.23146 1.84623,2.44884 2.70611,3.65513c0.83008,1.16431 2.29864,3.38103 2.89912,4.42967c0.56259,0.98253 1.04325,1.93847 1.43595,2.87384c0.37639,0.89638 0.67919,1.79068 0.91522,2.68252c0.23385,0.88373 0.54679,2.70516 0.6562,3.64935c0.11185,0.96567 0.19006,1.95508 0.28007,2.96155c0.09143,1.02282 0.18633,2.0603 0.32746,3.10505c0.1428,1.05649 0.56837,3.18225 0.87528,4.23965c0.31025,1.06888 0.68613,2.12758 1.07304,3.18874c0.38807,1.06467 0.79489,2.12245 1.16769,3.18874c0.37048,1.05967 1.00139,3.18375 1.21597,4.25211c0.21317,1.06155 0.35443,2.13582 0.44971,3.21664c0.09593,1.0886 0.14126,2.19297 0.16566,3.31233c0.02478,1.13765 0.02376,3.47971 0.02376,4.68788c0,1.22945 0,2.47479 0,3.73084c0,1.2613 0,2.52267 0,3.77865c0,1.24541 0,3.68302 0,4.86726c0,1.16834 0,2.33135 0,3.49962c0,1.1843 0,2.39512 0,3.64319c0,1.29582 0.00257,4.07357 -0.0009,5.57232c-0.0036,1.56245 -0.01258,3.17304 -0.05522,4.81497c-0.04315,1.65847 -0.11352,3.31778 -0.24463,4.95853c-0.1288,1.61195 -0.54641,4.67788 -0.86398,6.09443c-0.30447,1.35797 -0.68523,2.64444 -1.10065,3.87038c-0.4031,1.18955 -0.84909,2.32895 -1.28994,3.43981c-0.43225,1.08932 -1.27568,3.22124 -1.64847,4.28753c-0.37048,1.05967 -0.70911,2.12505 -1.04158,3.18874c-0.33195,1.06214 -0.65441,2.12738 -0.99407,3.18874c-0.34069,1.06447 -1.07754,3.19322 -1.49643,4.25166c-0.42249,1.06758 -0.8835,2.13089 -1.38073,3.18874c-0.50211,1.06817 -1.04197,2.13134 -1.6174,3.18874c-0.5816,1.06862 -1.84649,3.19374 -2.5244,4.25211c-0.68613,1.07109 -1.4059,2.13932 -2.1421,3.21664c-0.74622,1.09185 -1.513,2.192 -2.28413,3.31226c-0.78231,1.13661 -2.36015,3.4764 -3.14452,4.68878c-0.79733,1.23237 -1.59159,2.49652 -2.39457,3.78663c-0.81788,1.31398 -1.64385,2.6578 -2.48921,4.02589c-0.86231,1.39559 -2.65384,4.26567 -3.5882,5.74054c-0.95554,1.50835 -1.93972,3.04913 -2.93109,4.63961c-1.01718,1.63187 -2.0481,3.31693 -3.07312,5.07012c-1.05468,1.80392 -3.15877,5.63635 -4.1956,7.67511c-1.06405,2.09235 -2.10384,4.25334 -3.12834,6.46519c-1.0367,2.23819 -2.04605,4.50999 -3.0337,6.79995c-0.98662,2.28763 -2.87151,6.8464 -3.77787,9.09679c-0.90302,2.24221 -1.79859,4.50558 -2.72986,6.80008c-0.95695,2.35756 -1.96502,4.7957 -3.06131,7.32609c-1.15433,2.66416 -3.80316,8.43389 -5.32695,11.56762c-1.59993,3.29034 -3.30311,6.66696 -5.07718,10.08834c-1.78421,3.44085 -3.59372,6.83563 -5.40849,10.13622c-1.75198,3.18641 -5.07975,8.97742 -6.62921,11.49457c-1.42259,2.31111 -2.79523,4.41514 -4.13833,6.34154c-1.27311,1.8261 -2.55714,3.54283 -3.85414,5.19364c-1.29456,1.64783 -4.06462,4.98072 -5.55013,6.74247c-1.54073,1.82727 -3.12847,3.69295 -4.73777,5.58432c-1.61419,1.89708 -3.21784,3.77859 -4.78529,5.63207c-1.52173,1.79938 -4.33968,5.17418 -5.60047,6.72119c-1.17937,1.4471 -2.27745,2.82129 -3.3216,4.12541c-1.0019,1.25131 -1.97285,2.46642 -2.94291,3.64715c-0.96569,1.17541 -2.984,3.53323 -4.06731,4.73614c-1.11516,1.23834 -2.27848,2.48783 -3.46748,3.75873c-1.20685,1.28985 -2.43284,2.58735 -3.65703,3.90224c-1.22688,1.31761 -3.6393,3.96854 -4.80404,5.30211c-1.15317,1.32021 -2.27514,2.64405 -3.3808,3.95803c-1.09385,1.29997 -2.1683,2.59189 -3.23878,3.8624c-1.05802,1.25572 -3.1625,3.6997 -4.21974,4.87835c-1.04672,1.16684 -2.10268,2.30955 -3.15595,3.44383c-1.0507,1.13155 -2.10653,2.25791 -3.15595,3.39595c-1.05468,1.14375 -3.16108,3.48717 -4.20844,4.70033c-1.0602,1.22796 -2.11616,2.48562 -3.18356,3.75873c-1.07946,1.28764 -2.16727,2.59293 -3.2782,3.90224c-1.12261,1.32319 -3.43692,3.98061 -4.64056,5.30263c-1.21571,1.33526 -2.46546,2.6639 -3.74769,3.98593c-1.2952,1.33539 -2.62366,2.6639 -3.98436,3.98593c-1.37443,1.33539 -4.21769,3.98982 -5.67945,5.31496c-1.47319,1.33565 -2.96769,2.66455 -4.45385,4.01382c-1.48847,1.35135 -2.96756,2.71243 -4.40646,4.10945c-1.43299,1.39144 -4.16273,4.26229 -5.43661,5.7504c-1.26502,1.47773 -2.467,2.99321 -3.66088,4.50013c-1.18708,1.49849 -2.35707,2.99788 -3.56624,4.45225c-1.20351,1.44762 -3.73446,4.21169 -5.09503,5.49259c-1.36095,1.28115 -2.78765,2.48822 -4.22899,3.67102c-1.43749,1.17956 -2.89424,2.32188 -4.32363,3.47977c-1.41797,1.14868 -4.15156,3.48522 -5.42428,4.71266c-1.26258,1.21771 -2.46597,2.48666 -3.63327,3.78663c-1.17102,1.30412 -2.30956,2.65248 -3.44398,4.02589c-1.14842,1.39027 -3.46594,4.26632 -4.66509,5.74054c-1.2274,1.509 -2.49268,3.05432 -3.80291,4.63961c-1.35299,1.63706 -2.76056,3.32576 -4.22899,5.07012c-1.52609,1.81287 -4.79659,5.64452 -6.54375,7.67602c-1.81195,2.10675 -3.68419,4.27605 -5.58211,6.52099c-1.93754,2.29178 -3.88895,4.63675 -5.81878,7.04712c-1.94518,2.42944 -5.72343,7.41302 -7.51509,9.96702c-1.78517,2.54479 -3.49387,5.12916 -5.12841,7.74466c-1.62658,2.60279 -3.17759,5.23477 -4.65501,7.88816c-1.46811,2.63665 -4.19669,7.95252 -5.47161,10.61448c-1.26027,2.63146 -2.4503,5.24723 -3.63333,7.80448c-1.15504,2.49678 -2.27989,4.92285 -3.44392,7.23046c-1.11985,2.22016 -3.42639,6.255 -4.66336,8.00948c-1.17815,1.67105 -2.42642,3.18394 -3.6924,4.57979c-1.2265,1.35239 -2.49197,2.60201 -3.73985,3.81453c-1.22791,1.19318 -3.65709,3.53972 -4.81585,4.76015c-1.15921,1.22082 -2.2815,2.47888 -3.3808,3.75873c-1.10027,1.28102 -2.17485,2.58644 -3.23878,3.90224c-1.06463,1.31671 -3.16763,3.97412 -4.21846,5.30082c-1.04261,1.31632 -2.0691,2.61174 -3.07312,3.87434c-0.97108,1.22108 -1.90267,2.38909 -2.78906,3.49158c-0.82841,1.03035 -2.28895,2.82466 -2.91221,3.56878c-0.5518,0.65874 -1.05307,1.24132 -1.51884,1.76175c-0.43302,0.48384 -0.85711,0.93732 -1.2821,1.37912c-0.43405,0.45114 -1.39986,1.42764 -1.95231,1.98414c-0.60118,0.60567 -1.24872,1.25481 -1.94486,1.93717c-0.73358,0.71908 -1.50741,1.46397 -2.32356,2.22418c-0.84241,0.78473 -2.62694,2.37287 -3.56405,3.16487c-0.94944,0.80238 -1.92232,1.59567 -2.90342,2.39156c-0.98437,0.79848 -1.97279,1.59178 -2.9508,2.39156c-0.97166,0.79459 -2.86143,2.38546 -3.76438,3.18913c-0.89243,0.79433 -1.76238,1.60177 -2.61943,2.41945c-0.85949,0.82002 -1.71326,1.65964 -2.5721,2.51508c-0.87342,0.86998 -2.66611,2.68323 -3.60039,3.62548c-0.95933,0.96742 -1.9437,1.95741 -2.9587,2.96155c-1.03625,1.02516 -2.09979,2.06303 -3.19544,3.10505c-1.11349,1.05902 -3.42678,3.1829 -4.6274,4.23881c-1.20846,1.06278 -2.4338,2.10779 -3.6648,3.13295c-1.21751,1.01387 -2.42667,1.99556 -3.61754,2.94157c-1.1551,0.91759 -3.35403,2.61096 -4.38367,3.37831c-0.97635,0.72764 -1.91417,1.40805 -2.81674,2.04876c-0.86655,0.61515 -1.71005,1.19928 -2.53262,1.76175c-0.80446,0.55001 -2.3913,1.61747 -3.17964,2.15022c-0.78963,0.53366 -1.58041,1.07083 -2.36696,1.62227c-0.79149,0.55481 -1.58234,1.12429 -2.36696,1.71789c-0.79348,0.60035 -2.37274,1.87865 -3.15595,2.56257c-0.79489,0.69416 -1.58183,1.41921 -2.36696,2.16436c-0.7929,0.75268 -1.5799,1.52508 -2.36696,2.30787c-0.79098,0.78668 -2.36632,2.38027 -3.1555,3.1759c-0.78526,0.79161 -1.56378,1.57413 -2.33935,2.33576c-0.75952,0.74593 -1.50619,1.46527 -2.24464,2.14438c-0.71001,0.6529 -2.07212,1.81871 -2.72331,2.31539c-0.61171,0.46658 -1.20634,0.87867 -1.77522,1.25157c-0.53594,0.35136 -1.05205,0.66601 -1.53855,0.96456c-0.46031,0.28247 -1.30586,0.81535 -1.6836,1.08692c-0.362,0.26028 -0.69852,0.52743 -1.01384,0.79719c-0.30614,0.26184 -0.5945,0.52951 -0.87182,0.79719c-0.2732,0.26378 -0.80087,0.79719 -1.06386,1.06291c-0.263,0.26573 -0.52599,0.53146 -0.78899,0.79719c-0.263,0.26573 -0.52599,0.53146 -0.78899,0.79719c-0.263,0.26573 -0.7877,0.79848 -1.05243,1.06239c-0.26473,0.26391 -0.53254,0.52549 -0.8166,0.76929c-0.28495,0.24445 -0.5859,0.47489 -0.91124,0.67366c-0.33067,0.20202 -1.07362,0.51822 -1.48333,0.62669c-0.42165,0.11159 -0.85968,0.18463 -1.29783,0.25509c-0.43231,0.06955 -0.85364,0.12638 -1.25058,0.20721c-0.37112,0.07564 -1.00325,0.28311 -1.22817,0.44868c-0.20688,0.15233 -0.36091,0.35396 -0.47732,0.56999c-0.11814,0.21941 -0.20001,0.46412 -0.28804,0.7135c-0.09085,0.25729 -0.30146,0.79122 -0.45626,1.05046c-0.16071,0.2691 -0.35886,0.52886 -0.59174,0.76929c-0.24052,0.24834 -0.51797,0.47644 -0.82847,0.67366c-0.32098,0.20397 -1.06168,0.51848 -1.4719,0.62669c-0.42461,0.11197 -0.87092,0.18541 -1.32544,0.25509c-0.45896,0.07032 -0.91978,0.12845 -1.37283,0.20721c-0.4447,0.07733 -1.28377,0.28869 -1.66042,0.44868c-0.36714,0.15596 -0.71078,0.3537 -1.04145,0.56999c-0.33407,0.21863 -0.65922,0.46412 -0.99413,0.7135c-0.34537,0.25729 -1.08543,0.79057 -1.49598,1.05098c-0.4275,0.27131 -0.881,0.53483 -1.35312,0.79719c-0.48426,0.2691 -0.98456,0.53301 -1.49515,0.79719c-0.51681,0.26742 -1.56642,0.79667 -2.0917,1.06291c-0.52317,0.26521 -1.04171,0.52925 -1.55036,0.79719c-0.50037,0.26352 -0.98765,0.52743 -1.45566,0.79719c-0.45414,0.26184 -1.29469,0.79044 -1.67178,1.0633c-0.36271,0.26248 -0.70134,0.536 -1.01384,0.82508c-0.30916,0.28597 -0.59938,0.59296 -0.87182,0.92071c-0.27834,0.33476 -0.80517,1.08549 -1.06431,1.49965c-0.27057,0.43246 -0.53697,0.89216 -0.8166,1.36718c-0.28926,0.49136 -0.58782,0.99856 -0.91124,1.51068c-0.33228,0.52614 -1.07054,1.58749 -1.48378,2.11389c-0.42127,0.53665 -0.86982,1.06421 -1.32544,1.59437c-0.45787,0.53275 -0.92177,1.06032 -1.37283,1.59437c-0.44663,0.52886 -1.28557,1.58905 -1.65997,2.12531c-0.36534,0.52328 -0.69858,1.04916 -1.01384,1.56647c-0.30621,0.50239 -0.59142,0.99635 -0.87182,1.47085c-0.27019,0.45724 -0.79515,1.30736 -1.06386,1.68909c-0.25754,0.3659 -0.52207,0.70584 -0.78899,1.02438c-0.25921,0.30932 -0.524,0.60074 -0.78899,0.88087c-0.26107,0.27611 -0.78963,0.8086 -1.05153,1.07498c-0.26056,0.26508 -0.51745,0.52873 -0.76138,0.79719c-0.23911,0.26313 -0.46525,0.52679 -0.66667,0.79719c-0.19474,0.26145 -0.50962,0.79342 -0.62025,1.06239c-0.10659,0.25924 -0.18164,0.51965 -0.25247,0.76929c-0.06768,0.23848 -0.12527,0.4671 -0.20514,0.67366c-0.07499,0.19398 -0.29099,0.51783 -0.44361,0.62669c-0.15667,0.11171 -0.34422,0.18554 -0.53646,0.25509c-0.19532,0.07058 -0.39533,0.12806 -0.58384,0.20721c-0.18331,0.07707 -0.50121,0.29375 -0.60843,0.44868c-0.1114,0.16102 -0.18505,0.35889 -0.25247,0.56999c-0.07146,0.22382 -0.12964,0.46515 -0.20514,0.7135c-0.07865,0.25846 -0.29208,0.78966 -0.44361,1.05098c-0.15692,0.27053 -0.34364,0.53275 -0.53646,0.79719c-0.19468,0.26703 -0.39629,0.52886 -0.58384,0.79719c-0.18408,0.26326 -0.4978,0.79342 -0.60843,1.06239c-0.10659,0.25924 -0.18164,0.51965 -0.25247,0.76929c-0.06768,0.23848 -0.12527,0.4671 -0.20514,0.67366c-0.07499,0.19398 -0.29125,0.51744 -0.444,0.62708c-0.15988,0.11483 -0.35655,0.1945 -0.56413,0.28299c-0.22287,0.09498 -0.46429,0.19281 -0.70616,0.33086c-0.2603,0.14856 -0.78828,0.58401 -1.03972,0.8849c-0.27237,0.32593 -0.52291,0.70441 -0.76138,1.11209c-0.24489,0.4187 -0.46653,0.85752 -0.66667,1.30334c-0.19603,0.43661 -0.50737,1.27752 -0.62025,1.66483c-0.10408,0.35707 -0.18004,0.69105 -0.25247,0.99648c-0.0662,0.27909 -0.12386,0.5347 -0.20514,0.75735c-0.07397,0.20267 -0.29099,0.52977 -0.44361,0.63863c-0.15667,0.11171 -0.34422,0.18554 -0.53646,0.25509c-0.19532,0.07058 -0.39533,0.12806 -0.58384,0.20721c-0.18331,0.07707 -0.50076,0.29401 -0.60843,0.44816c-0.11069,0.15843 -0.1837,0.34786 -0.25247,0.5421c-0.06986,0.19735 -0.12675,0.3995 -0.20514,0.58997c-0.07621,0.18515 -0.29099,0.5059 -0.44361,0.61476c-0.15667,0.11171 -0.34422,0.18554 -0.53646,0.25509c-0.19532,0.07058 -0.39533,0.12806 -0.58384,0.20721c-0.18331,0.07707 -0.50256,0.29285 -0.60754,0.44816c-0.10652,0.15765 -0.17092,0.34682 -0.19725,0.5421c-0.02652,0.19709 -0.0138,0.40028 0.03942,0.58997c0.05246,0.18684 0.2664,0.50732 0.42037,0.61424c0.15904,0.11042 0.35462,0.17996 0.56413,0.22719c0.2212,0.04982 0.45909,0.07136 0.70616,0.08369c0.25446,0.01259 0.77711,0.01207 1.0401,0.01207c0.263,0 0.52599,0 0.78899,0c0.263,0 0.52599,0 0.78899,0c0.263,0 0.78899,0 1.05243,0c0.26608,0 0.53742,0 0.8166,0c0.28977,0 0.59264,0 0.9113,0c0.33709,0 1.07696,-0.0013 1.48462,0.00039c0.43392,0.00182 0.89435,0.00688 1.38073,0.0279c0.51309,0.02206 1.05275,0.05981 1.6174,0.12352c0.5927,0.06695 1.85574,0.2835 2.52433,0.43622c0.69569,0.15881 1.40891,0.34838 2.1421,0.5421c0.74924,0.19787 1.50991,0.40274 2.28413,0.58997c0.77923,0.1884 2.35341,0.50629 3.14497,0.61424c0.79361,0.10821 1.60025,0.17944 2.42218,0.22719c0.84202,0.04892 1.71114,0.07149 2.61153,0.08369c0.93711,0.01272 2.94297,0.01207 4.02166,0.01207c1.13398,0 2.32574,0 3.57805,0c1.31543,0 2.6966,0 4.14616,0c1.52051,0 4.78516,0 6.53277,0c1.81863,0 3.70037,0 5.63733,0c1.98428,0 4.00805,0 6.06335,0c2.07899,0 6.27639,-0.0013 8.3808,0.00039c2.10705,0.00182 4.21942,0.00636 6.3395,0.0279c2.1308,0.02167 4.27483,0.05839 6.43421,0.12352c2.17832,0.06578 6.60051,0.2813 8.84804,0.43622c2.27258,0.15674 4.56493,0.34695 6.87603,0.5421c2.32728,0.19644 4.66682,0.40249 7.01805,0.58997c2.35816,0.18801 7.08843,0.50616 9.45596,0.61424c2.36645,0.10808 4.73373,0.17893 7.10088,0.22719c2.36683,0.04827 4.73392,0.07123 7.10088,0.08369c2.36696,0.01233 7.10088,0.00934 9.46656,0.01285c2.35771,0.0035 4.69989,0.01207 7.01805,0.05579c2.28696,0.04321 4.53513,0.11418 6.734,0.24717c2.14602,0.12975 6.24107,0.55481 8.17084,0.87244c1.86466,0.30686 3.65465,0.68638 5.38088,1.08419c1.67345,0.38562 3.28789,0.79887 4.86015,1.17982c1.52763,0.37005 4.47805,1.01036 5.91522,1.2286c1.40705,0.21357 2.79799,0.35733 4.16979,0.45439c1.35389,0.09576 2.69635,0.1426 4.02776,0.16738c1.3232,0.02465 3.95675,0.024 5.27263,0.024c1.32108,0 2.65275,0 4.00015,0c1.36846,0 2.76319,0 4.1895,0c1.46317,0 4.52094,0 6.12698,0c1.66908,0 3.41188,0 5.23885,0c1.92161,0 3.9484,0 6.09096,0c2.26879,0 7.22711,0 9.93117,0c2.83292,0 5.76574,0 8.76958,0c3.04596,0 6.10502,0 9.14828,0c2.99864,0 8.74595,0 11.44423,0c2.5827,0 5.06536,0 7.46391,0c2.33011,0 4.60769,0 6.84842,0c2.21967,0 6.659,-0.00272 8.9059,0.00078c2.26256,0.0035 4.53064,0.0122 6.7932,0.05579c2.24702,0.04334 4.46849,0.11444 6.65104,0.24717c2.13774,0.13001 6.22945,0.55481 8.15903,0.87244c1.8646,0.30699 3.65471,0.68638 5.38088,1.08419c1.67352,0.38562 3.28796,0.799 4.86015,1.17982c1.52776,0.37005 4.47799,1.01062 5.91573,1.2286c1.41001,0.21383 2.80935,0.35759 4.1974,0.45439c1.3806,0.09627 2.763,0.1426 4.15001,0.16738c1.39729,0.02491 4.24479,0.024 5.70308,0.024c1.47678,0 2.96397,0 4.45385,0c1.48462,0 2.95613,0 4.40646,0c1.42156,0 4.14616,0 5.43571,0c1.24217,0 2.44234,0 3.60566,0c1.13173,0 2.23726,0 3.3216,0c1.06868,0 3.1797,-0.00272 4.23246,0.00078c1.05815,0.0035 2.12721,0.01298 3.21129,0.05579c1.10592,0.04373 2.2388,0.11859 3.40045,0.24717c1.2021,0.13312 3.7351,0.5674 5.07281,0.87244c1.39421,0.31789 2.82887,0.69819 4.31182,1.08419c1.52494,0.39704 3.08609,0.80731 4.69052,1.17982c1.63229,0.37887 4.99499,1.01361 6.72077,1.2286c1.74607,0.21759 3.52335,0.35837 5.32566,0.45439c1.8271,0.09731 3.68181,0.14273 5.56246,0.16738c1.90659,0.02504 5.799,0.02271 7.78418,0.02439c2.00881,0.00182 4.03868,0.00636 6.08704,0.0279c2.06403,0.02167 4.14154,0.05813 6.22907,0.12352c2.09587,0.06565 6.30085,0.28013 8.40315,0.43622c2.09857,0.15583 4.18546,0.34527 6.25668,0.5421c2.0508,0.19488 4.07425,0.40054 6.06726,0.58997c1.95539,0.18593 5.73531,0.50486 7.55149,0.61424c1.76752,0.10652 3.49407,0.17854 5.18363,0.22719c1.65759,0.04775 3.28924,0.07123 4.89958,0.08369c1.59467,0.01233 4.75768,0.01207 6.33565,0.01207c1.57797,0 3.15595,0 4.73392,0c1.57797,0 3.15595,0 4.73392,0c1.57797,0 4.73392,0 6.31048,0c1.56886,0 3.12179,0 4.65109,0c1.49784,0 2.95613,0 4.36704,0c1.35581,0 3.87007,0 5.01541,0c1.07433,0 2.08547,0 3.04153,0c0.90867,0 1.77779,0 2.61545,0c0.81403,0 2.40253,0 3.19152,0c0.78899,0 1.57797,0 2.36696,0c0.78899,0 1.57797,0 2.36696,0c0.78899,0 2.36696,0 3.15595,0c0.78899,0 1.57797,0 2.36696,0c0.78899,0 1.57797,0 2.36696,0c0.78899,0 2.36696,0 3.15543,0c0.7859,0 1.56654,0 2.33935,0c0.76228,0 1.51133,0 2.24471,0c0.71489,0 2.07892,0.0013 2.7237,-0.00052c0.62115,-0.00182 1.22136,-0.00584 1.80283,-0.0279c0.56619,-0.02141 1.11966,-0.05761 1.6608,-0.12352c0.53562,-0.06526 1.59313,-0.27974 2.11539,-0.43674c0.52638,-0.1583 1.04415,-0.35175 1.55036,-0.56999c0.503,-0.21681 0.98906,-0.45698 1.45572,-0.7135c0.45562,-0.25042 1.29289,-0.78084 1.67223,-1.05046c0.36393,-0.25859 0.70487,-0.52211 1.04145,-0.76929c0.3281,-0.24095 0.65364,-0.47333 0.99407,-0.67366c0.34017,-0.2002 1.08511,-0.51965 1.49553,-0.62617c0.42454,-0.11016 0.87053,-0.17906 1.32551,-0.22719c0.4587,-0.04853 0.91869,-0.07123 1.37289,-0.08369c0.44342,-0.0122 1.27812,-0.01051 1.6599,-0.01246c0.35815,-0.00182 0.69563,-0.00558 1.01384,-0.0279c0.30332,-0.02128 0.59469,-0.05748 0.87182,-0.12352c0.27378,-0.06526 0.8053,-0.28311 1.06393,-0.43622c0.26788,-0.15855 0.52728,-0.34734 0.78899,-0.5421c0.26428,-0.1967 0.52342,-0.40041 0.78899,-0.58997c0.26056,-0.18593 0.78526,-0.50304 1.05147,-0.61476c0.25657,-0.10769 0.51418,-0.1836 0.76138,-0.25509c0.23603,-0.06825 0.4623,-0.12651 0.66674,-0.20721c0.19198,-0.07577 0.51251,-0.29401 0.62025,-0.44816c0.11069,-0.15843 0.18363,-0.34786 0.25247,-0.5421c0.06986,-0.19722 0.12662,-0.3995 0.20508,-0.58997c0.07628,-0.18515 0.29009,-0.50732 0.44406,-0.61424c0.15898,-0.11042 0.35456,-0.17996 0.56413,-0.22719c0.22113,-0.04982 0.45909,-0.07136 0.70616,-0.08369c0.25452,-0.01259 0.77717,-0.01194 1.04017,-0.01194c0.263,0 0.52599,0 0.78899,0c0.263,0 0.52599,0 0.78899,0c0.263,0 0.78899,0 1.05198,0c0.263,0 0.52599,0 0.78899,0c0.263,0 0.52599,0 0.78899,0c0.263,0 0.78899,0.0013 1.05147,-0.00052c0.25991,-0.00182 0.51508,-0.00571 0.76138,-0.0279c0.2368,-0.02141 0.46281,-0.05566 0.66674,-0.12352c0.19275,-0.0641 0.51251,-0.28208 0.62025,-0.43622c0.11069,-0.15843 0.18363,-0.34786 0.25247,-0.5421c0.06986,-0.19722 0.13317,-0.39691 0.20508,-0.58997l0.08244,-0.18243" id="svg_12" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="65" fill="none"/>
+ </g>
+</svg>
diff --git a/client/public/images/pieces/Check3/wk_3.svg b/client/public/images/pieces/Check3/wk_3.svg
new file mode 100644 (file)
index 0000000..198c27c
--- /dev/null
@@ -0,0 +1,15 @@
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+  <title>Layer 1</title>
+  <path id="svg_1" fill="#000" transform="translate(0,2048) scale(1,-1) " fill-rule="nonzero" d="m524,583q190,48 504,48q308,0 497,-46l25,147q-201,53 -526,53q-327,0 -525,-54l25,-148zm-61,-61l-33,187q-1,0 -3,4q-5,7 -28,18t-55,40q-44,37 -68,60t-45,50q-61,84 -68,203q-10,115 93,229q104,114 281,107q66,-4 155,-32q29,-12 59,-23t61,-24q16,-8 28,-16q-5,21 -5,42q0,78 55,133t134,56q78,0 133,-55t55,-133q0,-16 -4,-42q14,9 27,15q46,20 121,47q86,29 155,33q177,8 280,-107q101,-114 94,-229q-8,-119 -69,-203q-20,-27 -45,-50t-67,-60q-33,-28 -56,-39t-27,-19q-1,-2 -2,-3t-1,-2l-32,-188l66,-247q-50,-45 -224,-74t-402,-29q-232,0 -408,30t-221,77l66,244zm1081,-117l-30,115q-198,44 -490,44q-291,0 -489,-44l-32,-116q191,56 522,56q329,0 519,-55zm26,-94q-193,78 -542,78q-362,0 -548,-80q176,-70 545,-70q176,0 321,19t224,53zm-581,542q-1,39 -3,77t-15,86q-41,134 -124,216q-43,42 -132,78q-102,40 -193,40q-158,0 -234,-113q-43,-60 -43,-150q0,-98 48,-161q29,-37 74,-74t84,-67q175,63 538,68zm35,186q7,28 12,39q10,39 23,66q6,17 17,39t25,52q8,17 17,41t18,49q8,20 8,43q0,49 -35,83t-85,35q-119,0 -119,-119q0,-23 8,-43q22,-65 34,-90q13,-29 24,-51t19,-40q13,-33 22,-66q2,-6 12,-38zm34,-186q172,-2 315,-20t224,-47q38,30 83,66t75,75q48,61 48,161q0,90 -43,150q-77,112 -234,112q-94,0 -193,-39q-87,-35 -132,-78q-84,-84 -124,-216q-14,-47 -16,-85t-3,-79zm1,706l-71,0l0,131l-83,0q-34,0 -34,33l0,1q0,33 34,33l83,0l0,85q0,35 36,35q35,0 35,-35l0,-85l86,0q33,0 33,-33l0,-1q0,-33 -33,-33l-85,-1l-1,-130z"/>
+  <g id="svg_2" fill="#fff" fill-rule="nonzero">
+   <path id="svg_3" d="m524,1465q190,-48 504,-48q308,0 497,46l25,-147q-201,-53 -526,-53q-327,0 -525,54l25,148z"/>
+   <path id="svg_4" d="m1544,1643l-30,-115q-198,-44 -490,-44q-291,0 -489,44l-32,116q191,-56 522,-56q329,0 519,55z"/>
+   <path id="svg_5" d="m1570,1737q-193,-78 -542,-78q-362,0 -548,80q176,70 545,70q176,0 321,-19t224,-53z"/>
+   <path id="svg_6" d="m989,1195q-1,-39 -3,-77t-15,-86q-41,-134 -124,-216q-43,-42 -132,-78q-102,-40 -193,-40q-158,0 -234,113q-43,60 -43,150q0,98 48,161q29,37 74,74t84,67q175,-63 538,-68z"/>
+   <path id="svg_7" d="m1024,1009q7,-28 12,-39q10,-39 23,-66q6,-17 17,-39t25,-52q8,-17 17,-41t18,-49q8,-20 8,-43q0,-49 -35,-83t-85,-35q-119,0 -119,119q0,23 8,43q22,65 34,90q13,29 24,51t19,40q13,33 22,66q2,6 12,38z"/>
+   <path id="svg_8" d="m1058,1195q172,2 315,20t224,47q38,-30 83,-66t75,-75q48,-61 48,-161q0,-90 -43,-150q-77,-112 -234,-112q-94,0 -193,39q-87,35 -132,78q-84,84 -124,216q-14,47 -16,85t-3,79z"/>
+  </g>
+  <path d="m706.99994,1034.49994c3,-3.00665 3.52655,-3.53302 4,-4.17999c0.5307,-0.72516 1.0094,-1.64893 1.25085,-2.17834c0.54297,-1.19049 0.80084,-1.87567 1.10333,-2.59998c0.32404,-0.77576 0.67065,-1.60498 1.07251,-2.47498c0.88275,-1.91125 1.42535,-2.92853 2.0033,-4.00336c0.61096,-1.13629 1.27576,-2.32385 1.97626,-3.57373c0.73615,-1.31348 1.51471,-2.68781 2.31378,-4.13629c1.70844,-3.09686 2.58765,-4.76312 3.49664,-6.49664c0.9411,-1.7948 1.90033,-3.65314 2.88751,-5.565c1.01282,-1.96149 2.04553,-3.97064 3.11249,-6.01501c2.19092,-4.19806 3.33307,-6.33319 4.5,-8.49335c1.18298,-2.18994 2.39581,-4.40228 3.63751,-6.63745c1.25824,-2.26489 2.54395,-4.55347 3.86249,-6.86255c2.68774,-4.70697 4.07739,-7.09344 5.51001,-9.49329c1.44977,-2.42859 2.94818,-4.86749 4.53375,-7.29004c1.60425,-2.45117 3.27515,-4.90375 5.09625,-7.28998c3.71478,-4.86749 5.83325,-7.17987 7.99664,-9.5c2.19318,-2.35205 4.49457,-4.65906 6.85504,-6.96002c2.38611,-2.32593 4.83704,-4.63129 7.30499,-6.95996c4.98737,-4.70587 7.49207,-7.08899 9.98999,-9.50671c2.513,-2.43231 5.02649,-4.89673 7.54877,-7.38745c2.54108,-2.50928 5.09241,-5.04846 7.66125,-7.61255c5.20648,-5.19678 7.8371,-7.83997 10.5033,-10.48999c2.68378,-2.66748 5.39087,-5.33942 8.13751,-7.99121c2.75336,-2.65826 5.52734,-5.30219 8.36249,-7.87878c5.65533,-5.13959 8.56757,-7.58691 11.49335,-9.97998c2.90289,-2.37439 5.83215,-4.65857 8.78998,-6.82874c2.91614,-2.13959 5.83276,-4.18292 8.79004,-6.04126c5.7265,-3.59857 8.63684,-5.09369 11.5,-6.50336c2.80945,-1.38318 5.63348,-2.62573 8.45996,-3.75751c2.80066,-1.12146 5.62103,-2.14514 8.46002,-3.08246c5.68597,-1.87726 8.5882,-2.69324 11.5,-3.50671c2.91669,-0.81488 5.84766,-1.57703 8.78998,-2.26495c2.93127,-0.68536 5.85999,-1.31512 8.79004,-1.815c5.77832,-0.98584 8.6532,-1.26099 11.49329,-1.50336c2.81018,-0.23981 5.59937,-0.38837 8.36255,-0.48376c2.73694,-0.09448 5.44989,-0.13184 8.13745,-0.14624c5.29999,-0.02844 7.91553,-0.01825 10.52338,0.00336c2.61804,0.02167 5.26428,0.07013 7.95374,0.19501c2.75415,0.12793 5.59106,0.31329 8.51624,0.64496c6.23633,0.70703 9.55072,1.33197 12.9967,2.00336c3.56787,0.69513 7.21893,1.50635 10.935,2.40375c3.77753,0.91223 7.58142,1.89813 11.38495,2.96625c7.59003,2.13153 11.30487,3.31104 14.98334,4.48999c3.65405,1.17114 7.27454,2.3869 10.87128,3.63751c3.59332,1.24945 7.17743,2.53662 10.75873,3.86249c7.22003,2.67303 10.84833,4.08264 14.50336,5.49335c3.67322,1.41766 7.35327,2.85327 11.04004,4.28998c3.68665,1.43665 7.36572,2.87506 11.03992,4.29004c7.28821,2.8067 10.90918,4.15106 14.4967,5.51666c3.57336,1.36023 7.13513,2.73444 10.66125,4.20374c3.5376,1.47406 7.07678,3.0127 10.54871,4.76624c7.07983,3.57581 10.5332,5.74896 13.9967,8.01001c3.51599,2.29529 6.98169,4.76904 10.40247,7.38c3.45325,2.63574 6.8562,5.39252 10.17749,8.27997c6.67053,5.79913 9.84009,8.8877 12.98999,11.97668c3.1394,3.07874 6.19641,6.21143 9.17627,9.37878c2.95679,3.14288 5.83484,6.30487 8.61377,9.49121c5.44739,6.24615 8.0022,9.38837 10.4967,12.49335c2.45532,3.05621 4.82129,6.10742 7.08752,9.16125c2.23352,3.00983 4.38757,6.01538 6.41248,9.04877c3.97449,5.95422 5.76306,8.98816 7.5033,12c1.72046,2.97772 3.34558,5.96509 4.88623,8.95123c1.52246,2.95087 2.96863,5.89624 4.32373,8.83875c2.65808,5.77185 3.84729,8.65222 5.00342,11.50336c1.1438,2.82074 2.22217,5.63867 3.22498,8.45996c0.99719,2.80554 1.93787,5.62024 2.77502,8.46002c1.6759,5.68481 2.34985,8.58722 3,11.49664c0.6499,2.90833 1.22327,5.82593 1.72498,8.74127c0.49817,2.89484 0.93408,5.77319 1.27502,8.62872c0.66663,5.58246 0.84375,8.31219 1.00659,10.97668c0.15833,2.59229 0.25806,5.10638 0.32251,7.53003c0.06177,2.32306 0.08777,4.53656 0.09753,6.62994c0.0177,3.78674 0.01379,5.46594 -0.0033,7.02002c-0.01599,1.45435 -0.05029,2.83459 -0.14624,4.16248c-0.09436,1.30579 -0.23645,2.61462 -0.48376,3.9375c-0.53259,2.84888 -1.00256,4.38562 -1.5,6.00671c-0.51941,1.69275 -1.11353,3.41943 -1.76624,5.16003c-0.65735,1.75293 -1.35034,3.48523 -2.10376,5.15991c-1.43835,3.19702 -2.22205,4.63586 -2.99341,5.98999c-0.74036,1.2998 -1.51013,2.52551 -2.29871,3.69385c-0.77515,1.14832 -1.5824,2.2605 -2.41125,3.3562c-1.6864,2.22961 -2.58801,3.35596 -3.5033,4.51331c-0.93469,1.18188 -1.89575,2.38025 -2.88757,3.58875c-1.00806,1.22827 -2.04089,2.46704 -3.11243,3.70129c-2.18164,2.51282 -3.33093,3.75293 -4.5,4.9967c-1.18079,1.25635 -2.3938,2.50623 -3.63757,3.75c-1.25623,1.25623 -2.54114,2.50928 -3.86243,3.75c-2.68237,2.51892 -4.07959,3.75952 -5.50671,4.99658c-1.44458,1.2522 -2.9342,2.49255 -4.48499,3.70129c-1.57581,1.22827 -3.20923,2.44226 -4.93506,3.58875c-3.56152,2.36584 -5.50684,3.43054 -7.5,4.5c-2.03516,1.09204 -4.14636,2.13794 -6.31494,3.16125c-2.20471,1.04028 -4.46326,2.05237 -6.76501,3.04871c-4.68311,2.0271 -7.07886,3.0061 -9.48669,4.00342c-2.42053,1.00269 -4.85327,2 -7.28992,3c-2.43677,1 -4.87024,1.99561 -7.29004,3c-4.797,1.99121 -7.15686,2.99805 -9.4967,3.99658c-2.32104,0.9906 -4.62195,1.97974 -6.91125,2.95129c-2.27405,0.96509 -4.53577,1.92151 -6.79871,2.83875c-4.49341,1.82117 -6.75085,2.66663 -9.0033,3.5033c-2.24756,0.83496 -4.5,1.64673 -6.75,2.46008c-2.25,0.81323 -4.50403,1.62061 -6.75,2.45996c-4.5083,1.68469 -6.75183,2.58948 -9.00342,3.4967c-2.25928,0.91028 -4.52026,1.83752 -6.79871,2.74121c-2.28503,0.90637 -4.58008,1.80725 -6.91125,2.62878c-4.68262,1.65015 -7.08533,2.33862 -9.51001,2.99658c-2.44714,0.66406 -4.94287,1.26367 -7.48499,1.82251c-2.58459,0.56824 -5.22888,1.09644 -7.93506,1.59753c-5.60107,1.03723 -8.51599,1.51038 -11.48663,2.00671c-3.01434,0.50366 -6.06,1 -9.12,1.5c-3.06,0.5 -6.10602,0.99377 -9.12,1.5c-5.88208,0.98792 -8.71936,1.49414 -11.48663,2c-2.70441,0.49438 -5.3476,0.99524 -7.935,1.5c-2.53925,0.49536 -5.03271,0.995 -7.48505,1.5c-4.80865,0.99023 -7.16949,1.49988 -9.50995,1.99658c-2.32037,0.49243 -4.62238,0.98145 -6.91125,1.45129c-2.27448,0.4668 -4.53809,0.92383 -6.79877,1.33875c-4.49811,0.82568 -6.75262,1.16772 -9.00665,1.5033c-2.25684,0.33606 -4.52325,0.64758 -6.79877,0.96008c-2.28778,0.31409 -4.59222,0.6217 -6.91125,0.95996c-4.7063,0.68652 -7.09149,1.08533 -9.49664,1.5033c-2.42316,0.42114 -4.85449,0.87061 -7.29004,1.33875c-2.43781,0.46851 -4.86938,0.95374 -7.28998,1.45129c-4.79559,0.98584 -7.15521,1.49194 -9.47998,1.9967c-2.28186,0.49536 -4.50873,0.99146 -6.66754,1.5c-2.08777,0.49182 -4.09247,0.97839 -5.99249,1.5c-3.4978,0.96033 -5.05499,1.48584 -6.49664,1.99329c-1.34064,0.4718 -2.57178,0.94885 -3.70874,1.40247c-1.05292,0.42004 -2.01776,0.83057 -2.92126,1.17749c-1.60181,0.61511 -2.33215,0.83057 -3.01001,1.00342c-0.6225,0.15881 -1.19971,0.27148 -1.72498,0.37122c-0.47479,0.09021 -0.90533,0.15198 -1.27502,0.25879c-0.61066,0.17651 -0.84113,0.33044 -1.00336,0.5033c-0.14856,0.1582 -0.2417,0.34924 -0.27374,0.54004c-0.03094,0.18445 -0.01447,0.37769 0.06378,0.53992c0.15338,0.31812 0.32776,0.41772 0.49335,0.4967c0.17413,0.08301 0.37555,0.13013 0.58875,0.16125c0.22363,0.03259 0.45911,0.04395 0.70123,0.04871c0.49658,0.00989 0.7475,0.00342 1.00336,0.00342c0.26581,0 0.54663,0 0.84747,0c0.32581,0 0.68164,0 1.07251,0c0.90668,0 1.43335,0 2.01996,0c0.65668,0 1.39337,0 2.22003,0c0.92664,0 1.96332,0 3.12,0c2.71332,0 4.2879,0 6.01001,0c1.86707,0 3.87665,0 6.02625,0c2.28711,0 4.70917,0 7.26373,0c5.4967,0 8.44,0 11.54333,0c3.29834,0 6.82666,0 10.62,0c4.09332,0 8.52167,0 13.32001,0c10.84668,0 16.94666,-0.00562 23.44666,0.01001c6.82501,0.01648 13.90021,0.052 21.15002,0.14624c7.35022,0.09546 14.72662,0.22083 22.04999,0.48364c14.20398,0.50989 20.94635,0.97815 27.44336,1.50671c6.29401,0.51208 12.40778,1.13879 18.37128,1.86377c5.85999,0.7124 11.63696,1.51904 17.35876,2.42627c11.4563,1.81641 17.21631,2.90747 23.00989,3.97998c5.7981,1.07336 11.56702,2.18237 17.2876,3.28125c5.64587,1.08447 11.18823,2.16418 16.61243,3.1687c10.36023,1.91858 15.26624,2.73547 19.97998,3.4967c4.52979,0.73157 8.89331,1.39441 13.09509,2.03247c4.05151,0.61523 7.96655,1.19287 11.745,1.8075c7.21973,1.17432 10.66772,1.82874 14.01331,2.51343c3.25452,0.66602 6.40588,1.3761 9.44995,2.13745c2.95593,0.73938 5.81201,1.51074 8.55005,2.36255c5.22375,1.62524 7.65857,2.56433 10,3.48999c2.25842,0.8927 4.40625,1.81604 6.44995,2.74121c1.95605,0.8855 3.80359,1.77014 5.55005,2.62878c3.20654,1.57654 4.65491,2.31165 6.0166,3.00659c1.29236,0.65955 2.52405,1.30371 3.69385,1.96875c1.14685,0.65198 2.27148,1.32861 3.3562,2.0813c2.25403,1.56421 3.36353,2.51697 4.51672,3.50659c1.19727,1.02747 2.40344,2.12622 3.63745,3.26636c1.26611,1.1698 2.54602,2.38171 3.86255,3.60376c2.69189,2.49878 4.0835,3.74219 5.48657,4.98657c1.40356,1.24475 2.80908,2.474 4.1925,3.70129c1.36316,1.20935 2.69971,2.39526 3.96753,3.58875c2.41174,2.27039 3.48718,3.39954 4.5,4.5033c0.98022,1.06824 1.90076,2.14063 2.78247,3.21008c0.87158,1.05725 1.71545,2.12988 2.5575,3.20996c1.71765,2.20325 2.60388,3.34351 3.51343,4.52002c0.94067,1.21667 1.9093,2.48645 2.88745,3.83252c1.02234,1.40698 2.07288,2.89844 3.11255,4.50745c2.24976,3.48169 3.35205,5.43787 4.48328,7.48328c1.16528,2.10681 2.3009,4.28125 3.3938,6.49878c1.09045,2.21277 2.13025,4.4176 3.05615,6.61133c1.74878,4.14294 2.41125,6.11218 2.99341,7.97656c0.54895,1.75818 0.99243,3.44165 1.34619,5.04761c0.33508,1.52124 0.59509,2.97827 0.78381,4.37244c0.35217,2.60132 0.43396,3.83203 0.51001,5.01672c0.07361,1.14807 0.11255,2.26978 0.11243,3.37122c-0.00012,1.08887 -0.0321,2.17371 -0.11243,3.25879c-0.16382,2.21289 -0.32532,3.34924 -0.50342,4.51001c-0.1825,1.18958 -0.40833,2.4032 -0.68616,3.63745c-0.28503,1.26599 -0.61536,2.55774 -1.0238,3.86255c-0.85059,2.71704 -1.41748,4.0918 -1.99329,5.5033c-0.59143,1.44958 -1.23157,2.92273 -1.87878,4.43628c-0.66272,1.5498 -1.34692,3.13293 -1.99121,4.77368c-1.33032,3.38782 -1.91577,5.17346 -2.4967,6.9967c-0.59106,1.8551 -1.15002,3.75232 -1.70996,5.67749c-0.56665,1.94812 -1.12195,3.92114 -1.71008,5.90247c-1.18713,3.99927 -1.83362,5.99731 -2.50659,7.9967c-0.677,2.01147 -1.39111,4.02661 -2.13757,6.04871c-0.75354,2.04126 -1.53918,4.09509 -2.36243,6.16125c-1.67822,4.21216 -2.58398,6.34155 -3.49341,8.5c-0.91882,2.18079 -1.85547,4.37573 -2.78992,6.58875c-0.93896,2.22363 -1.88025,4.45447 -2.79004,6.70129c-1.81702,4.48718 -2.66321,6.74426 -3.5,8.9967c-0.83496,2.24756 -1.64673,4.5 -2.45996,6.75c-0.81335,2.25 -1.62073,4.50403 -2.46008,6.75c-1.68469,4.5083 -2.58521,6.75354 -3.5033,9c-0.92102,2.25354 -1.87146,4.50232 -2.83875,6.75c-0.96936,2.25232 -1.95667,4.5011 -2.95129,6.75c-1.99133,4.50232 -2.99512,6.75171 -4.0033,9.00659c-1.01355,2.26685 -2.04114,4.54919 -3.09753,6.84753c-1.07019,2.32837 -2.16882,4.68787 -3.32251,7.07251c-2.38013,4.91956 -3.66968,7.4342 -4.99658,9.98328c-1.34058,2.5752 -2.71729,5.1438 -4.12878,7.68384c-1.39856,2.5166 -2.80176,4.97961 -4.24121,7.34619c-2.74121,4.50671 -4.1333,6.55347 -5.48999,8.4834c-1.29431,1.84119 -2.58289,3.5603 -3.86255,5.15991c-1.22119,1.52649 -2.42798,2.95154 -3.63745,4.26001c-2.25964,2.4447 -3.40417,3.5061 -4.50671,4.52332c-1.06958,0.98682 -2.14355,1.92041 -3.20996,2.8313c-1.0603,0.90576 -2.13708,1.79785 -3.21008,2.71875c-2.2179,1.90356 -3.34387,2.94165 -4.5166,4.0033c-1.20972,1.09509 -2.45715,2.2218 -3.78381,3.33008c-1.36328,1.13892 -2.79041,2.28271 -4.34619,3.32996c-3.24597,2.18494 -5.09412,3.09216 -6.9967,3.9967c-1.9541,0.92908 -4.0011,1.78381 -6.10498,2.62122c-2.1427,0.85291 -4.33813,1.66846 -6.55505,2.50879c-4.48962,1.70178 -6.74121,2.59106 -9.0033,3.50989c-2.29224,0.93103 -4.61646,1.90051 -6.99377,2.88757c-2.43933,1.01294 -4.94983,2.06055 -7.55627,3.11243c-5.50757,2.22266 -8.44678,3.34985 -11.5,4.48669c-3.14258,1.17017 -6.37634,2.32715 -9.69373,3.4425c-3.36597,1.13171 -6.78284,2.23108 -10.25623,3.21753c-6.9585,1.9762 -10.47681,2.75916 -13.98999,3.48999c-3.50891,0.72998 -7.04163,1.35559 -10.59753,1.88623c-3.57117,0.53296 -7.17737,0.98364 -10.82251,1.32373c-7.39905,0.69031 -11.18042,0.84595 -15.0033,1.01672c-3.86633,0.17273 -7.77661,0.29395 -11.7262,0.42004c-3.98718,0.1272 -8.01013,0.23938 -12.06384,0.41992c-8.19891,0.36511 -12.33441,0.67236 -16.48993,1c-4.17285,0.32898 -8.35333,0.70667 -12.54004,1.08008c-4.18665,0.37329 -8.36646,0.76062 -12.53998,1.07996c-8.28979,0.6344 -12.40546,0.83203 -16.49664,0.99329c-4.0697,0.1604 -8.12317,0.25903 -12.16125,0.32251c-4.02527,0.06323 -8.04083,0.08789 -12.04877,0.09753c-8.00336,0.01917 -12.00708,0.00671 -16.03333,0.00671c-4.07129,0 -8.21002,0 -12.43878,0c-4.34125,0 -8.8175,0 -13.45123,0c-9.83002,0 -15.05957,0 -20.46667,0c-5.53705,0 -11.15668,0 -16.81122,0c-5.64209,0 -11.22418,0 -16.69879,0c-10.43665,0 -15.31079,0 -19.92999,0c-4.35913,0 -8.45331,0 -12.27747,0c-3.54919,0 -6.81836,0 -9.80255,0c-5.09332,0 -7.1983,0 -9.03333,0c-1.59497,0 -2.97998,0 -4.185,0c-1.05499,0 -1.98999,0 -2.83496,0c-1.54004,0 -2.28961,0 -3.03668,0c-0.74207,0 -1.47668,0 -2.20123,0c-0.7121,0 -1.40918,0 -2.08875,0c-1.29669,0 -1.90918,0 -2.4967,0c-0.5625,0 -1.09998,0 -1.61249,0c-0.48749,0 -0.95001,0 -1.38751,0c-0.79999,0 -1.16333,0 -1.50665,0c-0.32831,0 -0.64667,0 -0.96002,0c-0.31329,0 -0.63165,0 -0.95996,0c-0.70667,0 -1.09375,0 -1.50336,0c-0.42957,0 -0.87665,0 -1.33875,0c-0.47461,0 -0.95917,0 -1.45123,0c-0.9967,0 -1.4967,0 -1.9967,0c-0.5,0 -1,0 -1.5,0c-0.5,0 -1,0 -1.5,0c-1,0 -1.5,0 -2,0c-0.5,0 -1,0 -1.5,0c-0.5,0 -1,0 -1.5,0c-1,0 -1.5,0 -2,0c-0.5,0 -1,0 -1.5,0c-0.5,0 -1,0 -1.5,0c-1,0 -1.50043,0 -2.0033,0c-0.50793,0 -1.02338,0 -1.54877,0c-0.5379,0 -1.09082,0 -1.66125,0c-1.20331,0 -1.8396,0 -2.49335,0c-0.66376,0 -1.32996,0 -1.99121,0l-0.64874,0l-0.62878,0l-0.60126,0" id="svg_14" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="65" stroke="#bf0000" fill="none"/>
+ </g>
+</svg>
index db9b981..e6fd6d7 100644 (file)
@@ -1126,7 +1126,7 @@ export const ChessRules = class ChessRules {
     let moves1 = this.getAllValidMoves("computer");
 
     if (moves1.length == 0)
-      //TODO: this situation should not happen
+      // TODO: this situation should not happen
       return null;
 
     // Can I mate in 1 ? (for Magnetic & Extinction)
index 3573643..488567b 100644 (file)
@@ -1,10 +1,5 @@
 <template lang="pug">
-div#baseGame(
-  tabindex=-1
-  @click="focusBg()"
-  @keydown="handleKeys($event)"
-  @wheel="handleScroll($event)"
-)
+div#baseGame
   input#modalEog.modal(type="checkbox")
   div#eogDiv(
     role="dialog"
@@ -86,26 +81,30 @@ import { getSquareId } from "@/utils/squareId";
 import { getDate } from "@/utils/datetime";
 import { processModalClick } from "@/utils/modalClick";
 import { getScoreMessage } from "@/utils/scoring";
+import { getFullNotation } from "@/utils/notation";
+import { undoMove } from "@/utils/playUndo";
 export default {
   name: "my-base-game",
   components: {
     Board,
     MoveList
   },
-  // "vr": VariantRules object, describing the game state + rules
-  props: ["vr", "game"],
+  props: ["game"],
   data: function() {
     return {
       st: store.state,
       // NOTE: all following variables must be reset at the beginning of a game
+      vr: null, //VariantRules object, game state
       endgameMessage: "",
       orientation: "w",
       score: "*", //'*' means 'unfinished'
       moves: [],
+      // TODO: later, use subCursor to navigate intra-multimoves?
       cursor: -1, //index of the move just played
       lastMove: null,
       firstMoveNumber: 0, //for printing
-      incheck: [] //for Board
+      incheck: [], //for Board
+      inMultimove: false
     };
   },
   watch: {
@@ -151,6 +150,14 @@ export default {
     if (this.game.fenStart) this.re_setVariables();
   },
   mounted: function() {
+    if (!("ontouchstart" in window)) {
+      // Desktop browser:
+      const baseGameDiv = document.getElementById("baseGame");
+      baseGameDiv.tabIndex = 0;
+      baseGameDiv.addEventListener("click", this.focusBg);
+      baseGameDiv.addEventListener("keydown", this.handleKeys);
+      baseGameDiv.addEventListener("wheel", this.handleScroll);
+    }
     [
       document.getElementById("eogDiv"),
       document.getElementById("adjuster")
@@ -221,12 +228,9 @@ export default {
       }
     },
     handleScroll: function(e) {
-      // NOTE: since game.mode=="analyze" => no score, next condition is enough
-      if (this.game.score != "*") {
-        e.preventDefault();
-        if (e.deltaY < 0) this.undo();
-        else if (e.deltaY > 0) this.play();
-      }
+      e.preventDefault();
+      if (e.deltaY < 0) this.undo();
+      else if (e.deltaY > 0) this.play();
     },
     showRules: function() {
       //this.$router.push("/variants/" + this.game.vname);
@@ -237,30 +241,43 @@ export default {
       // "w": default orientation for observed games
       this.orientation = this.game.mycolor || "w";
       this.moves = JSON.parse(JSON.stringify(this.game.moves || []));
-      // Post-processing: decorate each move with color, notation and FEN
-      let vr_tmp = new V(this.game.fenStart);
+      // Post-processing: decorate each move with notation and FEN
+      this.vr = new V(this.game.fenStart);
       const parsedFen = V.ParseFen(this.game.fenStart);
       const firstMoveColor = parsedFen.turn;
       this.firstMoveNumber = Math.floor(parsedFen.movesCount / 2);
       this.moves.forEach(move => {
-        move.color = vr_tmp.turn;
-        move.notation = vr_tmp.getNotation(move);
-        vr_tmp.play(move);
-        move.fen = vr_tmp.getFen();
+        // Strategy working also for multi-moves:
+        if (!Array.isArray(move)) move = [move];
+        move.forEach(m => {
+          m.notation = this.vr.getNotation(m);
+          this.vr.play(m);
+        });
       });
       if (firstMoveColor == "b") {
         // 'end' is required for Board component to check lastMove for e.p.
         this.moves.unshift({
-          color: "w",
           notation: "...",
           end: { x: -1, y: -1 }
         });
       }
-      const L = this.moves.length;
-      this.cursor = L - 1;
-      this.lastMove = L > 0 ? this.moves[L - 1] : null;
+      this.positionCursorTo(this.moves.length - 1);
       this.incheck = this.vr.getCheckSquares(this.vr.turn);
     },
+    positionCursorTo: function(index) {
+      this.cursor = index;
+      // Caution: last move in moves array might be a multi-move
+      if (index >= 0) {
+        if (Array.isArray(this.moves[index])) {
+          const L = this.moves[index].length;
+          this.lastMove = this.moves[index][L - 1];
+        } else {
+          this.lastMove = this.moves[index];
+        }
+      }
+      else
+        this.lastMove = null;
+    },
     analyzePosition: function() {
       const newUrl =
         "/analyse/" +
@@ -289,17 +306,10 @@ export default {
       pgn += '[Black "' + this.game.players[1].name + '"]\n';
       pgn += '[Fen "' + this.game.fenStart + '"]\n';
       pgn += '[Result "' + this.game.score + '"]\n\n';
-      let counter = 1;
-      let i = 0;
-      while (i < this.moves.length) {
-        pgn += counter++ + ".";
-        for (let color of ["w", "b"]) {
-          let move = "";
-          while (i < this.moves.length && this.moves[i].color == color)
-            move += this.moves[i++].notation + ",";
-          move = move.slice(0, -1); //remove last comma
-          pgn += move + (i < this.moves.length ? " " : "");
-        }
+      for (let i = 0; i < this.moves.length; i += 2) {
+        pgn += (i/2+1) + "." + getFullNotation(this.moves[i]) + " ";
+        if (i+1 < this.moves.length)
+          pgn += getFullNotation(this.moves[i+1]) + " ";
       }
       return pgn + "\n";
     },
@@ -311,6 +321,7 @@ export default {
         modalBox.checked = false;
       }, 2000);
     },
+    // Animate an elementary move
     animateMove: function(move, callback) {
       let startSquare = document.getElementById(getSquareId(move.start));
       let endSquare = document.getElementById(getSquareId(move.end));
@@ -341,88 +352,167 @@ export default {
         callback();
       }, 250);
     },
-    play: function(move, receive) {
-      // NOTE: navigate and receive are mutually exclusive
+    // "light": if gotoMove() or gotoEnd()
+    // data: some custom data (addTime) to be re-emitted
+    play: function(move, received, light, data) {
       const navigate = !move;
+      const playSubmove = (smove) => {
+        if (!navigate) smove.notation = this.vr.getNotation(smove);
+        this.vr.play(smove);
+        this.lastMove = smove;
+        // Is opponent in check?
+        this.incheck = this.vr.getCheckSquares(this.vr.turn);
+        if (!navigate) {
+          if (!this.inMultimove) {
+            if (this.cursor < this.moves.length - 1)
+              this.moves = this.moves.slice(0, Math.max(this.cursor, 0));
+            this.moves.push(smove);
+            this.inMultimove = true; //potentially
+            this.cursor++;
+          } else {
+            // Already in the middle of a multi-move
+            const L = this.moves.length;
+            if (!Array.isArray(this.moves[L-1]))
+              this.$set(this.moves, L-1, [this.moves[L-1], smove]);
+            else
+              this.$set(this.moves, L-1, this.moves.concat([smove]));
+          }
+        }
+      };
+      const playMove = () => {
+        const animate = V.ShowMoves == "all" && received;
+        if (!Array.isArray(move)) move = [move];
+        let moveIdx = 0;
+        let self = this;
+        const initurn = this.vr.turn;
+        (function executeMove() {
+          const smove = move[moveIdx++];
+          if (animate) {
+            self.animateMove(smove, () => {
+              playSubmove(smove);
+              if (moveIdx < move.length)
+                setTimeout(executeMove, 500);
+              else afterMove(smove, initurn);
+            });
+          } else {
+            playSubmove(smove);
+            if (moveIdx < move.length) executeMove();
+            else afterMove(smove, initurn);
+          }
+        })();
+      };
+      const afterMove = (smove, initurn) => {
+        if (this.st.settings.sound == 2)
+          new Audio("/sounds/move.mp3").play().catch(() => {});
+        if (this.vr.turn != initurn) {
+          // Turn has changed: move is complete
+          this.inMultimove = false;
+          const score = this.vr.getCurrentScore();
+          if (score != "*") {
+            const message = getScoreMessage(score);
+            if (!navigate && this.game.mode != "analyze")
+              this.$emit("gameover", score, message);
+            // Just show score on screen (allow undo)
+            else this.showEndgameMsg(score + " . " + message);
+          }
+          if (!navigate && this.game.mode != "analyze") {
+            const L = this.moves.length;
+            // Post-processing (e.g. computer play)
+            this.$emit("newmove", this.moves[L-1], data);
+          }
+        }
+      };
+      // NOTE: navigate and received are mutually exclusive
+      if (navigate) {
+        // The move to navigate to is necessarily full:
+        if (this.cursor == this.moves.length - 1) return; //no more moves
+        move = this.moves[this.cursor + 1];
+        if (light) {
+          // Just play the move, nothing else:
+          if (!Array.isArray(move)) move = [move];
+          for (let i=0; i < move.length; i++) this.vr.play(move[i]);
+        }
+        else playMove();
+        this.cursor++;
+        return;
+      }
       // Forbid playing outside analyze mode, except if move is received.
       // Sufficient condition because Board already knows which turn it is.
       if (
-        !navigate &&
         this.game.mode != "analyze" &&
-        !receive &&
+        !received &&
         (this.game.score != "*" || this.cursor < this.moves.length - 1)
       ) {
         return;
       }
-      const doPlayMove = () => {
-        // To play a move, cursor must be at the end of the game:
-        if (!!receive && this.cursor < this.moves.length - 1) this.gotoEnd();
-        if (navigate) {
-          if (this.cursor == this.moves.length - 1) return; //no more moves
-          move = this.moves[this.cursor + 1];
-        } else {
-          move.color = this.vr.turn;
-          move.notation = this.vr.getNotation(move);
-        }
-        this.vr.play(move);
-        this.cursor++;
-        this.lastMove = move;
-        if (this.st.settings.sound == 2)
-          new Audio("/sounds/move.mp3").play().catch(() => {});
-        if (!navigate) {
-          move.fen = this.vr.getFen();
-          // Stack move on movesList at current cursor
-          if (this.cursor == this.moves.length) this.moves.push(move);
-          else this.moves = this.moves.slice(0, this.cursor).concat([move]);
-        }
-        // Is opponent in check?
+      // To play a received move, cursor must be at the end of the game:
+      if (received && this.cursor < this.moves.length - 1)
+        this.gotoEnd();
+      playMove();
+    },
+    cancelCurrentMultimove: function() {
+      // Cancel current multi-move
+      const L = this.moves.length;
+      let move = this.moves[L-1];
+      if (!Array.isArray(move)) move = [move];
+      for (let i=move.length -1; i >= 0; i--) this.vr.undo(move[i]);
+      this.moves.pop();
+      this.cursor--;
+      this.inMultimove = false;
+    },
+    cancelLastMove: function() {
+      // The last played move was canceled (corr game)
+      this.undo();
+      this.moves.pop();
+    },
+    // "light": if gotoMove() or gotoBegin()
+    undo: function(move, light) {
+      if (this.inMultimove) {
+        this.cancelCurrentMultimove();
         this.incheck = this.vr.getCheckSquares(this.vr.turn);
-        const score = this.vr.getCurrentScore();
-        if (score != "*") {
-          const message = getScoreMessage(score);
-          if (this.game.mode != "analyze")
-            this.$emit("gameover", score, message);
-          //just show score on screen (allow undo)
-          else this.showEndgameMsg(score + " . " + message);
+      } else {
+        if (!move) {
+          if (this.cursor < 0) return; //no more moves
+          move = this.moves[this.cursor];
+        }
+        // Caution; if multi-move, undo all submoves from last to first
+        undoMove(move, this.vr);
+        if (light) this.cursor--;
+        else {
+          this.positionCursorTo(this.cursor - 1);
+          if (this.st.settings.sound == 2)
+            new Audio("/sounds/undo.mp3").play().catch(() => {});
+          this.incheck = this.vr.getCheckSquares(this.vr.turn);
         }
-        if (!navigate && this.game.mode != "analyze")
-          this.$emit("newmove", move); //post-processing (e.g. computer play)
-      };
-      if (!!receive && V.ShowMoves == "all")
-        this.animateMove(move, doPlayMove);
-      else doPlayMove();
-    },
-    undo: function(move) {
-      const navigate = !move;
-      if (navigate) {
-        if (this.cursor < 0) return; //no more moves
-        move = this.moves[this.cursor];
       }
-      this.vr.undo(move);
-      this.cursor--;
-      this.lastMove = this.cursor >= 0 ? this.moves[this.cursor] : undefined;
-      if (this.st.settings.sound == 2)
-        new Audio("/sounds/undo.mp3").play().catch(() => {});
-      this.incheck = this.vr.getCheckSquares(this.vr.turn);
-      if (!navigate) this.moves.pop();
     },
     gotoMove: function(index) {
-      this.vr.re_init(this.moves[index].fen);
-      this.cursor = index;
-      this.lastMove = this.moves[index];
+      if (this.inMultimove) this.cancelCurrentMultimove();
+      if (index == this.cursor) return;
+      if (index < this.cursor) {
+        while (this.cursor > index)
+          this.undo(null, null, "light");
+      }
+      else {
+        // index > this.cursor)
+        while (this.cursor < index)
+          this.play(null, null, "light");
+      }
+      // NOTE: next line also re-assign cursor, but it's very light
+      this.positionCursorTo(index);
       this.incheck = this.vr.getCheckSquares(this.vr.turn);
     },
     gotoBegin: function() {
-      if (this.cursor == -1) return;
-      this.vr.re_init(this.game.fenStart);
+      if (this.inMultimove) this.cancelCurrentMultimove();
+      while (this.cursor >= 0)
+        this.undo(null, null, "light");
       if (this.moves.length > 0 && this.moves[0].notation == "...") {
         this.cursor = 0;
         this.lastMove = this.moves[0];
       } else {
-        this.cursor = -1;
         this.lastMove = null;
       }
-      this.incheck = this.vr.getCheckSquares(this.vr.turn);
+      this.incheck = [];
     },
     gotoEnd: function() {
       if (this.cursor == this.moves.length - 1) return;
index 1181971..aee1f70 100644 (file)
@@ -2,7 +2,6 @@
 BaseGame(
   ref="basegame"
   :game="game"
-  :vr="vr"
   @newmove="processMove"
   @gameover="gameOver"
 )
@@ -12,6 +11,7 @@ BaseGame(
 import BaseGame from "@/components/BaseGame.vue";
 import { store } from "@/store";
 import { CompgameStorage } from "@/utils/compgameStorage";
+import { playMove, getFilteredMove } from "@/utils/playUndo";
 import Worker from "worker-loader!@/playCompMove";
 export default {
   name: "my-computer-game",
@@ -37,31 +37,17 @@ export default {
     this.compWorker = new Worker();
     this.compWorker.onmessage = e => {
       let compMove = e.data;
-      if (!compMove) {
-        this.compThink = false;
-        this.$emit("game-stopped"); //no more moves: mate or stalemate
-        return; //after game ends, no more moves, nothing to do
-      }
-      if (!Array.isArray(compMove)) compMove = [compMove]; //potential multi-move
       // Small delay for the bot to appear "more human"
       const delay = Math.max(500 - (Date.now() - this.timeStart), 0);
+      let self = this;
       setTimeout(() => {
         if (this.currentUrl != document.location.href) return; //page change
-        // NOTE: do not animate move if special display (ShowMoves != "all")
-        const animate = V.ShowMoves == "all";
-        const animDelay = animate ? 250 : 0;
-        let moveIdx = 0;
-        let self = this;
-        (function executeMove() {
-          // NOTE: BaseGame::play() will trigger processMove() here
-          self.$refs["basegame"].play(compMove[moveIdx++], "received");
-          if (moveIdx >= compMove.length) {
-            self.compThink = false;
-            if (self.game.score != "*")
-              // User action
-              self.$emit("game-stopped");
-          } else setTimeout(executeMove, 500 + animDelay);
-        })();
+        // NOTE: BaseGame::play() will trigger processMove() here
+        self.$refs["basegame"].play(compMove, "received");
+        self.compThink = false;
+        if (self.game.score != "*")
+          // User action
+          self.$emit("game-stopped");
       }, delay);
     };
   },
@@ -99,28 +85,19 @@ export default {
       this.compWorker.postMessage(["askmove"]);
     },
     processMove: function(move) {
+      playMove(move, this.vr);
+      // This move could have ended the game: if this is the case,
+      // the game is already removed from storage (if mode == 'versus')
       if (this.game.score != "*") return;
       // Send the move to web worker (including his own moves)
       this.compWorker.postMessage(["newmove", move]);
-      // subTurn condition for Marseille (and Avalanche) rules
-      if (
-        (!this.vr.subTurn || this.vr.subTurn <= 1) &&
-        (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor)
-      ) {
+      if (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor)
         this.playComputerMove();
-      }
       // Finally, update storage:
       if (this.gameInfo.mode == "versus") {
-        const allowed_fields = ["appear", "vanish", "start", "end"];
-        const filtered_move = Object.keys(move)
-          .filter(key => allowed_fields.includes(key))
-          .reduce((obj, key) => {
-            obj[key] = move[key];
-            return obj;
-          }, {});
         CompgameStorage.update(this.gameInfo.vname, {
-          move: filtered_move,
-          fen: move.fen
+          move: getFilteredMove(move),
+          fen: this.vr.getFen()
         });
       }
     },
index 6df5a70..b238758 100644 (file)
+<template lang="pug">
+div
+  #scoreInfo(v-if="score!='*'")
+    p {{ score }}
+    p {{ message }}
+  .moves-list
+    .tr(v-for="moveIdx in evenNumbers")
+      .td {{ firstNum + moveIdx / 2 + 1 }}
+      .td(v-if="moveIdx < moves.length-1 || show == 'all'"
+        :class="{'highlight-lm': cursor == moveIdx}"
+        @click="() => gotoMove(moveIdx)"
+      )
+        | {{ notation(moves[moveIdx]) }}
+      .td(
+        v-if="moveIdx < moves.length-1"
+        :class="{'highlight-lm': cursor == moveIdx+1}"
+        @click="() => gotoMove(moveIdx+1)"
+      )
+        | {{ notation(moves[moveIdx+1]) }}
+      // Else: just add an empty cell
+      //.td(v-else)
+</template>
+
 <script>
 import { store } from "@/store";
+import { getFullNotation } from "@/utils/notation";
 export default {
   name: "my-move-list",
   props: ["moves", "show", "cursor", "score", "message", "firstNum"],
-  // TODO: if show == "byrows", show only full rows.
-  render(h) {
-    let rootElements = [];
-    if (!!this.score && this.score != "*") {
-      const scoreDiv = h(
-        "div",
-        {
-          id: "scoreInfo",
-          style: {
-            display: this.score != "*" ? "block" : "none"
-          }
-        },
-        [h("p", this.score), h("p", store.state.tr[this.message])]
-      );
-      rootElements.push(scoreDiv);
-    }
-    if (this.moves.length > 0) {
-      let tableContent = [];
-      let moveCounter = 0;
-      let tableRow = undefined;
-      let moveCells = undefined;
-      let curCellContent = "";
-      let firstIndex = 0;
-      for (let i = 0; i < this.moves.length; i++) {
-        if (this.moves[i].color == "w") {
-          if (i == 0 || (i > 0 && this.moves[i - 1].color == "b")) {
-            if (tableRow) {
-              tableRow.children = moveCells;
-              tableContent.push(tableRow);
-            }
-            moveCells = [
-              h(
-                "div",
-                {
-                  "class": {td: true},
-                  domProps: { innerHTML: ++moveCounter + "." }
-                }
-              )
-            ];
-            tableRow = h("div", {"class": {tr: true}});
-            curCellContent = "";
-            firstIndex = i;
-          }
-        }
-        // Next condition is fine because even if the first move is black,
-        // there will be the "..." which count as white move.
-        else if (this.moves[i].color == "b" && this.moves[i - 1].color == "w")
-          firstIndex = i;
-        curCellContent += this.moves[i].notation;
-        if (
-          i < this.moves.length - 1 &&
-          this.moves[i + 1].color == this.moves[i].color
-        )
-          curCellContent += ",";
-        else {
-          // Color change
-          moveCells.push(
-            h(
-              "div",
-              {
-                "class": {
-                  td: true,
-                  "highlight-lm": this.cursor >= firstIndex && this.cursor <= i
-                },
-                domProps: { innerHTML: curCellContent },
-                on: { click: () => this.gotoMove(i) }
-              }
-            )
-          );
-          curCellContent = "";
-        }
-      }
-      // Complete last row, which might not be full:
-      if (moveCells.length - 1 == 1) {
-        moveCells.push(h("div", {"class": {td: true}}));
-      }
-      tableRow.children = moveCells;
-      tableContent.push(tableRow);
-      rootElements.push(
-        h(
-          "div",
-          {
-            class: {
-              "moves-list": true
-            }
-          },
-          tableContent
-        )
-      );
-    }
-    return h("div", {}, rootElements);
-  },
   watch: {
     cursor: function(newCursor) {
       if (window.innerWidth <= 767) return; //scrolling would hide chessboard
@@ -110,7 +42,15 @@ export default {
       });
     }
   },
+  computed: {
+    evenNumbers: function() {
+      return [...Array(this.moves.length).keys()].filter(i => i%2==0);
+    }
+  },
   methods: {
+    notation: function(move) {
+      return getFullNotation(move);
+    },
     gotoMove: function(index) {
       this.$emit("goto-move", index);
     }
index b5c6fbe..50b702d 100644 (file)
@@ -181,7 +181,7 @@ export default {
 
 <style lang="sass" scoped>
 [type="checkbox"].modal+div .card
-  max-width: 370px
+  max-width: 450px
   max-height: 100%
 
 #dialog
index d8dd2d4..05c2286 100644 (file)
@@ -12,7 +12,11 @@ onmessage = async function(e) {
       break;
     }
     case "newmove":
-      self.vr.play(e.data[1]);
+      let move = e.data[1];
+      // Caution: could be a multi-move
+      if (!Array.isArray(move))
+        move = [move];
+      move.forEach(m => self.vr.play(m));
       break;
     case "askmove": {
       const compMove = self.vr.getComputerMove();
index 4bc7ed4..4cc6942 100644 (file)
@@ -40,6 +40,7 @@ p.
 h3 Links
 
 #links
+  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://schemingmind.com/") schemingmind.com
   div
index e6480f0..3643ba8 100644 (file)
@@ -38,6 +38,7 @@ p
 h3 Enlaces
 
 #links
+  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://schemingmind.com/") schemingmind.com
   div
index b7092f0..bc9f51b 100644 (file)
@@ -38,6 +38,7 @@ p.
 h3 Liens
 
 #links
+  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://schemingmind.com/") schemingmind.com
   a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
diff --git a/client/src/utils/notation.js b/client/src/utils/notation.js
new file mode 100644 (file)
index 0000000..464b5ee
--- /dev/null
@@ -0,0 +1,12 @@
+// Take into account that the move may be a multi-move
+export function getFullNotation(move) {
+  if (Array.isArray(move)) {
+    let notation = "";
+    for (let i=0; i<move.length; i++)
+      notation += move[i].notation + ",";
+    // Remove last comma:
+    return notation.slice(0,-1);
+  }
+  // Simple (usual) case
+  return move.notation;
+}
diff --git a/client/src/utils/playUndo.js b/client/src/utils/playUndo.js
new file mode 100644 (file)
index 0000000..ab11bff
--- /dev/null
@@ -0,0 +1,23 @@
+export function playMove(move, vr) {
+  if (!Array.isArray(move)) move = [move];
+  move.forEach(m => vr.play(m));
+}
+
+export function undoMove(move, vr) {
+  if (!Array.isArray(move)) move = [move];
+  for (let i = move.length - 1; i >= 0; i--)
+    vr.undo(move[i]);
+}
+
+export function getFilteredMove(move) {
+  if (!Array.isArray(move)) move = [move];
+  const filtered_move = move.map(m => {
+    return {
+      appear: m.appear,
+      vanish: m.vanish,
+      start: m.start,
+      end: m.end
+    };
+  });
+  return filtered_move.length == 1 ? filtered_move[0] : filtered_move;
+}
index 63d5ae5..a4b292a 100644 (file)
@@ -1,20 +1,67 @@
 import { ChessRules } from "@/base_rules";
 
-export const VariantRules = class AntimatterRules extends ChessRules {
-  getPotentialMovesFrom([x, y]) {
-    let moves = super.getPotentialMovesFrom([x, y]);
-
-    // Handle "matter collisions"
-    moves.forEach(m => {
-      if (
-        m.vanish.length > 1 &&
-        m.appear.length <= 1 &&
-        m.vanish[0].p == m.vanish[1].p
-      ) {
-        m.appear.pop();
-      }
-    });
-
-    return moves;
+export const VariantRules = class Check3Rules extends ChessRules {
+  static IsGoodFlags(flags) {
+    // 4 for castle + 2 for checks (0,1 or 2)
+    return !!flags.match(/^[01]{4,4}[012]{2,2}$/);
+  }
+
+  setFlags(fenflags) {
+    super.setFlags(fenflags); //castleFlags
+    this.checkFlags = { w: 0, b: 0 };
+    const flags = fenflags.substr(4); //skip first 4 digits, for castle
+    for (let c of ["w", "b"]) {
+      this.checkFlags[c] = parseInt(flags.charAt(c == "w" ? 0 : 1));
+    }
+  }
+
+  aggregateFlags() {
+    return [this.castleFlags, this.checkFlags];
+  }
+
+  disaggregateFlags(flags) {
+    this.castleFlags = flags[0];
+    this.checkFlags = flags[1];
+  }
+
+  getPpath(b) {
+    if (b[1] == 'k' && this.checkFlags[b[0]] > 0)
+      return "Check3/" + b[0] + 'k_' + this.checkFlags[b[0]];
+    return b;
+  }
+
+  updateVariables(move) {
+    super.updateVariables(move);
+    // Does this move give check?
+    const oppCol = this.turn;
+    if (this.underCheck(oppCol))
+      this.checkFlags[oppCol]++;
+  }
+
+  getCurrentScore() {
+    const color = this.turn;
+    if (this.checkFlags[color] >= 3)
+      return color == "w" ? "0-1" : "1-0";
+    return super.getCurrentScore();
+  }
+
+  static GenRandInitFen() {
+    const randFen = ChessRules.GenRandInitFen();
+    // Add check flags (at 0)
+    return randFen.replace(" w 0 1111", " w 0 111100");
+  }
+
+  getFlagsFen() {
+    let fen = super.getFlagsFen();
+    // Add check flags
+    for (let c of ["w", "b"])
+      fen += this.checkFlags[c];
+    return fen;
+  }
+
+  evalPosition() {
+    const baseEval = super.evalPosition();
+    // Take number of checks into account
+    return baseEval/5 - this.checkFlags["w"] + this.checkFlags["b"];
   }
 };
index 96822b9..c79267a 100644 (file)
@@ -61,6 +61,18 @@ export const VariantRules = class HiddenRules extends ChessRules {
     return piece;
   }
 
+  getPpath(b, color, score) {
+    if (Object.keys(V.HIDDEN_DECODE).includes(b[1])) {
+      // Supposed to be hidden.
+      if (score == "*" && (!color || color != b[0]))
+        return "Hidden/" + b[0] + "p";
+      // Else: condition OK to show the piece
+      return b[0] + V.HIDDEN_DECODE[b[1]];
+    }
+    // The piece is already not supposed to be hidden:
+    return b;
+  }
+
   // Scan board for kings positions (no castling)
   scanKingsRooks(fen) {
     this.kingPos = { w: [-1, -1], b: [-1, -1] };
@@ -87,18 +99,6 @@ export const VariantRules = class HiddenRules extends ChessRules {
     }
   }
 
-  getPpath(b, color, score) {
-    if (Object.keys(V.HIDDEN_DECODE).includes(b[1])) {
-      // Supposed to be hidden.
-      if (score == "*" && (!color || color != b[0]))
-        return "Hidden/" + b[0] + "p";
-      // Else: condition OK to show the piece
-      return b[0] + V.HIDDEN_DECODE[b[1]];
-    }
-    // The piece is already not supposed to be hidden:
-    return b;
-  }
-
   getBasicMove([sx, sy], [ex, ey], tr) {
     if (
       tr &&
index 19d35a6..247e2cb 100644 (file)
@@ -3,10 +3,10 @@ import { randInt } from "@/utils/alea";
 
 export const VariantRules = class MarseilleRules extends ChessRules {
   static IsGoodEnpassant(enpassant) {
-    if (enpassant != "-") {
-      const squares = enpassant.split(",");
-      if (squares.length > 2) return false;
-      for (let sq of squares) {
+    const squares = enpassant.split(",");
+    if (squares.length > 2) return false;
+    for (let sq of squares) {
+      if (sq != "-") {
         const ep = V.SquareToCoords(sq);
         if (isNaN(ep.x) || !V.OnBoard(ep)) return false;
       }
@@ -20,25 +20,20 @@ export const VariantRules = class MarseilleRules extends ChessRules {
 
   // There may be 2 enPassant squares (if 2 pawns jump 2 squares in same turn)
   getEnpassantFen() {
-    const L = this.epSquares.length;
-    if (this.epSquares[L - 1].every(epsq => epsq === undefined)) return "-"; //no en-passant
-    let res = "";
-    this.epSquares[L - 1].forEach(epsq => {
-      if (epsq) res += V.CoordsToSquare(epsq) + ",";
-    });
-    return res.slice(0, -1); //remove last comma
+    return this.epSquares[this.epSquares.length - 1].map(
+      epsq => epsq === undefined
+        ? "-" //no en-passant
+        : V.CoordsToSquare(epsq)
+    ).join(",");
   }
 
   setOtherVariables(fen) {
     const parsedFen = V.ParseFen(fen);
     this.setFlags(parsedFen.flags);
-    if (parsedFen.enpassant == "-") this.epSquares = [[undefined]];
-    else {
-      let res = [];
-      const squares = parsedFen.enpassant.split(",");
-      for (let sq of squares) res.push(V.SquareToCoords(sq));
-      this.epSquares = [res];
-    }
+    this.epSquares = [parsedFen.enpassant.split(",").map(sq => {
+      if (sq != "-") return V.SquareToCoords(sq);
+      return undefined;
+    })];
     this.scanKingsRooks(fen);
     // Extract subTurn from turn indicator: "w" (first move), or
     // "w1" or "w2" white subturn 1 or 2, and same for black
@@ -166,8 +161,8 @@ export const VariantRules = class MarseilleRules extends ChessRules {
     V.UndoOnBoard(this.board, move);
     if (move.turn[1] == "0" || move.checkOnSubturn1 || this.subTurn == 2)
       this.epSquares.pop();
-    //this.subTurn == 1
     else {
+      // this.subTurn == 1
       let lastEpsq = this.epSquares[this.epSquares.length - 1];
       lastEpsq.pop();
     }
@@ -192,8 +187,6 @@ export const VariantRules = class MarseilleRules extends ChessRules {
 
   // No alpha-beta here, just adapted min-max at depth 2(+1)
   getComputerMove() {
-    if (this.subTurn == 2) return null; //TODO: imperfect interface setup
-
     const maxeval = V.INFINITY;
     const color = this.turn;
     const oppCol = V.GetOppCol(this.turn);
index a6be9f2..14766ff 100644 (file)
@@ -3,8 +3,20 @@ import { ArrayFun } from "@/utils/array";
 import { randInt } from "@/utils/alea";
 
 // TODO:
+// Short-range pieces:
+// rook 1 or 2 squares orthogonal
+// bishop 1 or 2 diagonal
+// queen = bishop + rook
+// knight: one square orthogonal + 1 diagonal (only acepted desc)
+// no castle or en passant. Promotion possible only by capture (otherwise hole)
 
 export const VariantRules = class WormholeRules extends ChessRules {
+  // TODO: redefine pieces movements, taking care of holes (auxiliary func: getSquareAfter(shiftX,shiftY))
+  // this aux func could return null / undefined
+  // revoir getPotentialMoves et isAttacked : tout ce qui touche au board avec calcul,
+  // car les "board[x+..][y+..]" deviennent des board[getSquareAfter...]
+  // Special FEN sign for holes: 'x'
+
   static get HasFlags() {
     return false;
   }
@@ -13,321 +25,37 @@ export const VariantRules = class WormholeRules extends ChessRules {
     return false;
   }
 
-  // Analyse in Hidden mode makes no sense
-  static get CanAnalyze() {
-    return false;
-  }
-
-  // Moves are revealed only when game ends
-  static get ShowMoves() {
-    return "none";
-  }
-
-  static get HIDDEN_DECODE() {
-    return {
-      s: "p",
-      t: "q",
-      u: "r",
-      c: "b",
-      o: "n",
-      l: "k"
-    };
-  }
-  static get HIDDEN_CODE() {
-    return {
-      p: "s",
-      q: "t",
-      r: "u",
-      b: "c",
-      n: "o",
-      k: "l"
-    };
-  }
-
-  // Turn a hidden piece or revealed piece into revealed piece:
-  static Decode(p) {
-    if (Object.keys(V.HIDDEN_DECODE).includes(p))
-      return V.HIDDEN_DECODE[p];
-    return p;
-  }
-
-  static get PIECES() {
-    return ChessRules.PIECES.concat(Object.values(V.HIDDEN_CODE));
+  getSquareAfter(sq, shift) {
+    // TODO
   }
 
-  // Pieces can be hidden :)
-  getPiece(i, j) {
-    const piece = this.board[i][j].charAt(1);
-    if (Object.keys(V.HIDDEN_DECODE).includes(piece))
-      return V.HIDDEN_DECODE[piece];
-    return piece;
-  }
-
-  // Scan board for kings positions (no castling)
-  scanKingsRooks(fen) {
-    this.kingPos = { w: [-1, -1], b: [-1, -1] };
-    const fenRows = V.ParseFen(fen).position.split("/");
-    for (let i = 0; i < fenRows.length; i++) {
-      let k = 0; //column index on board
-      for (let j = 0; j < fenRows[i].length; j++) {
-        switch (fenRows[i].charAt(j)) {
-          case "k":
-          case "l":
-            this.kingPos["b"] = [i, k];
-            break;
-          case "K":
-          case "L":
-            this.kingPos["w"] = [i, k];
-            break;
-          default: {
-            const num = parseInt(fenRows[i].charAt(j));
-            if (!isNaN(num)) k += num - 1;
-          }
-        }
-        k++;
-      }
-    }
-  }
-
-  getPpath(b, color, score) {
-    if (Object.keys(V.HIDDEN_DECODE).includes(b[1])) {
-      // Supposed to be hidden.
-      if (score == "*" && (!color || color != b[0]))
-        return "Hidden/" + b[0] + "p";
-      // Else: condition OK to show the piece
-      return b[0] + V.HIDDEN_DECODE[b[1]];
-    }
-    // The piece is already not supposed to be hidden:
+  getPpath(b) {
+    if (b.indexOf('x') >= 0)
+      return "Wormhole/hole.svg";
     return b;
   }
 
-  getBasicMove([sx, sy], [ex, ey], tr) {
-    if (
-      tr &&
-      Object.keys(V.HIDDEN_DECODE).includes(this.board[sx][sy].charAt(1))
-    ) {
-      // The transformed piece is a priori hidden
-      tr.p = V.HIDDEN_CODE[tr.p];
-    }
-    let mv = new Move({
-      appear: [
-        new PiPo({
-          x: ex,
-          y: ey,
-          c: tr ? tr.c : this.getColor(sx, sy),
-          p: tr ? tr.p : this.board[sx][sy].charAt(1)
-        })
-      ],
-      vanish: [
-        new PiPo({
-          x: sx,
-          y: sy,
-          c: this.getColor(sx, sy),
-          p: this.board[sx][sy].charAt(1)
-        })
-      ]
-    });
-
-    // The opponent piece disappears if we take it
-    if (this.board[ex][ey] != V.EMPTY) {
-      mv.vanish.push(
-        new PiPo({
-          x: ex,
-          y: ey,
-          c: this.getColor(ex, ey),
-          p: this.board[ex][ey].charAt(1)
-        })
-      );
-      // Pieces are revealed when they capture
-      mv.appear[0].p = V.Decode(mv.appear[0].p);
-    }
-
-    return mv;
-  }
-
-  // What are the king moves from square x,y ?
-  getPotentialKingMoves(sq) {
-    // No castling:
-    return this.getSlideNJumpMoves(
-      sq,
-      V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
-      "oneStep"
-    );
-  }
-
-  filterValid(moves) {
-    return moves;
-  }
-
-  static GenRandInitFen() {
-    let pieces = { w: new Array(8), b: new Array(8) };
-    // Shuffle pieces + pawns on two first ranks
-    for (let c of ["w", "b"]) {
-      let positions = ArrayFun.range(16);
-
-      // Get random squares for bishops
-      let randIndex = 2 * randInt(8);
-      const bishop1Pos = positions[randIndex];
-      // The second bishop must be on a square of different color
-      let randIndex_tmp = 2 * randInt(8) + 1;
-      const bishop2Pos = positions[randIndex_tmp];
-      // Remove chosen squares
-      positions.splice(Math.max(randIndex, randIndex_tmp), 1);
-      positions.splice(Math.min(randIndex, randIndex_tmp), 1);
-
-      // Get random squares for knights
-      randIndex = randInt(14);
-      const knight1Pos = positions[randIndex];
-      positions.splice(randIndex, 1);
-      randIndex = randInt(13);
-      const knight2Pos = positions[randIndex];
-      positions.splice(randIndex, 1);
-
-      // Get random squares for rooks
-      randIndex = randInt(12);
-      const rook1Pos = positions[randIndex];
-      positions.splice(randIndex, 1);
-      randIndex = randInt(11);
-      const rook2Pos = positions[randIndex];
-      positions.splice(randIndex, 1);
-
-      // Get random square for queen
-      randIndex = randInt(10);
-      const queenPos = positions[randIndex];
-      positions.splice(randIndex, 1);
-
-      // Get random square for king
-      randIndex = randInt(9);
-      const kingPos = positions[randIndex];
-      positions.splice(randIndex, 1);
-
-      // Pawns position are all remaining slots:
-      for (let p of positions)
-        pieces[c][p] = "s";
-
-      // Finally put the shuffled pieces in the board array
-      pieces[c][rook1Pos] = "u";
-      pieces[c][knight1Pos] = "o";
-      pieces[c][bishop1Pos] = "c";
-      pieces[c][queenPos] = "t";
-      pieces[c][kingPos] = "l";
-      pieces[c][bishop2Pos] = "c";
-      pieces[c][knight2Pos] = "o";
-      pieces[c][rook2Pos] = "u";
-    }
-    let upFen = pieces["b"].join("");
-    upFen = upFen.substr(0,8) + "/" + upFen.substr(8).split("").reverse().join("");
-    let downFen = pieces["b"].join("").toUpperCase();
-    downFen = downFen.substr(0,8) + "/" + downFen.substr(8).split("").reverse().join("");
-    return upFen + "/8/8/8/8/" + downFen + " w 0";
-  }
-
-  getCheckSquares() {
-    return [];
-  }
+  // TODO: postUpdateVars: board[start] = "xx"; --> V.HOLE
 
   updateVariables(move) {
     super.updateVariables(move);
-    if (
-      move.vanish.length >= 2 &&
-      [V.KING,V.HIDDEN_CODE[V.KING]].includes(move.vanish[1].p)
-    ) {
-      // We took opponent king
-      this.kingPos[this.turn] = [-1, -1];
-    }
   }
 
   unupdateVariables(move) {
     super.unupdateVariables(move);
-    const c = move.vanish[0].c;
-    const oppCol = V.GetOppCol(c);
-    if (this.kingPos[oppCol][0] < 0)
-      // Last move took opponent's king:
-      this.kingPos[oppCol] = [move.vanish[1].x, move.vanish[1].y];
-  }
-
-  getCurrentScore() {
-    const color = this.turn;
-    const kp = this.kingPos[color];
-    if (kp[0] < 0)
-      // King disappeared
-      return color == "w" ? "0-1" : "1-0";
-    // Assume that stalemate is impossible:
-    return "*";
-  }
-
-  getComputerMove() {
-    const color = this.turn;
-    let moves = this.getAllValidMoves();
-    for (let move of moves) {
-      move.eval = 0; //a priori...
-
-      // Can I take something ? If yes, do it with some probability
-      if (move.vanish.length == 2 && move.vanish[1].c != color) {
-        // OK this isn't a castling move
-        const myPieceVal = V.VALUES[move.appear[0].p];
-        const hisPieceVal = Object.keys(V.HIDDEN_DECODE).includes(move.vanish[1].p)
-          ? undefined
-          : V.VALUES[move.vanish[1].p];
-        if (!hisPieceVal) {
-          // Opponent's piece is unknown: do not take too much risk
-          move.eval = -myPieceVal + 1.5; //so that pawns always take
-        }
-        // Favor captures
-        else if (myPieceVal <= hisPieceVal)
-          move.eval = hisPieceVal - myPieceVal + 1;
-        else {
-          // Taking a pawn with minor piece,
-          // or minor piece or pawn with a rook,
-          // or anything but a queen with a queen,
-          // or anything with a king.
-          move.eval = hisPieceVal - myPieceVal;
-        }
-      } else {
-        // If no capture, favor small step moves,
-        // but sometimes move the knight anyway
-        const penalty = V.Decode(move.vanish[0].p) != V.KNIGHT
-          ? Math.abs(move.end.x - move.start.x) + Math.abs(move.end.y - move.start.y)
-          : (Math.random() < 0.5 ? 3 : 1);
-        move.eval -= penalty / (V.size.x + V.size.y - 1);
-      }
-
-      // TODO: also favor movements toward the center?
-    }
-
-    moves.sort((a, b) => b.eval - a.eval);
-    let candidates = [0];
-    for (let j = 1; j < moves.length && moves[j].eval == moves[0].eval; j++)
-      candidates.push(j);
-    return moves[candidates[randInt(candidates.length)]];
   }
 
   getNotation(move) {
-    // Translate final square
-    const finalSquare = V.CoordsToSquare(move.end);
-
     const piece = this.getPiece(move.start.x, move.start.y);
-    if (piece == V.PAWN) {
-      // Pawn move
-      let notation = "";
-      if (move.vanish.length > move.appear.length) {
-        // Capture
-        const startColumn = V.CoordToColumn(move.start.y);
-        notation = startColumn + "x" + finalSquare;
-      }
-      else notation = finalSquare;
-      if (move.appear.length > 0 && !["p","s"].includes(move.appear[0].p)) {
-        // Promotion
-        const appearPiece = V.Decode(move.appear[0].p);
-        notation += "=" + appearPiece.toUpperCase();
-      }
-      return notation;
-    }
-    // Piece movement
-    return (
+    // Indicate start square + dest square, because holes distort the board
+    let notation =
       piece.toUpperCase() +
+      V.CoordsToSquare(move.start) +
       (move.vanish.length > move.appear.length ? "x" : "") +
-      finalSquare
-    );
+      V.CoordsToSquare(move.end);
+    if (piece == V.PAWN && move.appear[0].p != V.PAWN)
+      // Promotion
+      notation += "=" + move.appear[0].p.toUpperCase();
+    return notation;
   }
 };
index 51e0634..f93b5b3 100644 (file)
@@ -58,7 +58,6 @@ main
   BaseGame(
     ref="basegame"
     :game="game"
-    :vr="vr"
     @newmove="processMove"
     @gameover="gameOver"
   )
@@ -73,6 +72,8 @@ import { ppt } from "@/utils/datetime";
 import { extractTime } from "@/utils/timeControl";
 import { getRandString } from "@/utils/alea";
 import { processModalClick } from "@/utils/modalClick";
+import { getFullNotation } from "@/utils/notation";
+import { playMove, getFilteredMove } from "@/utils/playUndo";
 import { getScoreMessage } from "@/utils/scoring";
 import params from "@/parameters";
 export default {
@@ -321,20 +322,24 @@ export default {
         case "lastate": //got opponent infos about last move
           this.lastate = data.data;
           if (this.game.rendered)
-            //game is rendered (Board component)
+            // Game is rendered (Board component)
             this.processLastate();
-          //else: will be processed when game is ready
+          // Else: will be processed when game is ready
           break;
         case "newmove": {
           const move = data.data;
           if (move.cancelDrawOffer) {
-            //opponent refuses draw
+            // Opponent refuses draw
             this.drawOffer = "";
             // NOTE for corr games: drawOffer reset by player in turn
             if (this.game.type == "live" && !!this.game.mycolor)
               GameStorage.update(this.gameRef.id, { drawOffer: "" });
           }
-          this.$refs["basegame"].play(move, "received");
+          this.$refs["basegame"].play(
+            move.move,
+            "received",
+            null,
+            {addTime:move.addTime});
           break;
         }
         case "resign":
@@ -372,8 +377,10 @@ export default {
       if (data.movesCount > L) {
         // Just got last move from him
         this.$refs["basegame"].play(
-          Object.assign({ initime: data.initime }, data.lastMove)
-        );
+          data.lastMove.move,
+          "received",
+          null,
+          {addTime:data.lastMove.addTime, initime:data.initime});
       }
       if (data.drawSent) this.drawOffer = "received";
       if (data.score != "*") {
@@ -392,7 +399,7 @@ export default {
         this.send("draw", { data: message });
         this.gameOver("1/2", message);
       } else if (this.drawOffer == "") {
-        //no effect if drawOffer == "sent"
+        // No effect if drawOffer == "sent"
         if (this.game.mycolor != this.vr.turn) {
           alert(this.st.tr["Draw offer only in your turn"]);
           return;
@@ -444,10 +451,10 @@ export default {
           // NOTE: clocks in seconds, initime in milliseconds
           game.clocks = [tc.mainTime, tc.mainTime];
           game.moves.sort((m1, m2) => m1.idx - m2.idx); //in case of
+          const L = game.moves.length;
           if (game.score == "*") {
-            //otherwise no need to bother with time
+            // Set clocks + initime
             game.initime = [0, 0];
-            const L = game.moves.length;
             if (L >= 3) {
               let addTime = [0, 0];
               for (let i = 2; i < L; i++) {
@@ -465,16 +472,16 @@ export default {
           });
           if (myIdx >= 0 && game.score == "*" && game.chats.length > 0) {
             // Did a chat message arrive after my last move?
-            let vr_tmp = new V(game.fen); //start from last position
-            const flags = V.ParseFen(game.fen).flags; //may be undefined
             let dtLastMove = 0;
-            for (let midx = game.moves.length - 1; midx >= 0; midx--) {
-              // NOTE: flags could be wrong, but since our only concern is turn,
-              // this should be enough. (TODO?)
-              vr_tmp.undo(Object.assign({flags:JSON.stringify(flags)}, game.moves[midx].squares));
-              if (vr_tmp.turn == mycolor) {
-                dtLastMove = game.moves[midx].played;
-                break;
+            if (L == 1 && myIdx == 0)
+              dtLastMove = game.moves[0].played;
+            else if (L >= 2) {
+              if (L % 2 == 0) {
+                // It's now white turn
+                dtLastMove = game.moves[L-1-(1-myIdx)].played;
+              } else {
+                // Black turn:
+                dtLastMove = game.moves[L-1-myIdx].played;
               }
             }
             if (dtLastMove < game.chats[0].added)
@@ -517,30 +524,17 @@ export default {
         }
         this.repeat = {}; //reset: scan past moves' FEN:
         let repIdx = 0;
-        // NOTE: vr_tmp to obtain FEN strings is redundant with BaseGame
         let vr_tmp = new V(game.fenStart);
-        let movesCount = -1;
         let curTurn = "n";
         game.moves.forEach(m => {
-          if (vr_tmp.turn != curTurn)
-          {
-            movesCount++;
-            curTurn = vr_tmp.turn;
-          }
-          vr_tmp.play(m);
-          const fenObj = V.ParseFen(vr_tmp.getFen());
-          repIdx = fenObj.position + "_" + fenObj.turn;
-          if (fenObj.flags) repIdx += "_" + fenObj.flags;
-          this.repeat[repIdx] = this.repeat[repIdx]
-            ? this.repeat[repIdx] + 1
+          playMove(m, vr_tmp);
+          const fenIdx = vr_tmp.getFen().replace(/ /g, "_");
+          this.repeat[fenIdx] = this.repeat[fenIdx]
+            ? this.repeat[fenIdx] + 1
             : 1;
         });
-        if (vr_tmp.turn != curTurn)
-          movesCount++;
         if (this.repeat[repIdx] >= 3) this.drawOffer = "threerep";
         this.game = Object.assign(
-          {},
-          game,
           // NOTE: assign mycolor here, since BaseGame could also be VS computer
           {
             type: gtype,
@@ -550,8 +544,9 @@ export default {
             // at least oppsid or oppid is available anyway:
             oppsid: myIdx < 0 ? undefined : game.players[1 - myIdx].sid,
             oppid: myIdx < 0 ? undefined : game.players[1 - myIdx].uid,
-            movesCount: movesCount,
-          }
+            movesCount: game.moves.length
+          },
+          game,
         );
         this.re_setClocks();
         this.$nextTick(() => {
@@ -612,110 +607,111 @@ export default {
       }, 1000);
     },
     // Post-process a (potentially partial) move (which was just played in BaseGame)
-    processMove: function(move) {
-      if (this.game.type == "corr" && move.color == this.game.mycolor) {
-        if (
-          !confirm(
-            this.st.tr["Move played:"] +
-              " " +
-              move.notation +
-              "\n" +
-              this.st.tr["Are you sure?"]
-          )
-        ) {
-          this.$refs["basegame"].undo(move);
-          return;
+    processMove: function(move, data) {
+      const moveCol = this.vr.turn;
+      const doProcessMove = () => {
+        const colorIdx = ["w", "b"].indexOf(moveCol);
+        const nextIdx = 1 - colorIdx;
+        if (this.game.mycolor) {
+          // NOTE: 'var' to see that variable outside this block
+          var filtered_move = getFilteredMove(move);
         }
-      }
-      const colorIdx = ["w", "b"].indexOf(move.color);
-      const nextIdx = ["w", "b"].indexOf(this.vr.turn);
-      // https://stackoverflow.com/a/38750895
-      if (this.game.mycolor) {
-        const allowed_fields = ["appear", "vanish", "start", "end"];
-        // NOTE: 'var' to see that variable outside this block
-        var filtered_move = Object.keys(move)
-          .filter(key => allowed_fields.includes(key))
-          .reduce((obj, key) => {
-            obj[key] = move[key];
-            return obj;
-          }, {});
-      }
-      // Send move ("newmove" event) to people in the room (if our turn)
-      let addTime = 0;
-      if (move.color == this.game.mycolor) {
-        if (this.drawOffer == "received")
-          // I refuse draw
-          this.drawOffer = "";
-        if (this.game.movesCount >= 2) {
-          const elapsed = Date.now() - this.game.initime[colorIdx];
-          // elapsed time is measured in milliseconds
-          addTime = this.game.increment - elapsed / 1000;
+        // Send move ("newmove" event) to people in the room (if our turn)
+        let addTime = data ? data.addTime : 0;
+        if (moveCol == this.game.mycolor) {
+          if (this.drawOffer == "received")
+            // I refuse draw
+            this.drawOffer = "";
+          if (this.game.movesCount >= 2) {
+            const elapsed = Date.now() - this.game.initime[colorIdx];
+            // elapsed time is measured in milliseconds
+            addTime = this.game.increment - elapsed / 1000;
+          }
+          const sendMove = {
+            move: filtered_move,
+            addTime: addTime,
+            cancelDrawOffer: this.drawOffer == ""
+          };
+          this.send("newmove", { data: sendMove });
         }
-        const sendMove = Object.assign({}, filtered_move, {
-          addTime: addTime,
-          cancelDrawOffer: this.drawOffer == ""
-        });
-        this.send("newmove", { data: sendMove });
-        // (Add)Time indication: useful in case of lastate infos requested
-        move.addTime = addTime;
-      } else addTime = move.addTime; //supposed transmitted
-      // Update current game object:
-      if (nextIdx != colorIdx)
+        // Update current game object (no need for moves stack):
+        playMove(move, this.vr);
         this.game.movesCount++;
-      this.game.moves.push(move);
-      this.game.fen = move.fen;
-      this.game.clocks[colorIdx] += addTime;
-      // move.initime is set only when I receive a "lastate" move from opponent
-      this.game.initime[nextIdx] = move.initime || Date.now();
-      this.re_setClocks();
-      // If repetition detected, consider that a draw offer was received:
-      const fenObj = V.ParseFen(move.fen);
-      let repIdx = fenObj.position + "_" + fenObj.turn;
-      if (fenObj.flags) repIdx += "_" + fenObj.flags;
-      this.repeat[repIdx] = this.repeat[repIdx] ? this.repeat[repIdx] + 1 : 1;
-      if (this.repeat[repIdx] >= 3) this.drawOffer = "threerep";
-      else if (this.drawOffer == "threerep") this.drawOffer = "";
-      // Since corr games are stored at only one location, update should be
-      // done only by one player for each move:
-      if (
-        this.game.mycolor &&
-        (this.game.type == "live" || move.color == this.game.mycolor)
-      ) {
-        let drawCode = "";
-        switch (this.drawOffer) {
-          case "threerep":
-            drawCode = "t";
-            break;
-          case "sent":
-            drawCode = this.game.mycolor;
-            break;
-          case "received":
-            drawCode = this.vr.turn;
-            break;
-        }
-        if (this.game.type == "corr") {
-          GameStorage.update(this.gameRef.id, {
-            fen: move.fen,
-            move: {
-              squares: filtered_move,
-              played: Date.now(),
-              idx: this.game.moves.length - 1
-            },
-            // Code "n" for "None" to force reset (otherwise it's ignored)
-            drawOffer: drawCode || "n"
-          });
-        }
-        else {
-          // Live game:
-          GameStorage.update(this.gameRef.id, {
-            fen: move.fen,
-            move: filtered_move,
-            clocks: this.game.clocks,
-            initime: this.game.initime,
-            drawOffer: drawCode
-          });
+        // (add)Time indication: useful in case of lastate infos requested
+        this.game.moves.push({move:move, addTime:addTime});
+        this.game.fen = this.vr.getFen();
+        this.game.clocks[colorIdx] += addTime;
+        // data.initime is set only when I receive a "lastate" move from opponent
+        this.game.initime[nextIdx] = (data && data.initime) ? data.initime : Date.now();
+        this.re_setClocks();
+        // If repetition detected, consider that a draw offer was received:
+        const fenObj = V.ParseFen(this.game.fen);
+        let repIdx = fenObj.position + "_" + fenObj.turn;
+        if (fenObj.flags) repIdx += "_" + fenObj.flags;
+        this.repeat[repIdx] = this.repeat[repIdx] ? this.repeat[repIdx] + 1 : 1;
+        if (this.repeat[repIdx] >= 3) this.drawOffer = "threerep";
+        else if (this.drawOffer == "threerep") this.drawOffer = "";
+        // Since corr games are stored at only one location, update should be
+        // done only by one player for each move:
+        if (
+          this.game.mycolor &&
+          (this.game.type == "live" || moveCol == this.game.mycolor)
+        ) {
+          let drawCode = "";
+          switch (this.drawOffer) {
+            case "threerep":
+              drawCode = "t";
+              break;
+            case "sent":
+              drawCode = this.game.mycolor;
+              break;
+            case "received":
+              drawCode = V.GetOppCol(this.game.mycolor);
+              break;
+          }
+          if (this.game.type == "corr") {
+            GameStorage.update(this.gameRef.id, {
+              fen: this.game.fen,
+              move: {
+                squares: filtered_move,
+                played: Date.now(),
+                idx: this.game.moves.length - 1
+              },
+              // Code "n" for "None" to force reset (otherwise it's ignored)
+              drawOffer: drawCode || "n"
+            });
+          }
+          else {
+            // Live game:
+            GameStorage.update(this.gameRef.id, {
+              fen: this.game.fen,
+              move: filtered_move,
+              clocks: this.game.clocks,
+              initime: this.game.initime,
+              drawOffer: drawCode
+            });
+          }
         }
+      };
+      if (this.game.type == "corr" && moveCol == this.game.mycolor) {
+        setTimeout(() => {
+          if (
+            !confirm(
+              this.st.tr["Move played:"] +
+                " " +
+                getFullNotation(move) +
+                "\n" +
+                this.st.tr["Are you sure?"]
+            )
+          ) {
+            this.$refs["basegame"].cancelLastMove();
+            return;
+          }
+          doProcessMove();
+        // Let small time to finish drawing current move attempt:
+        }, 500);
       }
+      else doProcessMove();
     },
     resetChatColor: function() {
       // TODO: this is called twice, once on opening an once on closing
index 30d3356..2d6ac69 100644 (file)
@@ -99,7 +99,6 @@ main
   BaseGame(
     v-if="showOne"
     :game="game"
-    :vr="vr"
   )
 </template>
 
@@ -139,7 +138,6 @@ export default {
       onlyMines: false,
       showOne: false,
       infoMsg: "",
-      vr: null, //"variant rules" object initialized from FEN
       game: {
         players: [{ name: "Problem" }, { name: "Problem" }],
         mode: "analyze"
@@ -280,9 +278,8 @@ export default {
     showProblem: function(p) {
       this.loadVariant(p.vid, () => {
         // The FEN is already checked at this stage:
-        this.vr = new V(p.fen);
         this.game.vname = p.vname;
-        this.game.mycolor = this.vr.turn; //diagram orientation
+        this.game.mycolor = V.ParseFen(p.fen).turn; //diagram orientation
         this.game.fen = p.fen;
         this.$set(this.game, "fenStart", p.fen);
         this.copyProblem(p, this.curproblem);