From 3dbcec688fcf1c8025aeca91350001677b2b10de Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Thu, 16 Apr 2026 19:03:07 -0700 Subject: [PATCH] Close out EventEffects descriptor metadata --- README.md | 11 +- .../exports/rt3-1.06/event-effects-table.json | 5730 +++++++++++++++++ crates/rrt-cli/src/main.rs | 10 + crates/rrt-fixtures/src/schema.rs | 10 + crates/rrt-model/src/lib.rs | 1 + crates/rrt-runtime/src/import.rs | 247 + crates/rrt-runtime/src/smp.rs | 420 +- crates/rrt-runtime/src/summary.rs | 91 + docs/README.md | 19 +- docs/runtime-rehost-plan.md | 26 +- ...-rating-descriptor-context-save-slice.json | 228 + ...-rating-descriptor-save-slice-fixture.json | 53 + ...rger-premium-shell-save-slice-fixture.json | 39 + ...event-merger-premium-shell-save-slice.json | 219 + tools/py/extract_event_effects.py | 75 + 15 files changed, 7156 insertions(+), 23 deletions(-) create mode 100644 artifacts/exports/rt3-1.06/event-effects-table.json create mode 100644 fixtures/runtime/packed-event-credit-rating-descriptor-context-save-slice.json create mode 100644 fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json create mode 100644 fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json create mode 100644 fixtures/runtime/packed-event-merger-premium-shell-save-slice.json create mode 100644 tools/py/extract_event_effects.py diff --git a/README.md b/README.md index 3b8ca6a..ddc444c 100644 --- a/README.md +++ b/README.md @@ -29,9 +29,14 @@ chairman ordinals remain explicit frontier. Checked-in save-slice documents can now also carry explicit company rosters and chairman-profile tables, so the current company-targeted and chairman-targeted descriptor and condition batches can execute from standalone save-slice fixtures without overlay snapshots when that context is present; raw `.gms` inspection -still does not reconstruct those company/chairman collections automatically. A generic -company-governance scalar effect surface now exists in runtime too, but real governance descriptor -ids are still deferred until the checked-in effect-table evidence is stronger. The first grounded +still does not reconstruct those company/chairman collections automatically. A checked-in +`EventEffects` export now exists too in +`artifacts/exports/rt3-1.06/event-effects-table.json`, and the first recovered governance +descriptor tranche now imports through the generic company-governance scalar effect surface: +descriptor `56` `Credit Rating` and descriptor `57` `Prime Rate` execute from ordinary real packed +rows, while adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` +and `58` `Merger Premium` now land on explicit shell-owned parity instead of anonymous unmapped +descriptor residue. The first grounded condition-side unlock now exists for negative-sentinel `raw_condition_id = -1` company scopes, and the first ordinary nonnegative condition batch now executes too: numeric-threshold company finance, company track, aggregate territory track, and company-territory track rows can import diff --git a/artifacts/exports/rt3-1.06/event-effects-table.json b/artifacts/exports/rt3-1.06/event-effects-table.json new file mode 100644 index 0000000..df7fd61 --- /dev/null +++ b/artifacts/exports/rt3-1.06/event-effects-table.json @@ -0,0 +1,5730 @@ +{ + "table_base_va": "0x00610398", + "row_stride_hex": "0x6e", + "descriptor_count": 520, + "binary_path_hint": "rt3_wineprefix/drive_c/rt3/RT3.exe", + "language_path_hint": "rt3_wineprefix/drive_c/rt3/Data/Language/RT3.lng", + "binary_sha256": "01b0d2496cddefd80e7e8678930e00b13eb8607dd4960096f527564f02af36d4", + "descriptors": [ + { + "row_index": 0, + "descriptor_id": 0, + "selector_order": 1.0, + "target_mask_bits": 2, + "label_id": 1200, + "label": "XXX", + "signature_byte_0x63": 2, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "02060203000000b0040000" + }, + { + "row_index": 1, + "descriptor_id": 1, + "selector_order": 2.0, + "target_mask_bits": 2, + "label_id": 2218, + "label": "Player Cash", + "signature_byte_0x63": 2, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "02860203000000aa080000" + }, + { + "row_index": 2, + "descriptor_id": 2, + "selector_order": 3.0, + "target_mask_bits": 1, + "label_id": 2228, + "label": "Company Cash", + "signature_byte_0x63": 2, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "02860103000000b4080000" + }, + { + "row_index": 3, + "descriptor_id": 3, + "selector_order": 4.0, + "target_mask_bits": 5, + "label_id": 2345, + "label": "Territory - Allow All", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "0081050300000029090000" + }, + { + "row_index": 4, + "descriptor_id": 4, + "selector_order": 5.0, + "target_mask_bits": 2, + "label_id": 2346, + "label": "Game Won (Bronze)", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000102030000002a090000" + }, + { + "row_index": 5, + "descriptor_id": 5, + "selector_order": 6.0, + "target_mask_bits": 2, + "label_id": 2347, + "label": "Game Won (Silver)", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000102030000002b090000" + }, + { + "row_index": 6, + "descriptor_id": 6, + "selector_order": 7.0, + "target_mask_bits": 2, + "label_id": 2348, + "label": "Game Won (Gold)", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000102030000002c090000" + }, + { + "row_index": 7, + "descriptor_id": 7, + "selector_order": 8.0, + "target_mask_bits": 2, + "label_id": 2349, + "label": "Game Lost", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000102030000002d090000" + }, + { + "row_index": 8, + "descriptor_id": 8, + "selector_order": 9.0, + "target_mask_bits": 8, + "label_id": 2350, + "label": "Economic Status", + "signature_byte_0x63": 3, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "038608030000002e090000" + }, + { + "row_index": 9, + "descriptor_id": 9, + "selector_order": 10.0, + "target_mask_bits": 1, + "label_id": 2351, + "label": "Confiscate All", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000101780900002f090000" + }, + { + "row_index": 10, + "descriptor_id": 10, + "selector_order": 11.0, + "target_mask_bits": 1, + "label_id": 2352, + "label": "Confiscate Track", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001017909000030090000" + }, + { + "row_index": 11, + "descriptor_id": 11, + "selector_order": 12.0, + "target_mask_bits": 1, + "label_id": 2353, + "label": "Confiscate Stations", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001017a09000031090000" + }, + { + "row_index": 12, + "descriptor_id": 12, + "selector_order": 13.0, + "target_mask_bits": 1, + "label_id": 2354, + "label": "Confiscate Buildings", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001017b09000032090000" + }, + { + "row_index": 13, + "descriptor_id": 13, + "selector_order": 14.0, + "target_mask_bits": 1, + "label_id": 2355, + "label": "Deactivate Company", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001010300000033090000" + }, + { + "row_index": 14, + "descriptor_id": 14, + "selector_order": 15.0, + "target_mask_bits": 2, + "label_id": 2356, + "label": "Deactivate Player", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001020300000034090000" + }, + { + "row_index": 15, + "descriptor_id": 15, + "selector_order": 16.0, + "target_mask_bits": 13, + "label_id": 2357, + "label": "Retire Train", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d0300000035090000" + }, + { + "row_index": 16, + "descriptor_id": 16, + "selector_order": 17.0, + "target_mask_bits": 1, + "label_id": 2358, + "label": "Company Track Pieces Buildable", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "0006010300000036090000" + }, + { + "row_index": 17, + "descriptor_id": 17, + "selector_order": 18.0, + "target_mask_bits": 13, + "label_id": 2359, + "label": "Destroy All", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d0300000037090000" + }, + { + "row_index": 18, + "descriptor_id": 18, + "selector_order": 19.0, + "target_mask_bits": 13, + "label_id": 2360, + "label": "Destroy Track", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d0300000038090000" + }, + { + "row_index": 19, + "descriptor_id": 19, + "selector_order": 20.0, + "target_mask_bits": 13, + "label_id": 2361, + "label": "Destroy Trains", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d0300000039090000" + }, + { + "row_index": 20, + "descriptor_id": 20, + "selector_order": 21.0, + "target_mask_bits": 13, + "label_id": 2362, + "label": "Destroy Stations", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d030000003a090000" + }, + { + "row_index": 21, + "descriptor_id": 21, + "selector_order": 22.0, + "target_mask_bits": 13, + "label_id": 2363, + "label": "Destroy Buildings", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "00010d030000003b090000" + }, + { + "row_index": 22, + "descriptor_id": 22, + "selector_order": 23.0, + "target_mask_bits": 8, + "label_id": 2364, + "label": "Start Storm", + "signature_byte_0x63": 3, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "0386087c0900003c090000" + }, + { + "row_index": 23, + "descriptor_id": 23, + "selector_order": 11.199999809265137, + "target_mask_bits": 1, + "label_id": 2365, + "label": "Confiscate Trains", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001017d0900003d090000" + }, + { + "row_index": 24, + "descriptor_id": 24, + "selector_order": 15.5, + "target_mask_bits": 2, + "label_id": 3178, + "label": "Set to human control", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "0001026b0c00006a0c0000" + }, + { + "row_index": 25, + "descriptor_id": 25, + "selector_order": 23.0, + "target_mask_bits": 8, + "label_id": 3186, + "label": "Earthquake - Light", + "signature_byte_0x63": 0, + "signature_byte_0x64": 132, + "signature_hex_0x63_0x6d": "008408760c0000720c0000" + }, + { + "row_index": 26, + "descriptor_id": 26, + "selector_order": 23.0, + "target_mask_bits": 8, + "label_id": 3187, + "label": "Earthquake - Medium", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000108760c0000730c0000" + }, + { + "row_index": 27, + "descriptor_id": 27, + "selector_order": 23.0, + "target_mask_bits": 8, + "label_id": 3188, + "label": "Earthquake - Heavy", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000108760c0000740c0000" + }, + { + "row_index": 28, + "descriptor_id": 28, + "selector_order": 23.0, + "target_mask_bits": 8, + "label_id": 3189, + "label": "Earthquake - Severe", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000108760c0000750c0000" + }, + { + "row_index": 29, + "descriptor_id": 29, + "selector_order": 30.0, + "target_mask_bits": 8, + "label_id": 4310, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 1, + "signature_hex_0x63_0x6d": "000108d7100000d6100000" + }, + { + "row_index": 30, + "descriptor_id": 30, + "selector_order": 31.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 31, + "descriptor_id": 31, + "selector_order": 32.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 32, + "descriptor_id": 32, + "selector_order": 33.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 33, + "descriptor_id": 33, + "selector_order": 34.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 34, + "descriptor_id": 34, + "selector_order": 35.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 35, + "descriptor_id": 35, + "selector_order": 36.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 36, + "descriptor_id": 36, + "selector_order": 37.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 37, + "descriptor_id": 37, + "selector_order": 38.0, + "target_mask_bits": 11, + "label_id": 3, + "label": "", + "signature_byte_0x63": 0, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "00060b0300000003000000" + }, + { + "row_index": 38, + "descriptor_id": 38, + "selector_order": 39.0, + "target_mask_bits": 2, + "label_id": 1200, + "label": "XXX", + "signature_byte_0x63": 2, + "signature_byte_0x64": 6, + "signature_hex_0x63_0x6d": "02060203000000b0040000" + }, + { + "row_index": 39, + "descriptor_id": 39, + "selector_order": 40.0, + "target_mask_bits": 8, + "label_id": 2241, + "label": "Game Variable 1", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0803000000c1080000" + }, + { + "row_index": 40, + "descriptor_id": 40, + "selector_order": 41.0, + "target_mask_bits": 8, + "label_id": 2242, + "label": "Game Variable 2", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0803000000c2080000" + }, + { + "row_index": 41, + "descriptor_id": 41, + "selector_order": 42.0, + "target_mask_bits": 8, + "label_id": 2243, + "label": "Game Variable 3", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0803000000c3080000" + }, + { + "row_index": 42, + "descriptor_id": 42, + "selector_order": 43.0, + "target_mask_bits": 8, + "label_id": 2244, + "label": "Game Variable 4", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0803000000c4080000" + }, + { + "row_index": 43, + "descriptor_id": 43, + "selector_order": 44.0, + "target_mask_bits": 1, + "label_id": 2245, + "label": "Company Variable 1", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0103000000c5080000" + }, + { + "row_index": 44, + "descriptor_id": 44, + "selector_order": 45.0, + "target_mask_bits": 1, + "label_id": 2246, + "label": "Company Variable 2", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0103000000c6080000" + }, + { + "row_index": 45, + "descriptor_id": 45, + "selector_order": 46.0, + "target_mask_bits": 1, + "label_id": 2247, + "label": "Company Variable 3", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0103000000c7080000" + }, + { + "row_index": 46, + "descriptor_id": 46, + "selector_order": 47.0, + "target_mask_bits": 1, + "label_id": 2248, + "label": "Company Variable 4", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0103000000c8080000" + }, + { + "row_index": 47, + "descriptor_id": 47, + "selector_order": 48.0, + "target_mask_bits": 2, + "label_id": 2249, + "label": "Player Variable 1", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0203000000c9080000" + }, + { + "row_index": 48, + "descriptor_id": 48, + "selector_order": 49.0, + "target_mask_bits": 2, + "label_id": 2250, + "label": "Player Variable 2", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0203000000ca080000" + }, + { + "row_index": 49, + "descriptor_id": 49, + "selector_order": 50.0, + "target_mask_bits": 2, + "label_id": 2251, + "label": "Player Variable 3", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0203000000cb080000" + }, + { + "row_index": 50, + "descriptor_id": 50, + "selector_order": 51.0, + "target_mask_bits": 2, + "label_id": 2252, + "label": "Player Variable 4", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0203000000cc080000" + }, + { + "row_index": 51, + "descriptor_id": 51, + "selector_order": 52.0, + "target_mask_bits": 4, + "label_id": 2253, + "label": "Territory Variable 1", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0403000000cd080000" + }, + { + "row_index": 52, + "descriptor_id": 52, + "selector_order": 53.0, + "target_mask_bits": 4, + "label_id": 2254, + "label": "Territory Variable 2", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0403000000ce080000" + }, + { + "row_index": 53, + "descriptor_id": 53, + "selector_order": 54.0, + "target_mask_bits": 4, + "label_id": 2255, + "label": "Territory Variable 3", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0403000000cf080000" + }, + { + "row_index": 54, + "descriptor_id": 54, + "selector_order": 55.0, + "target_mask_bits": 4, + "label_id": 2256, + "label": "Territory Variable 4", + "signature_byte_0x63": 0, + "signature_byte_0x64": 143, + "signature_hex_0x63_0x6d": "008f0403000000d0080000" + }, + { + "row_index": 55, + "descriptor_id": 55, + "selector_order": 56.0, + "target_mask_bits": 11, + "label_id": 2366, + "label": "Stock Prices", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b7e0900003e090000" + }, + { + "row_index": 56, + "descriptor_id": 56, + "selector_order": 57.0, + "target_mask_bits": 11, + "label_id": 2367, + "label": "Credit Rating", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820b7f0900003f090000" + }, + { + "row_index": 57, + "descriptor_id": 57, + "selector_order": 58.0, + "target_mask_bits": 11, + "label_id": 2368, + "label": "Prime Rate", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820b8009000040090000" + }, + { + "row_index": 58, + "descriptor_id": 58, + "selector_order": 59.0, + "target_mask_bits": 11, + "label_id": 2369, + "label": "Merger Premium", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b8109000041090000" + }, + { + "row_index": 59, + "descriptor_id": 59, + "selector_order": 60.0, + "target_mask_bits": 15, + "label_id": 2370, + "label": "Build Stations Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000042090000" + }, + { + "row_index": 60, + "descriptor_id": 60, + "selector_order": 61.0, + "target_mask_bits": 15, + "label_id": 2371, + "label": "Buy/Build Industries Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000043090000" + }, + { + "row_index": 61, + "descriptor_id": 61, + "selector_order": 62.0, + "target_mask_bits": 15, + "label_id": 2372, + "label": "Overall track cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000044090000" + }, + { + "row_index": 62, + "descriptor_id": 62, + "selector_order": 63.0, + "target_mask_bits": 15, + "label_id": 2373, + "label": "Graded track cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000045090000" + }, + { + "row_index": 63, + "descriptor_id": 63, + "selector_order": 64.0, + "target_mask_bits": 15, + "label_id": 2374, + "label": "Electric track cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000046090000" + }, + { + "row_index": 64, + "descriptor_id": 64, + "selector_order": 65.0, + "target_mask_bits": 15, + "label_id": 2375, + "label": "Bridge Building Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000047090000" + }, + { + "row_index": 65, + "descriptor_id": 65, + "selector_order": 66.0, + "target_mask_bits": 15, + "label_id": 2376, + "label": "Tunnel Building Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000048090000" + }, + { + "row_index": 66, + "descriptor_id": 66, + "selector_order": 67.0, + "target_mask_bits": 11, + "label_id": 2377, + "label": "Track Maintenance Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b8209000049090000" + }, + { + "row_index": 67, + "descriptor_id": 67, + "selector_order": 68.0, + "target_mask_bits": 11, + "label_id": 2378, + "label": "Station Maintenance Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004a090000" + }, + { + "row_index": 68, + "descriptor_id": 68, + "selector_order": 69.0, + "target_mask_bits": 11, + "label_id": 2379, + "label": "Company Overhead Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004b090000" + }, + { + "row_index": 69, + "descriptor_id": 69, + "selector_order": 70.0, + "target_mask_bits": 11, + "label_id": 2380, + "label": "Engine Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004c090000" + }, + { + "row_index": 70, + "descriptor_id": 70, + "selector_order": 71.0, + "target_mask_bits": 11, + "label_id": 2381, + "label": "Steam Engine Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004d090000" + }, + { + "row_index": 71, + "descriptor_id": 71, + "selector_order": 72.0, + "target_mask_bits": 11, + "label_id": 2382, + "label": "Diesel Engine Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004e090000" + }, + { + "row_index": 72, + "descriptor_id": 72, + "selector_order": 73.0, + "target_mask_bits": 11, + "label_id": 2383, + "label": "Electric Engine Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b820900004f090000" + }, + { + "row_index": 73, + "descriptor_id": 73, + "selector_order": 74.0, + "target_mask_bits": 15, + "label_id": 2384, + "label": "Engine Fuel Cost", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8209000050090000" + }, + { + "row_index": 74, + "descriptor_id": 74, + "selector_order": 75.0, + "target_mask_bits": 15, + "label_id": 2385, + "label": "Steam Engine Fuel Cost", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8209000051090000" + }, + { + "row_index": 75, + "descriptor_id": 75, + "selector_order": 76.0, + "target_mask_bits": 15, + "label_id": 2386, + "label": "Diesel Engine Fuel Cost", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8209000052090000" + }, + { + "row_index": 76, + "descriptor_id": 76, + "selector_order": 77.0, + "target_mask_bits": 15, + "label_id": 2387, + "label": "Electric Engine Fuel Cost", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8209000053090000" + }, + { + "row_index": 77, + "descriptor_id": 77, + "selector_order": 78.0, + "target_mask_bits": 15, + "label_id": 2388, + "label": "Engine Maintenance", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000054090000" + }, + { + "row_index": 78, + "descriptor_id": 78, + "selector_order": 79.0, + "target_mask_bits": 15, + "label_id": 2389, + "label": "Steam Maintenance", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000055090000" + }, + { + "row_index": 79, + "descriptor_id": 79, + "selector_order": 80.0, + "target_mask_bits": 15, + "label_id": 2390, + "label": "Diesel Maintenance", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000056090000" + }, + { + "row_index": 80, + "descriptor_id": 80, + "selector_order": 81.0, + "target_mask_bits": 15, + "label_id": 2391, + "label": "Electric Maintenance", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8209000057090000" + }, + { + "row_index": 81, + "descriptor_id": 81, + "selector_order": 82.0, + "target_mask_bits": 15, + "label_id": 2392, + "label": "All Engine Speeds", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000058090000" + }, + { + "row_index": 82, + "descriptor_id": 82, + "selector_order": 83.0, + "target_mask_bits": 15, + "label_id": 2393, + "label": "Steam Engine Speeds", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000059090000" + }, + { + "row_index": 83, + "descriptor_id": 83, + "selector_order": 84.0, + "target_mask_bits": 15, + "label_id": 2394, + "label": "Diesel Engine Speeds", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f830900005a090000" + }, + { + "row_index": 84, + "descriptor_id": 84, + "selector_order": 85.0, + "target_mask_bits": 15, + "label_id": 2395, + "label": "Electric Engine Speeds", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f830900005b090000" + }, + { + "row_index": 85, + "descriptor_id": 85, + "selector_order": 86.0, + "target_mask_bits": 15, + "label_id": 2396, + "label": "All Engine Reliability", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f830900005c090000" + }, + { + "row_index": 86, + "descriptor_id": 86, + "selector_order": 87.0, + "target_mask_bits": 15, + "label_id": 2397, + "label": "Steam Engine Reliability", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f830900005d090000" + }, + { + "row_index": 87, + "descriptor_id": 87, + "selector_order": 88.0, + "target_mask_bits": 15, + "label_id": 2398, + "label": "Diesel Engine Reliability", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f830900005e090000" + }, + { + "row_index": 88, + "descriptor_id": 88, + "selector_order": 89.0, + "target_mask_bits": 15, + "label_id": 2399, + "label": "Electric Engine Reliability", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f830900005f090000" + }, + { + "row_index": 89, + "descriptor_id": 89, + "selector_order": 90.0, + "target_mask_bits": 15, + "label_id": 2400, + "label": "All Engine Pulling Power", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000060090000" + }, + { + "row_index": 90, + "descriptor_id": 90, + "selector_order": 91.0, + "target_mask_bits": 15, + "label_id": 2401, + "label": "Steam Pulling Power", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000061090000" + }, + { + "row_index": 91, + "descriptor_id": 91, + "selector_order": 92.0, + "target_mask_bits": 15, + "label_id": 2402, + "label": "Diesel Pulling Power", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000062090000" + }, + { + "row_index": 92, + "descriptor_id": 92, + "selector_order": 93.0, + "target_mask_bits": 15, + "label_id": 2403, + "label": "Electric Pulling Power", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8309000063090000" + }, + { + "row_index": 93, + "descriptor_id": 93, + "selector_order": 94.0, + "target_mask_bits": 15, + "label_id": 2404, + "label": "All Acceleration", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8309000064090000" + }, + { + "row_index": 94, + "descriptor_id": 94, + "selector_order": 95.0, + "target_mask_bits": 15, + "label_id": 2405, + "label": "Steam Acceleration", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8309000065090000" + }, + { + "row_index": 95, + "descriptor_id": 95, + "selector_order": 96.0, + "target_mask_bits": 15, + "label_id": 2406, + "label": "Diesel Acceleration", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8309000066090000" + }, + { + "row_index": 96, + "descriptor_id": 96, + "selector_order": 97.0, + "target_mask_bits": 15, + "label_id": 2407, + "label": "Electric Acceleration", + "signature_byte_0x63": 3, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "03820f8309000067090000" + }, + { + "row_index": 97, + "descriptor_id": 97, + "selector_order": 98.0, + "target_mask_bits": 15, + "label_id": 2408, + "label": "Load/Unload Time", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8409000068090000" + }, + { + "row_index": 98, + "descriptor_id": 98, + "selector_order": 99.0, + "target_mask_bits": 15, + "label_id": 2409, + "label": "Oil Usage Rate", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8409000069090000" + }, + { + "row_index": 99, + "descriptor_id": 99, + "selector_order": 100.0, + "target_mask_bits": 15, + "label_id": 2410, + "label": "Sand Usage Rate", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f840900006a090000" + }, + { + "row_index": 100, + "descriptor_id": 100, + "selector_order": 101.0, + "target_mask_bits": 15, + "label_id": 2411, + "label": "Water Usage Rate", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f840900006b090000" + }, + { + "row_index": 101, + "descriptor_id": 101, + "selector_order": 102.0, + "target_mask_bits": 15, + "label_id": 2412, + "label": "Bulldoze Buildings Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f850900006c090000" + }, + { + "row_index": 102, + "descriptor_id": 102, + "selector_order": 103.0, + "target_mask_bits": 15, + "label_id": 2413, + "label": "Hotel Revenue", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f030000006d090000" + }, + { + "row_index": 103, + "descriptor_id": 103, + "selector_order": 104.0, + "target_mask_bits": 15, + "label_id": 2414, + "label": "Tavern Revenue", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f030000006e090000" + }, + { + "row_index": 104, + "descriptor_id": 104, + "selector_order": 105.0, + "target_mask_bits": 15, + "label_id": 2415, + "label": "Restaurant Revenue", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f030000006f090000" + }, + { + "row_index": 105, + "descriptor_id": 105, + "selector_order": 106.0, + "target_mask_bits": 8, + "label_id": 2416, + "label": "All Cargo Prices", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000070090000" + }, + { + "row_index": 106, + "descriptor_id": 106, + "selector_order": 107.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 107, + "descriptor_id": 107, + "selector_order": 108.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 108, + "descriptor_id": 108, + "selector_order": 109.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 109, + "descriptor_id": 109, + "selector_order": 110.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 110, + "descriptor_id": 110, + "selector_order": 111.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 111, + "descriptor_id": 111, + "selector_order": 112.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 112, + "descriptor_id": 112, + "selector_order": 113.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 113, + "descriptor_id": 113, + "selector_order": 114.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 114, + "descriptor_id": 114, + "selector_order": 115.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 115, + "descriptor_id": 115, + "selector_order": 116.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 116, + "descriptor_id": 116, + "selector_order": 117.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 117, + "descriptor_id": 117, + "selector_order": 118.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 118, + "descriptor_id": 118, + "selector_order": 119.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 119, + "descriptor_id": 119, + "selector_order": 120.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 120, + "descriptor_id": 120, + "selector_order": 121.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 121, + "descriptor_id": 121, + "selector_order": 122.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 122, + "descriptor_id": 122, + "selector_order": 123.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 123, + "descriptor_id": 123, + "selector_order": 124.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 124, + "descriptor_id": 124, + "selector_order": 125.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 125, + "descriptor_id": 125, + "selector_order": 126.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 126, + "descriptor_id": 126, + "selector_order": 127.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 127, + "descriptor_id": 127, + "selector_order": 128.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 128, + "descriptor_id": 128, + "selector_order": 129.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 129, + "descriptor_id": 129, + "selector_order": 130.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 130, + "descriptor_id": 130, + "selector_order": 131.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 131, + "descriptor_id": 131, + "selector_order": 132.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 132, + "descriptor_id": 132, + "selector_order": 133.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 133, + "descriptor_id": 133, + "selector_order": 134.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 134, + "descriptor_id": 134, + "selector_order": 135.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 135, + "descriptor_id": 135, + "selector_order": 136.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 136, + "descriptor_id": 136, + "selector_order": 137.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 137, + "descriptor_id": 137, + "selector_order": 138.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 138, + "descriptor_id": 138, + "selector_order": 139.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 139, + "descriptor_id": 139, + "selector_order": 140.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 140, + "descriptor_id": 140, + "selector_order": 141.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 141, + "descriptor_id": 141, + "selector_order": 142.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 142, + "descriptor_id": 142, + "selector_order": 143.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 143, + "descriptor_id": 143, + "selector_order": 144.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 144, + "descriptor_id": 144, + "selector_order": 145.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 145, + "descriptor_id": 145, + "selector_order": 146.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 146, + "descriptor_id": 146, + "selector_order": 147.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 147, + "descriptor_id": 147, + "selector_order": 148.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 148, + "descriptor_id": 148, + "selector_order": 149.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 149, + "descriptor_id": 149, + "selector_order": 150.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 150, + "descriptor_id": 150, + "selector_order": 151.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 151, + "descriptor_id": 151, + "selector_order": 152.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 152, + "descriptor_id": 152, + "selector_order": 153.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 153, + "descriptor_id": 153, + "selector_order": 154.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 154, + "descriptor_id": 154, + "selector_order": 155.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 155, + "descriptor_id": 155, + "selector_order": 156.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 156, + "descriptor_id": 156, + "selector_order": 157.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 157, + "descriptor_id": 157, + "selector_order": 158.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 158, + "descriptor_id": 158, + "selector_order": 159.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 159, + "descriptor_id": 159, + "selector_order": 160.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 160, + "descriptor_id": 160, + "selector_order": 161.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 161, + "descriptor_id": 161, + "selector_order": 162.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 162, + "descriptor_id": 162, + "selector_order": 163.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 163, + "descriptor_id": 163, + "selector_order": 164.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 164, + "descriptor_id": 164, + "selector_order": 165.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 165, + "descriptor_id": 165, + "selector_order": 166.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 166, + "descriptor_id": 166, + "selector_order": 167.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 167, + "descriptor_id": 167, + "selector_order": 168.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 168, + "descriptor_id": 168, + "selector_order": 169.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 169, + "descriptor_id": 169, + "selector_order": 170.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 170, + "descriptor_id": 170, + "selector_order": 171.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 171, + "descriptor_id": 171, + "selector_order": 172.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 172, + "descriptor_id": 172, + "selector_order": 173.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 173, + "descriptor_id": 173, + "selector_order": 174.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 174, + "descriptor_id": 174, + "selector_order": 175.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 175, + "descriptor_id": 175, + "selector_order": 176.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 176, + "descriptor_id": 176, + "selector_order": 177.0, + "target_mask_bits": 8, + "label_id": 2417, + "label": "Unknown Cargo Price", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "0182080300000071090000" + }, + { + "row_index": 177, + "descriptor_id": 177, + "selector_order": 178.0, + "target_mask_bits": 15, + "label_id": 2418, + "label": "All Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f8609000072090000" + }, + { + "row_index": 178, + "descriptor_id": 178, + "selector_order": 179.0, + "target_mask_bits": 15, + "label_id": 2419, + "label": "All Factory Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000073090000" + }, + { + "row_index": 179, + "descriptor_id": 179, + "selector_order": 180.0, + "target_mask_bits": 15, + "label_id": 2420, + "label": "All Farm/Mine Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000074090000" + }, + { + "row_index": 180, + "descriptor_id": 180, + "selector_order": 181.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 181, + "descriptor_id": 181, + "selector_order": 182.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 182, + "descriptor_id": 182, + "selector_order": 183.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 183, + "descriptor_id": 183, + "selector_order": 184.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 184, + "descriptor_id": 184, + "selector_order": 185.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 185, + "descriptor_id": 185, + "selector_order": 186.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 186, + "descriptor_id": 186, + "selector_order": 187.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 187, + "descriptor_id": 187, + "selector_order": 188.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 188, + "descriptor_id": 188, + "selector_order": 189.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 189, + "descriptor_id": 189, + "selector_order": 190.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 190, + "descriptor_id": 190, + "selector_order": 191.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 191, + "descriptor_id": 191, + "selector_order": 192.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 192, + "descriptor_id": 192, + "selector_order": 193.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 193, + "descriptor_id": 193, + "selector_order": 194.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 194, + "descriptor_id": 194, + "selector_order": 195.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 195, + "descriptor_id": 195, + "selector_order": 196.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 196, + "descriptor_id": 196, + "selector_order": 197.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 197, + "descriptor_id": 197, + "selector_order": 198.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 198, + "descriptor_id": 198, + "selector_order": 199.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 199, + "descriptor_id": 199, + "selector_order": 200.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 200, + "descriptor_id": 200, + "selector_order": 201.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 201, + "descriptor_id": 201, + "selector_order": 202.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 202, + "descriptor_id": 202, + "selector_order": 203.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 203, + "descriptor_id": 203, + "selector_order": 204.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 204, + "descriptor_id": 204, + "selector_order": 205.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 205, + "descriptor_id": 205, + "selector_order": 206.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 206, + "descriptor_id": 206, + "selector_order": 207.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 207, + "descriptor_id": 207, + "selector_order": 208.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 208, + "descriptor_id": 208, + "selector_order": 209.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 209, + "descriptor_id": 209, + "selector_order": 210.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 210, + "descriptor_id": 210, + "selector_order": 211.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 211, + "descriptor_id": 211, + "selector_order": 212.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 212, + "descriptor_id": 212, + "selector_order": 213.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 213, + "descriptor_id": 213, + "selector_order": 214.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 214, + "descriptor_id": 214, + "selector_order": 215.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 215, + "descriptor_id": 215, + "selector_order": 216.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 216, + "descriptor_id": 216, + "selector_order": 217.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 217, + "descriptor_id": 217, + "selector_order": 218.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 218, + "descriptor_id": 218, + "selector_order": 219.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 219, + "descriptor_id": 219, + "selector_order": 220.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 220, + "descriptor_id": 220, + "selector_order": 221.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 221, + "descriptor_id": 221, + "selector_order": 222.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 222, + "descriptor_id": 222, + "selector_order": 223.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 223, + "descriptor_id": 223, + "selector_order": 224.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 224, + "descriptor_id": 224, + "selector_order": 225.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 225, + "descriptor_id": 225, + "selector_order": 226.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 226, + "descriptor_id": 226, + "selector_order": 227.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 227, + "descriptor_id": 227, + "selector_order": 228.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 228, + "descriptor_id": 228, + "selector_order": 229.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 229, + "descriptor_id": 229, + "selector_order": 230.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 230, + "descriptor_id": 230, + "selector_order": 231.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 231, + "descriptor_id": 231, + "selector_order": 232.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 232, + "descriptor_id": 232, + "selector_order": 233.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 233, + "descriptor_id": 233, + "selector_order": 234.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 234, + "descriptor_id": 234, + "selector_order": 235.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 235, + "descriptor_id": 235, + "selector_order": 236.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 236, + "descriptor_id": 236, + "selector_order": 237.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 237, + "descriptor_id": 237, + "selector_order": 238.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 238, + "descriptor_id": 238, + "selector_order": 239.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 239, + "descriptor_id": 239, + "selector_order": 240.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 240, + "descriptor_id": 240, + "selector_order": 241.0, + "target_mask_bits": 15, + "label_id": 2421, + "label": "Unknown Cargo Production", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f0300000075090000" + }, + { + "row_index": 241, + "descriptor_id": 241, + "selector_order": 242.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 242, + "descriptor_id": 242, + "selector_order": 243.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 243, + "descriptor_id": 243, + "selector_order": 244.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 244, + "descriptor_id": 244, + "selector_order": 245.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 245, + "descriptor_id": 245, + "selector_order": 246.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 246, + "descriptor_id": 246, + "selector_order": 247.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 247, + "descriptor_id": 247, + "selector_order": 248.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 248, + "descriptor_id": 248, + "selector_order": 249.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 249, + "descriptor_id": 249, + "selector_order": 250.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 250, + "descriptor_id": 250, + "selector_order": 251.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 251, + "descriptor_id": 251, + "selector_order": 252.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 252, + "descriptor_id": 252, + "selector_order": 253.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 253, + "descriptor_id": 253, + "selector_order": 254.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 254, + "descriptor_id": 254, + "selector_order": 255.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 255, + "descriptor_id": 255, + "selector_order": 256.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 256, + "descriptor_id": 256, + "selector_order": 257.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 257, + "descriptor_id": 257, + "selector_order": 258.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 258, + "descriptor_id": 258, + "selector_order": 259.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 259, + "descriptor_id": 259, + "selector_order": 260.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 260, + "descriptor_id": 260, + "selector_order": 261.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 261, + "descriptor_id": 261, + "selector_order": 262.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 262, + "descriptor_id": 262, + "selector_order": 263.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 263, + "descriptor_id": 263, + "selector_order": 264.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 264, + "descriptor_id": 264, + "selector_order": 265.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 265, + "descriptor_id": 265, + "selector_order": 266.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 266, + "descriptor_id": 266, + "selector_order": 267.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 267, + "descriptor_id": 267, + "selector_order": 268.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 268, + "descriptor_id": 268, + "selector_order": 269.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 269, + "descriptor_id": 269, + "selector_order": 270.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 270, + "descriptor_id": 270, + "selector_order": 271.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 271, + "descriptor_id": 271, + "selector_order": 272.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 272, + "descriptor_id": 272, + "selector_order": 273.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 273, + "descriptor_id": 273, + "selector_order": 274.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 274, + "descriptor_id": 274, + "selector_order": 275.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 275, + "descriptor_id": 275, + "selector_order": 276.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 276, + "descriptor_id": 276, + "selector_order": 277.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 277, + "descriptor_id": 277, + "selector_order": 278.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 278, + "descriptor_id": 278, + "selector_order": 279.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 279, + "descriptor_id": 279, + "selector_order": 280.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 280, + "descriptor_id": 280, + "selector_order": 281.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 281, + "descriptor_id": 281, + "selector_order": 282.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 282, + "descriptor_id": 282, + "selector_order": 283.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 283, + "descriptor_id": 283, + "selector_order": 284.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 284, + "descriptor_id": 284, + "selector_order": 285.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 285, + "descriptor_id": 285, + "selector_order": 286.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 286, + "descriptor_id": 286, + "selector_order": 287.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 287, + "descriptor_id": 287, + "selector_order": 288.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 288, + "descriptor_id": 288, + "selector_order": 289.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 289, + "descriptor_id": 289, + "selector_order": 290.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 290, + "descriptor_id": 290, + "selector_order": 291.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 291, + "descriptor_id": 291, + "selector_order": 292.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 292, + "descriptor_id": 292, + "selector_order": 293.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 293, + "descriptor_id": 293, + "selector_order": 294.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 294, + "descriptor_id": 294, + "selector_order": 295.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 295, + "descriptor_id": 295, + "selector_order": 296.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 296, + "descriptor_id": 296, + "selector_order": 297.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 297, + "descriptor_id": 297, + "selector_order": 298.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 298, + "descriptor_id": 298, + "selector_order": 299.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 299, + "descriptor_id": 299, + "selector_order": 300.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 300, + "descriptor_id": 300, + "selector_order": 301.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 301, + "descriptor_id": 301, + "selector_order": 302.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 302, + "descriptor_id": 302, + "selector_order": 303.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 303, + "descriptor_id": 303, + "selector_order": 304.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 304, + "descriptor_id": 304, + "selector_order": 305.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 305, + "descriptor_id": 305, + "selector_order": 306.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 306, + "descriptor_id": 306, + "selector_order": 307.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 307, + "descriptor_id": 307, + "selector_order": 308.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 308, + "descriptor_id": 308, + "selector_order": 309.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 309, + "descriptor_id": 309, + "selector_order": 310.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 310, + "descriptor_id": 310, + "selector_order": 311.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 311, + "descriptor_id": 311, + "selector_order": 312.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 312, + "descriptor_id": 312, + "selector_order": 313.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 313, + "descriptor_id": 313, + "selector_order": 314.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 314, + "descriptor_id": 314, + "selector_order": 315.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 315, + "descriptor_id": 315, + "selector_order": 316.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 316, + "descriptor_id": 316, + "selector_order": 317.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 317, + "descriptor_id": 317, + "selector_order": 318.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 318, + "descriptor_id": 318, + "selector_order": 319.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 319, + "descriptor_id": 319, + "selector_order": 320.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 320, + "descriptor_id": 320, + "selector_order": 321.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 321, + "descriptor_id": 321, + "selector_order": 322.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 322, + "descriptor_id": 322, + "selector_order": 323.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 323, + "descriptor_id": 323, + "selector_order": 324.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 324, + "descriptor_id": 324, + "selector_order": 325.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 325, + "descriptor_id": 325, + "selector_order": 326.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 326, + "descriptor_id": 326, + "selector_order": 327.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 327, + "descriptor_id": 327, + "selector_order": 328.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 328, + "descriptor_id": 328, + "selector_order": 329.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 329, + "descriptor_id": 329, + "selector_order": 330.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 330, + "descriptor_id": 330, + "selector_order": 331.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 331, + "descriptor_id": 331, + "selector_order": 332.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 332, + "descriptor_id": 332, + "selector_order": 333.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 333, + "descriptor_id": 333, + "selector_order": 334.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 334, + "descriptor_id": 334, + "selector_order": 335.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 335, + "descriptor_id": 335, + "selector_order": 336.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 336, + "descriptor_id": 336, + "selector_order": 337.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 337, + "descriptor_id": 337, + "selector_order": 338.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 338, + "descriptor_id": 338, + "selector_order": 339.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 339, + "descriptor_id": 339, + "selector_order": 340.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 340, + "descriptor_id": 340, + "selector_order": 341.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 341, + "descriptor_id": 341, + "selector_order": 342.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 342, + "descriptor_id": 342, + "selector_order": 343.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 343, + "descriptor_id": 343, + "selector_order": 344.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 344, + "descriptor_id": 344, + "selector_order": 345.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 345, + "descriptor_id": 345, + "selector_order": 346.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 346, + "descriptor_id": 346, + "selector_order": 347.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 347, + "descriptor_id": 347, + "selector_order": 348.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 348, + "descriptor_id": 348, + "selector_order": 349.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 349, + "descriptor_id": 349, + "selector_order": 350.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 350, + "descriptor_id": 350, + "selector_order": 351.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 351, + "descriptor_id": 351, + "selector_order": 352.0, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 352, + "descriptor_id": 352, + "selector_order": 353.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 353, + "descriptor_id": 353, + "selector_order": 354.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 354, + "descriptor_id": 354, + "selector_order": 355.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 355, + "descriptor_id": 355, + "selector_order": 356.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 356, + "descriptor_id": 356, + "selector_order": 357.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 357, + "descriptor_id": 357, + "selector_order": 358.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 358, + "descriptor_id": 358, + "selector_order": 359.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 359, + "descriptor_id": 359, + "selector_order": 360.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 360, + "descriptor_id": 360, + "selector_order": 361.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 361, + "descriptor_id": 361, + "selector_order": 362.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 362, + "descriptor_id": 362, + "selector_order": 363.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 363, + "descriptor_id": 363, + "selector_order": 364.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 364, + "descriptor_id": 364, + "selector_order": 365.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 365, + "descriptor_id": 365, + "selector_order": 366.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 366, + "descriptor_id": 366, + "selector_order": 367.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 367, + "descriptor_id": 367, + "selector_order": 368.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 368, + "descriptor_id": 368, + "selector_order": 369.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 369, + "descriptor_id": 369, + "selector_order": 370.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 370, + "descriptor_id": 370, + "selector_order": 371.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 371, + "descriptor_id": 371, + "selector_order": 372.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 372, + "descriptor_id": 372, + "selector_order": 373.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 373, + "descriptor_id": 373, + "selector_order": 374.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 374, + "descriptor_id": 374, + "selector_order": 375.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 375, + "descriptor_id": 375, + "selector_order": 376.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 376, + "descriptor_id": 376, + "selector_order": 377.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 377, + "descriptor_id": 377, + "selector_order": 378.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 378, + "descriptor_id": 378, + "selector_order": 379.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 379, + "descriptor_id": 379, + "selector_order": 380.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 380, + "descriptor_id": 380, + "selector_order": 381.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 381, + "descriptor_id": 381, + "selector_order": 382.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 382, + "descriptor_id": 382, + "selector_order": 383.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 383, + "descriptor_id": 383, + "selector_order": 384.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 384, + "descriptor_id": 384, + "selector_order": 385.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 385, + "descriptor_id": 385, + "selector_order": 386.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 386, + "descriptor_id": 386, + "selector_order": 387.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 387, + "descriptor_id": 387, + "selector_order": 388.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 388, + "descriptor_id": 388, + "selector_order": 389.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 389, + "descriptor_id": 389, + "selector_order": 390.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 390, + "descriptor_id": 390, + "selector_order": 391.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 391, + "descriptor_id": 391, + "selector_order": 392.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 392, + "descriptor_id": 392, + "selector_order": 393.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 393, + "descriptor_id": 393, + "selector_order": 394.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 394, + "descriptor_id": 394, + "selector_order": 395.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 395, + "descriptor_id": 395, + "selector_order": 396.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 396, + "descriptor_id": 396, + "selector_order": 397.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 397, + "descriptor_id": 397, + "selector_order": 398.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 398, + "descriptor_id": 398, + "selector_order": 399.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 399, + "descriptor_id": 399, + "selector_order": 400.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 400, + "descriptor_id": 400, + "selector_order": 401.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 401, + "descriptor_id": 401, + "selector_order": 402.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 402, + "descriptor_id": 402, + "selector_order": 403.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 403, + "descriptor_id": 403, + "selector_order": 404.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 404, + "descriptor_id": 404, + "selector_order": 405.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 405, + "descriptor_id": 405, + "selector_order": 406.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 406, + "descriptor_id": 406, + "selector_order": 407.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 407, + "descriptor_id": 407, + "selector_order": 408.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 408, + "descriptor_id": 408, + "selector_order": 409.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 409, + "descriptor_id": 409, + "selector_order": 410.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 410, + "descriptor_id": 410, + "selector_order": 411.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 411, + "descriptor_id": 411, + "selector_order": 412.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 412, + "descriptor_id": 412, + "selector_order": 413.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 413, + "descriptor_id": 413, + "selector_order": 414.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 414, + "descriptor_id": 414, + "selector_order": 415.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 415, + "descriptor_id": 415, + "selector_order": 416.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 416, + "descriptor_id": 416, + "selector_order": 417.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 417, + "descriptor_id": 417, + "selector_order": 418.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 418, + "descriptor_id": 418, + "selector_order": 419.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 419, + "descriptor_id": 419, + "selector_order": 420.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 420, + "descriptor_id": 420, + "selector_order": 421.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 421, + "descriptor_id": 421, + "selector_order": 422.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 422, + "descriptor_id": 422, + "selector_order": 423.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 423, + "descriptor_id": 423, + "selector_order": 424.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 424, + "descriptor_id": 424, + "selector_order": 425.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 425, + "descriptor_id": 425, + "selector_order": 426.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 426, + "descriptor_id": 426, + "selector_order": 427.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 427, + "descriptor_id": 427, + "selector_order": 428.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 428, + "descriptor_id": 428, + "selector_order": 429.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 429, + "descriptor_id": 429, + "selector_order": 430.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 430, + "descriptor_id": 430, + "selector_order": 431.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 431, + "descriptor_id": 431, + "selector_order": 432.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 432, + "descriptor_id": 432, + "selector_order": 433.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 433, + "descriptor_id": 433, + "selector_order": 434.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 434, + "descriptor_id": 434, + "selector_order": 435.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 435, + "descriptor_id": 435, + "selector_order": 436.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 436, + "descriptor_id": 436, + "selector_order": 437.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 437, + "descriptor_id": 437, + "selector_order": 438.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 438, + "descriptor_id": 438, + "selector_order": 439.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 439, + "descriptor_id": 439, + "selector_order": 440.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 440, + "descriptor_id": 440, + "selector_order": 441.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 441, + "descriptor_id": 441, + "selector_order": 442.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 442, + "descriptor_id": 442, + "selector_order": 443.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 443, + "descriptor_id": 443, + "selector_order": 444.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 444, + "descriptor_id": 444, + "selector_order": 445.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 445, + "descriptor_id": 445, + "selector_order": 446.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 446, + "descriptor_id": 446, + "selector_order": 447.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 447, + "descriptor_id": 447, + "selector_order": 448.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 448, + "descriptor_id": 448, + "selector_order": 449.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 449, + "descriptor_id": 449, + "selector_order": 450.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 450, + "descriptor_id": 450, + "selector_order": 451.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 451, + "descriptor_id": 451, + "selector_order": 452.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 452, + "descriptor_id": 452, + "selector_order": 453.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820b0300000077090000" + }, + { + "row_index": 453, + "descriptor_id": 453, + "selector_order": 55.5, + "target_mask_bits": 15, + "label_id": 2862, + "label": "Territory access cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 130, + "signature_hex_0x63_0x6d": "01820f030000002e0b0000" + }, + { + "row_index": 454, + "descriptor_id": 454, + "selector_order": 241.10000610351562, + "target_mask_bits": 11, + "label_id": 2863, + "label": "All Steam Locos Avail.", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b030000002f0b0000" + }, + { + "row_index": 455, + "descriptor_id": 455, + "selector_order": 241.1999969482422, + "target_mask_bits": 11, + "label_id": 2864, + "label": "All Diesel Locos Avail.", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b03000000300b0000" + }, + { + "row_index": 456, + "descriptor_id": 456, + "selector_order": 241.3000030517578, + "target_mask_bits": 11, + "label_id": 2865, + "label": "All Electric Locos Avail.", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b03000000310b0000" + }, + { + "row_index": 457, + "descriptor_id": 457, + "selector_order": 352.010009765625, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 458, + "descriptor_id": 458, + "selector_order": 352.0199890136719, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 459, + "descriptor_id": 459, + "selector_order": 352.0299987792969, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 460, + "descriptor_id": 460, + "selector_order": 352.0400085449219, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 461, + "descriptor_id": 461, + "selector_order": 352.04998779296875, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 462, + "descriptor_id": 462, + "selector_order": 352.05999755859375, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 463, + "descriptor_id": 463, + "selector_order": 352.07000732421875, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 464, + "descriptor_id": 464, + "selector_order": 352.0799865722656, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 465, + "descriptor_id": 465, + "selector_order": 352.0899963378906, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 466, + "descriptor_id": 466, + "selector_order": 352.1000061035156, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 467, + "descriptor_id": 467, + "selector_order": 352.1099853515625, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 468, + "descriptor_id": 468, + "selector_order": 352.1199951171875, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 469, + "descriptor_id": 469, + "selector_order": 352.1300048828125, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 470, + "descriptor_id": 470, + "selector_order": 352.1400146484375, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 471, + "descriptor_id": 471, + "selector_order": 352.1499938964844, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 472, + "descriptor_id": 472, + "selector_order": 352.1600036621094, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 473, + "descriptor_id": 473, + "selector_order": 352.1700134277344, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 474, + "descriptor_id": 474, + "selector_order": 352.17999267578125, + "target_mask_bits": 11, + "label_id": 2422, + "label": "Unknown Loco Available", + "signature_byte_0x63": 0, + "signature_byte_0x64": 129, + "signature_hex_0x63_0x6d": "00810b0300000076090000" + }, + { + "row_index": 475, + "descriptor_id": 475, + "selector_order": 476.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 476, + "descriptor_id": 476, + "selector_order": 477.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 477, + "descriptor_id": 477, + "selector_order": 478.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 478, + "descriptor_id": 478, + "selector_order": 479.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 479, + "descriptor_id": 479, + "selector_order": 480.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 480, + "descriptor_id": 480, + "selector_order": 481.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 481, + "descriptor_id": 481, + "selector_order": 482.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 482, + "descriptor_id": 482, + "selector_order": 483.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 483, + "descriptor_id": 483, + "selector_order": 484.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 484, + "descriptor_id": 484, + "selector_order": 485.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 485, + "descriptor_id": 485, + "selector_order": 486.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 486, + "descriptor_id": 486, + "selector_order": 487.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 487, + "descriptor_id": 487, + "selector_order": 488.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 488, + "descriptor_id": 488, + "selector_order": 489.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 489, + "descriptor_id": 489, + "selector_order": 490.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 490, + "descriptor_id": 490, + "selector_order": 491.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 491, + "descriptor_id": 491, + "selector_order": 492.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 492, + "descriptor_id": 492, + "selector_order": 493.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 493, + "descriptor_id": 493, + "selector_order": 494.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 494, + "descriptor_id": 494, + "selector_order": 495.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 495, + "descriptor_id": 495, + "selector_order": 496.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 496, + "descriptor_id": 496, + "selector_order": 497.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 497, + "descriptor_id": 497, + "selector_order": 498.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 498, + "descriptor_id": 498, + "selector_order": 499.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 499, + "descriptor_id": 499, + "selector_order": 500.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 500, + "descriptor_id": 500, + "selector_order": 501.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 501, + "descriptor_id": 501, + "selector_order": 502.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 502, + "descriptor_id": 502, + "selector_order": 503.0, + "target_mask_bits": 11, + "label_id": 2423, + "label": "Unknown Loco Cost", + "signature_byte_0x63": 1, + "signature_byte_0x64": 134, + "signature_hex_0x63_0x6d": "01860b0300000077090000" + }, + { + "row_index": 503, + "descriptor_id": 503, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 504, + "descriptor_id": 504, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 505, + "descriptor_id": 505, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 506, + "descriptor_id": 506, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 507, + "descriptor_id": 507, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 508, + "descriptor_id": 508, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 509, + "descriptor_id": 509, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 510, + "descriptor_id": 510, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 511, + "descriptor_id": 511, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 512, + "descriptor_id": 512, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 513, + "descriptor_id": 513, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 514, + "descriptor_id": 514, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 515, + "descriptor_id": 515, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 516, + "descriptor_id": 516, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 517, + "descriptor_id": 517, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 518, + "descriptor_id": 518, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + }, + { + "row_index": 519, + "descriptor_id": 519, + "selector_order": 504.0, + "target_mask_bits": 8, + "label_id": 2786, + "label": "Unknown Add Building", + "signature_byte_0x63": 0, + "signature_byte_0x64": 8, + "signature_hex_0x63_0x6d": "00080803000000e20a0000" + } + ] +} diff --git a/crates/rrt-cli/src/main.rs b/crates/rrt-cli/src/main.rs index 9a02d93..0c82726 100644 --- a/crates/rrt-cli/src/main.rs +++ b/crates/rrt-cli/src/main.rs @@ -4532,6 +4532,12 @@ mod tests { .join( "../../fixtures/runtime/packed-event-company-governance-condition-save-slice-fixture.json", ); + let credit_rating_descriptor_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join( + "../../fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json", + ); + let merger_premium_shell_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join( + "../../fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json", + ); let investor_confidence_condition_save_fixture = PathBuf::from(env!( "CARGO_MANIFEST_DIR" )) @@ -4617,6 +4623,10 @@ mod tests { .expect("overlay-backed company governance condition fixture should summarize"); run_runtime_summarize_fixture(&company_governance_condition_save_fixture) .expect("save-slice-backed company governance condition fixture should summarize"); + run_runtime_summarize_fixture(&credit_rating_descriptor_save_fixture) + .expect("save-slice-backed credit-rating descriptor fixture should summarize"); + run_runtime_summarize_fixture(&merger_premium_shell_save_fixture) + .expect("save-slice-backed shell-owned merger-premium fixture should summarize"); run_runtime_summarize_fixture(&investor_confidence_condition_save_fixture) .expect("save-slice-backed investor-confidence condition fixture should summarize"); run_runtime_summarize_fixture(&management_attitude_condition_save_fixture) diff --git a/crates/rrt-fixtures/src/schema.rs b/crates/rrt-fixtures/src/schema.rs index dbe39a0..ebffa9c 100644 --- a/crates/rrt-fixtures/src/schema.rs +++ b/crates/rrt-fixtures/src/schema.rs @@ -146,6 +146,8 @@ pub struct ExpectedRuntimeSummary { #[serde(default)] pub packed_event_blocked_missing_compact_control_count: Option, #[serde(default)] + pub packed_event_blocked_shell_owned_descriptor_count: Option, + #[serde(default)] pub packed_event_blocked_unmapped_real_descriptor_count: Option, #[serde(default)] pub packed_event_blocked_unmapped_world_descriptor_count: Option, @@ -751,6 +753,14 @@ impl ExpectedRuntimeSummary { )); } } + if let Some(count) = self.packed_event_blocked_shell_owned_descriptor_count { + if actual.packed_event_blocked_shell_owned_descriptor_count != count { + mismatches.push(format!( + "packed_event_blocked_shell_owned_descriptor_count mismatch: expected {count}, got {}", + actual.packed_event_blocked_shell_owned_descriptor_count + )); + } + } if let Some(count) = self.packed_event_blocked_unmapped_real_descriptor_count { if actual.packed_event_blocked_unmapped_real_descriptor_count != count { mismatches.push(format!( diff --git a/crates/rrt-model/src/lib.rs b/crates/rrt-model/src/lib.rs index 378e386..db150a0 100644 --- a/crates/rrt-model/src/lib.rs +++ b/crates/rrt-model/src/lib.rs @@ -30,6 +30,7 @@ pub const REQUIRED_EXPORTS: &[&str] = &[ "artifacts/exports/rt3-1.06/pending-template-store-functions.csv", "artifacts/exports/rt3-1.06/pending-template-store-record-kinds.csv", "artifacts/exports/rt3-1.06/pending-template-store-management.md", + "artifacts/exports/rt3-1.06/event-effects-table.json", ]; pub const REQUIRED_ATLAS_HEADINGS: &[&str] = &[ diff --git a/crates/rrt-runtime/src/import.rs b/crates/rrt-runtime/src/import.rs index 5c234c0..9caedfa 100644 --- a/crates/rrt-runtime/src/import.rs +++ b/crates/rrt-runtime/src/import.rs @@ -2683,6 +2683,13 @@ fn determine_packed_event_import_outcome( return "blocked_unmapped_ordinary_condition".to_string(); } } + if record + .grouped_effect_rows + .iter() + .any(real_grouped_row_is_shell_owned_descriptor_family) + { + return "blocked_shell_owned_descriptor".to_string(); + } if record .grouped_effect_rows .iter() @@ -2779,6 +2786,13 @@ fn real_grouped_row_is_world_state_family( }) } +fn real_grouped_row_is_shell_owned_descriptor_family( + row: &SmpLoadedPackedEventGroupedEffectRowSummary, +) -> bool { + crate::smp::grouped_effect_descriptor_runtime_status_name(row.descriptor_id) + .is_some_and(|status| status == "shell_owned") +} + fn packed_record_company_target_import_blocker( record: &SmpLoadedPackedEventRecordSummary, company_context: &ImportRuntimeContext, @@ -3661,6 +3675,69 @@ mod tests { } } + fn real_credit_rating_row(value: i32) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary { + crate::SmpLoadedPackedEventGroupedEffectRowSummary { + group_index: 0, + row_index: 0, + descriptor_id: 56, + descriptor_label: Some("Credit Rating".to_string()), + target_mask_bits: Some(0x0b), + parameter_family: Some("company_governance_scalar".to_string()), + grouped_target_subject: Some("company".to_string()), + grouped_target_scope: Some("selected_company".to_string()), + opcode: 3, + raw_scalar_value: value, + value_byte_0x09: 0, + value_dword_0x0d: 0, + value_byte_0x11: 0, + value_byte_0x12: 0, + value_word_0x14: 0, + value_word_0x16: 0, + row_shape: "scalar_assignment".to_string(), + semantic_family: Some("scalar_assignment".to_string()), + semantic_preview: Some(format!("Set Credit Rating to {value}")), + recovered_cargo_slot: None, + recovered_cargo_class: None, + recovered_locomotive_id: None, + locomotive_name: None, + notes: vec![], + } + } + + fn real_merger_premium_shell_row( + value: i32, + ) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary { + crate::SmpLoadedPackedEventGroupedEffectRowSummary { + group_index: 0, + row_index: 0, + descriptor_id: 58, + descriptor_label: Some("Merger Premium".to_string()), + target_mask_bits: Some(0x0b), + parameter_family: Some("company_finance_shell_scalar".to_string()), + grouped_target_subject: Some("company".to_string()), + grouped_target_scope: Some("selected_company".to_string()), + opcode: 3, + raw_scalar_value: value, + value_byte_0x09: 0, + value_dword_0x0d: 0, + value_byte_0x11: 0, + value_byte_0x12: 0, + value_word_0x14: 0, + value_word_0x16: 0, + row_shape: "scalar_assignment".to_string(), + semantic_family: Some("scalar_assignment".to_string()), + semantic_preview: Some(format!("Set Merger Premium to {value}")), + recovered_cargo_slot: None, + recovered_cargo_class: None, + recovered_locomotive_id: None, + locomotive_name: None, + notes: vec![ + "descriptor is recovered in the checked-in effect table as shell_owned parity" + .to_string(), + ], + } + } + fn real_deactivate_player_row( enabled: bool, ) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary { @@ -6053,6 +6130,176 @@ mod tests { ); } + #[test] + fn leaves_recovered_shell_owned_descriptor_rows_on_explicit_shell_owned_frontier() { + let save_slice = SmpLoadedSaveSlice { + file_extension_hint: Some("gms".to_string()), + container_profile_family: Some("rt3-classic-save-container-v1".to_string()), + mechanism_family: "classic-save-rehydrate-v1".to_string(), + mechanism_confidence: "grounded".to_string(), + trailer_family: None, + bridge_family: None, + profile: None, + candidate_availability_table: None, + named_locomotive_availability_table: None, + locomotive_catalog: None, + cargo_catalog: None, + company_roster: Some(save_company_roster()), + chairman_profile_table: Some(save_chairman_profile_table()), + special_conditions_table: None, + event_runtime_collection: Some(crate::SmpLoadedEventRuntimeCollectionSummary { + source_kind: "packed-event-runtime-collection".to_string(), + mechanism_family: "classic-save-rehydrate-v1".to_string(), + mechanism_confidence: "grounded".to_string(), + container_profile_family: Some("rt3-classic-save-container-v1".to_string()), + metadata_tag_offset: 0x7100, + records_tag_offset: 0x7200, + close_tag_offset: 0x7600, + packed_state_version: 0x3e9, + packed_state_version_hex: "0x000003e9".to_string(), + live_id_bound: 8, + live_record_count: 1, + live_entry_ids: vec![8], + decoded_record_count: 1, + imported_runtime_record_count: 0, + records: vec![crate::SmpLoadedPackedEventRecordSummary { + record_index: 0, + live_entry_id: 8, + payload_offset: Some(0x7202), + payload_len: Some(120), + decode_status: "parity_only".to_string(), + payload_family: "real_packed_v1".to_string(), + trigger_kind: Some(7), + active: None, + marks_collection_dirty: None, + one_shot: Some(true), + compact_control: Some(real_compact_control_without_symbolic_company_scope()), + text_bands: packed_text_bands(), + standalone_condition_row_count: 0, + standalone_condition_rows: Vec::new(), + negative_sentinel_scope: None, + grouped_effect_row_counts: vec![1, 0, 0, 0], + grouped_effect_rows: vec![real_merger_premium_shell_row(25)], + decoded_conditions: Vec::new(), + decoded_actions: Vec::new(), + executable_import_ready: false, + notes: vec!["synthetic shell-owned descriptor test record".to_string()], + }], + }), + notes: vec![], + }; + + let import = project_save_slice_to_runtime_state_import( + &save_slice, + "packed-events-shell-owned-descriptor-frontier", + None, + ) + .expect("save slice should project"); + + assert!(import.state.event_runtime_records.is_empty()); + assert_eq!( + import + .state + .packed_event_collection + .as_ref() + .and_then(|summary| summary.records[0].import_outcome.as_deref()), + Some("blocked_shell_owned_descriptor") + ); + } + + #[test] + fn imports_credit_rating_descriptor_from_save_slice_company_context() { + let save_slice = SmpLoadedSaveSlice { + file_extension_hint: Some("gms".to_string()), + container_profile_family: Some("rt3-classic-save-container-v1".to_string()), + mechanism_family: "classic-save-rehydrate-v1".to_string(), + mechanism_confidence: "grounded".to_string(), + trailer_family: None, + bridge_family: None, + profile: None, + candidate_availability_table: None, + named_locomotive_availability_table: None, + locomotive_catalog: None, + cargo_catalog: None, + company_roster: Some(save_company_roster()), + chairman_profile_table: Some(save_chairman_profile_table()), + special_conditions_table: None, + event_runtime_collection: Some(crate::SmpLoadedEventRuntimeCollectionSummary { + source_kind: "packed-event-runtime-collection".to_string(), + mechanism_family: "classic-save-rehydrate-v1".to_string(), + mechanism_confidence: "grounded".to_string(), + container_profile_family: Some("rt3-classic-save-container-v1".to_string()), + metadata_tag_offset: 0x7100, + records_tag_offset: 0x7200, + close_tag_offset: 0x7600, + packed_state_version: 0x3e9, + packed_state_version_hex: "0x000003e9".to_string(), + live_id_bound: 9, + live_record_count: 1, + live_entry_ids: vec![9], + decoded_record_count: 1, + imported_runtime_record_count: 0, + records: vec![crate::SmpLoadedPackedEventRecordSummary { + record_index: 0, + live_entry_id: 9, + payload_offset: Some(0x7202), + payload_len: Some(120), + decode_status: "executable".to_string(), + payload_family: "real_packed_v1".to_string(), + trigger_kind: Some(7), + active: None, + marks_collection_dirty: None, + one_shot: Some(true), + compact_control: Some(real_compact_control_without_symbolic_company_scope()), + text_bands: packed_text_bands(), + standalone_condition_row_count: 0, + standalone_condition_rows: Vec::new(), + negative_sentinel_scope: None, + grouped_effect_row_counts: vec![1, 0, 0, 0], + grouped_effect_rows: vec![real_credit_rating_row(640)], + decoded_conditions: Vec::new(), + decoded_actions: vec![RuntimeEffect::SetCompanyGovernanceScalar { + target: RuntimeCompanyTarget::SelectedCompany, + metric: crate::RuntimeCompanyMetric::CreditRating, + value: 640, + }], + executable_import_ready: true, + notes: vec!["synthetic governance descriptor test record".to_string()], + }], + }), + notes: vec![], + }; + + let import = project_save_slice_to_runtime_state_import( + &save_slice, + "packed-events-credit-rating-descriptor", + None, + ) + .expect("save slice should project"); + + assert_eq!(import.state.event_runtime_records.len(), 1); + assert_eq!( + import + .state + .event_runtime_records + .first() + .map(|record| record.effects.clone()), + Some(vec![RuntimeEffect::SetCompanyGovernanceScalar { + target: RuntimeCompanyTarget::SelectedCompany, + metric: crate::RuntimeCompanyMetric::CreditRating, + value: 640, + }]) + ); + assert_eq!( + import + .state + .packed_event_collection + .as_ref() + .and_then(|summary| summary.records[0].import_outcome.as_deref()), + Some("imported") + ); + } + #[test] fn blocks_scalar_locomotive_availability_rows_without_catalog_context() { let save_slice = SmpLoadedSaveSlice { diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 77c39da..2365b85 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -128,9 +128,35 @@ struct RealGroupedEffectDescriptorMetadata { target_mask_bits: u8, parameter_family: &'static str, runtime_key: Option<&'static str>, + runtime_status: RealGroupedEffectRuntimeStatus, executable_in_runtime: bool, } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum RealGroupedEffectRuntimeStatus { + Executable, + ShellOwned, + EvidenceBlocked, + VariantOrScopeBlocked, +} + +#[derive(Debug, Clone, PartialEq, Deserialize)] +struct CheckedInEventEffectsTableArtifact { + descriptors: Vec, +} + +#[derive(Debug, Clone, PartialEq, Deserialize)] +struct CheckedInEventEffectDescriptorRow { + descriptor_id: u32, + selector_order: f32, + target_mask_bits: u8, + label_id: u32, + label: String, + signature_byte_0x63: u8, + signature_byte_0x64: u8, + signature_hex_0x63_0x6d: String, +} + const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetadata; 12] = [ RealGroupedEffectDescriptorMetadata { descriptor_id: 1, @@ -138,6 +164,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x02, parameter_family: "player_finance_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -146,6 +173,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x01, parameter_family: "company_finance_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -154,6 +182,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x05, parameter_family: "territory_access_toggle", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -162,6 +191,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x08, parameter_family: "whole_game_state_enum", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -170,6 +200,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x08, parameter_family: "special_condition_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -178,6 +209,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x08, parameter_family: "candidate_availability_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -186,6 +218,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x08, parameter_family: "world_flag_toggle", runtime_key: Some("world.disable_stock_buying_and_selling"), + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -194,6 +227,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x01, parameter_family: "company_confiscation_variant", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -202,6 +236,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x01, parameter_family: "company_lifecycle_toggle", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -210,6 +245,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x02, parameter_family: "player_lifecycle_toggle", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -218,6 +254,7 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x0d, parameter_family: "company_or_territory_asset_toggle", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, RealGroupedEffectDescriptorMetadata { @@ -226,10 +263,199 @@ const REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA: [RealGroupedEffectDescriptorMetad target_mask_bits: 0x01, parameter_family: "company_build_limit_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }, ]; +fn real_grouped_effect_runtime_status_name(status: RealGroupedEffectRuntimeStatus) -> &'static str { + match status { + RealGroupedEffectRuntimeStatus::Executable => "executable", + RealGroupedEffectRuntimeStatus::ShellOwned => "shell_owned", + RealGroupedEffectRuntimeStatus::EvidenceBlocked => "evidence_blocked", + RealGroupedEffectRuntimeStatus::VariantOrScopeBlocked => "variant_or_scope_blocked", + } +} + +fn checked_in_event_effect_descriptor_rows() +-> &'static BTreeMap { + static ROWS: OnceLock> = OnceLock::new(); + ROWS.get_or_init(|| { + let artifact: CheckedInEventEffectsTableArtifact = serde_json::from_str(include_str!( + "../../../artifacts/exports/rt3-1.06/event-effects-table.json" + )) + .expect("checked-in event-effects artifact should parse"); + artifact + .descriptors + .into_iter() + .map(|row| { + ( + row.descriptor_id, + checked_in_event_effect_descriptor_metadata(row), + ) + }) + .collect() + }) +} + +fn checked_in_event_effect_descriptor_metadata( + row: CheckedInEventEffectDescriptorRow, +) -> RealGroupedEffectDescriptorMetadata { + let label = Box::leak(row.label.clone().into_boxed_str()) as &'static str; + let (parameter_family, runtime_key, runtime_status, executable_in_runtime) = + classify_checked_in_event_effect_descriptor(&row, label); + debug_assert!(!row.signature_hex_0x63_0x6d.is_empty()); + debug_assert!(row.label_id <= u16::MAX as u32); + let _ = row.selector_order; + RealGroupedEffectDescriptorMetadata { + descriptor_id: row.descriptor_id, + label, + target_mask_bits: row.target_mask_bits, + parameter_family, + runtime_key, + runtime_status, + executable_in_runtime, + } +} + +fn classify_checked_in_event_effect_descriptor( + row: &CheckedInEventEffectDescriptorRow, + label: &'static str, +) -> ( + &'static str, + Option<&'static str>, + RealGroupedEffectRuntimeStatus, + bool, +) { + let descriptor_id = row.descriptor_id; + match descriptor_id { + 4..=7 => { + return ( + "scenario_outcome_shell_action", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + 10 | 11 | 12 | 23 => { + return ( + "company_confiscation_variant", + None, + RealGroupedEffectRuntimeStatus::VariantOrScopeBlocked, + false, + ); + } + 17..=21 => { + return ( + "company_or_territory_destruction_variant", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + 24 => { + return ( + "control_transfer_shell_action", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + 56 => { + return ( + "company_governance_scalar", + None, + RealGroupedEffectRuntimeStatus::Executable, + true, + ); + } + 57 => { + return ( + "company_governance_scalar", + None, + RealGroupedEffectRuntimeStatus::Executable, + true, + ); + } + 58 => { + return ( + "company_finance_shell_scalar", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + _ => {} + } + + if row.signature_byte_0x63 == 0 && row.signature_byte_0x64 == 0x8f { + return ( + "runtime_variable_scalar", + None, + RealGroupedEffectRuntimeStatus::EvidenceBlocked, + false, + ); + } + + if row.target_mask_bits == 0x0b && label == "Stock Prices" { + return ( + "company_finance_shell_scalar", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + + if label.contains("Cost") + || label.contains("Revenue") + || label.contains("Speed") + || label.contains("Reliability") + || label.contains("Acceleration") + || label.contains("Pulling Power") + || label.contains("Usage Rate") + || label.contains("Maintenance") + { + return ( + "world_scalar_economy_or_locomotive", + None, + RealGroupedEffectRuntimeStatus::EvidenceBlocked, + false, + ); + } + + if label.contains("Earthquake") || label.contains("Storm") { + return ( + "world_disaster_scalar", + None, + RealGroupedEffectRuntimeStatus::EvidenceBlocked, + false, + ); + } + + if label.contains("Add Building") { + return ( + "world_building_spawn", + None, + RealGroupedEffectRuntimeStatus::ShellOwned, + false, + ); + } + + ( + "recovered_effect_table_descriptor", + None, + RealGroupedEffectRuntimeStatus::EvidenceBlocked, + false, + ) +} + +pub(crate) fn grouped_effect_descriptor_runtime_status_name( + descriptor_id: u32, +) -> Option<&'static str> { + real_grouped_effect_descriptor_metadata(descriptor_id) + .map(|metadata| real_grouped_effect_runtime_status_name(metadata.runtime_status)) +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum RealOrdinaryConditionMetric { Company(RuntimeCompanyMetric), @@ -3323,7 +3549,14 @@ fn parse_real_grouped_effect_row_summary( if locomotive_name.is_some() { notes.push("grouped effect row carries locomotive-name side string".to_string()); } - if descriptor_metadata.is_none() { + if let Some(metadata) = descriptor_metadata { + if metadata.runtime_status != RealGroupedEffectRuntimeStatus::Executable { + notes.push(format!( + "descriptor is recovered in the checked-in effect table as {} parity", + real_grouped_effect_runtime_status_name(metadata.runtime_status) + )); + } + } else { notes.push("descriptor id not yet recovered in the checked-in effect table".to_string()); } if let Some(loco_id) = recovered_locomotive_availability_loco_id(descriptor_id) { @@ -3549,17 +3782,24 @@ fn real_condition_chairman_target( fn real_grouped_effect_descriptor_metadata( descriptor_id: u32, ) -> Option { - REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA - .iter() - .copied() - .find(|metadata| metadata.descriptor_id == descriptor_id) - .or_else(|| recovered_cargo_production_descriptor_metadata(descriptor_id)) + recovered_cargo_production_descriptor_metadata(descriptor_id) .or_else(|| recovered_locomotive_availability_descriptor_metadata(descriptor_id)) .or_else(|| recovered_locomotive_cost_descriptor_metadata(descriptor_id)) .or_else(|| recovered_territory_access_cost_descriptor_metadata(descriptor_id)) .or_else(|| recovered_locomotive_policy_descriptor_metadata(descriptor_id)) .or_else(|| special_condition_world_scalar_descriptor_metadata(descriptor_id)) .or_else(|| special_condition_world_toggle_descriptor_metadata(descriptor_id)) + .or_else(|| { + REAL_GROUPED_EFFECT_DESCRIPTOR_METADATA + .iter() + .copied() + .find(|metadata| metadata.descriptor_id == descriptor_id) + }) + .or_else(|| { + checked_in_event_effect_descriptor_rows() + .get(&descriptor_id) + .copied() + }) } fn recovered_cargo_production_descriptor_metadata( @@ -3572,6 +3812,7 @@ fn recovered_cargo_production_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "cargo_production_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, } }) @@ -3593,6 +3834,7 @@ fn recovered_locomotive_availability_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "locomotive_availability_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::EvidenceBlocked, executable_in_runtime: false, }) .or_else(|| { @@ -3604,6 +3846,7 @@ fn recovered_locomotive_availability_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "locomotive_availability_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::EvidenceBlocked, executable_in_runtime: false, }) }) @@ -3669,6 +3912,7 @@ fn recovered_locomotive_cost_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "locomotive_cost_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::EvidenceBlocked, executable_in_runtime: false, } }) @@ -3683,6 +3927,7 @@ fn recovered_territory_access_cost_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "territory_access_cost_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }) } @@ -3697,6 +3942,7 @@ fn recovered_locomotive_policy_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "world_flag_toggle", runtime_key: Some("world.all_steam_locos_available"), + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }), 455 => Some(RealGroupedEffectDescriptorMetadata { @@ -3705,6 +3951,7 @@ fn recovered_locomotive_policy_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "world_flag_toggle", runtime_key: Some("world.all_diesel_locos_available"), + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }), 456 => Some(RealGroupedEffectDescriptorMetadata { @@ -3713,6 +3960,7 @@ fn recovered_locomotive_policy_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "world_flag_toggle", runtime_key: Some("world.all_electric_locos_available"), + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }), _ => None, @@ -3736,6 +3984,7 @@ fn special_condition_world_scalar_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "world_track_build_limit_scalar", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }) } @@ -3757,6 +4006,7 @@ fn special_condition_world_toggle_descriptor_metadata( target_mask_bits: 0x08, parameter_family: "world_flag_toggle", runtime_key: None, + runtime_status: RealGroupedEffectRuntimeStatus::Executable, executable_in_runtime: true, }) } @@ -3870,10 +4120,26 @@ fn runtime_world_flag_key_from_label(label: &str) -> String { key } +fn real_grouped_company_governance_metric( + descriptor_metadata: RealGroupedEffectDescriptorMetadata, +) -> Option { + match descriptor_metadata.label { + "Credit Rating" => Some(RuntimeCompanyMetric::CreditRating), + "Prime Rate" => Some(RuntimeCompanyMetric::PrimeRate), + "Book Value Per Share" => Some(RuntimeCompanyMetric::BookValuePerShare), + "Investor Confidence" => Some(RuntimeCompanyMetric::InvestorConfidence), + "Management Attitude" => Some(RuntimeCompanyMetric::ManagementAttitude), + _ => None, + } +} + fn derive_real_grouped_target_subject( row: &SmpLoadedPackedEventGroupedEffectRowSummary, compact_control: &SmpLoadedPackedEventCompactControlSummary, ) -> Option { + if row.parameter_family.as_deref() == Some("company_governance_scalar") { + return Some(RealGroupedTargetSubject::Company); + } match row.target_mask_bits { Some(0x08) => Some(RealGroupedTargetSubject::WholeGame), Some(0x01) => Some(RealGroupedTargetSubject::Company), @@ -3986,6 +4252,19 @@ fn decode_real_grouped_effect_action( .copied()?; let target_subject = derive_real_grouped_target_subject(row, compact_control); + if descriptor_metadata.executable_in_runtime + && descriptor_metadata.parameter_family == "company_governance_scalar" + && row.row_shape == "scalar_assignment" + { + let target = real_grouped_company_target(target_scope_ordinal)?; + let metric = real_grouped_company_governance_metric(descriptor_metadata)?; + return Some(RuntimeEffect::SetCompanyGovernanceScalar { + target, + metric, + value: i64::from(row.raw_scalar_value), + }); + } + if descriptor_metadata.executable_in_runtime && descriptor_metadata.descriptor_id == 1 && row.opcode == 8 @@ -10832,6 +11111,135 @@ mod tests { assert!(metadata.executable_in_runtime); } + #[test] + fn looks_up_checked_in_credit_rating_descriptor_metadata() { + let metadata = + real_grouped_effect_descriptor_metadata(56).expect("descriptor metadata should exist"); + + assert_eq!(metadata.label, "Credit Rating"); + assert_eq!(metadata.target_mask_bits, 0x0b); + assert_eq!(metadata.parameter_family, "company_governance_scalar"); + assert_eq!( + real_grouped_effect_runtime_status_name(metadata.runtime_status), + "executable" + ); + assert!(metadata.executable_in_runtime); + } + + #[test] + fn checked_in_event_effect_table_covers_the_full_exported_descriptor_set() { + let rows = checked_in_event_effect_descriptor_rows(); + assert_eq!(rows.len(), 520); + for descriptor_id in 0..520_u32 { + assert!( + real_grouped_effect_descriptor_metadata(descriptor_id).is_some(), + "descriptor {descriptor_id} should be recoverable from the checked-in effect table" + ); + } + } + + #[test] + fn looks_up_checked_in_prime_rate_descriptor_metadata() { + let metadata = + real_grouped_effect_descriptor_metadata(57).expect("descriptor metadata should exist"); + + assert_eq!(metadata.label, "Prime Rate"); + assert_eq!(metadata.target_mask_bits, 0x0b); + assert_eq!(metadata.parameter_family, "company_governance_scalar"); + assert_eq!( + real_grouped_effect_runtime_status_name(metadata.runtime_status), + "executable" + ); + assert!(metadata.executable_in_runtime); + } + + #[test] + fn classifies_shell_owned_finance_descriptor_from_checked_in_effect_table() { + let metadata = + real_grouped_effect_descriptor_metadata(58).expect("descriptor metadata should exist"); + + assert_eq!(metadata.label, "Merger Premium"); + assert_eq!(metadata.parameter_family, "company_finance_shell_scalar"); + assert_eq!( + real_grouped_effect_runtime_status_name(metadata.runtime_status), + "shell_owned" + ); + assert!(!metadata.executable_in_runtime); + } + + #[test] + fn decodes_credit_rating_descriptor_into_company_governance_scalar_effect() { + let row_bytes = build_real_grouped_effect_row(RealGroupedEffectRowSpec { + descriptor_id: 56, + raw_scalar_value: 640, + opcode: 3, + value_byte_0x09: 0, + value_dword_0x0d: 0, + value_byte_0x11: 0, + value_byte_0x12: 0, + value_word_0x14: 0, + value_word_0x16: 0, + locomotive_name: None, + }); + let record_body = build_real_event_record( + [b"Gov", b"", b"", b"", b"", b""], + Some(RealCompactControlSpec { + mode_byte_0x7ef: 7, + primary_selector_0x7f0: 0, + grouped_mode_0x7f4: 2, + one_shot_header_0x7f5: 0, + modifier_flag_0x7f9: 0, + modifier_flag_0x7fa: 0, + grouped_target_scope_ordinals_0x7fb: [1, 0, 0, 0], + grouped_scope_checkboxes_0x7ff: [1, 0, 0, 0], + summary_toggle_0x800: 1, + grouped_territory_selectors_0x80f: [-1, -1, -1, -1], + }), + &[], + [&[row_bytes], &[], &[], &[]], + ); + + let mut bytes = Vec::new(); + bytes.extend_from_slice(&EVENT_RUNTIME_COLLECTION_METADATA_TAG.to_le_bytes()); + bytes.extend_from_slice(&EVENT_RUNTIME_COLLECTION_PACKED_STATE_VERSION.to_le_bytes()); + let header_words = [1u32, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for word in header_words { + bytes.extend_from_slice(&word.to_le_bytes()); + } + bytes.extend_from_slice(&[0x00, 0x00]); + bytes.extend_from_slice(&[0xaa, 0xbb, 0xcc, 0xdd]); + bytes.extend_from_slice(&EVENT_RUNTIME_COLLECTION_RECORDS_TAG.to_le_bytes()); + bytes.extend_from_slice(&record_body); + bytes.extend_from_slice(&EVENT_RUNTIME_COLLECTION_CLOSE_TAG.to_le_bytes()); + + let report = inspect_smp_bytes(&bytes); + let summary = report + .event_runtime_collection_summary + .as_ref() + .expect("event runtime collection summary should parse"); + + assert_eq!( + summary.records[0].grouped_effect_rows[0] + .descriptor_label + .as_deref(), + Some("Credit Rating") + ); + assert_eq!( + summary.records[0].grouped_effect_rows[0] + .grouped_target_subject + .as_deref(), + Some("company") + ); + assert_eq!( + summary.records[0].decoded_actions, + vec![RuntimeEffect::SetCompanyGovernanceScalar { + target: RuntimeCompanyTarget::SelectedCompany, + metric: RuntimeCompanyMetric::CreditRating, + value: 640, + }] + ); + } + #[test] fn looks_up_recovered_world_toggle_descriptor_metadata() { let metadata = diff --git a/crates/rrt-runtime/src/summary.rs b/crates/rrt-runtime/src/summary.rs index b19dcc8..351a6e1 100644 --- a/crates/rrt-runtime/src/summary.rs +++ b/crates/rrt-runtime/src/summary.rs @@ -70,6 +70,7 @@ pub struct RuntimeSummary { pub packed_event_blocked_unmapped_ordinary_condition_count: usize, pub packed_event_blocked_unmapped_world_condition_count: usize, pub packed_event_blocked_missing_compact_control_count: usize, + pub packed_event_blocked_shell_owned_descriptor_count: usize, pub packed_event_blocked_unmapped_real_descriptor_count: usize, pub packed_event_blocked_unmapped_world_descriptor_count: usize, pub packed_event_blocked_territory_access_variant_count: usize, @@ -496,6 +497,20 @@ impl RuntimeSummary { .count() }) .unwrap_or(0), + packed_event_blocked_shell_owned_descriptor_count: state + .packed_event_collection + .as_ref() + .map(|summary| { + summary + .records + .iter() + .filter(|record| { + record.import_outcome.as_deref() + == Some("blocked_shell_owned_descriptor") + }) + .count() + }) + .unwrap_or(0), packed_event_blocked_unmapped_real_descriptor_count: state .packed_event_collection .as_ref() @@ -1343,4 +1358,80 @@ mod tests { 1 ); } + + #[test] + fn counts_shell_owned_descriptor_frontier() { + let state = RuntimeState { + calendar: CalendarPoint { + year: 1830, + month_slot: 0, + phase_slot: 0, + tick_slot: 0, + }, + world_flags: BTreeMap::new(), + save_profile: RuntimeSaveProfileState::default(), + world_restore: RuntimeWorldRestoreState::default(), + metadata: BTreeMap::new(), + companies: Vec::new(), + selected_company_id: None, + players: Vec::new(), + selected_player_id: None, + chairman_profiles: Vec::new(), + selected_chairman_profile_id: None, + trains: Vec::new(), + locomotive_catalog: Vec::new(), + cargo_catalog: Vec::new(), + territories: Vec::new(), + company_territory_track_piece_counts: Vec::new(), + company_territory_access: Vec::new(), + packed_event_collection: Some(RuntimePackedEventCollectionSummary { + source_kind: "packed-event-runtime-collection".to_string(), + mechanism_family: "classic-save-rehydrate-v1".to_string(), + mechanism_confidence: "grounded".to_string(), + container_profile_family: Some("rt3-classic-save-container-v1".to_string()), + packed_state_version: 0x3e9, + packed_state_version_hex: "0x000003e9".to_string(), + live_id_bound: 1, + live_record_count: 1, + live_entry_ids: vec![1], + decoded_record_count: 1, + imported_runtime_record_count: 0, + records: vec![RuntimePackedEventRecordSummary { + record_index: 0, + live_entry_id: 1, + payload_offset: Some(0), + payload_len: Some(0), + decode_status: "parity_only".to_string(), + payload_family: "real_packed_v1".to_string(), + trigger_kind: Some(7), + active: None, + marks_collection_dirty: None, + one_shot: None, + compact_control: None, + text_bands: Vec::new(), + standalone_condition_row_count: 0, + standalone_condition_rows: Vec::new(), + negative_sentinel_scope: None, + grouped_effect_row_counts: vec![1, 0, 0, 0], + grouped_effect_rows: Vec::new(), + grouped_company_targets: Vec::new(), + decoded_conditions: Vec::new(), + decoded_actions: Vec::new(), + executable_import_ready: false, + import_outcome: Some("blocked_shell_owned_descriptor".to_string()), + notes: Vec::new(), + }], + }), + event_runtime_records: Vec::new(), + candidate_availability: BTreeMap::new(), + named_locomotive_availability: BTreeMap::new(), + named_locomotive_cost: BTreeMap::new(), + cargo_production_overrides: BTreeMap::new(), + special_conditions: BTreeMap::new(), + service_state: RuntimeServiceState::default(), + }; + + let summary = RuntimeSummary::from_state(&state); + assert_eq!(summary.packed_event_blocked_shell_owned_descriptor_count, 1); + } } diff --git a/docs/README.md b/docs/README.md index 1335cac..4dd853c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -97,9 +97,13 @@ The highest-value next passes are now: tables too, so the current company-targeted and chairman-targeted descriptor/condition batches can execute from standalone save-slice fixtures without overlay snapshots when that context is present; raw `.gms` inspection/export still does not reconstruct those company/chairman surfaces -- a generic company-governance scalar effect surface now exists in runtime too, but real - governance descriptor ids remain deferred until the checked-in `EventEffects.win` evidence is - strong enough to recover them honestly +- a checked-in `EventEffects` export now exists at + `artifacts/exports/rt3-1.06/event-effects-table.json`, and the first recovered governance + descriptor tranche now executes through the generic company-governance scalar effect surface: + descriptor `56` `Credit Rating` and descriptor `57` `Prime Rate` +- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58` + `Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped + descriptor residue - widen real packed-event executable coverage descriptor by descriptor after identity, target mask, and normalized effect semantics are all grounded, not just after row framing is parsed - the first grounded condition-side unlock now exists for negative-sentinel `raw_condition_id = -1` @@ -190,6 +194,15 @@ python3 tools/py/export_startup_map.py \ artifacts/exports/rt3-1.06 ``` +Regenerate the checked-in `EventEffects` table export with: + +```bash +python3 tools/py/extract_event_effects.py \ + rt3_wineprefix/drive_c/rt3/RT3.exe \ + rt3_wineprefix/drive_c/rt3/Data/Language/RT3.lng \ + artifacts/exports/rt3-1.06/event-effects-table.json +``` + That default export now walks two roots: - `entry:0x005a313b` diff --git a/docs/runtime-rehost-plan.md b/docs/runtime-rehost-plan.md index 02e3d82..a170738 100644 --- a/docs/runtime-rehost-plan.md +++ b/docs/runtime-rehost-plan.md @@ -60,9 +60,14 @@ Implemented today: chairman-targeted descriptor/condition batches execute from standalone save-slice fixtures without overlay snapshots when the checked-in documents include that context, while raw `.gms` inspection/export still leaves those company/chairman surfaces absent -- a generic company-governance scalar effect surface now exists in runtime, but real governance - descriptor recovery is still deferred until the checked-in effect-table evidence can ground the - ids honestly +- a checked-in `EventEffects` export now exists too at + `artifacts/exports/rt3-1.06/event-effects-table.json`, and the first recovered + company-governance descriptor tranche now executes through the generic + `SetCompanyGovernanceScalar` surface: descriptor `56` `Credit Rating` and descriptor `57` + `Prime Rate` now import through ordinary company target lowering +- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58` + `Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped + descriptor buckets - a minimal event-owned train surface and an opaque economic-status lane now exist in runtime state, and real descriptors `8` = `Economic Status`, `9` = `Confiscate All`, and `15` = `Retire Train` now import and execute through the ordinary runtime path when overlay context @@ -131,14 +136,13 @@ Implemented today: remaining world-side frontier is broader descriptor/condition breadth rather than missing cargo classification or save/import context -That means the next implementation work is breadth, not bootstrap. The recommended next slice is -broader real grouped-descriptor and ordinary condition-id coverage beyond the current access, -whole-game toggle, train, player, chairman selected-scope grouped effects, grounded -chairman/governance conditions, numeric-threshold, named locomotive availability, named locomotive -cost, world scalar override, and world-scalar condition batches, plus eventual raw save -reconstruction for company/chairman context once stronger evidence exists. Richer runtime ownership -should still be added only where a later descriptor or condition family needs more than the -current event-owned roster. +That means the next implementation work is still breadth, not bootstrap. The current descriptor +frontier is no longer anonymous id recovery; it is the remaining recovered-but-nonexecutable +families from the checked-in effect table, especially broader company/world scalar bands and the +shell-owned finance/control-transfer rows that still need final classification or bounded runtime +landing surfaces. Raw save reconstruction for company/chairman context is still a later tranche +once stronger evidence exists. Richer runtime ownership should still be added only where a later +descriptor or condition family needs more than the current event-owned roster. ## Why This Boundary diff --git a/fixtures/runtime/packed-event-credit-rating-descriptor-context-save-slice.json b/fixtures/runtime/packed-event-credit-rating-descriptor-context-save-slice.json new file mode 100644 index 0000000..6470cc9 --- /dev/null +++ b/fixtures/runtime/packed-event-credit-rating-descriptor-context-save-slice.json @@ -0,0 +1,228 @@ +{ + "format_version": 1, + "save_slice_id": "packed-event-credit-rating-descriptor-save-slice", + "source": { + "description": "Tracked save-slice document proving recovered Credit Rating descriptor import and execution.", + "original_save_filename": "captured-credit-rating-descriptor.gms", + "original_save_sha256": "credit-rating-descriptor-sample-sha256", + "notes": [ + "tracked as JSON save-slice document rather than raw .smp", + "pins the first recovered executable governance descriptor from the checked-in EventEffects table" + ] + }, + "save_slice": { + "file_extension_hint": "gms", + "container_profile_family": "rt3-classic-save-container-v1", + "mechanism_family": "classic-save-rehydrate-v1", + "mechanism_confidence": "grounded", + "trailer_family": null, + "bridge_family": null, + "profile": null, + "candidate_availability_table": null, + "named_locomotive_availability_table": null, + "cargo_catalog": null, + "special_conditions_table": null, + "event_runtime_collection": { + "source_kind": "packed-event-runtime-collection", + "mechanism_family": "classic-save-rehydrate-v1", + "mechanism_confidence": "grounded", + "container_profile_family": "rt3-classic-save-container-v1", + "metadata_tag_offset": 28928, + "records_tag_offset": 29184, + "close_tag_offset": 29696, + "packed_state_version": 1001, + "packed_state_version_hex": "0x000003e9", + "live_id_bound": 73, + "live_record_count": 1, + "live_entry_ids": [ + 73 + ], + "decoded_record_count": 1, + "imported_runtime_record_count": 0, + "records": [ + { + "record_index": 0, + "live_entry_id": 73, + "payload_offset": 29186, + "payload_len": 120, + "decode_status": "executable", + "payload_family": "real_packed_v1", + "trigger_kind": 7, + "active": null, + "marks_collection_dirty": null, + "one_shot": false, + "compact_control": { + "mode_byte_0x7ef": 6, + "primary_selector_0x7f0": 99, + "grouped_mode_0x7f4": 2, + "one_shot_header_0x7f5": 1, + "modifier_flag_0x7f9": 1, + "modifier_flag_0x7fa": 0, + "grouped_target_scope_ordinals_0x7fb": [ + 0, + 1, + 2, + 3 + ], + "grouped_scope_checkboxes_0x7ff": [ + 1, + 0, + 1, + 0 + ], + "summary_toggle_0x800": 1, + "grouped_territory_selectors_0x80f": [ + -1, + 10, + -1, + 22 + ] + }, + "text_bands": [], + "standalone_condition_row_count": 0, + "standalone_condition_rows": [], + "negative_sentinel_scope": null, + "grouped_effect_row_counts": [ + 1, + 0, + 0, + 0 + ], + "grouped_effect_rows": [ + { + "group_index": 0, + "row_index": 0, + "descriptor_id": 56, + "descriptor_label": "Credit Rating", + "target_mask_bits": 11, + "parameter_family": "company_governance_scalar", + "opcode": 3, + "raw_scalar_value": 640, + "value_byte_0x09": 0, + "value_dword_0x0d": 0, + "value_byte_0x11": 0, + "value_byte_0x12": 0, + "value_word_0x14": 0, + "value_word_0x16": 0, + "row_shape": "scalar_assignment", + "semantic_family": "scalar_assignment", + "semantic_preview": "Set Credit Rating to 640", + "locomotive_name": null, + "notes": [ + "descriptor recovered from checked-in EventEffects table" + ] + } + ], + "decoded_conditions": [], + "decoded_actions": [ + { + "kind": "set_company_governance_scalar", + "target": { + "kind": "selected_company" + }, + "metric": "credit_rating", + "value": 640 + } + ], + "executable_import_ready": true, + "notes": [ + "credit-rating descriptor lowers through the checked-in EventEffects table" + ] + } + ] + }, + "notes": [ + "real company-governance descriptor sample" + ], + "company_roster": { + "source_kind": "tracked-save-slice-company-roster", + "semantic_family": "save-slice-runtime-company-context", + "observed_entry_count": 2, + "selected_company_id": 1, + "entries": [ + { + "company_id": 1, + "active": true, + "controller_kind": "human", + "current_cash": 150, + "debt": 80, + "credit_rating_score": 650, + "prime_rate": 5, + "available_track_laying_capacity": 6, + "track_piece_counts": { + "total": 20, + "single": 5, + "double": 8, + "transition": 1, + "electric": 3, + "non_electric": 17 + }, + "linked_chairman_profile_id": 1, + "book_value_per_share": 2620, + "investor_confidence": 37, + "management_attitude": 58, + "takeover_cooldown_year": 1839, + "merger_cooldown_year": 1838 + }, + { + "company_id": 2, + "active": true, + "controller_kind": "ai", + "current_cash": 90, + "debt": 40, + "credit_rating_score": 480, + "prime_rate": 6, + "available_track_laying_capacity": 2, + "track_piece_counts": { + "total": 8, + "single": 2, + "double": 2, + "transition": 0, + "electric": 1, + "non_electric": 7 + }, + "linked_chairman_profile_id": 2, + "book_value_per_share": 1400, + "investor_confidence": 22, + "management_attitude": 31, + "takeover_cooldown_year": null, + "merger_cooldown_year": null + } + ] + }, + "chairman_profile_table": { + "source_kind": "tracked-save-slice-chairman-profile-table", + "semantic_family": "save-slice-runtime-chairman-context", + "observed_entry_count": 2, + "selected_chairman_profile_id": 1, + "entries": [ + { + "profile_id": 1, + "name": "Chairman One", + "active": true, + "current_cash": 500, + "linked_company_id": 1, + "company_holdings": { + "1": 1000 + }, + "holdings_value_total": 700, + "net_worth_total": 1200, + "purchasing_power_total": 1500 + }, + { + "profile_id": 2, + "name": "Chairman Two", + "active": true, + "current_cash": 250, + "linked_company_id": 2, + "company_holdings": { + "2": 900 + }, + "holdings_value_total": 600, + "net_worth_total": 900, + "purchasing_power_total": 1100 + } + ] + } + } +} diff --git a/fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json b/fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json new file mode 100644 index 0000000..3a802b3 --- /dev/null +++ b/fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json @@ -0,0 +1,53 @@ +{ + "format_version": 1, + "fixture_id": "packed-event-credit-rating-descriptor-save-slice-fixture", + "source": { + "kind": "captured-runtime", + "description": "Fixture proving recovered Credit Rating descriptor executes from save-slice-backed company context." + }, + "state_save_slice_path": "packed-event-credit-rating-descriptor-context-save-slice.json", + "commands": [ + { + "kind": "service_trigger_kind", + "trigger_kind": 7 + } + ], + "expected_summary": { + "calendar_projection_source": "default-1830-placeholder", + "calendar_projection_is_placeholder": true, + "company_count": 2, + "chairman_profile_count": 2, + "packed_event_collection_present": true, + "packed_event_record_count": 1, + "packed_event_decoded_record_count": 1, + "packed_event_imported_runtime_record_count": 1, + "event_runtime_record_count": 1, + "total_event_record_service_count": 1, + "total_trigger_dispatch_count": 1 + }, + "expected_state_fragment": { + "companies": [ + { + "company_id": 1, + "credit_rating_score": 640 + }, + { + "company_id": 2, + "credit_rating_score": 480 + } + ], + "packed_event_collection": { + "records": [ + { + "import_outcome": "imported" + } + ] + }, + "event_runtime_records": [ + { + "record_id": 73, + "service_count": 1 + } + ] + } +} diff --git a/fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json b/fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json new file mode 100644 index 0000000..7e0b214 --- /dev/null +++ b/fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json @@ -0,0 +1,39 @@ +{ + "format_version": 1, + "fixture_id": "packed-event-merger-premium-shell-save-slice-fixture", + "source": { + "kind": "captured-runtime", + "description": "Fixture pinning the explicit shell-owned descriptor frontier for recovered Merger Premium rows." + }, + "state_save_slice_path": "packed-event-merger-premium-shell-save-slice.json", + "commands": [ + { + "kind": "service_trigger_kind", + "trigger_kind": 7 + } + ], + "expected_summary": { + "calendar_projection_source": "default-1830-placeholder", + "calendar_projection_is_placeholder": true, + "company_count": 2, + "chairman_profile_count": 2, + "packed_event_collection_present": true, + "packed_event_record_count": 1, + "packed_event_decoded_record_count": 1, + "packed_event_parity_only_record_count": 1, + "packed_event_blocked_shell_owned_descriptor_count": 1, + "event_runtime_record_count": 0, + "total_event_record_service_count": 0, + "total_trigger_dispatch_count": 1 + }, + "expected_state_fragment": { + "packed_event_collection": { + "records": [ + { + "import_outcome": "blocked_shell_owned_descriptor" + } + ] + }, + "event_runtime_records": [] + } +} diff --git a/fixtures/runtime/packed-event-merger-premium-shell-save-slice.json b/fixtures/runtime/packed-event-merger-premium-shell-save-slice.json new file mode 100644 index 0000000..62d20a8 --- /dev/null +++ b/fixtures/runtime/packed-event-merger-premium-shell-save-slice.json @@ -0,0 +1,219 @@ +{ + "format_version": 1, + "save_slice_id": "packed-event-merger-premium-shell-save-slice", + "source": { + "description": "Tracked save-slice document pinning a recovered shell-owned Merger Premium descriptor.", + "original_save_filename": "captured-merger-premium-shell.gms", + "original_save_sha256": "merger-premium-shell-sample-sha256", + "notes": [ + "tracked as JSON save-slice document rather than raw .smp", + "pins the explicit shell-owned descriptor frontier for recovered company finance rows" + ] + }, + "save_slice": { + "file_extension_hint": "gms", + "container_profile_family": "rt3-classic-save-container-v1", + "mechanism_family": "classic-save-rehydrate-v1", + "mechanism_confidence": "grounded", + "trailer_family": null, + "bridge_family": null, + "profile": null, + "candidate_availability_table": null, + "named_locomotive_availability_table": null, + "cargo_catalog": null, + "special_conditions_table": null, + "event_runtime_collection": { + "source_kind": "packed-event-runtime-collection", + "mechanism_family": "classic-save-rehydrate-v1", + "mechanism_confidence": "grounded", + "container_profile_family": "rt3-classic-save-container-v1", + "metadata_tag_offset": 28928, + "records_tag_offset": 29184, + "close_tag_offset": 29696, + "packed_state_version": 1001, + "packed_state_version_hex": "0x000003e9", + "live_id_bound": 74, + "live_record_count": 1, + "live_entry_ids": [ + 74 + ], + "decoded_record_count": 1, + "imported_runtime_record_count": 0, + "records": [ + { + "record_index": 0, + "live_entry_id": 74, + "payload_offset": 29186, + "payload_len": 120, + "decode_status": "parity_only", + "payload_family": "real_packed_v1", + "trigger_kind": 7, + "active": null, + "marks_collection_dirty": null, + "one_shot": false, + "compact_control": { + "mode_byte_0x7ef": 6, + "primary_selector_0x7f0": 99, + "grouped_mode_0x7f4": 2, + "one_shot_header_0x7f5": 1, + "modifier_flag_0x7f9": 1, + "modifier_flag_0x7fa": 0, + "grouped_target_scope_ordinals_0x7fb": [ + 0, + 1, + 2, + 3 + ], + "grouped_scope_checkboxes_0x7ff": [ + 1, + 0, + 1, + 0 + ], + "summary_toggle_0x800": 1, + "grouped_territory_selectors_0x80f": [ + -1, + 10, + -1, + 22 + ] + }, + "text_bands": [], + "standalone_condition_row_count": 0, + "standalone_condition_rows": [], + "negative_sentinel_scope": null, + "grouped_effect_row_counts": [ + 1, + 0, + 0, + 0 + ], + "grouped_effect_rows": [ + { + "group_index": 0, + "row_index": 0, + "descriptor_id": 58, + "descriptor_label": "Merger Premium", + "target_mask_bits": 11, + "parameter_family": "company_finance_shell_scalar", + "opcode": 3, + "raw_scalar_value": 25, + "value_byte_0x09": 0, + "value_dword_0x0d": 0, + "value_byte_0x11": 0, + "value_byte_0x12": 0, + "value_word_0x14": 0, + "value_word_0x16": 0, + "row_shape": "scalar_assignment", + "semantic_family": "scalar_assignment", + "semantic_preview": "Set Merger Premium to 25", + "locomotive_name": null, + "notes": [ + "descriptor recovered in the checked-in effect table as shell_owned parity" + ] + } + ], + "decoded_conditions": [], + "decoded_actions": [], + "executable_import_ready": false, + "notes": [ + "merger-premium descriptor is recovered but remains shell-owned parity" + ] + } + ] + }, + "notes": [ + "recovered shell-owned company-finance descriptor sample" + ], + "company_roster": { + "source_kind": "tracked-save-slice-company-roster", + "semantic_family": "save-slice-runtime-company-context", + "observed_entry_count": 2, + "selected_company_id": 1, + "entries": [ + { + "company_id": 1, + "active": true, + "controller_kind": "human", + "current_cash": 150, + "debt": 80, + "credit_rating_score": 650, + "prime_rate": 5, + "available_track_laying_capacity": 6, + "track_piece_counts": { + "total": 20, + "single": 5, + "double": 8, + "transition": 1, + "electric": 3, + "non_electric": 17 + }, + "linked_chairman_profile_id": 1, + "book_value_per_share": 2620, + "investor_confidence": 37, + "management_attitude": 58, + "takeover_cooldown_year": 1839, + "merger_cooldown_year": 1838 + }, + { + "company_id": 2, + "active": true, + "controller_kind": "ai", + "current_cash": 90, + "debt": 40, + "credit_rating_score": 480, + "prime_rate": 6, + "available_track_laying_capacity": 2, + "track_piece_counts": { + "total": 8, + "single": 2, + "double": 2, + "transition": 0, + "electric": 1, + "non_electric": 7 + }, + "linked_chairman_profile_id": 2, + "book_value_per_share": 1400, + "investor_confidence": 22, + "management_attitude": 31, + "takeover_cooldown_year": null, + "merger_cooldown_year": null + } + ] + }, + "chairman_profile_table": { + "source_kind": "tracked-save-slice-chairman-profile-table", + "semantic_family": "save-slice-runtime-chairman-context", + "observed_entry_count": 2, + "selected_chairman_profile_id": 1, + "entries": [ + { + "profile_id": 1, + "name": "Chairman One", + "active": true, + "current_cash": 500, + "linked_company_id": 1, + "company_holdings": { + "1": 1000 + }, + "holdings_value_total": 700, + "net_worth_total": 1200, + "purchasing_power_total": 1500 + }, + { + "profile_id": 2, + "name": "Chairman Two", + "active": true, + "current_cash": 250, + "linked_company_id": 2, + "company_holdings": { + "2": 900 + }, + "holdings_value_total": 600, + "net_worth_total": 900, + "purchasing_power_total": 1100 + } + ] + } + } +} diff --git a/tools/py/extract_event_effects.py b/tools/py/extract_event_effects.py new file mode 100644 index 0000000..eb934fb --- /dev/null +++ b/tools/py/extract_event_effects.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import argparse +import hashlib +import json +import re +import struct +from pathlib import Path + + +TABLE_BASE_VA = 0x00610398 +ROW_STRIDE = 0x6E +ROW_COUNT = 520 +IMAGE_BASE = 0x00400000 + + +def load_lng_labels(path: Path) -> dict[int, str]: + labels: dict[int, str] = {} + for line in path.read_text(encoding="latin1").splitlines(): + match = re.match(r"\s*(\d+)\s+\"(.*)\"\s*$", line) + if match: + labels[int(match.group(1))] = match.group(2) + return labels + + +def extract_rows(exe_bytes: bytes, labels: dict[int, str]) -> list[dict[str, object]]: + table_offset = TABLE_BASE_VA - IMAGE_BASE + rows: list[dict[str, object]] = [] + for row_index in range(ROW_COUNT): + row = exe_bytes[ + table_offset + row_index * ROW_STRIDE : table_offset + (row_index + 1) * ROW_STRIDE + ] + if len(row) < ROW_STRIDE: + break + label_id = struct.unpack_from(" None: + parser = argparse.ArgumentParser(description="Extract the RT3 EventEffects descriptor table.") + parser.add_argument("exe", type=Path) + parser.add_argument("lng", type=Path) + parser.add_argument("out", type=Path) + args = parser.parse_args() + + exe_bytes = args.exe.read_bytes() + labels = load_lng_labels(args.lng) + artifact = { + "table_base_va": f"0x{TABLE_BASE_VA:08x}", + "row_stride_hex": f"0x{ROW_STRIDE:02x}", + "descriptor_count": ROW_COUNT, + "binary_path_hint": str(args.exe), + "language_path_hint": str(args.lng), + "binary_sha256": hashlib.sha256(exe_bytes).hexdigest(), + "descriptors": extract_rows(exe_bytes, labels), + } + args.out.write_text(json.dumps(artifact, indent=2) + "\n", encoding="utf-8") + + +if __name__ == "__main__": + main()