Add Madrasi, fix Absorption, better pieces management
authorBenjamin Auder <benjamin.auder@somewhere>
Mon, 2 May 2022 07:52:20 +0000 (09:52 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Mon, 2 May 2022 07:52:20 +0000 (09:52 +0200)
51 files changed:
base_pieces.css
base_rules.js
pieces/black_amazon.svg [new file with mode: 0644]
pieces/black_bishop.svg [new file with mode: 0644]
pieces/black_empress.svg [new file with mode: 0644]
pieces/black_king.svg [new file with mode: 0644]
pieces/black_king_bishop.svg [new file with mode: 0644]
pieces/black_king_knight.svg [new file with mode: 0644]
pieces/black_king_pawn.svg [new file with mode: 0644]
pieces/black_king_queen.svg [new file with mode: 0644]
pieces/black_king_rook.svg [new file with mode: 0644]
pieces/black_knight.svg [new file with mode: 0644]
pieces/black_pawn.svg [new file with mode: 0644]
pieces/black_princess.svg [new file with mode: 0644]
pieces/black_queen.svg [new file with mode: 0644]
pieces/black_rook.svg [new file with mode: 0644]
pieces/white_amazon.svg [new file with mode: 0644]
pieces/white_bishop.svg [new file with mode: 0644]
pieces/white_empress.svg [new file with mode: 0644]
pieces/white_king.svg [new file with mode: 0644]
pieces/white_king_bishop.svg [new file with mode: 0644]
pieces/white_king_knight.svg [new file with mode: 0644]
pieces/white_king_pawn.svg [new file with mode: 0644]
pieces/white_king_queen.svg [new file with mode: 0644]
pieces/white_king_rook.svg [new file with mode: 0644]
pieces/white_knight.svg [new file with mode: 0644]
pieces/white_pawn.svg [new file with mode: 0644]
pieces/white_princess.svg [new file with mode: 0644]
pieces/white_queen.svg [new file with mode: 0644]
pieces/white_rook.svg [new file with mode: 0644]
server.js
variants.js
variants/Absorption/class.js
variants/Absorption/pieces.css [deleted file]
variants/Absorption/rules.html [new file with mode: 0644]
variants/Absorption/style.css
variants/Atomic/style.css
variants/Balanced/style.css
variants/Benedict/style.css
variants/Cannibal/style.css
variants/Capture/style.css
variants/Chakart/style.css
variants/Chess960/style.css
variants/Crazyhouse/style.css
variants/Cylinder/style.css
variants/Dark/style.css
variants/Doublemove/style.css
variants/Madrasi/class.js [new file with mode: 0644]
variants/Madrasi/rules.html [new file with mode: 0644]
variants/Madrasi/style.css [new file with mode: 0644]
variants/Zen/style.css

index 207228c..6e9938e 100644 (file)
@@ -1,67 +1,70 @@
 /** Embedded SVGs for all chess pieces */
 /** Embedded SVGs for all chess pieces */
-piece.pawn.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==');
+piece.black.pawn {
+  background-image: url('/pieces/black_pawn.svg');
 }
 }
-piece.bishop.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PC9nPjwvc3ZnPg==');
+piece.black.rook {
+  background-image: url('/pieces/black_rook.svg');
 }
 }
-piece.knight.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPg==');
+piece.black.knight {
+  background-image: url('/pieces/black_knight.svg');
 }
 }
-piece.rook.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy0zdi00aDIxdjRIMTJ6bS0xLTIyVjloNHYyaDVWOWg1djJoNVY5aDR2NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMzQgMTRsLTMgM0gxNGwtMy0zIi8+PHBhdGggZD0iTTMxIDE3djEyLjVIMTRWMTciIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMxIDI5LjVsMS41IDIuNWgtMjBsMS41LTIuNSIvPjxwYXRoIGQ9Ik0xMSAxNGgyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=');
+piece.black.bishop {
+  background-image: url('/pieces/black_bishop.svg');
 }
 }
-piece.queen.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik04IDEyYTIgMiAwIDEgMS00IDAgMiAyIDAgMSAxIDQgMHptMTYuNS00LjVhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAwek00MSAxMmEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTE2IDguNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTMzIDlhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAweiIvPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi0xMi03IDExVjExbC01LjUgMTMuNS0zLTE1LTMgMTUtNS41LTE0VjI1TDcgMTRsMiAxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTkgMjZjMCAyIDEuNSAyIDIuNSA0IDEgMS41IDEgMSAuNSAzLjUtMS41IDEtMS41IDIuNS0xLjUgMi41LTEuNSAxLjUuNSAyLjUuNSAyLjUgNi41IDEgMTYuNSAxIDIzIDAgMCAwIDEuNS0xIDAtMi41IDAgMCAuNS0xLjUtMS0yLjUtLjUtMi41LS41LTIgLjUtMy41IDEtMiAyLjUtMiAyLjUtNC04LjUtMS41LTE4LjUtMS41LTI3IDB6IiBzdHJva2UtbGluZWNhcD0iYnV0dCIvPjxwYXRoIGQ9Ik0xMS41IDMwYzMuNS0xIDE4LjUtMSAyMiAwTTEyIDMzLjVjNi0xIDE1LTEgMjEgMCIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz4=');
+piece.black.queen {
+  background-image: url('/pieces/black_queen.svg');
 }
 }
-piece.king.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjZNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTEuNSAzN2M1LjUgMy41IDE1LjUgMy41IDIxIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0VjI3di0zLjVjLTMuNS03LjUtMTMtMTAuNS0xNi00LTMgNiA1IDEwIDUgMTBWMzd6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExLjUgMzBjNS41LTMgMTUuNS0zIDIxIDBtLTIxIDMuNWM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwIi8+PC9nPjwvc3ZnPg==');
+piece.black.king {
+  background-image: url('/pieces/black_king.svg');
 }
 }
-piece.pawn.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==');
+
+piece.white.pawn {
+  background-image: url('/pieces/white_pawn.svg');
 }
 }
-piece.bishop.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48L2c+PC9zdmc+');
+piece.white.rook {
+  background-image: url('/pieces/white_rook.svg');
 }
 }
-piece.knight.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjZWNlY2VjIiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMjQuNTUgMTAuNGwtLjQ1IDEuNDUuNS4xNWMzLjE1IDEgNS42NSAyLjQ5IDcuOSA2Ljc1UzM1Ljc1IDI5LjA2IDM1LjI1IDM5bC0uMDUuNWgyLjI1bC4wNS0uNWMuNS0xMC4wNi0uODgtMTYuODUtMy4yNS0yMS4zNC0yLjM3LTQuNDktNS43OS02LjY0LTkuMTktNy4xNmwtLjUxLS4xeiIgZmlsbD0iI2VjZWNlYyIgc3Ryb2tlPSJub25lIi8+PC9nPjwvc3ZnPg==');
+piece.white.knight {
+  background-image: url('/pieces/white_knight.svg');
 }
 }
-piece.rook.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy41LTdsMS41LTIuNWgxN2wxLjUgMi41aC0yMHptLS41IDR2LTRoMjF2NEgxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE0IDI5LjV2LTEzaDE3djEzSDE0eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTQgMTYuNUwxMSAxNGgyM2wtMyAyLjVIMTR6TTExIDE0VjloNHYyaDVWOWg1djJoNVY5aDR2NUgxMXoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTEyIDM1LjVoMjFtLTIwLTRoMTltLTE4LTJoMTdtLTE3LTEzaDE3TTExIDE0aDIzIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=');
+piece.white.bishop {
+  background-image: url('/pieces/white_bishop.svg');
 }
 }
-piece.queen.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIHN0cm9rZT0ibm9uZSI+PGNpcmNsZSBjeD0iNiIgY3k9IjEyIiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMTQiIGN5PSI5IiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjgiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzMSIgY3k9IjkiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjEyIiByPSIyLjc1Ii8+PC9nPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi41LTEyLjVMMzEgMjVsLS4zLTE0LjEtNS4yIDEzLjYtMy0xNC41LTMgMTQuNS01LjItMTMuNkwxNCAyNSA2LjUgMTMuNSA5IDI2eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNOSAyNmMwIDIgMS41IDIgMi41IDQgMSAxLjUgMSAxIC41IDMuNS0xLjUgMS0xLjUgMi41LTEuNSAyLjUtMS41IDEuNS41IDIuNS41IDIuNSA2LjUgMSAxNi41IDEgMjMgMCAwIDAgMS41LTEgMC0yLjUgMCAwIC41LTEuNS0xLTIuNS0uNS0yLjUtLjUtMiAuNS0zLjUgMS0yIDIuNS0yIDIuNS00LTguNS0xLjUtMTguNS0xLjUtMjcgMHoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTExIDM4LjVhMzUgMzUgMSAwIDAgMjMgMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMTEgMjlhMzUgMzUgMSAwIDEgMjMgMG0tMjEuNSAyLjVoMjBtLTIxIDNhMzUgMzUgMSAwIDAgMjIgMG0tMjMgM2EzNSAzNSAxIDAgMCAyNCAwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiLz48L2c+PC9zdmc+');
+piece.white.queen {
+  background-image: url('/pieces/white_queen.svg');
 }
 }
-piece.king.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjYiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBmaWxsPSIjMDAwIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjxwYXRoIGQ9Ik0xMS41IDM3YzUuNSAzLjUgMTUuNSAzLjUgMjEgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMy41LTcuNS0xMy0xMC41LTE2LTQtMyA2IDUgMTAgNSAxMFYzN3oiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMyIDI5LjVzOC41LTQgNi4wMy05LjY1QzM0LjE1IDE0IDI1IDE4IDIyLjUgMjQuNWwuMDEgMi4xLS4wMS0yLjFDMjAgMTggOS45MDYgMTQgNi45OTcgMTkuODVjLTIuNDk3IDUuNjUgNC44NTMgOSA0Ljg1MyA5IiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMTEuNSAzMGM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwbS0yMSAzLjVjNS41LTMgMTUuNS0zIDIxIDAiIHN0cm9rZT0iI2VjZWNlYyIvPjwvZz48L3N2Zz4=');
+piece.white.king {
+  background-image: url('/pieces/white_king.svg');
 }
 }
-piece.king-pawn.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjA0OCAyMDQ4Ij4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDI0IDIwNWgtNTQwcS00MCAxMDAtNDAgMjA5IDAgMTg1IDEwNSAzMzJ0MjcwIDIxMHEtNzEgMzMtMTE1IDk5dC00NSAxNTFxMCAxMDUgNzAgMTgydDE3MiA4OXEtODEgNjEtODEgMTYxIDAgODQgNTkgMTQ0dDE0NSA2MHE4NCAwIDE0NC02MHQ2MC0xNDRxMC0xMDAtODEtMTYxIDEwMi0xMiAxNzItODl0NzAtMTgycTAtODQtNDUtMTUwdC0xMTYtMTAwcTE2NS02MyAyNzAtMjEwdDEwNS0zMzJxMC0xMDgtMzktMjA5aC01NDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+Cjwvc3ZnPgo=');
+
+piece.black.king-pawn {
+  background-image: url('/pieces/black_king_pawn.svg');
 }
 }
-piece.king-rook.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTExNjEgMTcwNmgxNzB2MTM3aDI3NHYtMzc1bC0yMjItMTcxdi00NzhsMTcwLTE3MHYtMjA1aDE1M3YtMjM5aC0xMzY1djIzOWgxNTN2MjA1bDE3MSAxNzB2NDc4bC0yMjIgMTcxdjM3NWgyNzN2LTEzN2gxNzF2MTM3aDI3NHYtMTM3em0tNTk3LTEyNDZ2LTEwMmg5MjB2MTAyaC05MjB6bTQ2MCAxMDkyaC01MTJ2LTQ2bDczLTU1aDg3OWw3MSA1NXY0NmgtNTExem0wLTE2OWgtMzUwbDYwLTQ3di01N2g1ODB2NTdsNjAgNDdoLTM1MHptMC01NDZoLTI5MHYtNDZsLTYwLTU4aDcwMGwtNjAgNTh2NDZoLTI5MHptMC0xNzJoLTQxNGwtNDYtNDN2LTU4aDkyMHY1OGwtNDYgNDNoLTQxNHoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNhMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTU2NCAxNTg4djEwMmg5MjB2LTEwMmgtOTIweiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCA0OTZoLTUxMnY0Nmw3MyA1NWg4NzlsNzEtNTV2LTQ2aC01MTF6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDI0IDY2NWgtMzUwbDYwIDQ3djU3aDU4MHYtNTdsNjAtNDdoLTM1MHoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTIxMWgtMjkwdjQ2bC02MCA1OGg3MDBsLTYwLTU4di00NmgtMjkweiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxMzgzaC00MTRsLTQ2IDQzdjU4aDkyMHYtNThsLTQ2LTQzaC00MTR6IiBkaXNwbGF5PSJibG9jayIvPgogPC9nPgo8L3N2Zz4K');
+piece.black.king-rook {
+  background-image: url('/pieces/black_king_rook.svg');
 }
 }
-piece.king-knight.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTQ5MCA2ODNxNCA5IDEzIDI3IDE3IDQyIDE3IDUwLTIgMjgtMjkgMjgtMjAgMC00Ny01Ny00LTgtMTItMTQtMjctMjggOC00NyAzMi0xOSA1MCAxM3ptNTkwIDM3MXE3MCA5MiA2OSAyMDUtNCAzMy0zOCAzMy00NiAwLTM2LTM0IDMtNTUtMTEtOTEtMjMtNTctNTEtODUtMTUtMzAgMTgtNDQgMzItMTUgNDkgMTZ6bS0yNjEgNDg4cS01IDM2IDIgNzgtNjAtMTItMTEzLTU2LTMyLTE3LTE1LTQ3IDE3LTMxIDQ3LTEwIDIxIDExIDM4IDIwdDQxIDE1em05MzctMTI2OHEtMSAwIDIgNTR0MyAxMThxMSAxMjUgMCAyNTh0LTM2IDI2N3EtMzQgMTI4LTc1IDIxOHQtODkgMTU3cS03MiAxMDgtMTk2IDE4M3QtMjU5IDk4cTQtMjMgMy00N3QwLTQ2cTk3LTMzIDE4My04MnQxMjYtMTA2cTQ4LTY2IDg5LTE1NnQ3NS0yMTlxMzQtMTMzIDM1LTI2NnQxLTI1OXEwLTYzLTMtMTE3dDAtNTVoMTQxem0tNjc3IDE0MjNxMTU3LTEwIDI5MS04MXQyMjgtMTgycTY2LTc4IDEyNC0xODh0OTQtMjMzcTQwLTE0MyA1MC0zMDB0MTEtMjkydi0yMTh0LTE1NSAwLTQwNCAwaC02NzFxLTkgMC05IDQ5dDcgNzlxNCAyNCAxOSA2OHQ1MCAxMDdxMTYgMzIgNzYgOTN0MTM4IDE0M3E0NSA0NiA3MCAxMTZ0MjIgMTI3cS0zNy0zMC04MS00OS0yMTItNzYtMzA3LTIyMC03LTktNDUtODEtMjAtMzgtMzQtNTItMTktMTktNTUtMjEtNTYtMy04NyA1NC00Mi0xMi03NS0xMC01NiAyMS04MSA0NS01MSA1MS02NiAxMDJ0LTE2IDExMHEwIDg0IDEwNCAyMjIgMTIyIDE1OSAxMzAgMjQyIDAgMzYgNyA4MSA2IDMxIDI1IDYwIDEzIDIwIDE3IDI3dDE3IDIzcTkgMTIgMTUgMTh0MTUgMThxMTEgMTMgMjggMzAtNTMgMTQ2LTQzIDMwMSAxOTktNzEgMzM0LTIyMyAzMyAxMTMgMTMwIDE4MyA4MC01NiAxMjctMTQ4em0tNjc1LTgzNnEyOSAyMCA2IDQ4LTI0IDIzLTUzIDQtNjEtNDAtNjUtMTA1IDEtMzMgMzktMzEgMzYgMyAzNSAzNyA4IDMyIDM4IDQ3em0yNTIgNDk4cTIyIDExIDIyIDExIDMwIDEyIDE5IDQ0LTEyIDMwLTQ2IDIwLTExOC00My0xNjMtMTU4LTctMzMgMjQtNDUgMzEtMTAgNDIgMjIgOCAxNyAxMiAyMiAxMS05IDI5LTEyIDYxLTEwIDcxIDU0IDMgMjItMTAgNDJ6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+CiA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNmZmYiPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im00OTAgMTM2NXE0LTkgMTMtMjcgMTctNDIgMTctNTAtMi0yOC0yOS0yOC0yMCAwLTQ3IDU3LTQgOC0xMiAxNC0yNyAyOCA4IDQ3IDMyIDE5IDUwLTEzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTA4MCA5OTRxNzAtOTIgNjktMjA1LTQtMzMtMzgtMzMtNDYgMC0zNiAzNCAzIDU1LTExIDkxLTIzIDU3LTUxIDg1LTE1IDMwIDE4IDQ0IDMyIDE1IDQ5LTE2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtODE5IDUwNnEtNS0zNiAyLTc4LTYwIDEyLTExMyA1Ni0zMiAxNy0xNSA0NyAxNyAzMSA0NyAxMCAyMS0xMSAzOC0yMHQ0MS0xNXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE3NTYgMTc3NHEtMSAwIDItNTR0My0xMThxMS0xMjUgMC0yNTh0LTM2LTI2N3EtMzQtMTI4LTc1LTIxOHQtODktMTU3cS03Mi0xMDgtMTk2LTE4M3QtMjU5LTk4cTQgMjMgMyA0N3QwIDQ2cTk3IDMzIDE4MyA4MnQxMjYgMTA2cTQ4IDY2IDg5IDE1NnQ3NSAyMTlxMzQgMTMzIDM1IDI2NnQxIDI1OXEwIDYzLTMgMTE3dDAgNTVoMTQxeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtNDA0IDExODdxMjktMjAgNi00OC0yNC0yMy01My00LTYxIDQwLTY1IDEwNSAxIDMzIDM5IDMxIDM2LTMgMzUtMzcgOC0zMiAzOC00N3oiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTY1NiA2ODlxMjItMTEgMjItMTEgMzAtMTIgMTktNDQtMTItMzAtNDYtMjAtMTE4IDQzLTE2MyAxNTgtNyAzMyAyNCA0NSAzMSAxMCA0Mi0yMiA4LTE3IDEyLTIyIDExIDkgMjkgMTIgNjEgMTAgNzEtNTQgMy0yMi0xMC00MnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo=');
+piece.black.king-knight {
+  background-image: url('/pieces/black_king_knight.svg');
 }
 }
-piece.king-bishop.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEyOTAgNTgybC00MiAxMDJxLTEwMiAyMi0yMjQgMjItMTIxIDAtMjIyLTIybC00Mi0xMDFxMTI0IDMxIDI2NCAzMSAxMzggMCAyNjYtMzJ6bS04NCAyMDZsLTI5IDcwdjI3cS03NiAxMS0xNTMgMTEtNzUgMC0xNTItMTFsLTEtMjctMjctNzBxODUgMTUgMTgwIDE1IDk2IDAgMTgyLTE1em0tMzUtMzc4cS00MCAzMC04MCA5NWgtMzJxMC00OSAyMy05NWg4OXptLTIwNiAwcTIzIDQ5IDIzIDk1aC0zMnEtMzktNjQtODEtOTVoOTB6bTU5LTE4cS0xNC01Ny0zNC03OXQtNTMtNDZxLTM2LTI1LTg1LTQydC0xMDktOWwtMjgxIDM5cS0xNyAyLTMwIDB0LTI2LTJxLTIxIDAtNTMtOXQtNTEtMjhsLTk3IDE1OXExOCAyMCAzMiAyOHQzMyAxN3E1OCAyNyAxMjQgMzMgMjggMiA1NSAxdDU2IDJxNTQtOSAxMDgtMTZ0MTEwLTE2cTYwIDAgODEgMTIgMTEgNiAzNSAyMnQ0OCA0N3EtNTMgNi0xMDggMjB0LTk3IDMxbDEwNCAyNThxLTc4IDQ1LTEwOSA3MnQtNDkgNjRxLTI2IDQ2LTMzIDg5dC03IDc3cTEgNjAgMjggMTMydDEwNCAxMzBxNjMgNDggMTIzIDk5dDExOSAxMTlxLTc0IDM4LTc0IDEyMSAwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC04Mi03NC0xMjEgNTgtNjggMTE3LTExOXQxMjUtOTlxNzUtNTcgMTAyLTEyOXQyOS0xMzNxMC0zNC03LTc3dC0zMi04OXEtMjAtMzYtNTAtNjN0LTEwOC03M2wxMDQtMjU4cS00NC0xNi05OS0zMHQtMTA2LTIxcTIzLTMxIDQ3LTQ3dDM2LTIycTIxLTEyIDgxLTEyIDU0IDggMTA4IDE1dDExMCAxN3EyNy0zIDU0LTJ0NTctMXE2NC02IDEyNC0zMyAxOC05IDMyLTE3dDMzLTI4bC05OC0xNTlxLTE4IDE4LTUwIDI3dC01MyAxMHEtMTMgMC0yNiAydC0zMSAwbC0yODAtMzlxLTYwLTktMTExIDh0LTg1IDQ1cS0zMyAyNy01MiA0NnQtMzMgNzd6bS0zNyA3NDR2LTg1cTAtMzcgMzctMzd0MzcgMzd2ODZoOTBxMzUgMCAzNSAzNnQtMzUgMzZoLTkwdjkwcTAgMzctMzcgMzd0LTM3LTM3di05MGgtODhxLTM1IDAtMzUtMzZ0MzUtMzZsODgtMXoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNhMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEyOTAgMTQ2Ni00Mi0xMDJxLTEwMi0yMi0yMjQtMjItMTIxIDAtMjIyIDIybC00MiAxMDFxMTI0LTMxIDI2NC0zMSAxMzggMCAyNjYgMzJ6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMjA2IDEyNjAtMjktNzB2LTI3cS03Ni0xMS0xNTMtMTEtNzUgMC0xNTIgMTFsLTEgMjctMjcgNzBxODUtMTUgMTgwLTE1IDk2IDAgMTgyIDE1eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTE3MSAxNjM4cS00MC0zMC04MC05NWgtMzJxMCA0OSAyMyA5NWg4OXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTk2NSAxNjM4cTIzLTQ5IDIzLTk1aC0zMnEtMzkgNjQtODEgOTVoOTB6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im05ODcgOTEydjg1cTAgMzcgMzcgMzd0MzctMzd2LTg2aDkwcTM1IDAgMzUtMzZ0LTM1LTM2aC05MHYtOTBxMC0zNy0zNy0zN3QtMzcgMzd2OTBoLTg4cS0zNSAwLTM1IDM2dDM1IDM2bDg4IDF6IiBkaXNwbGF5PSJibG9jayIvPgogPC9nPgo8L3N2Zz4K');
+piece.black.king-bishop {
+  background-image: url('/pieces/black_king_bishop.svg');
 }
 }
