From aaee9ecb06235a89fc982d63ae29722378c5f40a Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sat, 23 May 2026 12:26:07 +0200 Subject: [PATCH] test(simulation): golden-seed regression for the Layer 0->1 cascade (#952, D-200) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit End-to-end determinism guard. cascade_golden.rs pins two artifacts for a real committed body heightmap (GJ1c) in one diffable JSON golden (server/tests/golden/cascade_layer1.json): - Layer 0: SHA-256 of the source heightmap.png bytes (flips if the Python heightmap generator or the file changes) - Layer 1: the serialized Layer1Output of run_cascade on a 128x64 downsample (flips if the Rust drainage/feature/sub-biome code changes) JSON (not the msgpack discussed in refinement) to match the existing golden_suite.rs convention and stay diffable — a failure shows what drifted. UPDATE_GOLDEN=1 regenerates; wired into `make golden-update`. Adds Serialize/Deserialize to RiverNetwork/DrainageBasin/Layer1Output and a sha2 dev-dependency. Co-Authored-By: Claude Opus 4.7 (1M context) --- Makefile | 3 +- server/Cargo.lock | 66 + server/Cargo.toml | 2 + server/src/atlas/body_world_state.rs | 5 +- server/src/atlas/layer1.rs | 3 +- server/tests/cascade_golden.rs | 106 + server/tests/golden/cascade_layer1.json | 5512 +++++++++++++++++++++++ 7 files changed, 5693 insertions(+), 4 deletions(-) create mode 100644 server/tests/cascade_golden.rs create mode 100644 server/tests/golden/cascade_layer1.json diff --git a/Makefile b/Makefile index 2474dffe6..0086914e3 100644 --- a/Makefile +++ b/Makefile @@ -209,8 +209,9 @@ golden-diff: fi golden-update: - @echo "Regenerating golden file..." + @echo "Regenerating golden files..." @cd server && UPDATE_GOLDEN=1 cargo test --test golden_suite -- proof_room_tick_10_matches_golden + @cd server && UPDATE_GOLDEN=1 cargo test --test cascade_golden @git add server/tests/golden/ @echo "--- Golden file updated and staged ---" @echo "Review with: git diff --cached -- server/tests/golden/" diff --git a/server/Cargo.lock b/server/Cargo.lock index eae1c4be7..eac2ab22c 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -352,6 +352,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -480,6 +489,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -538,6 +556,16 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "ctrlc" version = "3.5.2" @@ -584,6 +612,16 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "dispatch2" version = "0.3.1" @@ -776,6 +814,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.3.4" @@ -1443,6 +1491,7 @@ dependencies = [ "serde", "serde_json", "serde_norway", + "sha2", "sysinfo", "thiserror", "toml", @@ -1450,6 +1499,17 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -1727,6 +1787,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + [[package]] name = "unicode-ident" version = "1.0.24" diff --git a/server/Cargo.toml b/server/Cargo.toml index 1c0a1ba52..d8f6dc1bc 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -42,6 +42,8 @@ gauntlet = [] # Maintained drop-in fork of the deprecated serde_yaml 0.9 (#966). Test-only: # the YAML round-trip in poi.rs and the trait-config fixture in trait_modifiers.rs. serde_norway = "0.9" +# SHA-256 of the source heightmap.png in the cascade golden test (#952). +sha2 = "0.10" # --------------------------------------------------------------------------- # Explicit test target for the Layer 3 integration module (D-030, ticket #200). diff --git a/server/src/atlas/body_world_state.rs b/server/src/atlas/body_world_state.rs index f1068668d..ce868a66d 100644 --- a/server/src/atlas/body_world_state.rs +++ b/server/src/atlas/body_world_state.rs @@ -11,6 +11,7 @@ use std::collections::{BTreeMap, BTreeSet}; use bevy_ecs::prelude::Resource; +use serde::{Deserialize, Serialize}; use crate::simulation::generator::GeographicAttractor; @@ -26,7 +27,7 @@ pub const CACHE_CAPACITY: usize = 50; /// River network extracted by the D8 drainage algorithm (D-208). /// Stub — replaced when #918 is implemented. -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct RiverNetwork { /// Pixel positions (row, col) of all river cells (flow_accumulation > 200). pub river_cells: Vec<(u16, u16)>, @@ -38,7 +39,7 @@ pub struct RiverNetwork { /// One drainage basin / province derived from watershed analysis (D-205). /// Stub — boundary polyline data comes from atlas_province_boundaries. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct DrainageBasin { pub basin_id: u32, /// Boundary polyline as pixel-space (row, col) points. diff --git a/server/src/atlas/layer1.rs b/server/src/atlas/layer1.rs index 4697a6414..96a3b7051 100644 --- a/server/src/atlas/layer1.rs +++ b/server/src/atlas/layer1.rs @@ -21,9 +21,10 @@ use crate::atlas::features::{self, TerrainAnalysis}; use crate::atlas::heightmap::BodyHeightmap; use crate::atlas::subbiome; use crate::simulation::generator::{AttractorType, GeographicAttractor}; +use serde::{Deserialize, Serialize}; /// Full Layer-1 result for one body. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Layer1Output { pub body_id: String, pub river_network: RiverNetwork, diff --git a/server/tests/cascade_golden.rs b/server/tests/cascade_golden.rs new file mode 100644 index 000000000..78796c67f --- /dev/null +++ b/server/tests/cascade_golden.rs @@ -0,0 +1,106 @@ +//! Golden-seed regression for the Layer 0→1 generation cascade (#952, D-200, D-224). +//! +//! Pins two artifacts for one fixed input heightmap, in a single diffable JSON +//! golden (matching the `golden_suite.rs` convention): +//! - **Layer 0** — SHA-256 of the source `heightmap.png` bytes. Flips if the +//! Python heightmap generator (or the committed file) changes. +//! - **Layer 1** — the serialized `Layer1Output` of the cascade run on a +//! downsampled copy. Flips if the Rust drainage / feature / sub-biome code +//! changes. +//! +//! The input is a real committed body heightmap (the #963 bake output), so this +//! is an end-to-end determinism guard. The cascade is downsampled to keep the +//! golden small while still exercising the full Layer-1 pipeline. +//! +//! Regenerate after an intended change: +//! UPDATE_GOLDEN=1 cargo test --test cascade_golden + +use std::path::PathBuf; + +use serde_json::{json, Value}; +use settled_reach_server::atlas::cascade::{run_cascade_from_heightmap, CascadeLayer}; +use settled_reach_server::atlas::heightmap::load_heightmap_png; +use settled_reach_server::seed::{SeedChain, SeedDomain}; +use sha2::{Digest, Sha256}; + +/// Source heightmap — a real committed body, relative to the server manifest dir. +const SOURCE_HEIGHTMAP: &str = "../wiki/star-systems/GJ-1/bodies/GJ1c/heightmap.png"; +/// Downsample target: small enough for a compact golden, large enough for real +/// drainage/feature structure. +const DOWNSAMPLE: (u32, u32) = (128, 64); +/// World seed for the run. Layers 0–1 are RNG-free; this is carried for the +/// SeedChain contract (D-224). +const WORLD_SEED: u64 = 42; +const GOLDEN: &str = "tests/golden/cascade_layer1.json"; + +#[test] +fn cascade_layer0_to_1_matches_golden() { + let manifest = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + let src = manifest.join(SOURCE_HEIGHTMAP); + + // ── Layer 0 — load + hash the source heightmap.png. ───────────────────── + let png_bytes = std::fs::read(&src) + .unwrap_or_else(|e| panic!("read source heightmap {}: {e}", src.display())); + let mut hasher = Sha256::new(); + hasher.update(&png_bytes); + let sha = format!("{:x}", hasher.finalize()); + + let heightmap = load_heightmap_png(&src, "GJ1c", 0.3).expect("decode source heightmap"); + + // ── Layer 1 — downsample, then run the cascade to topography. ─────────── + let small = heightmap.downsample(DOWNSAMPLE.0, DOWNSAMPLE.1); + let body_seed = SeedChain::root(WORLD_SEED).derive(SeedDomain::Body, 1); + let snapshot = run_cascade_from_heightmap(body_seed, small, CascadeLayer::Topography); + let layer1 = snapshot.layer1.expect("Layer 1 ran"); + + let actual = json!({ + "source_heightmap": SOURCE_HEIGHTMAP, + "source_sha256": sha, + "downsample": [DOWNSAMPLE.0, DOWNSAMPLE.1], + "layer1": serde_json::to_value(&layer1).expect("serialize Layer1Output"), + }); + let actual_json = serde_json::to_string_pretty(&actual).expect("format JSON") + "\n"; + + let golden_path = manifest.join(GOLDEN); + + if std::env::var("UPDATE_GOLDEN").is_ok() { + std::fs::create_dir_all(golden_path.parent().unwrap()).expect("mkdir golden"); + std::fs::write(&golden_path, &actual_json).expect("write golden"); + eprintln!( + "Golden written: {} ({} bytes)", + golden_path.display(), + actual_json.len() + ); + return; + } + + let golden_json = std::fs::read_to_string(&golden_path).unwrap_or_else(|e| { + panic!( + "Golden not found: {}. Run: UPDATE_GOLDEN=1 cargo test --test cascade_golden\n{e}", + golden_path.display() + ) + }); + + // Compare as parsed JSON so whitespace/formatting never causes spurious diffs. + let actual_v: Value = serde_json::from_str(&actual_json).expect("reparse actual JSON"); + let golden_v: Value = serde_json::from_str(&golden_json).expect("parse golden JSON"); + + if actual_v != golden_v { + let count = + |v: &Value, ptr: &str| v.pointer(ptr).and_then(Value::as_array).map_or(0, Vec::len); + panic!( + "Cascade golden mismatch.\n \ + source_sha256: golden={} actual={}\n \ + river_cells: golden={} actual={}\n \ + attractors: golden={} actual={}\n\ + To update: UPDATE_GOLDEN=1 cargo test --test cascade_golden\n Golden: {}", + golden_v["source_sha256"], + actual_v["source_sha256"], + count(&golden_v, "/layer1/river_network/river_cells"), + count(&actual_v, "/layer1/river_network/river_cells"), + count(&golden_v, "/layer1/attractors"), + count(&actual_v, "/layer1/attractors"), + golden_path.display(), + ); + } +} diff --git a/server/tests/golden/cascade_layer1.json b/server/tests/golden/cascade_layer1.json new file mode 100644 index 000000000..52e463209 --- /dev/null +++ b/server/tests/golden/cascade_layer1.json @@ -0,0 +1,5512 @@ +{ + "downsample": [ + 128, + 64 + ], + "layer1": { + "attractors": [ + { + "attractor_type": "CoastalAccess", + "position": [ + 12, + 58 + ], + "strength": 0.9000000357627869, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.705174446105957 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 16, + 26 + ], + "strength": 0.9000000357627869, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.992631196975708 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 17, + 88 + ], + "strength": 0.9000000357627869, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.509682536125183 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 18, + 2 + ], + "strength": 0.9000000357627869, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.8312877416610718 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 18, + 100 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.4542107582092285 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 19, + 46 + ], + "strength": 0.9000000357627869, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.6213414669036865 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 24, + 14 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.277121067047119 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 24, + 63 + ], + "strength": 0.9000000357627869, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.598630905151367 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 24, + 127 + ], + "strength": 0.9000000357627869, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5760847330093384 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 26, + 75 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.263017177581787 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 28, + 31 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.2471957206726074 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 30, + 97 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3798294067382812 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 32, + 0 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3692634105682373 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 36, + 12 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.894585371017456 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 36, + 120 + ], + "strength": 0.9000000357627869, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.9926791191101074 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 41, + 24 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.445976734161377 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 42, + 100 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.4352214336395264 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 43, + 73 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.41850209236145 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 46, + 45 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.284231662750244 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 48, + 113 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3745126724243164 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 50, + 57 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.2426040172576904 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 54, + 7 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.4332644939422607 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 54, + 29 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.66496205329895 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 54, + 98 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.362567663192749 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 58, + 41 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.280940532684326 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 59, + 126 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.29425048828125 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 61, + 69 + ], + "strength": 0.9000000357627869, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.347902536392212 + }, + { + "attractor_type": "CoastalAccess", + "position": [ + 62, + 57 + ], + "strength": 0.8916666507720947, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5069433450698853 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 0, + 49 + ], + "strength": 0.7643029689788818, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.6313494443893433 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 0, + 99 + ], + "strength": 0.7105770111083984, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.6807764768600464 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 1, + 67 + ], + "strength": 0.7880914211273193, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.64690101146698 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 12, + 51 + ], + "strength": 0.9396849870681763, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4727369546890259 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 15, + 68 + ], + "strength": 0.9142279624938965, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.6829853057861328 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 17, + 83 + ], + "strength": 0.9531623125076294, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.49351966381073 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 20, + 8 + ], + "strength": 0.9310319423675537, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.51190185546875 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 20, + 106 + ], + "strength": 0.9202969074249268, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5951330661773682 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 22, + 21 + ], + "strength": 0.9522939920425415, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4485082626342773 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 23, + 35 + ], + "strength": 0.9401652812957764, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5741112232208252 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 24, + 55 + ], + "strength": 0.9567122459411621, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4763219356536865 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 28, + 123 + ], + "strength": 0.9559530019760132, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4741380214691162 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 33, + 73 + ], + "strength": 0.8913040161132812, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.326637029647827 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 33, + 92 + ], + "strength": 0.7947503328323364, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.318521738052368 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 38, + 34 + ], + "strength": 0.8950268030166626, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.421283006668091 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 39, + 11 + ], + "strength": 0.9046797752380371, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.2307984828948975 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 46, + 108 + ], + "strength": 0.9676910638809204, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.446051836013794 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 58, + 32 + ], + "strength": 0.9108697175979614, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.248856544494629 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 58, + 47 + ], + "strength": 0.8607668876647949, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3009378910064697 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 59, + 116 + ], + "strength": 0.9447795152664185, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5145448446273804 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 60, + 11 + ], + "strength": 0.9386036396026611, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5549829006195068 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 60, + 100 + ], + "strength": 0.9389288425445557, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5891557931900024 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 63, + 59 + ], + "strength": 0.9647159576416016, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.420546531677246 + }, + { + "attractor_type": "ValleyFloor", + "position": [ + 63, + 71 + ], + "strength": 0.8461735844612122, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3726730346679688 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 1, + 66 + ], + "strength": 0.47799789905548096, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.6483227014541626 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 3, + 98 + ], + "strength": 0.3411887288093567, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.68712317943573 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 5, + 119 + ], + "strength": 0.3416058421134949, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.695900321006775 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 7, + 86 + ], + "strength": 0.4623566269874573, + "sub_biome": "BorealForest", + "terrain_modification_cost": 1.682070016860962 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 8, + 46 + ], + "strength": 0.4648592472076416, + "sub_biome": "BorealForest", + "terrain_modification_cost": 1.5262713432312012 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 14, + 8 + ], + "strength": 0.49989575147628784, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.7842556238174438 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 14, + 29 + ], + "strength": 0.322002112865448, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.570139765739441 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 17, + 114 + ], + "strength": 0.02565169334411621, + "sub_biome": "Alpine", + "terrain_modification_cost": 4.342173099517822 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 17, + 127 + ], + "strength": 0.1539103388786316, + "sub_biome": "Alpine", + "terrain_modification_cost": 4.652830600738525 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 18, + 71 + ], + "strength": 0.48613137006759644, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.743087649345398 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 20, + 49 + ], + "strength": 0.47549527883529663, + "sub_biome": "TemperateForest", + "terrain_modification_cost": 1.9809842109680176 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 32, + 122 + ], + "strength": 0.49551618099212646, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.144423484802246 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 35, + 101 + ], + "strength": 0.24671530723571777, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.093188762664795 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 37, + 38 + ], + "strength": 0.3305526375770569, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.3051939010620117 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 57, + 112 + ], + "strength": 0.49676746129989624, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.7817847728729248 + }, + { + "attractor_type": "PassEntrance", + "position": [ + 58, + 20 + ], + "strength": 0.3889468312263489, + "sub_biome": "Tundra", + "terrain_modification_cost": 2.196316719055176 + }, + { + "attractor_type": "LakeShore", + "position": [ + 13, + 57 + ], + "strength": 0.5, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.4362592697143555 + }, + { + "attractor_type": "LakeShore", + "position": [ + 17, + 25 + ], + "strength": 0.5, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.6300840377807617 + }, + { + "attractor_type": "LakeShore", + "position": [ + 17, + 73 + ], + "strength": 0.5, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 2.1326990127563477 + }, + { + "attractor_type": "LakeShore", + "position": [ + 34, + 6 + ], + "strength": 0.5, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.28155255317688 + }, + { + "attractor_type": "LakeShore", + "position": [ + 47, + 109 + ], + "strength": 0.5, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.7639786005020142 + }, + { + "attractor_type": "LakeShore", + "position": [ + 58, + 37 + ], + "strength": 0.5, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.2434041500091553 + }, + { + "attractor_type": "LakeShore", + "position": [ + 61, + 49 + ], + "strength": 0.5, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3075759410858154 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 0, + 100 + ], + "strength": 0.2839376628398895, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.6800868511199951 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 1, + 49 + ], + "strength": 0.3120504319667816, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.6431925296783447 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 5, + 120 + ], + "strength": 0.2717636823654175, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.7096798419952393 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 6, + 0 + ], + "strength": 0.243081197142601, + "sub_biome": "Tundra", + "terrain_modification_cost": 1.7193937301635742 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 6, + 37 + ], + "strength": 0.2349608987569809, + "sub_biome": "Alpine", + "terrain_modification_cost": 3.8726675510406494 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 8, + 23 + ], + "strength": 0.21257217228412628, + "sub_biome": "Alpine", + "terrain_modification_cost": 3.869995355606079 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 8, + 72 + ], + "strength": 0.3451022803783417, + "sub_biome": "BorealForest", + "terrain_modification_cost": 1.650801420211792 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 13, + 51 + ], + "strength": 0.38036319613456726, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4623045921325684 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 16, + 90 + ], + "strength": 0.37407752871513367, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.542720913887024 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 19, + 36 + ], + "strength": 0.36675015091896057, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5209544897079468 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 20, + 104 + ], + "strength": 0.33964696526527405, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3446645736694336 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 21, + 9 + ], + "strength": 0.3702353537082672, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5452786684036255 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 21, + 78 + ], + "strength": 0.3782760202884674, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5308037996292114 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 22, + 22 + ], + "strength": 0.3804872930049896, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.4575036764144897 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 25, + 57 + ], + "strength": 0.37701961398124695, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.463679552078247 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 29, + 123 + ], + "strength": 0.3811500668525696, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.486427903175354 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 33, + 0 + ], + "strength": 0.3375668525695801, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.3414344787597656 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 33, + 109 + ], + "strength": 0.2576363682746887, + "sub_biome": "Alpine", + "terrain_modification_cost": 3.916645050048828 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 34, + 96 + ], + "strength": 0.2906258702278137, + "sub_biome": "TropicalWet", + "terrain_modification_cost": 2.076204776763916 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 35, + 73 + ], + "strength": 0.3198118209838867, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.347243070602417 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 39, + 12 + ], + "strength": 0.3582722246646881, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.244231700897217 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 42, + 25 + ], + "strength": 0.34301498532295227, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.35526967048645 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 45, + 109 + ], + "strength": 0.3845770061016083, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.465970754623413 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 46, + 46 + ], + "strength": 0.30266979336738586, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.331693410873413 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 57, + 102 + ], + "strength": 0.3764371871948242, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5015636682510376 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 57, + 116 + ], + "strength": 0.378751277923584, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5405257940292358 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 58, + 33 + ], + "strength": 0.35973402857780457, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.2749929428100586 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 58, + 48 + ], + "strength": 0.35973143577575684, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.339189291000366 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 60, + 12 + ], + "strength": 0.3718062937259674, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.5511391162872314 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 62, + 60 + ], + "strength": 0.3830713927745819, + "sub_biome": "CoastalLowland", + "terrain_modification_cost": 1.456254005432129 + }, + { + "attractor_type": "PlainCenter", + "position": [ + 63, + 72 + ], + "strength": 0.3191942274570465, + "sub_biome": "Wetland", + "terrain_modification_cost": 3.329078197479248 + } + ], + "body_id": "GJ1c", + "drainage_basins": [ + { + "area_pct": 0.8006591796875, + "basin_id": 0, + "boundary": [ + [ + 37, + 35 + ], + [ + 37, + 36 + ], + [ + 36, + 35 + ], + [ + 36, + 36 + ], + [ + 36, + 37 + ], + [ + 35, + 32 + ], + [ + 35, + 33 + ], + [ + 35, + 34 + ], + [ + 35, + 35 + ], + [ + 34, + 30 + ], + [ + 34, + 31 + ], + [ + 34, + 32 + ], + [ + 33, + 29 + ], + [ + 37, + 57 + ], + [ + 33, + 30 + ], + [ + 32, + 29 + ], + [ + 37, + 58 + ], + [ + 31, + 29 + ], + [ + 31, + 30 + ], + [ + 30, + 30 + ], + [ + 30, + 31 + ], + [ + 29, + 30 + ], + [ + 29, + 31 + ], + [ + 28, + 29 + ], + [ + 28, + 30 + ], + [ + 27, + 28 + ], + [ + 27, + 29 + ], + [ + 26, + 28 + ], + [ + 25, + 28 + ], + [ + 25, + 29 + ], + [ + 25, + 30 + ], + [ + 24, + 30 + ], + [ + 24, + 31 + ], + [ + 24, + 32 + ], + [ + 23, + 32 + ], + [ + 23, + 33 + ], + [ + 23, + 34 + ], + [ + 36, + 58 + ], + [ + 22, + 34 + ], + [ + 22, + 35 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 21, + 35 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 21, + 36 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 20, + 36 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 20, + 37 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 19, + 37 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ], + [ + 19, + 38 + ], + [ + 0, + 15 + ], + [ + 0, + 16 + ], + [ + 19, + 39 + ], + [ + 0, + 17 + ], + [ + 0, + 18 + ], + [ + 0, + 19 + ], + [ + 18, + 39 + ], + [ + 0, + 20 + ], + [ + 36, + 59 + ], + [ + 19, + 41 + ], + [ + 18, + 40 + ], + [ + 0, + 21 + ], + [ + 0, + 22 + ], + [ + 30, + 53 + ], + [ + 29, + 52 + ], + [ + 23, + 46 + ], + [ + 19, + 42 + ], + [ + 18, + 41 + ], + [ + 0, + 23 + ], + [ + 0, + 24 + ], + [ + 19, + 43 + ], + [ + 0, + 25 + ], + [ + 22, + 46 + ], + [ + 23, + 47 + ], + [ + 24, + 48 + ], + [ + 0, + 26 + ], + [ + 28, + 52 + ], + [ + 19, + 44 + ], + [ + 0, + 27 + ], + [ + 29, + 53 + ], + [ + 20, + 45 + ], + [ + 21, + 46 + ], + [ + 30, + 54 + ], + [ + 23, + 48 + ], + [ + 0, + 28 + ], + [ + 24, + 49 + ], + [ + 19, + 45 + ], + [ + 0, + 29 + ], + [ + 20, + 46 + ], + [ + 27, + 52 + ], + [ + 0, + 30 + ], + [ + 0, + 31 + ], + [ + 24, + 50 + ], + [ + 0, + 32 + ], + [ + 30, + 55 + ], + [ + 0, + 33 + ], + [ + 27, + 53 + ], + [ + 24, + 51 + ], + [ + 0, + 34 + ], + [ + 0, + 35 + ], + [ + 26, + 53 + ], + [ + 0, + 36 + ], + [ + 35, + 59 + ], + [ + 24, + 52 + ], + [ + 0, + 37 + ], + [ + 30, + 56 + ], + [ + 25, + 53 + ], + [ + 0, + 38 + ], + [ + 0, + 39 + ], + [ + 24, + 53 + ], + [ + 31, + 57 + ], + [ + 0, + 40 + ], + [ + 0, + 41 + ], + [ + 0, + 42 + ], + [ + 30, + 57 + ], + [ + 32, + 58 + ], + [ + 0, + 43 + ], + [ + 0, + 44 + ], + [ + 0, + 45 + ], + [ + 31, + 58 + ], + [ + 0, + 46 + ], + [ + 0, + 47 + ], + [ + 33, + 59 + ], + [ + 0, + 48 + ], + [ + 0, + 49 + ], + [ + 32, + 59 + ], + [ + 0, + 50 + ], + [ + 0, + 51 + ], + [ + 35, + 60 + ], + [ + 0, + 52 + ], + [ + 0, + 53 + ], + [ + 34, + 60 + ], + [ + 0, + 54 + ], + [ + 0, + 55 + ], + [ + 33, + 60 + ], + [ + 0, + 56 + ], + [ + 0, + 57 + ], + [ + 0, + 58 + ], + [ + 0, + 59 + ], + [ + 0, + 60 + ], + [ + 0, + 61 + ], + [ + 0, + 62 + ], + [ + 0, + 63 + ], + [ + 0, + 64 + ], + [ + 0, + 65 + ], + [ + 0, + 66 + ], + [ + 0, + 67 + ], + [ + 0, + 68 + ], + [ + 0, + 69 + ], + [ + 0, + 70 + ], + [ + 0, + 71 + ], + [ + 0, + 72 + ], + [ + 0, + 73 + ], + [ + 0, + 74 + ], + [ + 0, + 75 + ], + [ + 0, + 76 + ], + [ + 0, + 77 + ], + [ + 0, + 78 + ], + [ + 0, + 79 + ], + [ + 0, + 80 + ], + [ + 0, + 81 + ], + [ + 0, + 82 + ], + [ + 0, + 83 + ], + [ + 0, + 84 + ], + [ + 0, + 85 + ], + [ + 0, + 86 + ], + [ + 0, + 87 + ], + [ + 0, + 88 + ], + [ + 0, + 89 + ], + [ + 0, + 90 + ], + [ + 0, + 91 + ], + [ + 0, + 92 + ], + [ + 0, + 93 + ], + [ + 0, + 94 + ], + [ + 0, + 95 + ], + [ + 0, + 96 + ], + [ + 0, + 97 + ], + [ + 0, + 98 + ], + [ + 0, + 99 + ], + [ + 0, + 100 + ], + [ + 0, + 101 + ], + [ + 0, + 102 + ], + [ + 0, + 103 + ], + [ + 0, + 104 + ], + [ + 0, + 105 + ], + [ + 0, + 106 + ], + [ + 0, + 107 + ], + [ + 0, + 108 + ], + [ + 0, + 109 + ], + [ + 0, + 110 + ], + [ + 0, + 111 + ], + [ + 0, + 112 + ], + [ + 0, + 113 + ], + [ + 0, + 114 + ], + [ + 0, + 115 + ], + [ + 0, + 116 + ], + [ + 0, + 117 + ], + [ + 0, + 118 + ], + [ + 0, + 119 + ], + [ + 0, + 120 + ], + [ + 0, + 121 + ], + [ + 0, + 122 + ], + [ + 0, + 123 + ], + [ + 0, + 124 + ], + [ + 0, + 125 + ], + [ + 0, + 126 + ], + [ + 0, + 127 + ], + [ + 41, + 101 + ], + [ + 41, + 100 + ], + [ + 41, + 99 + ], + [ + 41, + 98 + ], + [ + 41, + 97 + ], + [ + 42, + 103 + ], + [ + 41, + 93 + ], + [ + 42, + 102 + ], + [ + 41, + 92 + ], + [ + 42, + 101 + ], + [ + 45, + 127 + ], + [ + 41, + 91 + ], + [ + 45, + 126 + ], + [ + 45, + 125 + ], + [ + 45, + 124 + ], + [ + 41, + 90 + ], + [ + 45, + 123 + ], + [ + 43, + 106 + ], + [ + 45, + 122 + ], + [ + 41, + 89 + ], + [ + 42, + 97 + ], + [ + 43, + 105 + ], + [ + 45, + 121 + ], + [ + 45, + 120 + ], + [ + 43, + 104 + ], + [ + 42, + 96 + ], + [ + 45, + 119 + ], + [ + 43, + 103 + ], + [ + 42, + 95 + ], + [ + 45, + 118 + ], + [ + 46, + 125 + ], + [ + 42, + 94 + ], + [ + 42, + 93 + ], + [ + 44, + 107 + ], + [ + 44, + 106 + ], + [ + 46, + 118 + ], + [ + 46, + 117 + ], + [ + 46, + 116 + ], + [ + 46, + 115 + ], + [ + 42, + 89 + ], + [ + 45, + 108 + ], + [ + 46, + 114 + ], + [ + 45, + 107 + ], + [ + 46, + 113 + ], + [ + 42, + 88 + ], + [ + 46, + 112 + ], + [ + 49, + 127 + ], + [ + 47, + 115 + ], + [ + 46, + 109 + ], + [ + 47, + 114 + ], + [ + 46, + 108 + ], + [ + 47, + 112 + ], + [ + 50, + 127 + ], + [ + 47, + 109 + ], + [ + 43, + 88 + ], + [ + 51, + 127 + ], + [ + 48, + 112 + ], + [ + 43, + 87 + ], + [ + 48, + 109 + ], + [ + 49, + 112 + ], + [ + 49, + 109 + ], + [ + 50, + 112 + ], + [ + 44, + 87 + ], + [ + 44, + 86 + ], + [ + 50, + 109 + ], + [ + 51, + 112 + ], + [ + 51, + 111 + ], + [ + 51, + 110 + ], + [ + 51, + 109 + ], + [ + 52, + 111 + ], + [ + 52, + 110 + ], + [ + 45, + 86 + ], + [ + 45, + 85 + ], + [ + 45, + 84 + ], + [ + 59, + 127 + ], + [ + 60, + 127 + ], + [ + 60, + 126 + ], + [ + 45, + 82 + ], + [ + 61, + 126 + ], + [ + 46, + 84 + ], + [ + 61, + 125 + ], + [ + 45, + 81 + ], + [ + 57, + 113 + ], + [ + 56, + 110 + ], + [ + 61, + 123 + ], + [ + 46, + 83 + ], + [ + 57, + 112 + ], + [ + 62, + 125 + ], + [ + 56, + 109 + ], + [ + 61, + 122 + ], + [ + 58, + 114 + ], + [ + 63, + 127 + ], + [ + 45, + 80 + ], + [ + 62, + 124 + ], + [ + 57, + 111 + ], + [ + 59, + 116 + ], + [ + 61, + 121 + ], + [ + 63, + 126 + ], + [ + 56, + 108 + ], + [ + 58, + 113 + ], + [ + 62, + 123 + ], + [ + 57, + 110 + ], + [ + 59, + 115 + ], + [ + 61, + 120 + ], + [ + 63, + 125 + ], + [ + 46, + 82 + ], + [ + 56, + 107 + ], + [ + 60, + 117 + ], + [ + 63, + 124 + ], + [ + 61, + 119 + ], + [ + 59, + 114 + ], + [ + 60, + 116 + ], + [ + 45, + 79 + ], + [ + 63, + 123 + ], + [ + 61, + 118 + ], + [ + 63, + 122 + ], + [ + 61, + 117 + ], + [ + 57, + 107 + ], + [ + 63, + 121 + ], + [ + 63, + 120 + ], + [ + 63, + 119 + ], + [ + 58, + 107 + ], + [ + 63, + 118 + ], + [ + 63, + 117 + ], + [ + 63, + 116 + ], + [ + 46, + 79 + ], + [ + 59, + 107 + ], + [ + 63, + 115 + ], + [ + 59, + 106 + ], + [ + 63, + 114 + ], + [ + 63, + 113 + ], + [ + 60, + 106 + ], + [ + 63, + 112 + ], + [ + 63, + 111 + ], + [ + 60, + 105 + ], + [ + 47, + 79 + ], + [ + 63, + 110 + ], + [ + 63, + 109 + ], + [ + 61, + 105 + ], + [ + 63, + 108 + ], + [ + 61, + 104 + ], + [ + 47, + 78 + ], + [ + 63, + 107 + ], + [ + 63, + 106 + ], + [ + 62, + 104 + ], + [ + 63, + 105 + ], + [ + 62, + 103 + ], + [ + 63, + 104 + ], + [ + 62, + 102 + ], + [ + 63, + 103 + ], + [ + 48, + 78 + ], + [ + 62, + 101 + ], + [ + 63, + 102 + ], + [ + 63, + 101 + ], + [ + 48, + 77 + ], + [ + 63, + 100 + ], + [ + 63, + 99 + ], + [ + 49, + 77 + ], + [ + 50, + 77 + ], + [ + 51, + 77 + ], + [ + 52, + 78 + ], + [ + 48, + 73 + ], + [ + 49, + 74 + ], + [ + 50, + 75 + ], + [ + 51, + 76 + ], + [ + 52, + 77 + ], + [ + 48, + 72 + ], + [ + 49, + 73 + ], + [ + 50, + 74 + ], + [ + 51, + 75 + ], + [ + 48, + 71 + ], + [ + 48, + 70 + ], + [ + 48, + 69 + ], + [ + 48, + 68 + ], + [ + 48, + 67 + ], + [ + 48, + 66 + ], + [ + 49, + 66 + ], + [ + 52, + 67 + ], + [ + 51, + 66 + ], + [ + 49, + 65 + ], + [ + 52, + 66 + ], + [ + 50, + 65 + ], + [ + 53, + 66 + ], + [ + 51, + 65 + ], + [ + 53, + 65 + ], + [ + 54, + 65 + ], + [ + 55, + 65 + ], + [ + 56, + 65 + ], + [ + 56, + 64 + ], + [ + 57, + 64 + ], + [ + 59, + 64 + ], + [ + 60, + 64 + ], + [ + 57, + 63 + ], + [ + 58, + 63 + ], + [ + 59, + 63 + ], + [ + 60, + 63 + ], + [ + 61, + 63 + ], + [ + 61, + 62 + ], + [ + 62, + 62 + ], + [ + 62, + 61 + ], + [ + 63, + 61 + ], + [ + 63, + 60 + ], + [ + 48, + 60 + ], + [ + 63, + 59 + ], + [ + 47, + 60 + ], + [ + 46, + 60 + ], + [ + 63, + 58 + ], + [ + 63, + 57 + ], + [ + 49, + 59 + ], + [ + 48, + 59 + ], + [ + 63, + 56 + ], + [ + 46, + 59 + ], + [ + 50, + 58 + ], + [ + 45, + 59 + ], + [ + 63, + 55 + ], + [ + 49, + 58 + ], + [ + 44, + 59 + ], + [ + 63, + 54 + ], + [ + 51, + 57 + ], + [ + 50, + 57 + ], + [ + 63, + 53 + ], + [ + 43, + 59 + ], + [ + 63, + 52 + ], + [ + 51, + 56 + ], + [ + 45, + 58 + ], + [ + 42, + 59 + ], + [ + 63, + 51 + ], + [ + 44, + 58 + ], + [ + 63, + 50 + ], + [ + 51, + 55 + ], + [ + 63, + 49 + ], + [ + 51, + 54 + ], + [ + 63, + 48 + ], + [ + 50, + 54 + ], + [ + 63, + 47 + ], + [ + 63, + 46 + ], + [ + 42, + 58 + ], + [ + 50, + 53 + ], + [ + 63, + 45 + ], + [ + 63, + 44 + ], + [ + 63, + 43 + ], + [ + 50, + 52 + ], + [ + 63, + 42 + ], + [ + 41, + 58 + ], + [ + 63, + 41 + ], + [ + 50, + 51 + ], + [ + 63, + 40 + ], + [ + 63, + 39 + ], + [ + 50, + 50 + ], + [ + 63, + 38 + ], + [ + 49, + 50 + ], + [ + 63, + 37 + ], + [ + 63, + 36 + ], + [ + 63, + 35 + ], + [ + 49, + 49 + ], + [ + 63, + 34 + ], + [ + 41, + 57 + ], + [ + 63, + 33 + ], + [ + 49, + 48 + ], + [ + 63, + 32 + ], + [ + 63, + 31 + ], + [ + 50, + 46 + ], + [ + 49, + 47 + ], + [ + 63, + 30 + ], + [ + 63, + 29 + ], + [ + 50, + 45 + ], + [ + 49, + 46 + ], + [ + 63, + 28 + ], + [ + 48, + 47 + ], + [ + 63, + 27 + ], + [ + 50, + 44 + ], + [ + 63, + 26 + ], + [ + 63, + 25 + ], + [ + 50, + 43 + ], + [ + 63, + 24 + ], + [ + 40, + 57 + ], + [ + 63, + 23 + ], + [ + 50, + 42 + ], + [ + 63, + 22 + ], + [ + 63, + 21 + ], + [ + 63, + 20 + ], + [ + 49, + 42 + ], + [ + 63, + 19 + ], + [ + 63, + 18 + ], + [ + 49, + 41 + ], + [ + 63, + 17 + ], + [ + 63, + 16 + ], + [ + 63, + 15 + ], + [ + 63, + 14 + ], + [ + 63, + 13 + ], + [ + 48, + 41 + ], + [ + 63, + 12 + ], + [ + 63, + 11 + ], + [ + 48, + 40 + ], + [ + 63, + 10 + ], + [ + 63, + 9 + ], + [ + 63, + 8 + ], + [ + 63, + 7 + ], + [ + 63, + 6 + ], + [ + 47, + 40 + ], + [ + 63, + 5 + ], + [ + 63, + 4 + ], + [ + 63, + 3 + ], + [ + 47, + 39 + ], + [ + 63, + 2 + ], + [ + 63, + 1 + ], + [ + 63, + 0 + ], + [ + 39, + 57 + ], + [ + 46, + 39 + ], + [ + 46, + 38 + ], + [ + 59, + 3 + ], + [ + 59, + 2 + ], + [ + 58, + 4 + ], + [ + 59, + 1 + ], + [ + 58, + 3 + ], + [ + 59, + 0 + ], + [ + 57, + 4 + ], + [ + 45, + 38 + ], + [ + 56, + 4 + ], + [ + 56, + 3 + ], + [ + 45, + 37 + ], + [ + 55, + 3 + ], + [ + 55, + 2 + ], + [ + 54, + 2 + ], + [ + 44, + 37 + ], + [ + 53, + 2 + ], + [ + 44, + 36 + ], + [ + 53, + 1 + ], + [ + 52, + 1 + ], + [ + 52, + 0 + ], + [ + 51, + 0 + ], + [ + 43, + 36 + ], + [ + 47, + 11 + ], + [ + 49, + 0 + ], + [ + 47, + 10 + ], + [ + 47, + 9 + ], + [ + 46, + 14 + ], + [ + 42, + 36 + ], + [ + 47, + 8 + ], + [ + 46, + 13 + ], + [ + 47, + 7 + ], + [ + 48, + 1 + ], + [ + 42, + 35 + ], + [ + 46, + 12 + ], + [ + 47, + 6 + ], + [ + 48, + 0 + ], + [ + 46, + 11 + ], + [ + 45, + 16 + ], + [ + 45, + 15 + ], + [ + 47, + 2 + ], + [ + 45, + 14 + ], + [ + 47, + 1 + ], + [ + 46, + 6 + ], + [ + 46, + 5 + ], + [ + 46, + 4 + ], + [ + 46, + 3 + ], + [ + 44, + 16 + ], + [ + 46, + 2 + ], + [ + 41, + 35 + ], + [ + 38, + 57 + ], + [ + 45, + 1 + ], + [ + 45, + 0 + ], + [ + 43, + 16 + ], + [ + 44, + 2 + ], + [ + 44, + 1 + ], + [ + 42, + 16 + ], + [ + 40, + 35 + ], + [ + 43, + 3 + ], + [ + 43, + 2 + ], + [ + 40, + 34 + ], + [ + 42, + 4 + ], + [ + 41, + 16 + ], + [ + 42, + 3 + ], + [ + 41, + 15 + ], + [ + 41, + 6 + ], + [ + 41, + 5 + ], + [ + 41, + 4 + ], + [ + 39, + 34 + ], + [ + 40, + 15 + ], + [ + 40, + 14 + ], + [ + 40, + 8 + ], + [ + 40, + 7 + ], + [ + 40, + 6 + ], + [ + 39, + 14 + ], + [ + 39, + 13 + ], + [ + 39, + 12 + ], + [ + 39, + 10 + ], + [ + 39, + 9 + ], + [ + 39, + 8 + ], + [ + 38, + 35 + ], + [ + 38, + 34 + ], + [ + 38, + 12 + ], + [ + 38, + 11 + ], + [ + 38, + 10 + ] + ] + }, + { + "area_pct": 0.033203125, + "basin_id": 1, + "boundary": [ + [ + 28, + 31 + ], + [ + 28, + 32 + ], + [ + 27, + 30 + ], + [ + 27, + 31 + ], + [ + 26, + 29 + ], + [ + 26, + 30 + ], + [ + 26, + 31 + ], + [ + 25, + 31 + ], + [ + 25, + 32 + ], + [ + 25, + 33 + ], + [ + 24, + 33 + ], + [ + 24, + 34 + ], + [ + 24, + 35 + ], + [ + 23, + 35 + ], + [ + 23, + 36 + ], + [ + 22, + 36 + ], + [ + 22, + 37 + ], + [ + 21, + 37 + ], + [ + 21, + 38 + ], + [ + 20, + 38 + ], + [ + 20, + 39 + ], + [ + 20, + 40 + ], + [ + 19, + 40 + ], + [ + 20, + 41 + ], + [ + 20, + 42 + ], + [ + 20, + 43 + ], + [ + 20, + 44 + ], + [ + 21, + 44 + ], + [ + 21, + 45 + ], + [ + 22, + 45 + ], + [ + 23, + 45 + ], + [ + 24, + 45 + ], + [ + 24, + 46 + ], + [ + 24, + 47 + ], + [ + 25, + 47 + ], + [ + 25, + 48 + ], + [ + 25, + 49 + ], + [ + 25, + 50 + ], + [ + 25, + 51 + ], + [ + 25, + 52 + ], + [ + 26, + 51 + ], + [ + 26, + 52 + ], + [ + 27, + 51 + ], + [ + 28, + 51 + ], + [ + 29, + 51 + ], + [ + 30, + 52 + ], + [ + 30, + 51 + ], + [ + 31, + 51 + ], + [ + 31, + 50 + ], + [ + 31, + 49 + ], + [ + 31, + 48 + ], + [ + 32, + 48 + ], + [ + 32, + 47 + ], + [ + 33, + 47 + ], + [ + 33, + 46 + ], + [ + 34, + 46 + ], + [ + 34, + 45 + ], + [ + 35, + 45 + ], + [ + 35, + 44 + ], + [ + 36, + 44 + ], + [ + 36, + 43 + ], + [ + 36, + 42 + ], + [ + 36, + 41 + ], + [ + 36, + 40 + ], + [ + 37, + 39 + ], + [ + 36, + 39 + ], + [ + 36, + 38 + ], + [ + 35, + 38 + ], + [ + 35, + 37 + ], + [ + 35, + 36 + ], + [ + 34, + 36 + ], + [ + 34, + 35 + ], + [ + 34, + 34 + ], + [ + 34, + 33 + ], + [ + 33, + 33 + ], + [ + 33, + 32 + ], + [ + 33, + 31 + ], + [ + 32, + 31 + ], + [ + 32, + 30 + ], + [ + 31, + 32 + ], + [ + 31, + 31 + ], + [ + 30, + 32 + ], + [ + 29, + 32 + ] + ] + }, + { + "area_pct": 0.03857421875, + "basin_id": 2, + "boundary": [ + [ + 40, + 36 + ], + [ + 39, + 35 + ], + [ + 39, + 36 + ], + [ + 38, + 36 + ], + [ + 38, + 37 + ], + [ + 38, + 38 + ], + [ + 38, + 39 + ], + [ + 37, + 37 + ], + [ + 38, + 40 + ], + [ + 37, + 38 + ], + [ + 37, + 40 + ], + [ + 37, + 41 + ], + [ + 37, + 42 + ], + [ + 37, + 43 + ], + [ + 37, + 44 + ], + [ + 37, + 45 + ], + [ + 36, + 45 + ], + [ + 36, + 46 + ], + [ + 35, + 46 + ], + [ + 35, + 47 + ], + [ + 34, + 47 + ], + [ + 34, + 48 + ], + [ + 33, + 48 + ], + [ + 32, + 49 + ], + [ + 33, + 49 + ], + [ + 32, + 50 + ], + [ + 32, + 51 + ], + [ + 31, + 52 + ], + [ + 32, + 52 + ], + [ + 31, + 53 + ], + [ + 31, + 54 + ], + [ + 31, + 55 + ], + [ + 31, + 56 + ], + [ + 32, + 56 + ], + [ + 32, + 57 + ], + [ + 33, + 57 + ], + [ + 33, + 58 + ], + [ + 34, + 58 + ], + [ + 35, + 57 + ], + [ + 34, + 59 + ], + [ + 36, + 56 + ], + [ + 35, + 58 + ], + [ + 36, + 57 + ], + [ + 37, + 56 + ], + [ + 38, + 56 + ], + [ + 39, + 56 + ], + [ + 40, + 56 + ], + [ + 41, + 56 + ], + [ + 42, + 57 + ], + [ + 42, + 56 + ], + [ + 43, + 58 + ], + [ + 43, + 57 + ], + [ + 44, + 57 + ], + [ + 45, + 57 + ], + [ + 46, + 58 + ], + [ + 47, + 59 + ], + [ + 46, + 57 + ], + [ + 47, + 58 + ], + [ + 48, + 58 + ], + [ + 48, + 57 + ], + [ + 49, + 57 + ], + [ + 49, + 56 + ], + [ + 50, + 56 + ], + [ + 49, + 55 + ], + [ + 50, + 55 + ], + [ + 49, + 54 + ], + [ + 49, + 53 + ], + [ + 49, + 52 + ], + [ + 48, + 51 + ], + [ + 49, + 51 + ], + [ + 48, + 50 + ], + [ + 48, + 49 + ], + [ + 48, + 48 + ], + [ + 47, + 48 + ], + [ + 47, + 47 + ], + [ + 48, + 46 + ], + [ + 47, + 46 + ], + [ + 49, + 45 + ], + [ + 48, + 45 + ], + [ + 49, + 44 + ], + [ + 49, + 43 + ], + [ + 48, + 43 + ], + [ + 48, + 42 + ], + [ + 47, + 42 + ], + [ + 47, + 41 + ], + [ + 46, + 41 + ], + [ + 46, + 40 + ], + [ + 45, + 40 + ], + [ + 45, + 39 + ], + [ + 44, + 39 + ], + [ + 44, + 38 + ], + [ + 43, + 38 + ], + [ + 43, + 37 + ], + [ + 42, + 37 + ], + [ + 41, + 37 + ], + [ + 41, + 36 + ] + ] + }, + { + "area_pct": 0.05908203125, + "basin_id": 3, + "boundary": [ + [ + 51, + 78 + ], + [ + 51, + 79 + ], + [ + 50, + 78 + ], + [ + 49, + 78 + ], + [ + 49, + 79 + ], + [ + 48, + 79 + ], + [ + 48, + 80 + ], + [ + 47, + 80 + ], + [ + 47, + 81 + ], + [ + 47, + 82 + ], + [ + 46, + 80 + ], + [ + 47, + 83 + ], + [ + 46, + 81 + ], + [ + 47, + 84 + ], + [ + 47, + 85 + ], + [ + 46, + 85 + ], + [ + 46, + 86 + ], + [ + 46, + 87 + ], + [ + 45, + 87 + ], + [ + 45, + 88 + ], + [ + 44, + 88 + ], + [ + 44, + 89 + ], + [ + 43, + 89 + ], + [ + 43, + 90 + ], + [ + 42, + 90 + ], + [ + 42, + 91 + ], + [ + 43, + 92 + ], + [ + 42, + 92 + ], + [ + 43, + 93 + ], + [ + 43, + 94 + ], + [ + 43, + 95 + ], + [ + 43, + 96 + ], + [ + 43, + 97 + ], + [ + 42, + 98 + ], + [ + 43, + 98 + ], + [ + 42, + 99 + ], + [ + 42, + 100 + ], + [ + 43, + 100 + ], + [ + 43, + 101 + ], + [ + 43, + 102 + ], + [ + 44, + 102 + ], + [ + 44, + 103 + ], + [ + 44, + 104 + ], + [ + 44, + 105 + ], + [ + 45, + 105 + ], + [ + 45, + 106 + ], + [ + 46, + 106 + ], + [ + 46, + 107 + ], + [ + 47, + 107 + ], + [ + 47, + 108 + ], + [ + 48, + 108 + ], + [ + 49, + 108 + ], + [ + 50, + 108 + ], + [ + 51, + 108 + ], + [ + 52, + 109 + ], + [ + 52, + 108 + ], + [ + 53, + 110 + ], + [ + 53, + 109 + ], + [ + 54, + 110 + ], + [ + 54, + 109 + ], + [ + 55, + 109 + ], + [ + 55, + 108 + ], + [ + 55, + 107 + ], + [ + 55, + 106 + ], + [ + 56, + 106 + ], + [ + 57, + 106 + ], + [ + 58, + 106 + ], + [ + 58, + 105 + ], + [ + 59, + 105 + ], + [ + 59, + 104 + ], + [ + 60, + 104 + ], + [ + 60, + 103 + ], + [ + 61, + 103 + ], + [ + 61, + 102 + ], + [ + 61, + 101 + ], + [ + 61, + 100 + ], + [ + 62, + 100 + ], + [ + 62, + 99 + ], + [ + 62, + 98 + ], + [ + 63, + 98 + ], + [ + 63, + 97 + ], + [ + 63, + 96 + ], + [ + 63, + 95 + ], + [ + 63, + 94 + ], + [ + 63, + 93 + ], + [ + 63, + 92 + ], + [ + 63, + 91 + ], + [ + 63, + 90 + ], + [ + 63, + 89 + ], + [ + 62, + 89 + ], + [ + 61, + 89 + ], + [ + 60, + 89 + ], + [ + 59, + 89 + ], + [ + 59, + 88 + ], + [ + 58, + 88 + ], + [ + 58, + 87 + ], + [ + 57, + 87 + ], + [ + 57, + 86 + ], + [ + 56, + 86 + ], + [ + 56, + 85 + ], + [ + 55, + 85 + ], + [ + 55, + 84 + ], + [ + 54, + 84 + ], + [ + 54, + 83 + ], + [ + 53, + 83 + ], + [ + 53, + 82 + ], + [ + 53, + 81 + ], + [ + 52, + 81 + ], + [ + 52, + 80 + ], + [ + 52, + 79 + ] + ] + }, + { + "area_pct": 0.0357666015625, + "basin_id": 4, + "boundary": [ + [ + 47, + 0 + ], + [ + 46, + 0 + ], + [ + 46, + 1 + ], + [ + 46, + 7 + ], + [ + 46, + 8 + ], + [ + 46, + 9 + ], + [ + 46, + 10 + ], + [ + 45, + 2 + ], + [ + 45, + 3 + ], + [ + 45, + 4 + ], + [ + 45, + 5 + ], + [ + 45, + 6 + ], + [ + 45, + 7 + ], + [ + 45, + 10 + ], + [ + 45, + 11 + ], + [ + 45, + 12 + ], + [ + 45, + 13 + ], + [ + 44, + 3 + ], + [ + 44, + 4 + ], + [ + 44, + 13 + ], + [ + 43, + 4 + ], + [ + 44, + 14 + ], + [ + 43, + 5 + ], + [ + 44, + 15 + ], + [ + 42, + 5 + ], + [ + 42, + 6 + ], + [ + 43, + 15 + ], + [ + 42, + 7 + ], + [ + 42, + 14 + ], + [ + 41, + 7 + ], + [ + 42, + 15 + ], + [ + 41, + 8 + ], + [ + 41, + 9 + ], + [ + 41, + 13 + ], + [ + 41, + 14 + ], + [ + 40, + 9 + ], + [ + 40, + 10 + ], + [ + 40, + 11 + ], + [ + 40, + 12 + ], + [ + 40, + 13 + ], + [ + 39, + 11 + ], + [ + 46, + 119 + ], + [ + 46, + 120 + ], + [ + 46, + 121 + ], + [ + 46, + 122 + ], + [ + 46, + 123 + ], + [ + 46, + 124 + ], + [ + 46, + 126 + ], + [ + 46, + 127 + ], + [ + 47, + 113 + ], + [ + 47, + 116 + ], + [ + 47, + 117 + ], + [ + 47, + 118 + ], + [ + 47, + 119 + ], + [ + 47, + 124 + ], + [ + 47, + 125 + ], + [ + 47, + 126 + ], + [ + 47, + 127 + ], + [ + 48, + 113 + ], + [ + 48, + 114 + ], + [ + 48, + 115 + ], + [ + 48, + 116 + ], + [ + 48, + 126 + ], + [ + 48, + 127 + ], + [ + 49, + 113 + ], + [ + 49, + 126 + ], + [ + 50, + 126 + ], + [ + 50, + 113 + ], + [ + 51, + 126 + ], + [ + 51, + 113 + ], + [ + 52, + 127 + ], + [ + 52, + 126 + ], + [ + 52, + 113 + ], + [ + 52, + 112 + ], + [ + 53, + 127 + ], + [ + 53, + 112 + ], + [ + 53, + 111 + ], + [ + 54, + 111 + ], + [ + 55, + 111 + ], + [ + 55, + 110 + ], + [ + 56, + 114 + ], + [ + 58, + 127 + ], + [ + 56, + 113 + ], + [ + 58, + 126 + ], + [ + 56, + 112 + ], + [ + 56, + 111 + ], + [ + 57, + 115 + ], + [ + 57, + 114 + ], + [ + 59, + 126 + ], + [ + 59, + 125 + ], + [ + 58, + 117 + ], + [ + 58, + 116 + ], + [ + 58, + 115 + ], + [ + 60, + 125 + ], + [ + 60, + 124 + ], + [ + 59, + 118 + ], + [ + 60, + 123 + ], + [ + 59, + 117 + ], + [ + 60, + 122 + ], + [ + 60, + 121 + ], + [ + 60, + 120 + ], + [ + 61, + 124 + ], + [ + 60, + 119 + ], + [ + 60, + 118 + ], + [ + 58, + 2 + ], + [ + 58, + 1 + ], + [ + 58, + 0 + ], + [ + 57, + 3 + ], + [ + 57, + 2 + ], + [ + 56, + 2 + ], + [ + 56, + 1 + ], + [ + 55, + 1 + ], + [ + 54, + 1 + ], + [ + 54, + 0 + ], + [ + 53, + 0 + ] + ] + }, + { + "area_pct": 0.03271484375, + "basin_id": 5, + "boundary": [ + [ + 57, + 65 + ], + [ + 57, + 66 + ], + [ + 56, + 66 + ], + [ + 55, + 66 + ], + [ + 54, + 66 + ], + [ + 54, + 67 + ], + [ + 53, + 67 + ], + [ + 53, + 68 + ], + [ + 52, + 68 + ], + [ + 51, + 67 + ], + [ + 50, + 66 + ], + [ + 50, + 67 + ], + [ + 51, + 68 + ], + [ + 49, + 67 + ], + [ + 49, + 68 + ], + [ + 49, + 69 + ], + [ + 49, + 70 + ], + [ + 49, + 71 + ], + [ + 50, + 72 + ], + [ + 49, + 72 + ], + [ + 51, + 73 + ], + [ + 50, + 73 + ], + [ + 52, + 74 + ], + [ + 51, + 74 + ], + [ + 52, + 75 + ], + [ + 52, + 76 + ], + [ + 53, + 76 + ], + [ + 53, + 77 + ], + [ + 53, + 78 + ], + [ + 53, + 79 + ], + [ + 53, + 80 + ], + [ + 54, + 80 + ], + [ + 54, + 81 + ], + [ + 54, + 82 + ], + [ + 55, + 82 + ], + [ + 55, + 83 + ], + [ + 56, + 83 + ], + [ + 56, + 84 + ], + [ + 57, + 84 + ], + [ + 57, + 85 + ], + [ + 58, + 86 + ], + [ + 58, + 85 + ], + [ + 59, + 87 + ], + [ + 59, + 86 + ], + [ + 60, + 88 + ], + [ + 60, + 87 + ], + [ + 61, + 88 + ], + [ + 62, + 88 + ], + [ + 63, + 88 + ], + [ + 63, + 87 + ], + [ + 63, + 86 + ], + [ + 63, + 85 + ], + [ + 63, + 84 + ], + [ + 63, + 83 + ], + [ + 63, + 82 + ], + [ + 63, + 81 + ], + [ + 63, + 80 + ], + [ + 63, + 79 + ], + [ + 63, + 78 + ], + [ + 63, + 77 + ], + [ + 63, + 76 + ], + [ + 63, + 75 + ], + [ + 63, + 74 + ], + [ + 63, + 73 + ], + [ + 63, + 72 + ], + [ + 63, + 71 + ], + [ + 63, + 70 + ], + [ + 63, + 69 + ], + [ + 63, + 68 + ], + [ + 63, + 67 + ], + [ + 63, + 66 + ], + [ + 63, + 65 + ], + [ + 63, + 64 + ], + [ + 63, + 63 + ], + [ + 63, + 62 + ], + [ + 62, + 64 + ], + [ + 62, + 63 + ], + [ + 61, + 65 + ], + [ + 61, + 64 + ], + [ + 60, + 65 + ], + [ + 59, + 65 + ], + [ + 58, + 65 + ], + [ + 58, + 64 + ] + ] + } + ], + "river_network": { + "confluences": [], + "mouths": [], + "river_cells": [] + } + }, + "source_heightmap": "../wiki/star-systems/GJ-1/bodies/GJ1c/heightmap.png", + "source_sha256": "195af5eaf3b2c0591ebed160a43d6e6935bba868cf9cd836915ebd65b66b67a4" +}