"use strict";

// ── ECO Opening Database for SynChess ─────────────────────────────────────────
// Keys are UCI move sequences (space-separated from-to pairs).
// Longest-prefix match is used, so deeper lines shadow shallower ones.
// Organised roughly by ECO code (A00–E99).

var OPENINGS = {

    // ── A00 Irregular / Uncommon First Moves ──────────────────────────────────
    "b2b4":                                                     "Polish Opening",
    "b2b4 e7e5":                                                "Polish Opening",
    "b2b4 d7d5":                                                "Polish Opening",
    "b2b4 c7c6":                                                "Polish Opening",
    "b2b3":                                                     "Nimzowitsch-Larsen Attack",
    "b2b3 e7e5":                                                "Nimzowitsch-Larsen Attack",
    "b2b3 d7d5":                                                "Nimzowitsch-Larsen Attack",
    "b2b3 g8f6":                                                "Nimzowitsch-Larsen Attack",
    "g2g4":                                                     "Grob's Attack",
    "g2g4 d7d5":                                                "Grob's Attack",
    "g2g4 e7e5":                                                "Grob's Attack",
    "a2a3":                                                     "Anderssen's Opening",
    "a2a4":                                                     "Ware Opening",
    "h2h3":                                                     "Clemenz Opening",
    "h2h4":                                                     "Desprez Opening",
    "f2f3":                                                     "Barnes Opening",
    "e2e3":                                                     "Van't Kruijs Opening",
    "d2d3":                                                     "Mieses Opening",
    "c2c3":                                                     "Saragossa Opening",
    "b1c3":                                                     "Van Geet Opening",
    "b1c3 e7e5":                                                "Van Geet Opening",
    "b1c3 d7d5":                                                "Van Geet Opening",
    "b1c3 g8f6":                                                "Van Geet Opening",
    "b1c3 c7c5":                                                "Van Geet Opening",
    "g1h3":                                                     "Ammonia Opening",

    // ── A01 Nimzowitsch-Larsen Attack ─────────────────────────────────────────
    "b2b3 e7e5 c1b2":                                           "Nimzowitsch-Larsen, Classical",
    "b2b3 d7d5 c1b2":                                           "Nimzowitsch-Larsen, Modern",

    // ── A02/A03 Bird's Opening ────────────────────────────────────────────────
    "f2f4":                                                     "Bird's Opening",
    "f2f4 d7d5":                                                "Bird's Opening",
    "f2f4 g8f6":                                                "Bird's Opening",
    "f2f4 e7e6":                                                "Bird's Opening",
    "f2f4 c7c5":                                                "Bird's Opening",
    "f2f4 e7e5":                                                "Bird's Opening, From Gambit",
    "f2f4 e7e5 f4e5":                                           "Bird's Opening, From Gambit",
    "f2f4 d7d5 g1f3":                                           "Bird's Opening",
    "f2f4 d7d5 g1f3 g8f6":                                      "Bird's Opening",
    "f2f4 d7d5 g1f3 c7c5":                                      "Bird's Opening, Lasker Variation",

    // ── A04–A09 Réti Opening ──────────────────────────────────────────────────
    "g1f3":                                                     "Réti Opening",
    "g1f3 d7d5":                                                "Réti Opening",
    "g1f3 d7d5 c2c4":                                           "Réti Opening",
    "g1f3 d7d5 c2c4 c7c6":                                      "Réti, Slav Formation",
    "g1f3 d7d5 c2c4 e7e6":                                      "Réti, QGD Formation",
    "g1f3 d7d5 g2g3":                                           "King's Indian Attack",
    "g1f3 d7d5 g2g3 g8f6":                                      "King's Indian Attack",
    "g1f3 d7d5 g2g3 c7c5":                                      "King's Indian Attack",
    "g1f3 d7d5 g2g3 e7e6":                                      "King's Indian Attack",
    "g1f3 g8f6":                                                "Réti Opening",
    "g1f3 g8f6 c2c4":                                           "Réti / English",
    "g1f3 g8f6 g2g3":                                           "King's Indian Attack",
    "g1f3 c7c5":                                                "Réti Opening",
    "g1f3 e7e5":                                                "King's Indian Attack",
    "g1f3 e7e6 g2g3 d7d5":                                      "King's Indian Attack",
    "g2g3":                                                     "King's Fianchetto",
    "g2g3 d7d5":                                                "King's Fianchetto",
    "g2g3 e7e5":                                                "King's Fianchetto",
    "g2g3 g8f6":                                                "King's Fianchetto",

    // ── A10–A39 English Opening ───────────────────────────────────────────────
    "c2c4":                                                     "English Opening",
    "c2c4 e7e5":                                                "English, Reversed Sicilian",
    "c2c4 e7e5 b1c3":                                           "English, Reversed Sicilian",
    "c2c4 e7e5 b1c3 g8f6":                                      "English, Reversed Sicilian",
    "c2c4 e7e5 b1c3 g8f6 g1f3 b8c6":                           "English, Four Knights",
    "c2c4 e7e5 b1c3 f8c5":                                      "English, Reversed Sicilian",
    "c2c4 e7e5 b1c3 b8c6":                                      "English, Reversed Sicilian",
    "c2c4 e7e5 g2g3":                                           "English, King's Fianchetto",
    "c2c4 e7e5 g2g3 g8f6 f1g2 f8c5":                           "English, Reversed Sicilian",
    "c2c4 c7c5":                                                "English, Symmetrical",
    "c2c4 c7c5 b1c3":                                           "English, Symmetrical",
    "c2c4 c7c5 b1c3 g8f6":                                      "English, Symmetrical",
    "c2c4 c7c5 b1c3 g8f6 g1f3 b8c6":                           "English, Symmetrical",
    "c2c4 c7c5 g1f3":                                           "English, Symmetrical",
    "c2c4 c7c5 g1f3 g8f6":                                      "English, Symmetrical",
    "c2c4 c7c5 g1f3 b8c6":                                      "English, Symmetrical",
    "c2c4 g8f6":                                                "English Opening",
    "c2c4 g8f6 b1c3":                                           "English Opening",
    "c2c4 g8f6 b1c3 d7d5":                                      "English, Anglo-Indian",
    "c2c4 g8f6 b1c3 d7d5 c4d5 g8d5 e2e4":                      "English, Anglo-Indian",
    "c2c4 g8f6 b1c3 e7e5":                                      "English, King's Indian",
    "c2c4 g8f6 b1c3 e7e5 g1f3 b8c6":                           "English, King's Indian",
    "c2c4 g8f6 b1c3 g7g6":                                      "English, King's Indian",
    "c2c4 g8f6 b1c3 g7g6 e2e4 d7d6":                           "English, King's Indian",
    "c2c4 g8f6 g1f3":                                           "English Opening",
    "c2c4 g8f6 g2g3":                                           "English, Fianchetto",
    "c2c4 g8f6 g2g3 g7g6 f1g2 f8g7":                           "English, King's Indian",
    "c2c4 e7e6":                                                "English Opening",
    "c2c4 e7e6 b1c3":                                           "English Opening",
    "c2c4 e7e6 b1c3 d7d5":                                      "English, QGD Formation",
    "c2c4 e7e6 b1c3 g8f6":                                      "English, Agincourt Defense",
    "c2c4 e7e6 g1f3 d7d5":                                      "English, Agincourt",
    "c2c4 e7e6 g1f3 d7d5 g2g3":                                 "Catalan (via English)",
    "c2c4 b7b6":                                                "English, Nimzowitsch",
    "c2c4 d7d5":                                                "English, Anglo-Scandinavian",

    // ── A40–A44 Queen's Pawn Miscellaneous ───────────────────────────────────
    "d2d4":                                                     "Queen's Pawn",
    "d2d4 e7e5":                                                "Englund Gambit",
    "d2d4 e7e5 d4e5":                                           "Englund Gambit Accepted",
    "d2d4 b7b5":                                                "Polish Defense",
    "d2d4 b8c6":                                                "Mikenas Defense",
    "d2d4 g7g5":                                                "Borg Defense",
    "d2d4 d7d6 b1c3":                                           "Wade Defense",
    "d2d4 d7d6 g1f3 g8f6 c1g5":                                "Torre Attack vs Pirc",

    // ── A45 Trompowsky Attack ─────────────────────────────────────────────────
    "d2d4 g8f6 c1g5":                                           "Trompowsky Attack",
    "d2d4 g8f6 c1g5 g8e4":                                      "Trompowsky, ...Ne4",
    "d2d4 g8f6 c1g5 e7e6":                                      "Trompowsky, ...e6",
    "d2d4 g8f6 c1g5 d7d5":                                      "Trompowsky, ...d5",
    "d2d4 g8f6 c1g5 c7c5":                                      "Trompowsky, ...c5",

    // ── A46/A47/A48 Torre / London / Queen's Indian setups ────────────────────
    "d2d4 g8f6 g1f3":                                           "Queen's Pawn, Nf3",
    "d2d4 g8f6 g1f3 e7e6 c1g5":                                 "Torre Attack",
    "d2d4 g8f6 g1f3 e7e6 c1g5 h7h6":                           "Torre Attack, ...h6",
    "d2d4 g8f6 g1f3 e7e6 c1g5 c7c5":                           "Torre Attack, ...c5",
    "d2d4 g8f6 g1f3 b7b6":                                      "Queen's Indian without c4",
    "d2d4 g8f6 g1f3 g7g6 c1g5":                                 "Torre Attack vs KID",
    "d2d4 g8f6 g1f3 g7g6 c1f4":                                 "London System vs KID",
    "d2d4 g8f6 g1f3 g7g6 g2g3":                                 "King's Indian Attack",
    "d2d4 d7d5 g1f3":                                           "Queen's Pawn Game",
    "d2d4 d7d5 g1f3 g8f6 c1f4":                                 "London System",
    "d2d4 d7d5 g1f3 g8f6 c1f4 e7e6":                           "London System",
    "d2d4 d7d5 g1f3 g8f6 c1f4 c7c5":                           "London System, ...c5",
    "d2d4 d7d5 g1f3 g8f6 c1f4 c7c6":                           "London System, ...c6",
    "d2d4 d7d5 g1f3 g8f6 c1f4 f8f5":                           "London System, ...Bf5",
    "d2d4 d7d5 g1f3 g8f6 e2e3":                                 "Colle System",
    "d2d4 d7d5 g1f3 g8f6 e2e3 e7e6":                           "Colle System",
    "d2d4 d7d5 g1f3 g8f6 e2e3 c7c5":                           "Colle System, ...c5",
    "d2d4 d7d5 g1f3 g8f6 e2e3 c7c6":                           "Colle System, ...c6",
    "d2d4 d7d5 g1f3 g8f6 c2c4":                                 "Queen's Gambit",
    "d2d4 d7d5":                                                "Queen's Pawn Game",
    "d2d4 d7d5 b1c3":                                           "Veresov Opening",
    "d2d4 d7d5 b1c3 g8f6 c1g5":                                 "Veresov Opening",
    "d2d4 d7d5 b1c3 d7d4":                                      "Veresov, ...d4",
    "d2d4 d7d5 e2e4":                                           "Blackmar-Diemer Gambit",
    "d2d4 d7d5 e2e4 d5e4 b1c3 g8f6 f2f3":                      "Blackmar-Diemer Gambit",

    // ── A50–A55 Indian Defenses (misc) ───────────────────────────────────────
    "d2d4 g8f6 c2c4":                                           "Indian Defense",
    "d2d4 g8f6 c2c4 e7e5":                                      "Budapest Gambit",
    "d2d4 g8f6 c2c4 e7e5 d4e5":                                 "Budapest Gambit Accepted",
    "d2d4 g8f6 c2c4 e7e5 d4e5 g8g4":                           "Budapest, Fajarowicz",
    "d2d4 g8f6 c2c4 e7e5 d4e5 g8e4":                           "Budapest, Main Line",
    "d2d4 g8f6 c2c4 d7d6":                                      "Old Indian Defense",
    "d2d4 g8f6 c2c4 d7d6 b1c3":                                 "Old Indian Defense",
    "d2d4 g8f6 c2c4 d7d6 b1c3 e7e5":                           "Old Indian, Main Line",
    "d2d4 g8f6 c2c4 d7d6 g1f3 b8d7":                           "Old Indian Defense",

    // ── A56–A79 Benoni Defenses ───────────────────────────────────────────────
    "d2d4 g8f6 c2c4 c7c5":                                      "Benoni Defense",
    "d2d4 g8f6 c2c4 c7c5 d4d5":                                 "Benoni, Modern",
    "d2d4 g8f6 c2c4 c7c5 d4d5 e7e6":                           "Benoni, Modern",
    "d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3":                      "Benoni, Modern",
    "d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5":            "Modern Benoni",
    "d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5 g7g6":       "Modern Benoni, Fianchetto",
    "d2d4 g8f6 c2c4 c7c5 d4d5 b7b5":                           "Benko Gambit",
    "d2d4 g8f6 c2c4 c7c5 d4d5 b7b5 c4b5 a7a6":                 "Benko Gambit",
    "d2d4 g8f6 c2c4 c7c5 d4d5 b7b5 c4b5 a7a6 b5a6":            "Benko Gambit Accepted",
    "d2d4 g8f6 c2c4 c7c5 d4d5 b7b5 c4b5 a7a6 e2e3":            "Benko Gambit Declined",
    "d2d4 g8f6 c2c4 c7c5 g1f3":                                 "Benoni, Classical",
    "d2d4 g8f6 c2c4 g7g6":                                      "King's Indian Setup",

    // ── A80–A99 Dutch Defense ─────────────────────────────────────────────────
    "d2d4 f7f5":                                                "Dutch Defense",
    "d2d4 f7f5 g2g3":                                           "Dutch, Fianchetto",
    "d2d4 f7f5 g2g3 g8f6 f1g2":                                 "Dutch, Fianchetto",
    "d2d4 f7f5 c2c4":                                           "Dutch Defense",
    "d2d4 f7f5 c2c4 g8f6":                                      "Dutch Defense",
    "d2d4 f7f5 c2c4 g8f6 b1c3":                                 "Dutch Defense",
    "d2d4 f7f5 c2c4 g8f6 b1c3 g7g6":                           "Dutch, Leningrad",
    "d2d4 f7f5 c2c4 g8f6 b1c3 g7g6 g2g3 f8g7":                 "Dutch, Leningrad",
    "d2d4 f7f5 c2c4 g8f6 g2g3":                                 "Dutch, Fianchetto",
    "d2d4 f7f5 c2c4 g8f6 g1f3 e7e6":                           "Dutch, Classical",
    "d2d4 f7f5 c2c4 g8f6 g1f3 e7e6 g2g3 d7d5":                 "Dutch, Classical",
    "d2d4 f7f5 c2c4 g8f6 g1f3 e7e6 g2g3 d7d5 f1g2 f8d6":       "Dutch, Stonewall",
    "d2d4 f7f5 g1f3 g8f6 e2e3 e7e6 f1d3 d7d5":                 "Dutch, Stonewall",
    "d2d4 f7f5 g1f3 g8f6 c1g5":                                 "Dutch, Hopton Attack",
    "d2d4 f7f5 e2e4":                                           "Staunton Gambit",
    "d2d4 f7f5 e2e4 f5e4 b1c3":                                 "Staunton Gambit",

    // ── B00 King's Pawn: Unusual Black Replies ────────────────────────────────
    "e2e4":                                                     "King's Pawn",
    "e2e4 b8c6":                                                "Nimzowitsch Defense",
    "e2e4 b8c6 d2d4":                                           "Nimzowitsch Defense",
    "e2e4 b8c6 d2d4 d7d5":                                      "Nimzowitsch Defense",
    "e2e4 b7b6":                                                "Owen's Defense",
    "e2e4 b7b6 d2d4 c1b7":                                      "Owen's Defense",
    "e2e4 a7a6":                                                "St. George Defense",
    "e2e4 a7a6 d2d4 b7b5":                                      "St. George Defense",
    "e2e4 g7g5":                                                "Borg Defense",
    "e2e4 f7f5":                                                "Fred Defense",
    "e2e4 f7f6":                                                "Barnes Defense",
    "e2e4 b7b5":                                                "Nimzowitsch-Larsen vs e4",

    // ── B01 Scandinavian Defense ──────────────────────────────────────────────
    "e2e4 d7d5":                                                "Scandinavian Defense",
    "e2e4 d7d5 e4d5":                                           "Scandinavian Defense",
    "e2e4 d7d5 e4d5 d8d5":                                      "Scandinavian, Main Line",
    "e2e4 d7d5 e4d5 d8d5 b1c3":                                 "Scandinavian, Main Line",
    "e2e4 d7d5 e4d5 d8d5 b1c3 d5a5":                           "Scandinavian, Mieses-Kotroc",
    "e2e4 d7d5 e4d5 d8d5 b1c3 d5d6":                           "Scandinavian, Modern",
    "e2e4 d7d5 e4d5 d8d5 b1c3 d5d8":                           "Scandinavian, Gubinsky-Melts",
    "e2e4 d7d5 e4d5 g8f6":                                      "Scandinavian, Modern",
    "e2e4 d7d5 e4d5 g8f6 d2d4 g7g6":                           "Scandinavian, Marshall",
    "e2e4 d7d5 e4d5 g8f6 c2c4":                                 "Scandinavian, Icelandic Gambit",
    "e2e4 d7d5 b1c3":                                           "Scandinavian, Closed",

    // ── B02–B05 Alekhine's Defense ────────────────────────────────────────────
    "e2e4 g8f6":                                                "Alekhine's Defense",
    "e2e4 g8f6 e4e5":                                           "Alekhine's Defense",
    "e2e4 g8f6 e4e5 f6d5":                                      "Alekhine's Defense",
    "e2e4 g8f6 e4e5 f6d5 d2d4 d7d6":                           "Alekhine's Defense, Modern",
    "e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 g1f3":                      "Alekhine's Defense, Modern",
    "e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 e5d6":                      "Alekhine's Defense, Exchange",
    "e2e4 g8f6 e4e5 f6d5 c2c4 d5b4 d2d4":                      "Alekhine's Defense, Four Pawns",
    "e2e4 g8f6 e4e5 f6d5 c2c4 d5b4 d2d4 d7d6 e5d6 d8d6":       "Alekhine's, Four Pawns",
    "e2e4 g8f6 b1c3":                                           "Alekhine's Defense, Balogh",

    // ── B06 Modern / Robatsch Defense ────────────────────────────────────────
    "e2e4 g7g6":                                                "Modern Defense",
    "e2e4 g7g6 d2d4":                                           "Modern Defense",
    "e2e4 g7g6 d2d4 f8g7":                                      "Modern Defense",
    "e2e4 g7g6 d2d4 f8g7 b1c3":                                 "Modern Defense",
    "e2e4 g7g6 d2d4 f8g7 b1c3 d7d6":                           "Modern Defense",
    "e2e4 g7g6 d2d4 d7d6":                                      "Modern Defense",

    // ── B07–B09 Pirc Defense ──────────────────────────────────────────────────
    "e2e4 d7d6":                                                "Pirc Defense",
    "e2e4 d7d6 d2d4":                                           "Pirc Defense",
    "e2e4 d7d6 d2d4 g8f6":                                      "Pirc Defense",
    "e2e4 d7d6 d2d4 g8f6 b1c3":                                 "Pirc Defense",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6":                           "Pirc Defense",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 g1f3":                      "Pirc, Classical",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 f2f4":                      "Pirc, Austrian Attack",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 f1e2":                      "Pirc, Byrne Variation",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 c1e3":                      "Pirc, 150 Attack",
    "e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 c1g5":                      "Pirc, Byrne Attack",

    // ── B10–B19 Caro-Kann Defense ─────────────────────────────────────────────
    "e2e4 c7c6":                                                "Caro-Kann Defense",
    "e2e4 c7c6 d2d4":                                           "Caro-Kann Defense",
    "e2e4 c7c6 d2d4 d7d5":                                      "Caro-Kann Defense",
    "e2e4 c7c6 d2d4 d7d5 b1c3":                                 "Caro-Kann, Classical",
    "e2e4 c7c6 d2d4 d7d5 b1c3 d5e4 c3e4":                      "Caro-Kann, Classical",
    "e2e4 c7c6 d2d4 d7d5 b1c3 d5e4 c3e4 g8f6 e4g3":            "Caro-Kann, Classical",
    "e2e4 c7c6 d2d4 d7d5 b1c3 d5e4 c3e4 f8f5":                 "Caro-Kann, Classical, ...Bf5",
    "e2e4 c7c6 d2d4 d7d5 e4e5":                                 "Caro-Kann, Advance",
    "e2e4 c7c6 d2d4 d7d5 e4e5 c8f5":                           "Caro-Kann, Advance, ...Bf5",
    "e2e4 c7c6 d2d4 d7d5 e4d5":                                 "Caro-Kann, Exchange",
    "e2e4 c7c6 d2d4 d7d5 b1d2":                                 "Caro-Kann, Karpov",
    "e2e4 c7c6 d2d4 d7d5 b1d2 d5e4 d2e4":                      "Caro-Kann, Karpov",
    "e2e4 c7c6 d2d4 d7d5 b1d2 g8f6":                           "Caro-Kann, Karpov, ...Nf6",
    "e2e4 c7c6 d2d4 d7d5 g1f3":                                 "Caro-Kann, Two Knights",
    "e2e4 c7c6 d2d4 d7d5 c2c4":                                 "Caro-Kann, Panov-Botvinnik",
    "e2e4 c7c6 d2d4 d7d5 c2c4 d5c4":                           "Caro-Kann, Panov Accepted",
    "e2e4 c7c6 d2d4 d7d5 c2c4 e7e6":                           "Caro-Kann, Panov, ...e6",
    "e2e4 c7c6 b1c3 d7d5":                                      "Caro-Kann, Two Knights",
    "e2e4 c7c6 c2c4":                                           "Caro-Kann, English-Caro",

    // ── B20–B29 Sicilian: Early Deviations ────────────────────────────────────
    "e2e4 c7c5":                                                "Sicilian Defense",
    "e2e4 c7c5 c2c3":                                           "Sicilian, Alapin",
    "e2e4 c7c5 c2c3 g8f6":                                      "Sicilian, Alapin, ...Nf6",
    "e2e4 c7c5 c2c3 d7d5":                                      "Sicilian, Alapin, ...d5",
    "e2e4 c7c5 c2c3 d7d5 e4d5 d8d5":                           "Sicilian, Alapin, ...d5",
    "e2e4 c7c5 c2c3 e7e6":                                      "Sicilian, Alapin, ...e6",
    "e2e4 c7c5 b1c3":                                           "Sicilian, Closed",
    "e2e4 c7c5 b1c3 b8c6":                                      "Sicilian, Closed",
    "e2e4 c7c5 b1c3 b8c6 g2g3":                                 "Sicilian, Closed",
    "e2e4 c7c5 b1c3 b8c6 f2f4":                                 "Sicilian, Grand Prix Attack",
    "e2e4 c7c5 b1c3 b8c6 f2f4 g7g6":                           "Sicilian, Grand Prix Attack",
    "e2e4 c7c5 b1c3 e7e6":                                      "Sicilian, Closed, ...e6",
    "e2e4 c7c5 b1c3 g7g6":                                      "Sicilian, Closed, Fianchetto",
    "e2e4 c7c5 f2f4":                                           "Sicilian, McDonnell Attack",
    "e2e4 c7c5 d2d3":                                           "Sicilian, King's Indian Attack",
    "e2e4 c7c5 d2d3 g8f6 g1f3 b8c6 g2g3 g7g6":                 "Sicilian, King's Indian Attack",

    // ── B30–B39 Sicilian: Nc6 lines ───────────────────────────────────────────
    "e2e4 c7c5 g1f3 b8c6":                                      "Sicilian, Old Sicilian",
    "e2e4 c7c5 g1f3 b8c6 d2d4":                                 "Sicilian, Open, ...Nc6",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4":                      "Sicilian, Classical",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6":                 "Sicilian, Classical",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3":            "Sicilian, Classical, Main",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6":       "Sicilian, Classical",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e5":       "Sicilian, Sveshnikov",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e5 d4b5":  "Sicilian, Sveshnikov",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6":                 "Sicilian, Accelerated Dragon",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6 b1c3 f8g7":       "Sicilian, Accelerated Dragon",
    "e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 e7e6":                 "Sicilian, Four Knights",
    "e2e4 c7c5 g1f3 b8c6 f1b5":                                 "Sicilian, Rossolimo",
    "e2e4 c7c5 g1f3 b8c6 f1b5 g7g6":                           "Sicilian, Rossolimo, ...g6",
    "e2e4 c7c5 g1f3 b8c6 f1b5 e7e6":                           "Sicilian, Rossolimo, ...e6",
    "e2e4 c7c5 g1f3 b8c6 f1b5 d7d6":                           "Sicilian, Rossolimo, ...d6",

    // ── B40–B49 Sicilian: e6 lines ────────────────────────────────────────────
    "e2e4 c7c5 g1f3 e7e6":                                      "Sicilian, ...e6",
    "e2e4 c7c5 g1f3 e7e6 d2d4":                                 "Sicilian, Open, ...e6",
    "e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4":                      "Sicilian, Kan/Taimanov",
    "e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4 a7a6":                 "Sicilian, Kan",
    "e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4 b8c6":                 "Sicilian, Taimanov",
    "e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4 b8c6 b1c3":            "Sicilian, Taimanov",
    "e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6":       "Sicilian, Scheveningen",
    "e2e4 c7c5 g1f3 a7a6":                                      "Sicilian, O'Kelly",

    // ── B50–B59 Sicilian: d6 without ...Nc6 ──────────────────────────────────
    "e2e4 c7c5 g1f3 d7d6":                                      "Sicilian, ...d6",
    "e2e4 c7c5 g1f3 d7d6 d2d4":                                 "Sicilian, Open, ...d6",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4":                      "Sicilian, ...d6",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3":            "Sicilian, Main Lines",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6":       "Sicilian, Najdorf",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1e3":  "Sicilian, Najdorf, English Attack",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f2f3":  "Sicilian, Najdorf, f3",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2":  "Sicilian, Najdorf, Opocensky",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4":  "Sicilian, Najdorf, Fischer",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g4":  "Sicilian, Najdorf, Bayonet",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6":       "Sicilian, Dragon",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3":  "Sicilian, Dragon, Yugoslav",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f3":  "Sicilian, Dragon, Yugoslav",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3": "Sicilian, Dragon, Yugoslav",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 g2g4":  "Sicilian, Dragon, Levenfish",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6":       "Sicilian, Scheveningen",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 g2g4":  "Sicilian, Keres Attack",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 f2f4":  "Sicilian, Scheveningen, Sozin",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 b8d7":       "Sicilian, Pelikan",
    "e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 f1b5":            "Sicilian, Moscow Variation",
    "e2e4 c7c5 g1f3 d7d6 f1b5":                                 "Sicilian, Canal Attack",

    // ── C00–C19 French Defense ────────────────────────────────────────────────
    "e2e4 e7e6":                                                "French Defense",
    "e2e4 e7e6 d2d4":                                           "French Defense",
    "e2e4 e7e6 d2d4 d7d5":                                      "French Defense",
    "e2e4 e7e6 d2d4 d7d5 b1c3":                                 "French, Classical",
    "e2e4 e7e6 d2d4 d7d5 b1c3 g8f6":                           "French, Classical",
    "e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5":                      "French, Classical, ...Nf6",
    "e2e4 e7e6 d2d4 d7d5 b1c3 f8b4":                           "French, Winawer",
    "e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5":                      "French, Winawer",
    "e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5 c7c5":                 "French, Winawer, Poisoned Pawn",
    "e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 a2a3":                      "French, Winawer, Spurious",
    "e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 b1e2":                      "French, Winawer, Advance",
    "e2e4 e7e6 d2d4 d7d5 b1c3 d5e4 b1e4":                      "French, Rubinstein",
    "e2e4 e7e6 d2d4 d7d5 e4e5":                                 "French, Advance",
    "e2e4 e7e6 d2d4 d7d5 e4e5 c7c5":                           "French, Advance, ...c5",
    "e2e4 e7e6 d2d4 d7d5 e4e5 c7c5 c2c3":                      "French, Advance, ...c5",
    "e2e4 e7e6 d2d4 d7d5 e4e5 c7c5 c2c3 b8c6":                 "French, Advance, Main",
    "e2e4 e7e6 d2d4 d7d5 e4e5 c8d7":                           "French, Advance, ...Bd7",
    "e2e4 e7e6 d2d4 d7d5 b1d2":                                 "French, Tarrasch",
    "e2e4 e7e6 d2d4 d7d5 b1d2 g8f6":                           "French, Tarrasch, ...Nf6",
    "e2e4 e7e6 d2d4 d7d5 b1d2 c7c5":                           "French, Tarrasch, ...c5",
    "e2e4 e7e6 d2d4 d7d5 b1d2 c7c5 g1f3 b8c6":                 "French, Tarrasch, Open",
    "e2e4 e7e6 d2d4 d7d5 e4d5":                                 "French, Exchange",
    "e2e4 e7e6 d2d4 d7d5 g1f3":                                 "French, Two Knights",
    "e2e4 e7e6 d2d4 d7d5 g1f3 g8f6":                           "French, Two Knights",
    "e2e4 e7e6 g1f3":                                           "King's Indian Attack vs French",
    "e2e4 e7e6 g1f3 d7d5 b1c3":                                 "French, Three Knights",

    // ── C20–C29 Open Games: Center Game, Bishop's Opening, Vienna ────────────
    "e2e4 e7e5":                                                "Open Game",
    "e2e4 e7e5 d2d4":                                           "Center Game",
    "e2e4 e7e5 d2d4 e5d4":                                      "Center Game Accepted",
    "e2e4 e7e5 d2d4 e5d4 d8d4":                                 "Center Game",
    "e2e4 e7e5 d2d4 e5d4 c2c3":                                 "Danish Gambit",
    "e2e4 e7e5 d2d4 e5d4 c2c3 d4c3 b1c3":                      "Danish Gambit Accepted",
    "e2e4 e7e5 f1c4":                                           "Bishop's Opening",
    "e2e4 e7e5 f1c4 g8f6":                                      "Bishop's Opening, ...Nf6",
    "e2e4 e7e5 f1c4 f8c5":                                      "Bishop's Opening, ...Bc5",
    "e2e4 e7e5 f1c4 c7c6":                                      "Bishop's Opening, ...c6",
    "e2e4 e7e5 b1c3":                                           "Vienna Game",
    "e2e4 e7e5 b1c3 g8f6":                                      "Vienna Game",
    "e2e4 e7e5 b1c3 g8f6 f2f4":                                 "Vienna Gambit",
    "e2e4 e7e5 b1c3 g8f6 g1f3":                                 "Vienna Game, ...Nf6",
    "e2e4 e7e5 b1c3 b8c6":                                      "Vienna Game, ...Nc6",
    "e2e4 e7e5 b1c3 f8c5":                                      "Vienna Game, ...Bc5",
    "e2e4 e7e5 b1c3 f8c5 d1g4":                                 "Vienna Game, Frankenstein-Dracula",
    "e2e4 e7e5 b1c3 g8f6 f1c4":                                 "Vienna Game, Paulsen",
    "e2e4 e7e5 g1e2":                                           "Alapin's Opening",
    "e2e4 e7e5 c2c3":                                           "Lopez Opening",

    // ── C30–C39 King's Gambit ─────────────────────────────────────────────────
    "e2e4 e7e5 f2f4":                                           "King's Gambit",
    "e2e4 e7e5 f2f4 e5f4":                                      "King's Gambit Accepted",
    "e2e4 e7e5 f2f4 e5f4 g1f3":                                 "KGA, Normal Variation",
    "e2e4 e7e5 f2f4 e5f4 g1f3 g7g5":                           "KGA, Kieseritzky Gambit",
    "e2e4 e7e5 f2f4 e5f4 g1f3 g7g5 h2h4 g5g4 g1e5":            "KGA, Kieseritzky",
    "e2e4 e7e5 f2f4 e5f4 g1f3 d7d6":                           "KGA, Fischer Defense",
    "e2e4 e7e5 f2f4 e5f4 g1f3 g8f6":                           "KGA, Schallopp Defense",
    "e2e4 e7e5 f2f4 e5f4 g1f3 f8e7":                           "KGA, Cunningham Defense",
    "e2e4 e7e5 f2f4 e5f4 g1f3 h7h6":                           "KGA, Becker Defense",
    "e2e4 e7e5 f2f4 e5f4 f1e2":                                 "KGA, Cunningham",
    "e2e4 e7e5 f2f4 e5f4 b1c3":                                 "KGA, Mason-Keres",
    "e2e4 e7e5 f2f4 e5f4 d2d4":                                 "KGA, Rosentreter Gambit",
    "e2e4 e7e5 f2f4 f8c5":                                      "King's Gambit Declined, Classical",
    "e2e4 e7e5 f2f4 d7d5":                                      "King's Gambit Declined, Falkbeer",
    "e2e4 e7e5 f2f4 d7d5 e4d5":                                 "Falkbeer Counter-Gambit",
    "e2e4 e7e5 f2f4 d7d5 e4d5 e5e4":                           "Falkbeer Counter-Gambit",
    "e2e4 e7e5 f2f4 f8c5 b1c3":                                 "KGD, Berlin",

    // ── C40–C49 Petrov, Philidor, Four Knights ────────────────────────────────
    "e2e4 e7e5 g1f3":                                           "King's Knight Opening",
    "e2e4 e7e5 g1f3 d7d6":                                      "Philidor Defense",
    "e2e4 e7e5 g1f3 d7d6 d2d4":                                 "Philidor Defense, Exchange",
    "e2e4 e7e5 g1f3 d7d6 d2d4 g8f6":                           "Philidor Defense",
    "e2e4 e7e5 g1f3 d7d6 d2d4 g8f6 b1c3 b8d7":                 "Philidor, Hanham Variation",
    "e2e4 e7e5 g1f3 d7d6 f1c4 f8e7":                           "Philidor Defense",
    "e2e4 e7e5 g1f3 f7f5":                                      "Latvian Gambit",
    "e2e4 e7e5 g1f3 f7f5 g1e5":                                 "Latvian Gambit, Accepted",
    "e2e4 e7e5 g1f3 f7f5 f1c4":                                 "Latvian Gambit, Main Line",
    "e2e4 e7e5 g1f3 g8f6":                                      "Petrov's Defense",
    "e2e4 e7e5 g1f3 g8f6 f3e5":                                 "Petrov's Defense, Classical",
    "e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4":                 "Petrov's Defense, Classical",
    "e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d2d4":            "Petrov's Defense, Classical",
    "e2e4 e7e5 g1f3 g8f6 d2d4":                                 "Petrov's Defense, Steinitz",
    "e2e4 e7e5 g1f3 g8f6 b1c3":                                 "Petrov's Three Knights",
    "e2e4 e7e5 g1f3 b8c6":                                      "Open Game",
    "e2e4 e7e5 g1f3 b8c6 b1c3":                                 "Three Knights Game",
    "e2e4 e7e5 g1f3 b8c6 b1c3 g8f6":                           "Four Knights Game",
    "e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 f1b5":                      "Four Knights, Spanish",
    "e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 d2d4":                      "Four Knights, Scotch",
    "e2e4 e7e5 g1f3 b8c6 b1c3 f8b4":                           "Three Knights, Metger",

    // ── C50–C59 Italian Game / Giuoco Piano ───────────────────────────────────
    "e2e4 e7e5 g1f3 b8c6 f1c4":                                 "Italian Game",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8e7":                           "Hungarian Defense",
    "e2e4 e7e5 g1f3 b8c6 f1c4 d7d6":                           "Semi-Italian",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5":                           "Giuoco Piano",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3":                      "Giuoco Piano, Main Line",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3 g8f6":                 "Giuoco Piano, Main Line",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3 d7d5":                 "Giuoco Piano, Center Attack",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 d2d3":                      "Giuoco Pianissimo",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 b2b4":                      "Evans Gambit",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 b2b4 c5b4":                 "Evans Gambit Accepted",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 b2b4 c5b4 c2c3":            "Evans Gambit, Main Line",
    "e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 b2b4 c5d6":                 "Evans Gambit Declined",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6":                           "Two Knights Defense",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4":                      "Two Knights, Center Attack",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4 e5d4":                 "Two Knights, Center Attack",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5":                      "Two Knights, Fried Liver",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 c4d5":            "Two Knights, Main Line",
    "e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d3":                      "Two Knights, Slow",

    // ── C60–C99 Ruy Lopez / Spanish Opening ───────────────────────────────────
    "e2e4 e7e5 g1f3 b8c6 f1b5":                                 "Ruy Lopez",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g8f6":                           "Ruy Lopez, Berlin Defense",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g8f6 e1g1 f6e4 d2d4":            "Ruy Lopez, Berlin",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g8f6 e1g1 f8c5":                 "Ruy Lopez, Berlin, ...Bc5",
    "e2e4 e7e5 g1f3 b8c6 f1b5 f8c5":                           "Ruy Lopez, Classical",
    "e2e4 e7e5 g1f3 b8c6 f1b5 d7d6":                           "Ruy Lopez, Steinitz Defense",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g7g6":                           "Ruy Lopez, Smyslov Defense",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g8e7":                           "Ruy Lopez, Cozio Defense",
    "e2e4 e7e5 g1f3 b8c6 f1b5 g8f6 d2d4":                      "Ruy Lopez, Berlin, d4",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6":                           "Ruy Lopez, Morphy Defense",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4":                      "Ruy Lopez, Morphy",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6":                 "Ruy Lopez, Open",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1":            "Ruy Lopez, Closed / Open",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 g6e4":       "Ruy Lopez, Open",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 g6e4 d2d4":  "Ruy Lopez, Open, Main",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 f8e7":       "Ruy Lopez, Closed",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 f8e7 d1e1":  "Ruy Lopez, Closed",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 f8e7 d1e1 b7b5 a4b3 d7d6 c2c3 e1g1": "Ruy Lopez, Closed Main",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 f8e7 d1e1 b7b5 a4b3 e1g1 d2d4": "Ruy Lopez, Marshall Attack",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6":                      "Ruy Lopez, Exchange",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6 d7c6 d2d4":            "Ruy Lopez, Exchange",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 b7b5 a4b3":            "Ruy Lopez, Archangel",
    "e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 d2d3":                      "Ruy Lopez, King's Indian Attack",
    "e2e4 e7e5 g1f3 b8c6 d2d4":                                 "Scotch Game",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4":                      "Scotch Game",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 g8f6":                 "Scotch Game, ...Nf6",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 f8c5":                 "Scotch Game, ...Bc5",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 d8h4":                 "Scotch Game, ...Qh4",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 c2c3":                      "Göring Gambit",
    "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f1c4":                      "Scotch Gambit",
    "e2e4 e7e5 g1f3 b8c6 c2c3":                                 "Ponziani Opening",
    "e2e4 e7e5 g1f3 b8c6 c2c3 g8f6":                           "Ponziani Opening, ...Nf6",

    // ── D00–D09 Queen's Pawn Game ─────────────────────────────────────────────
    "d2d4 d7d5 b1c3 c7c5 e2e4":                                 "Blackmar-Diemer",
    "d2d4 d7d5 c1f4":                                           "London System",
    "d2d4 d7d5 c1f4 g8f6":                                      "London System",
    "d2d4 d7d5 c1f4 g8f6 e2e3 e7e6 g1f3":                      "London System",

    // ── D10–D19 Slav Defense ──────────────────────────────────────────────────
    "d2d4 d7d5 c2c4 c7c6":                                      "Slav Defense",
    "d2d4 d7d5 c2c4 c7c6 g1f3":                                 "Slav Defense",
    "d2d4 d7d5 c2c4 c7c6 g1f3 g8f6":                           "Slav Defense",
    "d2d4 d7d5 c2c4 c7c6 g1f3 g8f6 b1c3":                      "Slav Defense, Three Knights",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3":                      "Slav Defense, Main Line",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 d5c4":                 "Slav Defense, Accepted",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 e7e6":                 "Semi-Slav Defense",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 e7e6 c1g5":            "Semi-Slav, Anti-Meran",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 e7e6 e2e3":            "Semi-Slav, Meran",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 e7e6 e2e3 b8d7":       "Semi-Slav, Meran",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 e7e6 e2e3 b8d7 f1d3 d5c4 d3c4": "Semi-Slav, Meran",
    "d2d4 d7d5 c2c4 c7c6 b1c3 g8f6 g1f3 d5c4 e2e4":            "Slav, Czech Variation",

    // ── D20–D29 Queen's Gambit Accepted ──────────────────────────────────────
    "d2d4 d7d5 c2c4 d5c4":                                      "Queen's Gambit Accepted",
    "d2d4 d7d5 c2c4 d5c4 g1f3":                                 "QGA, Main Line",
    "d2d4 d7d5 c2c4 d5c4 g1f3 g8f6":                           "QGA, Main Line",
    "d2d4 d7d5 c2c4 d5c4 g1f3 g8f6 e2e3":                      "QGA, Classical",
    "d2d4 d7d5 c2c4 d5c4 g1f3 e7e6":                           "QGA, ...e6",
    "d2d4 d7d5 c2c4 d5c4 e2e4":                                 "QGA, Central Variation",
    "d2d4 d7d5 c2c4 d5c4 e2e3":                                 "QGA, Mannheim",
    "d2d4 d7d5 c2c4 d5c4 b1c3":                                 "QGA, Bogoljubov",

    // ── D30–D69 Queen's Gambit Declined ──────────────────────────────────────
    "d2d4 d7d5 c2c4 e7e6":                                      "Queen's Gambit Declined",
    "d2d4 d7d5 c2c4 e7e6 b1c3":                                 "QGD",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6":                           "QGD",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5":                      "QGD, Orthodox",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7":                 "QGD, Orthodox",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 g1f3":            "QGD, Orthodox, Main",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 g1f3 e1g1":       "QGD, Orthodox, Main",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 h7h6":                 "QGD, Lasker",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1f4":                      "QGD, Vienna Variation",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3":                      "QGD, Various",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 f8e7 c1f4":            "QGD, Vienna",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 b8d7":                 "QGD, Ragozin",
    "d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 f8b4":                 "Ragozin Defense",
    "d2d4 d7d5 c2c4 e7e6 b1c3 b8d7":                           "QGD, Lasker",
    "d2d4 d7d5 c2c4 e7e6 b1c3 c7c6":                           "QGD, Semi-Slav setup",
    "d2d4 d7d5 c2c4 e7e6 g1f3 g8f6":                           "QGD, Fianchetto",
    "d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 b1c3":                      "QGD",
    "d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 g2g3":                      "Catalan Opening",
    "d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 g2g3 f8e7 f1g2":            "Catalan, Closed",
    "d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 g2g3 d5c4 f1g2":            "Catalan, Open",
    "d2d4 d7d5 c2c4 e7e6 g1f3 f8b4":                           "Bogo-Indian Defense",
    "d2d4 d7d5 c2c4 e7e5":                                      "Albin Counter-Gambit",
    "d2d4 d7d5 c2c4 e7e5 d4e5 d5d4":                           "Albin Counter-Gambit, Main",
    "d2d4 d7d5 c2c4 c7c5":                                      "Tarrasch Defense",
    "d2d4 d7d5 c2c4 c7c5 c4d5 g8f6":                           "Tarrasch Defense, Symmetrical",
    "d2d4 d7d5 c2c4 g7g6":                                      "Schlechter Defense",

    // ── D70–D99 Grünfeld Defense ──────────────────────────────────────────────
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5":                           "Grünfeld Defense",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5":                 "Grünfeld, Exchange",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3":  "Grünfeld, Russian",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3 f8g7": "Grünfeld, Russian, Main",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5f4":       "Grünfeld, Exchange, ...Nf4",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3":                      "Grünfeld, Three Knights",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3 f8g7 d1b3":            "Grünfeld, Botvinnik",
    "d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 e2e3":                      "Grünfeld, Slow",
    "d2d4 g8f6 c2c4 g7g6 g1f3 d7d5":                           "Grünfeld, Quiet",

    // ── E00–E09 Catalan Opening ───────────────────────────────────────────────
    "d2d4 g8f6 c2c4 e7e6 g2g3":                                 "Catalan Opening",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5":                           "Catalan, Main Line",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 f1g2":                      "Catalan",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 f1g2 f8e7 g1f3":            "Catalan, Closed",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 f1g2 d5c4":                 "Catalan, Open",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 g1f3 f8e7 f1g2":            "Catalan, Closed",
    "d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 g1f3 d5c4 f1g2 c4d3":       "Catalan, Open",
    "d2d4 g8f6 c2c4 e7e6 g1f3 d7d5 g2g3":                      "Catalan (via Nf3)",

    // ── E10–E19 Bogo-Indian / Queen's Indian ──────────────────────────────────
    "d2d4 g8f6 c2c4 e7e6 g1f3 f8b4":                           "Bogo-Indian Defense",
    "d2d4 g8f6 c2c4 e7e6 g1f3 f8b4 c1d2":                      "Bogo-Indian, ...Bd2",
    "d2d4 g8f6 c2c4 e7e6 g1f3 f8b4 b1d2":                      "Bogo-Indian, Gruenfeld",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6":                           "Queen's Indian Defense",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3":                      "Queen's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2":            "Queen's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2 f8e7 e1g1":  "Queen's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 b1c3":                      "Queen's Indian, Classical",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 c1g5":                      "Queen's Indian, Petrosian",
    "d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 e2e3":                      "Queen's Indian, Euwe",
    "d2d4 g8f6 c2c4 e7e6 g1f3 d7d5":                           "Queen's Gambit Declined",

    // ── E20–E59 Nimzo-Indian Defense ──────────────────────────────────────────
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4":                           "Nimzo-Indian Defense",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3":                      "Nimzo-Indian, Rubinstein",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 c7c5":                 "Nimzo-Indian, Rubinstein",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 b7b6":                 "Nimzo-Indian, Taimanov",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 e1g1":                 "Nimzo-Indian, Bernstein",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2":                      "Nimzo-Indian, Classical",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 c7c5":                 "Nimzo-Indian, Classical",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 d7d5":                 "Nimzo-Indian, Classical, ...d5",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 e1g1":                 "Nimzo-Indian, Classical",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3":                      "Nimzo-Indian, Sämisch",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3 b4c3 b2c3":            "Nimzo-Indian, Sämisch",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 f2f3":                      "Nimzo-Indian, Sämisch, f3",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 g1f3":                      "Nimzo-Indian, Three Knights",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 g1f3 c7c5":                 "Nimzo-Indian, Kasparov",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 g1f3 d7d5":                 "Nimzo-Indian, Ragozin",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 g1f3 b7b6":                 "Nimzo-Indian, Three Knights",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 g2g3":                      "Nimzo-Indian, Romanishin",
    "d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d2d3":                      "Nimzo-Indian, Slow",

    // ── E60–E99 King's Indian Defense ─────────────────────────────────────────
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7":                           "King's Indian Defense",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4":                      "King's Indian, Main Line",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6":                 "King's Indian Defense",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3":            "King's Indian, Classical",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 e1g1":       "King's Indian, Classical",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 e1g1 e7e5":  "King's Indian, Classical, ...e5",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 e1g1 b8d7":  "King's Indian, Averbakh",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 e1g1 b8a6":  "King's Indian, Panno",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4":            "King's Indian, Four Pawns",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4 e1g1":       "King's Indian, Four Pawns",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 c1e3":            "King's Indian, Averbakh",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 c1e3 e1g1":       "King's Indian, Averbakh",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g2g3":            "King's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 b1d2":            "King's Indian, Gligoric",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 h2h3":            "King's Indian, Sämisch",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3":            "King's Indian, Sämisch",
    "d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3 e1g1":       "King's Indian, Sämisch",
    "d2d4 g8f6 c2c4 g7g6 g1f3 f8g7":                           "King's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 g7g6 g1f3 f8g7 g2g3 e1g1 f1g2":            "King's Indian, Fianchetto",
    "d2d4 g8f6 c2c4 g7g6 g2g3 f8g7 f1g2":                      "King's Indian, Fianchetto (no Nc3)",

};