-piece.king-queen.black {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1ODggNzkzcS04MyAzMC0yMzMgNDl0LTMzMyAyMHEtMTc4IDAtMzI2LTE4dC0yMzMtNDlsNTAtOTFxODQgMjUgMjE4IDM2dDI5MyAxMXExNTkgMCAyOTQtMTF0MjE5LTM3bDUxIDkwem0yMjYgNjY4cS01NyAwLTk3IDM5dC00MCA5N3EwIDU2IDQwIDk2dDk3IDQxcTU2IDAgOTYtNDB0NDAtOTdxMC01Ny00MC05NnQtOTYtNDB6bS0xNTc4IDBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDFxNTcgMCA5Ny00MHQ0MC05N3EwLTU3LTQwLTk2dC05Ny00MHptMTIwOCAxMTBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDBxNTcgMCA5Ny00MHQ0MC05NnEwLTU3LTQwLTk2dC05Ny00MHptLTg0MCAwcS01NyAwLTk3IDM5dC00MCA5N3EwIDU2IDQwIDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC01Ny00MC05NnQtOTYtNDB6bTEwMzYtMTI4OHEtNDktNDMtMjIwLTcydC0zOTQtMjlxLTIyNyAwLTM5OSAzMHQtMjE3IDc1bDYzIDI0MC0yOCAxNTctODggMTUzLTg1IDYyMiA0OSAxOSAyNzQtNDYyIDYgNTUwIDY4IDEyIDIwOS01NTMgMTEyIDU5NWg2OWwxMTItNTkzIDIwNyA1NTEgNjktMTIgNi01NTAgMjc1IDQ2MyA0Ny0yMi04My02MTktODktMTUzLTI4LTE1OSA2NS0yNDN6bS05NiAzMmwtMzAgMTE4cS0xOTUgNDUtNDkwIDQ1LTI5MiAwLTQ4OC00NWwtMzItMTE5cTE5MCA1OCA1MjEgNTggMTU5IDAgMjk1LTE2dDIyNC00MXptLTI2IDI5OXEtMTg0IDUxLTQ5MCA1MS0zMDggMC00OTYtNTJsMTUtMTAxcTE4OSA0OSA0ODEgNDkgMjkxIDAgNDc0LTQ4bDE2IDEwMXptLTQ5NCAxMDA3cS01NyAwLTk2IDQwdC00MCA5N3EwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDEtOTZxMC01Ny00MC05N3QtOTctNDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+CiA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNmZmYiPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTg4IDEyNTVxLTgzLTMwLTIzMy00OXQtMzMzLTIwcS0xNzggMC0zMjYgMTh0LTIzMyA0OWw1MCA5MXE4NC0yNSAyMTgtMzZ0MjkzLTExIDI5NCAxMSAyMTkgMzdsNTEtOTB6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTQ0IDE3MzMtMzAtMTE4cS0xOTUtNDUtNDkwLTQ1LTI5MiAwLTQ4OCA0NWwtMzIgMTE5cTE5MC01OCA1MjEtNTggMTU5IDAgMjk1IDE2dDIyNCA0MXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1MTggMTQzNHEtMTg0LTUxLTQ5MC01MS0zMDggMC00OTYgNTJsMTUgMTAxcTE4OS00OSA0ODEtNDkgMjkxIDAgNDc0IDQ4bDE2LTEwMXoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo=');
+piece.black.king-queen {
+  background-image: url('/pieces/black_king_queen.svg');
 }
 }
-piece.king-pawn.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMjczaDQ5MXEyMSA3MiAyMSAxNDEgMCAxNTYtODYgMjgzdC0yMjMgMTg3cS02NiA1LTY2IDcyIDAgNTMgNjcgNzggOTMgNjUgOTMgMTcyIDAgNzctNTIgMTM1dC0xMjYgNjdxLTYwIDUtNjAgNjggMCAyOCAyMiA1MiA1NCA0MiA1NCAxMTAgMCA1Ni00MCA5NnQtOTUgNDBxLTU3IDAtOTYtNDB0LTQwLTk2cTAtNjcgNTQtMTEwIDIyLTIyIDIyLTUyIDAtNjMtNTktNjgtNzUtOS0xMjYtNjd0LTUyLTEzNXEwLTEwNyA5My0xNzIgNjctMjYgNjctNzggMC02Ny02Ny03Mi0xMzYtNjAtMjIyLTE4N3QtODYtMjgzcTAtNzQgMjEtMTQxaDQ5MXptMC02OGgtNTQwcS00MCAxMDAtNDAgMjA5IDAgMTg1IDEwNSAzMzJ0MjcwIDIxMHEtNzEgMzMtMTE1IDk5dC00NSAxNTFxMCAxMDUgNzAgMTgydDE3MiA4OXEtODEgNjEtODEgMTYxIDAgODQgNTkgMTQ0dDE0NSA2MHE4NCAwIDE0NC02MHQ2MC0xNDRxMC0xMDAtODEtMTYxIDEwMi0xMiAxNzItODl0NzAtMTgycTAtODQtNDUtMTUwdC0xMTYtMTAwcTE2NS02MyAyNzAtMjEwdDEwNS0zMzJxMC0xMDgtMzktMjA5aC01NDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjMDAwIi8+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxNzc1aDQ5MXEyMS03MiAyMS0xNDEgMC0xNTYtODYtMjgzdC0yMjMtMTg3cS02Ni01LTY2LTcyIDAtNTMgNjctNzggOTMtNjUgOTMtMTcyIDAtNzctNTItMTM1dC0xMjYtNjdxLTYwLTUtNjAtNjggMC0yOCAyMi01MiA1NC00MiA1NC0xMTAgMC01Ni00MC05NnQtOTUtNDBxLTU3IDAtOTYgNDB0LTQwIDk2cTAgNjcgNTQgMTEwIDIyIDIyIDIyIDUyIDAgNjMtNTkgNjgtNzUgOS0xMjYgNjd0LTUyIDEzNXEwIDEwNyA5MyAxNzIgNjcgMjYgNjcgNzggMCA2Ny02NyA3Mi0xMzYgNjAtMjIyIDE4N3QtODYgMjgzcTAgNzQgMjEgMTQxaDQ5MXoiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KPC9zdmc+Cg==');
+
+piece.white.king-pawn {
+  background-image: url('/pieces/white_king_pawn.svg');
 }
 }
-piece.king-rook.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTExNjEgMTcwNmgxNzB2MTM3aDI3NHYtMzc1bC0yMjItMTcxdi00NzhsMTcwLTE3MHYtMjA1aDE1M3YtMjM5aC0xMzY1djIzOWgxNTN2MjA1bDE3MSAxNzB2NDc4bC0yMjIgMTcxdjM3NWgyNzN2LTEzN2gxNzF2MTM3aDI3NHYtMTM3em00NzgtMTMzMGgtMTIzMHYtMTAzaDEyMzB2MTAzem0tMTU1IDIwNGgtOTIwdi0xMzZoOTIwdjEzNnptLTE3MCA3MTdoLTU4MHYtNDc4aDU4MHY0Nzh6bTIyMiAyMzl2MjM5aC0xMzd2LTEzN2gtMzA4djEzN2gtMTM1di0xMzdoLTMwN3YxMzdoLTEzN3YtMjM5aDEwMjR6bS03Ny04ODdsLTEwMyAxMDJoLTY2M2wtMTA1LTEwMmg4NzF6bS0xMTAgNzE2bDEyNyAxMDNoLTkwNGwxMjgtMTAzaDY0OXoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiMwMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZjMCI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE2MzkgMTY3MmgtMTIzMHYxMDNoMTIzMHYtMTAzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTQ4NCAxNDY4aC05MjB2MTM2aDkyMHYtMTM2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTMxNCA3NTFoLTU4MHY0NzhoNTgwdi00Nzh6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTM2IDUxMnYtMjM5aC0xMzd2MTM3aC0zMDh2LTEzN2gtMTM1djEzN2gtMzA3di0xMzdoLTEzN3YyMzloMTAyNHoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTQ1OSAxMzk5LTEwMy0xMDJoLTY2M2wtMTA1IDEwMmg4NzF6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjZmMwIi8+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTM0OSA2ODMgMTI3LTEwM2gtOTA0bDEyOCAxMDNoNjQ5eiIgZmlsbC1ydWxlPSJub256ZXJvIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iI2ZjMCIvPgo8L3N2Zz4K');
+piece.white.king-rook {
+  background-image: url('/pieces/white_king_rook.svg');
 }
 }
-piece.king-knight.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE3NTYgMTc3NHEtMSAwIDItNTR0My0xMThxMS0xMjUgMC0yNTh0LTM2LTI2N3EtMzQtMTI4LTc1LTIxOHQtODktMTU3cS03Mi0xMDgtMTk2LTE4M3QtMjU5LTk4cTkgNDkgOCA5Ni0yIDM2LTM0IDM2LTM3IDAtMzMtMzYgMy0xMzItOTQtMjI2LTc2IDgwLTgyIDE4Ni0yIDM1LTM2IDMxLTMyLTEtMzItMzcgMCAwIDItOC00MSAxMy04NiAzNy0yOSAyMC00Ny0xMHQxNi00N3E0My0yMiA2NS0zMy04Ni04OC0xOTYtMTQyIDEyIDEzOSA3NiAyNjMgMTcgMjYtOCA0Ni0yOCAyMi00Ny03LTctMTAtMjAtMzYtMjEgMjEtMjggMzEtNyA5LTI0IDQwdC0yNiA1MXEtOSAyNS04IDQwdDMgMzVxLTkgNTktNDAgMTExdC04MSAxMjdxLTQ3IDcyLTcyIDEwOHQtMzggOTJxLTkgMzQgMCA4MnQzOSA3NnE0NiA0NyA4OSA0MyAxNCAwIDM3LTExdDM3LTQycTI2LTU3IDQzLTU3IDI1IDAgMjcgMjggMCA2LTE2IDUwLTkgMjAtMjQgNDItMTkgMjYtMTcgMjIgMTYgNTcgNTMgMjAgMTEtMTEgMjUtNDF0NDQtODFxMzUtNTkgNzUtOTZ0NzEtNjBxMTgtMTMgNDQtMzB0NzAtMzVxMzUtMTQgNzctMzR0NzYtNTNxNDYtNDUgNzEtMTExIDEzLTM3IDEwLTkxLTktMzQgMzQtMzQgMzIgMCAzNiAzMyAwIDExMy02NCAyMDYgMjEgNjQgMTEgMTQwLTkgNjEtNDIgMTMwdC0xMzYgMTU1cS0yMDcgMTcyLTE5NiAzNTQgMCAwIDE3MCAwdDMyMSAwaDU0N3oiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im02OTcgMTM1OXExMy0yMCAxMC00Mi0xMC02NC03MS01NC0xOCAzLTI5IDEyLTQtNS0xMi0yMi0xMS0zMi00Mi0yMi0zMSAxMi0yNCA0NSA0NSAxMTUgMTYzIDE1OCAzNCAxMCA0NS0yMCAxMi0zMi0xOC00NC02LTMtMTEtNXQtMTEtNnptLTI5Ny00NzdxLTI5LTE4LTM1LTQ4IDEtMzMtMzEtMzYtMzUtNC0zNiAzMCA0IDY2IDU5IDEwNSAyNiAyMSA0OC00IDIyLTI3LTUtNDd6bTY3OSA4MTVxMTU3LTEwIDI5MS04MXQyMjgtMTgycTY2LTc4IDEyNC0xODh0OTQtMjMzcTQwLTE0MyA1MC0zMDB0MTEtMjkydi0yMTh0LTE1NSAwLTQwNCAwaC02NzFxLTkgMC05IDQ5dDcgNzlxNCAyNCAxOSA2OHQ1MCAxMDdxMTYgMzIgNzYgOTN0MTM4IDE0M3E0NSA0NiA3MCAxMTZ0MjIgMTI3cS0zNy0zMC04MS00OS0yMTItNzYtMzA3LTIyMC03LTktNDUtODEtMjAtMzgtMzQtNTItMTktMTktNTUtMjEtNTYtMy04NyA1NC00Mi0xMi03NS0xMC01NiAyMS04MSA0NS01MSA1MS02NiAxMDJ0LTE2IDExMHEwIDg0IDEwNCAyMjIgMTIyIDE1OSAxMzAgMjQyIDAgMzYgNyA4MSA2IDMxIDI1IDYwIDEzIDIwIDE3IDI3dDE3IDIzcTkgMTIgMTUgMTh0MTUgMThxMTEgMTMgMjggMzAtNTMgMTQ2LTQzIDMwMSAxOTktNzEgMzM0LTIyMyAzMyAxMTMgMTMwIDE4MyA4MC01NiAxMjctMTQ4em02NzctMTQyM3EtMSAwIDIgNTR0MyAxMThxMSAxMjUgMCAyNTh0LTM2IDI2N3EtMzQgMTI4LTc1IDIxOHQtODkgMTU3cS03MiAxMDgtMTk2IDE4M3QtMjU5IDk4cTktNDkgOC05Ni0yLTM2LTM0LTM2LTM3IDAtMzMgMzYgMyAxMzItOTQgMjI2LTc2LTgwLTgyLTE4Ni0yLTM1LTM2LTMxLTMyIDEtMzIgMzcgMCAwIDIgOC00MS0xMy04Ni0zNy0yOS0yMC00NyAxMHQxNiA0N3E0MyAyMiA2NSAzMy04NiA4OC0xOTYgMTQyIDEyLTEzOSA3Ni0yNjMgMTctMjYtOC00Ni0yOC0yMi00NyA3LTcgMTAtMjAgMzYtMjEtMjEtMjgtMzEtNy05LTI0LTQwdC0yNi01MXEtOS0yNS04LTQwdDMtMzVxLTktNTktNDAtMTExdC04MS0xMjdxLTQ3LTcyLTcyLTEwOHQtMzgtOTJxLTktMzQgMC04MnQzOS03NnE0Ni00NyA4OS00MyAxNCAwIDM3IDExdDM3IDQycTI2IDU3IDQzIDU3IDI1IDAgMjctMjggMC02LTE2LTUwLTktMjAtMjQtNDItMTktMjYtMTctMjIgMTYtNTcgNTMtMjAgMTEgMTEgMjUgNDF0NDQgODFxMzUgNTkgNzUgOTZ0NzEgNjBxMTggMTMgNDQgMzB0NzAgMzVxMzUgMTQgNzcgMzR0NzYgNTNxNDYgNDUgNzEgMTExIDEzIDM3IDEwIDkxLTkgMzQgMzQgMzQgMzIgMCAzNi0zMyAwLTExMy02NC0yMDYgMjEtNjQgMTEtMTQwLTktNjEtNDItMTMwdC0xMzYtMTU1cS0yMDctMTcyLTE5Ni0zNTQgMCAwIDE3MCAwdDMyMSAwaDU0N3oiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiMwMDAiLz4KPC9zdmc+Cg==');
+piece.white.king-knight {
+  background-image: url('/pieces/white_king_knight.svg');
 }
 }
-piece.king-bishop.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTE2NnE5NyAwIDE4NiAxNSA5OC0zNSAxNDItMTA5IDM4LTY0IDM4LTE0MSAwLTQ2LTIzLTEwMXQtNzUtMTAxcS01OS00OS0xMjktMTA3dC0xMzktMTM3cS03MCA3OC0xNDAgMTM2dC0xMjggMTA4cS01MyA0NS03NSAxMDB0LTIzIDEwMnEwIDc3IDM3IDE0MSA0MyA3NCAxNDMgMTA5IDg4LTE1IDE4Ni0xNXoiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im05ODggMTEzOGwtODMgMXEtMzQgMC0zNCAzNHQzNCAzNGg4M3Y4NnEwIDM1IDM2IDM1IDM1IDAgMzUtMzV2LTg2aDg2cTMzIDAgMzMtMzR0LTMzLTM0aC04NnYtODJxMC0zNi0zNS0zNi0zNiAwLTM2IDM2djgxem0zNi01NzhxNjggMCAxMzIgMTF0MTI1IDI4cS0xMTcgMzEtMjU3IDMxLTE0MiAwLTI1Ny0zMSA1OC0xNiAxMjMtMjd0MTM0LTEyem0wIDEwODlxNjggMCA2OCA2OHQtNjggNjgtNjgtNjggNjgtNjh6bTAtOTQ5cTExNyAwIDIyNS0yM2wtNDggMTIzcS04OCAxNC0xNzcgMTQtOTEgMC0xNzgtMTRsLTQ4LTEyM3ExMDcgMjMgMjI2IDIzem0wIDE4MnE5NyAwIDE4Ni0xNSA5OCAzNSAxNDIgMTA5IDM4IDY0IDM4IDE0MSAwIDQ2LTIzIDEwMXQtNzUgMTAxcS01OSA0OS0xMjkgMTA3dC0xMzkgMTM3cS03MC03OC0xNDAtMTM2dC0xMjgtMTA4cS01My00NS03NS0xMDB0LTIzLTEwMnEwLTc3IDM3LTE0MSA0My03NCAxNDMtMTA5IDg4IDE1IDE4NiAxNXptLTM2LTM3N2gtMzJxLTU2LTkwLTEwNy0xMTMtMjQtMTItNTMtMjJ0LTY3LTEwcS03IDAtMTA3IDE2LTQ4IDctNzYgMTV0LTQ0IDEwcS01NyA3LTEzMy02LTQ2LTgtODYtMjlsNDgtNzhxMTIgMTIgMzEgMTV0MzYgOHE0MiA3IDgwIDIgMTMtMyA1MS03dDEwMS0xNXE3NS0xMSAxMDItMTEgMTA1IDAgMTYxIDQwIDM0IDI2IDY0IDcydDMxIDExM3ptMzYtMTEzcS0xNC01Ny0zNC03OXQtNTMtNDZxLTM2LTI1LTg1LTQydC0xMDktOWwtMjgxIDM5cS0xNyAyLTMwIDB0LTI2LTJxLTIxIDAtNTMtOXQtNTEtMjhsLTk3IDE1OXExOCAyMCAzMiAyOHQzMyAxN3E1OCAyNyAxMjQgMzMgMjggMiA1NSAxdDU2IDJxNTQtOSAxMDgtMTZ0MTEwLTE2cTYwIDAgODEgMTIgMTEgNiAzNSAyMnQ0OCA0N3EtNTMgNi0xMDggMjB0LTk3IDMxbDEwNCAyNThxLTc4IDQ1LTEwOSA3MnQtNDkgNjRxLTI2IDQ2LTMzIDg5dC03IDc3cTEgNjAgMjggMTMydDEwNCAxMzBxNjMgNDggMTIzIDk5dDExOSAxMTlxLTc0IDM4LTc0IDEyMSAwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC04Mi03NC0xMjEgNTgtNjggMTE3LTExOXQxMjUtOTlxNzUtNTcgMTAyLTEyOXQyOS0xMzNxMC0zNC03LTc3dC0zMi04OXEtMjAtMzYtNTAtNjN0LTEwOC03M2wxMDQtMjU4cS00NC0xNi05OS0zMHQtMTA2LTIxcTIzLTMxIDQ3LTQ3dDM2LTIycTIxLTEyIDgxLTEyIDU0IDggMTA4IDE1dDExMCAxN3EyNy0zIDU0LTJ0NTctMXE2NC02IDEyNC0zMyAxOC05IDMyLTE3dDMzLTI4bC05OC0xNTlxLTE4IDE4LTUwIDI3dC01MyAxMHEtMTMgMC0yNiAydC0zMSAwbC0yODAtMzlxLTYwLTktMTExIDh0LTg1IDQ1cS0zMyAyNy01MiA0NnQtMzMgNzd6bTM1IDExM3EwLTY2IDMwLTExMnQ2Ni03M3E1NS00MCAxNjEtNDAgMjYgMCAxMDIgMTEgNjIgMTAgMTAwIDE0dDUxIDhxMzggNSA4MC0yIDE2LTQgMzUtN3QzMy0xNmw0OCA3OHEtNDEgMjEtODcgMjktNzYgMTMtMTMzIDYtMTctMi00NC0xMHQtNzUtMTVxLTEwMS0xNi0xMDctMTYtMzkgMC02OCAxMHQtNTIgMjJxLTUzIDI0LTEwOCAxMTNoLTMyeiIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwNDgpIHNjYWxlKDEsLTEpIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iIzAwMCIvPgogPGcgZmlsbC1ydWxlPSJub256ZXJvIiBmaWxsPSIjZmMwIj4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxNDg4cTY4IDAgMTMyLTExdDEyNS0yOHEtMTE3LTMxLTI1Ny0zMS0xNDIgMC0yNTcgMzEgNTggMTYgMTIzIDI3dDEzNCAxMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMzk5cTY4IDAgNjgtNjh0LTY4LTY4LTY4IDY4IDY4IDY4eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxMzQ4cTExNyAwIDIyNSAyM2wtNDgtMTIzcS04OC0xNC0xNzctMTQtOTEgMC0xNzggMTRsLTQ4IDEyM3ExMDctMjMgMjI2LTIzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtOTg4IDE1NDNoLTMycS01NiA5MC0xMDcgMTEzLTI0IDEyLTUzIDIydC02NyAxMHEtNyAwLTEwNy0xNi00OC03LTc2LTE1dC00NC0xMHEtNTctNy0xMzMgNi00NiA4LTg2IDI5bDQ4IDc4cTEyLTEyIDMxLTE1dDM2LThxNDItNyA4MC0yIDEzIDMgNTEgN3QxMDEgMTVxNzUgMTEgMTAyIDExIDEwNSAwIDE2MS00MCAzNC0yNiA2NC03MnQzMS0xMTN6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDU5IDE1NDNxMCA2NiAzMCAxMTJ0NjYgNzNxNTUgNDAgMTYxIDQwIDI2IDAgMTAyLTExIDYyLTEwIDEwMC0xNHQ1MS04cTM4LTUgODAgMiAxNiA0IDM1IDd0MzMgMTZsNDgtNzhxLTQxLTIxLTg3LTI5LTc2LTEzLTEzMy02LTE3IDItNDQgMTB0LTc1IDE1cS0xMDEgMTYtMTA3IDE2LTM5IDAtNjgtMTB0LTUyLTIycS01My0yNC0xMDgtMTEzaC0zMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo=');
+piece.white.king-bishop {
+  background-image: url('/pieces/white_king_bishop.svg');
 }
 }
