Vision reads aren't perfect, and you know things the photos don't show. Every line on the Titles page has curation actions, and every one of them is durable: the decision is saved in a small committed file and replayed on every rebuild, so re-running extract or resolve can never undo it.
edit — fix a misread title or add cues you already know (publisher, edition, year, language). A corrected misspelling automatically merges with a correctly-read sighting of the same game from another photo. If the line already had a BGG match, saving re-queues it so resolve searches again with the corrected data.
split into copies — one line, several physical boxes? Splitting makes each photo its own copy, and each copy picks its own edition afterward. Appears on any line whose title was seen in more than one photo. Splitting one game never affects a same-named different edition.
+
pick edition — a matched game with no legible edition cues stays version-less by design (never guess) — but you know which printing your box is. This fetches the game's complete version list into a Review ballot; pick yours there.
remove (inside the edit panel) — for lines that shouldn't exist at all: a book read as a game, box art misread as a title. The line and its matches are discarded and stay gone. This is different from reject on the Review page, which keeps the line visible as "no BGG match" — right for real games BGG doesn't know.
Undo: each decision is one record in data/title_edits.json, data/title_splits.json, or data/title_removals.json — delete the record and the next rebuild restores the old state.
diff --git a/src/bggpipe/templates/pages/titles.html b/src/bggpipe/templates/pages/titles.html
index e94bc99..9424c08 100644
--- a/src/bggpipe/templates/pages/titles.html
+++ b/src/bggpipe/templates/pages/titles.html
@@ -70,6 +70,13 @@ function render() {
title="one line, several boxes? make each photo its own copy">
split into copies`
: ""}
+ ${c.bgg_id && ["auto", "approved"].includes(c.status)
+ && ["version_unknown", "version_error", ""].includes(c.version_status || "")
+ ? ``
+ : ""}
${c.shaky ? `` : ""}
@@ -92,6 +99,16 @@ async function refresh() {
document.getElementById("catbody").addEventListener("click", async e => {
const cancel = e.target.closest("button.canceledit");
if (cancel) { EDITING = null; GATE.reset(); render(); refresh().catch(() => {}); return; }
+ const pe = e.target.closest("button.pickedition");
+ if (pe) {
+ const res = await apiPost("/api/open-versions", {
+ title_raw: pe.dataset.title,
+ source_photos: pe.dataset.photos,
+ row_ix: pe.dataset.rowix === "" ? null : Number(pe.dataset.rowix),
+ });
+ if (res) { GATE.reset(); refresh().catch(() => {}); }
+ return;
+ }
const ok = e.target.closest("button.confirmread");
if (ok) {
const res = await apiPost("/api/edit-title", {
diff --git a/src/bggpipe/webreview.py b/src/bggpipe/webreview.py
index 7d1b93a..7d58fbc 100644
--- a/src/bggpipe/webreview.py
+++ b/src/bggpipe/webreview.py
@@ -57,7 +57,7 @@ from bggpipe.models import (
)
from bggpipe.normalize import normalize_title
from bggpipe.resolve import TitleEntry
-from bggpipe.review import ReviewSession
+from bggpipe.review import _BGG_ERRORS, ReviewSession
def load_thumbnails(cache_dir: Path) -> dict[int, str]:
@@ -539,6 +539,7 @@ def create_app(
"bgg_id": row["bgg_id"] if row else "",
"bgg_name": row["bgg_name"] if row else "",
"version_name": row["version_name"] if row else "",
+ "version_status": row["version_status"] if row else "",
"merged_into": row.get("merged_into", "") if row else "",
"row_ix": _ix_of(session.rows, row) if row else None,
"cues": {
@@ -1087,6 +1088,20 @@ def create_app(
replay_titles(cfg)
return state()
+ @app.post("/api/open-versions")
+ def api_open_versions(body: RowRef) -> dict:
+ with lock:
+ revision["n"] += 1
+ _refuse_if_rewriting()
+ row = find_row(body.title_raw, body.source_photos, body.row_ix)
+ try:
+ session.open_version_ballot(row)
+ except ValueError as err:
+ raise HTTPException(400, str(err)) from err
+ except _BGG_ERRORS as err:
+ raise HTTPException(502, f"BGG lookup failed: {err}") from err
+ return state()
+
@app.post("/api/veto-merge")
def api_veto_merge(body: RowRef) -> dict:
with lock:
diff --git a/tests/data/titles.json b/tests/data/titles.json
index e25d4e6..ff25601 100644
--- a/tests/data/titles.json
+++ b/tests/data/titles.json
@@ -1,40 +1,110 @@
[
- {
- "title_raw": "Catan",
- "confidence": "high",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Wingspan",
- "confidence": "high",
- "publisher_hint": "Stonemaier Games",
- "year_hint": 2019,
- "language_hint": "English",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Wingspan: European Expansion",
- "confidence": "high",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Wingspan Europe",
- "confidence": "medium",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Café International",
- "confidence": "high",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Citadels",
- "confidence": "high",
- "source_photos": ["hand-typed-test-list"]
- },
- {
- "title_raw": "Blorvath: Quest of the Zzyzx",
- "confidence": "low",
- "source_photos": ["hand-typed-test-list"]
- }
+ {
+ "title_raw": "Catan",
+ "confidence": "high",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Wingspan",
+ "confidence": "high",
+ "publisher_hint": "Stonemaier Games",
+ "year_hint": 2019,
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Wingspan: European Expansion",
+ "confidence": "high",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Wingspan Europe",
+ "confidence": "medium",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Café International",
+ "confidence": "high",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Citadels",
+ "confidence": "high",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "Blorvath: Quest of the Zzyzx",
+ "confidence": "low",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "CIVILIZATION Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC",
+ "confidence": "high",
+ "publisher_hint": "The Avalon Hill Game Company, Baltimore, Maryland",
+ "edition_hint": "Bookcase Game",
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "ADVANCED CIVILIZATION Game Expansion of the Heroic Age - Featuring New Civilization, Commodity, and Calamity Cards",
+ "confidence": "high",
+ "publisher_hint": "The Avalon Hill Game Company, Baltimore, Maryland",
+ "edition_hint": "Bookcase Game",
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "SORCERER The Game of Magical Conflict",
+ "confidence": "high",
+ "publisher_hint": "Simulations Publications Incorporated (SPI)",
+ "edition_hint": "Designer's Edition",
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "STARFORCE ALPHA CENTAURI Interstellar Conflict in the 25th Century",
+ "confidence": "high",
+ "publisher_hint": "Simulations Publications Incorporated (SPI)",
+ "edition_hint": "Designer's Edition",
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "FLAT TOP",
+ "confidence": "high",
+ "year_hint": 1942,
+ "language_hint": "English",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ },
+ {
+ "title_raw": "ALICE IS MISSING: A SILENT ROLE PLAYING GAME",
+ "confidence": "high",
+ "source_photos": [
+ "hand-typed-test-list"
+ ]
+ }
]
diff --git a/tests/fixtures/bgg_cache/STUB_FIXTURES.marker b/tests/fixtures/bgg_cache/STUB_FIXTURES.marker
deleted file mode 100644
index c34d304..0000000
--- a/tests/fixtures/bgg_cache/STUB_FIXTURES.marker
+++ /dev/null
@@ -1 +0,0 @@
-This cache contains hand-written stub XML, not real BGG responses. Data resolved from it must not be uploaded.
diff --git a/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml b/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml
deleted file mode 100644
index f3f02bc..0000000
--- a/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=rpgitem_58faea4564.xml b/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=rpgitem_58faea4564.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=rpgitem_58faea4564.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_7c5116c957.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_7c5116c957.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_7c5116c957.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml
+++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml
+++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=rpgitem_8704f88656.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=rpgitem_8704f88656.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=rpgitem_8704f88656.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml
index 7ed9bac..b80efe7 100644
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml
+++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml
@@ -1 +1,9 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=rpgitem_436f8cfac3.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=rpgitem_436f8cfac3.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=rpgitem_436f8cfac3.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=boardgame-2Cboardgamee_a7e88a81de.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=boardgame-2Cboardgamee_a7e88a81de.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=boardgame-2Cboardgamee_a7e88a81de.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=boardgame-2Cboardgamee_a7e88a81de.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=rpgitem_8efe1bd6f0.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=rpgitem_8efe1bd6f0.xml
index 3868c9e..3907bdd 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=rpgitem_8efe1bd6f0.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-GAME-type=rpgitem_8efe1bd6f0.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=boardgame-2Cboardgameexpans_18e95963dd.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=boardgame-2Cboardgameexpans_18e95963dd.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=boardgame-2Cboardgameexpans_18e95963dd.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=boardgame-2Cboardgameexpans_18e95963dd.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=rpgitem_daff8eceef.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=rpgitem_daff8eceef.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-A-SILENT-ROLE-PLAYING-type=rpgitem_daff8eceef.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=boardgame-2Cboardgameexpan_348fc9c865.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=boardgame-2Cboardgameexpan_348fc9c865.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=boardgame-2Cboardgameexpan_348fc9c865.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=rpgitem_82261134d9.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=rpgitem_82261134d9.xml
deleted file mode 100644
index 2988563..0000000
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-3A-SILENT-FALLS-EXPANSION-type=rpgitem_82261134d9.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=boardgame-2Cboardgameexpansion_7f29a69be5.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=boardgame-2Cboardgameexpansion_7f29a69be5.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=boardgame-2Cboardgameexpansion_7f29a69be5.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=boardgame-2Cboardgameexpansion_7f29a69be5.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=rpgitem_088ab34fc2.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=rpgitem_088ab34fc2.xml
index ba791c3..2c955ea 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=rpgitem_088ab34fc2.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-MISSING-type=rpgitem_088ab34fc2.xml
@@ -1 +1,9 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=boardgame-2Cboardgameexpansion_6b1ff7dc27.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=boardgame-2Cboardgameexpansion_6b1ff7dc27.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=boardgame-2Cboardgameexpansion_6b1ff7dc27.xml
+++ b/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=boardgame-2Cboardgameexpansion_6b1ff7dc27.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=rpgitem_f2de3eea31.xml b/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=rpgitem_f2de3eea31.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ALICE-IS-type=rpgitem_f2de3eea31.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml b/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml
deleted file mode 100644
index 0baddd4..0000000
--- a/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=rpgitem_83ec5d7426.xml b/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=rpgitem_83ec5d7426.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=rpgitem_83ec5d7426.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=boardgame-2Cboardgameexpansion_22856aa961.xml b/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=boardgame-2Cboardgameexpansion_22856aa961.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=boardgame-2Cboardgameexpansion_22856aa961.xml
+++ b/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=boardgame-2Cboardgameexpansion_22856aa961.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=rpgitem_288971e44c.xml b/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=rpgitem_288971e44c.xml
index ba791c3..3907bdd 100644
--- a/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=rpgitem_288971e44c.xml
+++ b/tests/fixtures/bgg_cache/search_query=Blorvath-3A-Quest-of-the-Zzyzx-type=rpgitem_288971e44c.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Blorvath-type=boardgame-2Cboardgameexpansion_48feb4349d.xml b/tests/fixtures/bgg_cache/search_query=Blorvath-type=boardgame-2Cboardgameexpansion_48feb4349d.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=Blorvath-type=boardgame-2Cboardgameexpansion_48feb4349d.xml
+++ b/tests/fixtures/bgg_cache/search_query=Blorvath-type=boardgame-2Cboardgameexpansion_48feb4349d.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Blorvath-type=rpgitem_ad250413dc.xml b/tests/fixtures/bgg_cache/search_query=Blorvath-type=rpgitem_ad250413dc.xml
index ba791c3..3907bdd 100644
--- a/tests/fixtures/bgg_cache/search_query=Blorvath-type=rpgitem_ad250413dc.xml
+++ b/tests/fixtures/bgg_cache/search_query=Blorvath-type=rpgitem_ad250413dc.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml b/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml
deleted file mode 100644
index 53de9b0..0000000
--- a/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Britannia-type=rpgitem_78177b4e85.xml b/tests/fixtures/bgg_cache/search_query=Britannia-type=rpgitem_78177b4e85.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Britannia-type=rpgitem_78177b4e85.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml b/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml
deleted file mode 100644
index 66d2d30..0000000
--- a/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=rpgitem_3d56b6309b.xml b/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=rpgitem_3d56b6309b.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=rpgitem_3d56b6309b.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_4292e34c30.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_4292e34c30.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_4292e34c30.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml
+++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml
index ba791c3..9c47559 100644
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml
+++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=rpgitem_05fdc9d88b.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=rpgitem_05fdc9d88b.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=rpgitem_05fdc9d88b.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml
index 0736cc9..f8a26ab 100644
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml
+++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml
@@ -1 +1,562 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=rpgitem_5e9e2b0726.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=rpgitem_5e9e2b0726.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=rpgitem_5e9e2b0726.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml b/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml
deleted file mode 100644
index c7d8760..0000000
--- a/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=rpgitem_14e74aa71f.xml b/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=rpgitem_14e74aa71f.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=rpgitem_14e74aa71f.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=boardgame-2Cboardgameexpansion_d875abc790.xml b/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=boardgame-2Cboardgameexpansion_d875abc790.xml
index 3cb54f8..02f5611 100644
--- a/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=boardgame-2Cboardgameexpansion_d875abc790.xml
+++ b/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=boardgame-2Cboardgameexpansion_d875abc790.xml
@@ -1 +1,13 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=rpgitem_957f2522ae.xml b/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=rpgitem_957f2522ae.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Caf-C3-A9-International-type=rpgitem_957f2522ae.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml b/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml
deleted file mode 100644
index a83a9b8..0000000
--- a/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=rpgitem_04b2bcdf24.xml b/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=rpgitem_04b2bcdf24.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=rpgitem_04b2bcdf24.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Catan-type=boardgame-2Cboardgameexpansion_5be385814d.xml b/tests/fixtures/bgg_cache/search_query=Catan-type=boardgame-2Cboardgameexpansion_5be385814d.xml
index 7343b91..dcf4233 100644
--- a/tests/fixtures/bgg_cache/search_query=Catan-type=boardgame-2Cboardgameexpansion_5be385814d.xml
+++ b/tests/fixtures/bgg_cache/search_query=Catan-type=boardgame-2Cboardgameexpansion_5be385814d.xml
@@ -1 +1,1178 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Catan-type=rpgitem_63fb6e5035.xml b/tests/fixtures/bgg_cache/search_query=Catan-type=rpgitem_63fb6e5035.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Catan-type=rpgitem_63fb6e5035.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Citadels-type=boardgame-2Cboardgameexpansion_9f48c481c4.xml b/tests/fixtures/bgg_cache/search_query=Citadels-type=boardgame-2Cboardgameexpansion_9f48c481c4.xml
index e76b16c..9d45d57 100644
--- a/tests/fixtures/bgg_cache/search_query=Citadels-type=boardgame-2Cboardgameexpansion_9f48c481c4.xml
+++ b/tests/fixtures/bgg_cache/search_query=Citadels-type=boardgame-2Cboardgameexpansion_9f48c481c4.xml
@@ -1 +1,33 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Citadels-type=rpgitem_22dea38263.xml b/tests/fixtures/bgg_cache/search_query=Citadels-type=rpgitem_22dea38263.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Citadels-type=rpgitem_22dea38263.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml b/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml
deleted file mode 100644
index 7fc1341..0000000
--- a/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=rpgitem_48015c5934.xml b/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=rpgitem_48015c5934.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=rpgitem_48015c5934.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=boardgame-2Cboardgameexpansion_f71cb1cc0c.xml b/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=boardgame-2Cboardgameexpansion_f71cb1cc0c.xml
deleted file mode 100644
index 3814e39..0000000
--- a/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=boardgame-2Cboardgameexpansion_f71cb1cc0c.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=rpgitem_95d15d03fd.xml b/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=rpgitem_95d15d03fd.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=DUNGEON-21-type=rpgitem_95d15d03fd.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml b/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml
deleted file mode 100644
index d0f22a6..0000000
--- a/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Diplomacy-type=rpgitem_0747a2387d.xml b/tests/fixtures/bgg_cache/search_query=Diplomacy-type=rpgitem_0747a2387d.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Diplomacy-type=rpgitem_0747a2387d.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml b/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml
deleted file mode 100644
index 3814e39..0000000
--- a/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=rpgitem_3bf546910a.xml b/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=rpgitem_3bf546910a.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=rpgitem_3bf546910a.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml b/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml
deleted file mode 100644
index 9585ee9..0000000
--- a/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=rpgitem_49ed26a640.xml b/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=rpgitem_49ed26a640.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=rpgitem_49ed26a640.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml b/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml
index c930d74..00e851a 100644
--- a/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml
+++ b/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml
@@ -1 +1,25 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=rpgitem_c1e66fb254.xml b/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=rpgitem_c1e66fb254.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=rpgitem_c1e66fb254.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Hebarceos-type=boardgame-2Cboardgameexpansion_b1b7b72de1.xml b/tests/fixtures/bgg_cache/search_query=Hebarceos-type=boardgame-2Cboardgameexpansion_b1b7b72de1.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Hebarceos-type=boardgame-2Cboardgameexpansion_b1b7b72de1.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Hebarceos-type=rpgitem_07740d9a32.xml b/tests/fixtures/bgg_cache/search_query=Hebarceos-type=rpgitem_07740d9a32.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Hebarceos-type=rpgitem_07740d9a32.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml b/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml
deleted file mode 100644
index 8a20847..0000000
--- a/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Herbaceous-type=rpgitem_d78832e3ed.xml b/tests/fixtures/bgg_cache/search_query=Herbaceous-type=rpgitem_d78832e3ed.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Herbaceous-type=rpgitem_d78832e3ed.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml b/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml
deleted file mode 100644
index 4d1cb0c..0000000
--- a/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=rpgitem_7928f17f52.xml b/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=rpgitem_7928f17f52.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=rpgitem_7928f17f52.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml b/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml
deleted file mode 100644
index cf2ba6f..0000000
--- a/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=rpgitem_3550758066.xml b/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=rpgitem_3550758066.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=rpgitem_3550758066.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml b/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml
deleted file mode 100644
index f177ea4..0000000
--- a/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=rpgitem_afb691fd45.xml b/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=rpgitem_afb691fd45.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=rpgitem_afb691fd45.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml b/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml
deleted file mode 100644
index f1c4a55..0000000
--- a/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=ROYALS-type=rpgitem_740855ed66.xml b/tests/fixtures/bgg_cache/search_query=ROYALS-type=rpgitem_740855ed66.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=ROYALS-type=rpgitem_740855ed66.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml b/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml
deleted file mode 100644
index faeec09..0000000
--- a/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SANTORINI-type=rpgitem_b3713fc18f.xml b/tests/fixtures/bgg_cache/search_query=SANTORINI-type=rpgitem_b3713fc18f.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SANTORINI-type=rpgitem_b3713fc18f.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml b/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml
deleted file mode 100644
index a336e78..0000000
--- a/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SCRAWL-type=rpgitem_28917ca749.xml b/tests/fixtures/bgg_cache/search_query=SCRAWL-type=rpgitem_28917ca749.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SCRAWL-type=rpgitem_28917ca749.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml b/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml
deleted file mode 100644
index 28db624..0000000
--- a/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=rpgitem_77cf1f8445.xml b/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=rpgitem_77cf1f8445.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=rpgitem_77cf1f8445.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml b/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml
deleted file mode 100644
index 7b8de8c..0000000
--- a/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=rpgitem_3f9e6315a6.xml b/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=rpgitem_3f9e6315a6.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=rpgitem_3f9e6315a6.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml
index ba791c3..d96c30a 100644
--- a/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml
+++ b/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml
@@ -1 +1,5 @@
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=rpgitem_2ba94ce51c.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=rpgitem_2ba94ce51c.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=rpgitem_2ba94ce51c.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml
deleted file mode 100644
index 9dbaf0f..0000000
--- a/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-type=rpgitem_0a90b76555.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-type=rpgitem_0a90b76555.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=SORCERER-type=rpgitem_0a90b76555.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml
index ba791c3..cbc112e 100644
--- a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml
+++ b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml
@@ -1 +1,5 @@
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=rp_d8afe77786.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=rp_d8afe77786.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=rp_d8afe77786.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml
deleted file mode 100644
index bb68a9d..0000000
--- a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=rpgitem_5fc9118ed9.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=rpgitem_5fc9118ed9.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=rpgitem_5fc9118ed9.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml b/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml
deleted file mode 100644
index e968537..0000000
--- a/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=rpgitem_f01cc4ca29.xml b/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=rpgitem_f01cc4ca29.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=rpgitem_f01cc4ca29.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=boardgame-2Cboardgameexpansion_85d6b5d538.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=boardgame-2Cboardgameexpansion_85d6b5d538.xml
index e99a25e..a03af8e 100644
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=boardgame-2Cboardgameexpansion_85d6b5d538.xml
+++ b/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=boardgame-2Cboardgameexpansion_85d6b5d538.xml
@@ -1 +1,9 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=rpgitem_38f0ad0fff.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=rpgitem_38f0ad0fff.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-3A-European-Expansion-type=rpgitem_38f0ad0fff.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=boardgame-2Cboardgameexpansion_f5cb460ffe.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=boardgame-2Cboardgameexpansion_f5cb460ffe.xml
index e99a25e..a579cce 100644
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=boardgame-2Cboardgameexpansion_f5cb460ffe.xml
+++ b/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=boardgame-2Cboardgameexpansion_f5cb460ffe.xml
@@ -1 +1,17 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=rpgitem_4387722048.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=rpgitem_4387722048.xml
index ba791c3..3907bdd 100644
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=rpgitem_4387722048.xml
+++ b/tests/fixtures/bgg_cache/search_query=Wingspan-Europe-type=rpgitem_4387722048.xml
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-type=boardgame-2Cboardgameexpansion_0316afc400.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-type=boardgame-2Cboardgameexpansion_0316afc400.xml
index e99a25e..a964cf0 100644
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-type=boardgame-2Cboardgameexpansion_0316afc400.xml
+++ b/tests/fixtures/bgg_cache/search_query=Wingspan-type=boardgame-2Cboardgameexpansion_0316afc400.xml
@@ -1 +1,117 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wingspan-type=rpgitem_f93bee11fc.xml b/tests/fixtures/bgg_cache/search_query=Wingspan-type=rpgitem_f93bee11fc.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Wingspan-type=rpgitem_f93bee11fc.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml b/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml
deleted file mode 100644
index a1c3e2e..0000000
--- a/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=Wiz-War-type=rpgitem_3adf0a77c6.xml b/tests/fixtures/bgg_cache/search_query=Wiz-War-type=rpgitem_3adf0a77c6.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=Wiz-War-type=rpgitem_3adf0a77c6.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml b/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml
deleted file mode 100644
index 58285bb..0000000
--- a/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=rpgitem_a3470f199b.xml b/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=rpgitem_a3470f199b.xml
deleted file mode 100644
index ba791c3..0000000
--- a/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=rpgitem_a3470f199b.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml b/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml
deleted file mode 100644
index 9fa319f..0000000
--- a/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=13-2C66056-stats=1_42106f768e.xml b/tests/fixtures/bgg_cache/thing_id=13-2C66056-stats=1_42106f768e.xml
new file mode 100644
index 0000000..3fb8e4d
--- /dev/null
+++ b/tests/fixtures/bgg_cache/thing_id=13-2C66056-stats=1_42106f768e.xml
@@ -0,0 +1,3328 @@
+
+ https://cf.geekdo-images.com/0XODRpReiZBFUffEcqT5-Q__small/img/SNVfF23OQafv3u8xdFolJnMkBoM=/fit-in/200x150/filters:strip_icc()/pic9156909.png
+ https://cf.geekdo-images.com/0XODRpReiZBFUffEcqT5-Q__original/img/oRc0AomWA9ZtFqQDZiZbIyKE1j0=/0x0/filters:format(png)/pic9156909.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ In CATAN (formerly The Settlers of Catan), players try to be the dominant force on the island of Catan by building settlements, cities and roads. On each turn dice are rolled to determine which resources the island produces. Players build structures by 'spending' resources (sheep, wheat, wood, brick and ore) which are represented by the relevant resource cards; each land type, with the exception of the unproductive desert, produces a specific resource: hills produce brick, forests produce wood, mountains produce ore, fields produce wheat, and pastures produce sheep.
+
+Set-up includes randomly placing large hexagonal tiles (each depicting one of the five resource-producing terrain types--or the desert) in a honeycomb shape and surrounding them with water tiles, some of which contain ports of exchange. A number disk, the value of which will correspond to the roll of two 6-sided dice, are placed on each terrain tile. Each player is given two settlements (think: houses) and roads (sticks) which are placed on intersections and borders of the terrain tiles. Players collect a hand of resource cards based on which terrain tiles their last-placed settlement is adjacent to. A robber pawn is placed on the desert tile.
+
+A turn consists of rolling the dice, collecting resource cards based on this dice roll and the position of settlements (or upgraded cities—think: hotels), turning in resource cards (if possible and desired) for improvements, trading cards at a port, possibly playing a development card, or trading resource cards with other players. If the dice roll is a 7, the active player moves the robber to a new terrain tile and steals a resource card from another player who has a settlement adjacent to that tile.
+
+Points are accumulated by building settlements and cities, having the longest road or the largest army (from some of the development cards), and gathering certain development cards that simply award victory points. When a player has gathered 10 points (some of which may be held in secret), s/he announces this and claims the win.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/n5x9eZiQ7Da4SQjB7M41-w__small/img/dGMw2df-4gOwfLCdUeJceBeLCk8=/fit-in/200x150/filters:strip_icc()/pic6877018.jpg
+ https://cf.geekdo-images.com/n5x9eZiQ7Da4SQjB7M41-w__original/img/Y6dJpidB1624ox-QCAdiSVsCnf4=/0x0/filters:format(jpeg)/pic6877018.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The Rivals for Catan is a reimplementation of Catan Card Game.
+
+The Rivals for Catan was released in German in September of 2010, on the 15th anniversary of the original card game. An English edition was released in the fourth quarter of 2010. The designer of the game, Klaus Teuber, has stated that he completely reworked many of the original card game's mechanics to make it easier for newcomers to play the game.
+
+Each player portrays a prince for Catan, developing their individual provinces and competing to build a more successful province than the other. The basic mode of play is similar to the original Catan Card Game, where players expand their provinces by building settlements connected by roads. Players may also build expansions in their settlements that aid them in various ways, or upgrade their settlements to cities to allow more expansions to be built. They build these additions by using resources that they accumulate each turn, which are determined by the roll of a die. Cards are drawn on each turn to replenish the players' hands. The players may also use action cards that directly affect either their own province or their opponent's province.
+
+The Rivals for Catan features a reduced pool of cards, without the more aggressive style of action cards found in the original Catan Card Game. Therefore, all action cards will be able to be used from the beginning of the game unlike in the original card game.
+
+Ways to Play:
+The Introductory Game focuses on the basics of the card game, featuring gameplay that is more appropriate for newcomers. This game is played to 7 victory points and includes 36 Expansion Cards in four stacks. This play style should take beginner players 25 to 30 minutes to play.
+
+Three Theme Games add more rules, expansions, and aggressive cards. These Theme Games may be played individually or combined to play a variant called "The Duel of the Princes." Each Theme Game adds 24 Expansion and Event Cards to the cards from the Introductory Game, which are placed in two stacks separately from the cards from the Introductory Game. When playing a Theme Game, playtime should be around 45 to 60 minutes.
+
+As with the original Catan Card Game, players can also play the Tournament Game, in which each player chooses specific cards to build their deck ahead of time from which they draw from during the game.
+
+Theme:
+The theme of The Rivals for Catan is no longer restricted only to the feudal era of the Middle Ages like the original Catan Card Game. The Introductory Game portrays the very early years of the world of Catan, while each Theme Game takes place in progressively later eras. These eras are known as "The Era of Gold," "The Era of Turmoil," and "The Era of Progress."
+
+Belongs to the Catan Series.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml b/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml
deleted file mode 100644
index 3e6a42a..0000000
--- a/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml b/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml
index ebb23c6..fbf4c39 100644
--- a/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml
+++ b/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml
@@ -1 +1,473 @@
-
\ No newline at end of file
+
+ https://cf.geekdo-images.com/9ROB7NpxefRUmpR9UroQ8w__small/img/XDH667tVl2KjQ6szNjT7ceEmh5E=/fit-in/200x150/filters:strip_icc()/pic87459.jpg
+ https://cf.geekdo-images.com/9ROB7NpxefRUmpR9UroQ8w__original/img/--qlhvNNj8zF9cWLlihdTg0jzmE=/0x0/filters:format(jpeg)/pic87459.jpg
+
+
+
+
+ The use of the word "Advanced" to describe this expansion followed existing Avalon Hill tradition. "Enhanced" is likely more appropriate. Playing with this expansion is no more difficult than playing the base Civilization game. This expansion reworks a few of the original rules, includes a reworked version of Civilization: Expansion Trade Cards Set and adds more civilization advancements to the technology tree.
+
+Included are more civilization advancements (both quantity and type), which give the players new options for advancement, as well as a slightly restructured commodity trading round, which has new resources and disasters to be traded. The most significant aspect of the game is a restructuring of the advancement/victory conditions, which remove the limits on advancement cards. Some claim this makes the strategies more homogeneous while others claim the reverse is true.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/9ROB7NpxefRUmpR9UroQ8w__small/img/XDH667tVl2KjQ6szNjT7ceEmh5E=/fit-in/200x150/filters:strip_icc()/pic87459.jpg
+ https://cf.geekdo-images.com/9ROB7NpxefRUmpR9UroQ8w__original/img/--qlhvNNj8zF9cWLlihdTg0jzmE=/0x0/filters:format(jpeg)/pic87459.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml b/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml
deleted file mode 100644
index 7b06bda..0000000
--- a/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml b/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml
deleted file mode 100644
index 369b103..0000000
--- a/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml b/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml
deleted file mode 100644
index 9d8f086..0000000
--- a/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml b/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml
deleted file mode 100644
index 10952de..0000000
--- a/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml b/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml
index 9d18a1a..8e026ad 100644
--- a/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml
+++ b/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml
@@ -1 +1,550 @@
-
\ No newline at end of file
+
+ https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__small/img/OTL4rEL5eQ-8jJ_JubPwIq9LBIQ=/fit-in/200x150/filters:strip_icc()/pic567384.jpg
+ https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__original/img/JRuDUwwK8S1jG9gZISv_Hwz5Kog=/0x0/filters:format(jpeg)/pic567384.jpg
+
+
+
+
+
+
+ Adapted from the box:
+
+The game is a simulation of events within a conjectural future history in which telekinesis is used to move ships through space. It is played on a map which displays 74 star systems in a three-dimensional "sphere" of space measuring roughly 40 light years in diameter, with Earth's home system at the center. A grid of hexagons printed over the map is used to regulate movement and position of pieces. Pieces' exact locations are not known until they "meet" in the same three-dimensional "hex space".
+
+The pieces in the game represent groups of four interstellar spaceships (StarForces) and space stations (StarGates). Each Player maneuvers his pieces (via Stellar Shifting) to engage those of the enemy. Movement is plotted and executed simultaneously. The game proceeds this way (for a specified number of turns) as the players try to achieve the objectives set forth in the rules. No prior knowledge is required to play the game - just a little ingenuity and common sense.
+
+Battles take place when units are in the same three-dimensional location. In the Basic Game, the attacking Player compares the total variable strengths of the involved units and consults a simple probability table to determine the outcome of each battle. In the Advanced Game, a small tactical maneuver map is used. When enemy forces engage on the main map, they are transferred to the tactical display. Here they move (in three dimensions), attack and defend using a fixed number of action points per tactical turn.
+
+Combat outcomes result in pieces not being destroyed but being "randomised"; usually to a location far from all the action.
+
+
+Part of the StarForce Trilogy box set, along with Outreach and StarSoldier. There are also special rules to use Starsoldier as a tactical game for StarForce.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__small/img/9PYzeERL1pUms7L4hG2WIloVriU=/fit-in/200x150/filters:strip_icc()/pic20984.jpg
+ https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__original/img/GAXZD5DAX6dgChoy-UXXDrAmenQ=/0x0/filters:format(jpeg)/pic20984.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/RQampTopF1fI_dthUB1TDg__small/img/_U4-K5t8K646btzkBAK3D7sP-9s=/fit-in/200x150/filters:strip_icc()/pic56687.jpg
+ https://cf.geekdo-images.com/RQampTopF1fI_dthUB1TDg__original/img/9d3TherAOwjA7MzTkTQHtCY5cxc=/0x0/filters:format(jpeg)/pic56687.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__small/img/OTL4rEL5eQ-8jJ_JubPwIq9LBIQ=/fit-in/200x150/filters:strip_icc()/pic567384.jpg
+ https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__original/img/JRuDUwwK8S1jG9gZISv_Hwz5Kog=/0x0/filters:format(jpeg)/pic567384.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__small/img/9PYzeERL1pUms7L4hG2WIloVriU=/fit-in/200x150/filters:strip_icc()/pic20984.jpg
+ https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__original/img/GAXZD5DAX6dgChoy-UXXDrAmenQ=/0x0/filters:format(jpeg)/pic20984.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/fPWr5Hd4H-PjUcQTtbicNQ__small/img/t7KpLAefJXyV1OX89UG7F1UvC8A=/fit-in/200x150/filters:strip_icc()/pic1220943.jpg
+ https://cf.geekdo-images.com/fPWr5Hd4H-PjUcQTtbicNQ__original/img/RhZT3RK-EScpzeAPzVJbzKz__8o=/0x0/filters:format(jpeg)/pic1220943.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml b/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml
index 8d0a1ef..bc2deb5 100644
--- a/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml
+++ b/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml
@@ -1 +1,537 @@
-
\ No newline at end of file
+
+ https://cf.geekdo-images.com/U4aLOWpOLNtUjQ5BirlGLA__small/img/thPXwIIE3knD9igpLusCdeHVsMI=/fit-in/200x150/filters:strip_icc()/pic806423.jpg
+ https://cf.geekdo-images.com/U4aLOWpOLNtUjQ5BirlGLA__original/img/5m1hrtRgt6lst9tajA4o169D4wA=/0x0/filters:format(jpeg)/pic806423.jpg
+
+
+
+
+ Flat Top is a board wargame of high complexity that covers the battles of the Solomon Seas between the United States and Japan in 1942. It is very well researched and covers all aspects of naval and air combat as it existed in 1942. The system depicts weather, air searches, air combat, surface combat, carrier operations, submarines, air bases, supplies, and much more. The game requires intense planning and searching since movement is covert and the map is huge.
+
+The units are individual ships and submarines with each air point representing three aircraft. Hexes are twenty miles, and each turn represents one hour.
+
+The game includes thirteen hundred counters, 4 maps to create a 44" x 28" map of the South Pacific, four Allied/Japanese operations cards, three player aid cards and two log sheets.
+
+
+ First edition Battle Line has two counter card sheets containing 800 counters.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/h1Z904DrkP4_cCVN8JguHQ__small/img/ICJBK6xRsfyukpLxRUa2ktNRJ4w=/fit-in/200x150/filters:strip_icc()/pic3638352.jpg
+ https://cf.geekdo-images.com/h1Z904DrkP4_cCVN8JguHQ__original/img/vB6K6i7lPPPtOuUNIvFxwcVafQM=/0x0/filters:format(jpeg)/pic3638352.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/1UF2e6YeUTiP0ICTXBQNsg__small/img/-oVo9FdnSFHCk_xTcOikRTV9140=/fit-in/200x150/filters:strip_icc()/pic3316814.jpg
+ https://cf.geekdo-images.com/1UF2e6YeUTiP0ICTXBQNsg__original/img/9iF0xPDylqnVxgxCAca4yPBY9Ps=/0x0/filters:format(jpeg)/pic3316814.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/U4aLOWpOLNtUjQ5BirlGLA__small/img/thPXwIIE3knD9igpLusCdeHVsMI=/fit-in/200x150/filters:strip_icc()/pic806423.jpg
+ https://cf.geekdo-images.com/U4aLOWpOLNtUjQ5BirlGLA__original/img/5m1hrtRgt6lst9tajA4o169D4wA=/0x0/filters:format(jpeg)/pic806423.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml b/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml
deleted file mode 100644
index e30e60b..0000000
--- a/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=266192-versions=1_4904563f7f.xml b/tests/fixtures/bgg_cache/thing_id=266192-versions=1_4904563f7f.xml
index 22f21a2..3fdbd3a 100644
--- a/tests/fixtures/bgg_cache/thing_id=266192-versions=1_4904563f7f.xml
+++ b/tests/fixtures/bgg_cache/thing_id=266192-versions=1_4904563f7f.xml
@@ -1,25 +1,4791 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__small/img/VNToqgS2-pOGU6MuvIkMPKn_y-s=/fit-in/200x150/filters:strip_icc()/pic4458123.jpg
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__original/img/cI782Zis9cT66j2MjSHKJGnFPNw=/0x0/filters:format(jpeg)/pic4458123.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wingspan is a competitive, medium-weight, card-driven, engine-building board game from Stonemaier Games. It's designed by Elizabeth Hargrave and features 180 birds illustrated by Natalia Rojas and Ana Maria Martinez.
+
+You are bird enthusiasts—researchers, bird watchers, ornithologists, and collectors—seeking to discover and attract the best birds to your network of wildlife preserves. Each bird extends a chain of powerful combinations in one of your habitats (actions). These habitats focus on several key aspects of growth:
+
+
+ Gain food tokens via custom dice in a birdfeeder dice tower
+ Lay eggs using egg miniatures in a variety of colors
+ Draw from hundreds of unique bird cards and play them
+
+
+The winner is the player with the most points after 4 rounds.
+
+—description from the publisher
+
+From the 7th printing on, the base game box includes Wingspan: Swift-Start Promo Pack.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/DU3QyL46wIv4JNFGzImgQw__small/img/viEgyaKn2TAO550msdZOoe8Pu9Q=/fit-in/200x150/filters:strip_icc()/pic5279037.jpg
+ https://cf.geekdo-images.com/DU3QyL46wIv4JNFGzImgQw__original/img/OGQJQa4lhNcyNXMbfJy37uwXBjk=/0x0/filters:format(jpeg)/pic5279037.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/YFdhwcBDDYltRF9A9lI5gQ__small/img/TfKFMcJ7cqMekLun9_RrqWWfI2E=/fit-in/200x150/filters:strip_icc()/pic6581724.png
+ https://cf.geekdo-images.com/YFdhwcBDDYltRF9A9lI5gQ__original/img/sikjbpY9miYkXBJk3u-ohxc-4Gs=/0x0/filters:format(png)/pic6581724.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/w8IX3z4b2SxesfNbwRe9-A__small/img/I6b6mwH8YWOW8m-nTXoCZEFng9w=/fit-in/200x150/filters:strip_icc()/pic6521799.png
+ https://cf.geekdo-images.com/w8IX3z4b2SxesfNbwRe9-A__original/img/kVLFfawjW9hAFaT9mduEAtuhclA=/0x0/filters:format(png)/pic6521799.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__small/img/qTpNYm01lP97PTs__K60dP9wgOA=/fit-in/200x150/filters:strip_icc()/pic4799378.jpg
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__original/img/y6d1xBYI6Bv17bJQriYn0F0Btig=/0x0/filters:format(jpeg)/pic4799378.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__small/img/qTpNYm01lP97PTs__K60dP9wgOA=/fit-in/200x150/filters:strip_icc()/pic4799378.jpg
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__original/img/y6d1xBYI6Bv17bJQriYn0F0Btig=/0x0/filters:format(jpeg)/pic4799378.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__small/img/qTpNYm01lP97PTs__K60dP9wgOA=/fit-in/200x150/filters:strip_icc()/pic4799378.jpg
+ https://cf.geekdo-images.com/7eS4_oQ2kQtg75s9DAfFMg__original/img/y6d1xBYI6Bv17bJQriYn0F0Btig=/0x0/filters:format(jpeg)/pic4799378.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/N6hmz_i701n6tW4MM5_-Ng__small/img/ywy8p3t7NLBM4YzL7UP8W3BAbZM=/fit-in/200x150/filters:strip_icc()/pic5728079.jpg
+ https://cf.geekdo-images.com/N6hmz_i701n6tW4MM5_-Ng__original/img/acJ2923KhxL_taSNjqLeI3Q6wqc=/0x0/filters:format(jpeg)/pic5728079.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/u5OTOBspRC87SkA2kO3XHg__small/img/0AV-WFct47TBOlxR8A4La15xaNw=/fit-in/200x150/filters:strip_icc()/pic8311894.jpg
+ https://cf.geekdo-images.com/u5OTOBspRC87SkA2kO3XHg__original/img/LpIJzCDY7Td6-DiKy89bAOS2TtU=/0x0/filters:format(jpeg)/pic8311894.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/Pnt1EXejpsriVH9X0dIsEA__small/img/qrwBh5j2TMiJrRK_vYGWOFr1Fag=/fit-in/200x150/filters:strip_icc()/pic5847791.jpg
+ https://cf.geekdo-images.com/Pnt1EXejpsriVH9X0dIsEA__original/img/ZNuFvhFuIcjaGGodO4q_np5OP18=/0x0/filters:format(jpeg)/pic5847791.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__small/img/VNToqgS2-pOGU6MuvIkMPKn_y-s=/fit-in/200x150/filters:strip_icc()/pic4458123.jpg
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__original/img/cI782Zis9cT66j2MjSHKJGnFPNw=/0x0/filters:format(jpeg)/pic4458123.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__small/img/VNToqgS2-pOGU6MuvIkMPKn_y-s=/fit-in/200x150/filters:strip_icc()/pic4458123.jpg
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__original/img/cI782Zis9cT66j2MjSHKJGnFPNw=/0x0/filters:format(jpeg)/pic4458123.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__small/img/VNToqgS2-pOGU6MuvIkMPKn_y-s=/fit-in/200x150/filters:strip_icc()/pic4458123.jpg
+ https://cf.geekdo-images.com/yLZJCVLlIx4c7eJEWUNJ7w__original/img/cI782Zis9cT66j2MjSHKJGnFPNw=/0x0/filters:format(jpeg)/pic4458123.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/a2p0qmHQOLXZ4XP2Oi-HeA__small/img/V81DVhfNllqnB8cArAKavLFm0GQ=/fit-in/200x150/filters:strip_icc()/pic6135481.jpg
+ https://cf.geekdo-images.com/a2p0qmHQOLXZ4XP2Oi-HeA__original/img/BVmlX3u-Ix5sQZiSfFLyODVKnP4=/0x0/filters:format(jpeg)/pic6135481.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/x3w46AsSmJtKhccAPVPFfg__small/img/ZveQUxBYDkSnAJk0iAYnziWTscE=/fit-in/200x150/filters:strip_icc()/pic5579454.jpg
+ https://cf.geekdo-images.com/x3w46AsSmJtKhccAPVPFfg__original/img/E4UBLrQBHjmzGQa8Flm00AUIMDE=/0x0/filters:format(jpeg)/pic5579454.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/JjN5KOHRiqLF2mtINv1hvw__small/img/vutVZWSKiWeKf91CzZB_WRMp4UU=/fit-in/200x150/filters:strip_icc()/pic4526373.jpg
+ https://cf.geekdo-images.com/JjN5KOHRiqLF2mtINv1hvw__original/img/yMYPcHgdmlfNp8xr_sr43pkvXRI=/0x0/filters:format(jpeg)/pic4526373.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/-0pDaOlr0nrw5Y4BTObqcQ__small/img/wz5Eq8CvSOzsKQuWqZeq_yJrJgg=/fit-in/200x150/filters:strip_icc()/pic8280885.jpg
+ https://cf.geekdo-images.com/-0pDaOlr0nrw5Y4BTObqcQ__original/img/YxsjLN-9E5ptb2Eik8A_kmQLJP8=/0x0/filters:format(jpeg)/pic8280885.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/Ng8-mJSA16uZ42ht6wCc9Q__small/img/Pg8yOUfzxpjY__H7MsIc3eo80y8=/fit-in/200x150/filters:strip_icc()/pic4510226.jpg
+ https://cf.geekdo-images.com/Ng8-mJSA16uZ42ht6wCc9Q__original/img/p0DKFtle1qQvpzel3obes08Y7v0=/0x0/filters:format(jpeg)/pic4510226.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/joGavl9pH3D46OXl0LLggQ__small/img/tpZ0IZLwZ-Vj3j7svpQsvwzInlk=/fit-in/200x150/filters:strip_icc()/pic7203599.jpg
+ https://cf.geekdo-images.com/joGavl9pH3D46OXl0LLggQ__original/img/_AZqVe5vzIhMqfTXC_LZCMk2vnA=/0x0/filters:format(jpeg)/pic7203599.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/WV872b2Im2V-R29YFiNxXw__small/img/wo3lZEPPCf4RzNMUjMwNt8XgAtU=/fit-in/200x150/filters:strip_icc()/pic4962803.jpg
+ https://cf.geekdo-images.com/WV872b2Im2V-R29YFiNxXw__original/img/FAyjLBlMbURSaj8sM9O5XwqdEfQ=/0x0/filters:format(jpeg)/pic4962803.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/7AehIUmhh9bVh-Wi9uqRzg__small/img/Cy3DOP9EPuqyKG9k8Ebz_QYSsG4=/fit-in/200x150/filters:strip_icc()/pic5031480.jpg
+ https://cf.geekdo-images.com/7AehIUmhh9bVh-Wi9uqRzg__original/img/fBu1vCTkJ5Pl3IWPNwMHMsrDPHc=/0x0/filters:format(jpeg)/pic5031480.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/nr07dZdpSE8v74rlmTUjSA__small/img/BcODhAGtMDgDZEk5rcixKLPEOvo=/fit-in/200x150/filters:strip_icc()/pic5739226.jpg
+ https://cf.geekdo-images.com/nr07dZdpSE8v74rlmTUjSA__original/img/IsBC3KPgQehbvUB0rMHYfroprF0=/0x0/filters:format(jpeg)/pic5739226.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/pvYVuF0dKUhprxsk48rZVg__small/img/EYICRApNp9SkL_wx7Y4LQRij98g=/fit-in/200x150/filters:strip_icc()/pic4619957.png
+ https://cf.geekdo-images.com/pvYVuF0dKUhprxsk48rZVg__original/img/KW73GQWIqEEC999RA8tIh6oNAtI=/0x0/filters:format(png)/pic4619957.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/u8S3Go7RKfjZ3_5rcL6IYw__small/img/brD4nRpK6Dnn2VO1gTcVvpXUIAY=/fit-in/200x150/filters:strip_icc()/pic5735580.jpg
+ https://cf.geekdo-images.com/u8S3Go7RKfjZ3_5rcL6IYw__original/img/gPzgUvwgAbfZ9X1_QeeZpOSrKzs=/0x0/filters:format(jpeg)/pic5735580.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/ATBmIMCnmiJO3A9AHB6qhA__small/img/Cu8F6k7rNQBfx8xfomBzYCxoU9Y=/fit-in/200x150/filters:strip_icc()/pic9050401.png
+ https://cf.geekdo-images.com/ATBmIMCnmiJO3A9AHB6qhA__original/img/EnrHp3g8fHnVGkd6If-SbRLjNzg=/0x0/filters:format(png)/pic9050401.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/uHHB4-EMwh-_dt4XtqlVog__small/img/bt6uMZnuNnQvqjfI8pX2OS0uOK8=/fit-in/200x150/filters:strip_icc()/pic5786620.jpg
+ https://cf.geekdo-images.com/uHHB4-EMwh-_dt4XtqlVog__original/img/SutYQoX8WXJReK-EkWjWyDfsUMg=/0x0/filters:format(jpeg)/pic5786620.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/aSrLzouX3R0CaR7ngNqcvw__small/img/L5ZCG5Xm5E7XmsGpavcChgQFO38=/fit-in/200x150/filters:strip_icc()/pic6464139.png
+ https://cf.geekdo-images.com/aSrLzouX3R0CaR7ngNqcvw__original/img/3EbkT1wYDzo2mVKK5td6OTa0O1c=/0x0/filters:format(png)/pic6464139.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/whZd5N84b2Kk8Nk02cc-Lw__small/img/b-7JM80ZPNrDGsfUvJia7LRoS9A=/fit-in/200x150/filters:strip_icc()/pic6135483.jpg
+ https://cf.geekdo-images.com/whZd5N84b2Kk8Nk02cc-Lw__original/img/pHOhlFt_BlpyI8V1W3i4QRPQJ0c=/0x0/filters:format(jpeg)/pic6135483.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/QqYDqtz-GuCzFvBA5SHnKw__small/img/X2MrvLWLgv_ctdhda1uI_T65iYc=/fit-in/200x150/filters:strip_icc()/pic6135482.jpg
+ https://cf.geekdo-images.com/QqYDqtz-GuCzFvBA5SHnKw__original/img/txakrNXEtgEjzlqa23zs0R0-0Cs=/0x0/filters:format(jpeg)/pic6135482.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/4GeZT-ixvQsjcqBBYPxMpw__small/img/Tp538M_-qOeg7My3Bqs4tMEJVyA=/fit-in/200x150/filters:strip_icc()/pic6276198.png
+ https://cf.geekdo-images.com/4GeZT-ixvQsjcqBBYPxMpw__original/img/YdQRo4exYDwYjfG4cdrvbb-AkzE=/0x0/filters:format(png)/pic6276198.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/YsOi9t9cmungXzNeEs5UdA__small/img/HQHMsGXztx7CeL4LTgzxh0d_7fs=/fit-in/200x150/filters:strip_icc()/pic9426034.jpg
+ https://cf.geekdo-images.com/YsOi9t9cmungXzNeEs5UdA__original/img/OqAIQspbnQcQjL5gSRnbMJUagOs=/0x0/filters:format(jpeg)/pic9426034.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/nxyQVEybJku_EkLZD9uCjQ__small/img/vT9yA-N_pnriIaURwml0mMdFJwQ=/fit-in/200x150/filters:strip_icc()/pic8572352.jpg
+ https://cf.geekdo-images.com/nxyQVEybJku_EkLZD9uCjQ__original/img/uE4hwND29SkxLQu196kgkVFY_xs=/0x0/filters:format(jpeg)/pic8572352.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/AWNt83LN-WAUZhnYHcXrBA__small/img/NzQrQHaa0vQvUEt5Bl1tk6nZ5bc=/fit-in/200x150/filters:strip_icc()/pic5076501.jpg
+ https://cf.geekdo-images.com/AWNt83LN-WAUZhnYHcXrBA__original/img/j_bvliOurMTyc5XSi_hFcV-aPjU=/0x0/filters:format(jpeg)/pic5076501.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/UJwAleHINmtfsaW6NPrBRQ__small/img/AKRGTdYrponMLsIlT-JS0ICL29k=/fit-in/200x150/filters:strip_icc()/pic7160325.jpg
+ https://cf.geekdo-images.com/UJwAleHINmtfsaW6NPrBRQ__original/img/Eioax1ltx0nfnafGfEnEs-HMlew=/0x0/filters:format(jpeg)/pic7160325.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/hC8kPIMubW1IWYOR52cHlA__small/img/cTDUHgZLJb6k0RhFdx9WHeLTwNs=/fit-in/200x150/filters:strip_icc()/pic9623467.jpg
+ https://cf.geekdo-images.com/hC8kPIMubW1IWYOR52cHlA__original/img/8tYZUwv3rArnUfbVwMvlKu3VRkk=/0x0/filters:format(jpeg)/pic9623467.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/espdRedYtOEvoTU28dTetw__small/img/TZ9PGEqeFsqGnpKp0S3MlgJ7LNo=/fit-in/200x150/filters:strip_icc()/pic6427209.jpg
+ https://cf.geekdo-images.com/espdRedYtOEvoTU28dTetw__original/img/h9JzXNEFll3exL2xFXvkwtJwTn8=/0x0/filters:format(jpeg)/pic6427209.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/83cLqB5YuQmzGw420LF0pg__small/img/fnV-a_EBwaMtVvYBFhsZqJoGV2c=/fit-in/200x150/filters:strip_icc()/pic4744955.jpg
+ https://cf.geekdo-images.com/83cLqB5YuQmzGw420LF0pg__original/img/4L3rl0RkBvPIOZhpYOnGJlsw844=/0x0/filters:format(jpeg)/pic4744955.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/mqmNPUNOT-KmVC5XzHqgiA__small/img/U-Z1b7Sku5TDoEftSABt2jJDeJE=/fit-in/200x150/filters:strip_icc()/pic6974486.jpg
+ https://cf.geekdo-images.com/mqmNPUNOT-KmVC5XzHqgiA__original/img/r6IsXd9T05ZtnaJtiNBvdr4J3ec=/0x0/filters:format(jpeg)/pic6974486.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/mqmNPUNOT-KmVC5XzHqgiA__small/img/U-Z1b7Sku5TDoEftSABt2jJDeJE=/fit-in/200x150/filters:strip_icc()/pic6974486.jpg
+ https://cf.geekdo-images.com/mqmNPUNOT-KmVC5XzHqgiA__original/img/r6IsXd9T05ZtnaJtiNBvdr4J3ec=/0x0/filters:format(jpeg)/pic6974486.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/9qjaaP9D-G6avUMVTUfzfg__small/img/vOAjhGECNK8O3Kq5L6PWe8hqEa0=/fit-in/200x150/filters:strip_icc()/pic5203273.jpg
+ https://cf.geekdo-images.com/9qjaaP9D-G6avUMVTUfzfg__original/img/7wAdQ6zf29qjPY2llftPbZ66sWE=/0x0/filters:format(jpeg)/pic5203273.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/QRQZRK_DhSCNrHNKrWTHjw__small/img/pRyGg7KWGyMAeNtzSXvmXKWbKMA=/fit-in/200x150/filters:strip_icc()/pic5532242.jpg
+ https://cf.geekdo-images.com/QRQZRK_DhSCNrHNKrWTHjw__original/img/suQvkrt7mHKF35d389PYwWjLktU=/0x0/filters:format(jpeg)/pic5532242.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/fJlGBHYQyKAZftK3ZNse5A__small/img/UpDN1wyXGLLzeXLhp76xsKQ3lEM=/fit-in/200x150/filters:strip_icc()/pic9489987.png
+ https://cf.geekdo-images.com/fJlGBHYQyKAZftK3ZNse5A__original/img/RVYGnYAierXabUI-tj8DPnhR8Z4=/0x0/filters:format(png)/pic9489987.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/btv61TRDF4j8xXoJmCeCYw__small/img/MJ9hPqSCU5Rgrs17rwEBhlN0UdE=/fit-in/200x150/filters:strip_icc()/pic5531710.png
+ https://cf.geekdo-images.com/btv61TRDF4j8xXoJmCeCYw__original/img/B7RtYSLlbq0E6EDcvGm7FFcPvdI=/0x0/filters:format(png)/pic5531710.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml b/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml
deleted file mode 100644
index 64be42c..0000000
--- a/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml b/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml
deleted file mode 100644
index ee33c40..0000000
--- a/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml b/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml
deleted file mode 100644
index 66a1c13..0000000
--- a/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml b/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml
index 7610e3d..fcd21d5 100644
--- a/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml
+++ b/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml
@@ -1 +1,707 @@
-
\ No newline at end of file
+
+ https://cf.geekdo-images.com/NpauF7CJudER5H5nj-z-gA__small/img/Vo85InhIcQUg1myZBiHCL22uu8A=/fit-in/200x150/filters:strip_icc()/pic10078.jpg
+ https://cf.geekdo-images.com/NpauF7CJudER5H5nj-z-gA__original/img/eGfEPINMJA_0pAKWAYyjJaXmaQo=/0x0/filters:format(jpeg)/pic10078.jpg
+
+
+
+
+
+
+
+
+ Sorcerer is a fantasy wargame. Each player has an army consisting of Sorcerers, human infantry, and magical units (trolls, demons, and dragons). Sorcerers specialize in types of magic represented by 7 different colors. Sorcerer adds a twist to the old "combat differential" system (attack strength minus defense strength) by adding a circular system of combat bonuses based upon what colors of magic are attacking each other; Blue/Green/Yellow/Grey/Orange/Red/Purple with each color having a strong advantage over it's neighbor to the right (with Purple circling around to have power over Blue) and a disadvantage against it's neighbor to the left, with lessening combat bonuses the further away the color is from itself. Combat bonuses are also given based on map position as the hexes alternate colors of magic instead of representing physical terrain. Attacking from one's own color is good.
+
+Several different scenarios are included in the rulebook that range from 1 to 6 players.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/NpauF7CJudER5H5nj-z-gA__small/img/Vo85InhIcQUg1myZBiHCL22uu8A=/fit-in/200x150/filters:strip_icc()/pic10078.jpg
+ https://cf.geekdo-images.com/NpauF7CJudER5H5nj-z-gA__original/img/eGfEPINMJA_0pAKWAYyjJaXmaQo=/0x0/filters:format(jpeg)/pic10078.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/FDBZTggGOpwHI8w-85bmtg__small/img/-gErHFk_f_I1VCtPATCfFnUXwzg=/fit-in/200x150/filters:strip_icc()/pic162215.jpg
+ https://cf.geekdo-images.com/FDBZTggGOpwHI8w-85bmtg__original/img/SmLq9Ek_eQQY22d9RR1KMVzvZrs=/0x0/filters:format(jpeg)/pic162215.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/6PzQJaC0yM57G1BqsIyWDA__small/img/dToTgfcoYlMXtY3WQIAdRoV92Cw=/fit-in/200x150/filters:strip_icc()/pic1220937.jpg
+ https://cf.geekdo-images.com/6PzQJaC0yM57G1BqsIyWDA__original/img/Aka747_k1gwm3uMO175vJwVe9NE=/0x0/filters:format(jpeg)/pic1220937.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/5jjVx3HxQGYOedpJCO0M2w__small/img/A26lvJ3YzHDj6ORPsoDYs-E1Hb8=/fit-in/200x150/filters:strip_icc()/pic361569.jpg
+ https://cf.geekdo-images.com/5jjVx3HxQGYOedpJCO0M2w__original/img/FaQ0icl0S8FgMg6ZQxVpr5xNPgA=/0x0/filters:format(jpeg)/pic361569.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/FDBZTggGOpwHI8w-85bmtg__small/img/-gErHFk_f_I1VCtPATCfFnUXwzg=/fit-in/200x150/filters:strip_icc()/pic162215.jpg
+ https://cf.geekdo-images.com/FDBZTggGOpwHI8w-85bmtg__original/img/SmLq9Ek_eQQY22d9RR1KMVzvZrs=/0x0/filters:format(jpeg)/pic162215.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml b/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml
deleted file mode 100644
index 4b9cb69..0000000
--- a/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=400001-versions=1_6c87ca2e4a.xml b/tests/fixtures/bgg_cache/thing_id=400001-versions=1_6c87ca2e4a.xml
deleted file mode 100644
index ebee33f..0000000
--- a/tests/fixtures/bgg_cache/thing_id=400001-versions=1_6c87ca2e4a.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=400002-versions=1_a82fe6afff.xml b/tests/fixtures/bgg_cache/thing_id=400002-versions=1_a82fe6afff.xml
deleted file mode 100644
index 24e2613..0000000
--- a/tests/fixtures/bgg_cache/thing_id=400002-versions=1_a82fe6afff.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=478-2C205398-stats=1_9bd49e518b.xml b/tests/fixtures/bgg_cache/thing_id=478-2C205398-stats=1_9bd49e518b.xml
index bbc07d7..edae150 100644
--- a/tests/fixtures/bgg_cache/thing_id=478-2C205398-stats=1_9bd49e518b.xml
+++ b/tests/fixtures/bgg_cache/thing_id=478-2C205398-stats=1_9bd49e518b.xml
@@ -1,14 +1,1544 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ https://cf.geekdo-images.com/shXqRK7Sfsp-jCLwoN3kqw__small/img/Y_o8GdhShAWME_ZH2c7yTxHJIWk=/fit-in/200x150/filters:strip_icc()/pic636868.jpg
+ https://cf.geekdo-images.com/shXqRK7Sfsp-jCLwoN3kqw__original/img/G5HKV77V6Q62qaArIHGRLjMnvzY=/0x0/filters:format(jpeg)/pic636868.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ In Citadels, players take on new roles each round to represent characters they hire in order to help them acquire gold and erect buildings. The game ends at the close of a round in which a player erects his/her eighth building. Players then tally their points, and the player with the highest score wins.
+
+Players start with a number of building cards in their hand; buildings come in five colors, with the purple buildings typically having a special ability and the other colored buildings providing a benefit when you play particular characters. At the start of each round, the player who was king the previous round discards one of the eight character cards at random, chooses one, then passes the cards to the next player, etc. until each player has secretly chosen a character. Each character has a special ability, and the usefulness of any character depends upon your situation, and that of your opponents. The characters then carry out their actions in numerical order: the assassin eliminating another character for the round, the thief stealing all gold from another character, the wizard swapping building cards with another player, the warlord optionally destroys a building in play, and so on.
+
+On a turn, a player earns two or more gold (or draws two building cards then discards one), then optionally constructs one building (or up to three if playing the architect this round). Buildings cost gold equal to the number of symbols on them, and each building is worth a certain number of points. In addition to points from buildings, at the end of the game a player scores bonus points for having eight buildings or buildings of all five colors.
+
+The expansion Citadels: The Dark City was initially released as a separate item, but the second edition of the game from Hans im Glück (packaged in a tin box) and the third edition from Fantasy Flight Games included this expansion and can be recognized by its rectangular box (not square). With Dark City, Citadels supports a maximum of eight players.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/sHd0jkZZLDgixHjAXtn7kA__small/img/HB0Z5D7uwBjf1lCCPjMck-5VP9A=/fit-in/200x150/filters:strip_icc()/pic3119514.jpg
+ https://cf.geekdo-images.com/sHd0jkZZLDgixHjAXtn7kA__original/img/9n76iqzSN06hlbX4DuuPD6fSkHQ=/0x0/filters:format(jpeg)/pic3119514.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ In Citadels, players take on new roles each round to represent characters they hire in order to help them acquire gold and erect buildings. The game ends at the close of a round in which a player erects their seventh building. Players then tally their points, and the player with the highest score wins.
+
+Players start the game with a number of building cards in their hand; buildings come in five colors, with the purple buildings typically having a special ability and the other colored buildings providing a benefit when you play particular characters. At the start of each round, the player who was king the previous round discards one of the eight character cards at random, chooses one, then passes the cards to the next player, etc. until each player has secretly chosen a character. Each character has a special ability, and the usefulness of any character depends upon your situation, and that of your opponents. The characters then carry out their actions in numerical order: the assassin eliminating another character for the round, the thief stealing all gold from another character, the wizard swapping building cards with another player, the warlord optionally destroys a building in play, and so on.
+
+On a turn, a player earns two or more gold (or draws two building cards then discards one), then optionally constructs one building (or up to three if playing the architect this round). Buildings cost gold equal to the number of symbols on them, and each building is worth a certain number of points. In addition to points from buildings, at the end of the game a player scores bonus points for having eight buildings or buildings of all five colors.
+
+The 2016 edition of Citadels includes twenty-seven characters — eight from the original Citadels, ten from the Dark City expansion, and nine new ones — along with thirty unique building districts, and the rulebook includes six preset lists of characters and districts beyond the starter list, each crafted to encourage a different style and intensity of gameplay.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml b/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml
deleted file mode 100644
index 4e19eaf..0000000
--- a/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml b/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml
index 3565a0d..7ce25ca 100644
--- a/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml
+++ b/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml
@@ -1 +1,1401 @@
-
\ No newline at end of file
+
+ https://cf.geekdo-images.com/tUdVpt5daNITDrLXqN931Q__small/img/AI7xWgZxUCdXZHPH5WXCXWSAKUI=/fit-in/200x150/filters:strip_icc()/pic114473.jpg
+ https://cf.geekdo-images.com/tUdVpt5daNITDrLXqN931Q__original/img/121amP5yjflTHIFW017EGPe5Rjk=/0x0/filters:format(jpeg)/pic114473.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+ Civilization is a game of skill for 2 to 7 players. It covers the development of ancient civilizations from the invention of agriculture c. 8000 B.C. to the emergence of Rome around the middle of the third century B.C. Each player leads a nation of peoples over a map board of the Eastern Mediterranean and Near East as they attempt to carve a niche for themselves and their culture.
+
+Although battles and territorial strategy are important, this is not a war game because it is not won by battle or conquest. Instead, the object of play is to gain a level of overall advancement involving cultural, economic, and political factors so that such conflicts that do arise are a result of rivalry and land shortage rather than a desire to eliminate other players. Nomad and farmer, warrior and merchant, artisan and citizen all have an essential part to play in the development of civilization. It is the player who most effectively changes emphasis between these various outlooks who will achieve the best balance and win.
+
+(from the Introduction to the Avalon Hill edition rulebook)
+
+This game has a huge following and is widely regarded as one of the best games about ancient civilizations. Each player takes on the role of leader of an ancient civilization, such as the Illyrians or Babylonians. Your task is to guide your people through the ages by expanding your empire and using its proceeds to finance new technological advances, such as Literacy, Metalworking, or Law. The advancements help your civilization better cope with its problems as well as help bring new advancements.
+
+Civilization is widely thought to be the first game ever to incorporate a "technology tree," allowing players to gain certain items and abilities only after particular other items were obtained. This influential mechanism has been adopted by countless other board games, card games, and computer games.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/YnRVKSq3NrLKVGPNzcYvqg__small/img/CUSJ06HO4-802yb7VSq_MgpOSpE=/fit-in/200x150/filters:strip_icc()/pic374847.jpg
+ https://cf.geekdo-images.com/YnRVKSq3NrLKVGPNzcYvqg__original/img/DVfIjAcXRotFftj6yPOc7KKYXNA=/0x0/filters:format(jpeg)/pic374847.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/tUdVpt5daNITDrLXqN931Q__small/img/AI7xWgZxUCdXZHPH5WXCXWSAKUI=/fit-in/200x150/filters:strip_icc()/pic114473.jpg
+ https://cf.geekdo-images.com/tUdVpt5daNITDrLXqN931Q__original/img/121amP5yjflTHIFW017EGPe5Rjk=/0x0/filters:format(jpeg)/pic114473.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/R-VdJrpcD-XQtOHTU54DpQ__small/img/7_HXU37q0wZiKM-VWVxTwMTOLKk=/fit-in/200x150/filters:strip_icc()/pic1020595.jpg
+ https://cf.geekdo-images.com/R-VdJrpcD-XQtOHTU54DpQ__original/img/gI4hB4eY7vu8Is615PRjGBNG4is=/0x0/filters:format(jpeg)/pic1020595.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/zEminRfeYQmnvM9eMV1Wyw__small/img/L6GCoByPwMm-KunJK_alLcBRIjs=/fit-in/200x150/filters:strip_icc()/pic4457817.jpg
+ https://cf.geekdo-images.com/zEminRfeYQmnvM9eMV1Wyw__original/img/B_jmfYl_UhY4LrOMBK7GMyfl_hE=/0x0/filters:format(jpeg)/pic4457817.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/aJHOsppklwIXovhoGwEuAA__small/img/XIPlcUDY3363I-Jt8IP5OTXX_vQ=/fit-in/200x150/filters:strip_icc()/pic238631.jpg
+ https://cf.geekdo-images.com/aJHOsppklwIXovhoGwEuAA__original/img/5fz9rJwh-jDYpJBmJoJGJt1RyqE=/0x0/filters:format(jpeg)/pic238631.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/1zGIlIl3k5dKGEdNik6Q9Q__small/img/607f0w9cjvMTxtWzrdts7hs1AFA=/fit-in/200x150/filters:strip_icc()/pic1715239.jpg
+ https://cf.geekdo-images.com/1zGIlIl3k5dKGEdNik6Q9Q__original/img/FWPoUaXDZW2uqWXb0midiaUpMb4=/0x0/filters:format(jpeg)/pic1715239.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/9J852lHEw0wbiJudNCv0pQ__small/img/xXTlAt67JRooZ73O7_6vbjjhjHk=/fit-in/200x150/filters:strip_icc()/pic48837.jpg
+ https://cf.geekdo-images.com/9J852lHEw0wbiJudNCv0pQ__original/img/qMFVL518fBSTQN78aQ_koFCXXlU=/0x0/filters:format(jpeg)/pic48837.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/JHYS4FrA5HRrqz1Y6-RY7w__small/img/NmeCS7LE2EwVUYDPkHDlDkPM75o=/fit-in/200x150/filters:strip_icc()/pic62839.jpg
+ https://cf.geekdo-images.com/JHYS4FrA5HRrqz1Y6-RY7w__original/img/T7yJDtvYwlFdOOQ6UQOhhAaS4cA=/0x0/filters:format(jpeg)/pic62839.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__small/img/fKk_2yW28nhsnHw6Pp1FYIWIXws=/fit-in/200x150/filters:strip_icc()/pic158559.jpg
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__original/img/PnHxIw46htmx_ldUPphFczleXhY=/0x0/filters:format(jpeg)/pic158559.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/jSnYrGQeBClcliERGfzKFg__small/img/xNbbQ6zqCHO6OWYQsv5WX_vU1xo=/fit-in/200x150/filters:strip_icc()/pic2001664.jpg
+ https://cf.geekdo-images.com/jSnYrGQeBClcliERGfzKFg__original/img/WROv5B6wK3q-QoaWBM9m6pblN4g=/0x0/filters:format(jpeg)/pic2001664.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__small/img/fKk_2yW28nhsnHw6Pp1FYIWIXws=/fit-in/200x150/filters:strip_icc()/pic158559.jpg
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__original/img/PnHxIw46htmx_ldUPphFczleXhY=/0x0/filters:format(jpeg)/pic158559.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__small/img/fKk_2yW28nhsnHw6Pp1FYIWIXws=/fit-in/200x150/filters:strip_icc()/pic158559.jpg
+ https://cf.geekdo-images.com/R22TvjAW9iXWBz9c_EfHZQ__original/img/PnHxIw46htmx_ldUPphFczleXhY=/0x0/filters:format(jpeg)/pic158559.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/test_resolve.py b/tests/test_resolve.py
index 6b43408..6ad27ec 100644
--- a/tests/test_resolve.py
+++ b/tests/test_resolve.py
@@ -58,18 +58,18 @@ def rows_by_title(client) -> dict[str, object]:
def test_catan_auto_matches_base_game(rows_by_title):
row = rows_by_title["Catan"]
- assert (row.match_status, row.bgg_id, row.bgg_name) == ("auto", 13, "CATAN")
+ assert (row.match_status, row.bgg_id, row.bgg_name) == ("auto", 13, "Catan")
assert row.version_status == "version_unknown" # no cues -> never guess
def test_wingspan_auto_with_version_from_cues(rows_by_title):
row = rows_by_title["Wingspan"]
assert (row.match_status, row.bgg_id) == ("auto", 266192)
- # cues: Stonemaier + 2019 + English -> the first edition, not the
- # 2020 printing (score 5 vs 3) and not the German edition
- assert row.version_status == "version_auto"
- assert row.version_id == 465063
- assert row.version_name == "English first edition"
+ # Stonemaier + 2019 + English narrows 46 real versions to a few
+ # English printings — several plausible, so review decides; the 2019
+ # first printing must be on the ballot
+ assert row.version_status == "version_ambiguous"
+ assert 433233 in {v["version_id"] for v in row.version_candidates}
def test_expansion_matches_expansion_not_base(rows_by_title):
@@ -87,7 +87,7 @@ def test_wingspan_europe_spine_never_matches_base(rows_by_title):
def test_accented_title_resolves(rows_by_title):
row = rows_by_title["Café International"]
- assert (row.match_status, row.bgg_id) == ("auto", 373)
+ assert (row.match_status, row.bgg_id) == ("auto", 214)
def test_same_name_editions_stay_ambiguous(rows_by_title):
@@ -110,17 +110,19 @@ def test_run_resolve_writes_csv_and_is_idempotent(client, tmp_path):
cfg = Config(data_dir=data_dir)
first = run_resolve(cfg, client=client)
- assert len(first) == 7
+ assert len(first) == 13
with cfg.matches_path.open(newline="") as f:
rows = list(csv.DictReader(f))
- assert len(rows) == 7
+ assert len(rows) == 13
by_title = {r["title_raw"]: r for r in rows}
assert by_title["Catan"]["match_status"] == "auto"
assert by_title["Citadels"]["match_status"] == "ambiguous"
candidates = json.loads(by_title["Citadels"]["candidates_json"])
assert len(candidates) == 2
- assert by_title["Wingspan"]["version_id"] == "465063"
+ # ambiguous edition: no id recorded, the candidates carry the ballot
+ assert by_title["Wingspan"]["version_status"] == "version_ambiguous"
+ assert "433233" in by_title["Wingspan"]["version_candidates_json"]
# second run: everything already in matches.csv is skipped, file unchanged
before = cfg.matches_path.read_text()
@@ -239,9 +241,13 @@ def test_civilization_resolves_via_truncation(client):
)
row = resolve_entry(client, entry)
assert (row.match_status, row.bgg_id) == ("auto", 71)
- # publisher cue picks the Avalon Hill version, not Hartland/Gibsons
- assert row.version_status == "version_auto"
- assert row.version_id == 71001
+ # the publisher cue keeps Avalon Hill printings on the ballot; the
+ # real version list is too crowded for a single confident pick
+ assert row.version_status == "version_ambiguous"
+ assert any(
+ any("Avalon Hill" in p for p in (v.get("publishers") or []))
+ for v in row.version_candidates
+ )
def test_advanced_civilization_resolves_as_expansion(client):
@@ -286,7 +292,7 @@ def test_starforce_two_word_head_matches_full_title(client):
)
row = resolve_entry(client, entry)
assert (row.match_status, row.bgg_id) == ("auto", 2524)
- assert row.version_status == "version_auto"
+ assert row.version_status == "version_ambiguous"
def test_wrong_year_hint_never_drives_a_version(client):
@@ -307,8 +313,11 @@ def test_run_resolve_saves_progress_when_token_missing(tmp_path):
crashing the run and losing everything."""
partial_cache = tmp_path / "cache"
partial_cache.mkdir()
- for f in FIXTURES.glob("search_query=Catan-*"):
- shutil.copy(f, partial_cache / f.name)
+ for pattern in ("search_query=Catan-*", "thing_id=13-*"):
+ # the real Catan search has enough hits that the popularity
+ # tiebreak fetches /thing stats — that request is cached too
+ for f in FIXTURES.glob(pattern):
+ shutil.copy(f, partial_cache / f.name)
data_dir = tmp_path / "data"
data_dir.mkdir()
@@ -508,7 +517,7 @@ def test_run_resolve_force_rebuilds_from_scratch(client, tmp_path):
write_matches(cfg.matches_path, rows)
forced = run_resolve(cfg, force=True, client=client)
- assert len(forced) == 7 # every title re-resolved, none skipped
+ assert len(forced) == 13 # every title re-resolved, none skipped
fresh = {r["title_raw"]: r for r in read_matches(cfg.matches_path)}
assert fresh["Catan"]["match_status"] == "auto"
@@ -693,4 +702,4 @@ def test_rpg_falls_back_to_rpgitem_search(client):
row = resolve_entry(client, entry)
assert row.match_status == "auto"
assert row.type == "rpgitem"
- assert row.bgg_id == 400001
+ assert row.bgg_id == 311654
diff --git a/tests/test_review.py b/tests/test_review.py
index 5e2dfee..e76dcab 100644
--- a/tests/test_review.py
+++ b/tests/test_review.py
@@ -201,15 +201,17 @@ def test_unmatched_research_from_fixture_cache_with_version(tmp_path):
run_review(
cfg,
console=quiet_console(),
- input_fn=scripted("f Wingspan", "1"),
+ # the real search lists a fan pack first; Wingspan proper is #2
+ input_fn=scripted("f Wingspan", "2"),
client=fixture_client(),
)
(row,) = read_matches(cfg.matches_path)
assert row["match_status"] == "approved"
assert row["bgg_id"] == "266192"
- # cues + fixture versions -> resolved to the 2019 Stonemaier English edition
- assert row["version_status"] == "version_auto"
- assert row["version_id"] == "465063"
+ # cues + the real version list -> a handful of English Stonemaier
+ # printings stay plausible; the edition pass gets the ballot
+ assert row["version_status"] == "version_ambiguous"
+ assert "433233" in row["version_candidates_json"]
def test_resumable_quit_midway_then_continue(tmp_path):
@@ -440,14 +442,36 @@ def test_fill_version_uses_the_approved_rows_own_cues(tmp_path):
],
)
(cfg.data_dir / "titles.json").write_text(json.dumps([entry_good, entry_bad]))
+ two_versions = """
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ """
+ crafted = BGGClient(
+ cache_dir=tmp_path / "crafted_cache",
+ transport=httpx.MockTransport(
+ lambda req: httpx.Response(200, text=two_versions)
+ ),
+ )
session = ReviewSession(
- cfg, console=quiet_console(), input_fn=scripted(), client=fixture_client()
+ cfg, console=quiet_console(), input_fn=scripted(), client=crafted
)
row = session.rows[0]
session.decide_pick(row, {"bgg_id": 266192, "name": "Wingspan", "year": 2019})
# the row's own photo (good.jpg) must select entry_good's cues
assert row["version_status"] == "version_auto"
- assert row["version_id"] == "465063"
+ assert row["version_id"] == "111"
def test_dismiss_failure_keeps_ticket_visible(tmp_path, monkeypatch):
@@ -534,3 +558,38 @@ def test_split_copies_survive_resolve_rerun(tmp_path):
saved = read_matches(cfg.matches_path)
assert len(saved) == 3 # not re-merged, not re-resolved
assert [r["source_photos"] for r in saved] == ["a.jpg", "b.jpg", "c.jpg"]
+
+
+def test_open_version_ballot_puts_every_edition_up_for_review(tmp_path):
+ # a cue-less row is version_unknown by design — but the human knows
+ # which printing the box is; the ballot fetches the FULL version list
+ cfg = _setup(
+ tmp_path,
+ [
+ _row(
+ title_raw="Wingspan",
+ match_status="auto",
+ bgg_id="266192",
+ bgg_name="Wingspan",
+ version_status="version_unknown",
+ )
+ ],
+ )
+ session = ReviewSession(
+ cfg, console=quiet_console(), input_fn=scripted(), client=fixture_client()
+ )
+ row = session.rows[0]
+ count = session.open_version_ballot(row)
+ assert count == 46 # the real recorded version list, complete
+ assert row["version_status"] == "version_ambiguous"
+ candidates = json.loads(row["version_candidates_json"])
+ assert {c["version_id"] for c in candidates} >= {433233}
+ saved = read_matches(cfg.matches_path)[0]
+ assert saved["version_status"] == "version_ambiguous" # persisted
+
+ unmatched = _setup(tmp_path / "second", [_row(title_raw="Mystery")])
+ session2 = ReviewSession(
+ unmatched, console=quiet_console(), input_fn=scripted(), client=fixture_client()
+ )
+ with pytest.raises(ValueError, match="no BGG match"):
+ session2.open_version_ballot(session2.rows[0])
diff --git a/tests/test_webreview.py b/tests/test_webreview.py
index e691778..7abca74 100644
--- a/tests/test_webreview.py
+++ b/tests/test_webreview.py
@@ -1089,3 +1089,42 @@ def test_generic_camera_names_never_overwrite(tmp_path):
assert res3.json()["saved"] == ["IMG_9999.jpeg"]
assert (cfg.photos_dir / "IMG_9999.jpeg").read_bytes() == b"\xff\xd8reshoot"
assert not (cfg.extract_raw_dir / "IMG_9999.jpeg.json").exists()
+
+
+def test_open_versions_endpoint_routes_row_into_review(tmp_path):
+ from pathlib import Path as _P
+
+ cfg = make_cfg(tmp_path)
+ rows = read_matches(cfg.matches_path)
+ rows.append(
+ _row(
+ title_raw="Wingspan",
+ match_status="auto",
+ bgg_id="266192",
+ bgg_name="Wingspan",
+ version_status="version_unknown",
+ )
+ )
+ write_matches(cfg.matches_path, rows)
+ fixtures = BGGClient(cache_dir=_P("tests/fixtures/bgg_cache"))
+ web = TestClient(create_app(cfg, client=fixtures))
+ res = web.post(
+ "/api/open-versions",
+ json={"title_raw": "Wingspan", "source_photos": "shelf.jpg"},
+ )
+ assert res.status_code == 200
+ versions = res.json()["versions"]
+ assert any(v["title_raw"] == "Wingspan" for v in versions) # in the pass
+ # a BGG outage surfaces as a gateway error, not a fake success
+ rows = read_matches(cfg.matches_path)
+ for r in rows:
+ if r["title_raw"] == "Dungeon!":
+ r["version_status"] = "version_unknown"
+ unauthorized = TestClient(
+ create_app(cfg, client=unauthorized_client(tmp_path / "x"))
+ )
+ res = unauthorized.post(
+ "/api/open-versions",
+ json={"title_raw": "Dungeon!", "source_photos": "shelf.jpg"},
+ )
+ assert res.status_code == 502