-piece.king-queen.white {
-  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTYyMXEtNTcgMC05NiA0MHQtNDAgOTdxMCA1NiAzOSA5NnQ5NyA0MHE1NiAwIDk2LTQwdDQxLTk2cTAtNTctNDAtOTd0LTk3LTQwem0wIDcwcTY3IDAgNjcgNjcgMCA2Ni02NyA2Ni02NiAwLTY2LTY2IDAtNjcgNjYtNjd6bTUwOS0xMDA3cS0xOTMgNDktNTA1IDQ5LTMyMCAwLTUxMS01MGwxNS05NnExOTUgNDYgNDk2IDQ2IDI5OSAwIDQ4OC00NWwxNyA5NnptMjUgNjAgNjUgMTE1cS00OC0xOS05OC0xOS0xMzQgMC0yMTQgMTA5LTYwLTUwLTEzNC01MC05NiAwLTE1MyA3NS02NC03MC0xNTMtNzAtNzIgMC0xMzIgNDktODQtMTA3LTIxNy0xMDctNTEgMC0xMDEgMTlsNzAtMTIwcTE5NCA1NiA1MzMgNTYgMzQ1IDAgNTM0LTU3em0tNDQ4IDIzOS04NSA0ODktODUtNDgzcTMgMiAxNCAxMCAyMyA0NSA3MCA0NSA1MSAwIDY2LTQ1IDYtNiAyMC0xNnptMjc3LTE5djQ2M2wtMTY1LTQ1NHExOSA3IDMyIDE4IDIwIDI1IDU0IDI1IDQwIDAgNjQtMzUgMy00IDctOHQ4LTl6bS01NjIgMTQtMTY0IDQ0OXYtNDU3cTMgNCA5IDEwIDIwIDQyIDY2IDQyIDM4IDAgNjItMzIgMjctMTIgMjctMTJ6bS0yNTQtNTYtMjE1IDM3MSA1NS0zMzhxNTctNDAgMTExLTQwIDIxIDAgNDkgN3ptOTAzLTVxMjMtNyA1MS03IDYxIDAgMTE0IDM4bDU1IDM0Ni0yMjAtMzc3em02MC01MDYtMzAgMTEzcS0xOTYgNDMtNDgwIDQzLTI4MSAwLTQ3OS00M2wtMzEtMTE0cTE4NiA1NiA1MTEgNTYgMzE3IDAgNTA5LTU1em0xMDYtMTI4cS00OS00My0yMjAtNzJ0LTM5NC0yOXEtMjI3IDAtMzk5IDMwdC0yMTcgNzVsNjMgMjQwLTI4IDE1Ny04OCAxNTMtODUgNjIyIDQ5IDE5IDI3NC00NjIgNiA1NTAgNjggMTIgMjA5LTU1MyAxMTIgNTk1aDY5bDExMi01OTMgMjA3IDU1MSA2OS0xMiA2LTU1MCAyNzUgNDYzIDQ3LTIyLTgzLTYxOS04OS0xNTMtMjgtMTU5IDY1LTI0M3ptLTgxIDM2cS0xODMgNzYtNTMxIDc2LTM1NSAwLTUzNy03OCAxNzUtNjkgNTM0LTY5IDE3MiAwIDMxNCAxOXQyMjAgNTJ6bS05NTUgMTI1MnEtNTcgMC05NyAzOXQtNDAgOTdxMCA1NiA0MCA5NnQ5NyA0MHE1NiAwIDk2LTQwdDQwLTk2cTAtNTctNDAtOTZ0LTk2LTQwem0wIDcwcTY2IDAgNjYgNjZ0LTY2IDY2cS02NyAwLTY3LTY2dDY3LTY2em04NDAgMHE2NyAwIDY3IDY2dC02NyA2NnEtNjYgMC02Ni02NnQ2Ni02NnptMC03MHEtNTcgMC05NiAzOXQtNDAgOTdxMCA1NiAzOSA5NnQ5NyA0MHE1NyAwIDk3LTQwdDQwLTk2cTAtNTctNDAtOTZ0LTk3LTQwem0tMTIwOC0xMTBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDFxNTcgMCA5Ny00MHQ0MC05Ny00MC05Ni05Ny00MHptMCA3MHE2NyAwIDY3IDY2IDAgNjctNjcgNjctNjYgMC02Ni02NyAwLTY2IDY2LTY2em0xNTc4IDBxNjYgMCA2NiA2NiAwIDY3LTY2IDY3LTY3IDAtNjctNjcgMC02NiA2Ny02NnptMC03MHEtNTcgMC05NyAzOXQtNDAgOTdxMCA1NiA0MCA5NnQ5NyA0MXE1NiAwIDk2LTQwdDQwLTk3LTQwLTk2LTk2LTQweiIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwNDgpIHNjYWxlKDEsLTEpIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iIzAwMCIvPgogPGcgZmlsbC1ydWxlPSJub256ZXJvIiBmaWxsPSIjZmMwIj4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAzNTdxNjcgMCA2Ny02NyAwLTY2LTY3LTY2LTY2IDAtNjYgNjYgMCA2NyA2NiA2N3oiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1MzMgMTM2NHEtMTkzLTQ5LTUwNS00OS0zMjAgMC01MTEgNTBsMTUgOTZxMTk1LTQ2IDQ5Ni00NiAyOTkgMCA0ODggNDVsMTctOTZ6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTU4IDEzMDQgNjUtMTE1cS00OCAxOS05OCAxOS0xMzQgMC0yMTQtMTA5LTYwIDUwLTEzNCA1MC05NiAwLTE1My03NS02NCA3MC0xNTMgNzAtNzIgMC0xMzItNDktODQgMTA3LTIxNyAxMDctNTEgMC0xMDEtMTlsNzAgMTIwcTE5NC01NiA1MzMtNTYgMzQ1IDAgNTM0IDU3eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTExMCAxMDY1LTg1LTQ4OS04NSA0ODNxMy0yIDE0LTEwIDIzLTQ1IDcwLTQ1IDUxIDAgNjYgNDUgNiA2IDIwIDE2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTM4NyAxMDg0di00NjNsLTE2NSA0NTRxMTktNyAzMi0xOCAyMC0yNSA1NC0yNSA0MCAwIDY0IDM1IDMgNCA3IDh0OCA5eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtODI1IDEwNzAtMTY0LTQ0OXY0NTdxMy00IDktMTAgMjAtNDIgNjYtNDIgMzggMCA2MiAzMiAyNyAxMiAyNyAxMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTU3MSAxMTI2LTIxNS0zNzEgNTUgMzM4cTU3IDQwIDExMSA0MCAyMSAwIDQ5LTd6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNDc0IDExMzFxMjMgNyA1MSA3IDYxIDAgMTE0LTM4bDU1LTM0Ni0yMjAgMzc3eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTUzNCAxNjM3LTMwLTExM3EtMTk2LTQzLTQ4MC00My0yODEgMC00NzkgNDNsLTMxIDExNHExODYtNTYgNTExLTU2IDMxNyAwIDUwOSA1NXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1NTkgMTcyOXEtMTgzLTc2LTUzMS03Ni0zNTUgMC01MzcgNzggMTc1IDY5IDUzNCA2OSAxNzIgMCAzMTQtMTl0MjIwLTUyeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtNjA0IDQwN3E2NiAwIDY2LTY2dC02Ni02NnEtNjcgMC02NyA2NnQ2NyA2NnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE0NDQgNDA3cTY3IDAgNjctNjZ0LTY3LTY2cS02NiAwLTY2IDY2dDY2IDY2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMjM2IDUxN3E2NyAwIDY3LTY2IDAtNjctNjctNjctNjYgMC02NiA2NyAwIDY2IDY2IDY2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTgxNCA1MTdxNjYgMCA2Ni02NiAwLTY3LTY2LTY3LTY3IDAtNjcgNjcgMCA2NiA2NyA2NnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo=');
+piece.white.king-queen {
+  background-image: url('/pieces/white_king_queen.svg');
 }
 }
index efeb078..5d91c72 100644 (file)
@@ -880,7 +880,7 @@ export default class ChessRules {
         touchLocation = e.changedTouches[0];
       if (touchLocation)
         return {x: touchLocation.clientX, y: touchLocation.clientY};
         touchLocation = e.changedTouches[0];
       if (touchLocation)
         return {x: touchLocation.clientX, y: touchLocation.clientY};
-      return [0, 0]; //shouldn't reach here =)
+      return {x: 0, y: 0}; //shouldn't reach here =)
     }
 
     const centerOnCursor = (piece, e) => {
     }
 
     const centerOnCursor = (piece, e) => {
@@ -1240,7 +1240,7 @@ export default class ChessRules {
   getPotentialMovesFrom(sq, color) {
     if (typeof sq[0] == "string")
       return this.getDropMovesFrom(sq);
   getPotentialMovesFrom(sq, color) {
     if (typeof sq[0] == "string")
       return this.getDropMovesFrom(sq);
-    if (this.options["madrasi"] && this.isImmobilized(sq))
+    if (this.isImmobilized(sq))
       return [];
     const piece = this.getPieceType(sq[0], sq[1]);
     let moves = this.getPotentialMovesOf(piece, sq);
       return [];
     const piece = this.getPieceType(sq[0], sq[1]);
     let moves = this.getPotentialMovesOf(piece, sq);
@@ -1267,138 +1267,151 @@ export default class ChessRules {
     const color = this.getColor(moves[0].start.x, moves[0].start.y);
     const oppCol = C.GetOppCol(color);
 
     const color = this.getColor(moves[0].start.x, moves[0].start.y);
     const oppCol = C.GetOppCol(color);
 
-    if (this.options["capture"] && this.atLeastOneCapture()) {
-      // Filter out non-capturing moves (not using m.vanish because of
-      // self captures of Recycle and Teleport).
-      moves = moves.filter(m => {
-        return (
-          this.board[m.end.x][m.end.y] != "" &&
-          this.getColor(m.end.x, m.end.y) == oppCol
-        );
-      });
-    }
+    if (this.options["capture"] && this.atLeastOneCapture())
+      moves = this.capturePostProcess(moves, oppCol);
 
 
-    if (this.options["atomic"]) {
-      moves.forEach(m => {
-        if (
-          this.board[m.end.x][m.end.y] != "" &&
-          this.getColor(m.end.x, m.end.y) == oppCol
-        ) {
-          // Explosion!
-          let steps = [
-            [-1, -1],
-            [-1, 0],
-            [-1, 1],
-            [0, -1],
-            [0, 1],
-            [1, -1],
-            [1, 0],
-            [1, 1]
-          ];
-          for (let step of steps) {
-            let x = m.end.x + step[0];
-            let y = this.computeY(m.end.y + step[1]);
-            if (
-              this.onBoard(x, y) &&
-              this.board[x][y] != "" &&
-              this.getPieceType(x, y) != "p"
-            ) {
-              m.vanish.push(
-                new PiPo({
-                  p: this.getPiece(x, y),
-                  c: this.getColor(x, y),
-                  x: x,
-                  y: y
-                })
-              );
-            }
-          }
-          if (!this.options["rifle"])
-            m.appear.pop(); //nothin appears
-        }
-      });
-    }
+    if (this.options["atomic"])
+      this.atomicPostProcess(moves, oppCol);
 
     if (
       moves.length > 0 &&
       this.getPieceType(moves[0].start.x, moves[0].start.y) == "p"
     ) {
 
     if (
       moves.length > 0 &&
       this.getPieceType(moves[0].start.x, moves[0].start.y) == "p"
     ) {
-      let moreMoves = [];
-      const lastRank = (color == "w" ? 0 : this.size.x - 1);
-      const initPiece = this.getPiece(moves[0].start.x, moves[0].start.y);
-      moves.forEach(m => {
-        let finalPieces = ["p"];
-        const [x1, y1] = [m.start.x, m.start.y];
-        const [x2, y2] = [m.end.x, m.end.y];
-        const promotionOk = (
-          x2 == lastRank &&
-          (!this.options["rifle"] || this.board[x2][y2] == "")
-        );
-        if (!promotionOk)
-          return; //nothing to do
-        if (!this.options["pawnfall"]) {
-          if (
-            this.options["cannibal"] &&
-            this.board[x2][y2] != "" &&
-            this.getColor(x2, y2) == oppCol
-          ) {
-            finalPieces = [this.getPieceType(x2, y2)];
-          }
-          else
-            finalPieces = this.pawnPromotions;
-        }
-        m.appear[0].p = finalPieces[0];
-        if (initPiece == "!") //cannibal king-pawn
-          m.appear[0].p = C.CannibalKingCode[finalPieces[0]];
-        for (let i=1; i<finalPieces.length; i++) {
-          const piece = finalPieces[i];
-          let tr = null;
-          if (!this.options["pawnfall"]) {
-            tr = {
-              c: color,
-              p: (initPiece != "!" ? piece : C.CannibalKingCode[piece])
-            };
-          }
-          let newMove = this.getBasicMove([x1, y1], [x2, y2], tr);
-          if (this.options["pawnfall"]) {
-            newMove.appear.shift();
-            newMove.pawnfall = true; //required in prePlay()
-          }
-          moreMoves.push(newMove);
-        }
-      });
-      Array.prototype.push.apply(moves, moreMoves);
+      this.pawnPostProcess(moves, color, oppCol);
     }
 
     if (
       this.options["cannibal"] &&
     }
 
     if (
       this.options["cannibal"] &&
-      this.options["rifle"] &&
-      this.pawnSpecs.promotions
+      this.options["rifle"]
     ) {
       // In this case a rifle-capture from last rank may promote a pawn
     ) {
       // In this case a rifle-capture from last rank may promote a pawn
-      const lastRank = (color == "w" ? 0 : this.size.x - 1);
-      let newMoves = [];
-      moves.forEach(m => {
+      this.riflePromotePostProcess(moves);
+    }
+
+    return moves;
+  }
+
+  capturePostProcess(moves, oppCol) {
+    // Filter out non-capturing moves (not using m.vanish because of
+    // self captures of Recycle and Teleport).
+    return moves.filter(m => {
+      return (
+        this.board[m.end.x][m.end.y] != "" &&
+        this.getColor(m.end.x, m.end.y) == oppCol
+      );
+    });
+  }
+
+  atomicPostProcess(moves, oppCol) {
+    moves.forEach(m => {
+      if (
+        this.board[m.end.x][m.end.y] != "" &&
+        this.getColor(m.end.x, m.end.y) == oppCol
+      ) {
+        // Explosion!
+        let steps = [
+          [-1, -1],
+          [-1, 0],
+          [-1, 1],
+          [0, -1],
+          [0, 1],
+          [1, -1],
+          [1, 0],
+          [1, 1]
+        ];
+        for (let step of steps) {
+          let x = m.end.x + step[0];
+          let y = this.computeY(m.end.y + step[1]);
+          if (
+            this.onBoard(x, y) &&
+            this.board[x][y] != "" &&
+            this.getPieceType(x, y) != "p"
+          ) {
+            m.vanish.push(
+              new PiPo({
+                p: this.getPiece(x, y),
+                c: this.getColor(x, y),
+                x: x,
+                y: y
+              })
+            );
+          }
+        }
+        if (!this.options["rifle"])
+          m.appear.pop(); //nothin appears
+      }
+    });
+  }
+
+  pawnPostProcess(moves, color, oppCol) {
+    let moreMoves = [];
+    const lastRank = (color == "w" ? 0 : this.size.x - 1);
+    const initPiece = this.getPiece(moves[0].start.x, moves[0].start.y);
+    moves.forEach(m => {
+      let finalPieces = ["p"];
+      const [x1, y1] = [m.start.x, m.start.y];
+      const [x2, y2] = [m.end.x, m.end.y];
+      const promotionOk = (
+        x2 == lastRank &&
+        (!this.options["rifle"] || this.board[x2][y2] == "")
+      );
+      if (!promotionOk)
+        return; //nothing to do
+      if (!this.options["pawnfall"]) {
         if (
         if (
-          m.start.x == lastRank &&
-          m.appear.length >= 1 &&
-          m.appear[0].p == "p" &&
-          m.appear[0].x == m.start.x &&
-          m.appear[0].y == m.start.y
+          this.options["cannibal"] &&
+          this.board[x2][y2] != "" &&
+          this.getColor(x2, y2) == oppCol
         ) {
         ) {
-          const promotionPiece0 = this.pawnSpecs.promotions[0];
-          m.appear[0].p = this.pawnPromotions[0];
-          for (let i=1; i<this.pawnPromotions.length; i++) {
-            let newMv = JSON.parse(JSON.stringify(m));
-            newMv.appear[0].p = this.pawnSpecs.promotions[i];
-            newMoves.push(newMv);
-          }
+          finalPieces = [this.getPieceType(x2, y2)];
         }
         }
-      });
-      Array.prototype.push.apply(moves, newMoves);
-    }
+        else
+          finalPieces = this.pawnPromotions;
+      }
+      m.appear[0].p = finalPieces[0];
+      if (initPiece == "!") //cannibal king-pawn
+        m.appear[0].p = C.CannibalKingCode[finalPieces[0]];
+      for (let i=1; i<finalPieces.length; i++) {
+        const piece = finalPieces[i];
+        let tr = null;
+        if (!this.options["pawnfall"]) {
+          tr = {
+            c: color,
+            p: (initPiece != "!" ? piece : C.CannibalKingCode[piece])
+          };
+        }
+        let newMove = this.getBasicMove([x1, y1], [x2, y2], tr);
+        if (this.options["pawnfall"]) {
+          newMove.appear.shift();
+          newMove.pawnfall = true; //required in prePlay()
+        }
+        moreMoves.push(newMove);
+      }
+    });
+    Array.prototype.push.apply(moves, moreMoves);
+  }
 
 
-    return moves;
+  riflePromotePostProcess(moves) {
+    const lastRank = (color == "w" ? 0 : this.size.x - 1);
+    let newMoves = [];
+    moves.forEach(m => {
+      if (
+        m.start.x == lastRank &&
+        m.appear.length >= 1 &&
+        m.appear[0].p == "p" &&
+        m.appear[0].x == m.start.x &&
+        m.appear[0].y == m.start.y
+      ) {
+        const promotionPiece0 = this.pawnSpecs.promotions[0];
+        m.appear[0].p = this.pawnPromotions[0];
+        for (let i=1; i<this.pawnPromotions.length; i++) {
+          let newMv = JSON.parse(JSON.stringify(m));
+          newMv.appear[0].p = this.pawnSpecs.promotions[i];
+          newMoves.push(newMv);
+        }
+      }
+    });
+    Array.prototype.push.apply(moves, newMoves);
   }
 
   // NOTE: using special symbols to not interfere with variants' pieces codes
   }
 
   // NOTE: using special symbols to not interfere with variants' pieces codes
@@ -1433,10 +1446,12 @@ export default class ChessRules {
   // For Madrasi:
   // (redefined in Baroque etc, where Madrasi condition doesn't make sense)
   isImmobilized([x, y]) {
   // For Madrasi:
   // (redefined in Baroque etc, where Madrasi condition doesn't make sense)
   isImmobilized([x, y]) {
+    if (!this.options["madrasi"])
+      return false;
     const color = this.getColor(x, y);
     const oppCol = C.GetOppCol(color);
     const piece = this.getPieceType(x, y); //ok not cannibal king
     const color = this.getColor(x, y);
     const oppCol = C.GetOppCol(color);
     const piece = this.getPieceType(x, y); //ok not cannibal king
-    const stepSpec = this.pieces(color, x, y);
+    const stepSpec = this.pieces(color, x, y)[piece];
     const attacks = stepSpec.attack || stepSpec.moves;
     for (let a of attacks) {
       outerLoop: for (let step of a.steps) {
     const attacks = stepSpec.attack || stepSpec.moves;
     for (let a of attacks) {
       outerLoop: for (let step of a.steps) {
@@ -1524,7 +1539,11 @@ export default class ChessRules {
     const oppCol = C.GetOppCol(color);
     for (let i=0; i<this.size.x; i++) {
       for (let j=0; j<this.size.y; j++) {
     const oppCol = C.GetOppCol(color);
     for (let i=0; i<this.size.x; i++) {
       for (let j=0; j<this.size.y; j++) {
-        if (this.board[i][j] != "" && this.canTake([i, j], [x, y])) {
+        if (
+          this.board[i][j] != "" &&
+          this.canTake([i, j], [x, y]) &&
+          !this.isImmobilized([i, j])
+        ) {
           const piece = this.getPieceType(i, j);
           if (zen && C.CannibalKingCode[piece])
             continue; //king not captured in this way
           const piece = this.getPieceType(i, j);
           if (zen && C.CannibalKingCode[piece])
             continue; //king not captured in this way
@@ -1533,20 +1552,7 @@ export default class ChessRules {
           for (let a of attacks) {
             for (let s of a.steps) {
               // Quick check: if step isn't compatible, don't even try
           for (let a of attacks) {
             for (let s of a.steps) {
               // Quick check: if step isn't compatible, don't even try
-              const rx = (x - i) / s[0],
-                    ry = (y - j) / s[1];
-              if (
-                (!Number.isFinite(rx) && !Number.isNaN(rx)) ||
-                (!Number.isFinite(ry) && !Number.isNaN(ry))
-              ) {
-                continue;
-              }
-              let distance = (Number.isNaN(rx) ? ry : rx);
-              // TODO: 1e-7 here is totally arbitrary
-              if (Math.abs(distance - Math.round(distance)) > 1e-7)
-                continue;
-              distance = Math.round(distance); //in case of (numerical...)
-              if (a.range < distance)
+              if (!C.CompatibleStep([i, j], [x, y], s, a.range))
                 continue;
               // Finally verify that nothing stand in-between
               let [ii, jj] = [i + s[0], this.computeY(j + s[1])];
                 continue;
               // Finally verify that nothing stand in-between
               let [ii, jj] = [i + s[0], this.computeY(j + s[1])];
@@ -1568,6 +1574,25 @@ export default class ChessRules {
     return moves;
   }
 
     return moves;
   }
 
+  static CompatibleStep([x1, y1], [x2, y2], step, range) {
+    const rx = (x2 - x1) / step[0],
+          ry = (y2 - y1) / step[1];
+    if (
+      (!Number.isFinite(rx) && !Number.isNaN(rx)) ||
+      (!Number.isFinite(ry) && !Number.isNaN(ry))
+    ) {
+      return false;
+    }
+    let distance = (Number.isNaN(rx) ? ry : rx);
+    // TODO: 1e-7 here is totally arbitrary
+    if (Math.abs(distance - Math.round(distance)) > 1e-7)
+      return false;
+    distance = Math.round(distance); //in case of (numerical...)
+    if (range < distance)
+      return false;
+    return true;
+  }
+
   // Build a regular move from its initial and destination squares.
   // tr: transformation
   getBasicMove([sx, sy], [ex, ey], tr) {
   // Build a regular move from its initial and destination squares.
   // tr: transformation
   getBasicMove([sx, sy], [ex, ey], tr) {
@@ -2204,8 +2229,8 @@ export default class ChessRules {
       const r = container.querySelector(".chessboard").getBoundingClientRect();
       const animateRec = i => {
         this.animate(moves[i], () => {
       const r = container.querySelector(".chessboard").getBoundingClientRect();
       const animateRec = i => {
         this.animate(moves[i], () => {
-          this.playVisual(moves[i], r);
           this.play(moves[i]);
           this.play(moves[i]);
+          this.playVisual(moves[i], r);
           if (i < moves.length - 1)
             setTimeout(() => animateRec(i+1), 300);
           else
           if (i < moves.length - 1)
             setTimeout(() => animateRec(i+1), 300);
           else
diff --git a/pieces/black_amazon.svg b/pieces/black_amazon.svg
new file mode 100644 (file)
index 0000000..0215b87
--- /dev/null
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="26"
+   width="26"
+   version="1.0"
+   id="svg25"
+   sodipodi:docname="Chess_Adt26.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <defs
+     id="defs29">
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Colorize"
+       id="filter283">
+      <feComposite
+         in2="SourceGraphic"
+         operator="arithmetic"
+         k1="0"
+         k2="1"
+         result="composite1"
+         id="feComposite269" />
+      <feColorMatrix
+         in="composite1"
+         values="1"
+         type="saturate"
+         result="colormatrix1"
+         id="feColorMatrix271" />
+      <feFlood
+         flood-opacity="1"
+         flood-color="rgb(26,23,21)"
+         result="flood1"
+         id="feFlood273" />
+      <feBlend
+         in="flood1"
+         in2="colormatrix1"
+         mode="multiply"
+         result="blend1"
+         id="feBlend275" />
+      <feBlend
+         in2="blend1"
+         mode="screen"
+         result="blend2"
+         id="feBlend277" />
+      <feColorMatrix
+         in="blend2"
+         values="1"
+         type="saturate"
+         result="colormatrix2"
+         id="feColorMatrix279" />
+      <feComposite
+         in="colormatrix2"
+         in2="SourceGraphic"
+         operator="in"
+         k2="1"
+         result="composite2"
+         id="feComposite281" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Colorize"
+       id="filter299">
+      <feComposite
+         in2="SourceGraphic"
+         operator="arithmetic"
+         k1="0"
+         k2="1"
+         result="composite1"
+         id="feComposite285" />
+      <feColorMatrix
+         in="composite1"
+         values="1"
+         type="saturate"
+         result="colormatrix1"
+         id="feColorMatrix287" />
+      <feFlood
+         flood-opacity="1"
+         flood-color="rgb(26,23,21)"
+         result="flood1"
+         id="feFlood289" />
+      <feBlend
+         in="flood1"
+         in2="colormatrix1"
+         mode="multiply"
+         result="blend1"
+         id="feBlend291" />
+      <feBlend
+         in2="blend1"
+         mode="screen"
+         result="blend2"
+         id="feBlend293" />
+      <feColorMatrix
+         in="blend2"
+         values="1"
+         type="saturate"
+         result="colormatrix2"
+         id="feColorMatrix295" />
+      <feComposite
+         in="colormatrix2"
+         in2="SourceGraphic"
+         operator="in"
+         k2="1"
+         result="composite2"
+         id="feComposite297" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview27"
+     showgrid="false"
+     inkscape:zoom="25.673415"
+     inkscape:cx="13.220339"
+     inkscape:cy="13"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg25" />
+  <metadata
+     id="metadata2">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="matrix(0.75757574,0,0,0.75757574,2.8791515,-7.9393932)"
+     id="g10"
+     style="filter:url(#filter283)">
+    <path
+       stroke-linejoin="miter"
+       d="m14.44,29.5c0.222,1.68-3.09,4.06-4.5,5-1.73,1.16-1.74,2.7-3,2.5-0.602-0.545,0.817-2.02,0-2-0.58,0,0.19,1.1-0.5,1.5-0.58,0-2.5,0.4-2.5-2.5,0-1.2,3.5-6.5,3.5-6.5s0.934-1.08,1-2c-0.419-0.575-0.258-1.48,0-2,0.365-0.731,1.5,1.5,1.5,1.5h1s0.5-1.5,1.5-2c0.517-0.258,0.5,2,0.5,2,6.07,0.578,9.29,4.37,9,16.5h-12.5c0-4.9,4.8-3.7,4.5-10.5"
+       fill-rule="evenodd"
+       stroke="#000"
+       stroke-linecap="round"
+       stroke-miterlimit="4"
+       stroke-dasharray="none"
+       stroke-width="1.31999993"
+       fill="#FFF"
+       id="path4" />
+    <path
+       fill="#000"
+       d="m9,23.5a0.5,0.5,0,1,1,-1,0,0.5,0.5,0,1,1,1,0z"
+       transform="translate(-3.4999999,10)"
+       id="path6" />
+    <path
+       fill="#000"
+       d="m9.6058,30.28a1.0281,1.4729,30,0,1,-1.7807,-1.028,1.0281,1.4729,30,0,1,1.7807,1.028z"
+       id="path8" />
+  </g>
+  <g
+     transform="translate(0,-4)"
+     id="g23"
+     style="filter:url(#filter299)">
+    <path
+       stroke-linejoin="round"
+       d="m18,18,4-8-4,4,0-6-3,5.125-2-5-2,5l-3-5.125v6l-4-4,3,8s2.0349-2.5,6-2.5,5,2.5,5,2.5z"
+       fill-rule="evenodd"
+       stroke="#000"
+       stroke-linecap="butt"
+       stroke-miterlimit="4"
+       stroke-dasharray="none"
+       stroke-width="0.80000001"
+       fill="#FFF"
+       id="path12" />
+    <path
+       id="path3804"
+       stroke-linejoin="miter"
+       d="m5.5,10a1.5,1.5,0,0,1,-3,0,1.5,1.5,0,1,1,3,0z"
+       stroke-dashoffset="0"
+       stroke="#000"
+       stroke-linecap="butt"
+       stroke-miterlimit="4"
+       stroke-dasharray="none"
+       stroke-width="0.75"
+       fill="#FFF" />
+    <use
+       xlink:href="#path3804"
+       transform="translate(4,-2)"
+       height="26"
+       width="26"
+       y="0"
+       x="0"
+       id="use15" />
+    <use
+       xlink:href="#path3804"
+       transform="translate(9,-2)"
+       height="26"
+       width="26"
+       y="0"
+       x="0"
+       id="use17" />
+    <use
+       xlink:href="#path3804"
+       transform="matrix(-1,0,0,1,26,0)"
+       height="26"
+       width="26"
+       y="0"
+       x="0"
+       id="use19" />
+    <use
+       xlink:href="#path3804"
+       transform="matrix(-1,0,0,1,22,-2)"
+       height="26"
+       width="26"
+       y="0"
+       x="0"
+       id="use21" />
+  </g>
+</svg>
diff --git a/pieces/black_bishop.svg b/pieces/black_bishop.svg
new file mode 100644 (file)
index 0000000..f0a098c
--- /dev/null
@@ -0,0 +1,10 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1290 582l-42 102q-102 22-224 22-121 0-222-22l-42-101q124 31 264 31 138 0 266-32zm-84 206l-29 70v27q-76 11-153 11-75 0-152-11l-1-27-27-70q85 15 180 15 96 0 182-15zm-35-378q-40 30-80 95h-32q0-49 23-95h89zm-206 0q23 49 23 95h-32q-39-64-81-95h90zm59-18q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm-37 744v-85q0-37 37-37t37 37v86h90q35 0 35 36t-35 36h-90v90q0 37-37 37t-37-37v-90h-88q-35 0-35-36t35-36l88-1z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1290 1466-42-102q-102-22-224-22-121 0-222 22l-42 101q124-31 264-31 138 0 266 32z" display="block"/>
+  <path style="color:black;" d="m1206 1260-29-70v-27q-76-11-153-11-75 0-152 11l-1 27-27 70q85-15 180-15 96 0 182 15z" display="block"/>
+  <path style="color:black;" d="m1171 1638q-40-30-80-95h-32q0 49 23 95h89z" display="block"/>
+  <path style="color:black;" d="m965 1638q23-49 23-95h-32q-39 64-81 95h90z" display="block"/>
+  <path style="color:black;" d="m987 912v85q0 37 37 37t37-37v-86h90q35 0 35-36t-35-36h-90v-90q0-37-37-37t-37 37v90h-88q-35 0-35 36t35 36l88 1z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_empress.svg b/pieces/black_empress.svg
new file mode 100644 (file)
index 0000000..3b29027
--- /dev/null
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="45"
+   height="45"
+   id="svg3128"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   version="1.0"
+   sodipodi:docname="bm.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3130">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       id="perspective15" />
+    <inkscape:perspective
+       id="perspective12"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective14"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.0000004"
+     inkscape:cx="-3.6805949"
+     inkscape:cy="32.150177"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     height="45px"
+     width="45px"
+     inkscape:grid-points="true"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="0.5"
+       spacingy="0.5"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3133">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <g
+       id="g3481"
+       transform="matrix(1.1,0,0,1.1,-0.73904527,-2.4816526)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3127"
+         d="m 34,35.130223 -3,-3 H 14 l -3,3"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g3476">
+        <path
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 11,35.130223 v 5 h 4 v -2 h 5 v 2 h 5 v -2 h 5 v 2 h 4 v -5"
+           id="path3129"
+           sodipodi:nodetypes="cccccccccccc"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 31.552703,32.417761 V 30.302822 H 13.447297 v 2.114939"
+           id="path3125"
+           sodipodi:nodetypes="cccc"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 11,35.130223 H 34"
+           id="path5175"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g3323"
+       inkscape:label="Layer 1"
+       transform="matrix(-0.84196464,0,0,-0.84196464,40.187129,36.558652)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3491"
+         d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="csccccccccccc"
+         id="path3495"
+         d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <circle
+         transform="rotate(180,21.764479,22)"
+         id="path3499"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="8.5"
+         cy="23.5"
+         r="0.5" />
+      <ellipse
+         transform="rotate(-149.99999,24.024104,20.986505)"
+         id="path3501"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="14.5"
+         cy="15.5"
+         rx="0.5"
+         ry="1.5" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path8049"
+         d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 32.260955,30.858642 h -16.5"
+       id="path4590"
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="stroke-width:0.13749999"
+       d="m 14.242299,12.350948 c -0.433418,-0.433419 -0.08145,-1.670099 0.731389,-2.5698147 0.519664,-0.5752054 0.836975,-0.6774218 1.312651,-0.4228477 0.610478,0.3267176 0.02669,2.3193084 -0.861848,2.9416644 -0.366282,0.256554 -0.951394,0.281794 -1.182192,0.051 z"
+       id="path25"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffffff;stroke-width:0.13749999"
+       d="m 14.242299,12.350948 c -0.433418,-0.433419 -0.08145,-1.670099 0.731389,-2.5698147 0.519664,-0.5752054 0.836975,-0.6774218 1.312651,-0.4228477 0.610478,0.3267176 0.02669,2.3193084 -0.861848,2.9416644 -0.366282,0.256554 -0.951394,0.281794 -1.182192,0.051 z"
+       id="path27"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffffff;stroke-width:0.13749999"
+       d="M 9.9622793,19.853654 C 9.6319899,19.43376 9.6247283,19.381768 9.832636,18.925461 c 0.470059,-1.031669 2.007119,-0.512662 1.785765,0.602987 -0.146033,0.736023 -1.174165,0.937914 -1.6561217,0.325206 z"
+       id="path29"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000000;stroke-width:0.13749999"
+       d="m 16.576995,29.256572 c 0.242109,-1.402058 0.823496,-2.309817 2.777702,-4.33702 0.99934,-1.03667 2.020758,-2.182632 2.269816,-2.54658 1.064554,-1.555637 1.605171,-3.338851 1.743825,-5.751978 0.05298,-0.921919 0.174716,-1.650886 0.345385,-2.068037 0.264051,-0.645401 0.347924,-1.696332 0.158346,-1.984101 -0.172204,-0.261396 -0.6531,-0.338225 -0.915603,-0.146278 -0.150255,0.109868 -0.294955,0.466309 -0.362333,0.892543 -0.07037,0.445148 -0.296974,0.988033 -0.608011,1.456631 -0.677707,1.021008 -2.880055,3.09787 -4.606676,4.344196 -1.783507,1.287386 -2.588455,2.01561 -3.533686,3.196875 -0.830578,1.037978 -1.1538,1.206956 -0.733755,0.383603 0.564375,-1.106268 0.252744,-1.930478 -0.729907,-1.930478 -0.685377,0 -1.054799,0.385251 -1.054799,1.1 v 0.55 h -0.762815 c -0.6428709,0 -0.8143839,-0.05564 -1.090778,-0.353879 -0.3264951,-0.352293 -0.6214063,-1.359745 -0.6214063,-2.122799 0,-0.523973 0.378215,-1.46914 1.4298903,-3.573322 1.296633,-2.594293 3.18336,-5.85209 4.080281,-7.0453935 0.987435,-1.3137236 1.372489,-2.3742322 1.101507,-3.0337496 -0.09934,-0.2417838 -0.212898,-0.6252318 -0.252344,-0.8521068 -0.07158,-0.4117027 -0.07116,-0.4119964 0.220401,-0.1519859 0.160667,0.1432827 0.484904,0.560939 0.720528,0.928125 l 0.428403,0.6676108 h 1.289601 1.289599 l 0.335545,-0.6531249 c 0.388395,-0.7559947 1.11542,-1.6540683 1.240271,-1.5320706 0.04703,0.045955 0.123873,0.4943853 0.170763,0.9965122 0.04689,0.5021269 0.153664,0.969582 0.237279,1.0387893 0.08361,0.069208 0.770775,0.2309985 1.527025,0.3595363 3.247362,0.5519451 5.700956,1.787248 7.010774,3.5296897 2.855197,3.798252 4.193967,9.263661 4.195142,17.126292 l 3.33e-4,2.234375 h -8.712479 -8.712478 z m -5.112196,-9.178124 c 0.350478,-0.350479 0.359222,-1.103027 0.01771,-1.524769 -0.506754,-0.625814 -1.6590476,-0.313827 -1.864516,0.504825 -0.090447,0.360371 0.2132351,1.086215 0.503283,1.202916 0.419781,0.168897 1.08181,0.07874 1.343518,-0.182972 z m 4.121211,-7.786662 c 0.972093,-0.817962 1.434075,-2.5539036 0.798195,-2.9992914 -0.437567,-0.3064831 -0.85022,-0.2650274 -1.323165,0.1329306 -0.528989,0.4451139 -1.121241,1.6321738 -1.121241,2.2473188 0,0.966078 0.852707,1.286731 1.646211,0.619042 z"
+       id="path33"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000000;stroke-width:0.13749999"
+       d="m 14.146049,34.653447 0.955125,-0.9625 h 8.944875 8.944875 l 0.955124,0.9625 0.955125,0.9625 H 24.046049 13.190925 Z"
+       id="path39"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.10000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 11.773454,38.421142 23.924999,0.1375"
+       id="path41"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 1#1"
+     style="display:inline" />
+</svg>
diff --git a/pieces/black_king.svg b/pieces/black_king.svg
new file mode 100644 (file)
index 0000000..f3936d1
--- /dev/null
@@ -0,0 +1,12 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1060 1261q172 3 282 17t198 33q55-54 122-103t94-84q48-65 48-162 0-89-43-149-77-113-235-113-92 0-192 40-91 36-132 78-85 82-124 216-15 46-16 117t-2 110z" display="block"/>
+  <path style="color:black;" d="m988 1260q0-40-2-110t-15-118q-41-134-124-216-43-42-132-78-102-40-193-40-158 0-234 113-43 60-43 150 0 98 48 161 25 36 96 89t120 98q87-19 196-33t283-16z" display="block"/>
+  <path style="color:black;" d="m1024 1009q7-28 12-39 10-39 23-66 6-17 17-39t25-52q8-17 17-41t18-49q8-20 8-43 0-49-35-83t-85-35q-119 0-119 119 0 23 8 43 22 65 34 90 13 29 24 51t19 40q13 33 22 66 2 6 12 38z" display="block"/>
+ </g>
+ <g fill-rule="nonzero">
+  <path style="color:black;" d="m1133 865q0 29 6 82t21 84q37 81 106 150 20 20 86 54 65 32 139 32 56 0 111-19t84-60q25-34 25-110 0-60-49-112-32-33-69-66t-71-79q-58 20-161 31t-228 13zm-73-78q172-3 282-17t198-33q55 54 122 103t94 84q48 65 48 162 0 89-43 149-77 113-235 113-92 0-192-40-91-36-132-78-85-82-124-216-15-46-16-117t-2-110zm458-173q-184 51-490 51-308 0-496-52l15-101q189 49 481 49 291 0 474-48l16 101zm26-299l-30 118q-195 45-490 45-292 0-488-45l-32-119q190 58 521 58 159 0 295-16t224-41zm-1081 207l-33 187q-1 0-3 4-5 7-28 18t-55 40q-44 37-68 60t-45 50q-61 84-68 203-10 115 93 229 104 114 281 107 66-4 155-32 29-12 59-23t61-24q16-8 28-16-5 21-5 42 0 78 55 133t134 56q78 0 133-55t55-133q0-16-4-42 14 9 27 15 46 20 121 47 86 29 155 33 177 8 280-107 101-114 94-229-8-119-69-203-20-27-45-50t-67-60q-33-28-56-39t-27-19q-1-2-2-3t-1-2l-32-188 66-247q-50-45-224-74t-402-29q-232 0-408 30t-221 77l66 244zm525 266q0 40-2 110t-15 118q-41 134-124 216-43 42-132 78-102 40-193 40-158 0-234-113-43-60-43-150 0-98 48-161 25-36 96-89t120-98q87 19 196 33t283 16zm36 251q7 28 12 39 10 39 23 66 6 17 17 39t25 52q8 17 17 41t18 49q8 20 8 43 0 49-35 83t-85 35q-119 0-119-119 0-23 8-43 22-65 34-90 13-29 24-51t19-40q13-33 22-66 2-6 12-38zm35 520h-71v131h-83q-34 0-34 33v1q0 33 34 33h83v85q0 35 36 35 35 0 35-35v-85h86q33 0 33-33v-1q0-33-33-33l-85-1-1-130zm-147-694q-125-2-228-13t-161-31q-30 37-69 74t-70 71q-50 51-50 112 0 75 25 110 27 40 83 59t113 20q72 0 138-32 65-34 86-54 68-69 106-150 13-30 19-83t8-83zm112 345q-2 10-5 17-6 20-10 29-3 7-8 17t-10 23q-3 7-7 18t-8 22q-3 9-3 19 0 53 51 53 53 0 53-52 0-13-4-19-14-38-15-41-15-30-19-39-7-16-9-29-3-6-4-10t-2-8z" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+  <path style="color:black;" d="m1518 1434q-184-51-490-51-308 0-496 52l15 101q189-49 481-49 291 0 474 48l16-101z" display="block" fill="#fff"/>
+  <path style="color:black;" d="m1544 1733-30-118q-195-45-490-45-292 0-488 45l-32 119q190-58 521-58 159 0 295 16t224 41z" display="block" fill="#fff"/>
+ </g>
+</svg>
diff --git a/pieces/black_king_bishop.svg b/pieces/black_king_bishop.svg
new file mode 100644 (file)
index 0000000..508381b
--- /dev/null
@@ -0,0 +1,10 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1290 582l-42 102q-102 22-224 22-121 0-222-22l-42-101q124 31 264 31 138 0 266-32zm-84 206l-29 70v27q-76 11-153 11-75 0-152-11l-1-27-27-70q85 15 180 15 96 0 182-15zm-35-378q-40 30-80 95h-32q0-49 23-95h89zm-206 0q23 49 23 95h-32q-39-64-81-95h90zm59-18q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm-37 744v-85q0-37 37-37t37 37v86h90q35 0 35 36t-35 36h-90v90q0 37-37 37t-37-37v-90h-88q-35 0-35-36t35-36l88-1z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#a00"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1290 1466-42-102q-102-22-224-22-121 0-222 22l-42 101q124-31 264-31 138 0 266 32z" display="block"/>
+  <path style="color:black;" d="m1206 1260-29-70v-27q-76-11-153-11-75 0-152 11l-1 27-27 70q85-15 180-15 96 0 182 15z" display="block"/>
+  <path style="color:black;" d="m1171 1638q-40-30-80-95h-32q0 49 23 95h89z" display="block"/>
+  <path style="color:black;" d="m965 1638q23-49 23-95h-32q-39 64-81 95h90z" display="block"/>
+  <path style="color:black;" d="m987 912v85q0 37 37 37t37-37v-86h90q35 0 35-36t-35-36h-90v-90q0-37-37-37t-37 37v90h-88q-35 0-35 36t35 36l88 1z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_king_knight.svg b/pieces/black_king_knight.svg
new file mode 100644 (file)
index 0000000..537dc09
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m490 683q4 9 13 27 17 42 17 50-2 28-29 28-20 0-47-57-4-8-12-14-27-28 8-47 32-19 50 13zm590 371q70 92 69 205-4 33-38 33-46 0-36-34 3-55-11-91-23-57-51-85-15-30 18-44 32-15 49 16zm-261 488q-5 36 2 78-60-12-113-56-32-17-15-47 17-31 47-10 21 11 38 20t41 15zm937-1268q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q4-23 3-47t0-46q97-33 183-82t126-106q48-66 89-156t75-219q34-133 35-266t1-259q0-63-3-117t0-55h141zm-677 1423q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm-675-836q29 20 6 48-24 23-53 4-61-40-65-105 1-33 39-31 36 3 35 37 8 32 38 47zm252 498q22 11 22 11 30 12 19 44-12 30-46 20-118-43-163-158-7-33 24-45 31-10 42 22 8 17 12 22 11-9 29-12 61-10 71 54 3 22-10 42z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#a00"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m490 1365q4-9 13-27 17-42 17-50-2-28-29-28-20 0-47 57-4 8-12 14-27 28 8 47 32 19 50-13z" display="block"/>
+  <path style="color:black;" d="m1080 994q70-92 69-205-4-33-38-33-46 0-36 34 3 55-11 91-23 57-51 85-15 30 18 44 32 15 49-16z" display="block"/>
+  <path style="color:black;" d="m819 506q-5-36 2-78-60 12-113 56-32 17-15 47 17 31 47 10 21-11 38-20t41-15z" display="block"/>
+  <path style="color:black;" d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q4 23 3 47t0 46q97 33 183 82t126 106q48 66 89 156t75 219q34 133 35 266t1 259q0 63-3 117t0 55h141z" display="block"/>
+  <path style="color:black;" d="m404 1187q29-20 6-48-24-23-53-4-61 40-65 105 1 33 39 31 36-3 35-37 8-32 38-47z" display="block"/>
+  <path style="color:black;" d="m656 689q22-11 22-11 30-12 19-44-12-30-46-20-118 43-163 158-7 33 24 45 31 10 42-22 8-17 12-22 11 9 29 12 61 10 71-54 3-22-10-42z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_king_pawn.svg b/pieces/black_king_pawn.svg
new file mode 100644 (file)
index 0000000..718a4a3
--- /dev/null
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 205h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#a00"/>
+</svg>
diff --git a/pieces/black_king_queen.svg b/pieces/black_king_queen.svg
new file mode 100644 (file)
index 0000000..52fcc2d
--- /dev/null
@@ -0,0 +1,8 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1588 793q-83 30-233 49t-333 20q-178 0-326-18t-233-49l50-91q84 25 218 36t293 11q159 0 294-11t219-37l51 90zm226 668q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97q0-57-40-96t-96-40zm-1578 0q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97q0-57-40-96t-97-40zm1208 110q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-840 0q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm1036-1288q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-96 32l-30 118q-195 45-490 45-292 0-488-45l-32-119q190 58 521 58 159 0 295-16t224-41zm-26 299q-184 51-490 51-308 0-496-52l15-101q189 49 481 49 291 0 474-48l16 101zm-494 1007q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#a00"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1588 1255q-83-30-233-49t-333-20q-178 0-326 18t-233 49l50 91q84-25 218-36t293-11 294 11 219 37l51-90z" display="block"/>
+  <path style="color:black;" d="m1544 1733-30-118q-195-45-490-45-292 0-488 45l-32 119q190-58 521-58 159 0 295 16t224 41z" display="block"/>
+  <path style="color:black;" d="m1518 1434q-184-51-490-51-308 0-496 52l15 101q189-49 481-49 291 0 474 48l16-101z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_king_rook.svg b/pieces/black_king_rook.svg
new file mode 100644 (file)
index 0000000..e4051e4
--- /dev/null
@@ -0,0 +1,10 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm-597-1246v-102h920v102h-920zm460 1092h-512v-46l73-55h879l71 55v46h-511zm0-169h-350l60-47v-57h580v57l60 47h-350zm0-546h-290v-46l-60-58h700l-60 58v46h-290zm0-172h-414l-46-43v-58h920v58l-46 43h-414z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#a00"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m564 1588v102h920v-102h-920z" display="block"/>
+  <path style="color:black;" d="m1024 496h-512v46l73 55h879l71-55v-46h-511z" display="block"/>
+  <path style="color:black;" d="m1024 665h-350l60 47v57h580v-57l60-47h-350z" display="block"/>
+  <path style="color:black;" d="m1024 1211h-290v46l-60 58h700l-60-58v-46h-290z" display="block"/>
+  <path style="color:black;" d="m1024 1383h-414l-46 43v58h920v-58l-46-43h-414z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_knight.svg b/pieces/black_knight.svg
new file mode 100644 (file)
index 0000000..261eec4
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m490 683q4 9 13 27 17 42 17 50-2 28-29 28-20 0-47-57-4-8-12-14-27-28 8-47 32-19 50 13zm590 371q70 92 69 205-4 33-38 33-46 0-36-34 3-55-11-91-23-57-51-85-15-30 18-44 32-15 49 16zm-261 488q-5 36 2 78-60-12-113-56-32-17-15-47 17-31 47-10 21 11 38 20t41 15zm937-1268q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q4-23 3-47t0-46q97-33 183-82t126-106q48-66 89-156t75-219q34-133 35-266t1-259q0-63-3-117t0-55h141zm-677 1423q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm-675-836q29 20 6 48-24 23-53 4-61-40-65-105 1-33 39-31 36 3 35 37 8 32 38 47zm252 498q22 11 22 11 30 12 19 44-12 30-46 20-118-43-163-158-7-33 24-45 31-10 42 22 8 17 12 22 11-9 29-12 61-10 71 54 3 22-10 42z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m490 1365q4-9 13-27 17-42 17-50-2-28-29-28-20 0-47 57-4 8-12 14-27 28 8 47 32 19 50-13z" display="block"/>
+  <path style="color:black;" d="m1080 994q70-92 69-205-4-33-38-33-46 0-36 34 3 55-11 91-23 57-51 85-15 30 18 44 32 15 49-16z" display="block"/>
+  <path style="color:black;" d="m819 506q-5-36 2-78-60 12-113 56-32 17-15 47 17 31 47 10 21-11 38-20t41-15z" display="block"/>
+  <path style="color:black;" d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q4 23 3 47t0 46q97 33 183 82t126 106q48 66 89 156t75 219q34 133 35 266t1 259q0 63-3 117t0 55h141z" display="block"/>
+  <path style="color:black;" d="m404 1187q29-20 6-48-24-23-53-4-61 40-65 105 1 33 39 31 36-3 35-37 8-32 38-47z" display="block"/>
+  <path style="color:black;" d="m656 689q22-11 22-11 30-12 19-44-12-30-46-20-118 43-163 158-7 33 24 45 31 10 42-22 8-17 12-22 11 9 29 12 61 10 71-54 3-22-10-42z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_pawn.svg b/pieces/black_pawn.svg
new file mode 100644 (file)
index 0000000..3eaa9f5
--- /dev/null
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 205h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+</svg>
diff --git a/pieces/black_princess.svg b/pieces/black_princess.svg
new file mode 100644 (file)
index 0000000..c34593d
--- /dev/null
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="45"
+   height="45"
+   id="svg3128"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   version="1.0"
+   sodipodi:docname="bc.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3130">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       id="perspective15" />
+    <inkscape:perspective
+       id="perspective12"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.313709"
+     inkscape:cx="21.843794"
+     inkscape:cy="17.466685"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     height="45px"
+     width="45px"
+     inkscape:grid-points="true"
+     showgrid="true"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="0.5"
+       spacingy="0.5"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3133">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 37.5,37.5 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 C 11.52378,39.180439 18.926218,40.754342 22.65,39.15 c 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
+       id="path4582"
+       sodipodi:nodetypes="ccccccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 30.9,33.1 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
+       id="path4584"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 30.9,30.9 H 14.4"
+       id="path4590"
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3323"
+       inkscape:label="Layer 1"
+       transform="matrix(-0.84196464,0,0,-0.84196464,38.826174,36.60001)"
+       style="fill:#000000;fill-opacity:1">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3491"
+         d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="csccccccccccc"
+         id="path3495"
+         d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <circle
+         transform="rotate(180,21.764479,22)"
+         id="path3499"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="8.5"
+         cy="23.5"
+         r="0.5" />
+      <ellipse
+         transform="rotate(-149.99999,24.024104,20.986505)"
+         id="path3501"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="14.5"
+         cy="15.5"
+         rx="0.5"
+         ry="1.5" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path8049"
+         d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.64999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 14.4,30.9 H 30.9"
+       id="path3369"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 1#1"
+     style="display:inline" />
+</svg>
diff --git a/pieces/black_queen.svg b/pieces/black_queen.svg
new file mode 100644 (file)
index 0000000..49bfbe3
--- /dev/null
@@ -0,0 +1,8 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1588 793q-83 30-233 49t-333 20q-178 0-326-18t-233-49l50-91q84 25 218 36t293 11q159 0 294-11t219-37l51 90zm226 668q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97q0-57-40-96t-96-40zm-1578 0q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97q0-57-40-96t-97-40zm1208 110q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-840 0q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm1036-1288q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-96 32l-30 118q-195 45-490 45-292 0-488-45l-32-119q190 58 521 58 159 0 295-16t224-41zm-26 299q-184 51-490 51-308 0-496-52l15-101q189 49 481 49 291 0 474-48l16 101zm-494 1007q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1588 1255q-83-30-233-49t-333-20q-178 0-326 18t-233 49l50 91q84-25 218-36t293-11 294 11 219 37l51-90z" display="block"/>
+  <path style="color:black;" d="m1544 1733-30-118q-195-45-490-45-292 0-488 45l-32 119q190-58 521-58 159 0 295 16t224 41z" display="block"/>
+  <path style="color:black;" d="m1518 1434q-184-51-490-51-308 0-496 52l15 101q189-49 481-49 291 0 474 48l16-101z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/black_rook.svg b/pieces/black_rook.svg
new file mode 100644 (file)
index 0000000..c95631c
--- /dev/null
@@ -0,0 +1,10 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm-597-1246v-102h920v102h-920zm460 1092h-512v-46l73-55h879l71 55v46h-511zm0-169h-350l60-47v-57h580v57l60 47h-350zm0-546h-290v-46l-60-58h700l-60 58v46h-290zm0-172h-414l-46-43v-58h920v58l-46 43h-414z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m564 1588v102h920v-102h-920z" display="block"/>
+  <path style="color:black;" d="m1024 496h-512v46l73 55h879l71-55v-46h-511z" display="block"/>
+  <path style="color:black;" d="m1024 665h-350l60 47v57h580v-57l60-47h-350z" display="block"/>
+  <path style="color:black;" d="m1024 1211h-290v46l-60 58h700l-60-58v-46h-290z" display="block"/>
+  <path style="color:black;" d="m1024 1383h-414l-46 43v58h920v-58l-46-43h-414z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_amazon.svg b/pieces/white_amazon.svg
new file mode 100644 (file)
index 0000000..beeaaea
--- /dev/null
@@ -0,0 +1,25 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->\r\r
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="26" width="26" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">\r\r
+ <metadata>\r\r
+  <rdf:RDF>\r\r
+   <cc:Work rdf:about="">\r\r
+    <dc:format>image/svg+xml</dc:format>\r\r
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>\r\r
+    <dc:title/>\r\r
+   </cc:Work>\r\r
+  </rdf:RDF>\r\r
+ </metadata>\r\r
+ <g transform="matrix(0.75757574,0,0,0.75757574,2.8791515,-7.9393932)">\r\r
+  <path stroke-linejoin="miter" d="m14.44,29.5c0.222,1.68-3.09,4.06-4.5,5-1.73,1.16-1.74,2.7-3,2.5-0.602-0.545,0.817-2.02,0-2-0.58,0,0.19,1.1-0.5,1.5-0.58,0-2.5,0.4-2.5-2.5,0-1.2,3.5-6.5,3.5-6.5s0.934-1.08,1-2c-0.419-0.575-0.258-1.48,0-2,0.365-0.731,1.5,1.5,1.5,1.5h1s0.5-1.5,1.5-2c0.517-0.258,0.5,2,0.5,2,6.07,0.578,9.29,4.37,9,16.5h-12.5c0-4.9,4.8-3.7,4.5-10.5" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1.31999993" fill="#FFF"/>\r\r
+  <path fill="#000" d="m9,23.5a0.5,0.5,0,1,1,-1,0,0.5,0.5,0,1,1,1,0z" transform="translate(-3.4999999,10)"/>\r\r
+  <path fill="#000" d="m9.6058,30.28a1.0281,1.4729,30,0,1,-1.7807,-1.028,1.0281,1.4729,30,0,1,1.7807,1.028z"/>\r\r
+ </g>\r\r
+ <g transform="translate(0,-4)">\r\r
+  <path stroke-linejoin="round" d="m18,18,4-8-4,4,0-6-3,5.125-2-5-2,5l-3-5.125v6l-4-4,3,8s2.0349-2.5,6-2.5,5,2.5,5,2.5z" fill-rule="evenodd" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.80000001" fill="#FFF"/>\r\r
+  <path id="path3804" stroke-linejoin="miter" d="m5.5,10a1.5,1.5,0,0,1,-3,0,1.5,1.5,0,1,1,3,0z" stroke-dashoffset="0" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.75" fill="#FFF"/>\r\r
+  <use xlink:href="#path3804" transform="translate(4,-2)" height="26" width="26" y="0" x="0"/>\r\r
+  <use xlink:href="#path3804" transform="translate(9,-2)" height="26" width="26" y="0" x="0"/>\r\r
+  <use xlink:href="#path3804" transform="matrix(-1,0,0,1,26,0)" height="26" width="26" y="0" x="0"/>\r\r
+  <use xlink:href="#path3804" transform="matrix(-1,0,0,1,22,-2)" height="26" width="26" y="0" x="0"/>\r\r
+ </g>\r\r
+</svg>\r\r
diff --git a/pieces/white_bishop.svg b/pieces/white_bishop.svg
new file mode 100644 (file)
index 0000000..2dfcf08
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 1166q97 0 186 15 98-35 142-109 38-64 38-141 0-46-23-101t-75-101q-59-49-129-107t-139-137q-70 78-140 136t-128 108q-53 45-75 100t-23 102q0 77 37 141 43 74 143 109 88-15 186-15z" fill-rule="nonzero" display="block" fill="#fff"/>
+ <path style="color:black;" d="m988 1138l-83 1q-34 0-34 34t34 34h83v86q0 35 36 35 35 0 35-35v-86h86q33 0 33-34t-33-34h-86v-82q0-36-35-36-36 0-36 36v81zm36-578q68 0 132 11t125 28q-117 31-257 31-142 0-257-31 58-16 123-27t134-12zm0 1089q68 0 68 68t-68 68-68-68 68-68zm0-949q117 0 225-23l-48 123q-88 14-177 14-91 0-178-14l-48-123q107 23 226 23zm0 182q97 0 186-15 98 35 142 109 38 64 38 141 0 46-23 101t-75 101q-59 49-129 107t-139 137q-70-78-140-136t-128-108q-53-45-75-100t-23-102q0-77 37-141 43-74 143-109 88 15 186 15zm-36-377h-32q-56-90-107-113-24-12-53-22t-67-10q-7 0-107 16-48 7-76 15t-44 10q-57 7-133-6-46-8-86-29l48-78q12 12 31 15t36 8q42 7 80 2 13-3 51-7t101-15q75-11 102-11 105 0 161 40 34 26 64 72t31 113zm36-113q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm35 113q0-66 30-112t66-73q55-40 161-40 26 0 102 11 62 10 100 14t51 8q38 5 80-2 16-4 35-7t33-16l48 78q-41 21-87 29-76 13-133 6-17-2-44-10t-75-15q-101-16-107-16-39 0-68 10t-52 22q-53 24-108 113h-32z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1024 1488q68 0 132-11t125-28q-117-31-257-31-142 0-257 31 58 16 123 27t134 12z" display="block"/>
+  <path style="color:black;" d="m1024 399q68 0 68-68t-68-68-68 68 68 68z" display="block"/>
+  <path style="color:black;" d="m1024 1348q117 0 225 23l-48-123q-88-14-177-14-91 0-178 14l-48 123q107-23 226-23z" display="block"/>
+  <path style="color:black;" d="m988 1543h-32q-56 90-107 113-24 12-53 22t-67 10q-7 0-107-16-48-7-76-15t-44-10q-57-7-133 6-46 8-86 29l48 78q12-12 31-15t36-8q42-7 80-2 13 3 51 7t101 15q75 11 102 11 105 0 161-40 34-26 64-72t31-113z" display="block"/>
+  <path style="color:black;" d="m1059 1543q0 66 30 112t66 73q55 40 161 40 26 0 102-11 62-10 100-14t51-8q38-5 80 2 16 4 35 7t33 16l48-78q-41-21-87-29-76-13-133-6-17 2-44 10t-75 15q-101 16-107 16-39 0-68-10t-52-22q-53-24-108-113h-32z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_empress.svg b/pieces/white_empress.svg
new file mode 100644 (file)
index 0000000..cc1099c
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="45"
+   height="45"
+   id="svg3128"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   version="1.0"
+   sodipodi:docname="wm.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3130">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       id="perspective15" />
+    <inkscape:perspective
+       id="perspective12"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective14"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.0000004"
+     inkscape:cx="-3.9305949"
+     inkscape:cy="32.150177"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     height="45px"
+     width="45px"
+     inkscape:grid-points="true"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="0.5"
+       spacingy="0.5"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3133">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <g
+       id="g3481"
+       transform="matrix(1.1,0,0,1.1,-1.1140452,-2.4816526)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3127"
+         d="m 34,35.130223 -3,-3 H 14 l -3,3"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g3476">
+        <path
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 11,35.130223 v 5 h 4 v -2 h 5 v 2 h 5 v -2 h 5 v 2 h 4 v -5"
+           id="path3129"
+           sodipodi:nodetypes="cccccccccccc"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 31.552703,32.417761 V 30.302822 H 13.447297 v 2.114939"
+           id="path3125"
+           sodipodi:nodetypes="cccc"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 11,35.130223 H 34"
+           id="path5175"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g3323"
+       inkscape:label="Layer 1"
+       transform="matrix(-0.84196464,0,0,-0.84196464,39.812129,36.558652)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3491"
+         d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="csccccccccccc"
+         id="path3495"
+         d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <circle
+         transform="rotate(180,21.764479,22)"
+         id="path3499"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="8.5"
+         cy="23.5"
+         r="0.5" />
+      <ellipse
+         transform="rotate(-149.99999,24.024104,20.986505)"
+         id="path3501"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="14.5"
+         cy="15.5"
+         rx="0.5"
+         ry="1.5" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path8049"
+         d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 31.885955,30.858642 h -16.5"
+       id="path4590"
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 1#1"
+     style="display:inline" />
+</svg>
diff --git a/pieces/white_king.svg b/pieces/white_king.svg
new file mode 100644 (file)
index 0000000..a31f36b
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m524 583q190 48 504 48 308 0 497-46l25 147q-201 53-526 53-327 0-525-54l25-148zm-61-61l-33 187q-1 0-3 4-5 7-28 18t-55 40q-44 37-68 60t-45 50q-61 84-68 203-10 115 93 229 104 114 281 107 66-4 155-32 29-12 59-23t61-24q16-8 28-16-5 21-5 42 0 78 55 133t134 56q78 0 133-55t55-133q0-16-4-42 14 9 27 15 46 20 121 47 86 29 155 33 177 8 280-107 101-114 94-229-8-119-69-203-20-27-45-50t-67-60q-33-28-56-39t-27-19q-1-2-2-3t-1-2l-32-188 66-247q-50-45-224-74t-402-29q-232 0-408 30t-221 77l66 244zm1081-117l-30 115q-198 44-490 44-291 0-489-44l-32-116q191 56 522 56 329 0 519-55zm26-94q-193 78-542 78-362 0-548-80 176-70 545-70 176 0 321 19t224 53zm-581 542q-1 39-3 77t-15 86q-41 134-124 216-43 42-132 78-102 40-193 40-158 0-234-113-43-60-43-150 0-98 48-161 29-37 74-74t84-67q175 63 538 68zm35 186q7 28 12 39 10 39 23 66 6 17 17 39t25 52q8 17 17 41t18 49q8 20 8 43 0 49-35 83t-85 35q-119 0-119-119 0-23 8-43 22-65 34-90 13-29 24-51t19-40q13-33 22-66 2-6 12-38zm34-186q172-2 315-20t224-47q38 30 83 66t75 75q48 61 48 161 0 90-43 150-77 112-234 112-94 0-193-39-87-35-132-78-84-84-124-216-14-47-16-85t-3-79zm1 706h-71v131h-83q-34 0-34 33v1q0 33 34 33h83v85q0 35 36 35 35 0 35-35v-85h86q33 0 33-33v-1q0-33-33-33l-85-1-1-130z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m524 1465q190-48 504-48 308 0 497 46l25-147q-201-53-526-53-327 0-525 54l25 148z" display="block"/>
+  <path style="color:black;" d="m1544 1643-30-115q-198-44-490-44-291 0-489 44l-32 116q191-56 522-56 329 0 519 55z" display="block"/>
+  <path style="color:black;" d="m1570 1737q-193-78-542-78-362 0-548 80 176 70 545 70 176 0 321-19t224-53z" display="block"/>
+  <path style="color:black;" d="m989 1195q-1-39-3-77t-15-86q-41-134-124-216-43-42-132-78-102-40-193-40-158 0-234 113-43 60-43 150 0 98 48 161 29 37 74 74t84 67q175-63 538-68z" display="block"/>
+  <path style="color:black;" d="m1024 1009q7-28 12-39 10-39 23-66 6-17 17-39t25-52q8-17 17-41t18-49q8-20 8-43 0-49-35-83t-85-35q-119 0-119 119 0 23 8 43 22 65 34 90 13 29 24 51t19 40q13 33 22 66 2 6 12 38z" display="block"/>
+  <path style="color:black;" d="m1058 1195q172 2 315 20t224 47q38-30 83-66t75-75q48-61 48-161 0-90-43-150-77-112-234-112-94 0-193 39-87 35-132 78-84 84-124 216-14 47-16 85t-3 79z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_king_bishop.svg b/pieces/white_king_bishop.svg
new file mode 100644 (file)
index 0000000..4af5154
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 1166q97 0 186 15 98-35 142-109 38-64 38-141 0-46-23-101t-75-101q-59-49-129-107t-139-137q-70 78-140 136t-128 108q-53 45-75 100t-23 102q0 77 37 141 43 74 143 109 88-15 186-15z" fill-rule="nonzero" display="block" fill="#fc0"/>
+ <path style="color:black;" d="m988 1138l-83 1q-34 0-34 34t34 34h83v86q0 35 36 35 35 0 35-35v-86h86q33 0 33-34t-33-34h-86v-82q0-36-35-36-36 0-36 36v81zm36-578q68 0 132 11t125 28q-117 31-257 31-142 0-257-31 58-16 123-27t134-12zm0 1089q68 0 68 68t-68 68-68-68 68-68zm0-949q117 0 225-23l-48 123q-88 14-177 14-91 0-178-14l-48-123q107 23 226 23zm0 182q97 0 186-15 98 35 142 109 38 64 38 141 0 46-23 101t-75 101q-59 49-129 107t-139 137q-70-78-140-136t-128-108q-53-45-75-100t-23-102q0-77 37-141 43-74 143-109 88 15 186 15zm-36-377h-32q-56-90-107-113-24-12-53-22t-67-10q-7 0-107 16-48 7-76 15t-44 10q-57 7-133-6-46-8-86-29l48-78q12 12 31 15t36 8q42 7 80 2 13-3 51-7t101-15q75-11 102-11 105 0 161 40 34 26 64 72t31 113zm36-113q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm35 113q0-66 30-112t66-73q55-40 161-40 26 0 102 11 62 10 100 14t51 8q38 5 80-2 16-4 35-7t33-16l48 78q-41 21-87 29-76 13-133 6-17-2-44-10t-75-15q-101-16-107-16-39 0-68 10t-52 22q-53 24-108 113h-32z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fc0">
+  <path style="color:black;" d="m1024 1488q68 0 132-11t125-28q-117-31-257-31-142 0-257 31 58 16 123 27t134 12z" display="block"/>
+  <path style="color:black;" d="m1024 399q68 0 68-68t-68-68-68 68 68 68z" display="block"/>
+  <path style="color:black;" d="m1024 1348q117 0 225 23l-48-123q-88-14-177-14-91 0-178 14l-48 123q107-23 226-23z" display="block"/>
+  <path style="color:black;" d="m988 1543h-32q-56 90-107 113-24 12-53 22t-67 10q-7 0-107-16-48-7-76-15t-44-10q-57-7-133 6-46 8-86 29l48 78q12-12 31-15t36-8q42-7 80-2 13 3 51 7t101 15q75 11 102 11 105 0 161-40 34-26 64-72t31-113z" display="block"/>
+  <path style="color:black;" d="m1059 1543q0 66 30 112t66 73q55 40 161 40 26 0 102-11 62-10 100-14t51-8q38-5 80 2 16 4 35 7t33 16l48-78q-41-21-87-29-76-13-133-6-17 2-44 10t-75 15q-101 16-107 16-39 0-68-10t-52-22q-53-24-108-113h-32z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_king_knight.svg b/pieces/white_king_knight.svg
new file mode 100644 (file)
index 0000000..20541c8
--- /dev/null
@@ -0,0 +1,4 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q9 49 8 96-2 36-34 36-37 0-33-36 3-132-94-226-76 80-82 186-2 35-36 31-32-1-32-37 0 0 2-8-41 13-86 37-29 20-47-10t16-47q43-22 65-33-86-88-196-142 12 139 76 263 17 26-8 46-28 22-47-7-7-10-20-36-21 21-28 31-7 9-24 40t-26 51q-9 25-8 40t3 35q-9 59-40 111t-81 127q-47 72-72 108t-38 92q-9 34 0 82t39 76q46 47 89 43 14 0 37-11t37-42q26-57 43-57 25 0 27 28 0 6-16 50-9 20-24 42-19 26-17 22 16 57 53 20 11-11 25-41t44-81q35-59 75-96t71-60q18-13 44-30t70-35q35-14 77-34t76-53q46-45 71-111 13-37 10-91-9-34 34-34 32 0 36 33 0 113-64 206 21 64 11 140-9 61-42 130t-136 155q-207 172-196 354 0 0 170 0t321 0h547z" fill-rule="nonzero" display="block" fill="#fc0"/>
+ <path style="color:black;" d="m697 1359q13-20 10-42-10-64-71-54-18 3-29 12-4-5-12-22-11-32-42-22-31 12-24 45 45 115 163 158 34 10 45-20 12-32-18-44-6-3-11-5t-11-6zm-297-477q-29-18-35-48 1-33-31-36-35-4-36 30 4 66 59 105 26 21 48-4 22-27-5-47zm679 815q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm677-1423q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q9-49 8-96-2-36-34-36-37 0-33 36 3 132-94 226-76-80-82-186-2-35-36-31-32 1-32 37 0 0 2 8-41-13-86-37-29-20-47 10t16 47q43 22 65 33-86 88-196 142 12-139 76-263 17-26-8-46-28-22-47 7-7 10-20 36-21-21-28-31-7-9-24-40t-26-51q-9-25-8-40t3-35q-9-59-40-111t-81-127q-47-72-72-108t-38-92q-9-34 0-82t39-76q46-47 89-43 14 0 37 11t37 42q26 57 43 57 25 0 27-28 0-6-16-50-9-20-24-42-19-26-17-22 16-57 53-20 11 11 25 41t44 81q35 59 75 96t71 60q18 13 44 30t70 35q35 14 77 34t76 53q46 45 71 111 13 37 10 91-9 34 34 34 32 0 36-33 0-113-64-206 21-64 11-140-9-61-42-130t-136-155q-207-172-196-354 0 0 170 0t321 0h547z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+</svg>
diff --git a/pieces/white_king_pawn.svg b/pieces/white_king_pawn.svg
new file mode 100644 (file)
index 0000000..bc21051
--- /dev/null
@@ -0,0 +1,4 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 273h491q21 72 21 141 0 156-86 283t-223 187q-66 5-66 72 0 53 67 78 93 65 93 172 0 77-52 135t-126 67q-60 5-60 68 0 28 22 52 54 42 54 110 0 56-40 96t-95 40q-57 0-96-40t-40-96q0-67 54-110 22-22 22-52 0-63-59-68-75-9-126-67t-52-135q0-107 93-172 67-26 67-78 0-67-67-72-136-60-222-187t-86-283q0-74 21-141h491zm0-68h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <path style="color:black;" d="m1024 1775h491q21-72 21-141 0-156-86-283t-223-187q-66-5-66-72 0-53 67-78 93-65 93-172 0-77-52-135t-126-67q-60-5-60-68 0-28 22-52 54-42 54-110 0-56-40-96t-95-40q-57 0-96 40t-40 96q0 67 54 110 22 22 22 52 0 63-59 68-75 9-126 67t-52 135q0 107 93 172 67 26 67 78 0 67-67 72-136 60-222 187t-86 283q0 74 21 141h491z" fill-rule="nonzero" display="block" fill="#fc0"/>
+</svg>
diff --git a/pieces/white_king_queen.svg b/pieces/white_king_queen.svg
new file mode 100644 (file)
index 0000000..185be0e
--- /dev/null
@@ -0,0 +1,19 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 1621q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40zm0 70q67 0 67 67 0 66-67 66-66 0-66-66 0-67 66-67zm509-1007q-193 49-505 49-320 0-511-50l15-96q195 46 496 46 299 0 488-45l17 96zm25 60 65 115q-48-19-98-19-134 0-214 109-60-50-134-50-96 0-153 75-64-70-153-70-72 0-132 49-84-107-217-107-51 0-101 19l70-120q194 56 533 56 345 0 534-57zm-448 239-85 489-85-483q3 2 14 10 23 45 70 45 51 0 66-45 6-6 20-16zm277-19v463l-165-454q19 7 32 18 20 25 54 25 40 0 64-35 3-4 7-8t8-9zm-562 14-164 449v-457q3 4 9 10 20 42 66 42 38 0 62-32 27-12 27-12zm-254-56-215 371 55-338q57-40 111-40 21 0 49 7zm903-5q23-7 51-7 61 0 114 38l55 346-220-377zm60-506-30 113q-196 43-480 43-281 0-479-43l-31-114q186 56 511 56 317 0 509-55zm106-128q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-81 36q-183 76-531 76-355 0-537-78 175-69 534-69 172 0 314 19t220 52zm-955 1252q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm0 70q66 0 66 66t-66 66q-67 0-67-66t67-66zm840 0q67 0 67 66t-67 66q-66 0-66-66t66-66zm0-70q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-1208-110q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97-40-96-97-40zm0 70q67 0 67 66 0 67-67 67-66 0-66-67 0-66 66-66zm1578 0q66 0 66 66 0 67-66 67-67 0-67-67 0-66 67-66zm0-70q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97-40-96-96-40z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fc0">
+  <path style="color:black;" d="m1024 357q67 0 67-67 0-66-67-66-66 0-66 66 0 67 66 67z" display="block"/>
+  <path style="color:black;" d="m1533 1364q-193-49-505-49-320 0-511 50l15 96q195-46 496-46 299 0 488 45l17-96z" display="block"/>
+  <path style="color:black;" d="m1558 1304 65-115q-48 19-98 19-134 0-214-109-60 50-134 50-96 0-153-75-64 70-153 70-72 0-132-49-84 107-217 107-51 0-101-19l70 120q194-56 533-56 345 0 534 57z" display="block"/>
+  <path style="color:black;" d="m1110 1065-85-489-85 483q3-2 14-10 23-45 70-45 51 0 66 45 6 6 20 16z" display="block"/>
+  <path style="color:black;" d="m1387 1084v-463l-165 454q19-7 32-18 20-25 54-25 40 0 64 35 3 4 7 8t8 9z" display="block"/>
+  <path style="color:black;" d="m825 1070-164-449v457q3-4 9-10 20-42 66-42 38 0 62 32 27 12 27 12z" display="block"/>
+  <path style="color:black;" d="m571 1126-215-371 55 338q57 40 111 40 21 0 49-7z" display="block"/>
+  <path style="color:black;" d="m1474 1131q23 7 51 7 61 0 114-38l55-346-220 377z" display="block"/>
+  <path style="color:black;" d="m1534 1637-30-113q-196-43-480-43-281 0-479 43l-31 114q186-56 511-56 317 0 509 55z" display="block"/>
+  <path style="color:black;" d="m1559 1729q-183-76-531-76-355 0-537 78 175 69 534 69 172 0 314-19t220-52z" display="block"/>
+  <path style="color:black;" d="m604 407q66 0 66-66t-66-66q-67 0-67 66t67 66z" display="block"/>
+  <path style="color:black;" d="m1444 407q67 0 67-66t-67-66q-66 0-66 66t66 66z" display="block"/>
+  <path style="color:black;" d="m236 517q67 0 67-66 0-67-67-67-66 0-66 67 0 66 66 66z" display="block"/>
+  <path style="color:black;" d="m1814 517q66 0 66-66 0-67-66-67-67 0-67 67 0 66 67 66z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_king_rook.svg b/pieces/white_king_rook.svg
new file mode 100644 (file)
index 0000000..6c6528f
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm478-1330h-1230v-103h1230v103zm-155 204h-920v-136h920v136zm-170 717h-580v-478h580v478zm222 239v239h-137v-137h-308v137h-135v-137h-307v137h-137v-239h1024zm-77-887l-103 102h-663l-105-102h871zm-110 716l127 103h-904l128-103h649z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fc0">
+  <path style="color:black;" d="m1639 1672h-1230v103h1230v-103z" display="block"/>
+  <path style="color:black;" d="m1484 1468h-920v136h920v-136z" display="block"/>
+  <path style="color:black;" d="m1314 751h-580v478h580v-478z" display="block"/>
+  <path style="color:black;" d="m1536 512v-239h-137v137h-308v-137h-135v137h-307v-137h-137v239h1024z" display="block"/>
+ </g>
+ <path style="color:black;" d="m1459 1399-103-102h-663l-105 102h871z" fill-rule="nonzero" display="block" fill="#fc0"/>
+ <path style="color:black;" d="m1349 683 127-103h-904l128 103h649z" fill-rule="nonzero" display="block" fill="#fc0"/>
+</svg>
diff --git a/pieces/white_knight.svg b/pieces/white_knight.svg
new file mode 100644 (file)
index 0000000..8bf5d89
--- /dev/null
@@ -0,0 +1,4 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q9 49 8 96-2 36-34 36-37 0-33-36 3-132-94-226-76 80-82 186-2 35-36 31-32-1-32-37 0 0 2-8-41 13-86 37-29 20-47-10t16-47q43-22 65-33-86-88-196-142 12 139 76 263 17 26-8 46-28 22-47-7-7-10-20-36-21 21-28 31-7 9-24 40t-26 51q-9 25-8 40t3 35q-9 59-40 111t-81 127q-47 72-72 108t-38 92q-9 34 0 82t39 76q46 47 89 43 14 0 37-11t37-42q26-57 43-57 25 0 27 28 0 6-16 50-9 20-24 42-19 26-17 22 16 57 53 20 11-11 25-41t44-81q35-59 75-96t71-60q18-13 44-30t70-35q35-14 77-34t76-53q46-45 71-111 13-37 10-91-9-34 34-34 32 0 36 33 0 113-64 206 21 64 11 140-9 61-42 130t-136 155q-207 172-196 354 0 0 170 0t321 0h547z" fill-rule="nonzero" display="block" fill="#fff"/>
+ <path style="color:black;" d="m697 1359q13-20 10-42-10-64-71-54-18 3-29 12-4-5-12-22-11-32-42-22-31 12-24 45 45 115 163 158 34 10 45-20 12-32-18-44-6-3-11-5t-11-6zm-297-477q-29-18-35-48 1-33-31-36-35-4-36 30 4 66 59 105 26 21 48-4 22-27-5-47zm679 815q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm677-1423q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q9-49 8-96-2-36-34-36-37 0-33 36 3 132-94 226-76-80-82-186-2-35-36-31-32 1-32 37 0 0 2 8-41-13-86-37-29-20-47 10t16 47q43 22 65 33-86 88-196 142 12-139 76-263 17-26-8-46-28-22-47 7-7 10-20 36-21-21-28-31-7-9-24-40t-26-51q-9-25-8-40t3-35q-9-59-40-111t-81-127q-47-72-72-108t-38-92q-9-34 0-82t39-76q46-47 89-43 14 0 37 11t37 42q26 57 43 57 25 0 27-28 0-6-16-50-9-20-24-42-19-26-17-22 16-57 53-20 11 11 25 41t44 81q35 59 75 96t71 60q18 13 44 30t70 35q35 14 77 34t76 53q46 45 71 111 13 37 10 91-9 34 34 34 32 0 36-33 0-113-64-206 21-64 11-140-9-61-42-130t-136-155q-207-172-196-354 0 0 170 0t321 0h547z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+</svg>
diff --git a/pieces/white_pawn.svg b/pieces/white_pawn.svg
new file mode 100644 (file)
index 0000000..eccfc27
--- /dev/null
@@ -0,0 +1,4 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 273h491q21 72 21 141 0 156-86 283t-223 187q-66 5-66 72 0 53 67 78 93 65 93 172 0 77-52 135t-126 67q-60 5-60 68 0 28 22 52 54 42 54 110 0 56-40 96t-95 40q-57 0-96-40t-40-96q0-67 54-110 22-22 22-52 0-63-59-68-75-9-126-67t-52-135q0-107 93-172 67-26 67-78 0-67-67-72-136-60-222-187t-86-283q0-74 21-141h491zm0-68h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <path style="color:black;" d="m1024 1775h491q21-72 21-141 0-156-86-283t-223-187q-66-5-66-72 0-53 67-78 93-65 93-172 0-77-52-135t-126-67q-60-5-60-68 0-28 22-52 54-42 54-110 0-56-40-96t-95-40q-57 0-96 40t-40 96q0 67 54 110 22 22 22 52 0 63-59 68-75 9-126 67t-52 135q0 107 93 172 67 26 67 78 0 67-67 72-136 60-222 187t-86 283q0 74 21 141h491z" fill-rule="nonzero" display="block" fill="#fff"/>
+</svg>
diff --git a/pieces/white_princess.svg b/pieces/white_princess.svg
new file mode 100644 (file)
index 0000000..ee56aff
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="45"
+   height="45"
+   id="svg3128"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   version="1.0"
+   sodipodi:docname="wc.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3130">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       id="perspective15" />
+    <inkscape:perspective
+       id="perspective12"
+       inkscape:persp3d-origin="22.5 : 15 : 1"
+       inkscape:vp_z="45 : 22.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 22.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.0000004"
+     inkscape:cx="60.308779"
+     inkscape:cy="24.511479"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     height="45px"
+     width="45px"
+     inkscape:grid-points="true"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="0.5"
+       spacingy="0.5"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3133">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 37.725,38.008918 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 3.7237802,-1.069561 11.1262182,0.504342 14.8500002,-1.1 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
+       id="path4582"
+       sodipodi:nodetypes="ccccccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 31.125,33.608918 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
+       id="path4584"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 31.125,31.408918 h -16.5"
+       id="path4590"
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3323"
+       inkscape:label="Layer 1"
+       transform="matrix(-0.84196464,0,0,-0.84196464,39.051174,37.108928)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path3491"
+         d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="csccccccccccc"
+         id="path3495"
+         d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <circle
+         transform="rotate(180,21.764479,22)"
+         id="path3499"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="8.5"
+         cy="23.5"
+         r="0.5" />
+      <ellipse
+         transform="rotate(-149.99999,24.024104,20.986505)"
+         id="path3501"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         cx="14.5"
+         cy="15.5"
+         rx="0.5"
+         ry="1.5" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path8049"
+         d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 1#1"
+     style="display:inline" />
+</svg>
diff --git a/pieces/white_queen.svg b/pieces/white_queen.svg
new file mode 100644 (file)
index 0000000..b98b76f
--- /dev/null
@@ -0,0 +1,19 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1024 1621q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40zm0 70q67 0 67 67 0 66-67 66-66 0-66-66 0-67 66-67zm509-1007q-193 49-505 49-320 0-511-50l15-96q195 46 496 46 299 0 488-45l17 96zm25 60 65 115q-48-19-98-19-134 0-214 109-60-50-134-50-96 0-153 75-64-70-153-70-72 0-132 49-84-107-217-107-51 0-101 19l70-120q194 56 533 56 345 0 534-57zm-448 239-85 489-85-483q3 2 14 10 23 45 70 45 51 0 66-45 6-6 20-16zm277-19v463l-165-454q19 7 32 18 20 25 54 25 40 0 64-35 3-4 7-8t8-9zm-562 14-164 449v-457q3 4 9 10 20 42 66 42 38 0 62-32 27-12 27-12zm-254-56-215 371 55-338q57-40 111-40 21 0 49 7zm903-5q23-7 51-7 61 0 114 38l55 346-220-377zm60-506-30 113q-196 43-480 43-281 0-479-43l-31-114q186 56 511 56 317 0 509-55zm106-128q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-81 36q-183 76-531 76-355 0-537-78 175-69 534-69 172 0 314 19t220 52zm-955 1252q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm0 70q66 0 66 66t-66 66q-67 0-67-66t67-66zm840 0q67 0 67 66t-67 66q-66 0-66-66t66-66zm0-70q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-1208-110q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97-40-96-97-40zm0 70q67 0 67 66 0 67-67 67-66 0-66-67 0-66 66-66zm1578 0q66 0 66 66 0 67-66 67-67 0-67-67 0-66 67-66zm0-70q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97-40-96-96-40z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1024 357q67 0 67-67 0-66-67-66-66 0-66 66 0 67 66 67z" display="block"/>
+  <path style="color:black;" d="m1533 1364q-193-49-505-49-320 0-511 50l15 96q195-46 496-46 299 0 488 45l17-96z" display="block"/>
+  <path style="color:black;" d="m1558 1304 65-115q-48 19-98 19-134 0-214-109-60 50-134 50-96 0-153-75-64 70-153 70-72 0-132-49-84 107-217 107-51 0-101-19l70 120q194-56 533-56 345 0 534 57z" display="block"/>
+  <path style="color:black;" d="m1110 1065-85-489-85 483q3-2 14-10 23-45 70-45 51 0 66 45 6 6 20 16z" display="block"/>
+  <path style="color:black;" d="m1387 1084v-463l-165 454q19-7 32-18 20-25 54-25 40 0 64 35 3 4 7 8t8 9z" display="block"/>
+  <path style="color:black;" d="m825 1070-164-449v457q3-4 9-10 20-42 66-42 38 0 62 32 27 12 27 12z" display="block"/>
+  <path style="color:black;" d="m571 1126-215-371 55 338q57 40 111 40 21 0 49-7z" display="block"/>
+  <path style="color:black;" d="m1474 1131q23 7 51 7 61 0 114-38l55-346-220 377z" display="block"/>
+  <path style="color:black;" d="m1534 1637-30-113q-196-43-480-43-281 0-479 43l-31 114q186-56 511-56 317 0 509 55z" display="block"/>
+  <path style="color:black;" d="m1559 1729q-183-76-531-76-355 0-537 78 175 69 534 69 172 0 314-19t220-52z" display="block"/>
+  <path style="color:black;" d="m604 407q66 0 66-66t-66-66q-67 0-67 66t67 66z" display="block"/>
+  <path style="color:black;" d="m1444 407q67 0 67-66t-67-66q-66 0-66 66t66 66z" display="block"/>
+  <path style="color:black;" d="m236 517q67 0 67-66 0-67-67-67-66 0-66 67 0 66 66 66z" display="block"/>
+  <path style="color:black;" d="m1814 517q66 0 66-66 0-67-66-67-67 0-67 67 0 66 67 66z" display="block"/>
+ </g>
+</svg>
diff --git a/pieces/white_rook.svg b/pieces/white_rook.svg
new file mode 100644 (file)
index 0000000..d2a6ea2
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 2048 2048">
+ <path style="color:black;" d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm478-1330h-1230v-103h1230v103zm-155 204h-920v-136h920v136zm-170 717h-580v-478h580v478zm222 239v239h-137v-137h-308v137h-135v-137h-307v137h-137v-239h1024zm-77-887l-103 102h-663l-105-102h871zm-110 716l127 103h-904l128-103h649z" fill-rule="nonzero" transform="translate(0,2048) scale(1,-1)" display="block" fill="#000"/>
+ <g fill-rule="nonzero" fill="#fff">
+  <path style="color:black;" d="m1639 1672h-1230v103h1230v-103z" display="block"/>
+  <path style="color:black;" d="m1484 1468h-920v136h920v-136z" display="block"/>
+  <path style="color:black;" d="m1314 751h-580v478h580v-478z" display="block"/>
+  <path style="color:black;" d="m1536 512v-239h-137v137h-308v-137h-135v137h-307v-137h-137v239h1024z" display="block"/>
+ </g>
+ <path style="color:black;" d="m1459 1399-103-102h-663l-105 102h871z" fill-rule="nonzero" display="block" fill="#fff"/>
+ <path style="color:black;" d="m1349 683 127-103h-904l128 103h649z" fill-rule="nonzero" display="block" fill="#fff"/>
+</svg>
index 5661136..0382e37 100644 (file)
--- a/server.js
+++ b/server.js
@@ -63,9 +63,9 @@ wss.on("connection", (socket, req) => {
     switch (obj.code) {
       // Send challenge (may trigger game creation)
       case "seekgame": {
     switch (obj.code) {
       // Send challenge (may trigger game creation)
       case "seekgame": {
-        let opponent = undefined,
-            choice = undefined;
-        const vname = obj.vname,
+        let oppIndex = undefined, //variant name
+            choice = undefined; //variant finally played
+        const vname = obj.vname, //variant requested
               randvar = (obj.vname == "_random");
         if (vname == "_random") {
           // Pick any current challenge if possible
               randvar = (obj.vname == "_random");
         if (vname == "_random") {
           // Pick any current challenge if possible
@@ -73,22 +73,28 @@ wss.on("connection", (socket, req) => {
           if (currentChalls.length >= 1) {
             choice =
               currentChalls[Math.floor(Math.random() * currentChalls.length)];
           if (currentChalls.length >= 1) {
             choice =
               currentChalls[Math.floor(Math.random() * currentChalls.length)];
-            opponent = challenges[choice];
+            oppIndex = choice;
           }
         }
         else if (challenges[vname]) {
           }
         }
         else if (challenges[vname]) {
-          opponent = challenges[vname];
+          // Anyone wanting to play the same variant ?
           choice = vname;
           choice = vname;
+          oppIndex = vname;
         }
         }
-        if (opponent) {
-          delete challenges[choice];
+        else if (challenges["_random"]) {
+          // Anyone accepting any variant (including vname) ?
+          choice = vname;
+          oppIndex = "_random";
+        }
+        if (oppIndex) {
           if (choice == "_random")
             choice = getRandomVariant();
           // Launch game
           let players = [
             {sid: sid, name: obj.name, randvar: randvar},
           if (choice == "_random")
             choice = getRandomVariant();
           // Launch game
           let players = [
             {sid: sid, name: obj.name, randvar: randvar},
-            opponent
+            Object.assign({}, challenges[oppIndex])
           ];
           ];
+          delete challenges[oppIndex];
           if (Math.random() < 0.5)
             players = players.reverse();
           // Empty options = default
           if (Math.random() < 0.5)
             players = players.reverse();
           // Empty options = default
index a5d62ce..9111e07 100644 (file)
@@ -87,7 +87,7 @@ const variants = [
 //  { name: 'Koth', desc: 'King of the Hill', disp:'King of the Hill' },
 //  { name: 'Losers', desc: 'Get strong at self-mate' },
 //  { name: 'Madhouse', desc: 'Rearrange enemy pieces' },
 //  { name: 'Koth', desc: 'King of the Hill', disp:'King of the Hill' },
 //  { name: 'Losers', desc: 'Get strong at self-mate' },
 //  { name: 'Madhouse', desc: 'Rearrange enemy pieces' },
-//  { name: 'Madrasi', desc: 'Paralyzed pieces' },
+  { name: 'Madrasi', desc: 'Paralyzed pieces' },
 //  { name: 'Magnetic', desc: 'Laws of attraction' },
 //  { name: 'Maharajah', desc: 'Augmented Queens' },
 //  { name: 'Makpong', desc: 'Thai Chess (v2)' },
 //  { name: 'Magnetic', desc: 'Laws of attraction' },
 //  { name: 'Maharajah', desc: 'Augmented Queens' },
 //  { name: 'Makpong', desc: 'Thai Chess (v2)' },
@@ -113,11 +113,11 @@ const variants = [
 //  { name: 'Pawnsking', desc: 'Reach the last rank (v2)', disp: 'Pawns & King' },
 //  { name: 'Perfect', desc: 'Powerful pieces' },
 //  { name: 'Pocketknight', desc: 'Knight in pocket', disp: 'Pocket Knight' },
 //  { name: 'Pawnsking', desc: 'Reach the last rank (v2)', disp: 'Pawns & King' },
 //  { name: 'Perfect', desc: 'Powerful pieces' },
 //  { name: 'Pocketknight', desc: 'Knight in pocket', disp: 'Pocket Knight' },
-//  { name: 'Progressive', desc: 'Play more and more moves' },
+  { name: 'Progressive', desc: 'Play more and more moves' },
 //  { name: 'Racingkings', desc: 'Kings cross the 8x8 board', disp: 'Racing Kings' },
 //  { name: 'Rampage', desc: 'Move under cover' },
 //  { name: 'Relayup', desc: 'Upgrade pieces', disp: 'Relay-up' },
 //  { name: 'Racingkings', desc: 'Kings cross the 8x8 board', disp: 'Racing Kings' },
 //  { name: 'Rampage', desc: 'Move under cover' },
 //  { name: 'Relayup', desc: 'Upgrade pieces', disp: 'Relay-up' },
-//  { name: 'Rifle', desc: 'Shoot pieces' },
+  { name: 'Rifle', desc: 'Shoot pieces' },
   { name: 'Recycle', desc: 'Reuse pieces' },
 //  { name: 'Refusal', desc: 'Do not play that!' },
 //  { name: 'Rollerball', desc: 'As in the movie' },
   { name: 'Recycle', desc: 'Reuse pieces' },
 //  { name: 'Refusal', desc: 'Do not play that!' },
 //  { name: 'Rollerball', desc: 'As in the movie' },
index 9869414..3979662 100644 (file)
@@ -14,14 +14,14 @@ export default class AbsorptionRules extends ChessRules {
         "doublemove",
         "progressive",
         "recycle",
         "doublemove",
         "progressive",
         "recycle",
-        "rifle",
+        //"rifle", //TODO
         "teleport",
         "zen"
       ]
     };
   }
 
         "teleport",
         "zen"
       ]
     };
   }
 
-  pieces(color) {
+  pieces(color, x, y) {
     let fusions = {
       // amazon
       'a': {
     let fusions = {
       // amazon
       'a': {
@@ -45,145 +45,105 @@ export default class AbsorptionRules extends ChessRules {
       // empress
       'e': {
         "class": "empress",
       // empress
       'e': {
         "class": "empress",
-        steps: [
-          [1, 2], [1, -2], [-1, 2], [-1, -2],
-          [2, 1], [-2, 1], [2, -1], [-2, -1]
-        ],
+        moves: [
+          {
+            steps: [
+              [1, 0], [-1, 0], [0, 1], [0, -1]
+            ]
+          },
+          {
+            steps: [
+              [1, 2], [1, -2], [-1, 2], [-1, -2],
+              [2, 1], [-2, 1], [2, -1], [-2, -1]
+            ],
+            range: 1
+          }
+        ]
       },
       // princess
       },
       // princess
-      'b': {
-        "class": "bishop",
-        steps: [[1, 1], [1, -1], [-1, 1], [-1, -1]]
+      's': {
+        "class": "princess",
+        moves: [
+          {
+            steps: [
+              [1, 1], [1, -1], [-1, 1], [-1, -1]
+            ]
+          },
+          {
+            steps: [
+              [1, 2], [1, -2], [-1, 2], [-1, -2],
+              [2, 1], [-2, 1], [2, -1], [-2, -1]
+            ],
+            range: 1
+          }
+        ]
       }
     };
       }
     };
-    return Object.assign(fusions, super.pieces(color));
+    return Object.assign(fusions, super.pieces(color, x, y));
   }
 
   static get MergeComposed() {
     return {
       "be": "a",
   }
 
   static get MergeComposed() {
     return {
       "be": "a",
+      "bq": "q",
+      "br": "q",
       "bs": "s",
       "bs": "s",
+      "eq": "a",
       "er": "e",
       "er": "e",
+      "es": "a",
       "rs": "a",
       "rs": "a",
-      "eq": "a",
+      "qr": "q",
       "qs": "a",
       "qs": "a",
-      "ee": "e",
-      "es": "a",
-      "ss": "s"
+      "rs": "a"
     };
   }
 
     };
   }
 
+  // Assumption p1 != p2
   static Fusion(p1, p2) {
   static Fusion(p1, p2) {
-    if (p1 == V.KING) return p1;
-    if (p1 == V.PAWN) return p2;
-    if (p2 == V.PAWN) return p1;
-    if ([p1, p2].includes(V.KNIGHT)) {
-      if ([p1, p2].includes(V.QUEEN)) return V.QN;
-      if ([p1, p2].includes(V.ROOK)) return V.RN;
-      if ([p1, p2].includes(V.BISHOP)) return V.BN;
+    if (p1 == "k")
+      return p1;
+    if (p1 == "p")
+      return p2;
+    if (p2 == "p")
+      return p1;
+    if ([p1, p2].includes("n")) {
+      if ([p1, p2].includes("q"))
+        return "a";
+      if ([p1, p2].includes("r"))
+        return "e";
+      if ([p1, p2].includes("b"))
+        return "s";
       // p1 or p2 already have knight + other piece
       // p1 or p2 already have knight + other piece
-      return (p1 == V.KNIGHT ? p2 : p1);
-    }
-    if ([p1, p2].includes(V.QN)) return V.QN;
-    for (let p of [p1, p2]) {
-      if ([V.BN, V.RN].includes(p))
-        return V.MergeComposed[[p1, p2].sort().join("")];
+      return (p1 == "n" ? p2 : p1);
     }
     }
-    // bishop + rook, or queen + [bishop or rook]
-    return V.QUEEN;
+    if ([p1, p2].includes("a"))
+      return "a";
+    // No king, no pawn, no knight or amazon => 5 remaining pieces
+    return V.MergeComposed[[p1, p2].sort().join("")];
   }
 
   }
 
-  getPotentialMovesFrom(sq) {
-    let moves = [];
-    const piece = this.getPiece(sq[0], sq[1]);
-    switch (piece) {
-      case V.RN:
-        moves =
-          super.getPotentialRookMoves(sq).concat(
-          super.getPotentialKnightMoves(sq));
-        break;
-      case V.BN:
-        moves =
-          super.getPotentialBishopMoves(sq).concat(
-          super.getPotentialKnightMoves(sq));
-        break;
-      case V.QN:
-        moves =
-          super.getPotentialQueenMoves(sq).concat(
-          super.getPotentialKnightMoves(sq));
-        break;
-      default:
-        moves = super.getPotentialMovesFrom(sq);
-    }
+  // TODO: interaction with rifle ?
+  postProcessPotentialMoves(moves) {
     // Filter out capturing promotions (except one),
     // because they are all the same.
     moves = moves.filter(m => {
       return (
         m.vanish.length == 1 ||
     // Filter out capturing promotions (except one),
     // because they are all the same.
     moves = moves.filter(m => {
       return (
         m.vanish.length == 1 ||
-        m.vanish[0].p != V.PAWN ||
-        [V.PAWN, V.QUEEN].includes(m.appear[0].p)
+        m.vanish[0].p != "p" ||
+        ["p", "q"].includes(m.appear[0].p)
       );
     });
     moves.forEach(m => {
       if (
         m.vanish.length == 2 &&
         m.appear.length == 1 &&
       );
     });
     moves.forEach(m => {
       if (
         m.vanish.length == 2 &&
         m.appear.length == 1 &&
-        piece != m.vanish[1].p
+        m.vanish[0].p != m.vanish[1].p
       ) {
         // Augment pieces abilities in case of captures
       ) {
         // Augment pieces abilities in case of captures
-        m.appear[0].p = V.Fusion(piece, m.vanish[1].p);
+        m.appear[0].p = V.Fusion(m.vanish[0].p, m.vanish[1].p);
       }
     });
       }
     });
-    return moves;
-  }
-
-  isAttacked(sq, color) {
-    return (
-      super.isAttacked(sq, color) ||
-      this.isAttackedByBN(sq, color) ||
-      this.isAttackedByRN(sq, color) ||
-      this.isAttackedByQN(sq, color)
-    );
-  }
-
-  isAttackedByBN(sq, color) {
-    return (
-      this.isAttackedBySlideNJump(sq, color, V.BN, V.steps[V.BISHOP]) ||
-      this.isAttackedBySlideNJump(
-        sq, color, V.BN, V.steps[V.KNIGHT], 1)
-    );
-  }
-
-  isAttackedByRN(sq, color) {
-    return (
-      this.isAttackedBySlideNJump(sq, color, V.RN, V.steps[V.ROOK]) ||
-      this.isAttackedBySlideNJump(
-        sq, color, V.RN, V.steps[V.KNIGHT], 1)
-    );
-  }
-
-  isAttackedByQN(sq, color) {
-    return (
-      this.isAttackedBySlideNJump(
-        sq, color, V.QN, V.steps[V.BISHOP].concat(V.steps[V.ROOK])) ||
-      this.isAttackedBySlideNJump(
-        sq, color, V.QN, V.steps[V.KNIGHT], 1)
-    );
-  }
-
-  static get VALUES() {
-    return Object.assign(
-      { a: 12, e: 7, s: 5 },
-      ChessRules.VALUES
-    );
-  }
-
-  getNotation(move) {
-    let notation = super.getNotation(move);
-    if (move.vanish[0].p != V.PAWN && move.appear[0].p != move.vanish[0].p)
-      // Fusion (not from a pawn: handled in ChessRules)
-      notation += "=" + move.appear[0].p.toUpperCase();
-    return notation;
+    super.postProcessPotentialMoves(moves);
   }
 
 };
   }
 
 };
diff --git a/variants/Absorption/pieces.css b/variants/Absorption/pieces.css
deleted file mode 100644 (file)
index afafb05..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-piece.black.amazon {
-  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaGVpZ2h0PSIyNiIKICAgd2lkdGg9IjI2IgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJzdmcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iQ2hlc3NfQWR0MjYuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgNWRhNjg5YzMxMywgMjAxOS0wMS0xNCI+CiAgPGRlZnMKICAgICBpZD0iZGVmczI5Ij4KICAgIDxmaWx0ZXIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQjsiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQ29sb3JpemUiCiAgICAgICBpZD0iZmlsdGVyMjgzIj4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImFyaXRobWV0aWMiCiAgICAgICAgIGsxPSIwIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyNjkiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICB2YWx1ZXM9IjEiCiAgICAgICAgIHR5cGU9InNhdHVyYXRlIgogICAgICAgICByZXN1bHQ9ImNvbG9ybWF0cml4MSIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgyNzEiIC8+CiAgICAgIDxmZUZsb29kCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjEiCiAgICAgICAgIGZsb29kLWNvbG9yPSJyZ2IoMjYsMjMsMjEpIgogICAgICAgICByZXN1bHQ9ImZsb29kMSIKICAgICAgICAgaWQ9ImZlRmxvb2QyNzMiIC8+CiAgICAgIDxmZUJsZW5kCiAgICAgICAgIGluPSJmbG9vZDEiCiAgICAgICAgIGluMj0iY29sb3JtYXRyaXgxIgogICAgICAgICBtb2RlPSJtdWx0aXBseSIKICAgICAgICAgcmVzdWx0PSJibGVuZDEiCiAgICAgICAgIGlkPSJmZUJsZW5kMjc1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImJsZW5kMSIKICAgICAgICAgbW9kZT0ic2NyZWVuIgogICAgICAgICByZXN1bHQ9ImJsZW5kMiIKICAgICAgICAgaWQ9ImZlQmxlbmQyNzciIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJibGVuZDIiCiAgICAgICAgIHZhbHVlcz0iMSIKICAgICAgICAgdHlwZT0ic2F0dXJhdGUiCiAgICAgICAgIHJlc3VsdD0iY29sb3JtYXRyaXgyIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDI3OSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJjb2xvcm1hdHJpeDIiCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyODEiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQjsiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQ29sb3JpemUiCiAgICAgICBpZD0iZmlsdGVyMjk5Ij4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImFyaXRobWV0aWMiCiAgICAgICAgIGsxPSIwIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyODUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICB2YWx1ZXM9IjEiCiAgICAgICAgIHR5cGU9InNhdHVyYXRlIgogICAgICAgICByZXN1bHQ9ImNvbG9ybWF0cml4MSIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgyODciIC8+CiAgICAgIDxmZUZsb29kCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjEiCiAgICAgICAgIGZsb29kLWNvbG9yPSJyZ2IoMjYsMjMsMjEpIgogICAgICAgICByZXN1bHQ9ImZsb29kMSIKICAgICAgICAgaWQ9ImZlRmxvb2QyODkiIC8+CiAgICAgIDxmZUJsZW5kCiAgICAgICAgIGluPSJmbG9vZDEiCiAgICAgICAgIGluMj0iY29sb3JtYXRyaXgxIgogICAgICAgICBtb2RlPSJtdWx0aXBseSIKICAgICAgICAgcmVzdWx0PSJibGVuZDEiCiAgICAgICAgIGlkPSJmZUJsZW5kMjkxIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImJsZW5kMSIKICAgICAgICAgbW9kZT0ic2NyZWVuIgogICAgICAgICByZXN1bHQ9ImJsZW5kMiIKICAgICAgICAgaWQ9ImZlQmxlbmQyOTMiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJibGVuZDIiCiAgICAgICAgIHZhbHVlcz0iMSIKICAgICAgICAgdHlwZT0ic2F0dXJhdGUiCiAgICAgICAgIHJlc3VsdD0iY29sb3JtYXRyaXgyIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDI5NSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJjb2xvcm1hdHJpeDIiCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyOTciIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI5NjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpZD0ibmFtZWR2aWV3MjciCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjI1LjY3MzQxNSIKICAgICBpbmtzY2FwZTpjeD0iMTMuMjIwMzM5IgogICAgIGlua3NjYXBlOmN5PSIxMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyNSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEyIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzU3NTc1NzQsMCwwLDAuNzU3NTc1NzQsMi44NzkxNTE1LC03LjkzOTM5MzIpIgogICAgIGlkPSJnMTAiCiAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjI4MykiPgogICAgPHBhdGgKICAgICAgIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiCiAgICAgICBkPSJtMTQuNDQsMjkuNWMwLjIyMiwxLjY4LTMuMDksNC4wNi00LjUsNS0xLjczLDEuMTYtMS43NCwyLjctMywyLjUtMC42MDItMC41NDUsMC44MTctMi4wMiwwLTItMC41OCwwLDAuMTksMS4xLTAuNSwxLjUtMC41OCwwLTIuNSwwLjQtMi41LTIuNSwwLTEuMiwzLjUtNi41LDMuNS02LjVzMC45MzQtMS4wOCwxLTJjLTAuNDE5LTAuNTc1LTAuMjU4LTEuNDgsMC0yLDAuMzY1LTAuNzMxLDEuNSwxLjUsMS41LDEuNWgxczAuNS0xLjUsMS41LTJjMC41MTctMC4yNTgsMC41LDIsMC41LDIsNi4wNywwLjU3OCw5LjI5LDQuMzcsOSwxNi41aC0xMi41YzAtNC45LDQuOC0zLjcsNC41LTEwLjUiCiAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICBzdHJva2U9IiMwMDAiCiAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICBzdHJva2UtbWl0ZXJsaW1pdD0iNCIKICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiCiAgICAgICBzdHJva2Utd2lkdGg9IjEuMzE5OTk5OTMiCiAgICAgICBmaWxsPSIjRkZGIgogICAgICAgaWQ9InBhdGg0IiAvPgogICAgPHBhdGgKICAgICAgIGZpbGw9IiMwMDAiCiAgICAgICBkPSJtOSwyMy41YTAuNSwwLjUsMCwxLDEsLTEsMCwwLjUsMC41LDAsMSwxLDEsMHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMy40OTk5OTk5LDEwKSIKICAgICAgIGlkPSJwYXRoNiIgLz4KICAgIDxwYXRoCiAgICAgICBmaWxsPSIjMDAwIgogICAgICAgZD0ibTkuNjA1OCwzMC4yOGExLjAyODEsMS40NzI5LDMwLDAsMSwtMS43ODA3LC0xLjAyOCwxLjAyODEsMS40NzI5LDMwLDAsMSwxLjc4MDcsMS4wMjh6IgogICAgICAgaWQ9InBhdGg4IiAvPgogIDwvZz4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTQpIgogICAgIGlkPSJnMjMiCiAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjI5OSkiPgogICAgPHBhdGgKICAgICAgIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgICAgICBkPSJtMTgsMTgsNC04LTQsNCwwLTYtMyw1LjEyNS0yLTUtMiw1bC0zLTUuMTI1djZsLTQtNCwzLDhzMi4wMzQ5LTIuNSw2LTIuNSw1LDIuNSw1LDIuNXoiCiAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICBzdHJva2U9IiMwMDAiCiAgICAgICBzdHJva2UtbGluZWNhcD0iYnV0dCIKICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PSI0IgogICAgICAgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIKICAgICAgIHN0cm9rZS13aWR0aD0iMC44MDAwMDAwMSIKICAgICAgIGZpbGw9IiNGRkYiCiAgICAgICBpZD0icGF0aDEyIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzgwNCIKICAgICAgIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiCiAgICAgICBkPSJtNS41LDEwYTEuNSwxLjUsMCwwLDEsLTMsMCwxLjUsMS41LDAsMSwxLDMsMHoiCiAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iMCIKICAgICAgIHN0cm9rZT0iIzAwMCIKICAgICAgIHN0cm9rZS1saW5lY2FwPSJidXR0IgogICAgICAgc3Ryb2tlLW1pdGVybGltaXQ9IjQiCiAgICAgICBzdHJva2UtZGFzaGFycmF5PSJub25lIgogICAgICAgc3Ryb2tlLXdpZHRoPSIwLjc1IgogICAgICAgZmlsbD0iI0ZGRiIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQsLTIpIgogICAgICAgaGVpZ2h0PSIyNiIKICAgICAgIHdpZHRoPSIyNiIKICAgICAgIHk9IjAiCiAgICAgICB4PSIwIgogICAgICAgaWQ9InVzZTE1IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI3BhdGgzODA0IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOSwtMikiCiAgICAgICBoZWlnaHQ9IjI2IgogICAgICAgd2lkdGg9IjI2IgogICAgICAgeT0iMCIKICAgICAgIHg9IjAiCiAgICAgICBpZD0idXNlMTciIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjcGF0aDM4MDQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSwyNiwwKSIKICAgICAgIGhlaWdodD0iMjYiCiAgICAgICB3aWR0aD0iMjYiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJ1c2UxOSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDIyLC0yKSIKICAgICAgIGhlaWdodD0iMjYiCiAgICAgICB3aWR0aD0iMjYiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJ1c2UyMSIgLz4KICA8L2c+Cjwvc3ZnPgo=');
-}
-
-piece.black.empress {
-  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImJtLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjIyLjUgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0NSA6IDIyLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDIyLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjguMDAwMDAwNCIKICAgICBpbmtzY2FwZTpjeD0iLTMuNjgwNTk0OSIKICAgICBpbmtzY2FwZTpjeT0iMzIuMTUwMTc3IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0iZzM0ODEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjEsMCwwLDEuMSwtMC43MzkwNDUyNywtMi40ODE2NTI2KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzMTI3IgogICAgICAgICBkPSJtIDM0LDM1LjEzMDIyMyAtMywtMyBIIDE0IGwgLTMsMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzM0NzYiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgZD0ibSAxMSwzNS4xMzAyMjMgdiA1IGggNCB2IC0yIGggNSB2IDIgaCA1IHYgLTIgaCA1IHYgMiBoIDQgdiAtNSIKICAgICAgICAgICBpZD0icGF0aDMxMjkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGQ9Ik0gMzEuNTUyNzAzLDMyLjQxNzc2MSBWIDMwLjMwMjgyMiBIIDEzLjQ0NzI5NyB2IDIuMTE0OTM5IgogICAgICAgICAgIGlkPSJwYXRoMzEyNSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJNIDExLDM1LjEzMDIyMyBIIDM0IgogICAgICAgICAgIGlkPSJwYXRoNTE3NSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgaWQ9ImczMzIzIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NDE5NjQ2NCwwLDAsLTAuODQxOTY0NjQsNDAuMTg3MTI5LDM2LjU1ODY1MikiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5MSIKICAgICAgICAgZD0iTSAyMi4wMjg5NTgsMzYgQyAxMS41Mjg5NTgsMzUgNS41Mjg5NTg1LDI4IDYuMDI4OTU4NSw3IEggMjkuMDI4OTU4IGMgMCw5IC0xMCw2LjUgLTgsMjEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM0OTUiCiAgICAgICAgIGQ9Im0gMjAuMDI4OTU4LDI4IGMgLTAuMzg0NDYxLC0yLjkxMTI3OCA1LjU1MjkzNiwtNy4zNjg2MjQgOCwtOSAzLC0yIDIuODE5MTk4LC00LjM0Mjg5MiA1LC00IDEuMDQxNzIsMC45NDQwMTYgLTEuNDEzNDI5LDMuMDM3NTQ5IDAsMyAxLDAgLTAuMTg3MzMyLC0xLjIzMTcyNyAxLC0yIDEsMCA0LjAwMzE2MSwtMC45OTk5OTkgNCw0IDAsMiAtNiwxMiAtNiwxMiAwLDAgLTEuODg1ODY2LDEuOTAyMTI5IC0yLDMuNSAwLjcyNjA0NywwLjk5NDM2OSAwLjUsMiAwLjUsMyAtMSwxIC0zLC0yLjUgLTMsLTIuNSBoIC0yIGMgMCwwIC0wLjc4MTc4MSwxLjk5MTkyNiAtMi41LDMgLTEsMCAtMSwtMyAtMSwtMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8Y2lyY2xlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE4MCwyMS43NjQ0NzksMjIpIgogICAgICAgICBpZD0icGF0aDM0OTkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSI4LjUiCiAgICAgICAgIGN5PSIyMy41IgogICAgICAgICByPSIwLjUiIC8+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKC0xNDkuOTk5OTksMjQuMDI0MTA0LDIwLjk4NjUwNSkiCiAgICAgICAgIGlkPSJwYXRoMzUwMSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTAwMDAwNDg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSIxNC41IgogICAgICAgICBjeT0iMTUuNSIKICAgICAgICAgcng9IjAuNSIKICAgICAgICAgcnk9IjEuNSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaWQ9InBhdGg4MDQ5IgogICAgICAgICBkPSJtIDcuMDI4OTU4NSw3IGMgLTEsMjAgNS40OTk5OTk1LDI3LjUgMTEuOTk5OTk5NSwyOC41IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMTAwMDAwMDI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzIuMjYwOTU1LDMwLjg1ODY0MiBoIC0xNi41IgogICAgICAgaWQ9InBhdGg0NTkwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDowLjEzNzQ5OTk5IgogICAgICAgZD0ibSAxNC4yNDIyOTksMTIuMzUwOTQ4IGMgLTAuNDMzNDE4LC0wLjQzMzQxOSAtMC4wODE0NSwtMS42NzAwOTkgMC43MzEzODksLTIuNTY5ODE0NyAwLjUxOTY2NCwtMC41NzUyMDU0IDAuODM2OTc1LC0wLjY3NzQyMTggMS4zMTI2NTEsLTAuNDIyODQ3NyAwLjYxMDQ3OCwwLjMyNjcxNzYgMC4wMjY2OSwyLjMxOTMwODQgLTAuODYxODQ4LDIuOTQxNjY0NCAtMC4zNjYyODIsMC4yNTY1NTQgLTAuOTUxMzk0LDAuMjgxNzk0IC0xLjE4MjE5MiwwLjA1MSB6IgogICAgICAgaWQ9InBhdGgyNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4xMzc0OTk5OSIKICAgICAgIGQ9Im0gMTQuMjQyMjk5LDEyLjM1MDk0OCBjIC0wLjQzMzQxOCwtMC40MzM0MTkgLTAuMDgxNDUsLTEuNjcwMDk5IDAuNzMxMzg5LC0yLjU2OTgxNDcgMC41MTk2NjQsLTAuNTc1MjA1NCAwLjgzNjk3NSwtMC42Nzc0MjE4IDEuMzEyNjUxLC0wLjQyMjg0NzcgMC42MTA0NzgsMC4zMjY3MTc2IDAuMDI2NjksMi4zMTkzMDg0IC0wLjg2MTg0OCwyLjk0MTY2NDQgLTAuMzY2MjgyLDAuMjU2NTU0IC0wLjk1MTM5NCwwLjI4MTc5NCAtMS4xODIxOTIsMC4wNTEgeiIKICAgICAgIGlkPSJwYXRoMjciCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMTM3NDk5OTkiCiAgICAgICBkPSJNIDkuOTYyMjc5MywxOS44NTM2NTQgQyA5LjYzMTk4OTksMTkuNDMzNzYgOS42MjQ3MjgzLDE5LjM4MTc2OCA5LjgzMjYzNiwxOC45MjU0NjEgYyAwLjQ3MDA1OSwtMS4wMzE2NjkgMi4wMDcxMTksLTAuNTEyNjYyIDEuNzg1NzY1LDAuNjAyOTg3IC0wLjE0NjAzMywwLjczNjAyMyAtMS4xNzQxNjUsMC45Mzc5MTQgLTEuNjU2MTIxNywwLjMyNTIwNiB6IgogICAgICAgaWQ9InBhdGgyOSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4xMzc0OTk5OSIKICAgICAgIGQ9Im0gMTYuNTc2OTk1LDI5LjI1NjU3MiBjIDAuMjQyMTA5LC0xLjQwMjA1OCAwLjgyMzQ5NiwtMi4zMDk4MTcgMi43Nzc3MDIsLTQuMzM3MDIgMC45OTkzNCwtMS4wMzY2NyAyLjAyMDc1OCwtMi4xODI2MzIgMi4yNjk4MTYsLTIuNTQ2NTggMS4wNjQ1NTQsLTEuNTU1NjM3IDEuNjA1MTcxLC0zLjMzODg1MSAxLjc0MzgyNSwtNS43NTE5NzggMC4wNTI5OCwtMC45MjE5MTkgMC4xNzQ3MTYsLTEuNjUwODg2IDAuMzQ1Mzg1LC0yLjA2ODAzNyAwLjI2NDA1MSwtMC42NDU0MDEgMC4zNDc5MjQsLTEuNjk2MzMyIDAuMTU4MzQ2LC0xLjk4NDEwMSAtMC4xNzIyMDQsLTAuMjYxMzk2IC0wLjY1MzEsLTAuMzM4MjI1IC0wLjkxNTYwMywtMC4xNDYyNzggLTAuMTUwMjU1LDAuMTA5ODY4IC0wLjI5NDk1NSwwLjQ2NjMwOSAtMC4zNjIzMzMsMC44OTI1NDMgLTAuMDcwMzcsMC40NDUxNDggLTAuMjk2OTc0LDAuOTg4MDMzIC0wLjYwODAxMSwxLjQ1NjYzMSAtMC42Nzc3MDcsMS4wMjEwMDggLTIuODgwMDU1LDMuMDk3ODcgLTQuNjA2Njc2LDQuMzQ0MTk2IC0xLjc4MzUwNywxLjI4NzM4NiAtMi41ODg0NTUsMi4wMTU2MSAtMy41MzM2ODYsMy4xOTY4NzUgLTAuODMwNTc4LDEuMDM3OTc4IC0xLjE1MzgsMS4yMDY5NTYgLTAuNzMzNzU1LDAuMzgzNjAzIDAuNTY0Mzc1LC0xLjEwNjI2OCAwLjI1Mjc0NCwtMS45MzA0NzggLTAuNzI5OTA3LC0xLjkzMDQ3OCAtMC42ODUzNzcsMCAtMS4wNTQ3OTksMC4zODUyNTEgLTEuMDU0Nzk5LDEuMSB2IDAuNTUgaCAtMC43NjI4MTUgYyAtMC42NDI4NzA5LDAgLTAuODE0MzgzOSwtMC4wNTU2NCAtMS4wOTA3NzgsLTAuMzUzODc5IC0wLjMyNjQ5NTEsLTAuMzUyMjkzIC0wLjYyMTQwNjMsLTEuMzU5NzQ1IC0wLjYyMTQwNjMsLTIuMTIyNzk5IDAsLTAuNTIzOTczIDAuMzc4MjE1LC0xLjQ2OTE0IDEuNDI5ODkwMywtMy41NzMzMjIgMS4yOTY2MzMsLTIuNTk0MjkzIDMuMTgzMzYsLTUuODUyMDkgNC4wODAyODEsLTcuMDQ1MzkzNSAwLjk4NzQzNSwtMS4zMTM3MjM2IDEuMzcyNDg5LC0yLjM3NDIzMjIgMS4xMDE1MDcsLTMuMDMzNzQ5NiAtMC4wOTkzNCwtMC4yNDE3ODM4IC0wLjIxMjg5OCwtMC42MjUyMzE4IC0wLjI1MjM0NCwtMC44NTIxMDY4IC0wLjA3MTU4LC0wLjQxMTcwMjcgLTAuMDcxMTYsLTAuNDExOTk2NCAwLjIyMDQwMSwtMC4xNTE5ODU5IDAuMTYwNjY3LDAuMTQzMjgyNyAwLjQ4NDkwNCwwLjU2MDkzOSAwLjcyMDUyOCwwLjkyODEyNSBsIDAuNDI4NDAzLDAuNjY3NjEwOCBoIDEuMjg5NjAxIDEuMjg5NTk5IGwgMC4zMzU1NDUsLTAuNjUzMTI0OSBjIDAuMzg4Mzk1LC0wLjc1NTk5NDcgMS4xMTU0MiwtMS42NTQwNjgzIDEuMjQwMjcxLC0xLjUzMjA3MDYgMC4wNDcwMywwLjA0NTk1NSAwLjEyMzg3MywwLjQ5NDM4NTMgMC4xNzA3NjMsMC45OTY1MTIyIDAuMDQ2ODksMC41MDIxMjY5IDAuMTUzNjY0LDAuOTY5NTgyIDAuMjM3Mjc5LDEuMDM4Nzg5MyAwLjA4MzYxLDAuMDY5MjA4IDAuNzcwNzc1LDAuMjMwOTk4NSAxLjUyNzAyNSwwLjM1OTUzNjMgMy4yNDczNjIsMC41NTE5NDUxIDUuNzAwOTU2LDEuNzg3MjQ4IDcuMDEwNzc0LDMuNTI5Njg5NyAyLjg1NTE5NywzLjc5ODI1MiA0LjE5Mzk2Nyw5LjI2MzY2MSA0LjE5NTE0MiwxNy4xMjYyOTIgbCAzLjMzZS00LDIuMjM0Mzc1IGggLTguNzEyNDc5IC04LjcxMjQ3OCB6IG0gLTUuMTEyMTk2LC05LjE3ODEyNCBjIDAuMzUwNDc4LC0wLjM1MDQ3OSAwLjM1OTIyMiwtMS4xMDMwMjcgMC4wMTc3MSwtMS41MjQ3NjkgLTAuNTA2NzU0LC0wLjYyNTgxNCAtMS42NTkwNDc2LC0wLjMxMzgyNyAtMS44NjQ1MTYsMC41MDQ4MjUgLTAuMDkwNDQ3LDAuMzYwMzcxIDAuMjEzMjM1MSwxLjA4NjIxNSAwLjUwMzI4MywxLjIwMjkxNiAwLjQxOTc4MSwwLjE2ODg5NyAxLjA4MTgxLDAuMDc4NzQgMS4zNDM1MTgsLTAuMTgyOTcyIHogbSA0LjEyMTIxMSwtNy43ODY2NjIgYyAwLjk3MjA5MywtMC44MTc5NjIgMS40MzQwNzUsLTIuNTUzOTAzNiAwLjc5ODE5NSwtMi45OTkyOTE0IC0wLjQzNzU2NywtMC4zMDY0ODMxIC0wLjg1MDIyLC0wLjI2NTAyNzQgLTEuMzIzMTY1LDAuMTMyOTMwNiAtMC41Mjg5ODksMC40NDUxMTM5IC0xLjEyMTI0MSwxLjYzMjE3MzggLTEuMTIxMjQxLDIuMjQ3MzE4OCAwLDAuOTY2MDc4IDAuODUyNzA3LDEuMjg2NzMxIDEuNjQ2MjExLDAuNjE5MDQyIHoiCiAgICAgICBpZD0icGF0aDMzIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjEzNzQ5OTk5IgogICAgICAgZD0ibSAxNC4xNDYwNDksMzQuNjUzNDQ3IDAuOTU1MTI1LC0wLjk2MjUgaCA4Ljk0NDg3NSA4Ljk0NDg3NSBsIDAuOTU1MTI0LDAuOTYyNSAwLjk1NTEyNSwwLjk2MjUgSCAyNC4wNDYwNDkgMTMuMTkwOTI1IFoiCiAgICAgICBpZD0icGF0aDM5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjEwMDAwMDAycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMTEuNzczNDU0LDM4LjQyMTE0MiAyMy45MjQ5OTksMC4xMzc1IgogICAgICAgaWQ9InBhdGg0MSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIyIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIzEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiAvPgo8L3N2Zz4K');
-}
-
-piece.black.princess {
-  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImJjLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxMS4zMTM3MDkiCiAgICAgaW5rc2NhcGU6Y3g9IjIxLjg0Mzc5NCIKICAgICBpbmtzY2FwZTpjeT0iMTcuNDY2Njg1IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iOTYwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMCIKICAgICAgIG9yaWdpbnk9IjAiCiAgICAgICBzcGFjaW5neD0iMC41IgogICAgICAgc3BhY2luZ3k9IjAuNSIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxMzMiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS42NDk5OTk5ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzNy41LDM3LjUgYyAtMy43MjM3ODEsLTEuMDY5NTYyIC0xMS4xMjYyMTksMC40NzM5MDMgLTE0Ljg1LC0yLjIgLTMuNzIzNzgyLDIuNjczOTAzIC0xMS4xMjYyMiwxLjEzMDQzOCAtMTQuODUwMDAwMiwyLjIgMCwwIC0xLjgxMDQ4NzgsMC41OTU2NTggLTMuMywyLjIgMC43NDQ3NTYxLDEuMDY5NTYxIDEuODEwNDg3OCwxLjA4NDc4IDMuMywwLjU1IEMgMTEuNTIzNzgsMzkuMTgwNDM5IDE4LjkyNjIxOCw0MC43NTQzNDIgMjIuNjUsMzkuMTUgYyAzLjcyMzc4MSwxLjYwNDM0MiAxMS4xMjYyMTksMC4wMzA0NCAxNC44NSwxLjEgMS40ODk1MTIsMC41MzQ3OCAyLjU1NTI0NCwwLjUxOTU2MSAzLjMsLTAuNTUgLTEuNDg5NTEyLC0yLjEzOTEyMyAtMy4zLC0yLjIgLTMuMywtMi4yIHoiCiAgICAgICBpZD0icGF0aDQ1ODIiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS42NDk5OTk5ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMC45LDMzLjEgYyAtMi43NSwyLjc1IC0xMy43NSwyLjc1IC0xNi41LDAgLTAuNTUsLTEuNjUgMCwtMi4yIDAsLTIuMiBoIDE2LjUgYyAwLDAgMC41NSwwLjU1IDAsMi4yIHoiCiAgICAgICBpZD0icGF0aDQ1ODQiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY0OTk5OTk4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMwLjksMzAuOSBIIDE0LjQiCiAgICAgICBpZD0icGF0aDQ1OTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzMzMjMiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg0MTk2NDY0LDAsMCwtMC44NDE5NjQ2NCwzOC44MjYxNzQsMzYuNjAwMDEpIgogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNDkxIgogICAgICAgICBkPSJNIDIyLjAyODk1OCwzNiBDIDExLjUyODk1OCwzNSA1LjUyODk1ODUsMjggNi4wMjg5NTg1LDcgSCAyOS4wMjg5NTggYyAwLDkgLTEwLDYuNSAtOCwyMSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5NSIKICAgICAgICAgZD0ibSAyMC4wMjg5NTgsMjggYyAtMC4zODQ0NjEsLTIuOTExMjc4IDUuNTUyOTM2LC03LjM2ODYyNCA4LC05IDMsLTIgMi44MTkxOTgsLTQuMzQyODkyIDUsLTQgMS4wNDE3MiwwLjk0NDAxNiAtMS40MTM0MjksMy4wMzc1NDkgMCwzIDEsMCAtMC4xODczMzIsLTEuMjMxNzI3IDEsLTIgMSwwIDQuMDAzMTYxLC0wLjk5OTk5OSA0LDQgMCwyIC02LDEyIC02LDEyIDAsMCAtMS44ODU4NjYsMS45MDIxMjkgLTIsMy41IDAuNzI2MDQ3LDAuOTk0MzY5IDAuNSwyIDAuNSwzIC0xLDEgLTMsLTIuNSAtMywtMi41IGggLTIgYyAwLDAgLTAuNzgxNzgxLDEuOTkxOTI2IC0yLjUsMyAtMSwwIC0xLC0zIC0xLC0zIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxjaXJjbGUKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTgwLDIxLjc2NDQ3OSwyMikiCiAgICAgICAgIGlkPSJwYXRoMzQ5OSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjguNSIKICAgICAgICAgY3k9IjIzLjUiCiAgICAgICAgIHI9IjAuNSIgLz4KICAgICAgPGVsbGlwc2UKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTE0OS45OTk5OSwyNC4wMjQxMDQsMjAuOTg2NTA1KSIKICAgICAgICAgaWQ9InBhdGgzNTAxIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MS41MDAwMDA0ODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjE0LjUiCiAgICAgICAgIGN5PSIxNS41IgogICAgICAgICByeD0iMC41IgogICAgICAgICByeT0iMS41IiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpZD0icGF0aDgwNDkiCiAgICAgICAgIGQ9Im0gNy4wMjg5NTg1LDcgYyAtMSwyMCA1LjQ5OTk5OTUsMjcuNSAxMS45OTk5OTk1LDI4LjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMTQuNCwzMC45IEggMzAuOSIKICAgICAgIGlkPSJwYXRoMzM2OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIyIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIzEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiAvPgo8L3N2Zz4K');
-}
-
-piece.white.amazon {
-  background-image: url('data:image/svg+xml;base64,PCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+DQ0KPHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNiIgd2lkdGg9IjI2IiB2ZXJzaW9uPSIxLjAiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0NCiA8bWV0YWRhdGE+DQ0KICA8cmRmOlJERj4NDQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQ0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQ0KICAgIDxkYzp0aXRsZS8+DQ0KICAgPC9jYzpXb3JrPg0NCiAgPC9yZGY6UkRGPg0NCiA8L21ldGFkYXRhPg0NCiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1NzU3NTc0LDAsMCwwLjc1NzU3NTc0LDIuODc5MTUxNSwtNy45MzkzOTMyKSI+DQ0KICA8cGF0aCBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBkPSJtMTQuNDQsMjkuNWMwLjIyMiwxLjY4LTMuMDksNC4wNi00LjUsNS0xLjczLDEuMTYtMS43NCwyLjctMywyLjUtMC42MDItMC41NDUsMC44MTctMi4wMiwwLTItMC41OCwwLDAuMTksMS4xLTAuNSwxLjUtMC41OCwwLTIuNSwwLjQtMi41LTIuNSwwLTEuMiwzLjUtNi41LDMuNS02LjVzMC45MzQtMS4wOCwxLTJjLTAuNDE5LTAuNTc1LTAuMjU4LTEuNDgsMC0yLDAuMzY1LTAuNzMxLDEuNSwxLjUsMS41LDEuNWgxczAuNS0xLjUsMS41LTJjMC41MTctMC4yNTgsMC41LDIsMC41LDIsNi4wNywwLjU3OCw5LjI5LDQuMzcsOSwxNi41aC0xMi41YzAtNC45LDQuOC0zLjcsNC41LTEwLjUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSI0IiBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzdHJva2Utd2lkdGg9IjEuMzE5OTk5OTMiIGZpbGw9IiNGRkYiLz4NDQogIDxwYXRoIGZpbGw9IiMwMDAiIGQ9Im05LDIzLjVhMC41LDAuNSwwLDEsMSwtMSwwLDAuNSwwLjUsMCwxLDEsMSwweiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMuNDk5OTk5OSwxMCkiLz4NDQogIDxwYXRoIGZpbGw9IiMwMDAiIGQ9Im05LjYwNTgsMzAuMjhhMS4wMjgxLDEuNDcyOSwzMCwwLDEsLTEuNzgwNywtMS4wMjgsMS4wMjgxLDEuNDcyOSwzMCwwLDEsMS43ODA3LDEuMDI4eiIvPg0NCiA8L2c+DQ0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTQpIj4NDQogIDxwYXRoIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGQ9Im0xOCwxOCw0LTgtNCw0LDAtNi0zLDUuMTI1LTItNS0yLDVsLTMtNS4xMjV2NmwtNC00LDMsOHMyLjAzNDktMi41LDYtMi41LDUsMi41LDUsMi41eiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbWl0ZXJsaW1pdD0iNCIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjgwMDAwMDAxIiBmaWxsPSIjRkZGIi8+DQ0KICA8cGF0aCBpZD0icGF0aDM4MDQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIGQ9Im01LjUsMTBhMS41LDEuNSwwLDAsMSwtMywwLDEuNSwxLjUsMCwxLDEsMywweiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1taXRlcmxpbWl0PSI0IiBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzdHJva2Utd2lkdGg9IjAuNzUiIGZpbGw9IiNGRkYiLz4NDQogIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgzODA0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LC0yKSIgaGVpZ2h0PSIyNiIgd2lkdGg9IjI2IiB5PSIwIiB4PSIwIi8+DQ0KICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOSwtMikiIGhlaWdodD0iMjYiIHdpZHRoPSIyNiIgeT0iMCIgeD0iMCIvPg0NCiAgPHVzZSB4bGluazpocmVmPSIjcGF0aDM4MDQiIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDI2LDApIiBoZWlnaHQ9IjI2IiB3aWR0aD0iMjYiIHk9IjAiIHg9IjAiLz4NDQogIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgzODA0IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSwyMiwtMikiIGhlaWdodD0iMjYiIHdpZHRoPSIyNiIgeT0iMCIgeD0iMCIvPg0NCiA8L2c+DQ0KPC9zdmc+DQ0K');
-}
-
-piece.white.empress {
-  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndtLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjIyLjUgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0NSA6IDIyLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDIyLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjguMDAwMDAwNCIKICAgICBpbmtzY2FwZTpjeD0iLTMuOTMwNTk0OSIKICAgICBpbmtzY2FwZTpjeT0iMzIuMTUwMTc3IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0iZzM0ODEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjEsMCwwLDEuMSwtMS4xMTQwNDUyLC0yLjQ4MTY1MjYpIj4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIgogICAgICAgICBpZD0icGF0aDMxMjciCiAgICAgICAgIGQ9Im0gMzQsMzUuMTMwMjIzIC0zLC0zIEggMTQgbCAtMywzIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzQ3NiI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJtIDExLDM1LjEzMDIyMyB2IDUgaCA0IHYgLTIgaCA1IHYgMiBoIDUgdiAtMiBoIDUgdiAyIGggNCB2IC01IgogICAgICAgICAgIGlkPSJwYXRoMzEyOSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgZD0iTSAzMS41NTI3MDMsMzIuNDE3NzYxIFYgMzAuMzAyODIyIEggMTMuNDQ3Mjk3IHYgMi4xMTQ5MzkiCiAgICAgICAgICAgaWQ9InBhdGgzMTI1IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGQ9Ik0gMTEsMzUuMTMwMjIzIEggMzQiCiAgICAgICAgICAgaWQ9InBhdGg1MTc1IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzMzMjMiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg0MTk2NDY0LDAsMCwtMC44NDE5NjQ2NCwzOS44MTIxMjksMzYuNTU4NjUyKSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNDkxIgogICAgICAgICBkPSJNIDIyLjAyODk1OCwzNiBDIDExLjUyODk1OCwzNSA1LjUyODk1ODUsMjggNi4wMjg5NTg1LDcgSCAyOS4wMjg5NTggYyAwLDkgLTEwLDYuNSAtOCwyMSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5NSIKICAgICAgICAgZD0ibSAyMC4wMjg5NTgsMjggYyAtMC4zODQ0NjEsLTIuOTExMjc4IDUuNTUyOTM2LC03LjM2ODYyNCA4LC05IDMsLTIgMi44MTkxOTgsLTQuMzQyODkyIDUsLTQgMS4wNDE3MiwwLjk0NDAxNiAtMS40MTM0MjksMy4wMzc1NDkgMCwzIDEsMCAtMC4xODczMzIsLTEuMjMxNzI3IDEsLTIgMSwwIDQuMDAzMTYxLC0wLjk5OTk5OSA0LDQgMCwyIC02LDEyIC02LDEyIDAsMCAtMS44ODU4NjYsMS45MDIxMjkgLTIsMy41IDAuNzI2MDQ3LDAuOTk0MzY5IDAuNSwyIDAuNSwzIC0xLDEgLTMsLTIuNSAtMywtMi41IGggLTIgYyAwLDAgLTAuNzgxNzgxLDEuOTkxOTI2IC0yLjUsMyAtMSwwIC0xLC0zIC0xLC0zIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxjaXJjbGUKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTgwLDIxLjc2NDQ3OSwyMikiCiAgICAgICAgIGlkPSJwYXRoMzQ5OSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjguNSIKICAgICAgICAgY3k9IjIzLjUiCiAgICAgICAgIHI9IjAuNSIgLz4KICAgICAgPGVsbGlwc2UKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTE0OS45OTk5OSwyNC4wMjQxMDQsMjAuOTg2NTA1KSIKICAgICAgICAgaWQ9InBhdGgzNTAxIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41MDAwMDA0ODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjE0LjUiCiAgICAgICAgIGN5PSIxNS41IgogICAgICAgICByeD0iMC41IgogICAgICAgICByeT0iMS41IiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpZD0icGF0aDgwNDkiCiAgICAgICAgIGQ9Im0gNy4wMjg5NTg1LDcgYyAtMSwyMCA1LjQ5OTk5OTUsMjcuNSAxMS45OTk5OTk1LDI4LjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4xMDAwMDAwMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMS44ODU5NTUsMzAuODU4NjQyIGggLTE2LjUiCiAgICAgICBpZD0icGF0aDQ1OTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8L2c+CiAgPGcKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjIiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEjMSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiIC8+Cjwvc3ZnPgo=');
-}
-
-piece.white.princess {
-  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndjLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4LjAwMDAwMDQiCiAgICAgaW5rc2NhcGU6Y3g9IjYwLjMwODc3OSIKICAgICBpbmtzY2FwZTpjeT0iMjQuNTExNDc5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY0OTk5OTk4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDM3LjcyNSwzOC4wMDg5MTggYyAtMy43MjM3ODEsLTEuMDY5NTYyIC0xMS4xMjYyMTksMC40NzM5MDMgLTE0Ljg1LC0yLjIgLTMuNzIzNzgyLDIuNjczOTAzIC0xMS4xMjYyMiwxLjEzMDQzOCAtMTQuODUwMDAwMiwyLjIgMCwwIC0xLjgxMDQ4NzgsMC41OTU2NTggLTMuMywyLjIgMC43NDQ3NTYxLDEuMDY5NTYxIDEuODEwNDg3OCwxLjA4NDc4IDMuMywwLjU1IDMuNzIzNzgwMiwtMS4wNjk1NjEgMTEuMTI2MjE4MiwwLjUwNDM0MiAxNC44NTAwMDAyLC0xLjEgMy43MjM3ODEsMS42MDQzNDIgMTEuMTI2MjE5LDAuMDMwNDQgMTQuODUsMS4xIDEuNDg5NTEyLDAuNTM0NzggMi41NTUyNDQsMC41MTk1NjEgMy4zLC0wLjU1IC0xLjQ4OTUxMiwtMi4xMzkxMjMgLTMuMywtMi4yIC0zLjMsLTIuMiB6IgogICAgICAgaWQ9InBhdGg0NTgyIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzEuMTI1LDMzLjYwODkxOCBjIC0yLjc1LDIuNzUgLTEzLjc1LDIuNzUgLTE2LjUsMCAtMC41NSwtMS42NSAwLC0yLjIgMCwtMi4yIGggMTYuNSBjIDAsMCAwLjU1LDAuNTUgMCwyLjIgeiIKICAgICAgIGlkPSJwYXRoNDU4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzEuMTI1LDMxLjQwODkxOCBoIC0xNi41IgogICAgICAgaWQ9InBhdGg0NTkwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczMzIzIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NDE5NjQ2NCwwLDAsLTAuODQxOTY0NjQsMzkuMDUxMTc0LDM3LjEwODkyOCkiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5MSIKICAgICAgICAgZD0iTSAyMi4wMjg5NTgsMzYgQyAxMS41Mjg5NTgsMzUgNS41Mjg5NTg1LDI4IDYuMDI4OTU4NSw3IEggMjkuMDI4OTU4IGMgMCw5IC0xMCw2LjUgLTgsMjEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM0OTUiCiAgICAgICAgIGQ9Im0gMjAuMDI4OTU4LDI4IGMgLTAuMzg0NDYxLC0yLjkxMTI3OCA1LjU1MjkzNiwtNy4zNjg2MjQgOCwtOSAzLC0yIDIuODE5MTk4LC00LjM0Mjg5MiA1LC00IDEuMDQxNzIsMC45NDQwMTYgLTEuNDEzNDI5LDMuMDM3NTQ5IDAsMyAxLDAgLTAuMTg3MzMyLC0xLjIzMTcyNyAxLC0yIDEsMCA0LjAwMzE2MSwtMC45OTk5OTkgNCw0IDAsMiAtNiwxMiAtNiwxMiAwLDAgLTEuODg1ODY2LDEuOTAyMTI5IC0yLDMuNSAwLjcyNjA0NywwLjk5NDM2OSAwLjUsMiAwLjUsMyAtMSwxIC0zLC0yLjUgLTMsLTIuNSBoIC0yIGMgMCwwIC0wLjc4MTc4MSwxLjk5MTkyNiAtMi41LDMgLTEsMCAtMSwtMyAtMSwtMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8Y2lyY2xlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE4MCwyMS43NjQ0NzksMjIpIgogICAgICAgICBpZD0icGF0aDM0OTkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSI4LjUiCiAgICAgICAgIGN5PSIyMy41IgogICAgICAgICByPSIwLjUiIC8+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKC0xNDkuOTk5OTksMjQuMDI0MTA0LDIwLjk4NjUwNSkiCiAgICAgICAgIGlkPSJwYXRoMzUwMSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTAwMDAwNDg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSIxNC41IgogICAgICAgICBjeT0iMTUuNSIKICAgICAgICAgcng9IjAuNSIKICAgICAgICAgcnk9IjEuNSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaWQ9InBhdGg4MDQ5IgogICAgICAgICBkPSJtIDcuMDI4OTU4NSw3IGMgLTEsMjAgNS40OTk5OTk1LDI3LjUgMTEuOTk5OTk5NSwyOC41IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9nPgogIDwvZz4KICA8ZwogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMiIKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSMxIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgLz4KPC9zdmc+Cg==');
-}
diff --git a/variants/Absorption/rules.html b/variants/Absorption/rules.html
new file mode 100644 (file)
index 0000000..53d5e45
--- /dev/null
@@ -0,0 +1 @@
+<p>The capturer absorbs abilities of the captured piece (except for pawns and king).</p>
index 2964ee1..14714ab 100644 (file)
@@ -1,2 +1,25 @@
-@import "../../base_pieces.css"
-@import "pieces.css"
+@import url("/base_pieces.css");
+
+piece.black.amazon {
+  background-image: url('/pieces/black_amazon.svg');
+}
+
+piece.black.empress {
+  background-image: url('/pieces/black_empress.svg');
+}
+
+piece.black.princess {
+  background-image: url('/pieces/black_princess.svg');
+}
+
+piece.white.amazon {
+  background-image: url('/pieces/white_amazon.svg');
+}
+
+piece.white.empress {
+  background-image: url('/pieces/white_empress.svg');
+}
+
+piece.white.princess {
+  background-image: url('/pieces/white_princess.svg');
+}
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..290a6f4 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css")
index 620a9e8..6cfd883 100644 (file)
@@ -1,4 +1,4 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
 
 /* TODO: images des bananes/bombes/oeufs/champis + Chomp etc pour animations
  * Toadette/Waluigi/Luigi/King boo/Koopa/Daisy/Bowser avec petit texte */
 
 /* TODO: images des bananes/bombes/oeufs/champis + Chomp etc pour animations
  * Toadette/Waluigi/Luigi/King boo/Koopa/Daisy/Bowser avec petit texte */
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");
diff --git a/variants/Madrasi/class.js b/variants/Madrasi/class.js
new file mode 100644 (file)
index 0000000..eaabf07
--- /dev/null
@@ -0,0 +1,38 @@
+import ChessRules from "/base_rules.js";
+
+export default class MadrasiRules extends ChessRules {
+
+  static get Options() {
+    return {
+      select: C.Options.select,
+      check: [
+        {
+          label: "Rex Incl.",
+          defaut: false,
+          variable: "rexincl"
+        }
+      ].concat(C.Options.check),
+      styles: C.Options.styles.filter(s => s != "madrasi")
+    };
+  }
+
+  constructor(o) {
+    o.options["madrasi"] = true;
+    super(o);
+  }
+
+  underCheck([x, y], color) {
+    if (this.options["rexincl"]) {
+      // If Rex Inclusive, kings do not check each other:
+      // we just replace it very temporarily.
+      const [ox, oy] = this.searchKingPos(color);
+      const saveOppKing = this.board[ox][oy];
+      this.board[ox][oy] = C.GetOppCol(color) + "q"; //arbitrary
+      const res = super.underCheck([x, y], color);
+      this.board[ox][oy] = saveOppKing;
+      return res;
+    }
+    return super.underCheck([x, y], color);
+  }
+
+};
diff --git a/variants/Madrasi/rules.html b/variants/Madrasi/rules.html
new file mode 100644 (file)
index 0000000..22b6681
--- /dev/null
@@ -0,0 +1 @@
+<p>Pieces of same nature attacking each other are immobilized.</p>
diff --git a/variants/Madrasi/style.css b/variants/Madrasi/style.css
new file mode 100644 (file)
index 0000000..a3550bc
--- /dev/null
@@ -0,0 +1 @@
+@import url("/base_pieces.css");
index 9378e29..a3550bc 100644 (file)
@@ -1 +1 @@
-@import "../../base_pieces.css"
+@import url("/base_pieces.css");