diff --git a/CHANGELOG.md b/CHANGELOG.md index 68f8269..99f15fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- **Model Y Juniper Performance**: Support for P74D trim with 21" Überturbine wheels and red brake calipers +- **Model Y Juniper Premium**: Support for Premium (74/74D trim) with 19" Crossflow and 20" Helix 2.0 wheels in 6 colors (PPSW, PN01, PX02, PN00, PR01, PPSB) +- **Model Y Juniper Trim Detection**: Proper variant detection based on trim_badging (50=Standard, 74/74D=Premium, P74D=Performance) - **Stats for Nerds**: Tap the car image on Dashboard to access advanced statistics - Quick Stats: Total drives/charges, distance, energy, efficiency, top speed - Records: Longest drive, fastest drive, most efficient drive, biggest charge, busiest day diff --git a/app/src/main/assets/car_images/myj_PN00_WY19P.png b/app/src/main/assets/car_images/myj_PN00_WY19P.png new file mode 100644 index 0000000..9f60850 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PN00_WY19P.png differ diff --git a/app/src/main/assets/car_images/myj_PN00_WY20A.png b/app/src/main/assets/car_images/myj_PN00_WY20A.png new file mode 100644 index 0000000..7188f8c Binary files /dev/null and b/app/src/main/assets/car_images/myj_PN00_WY20A.png differ diff --git a/app/src/main/assets/car_images/myj_PN01_WY20A.png b/app/src/main/assets/car_images/myj_PN01_WY20A.png new file mode 100644 index 0000000..8185b8d Binary files /dev/null and b/app/src/main/assets/car_images/myj_PN01_WY20A.png differ diff --git a/app/src/main/assets/car_images/myj_PPSB_WY19P.png b/app/src/main/assets/car_images/myj_PPSB_WY19P.png new file mode 100644 index 0000000..011d995 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PPSB_WY19P.png differ diff --git a/app/src/main/assets/car_images/myj_PPSB_WY20A.png b/app/src/main/assets/car_images/myj_PPSB_WY20A.png new file mode 100644 index 0000000..e579fc2 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PPSB_WY20A.png differ diff --git a/app/src/main/assets/car_images/myj_PPSW_WY20A.png b/app/src/main/assets/car_images/myj_PPSW_WY20A.png new file mode 100644 index 0000000..590c1d3 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PPSW_WY20A.png differ diff --git a/app/src/main/assets/car_images/myj_PR01_WY19P.png b/app/src/main/assets/car_images/myj_PR01_WY19P.png new file mode 100644 index 0000000..c501138 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PR01_WY19P.png differ diff --git a/app/src/main/assets/car_images/myj_PR01_WY20A.png b/app/src/main/assets/car_images/myj_PR01_WY20A.png new file mode 100644 index 0000000..dd516f3 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PR01_WY20A.png differ diff --git a/app/src/main/assets/car_images/myj_PX02_WY20A.png b/app/src/main/assets/car_images/myj_PX02_WY20A.png new file mode 100644 index 0000000..032e5c9 Binary files /dev/null and b/app/src/main/assets/car_images/myj_PX02_WY20A.png differ diff --git a/app/src/main/assets/car_images/myjp_PB02_WY21A.png b/app/src/main/assets/car_images/myjp_PB02_WY21A.png new file mode 100644 index 0000000..2b95c4e Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PB02_WY21A.png differ diff --git a/app/src/main/assets/car_images/myjp_PN00_WY21A.png b/app/src/main/assets/car_images/myjp_PN00_WY21A.png new file mode 100644 index 0000000..ac9340a Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PN00_WY21A.png differ diff --git a/app/src/main/assets/car_images/myjp_PN01_WY21A.png b/app/src/main/assets/car_images/myjp_PN01_WY21A.png new file mode 100644 index 0000000..36aadd7 Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PN01_WY21A.png differ diff --git a/app/src/main/assets/car_images/myjp_PPSW_WY21A.png b/app/src/main/assets/car_images/myjp_PPSW_WY21A.png new file mode 100644 index 0000000..8edfff0 Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PPSW_WY21A.png differ diff --git a/app/src/main/assets/car_images/myjp_PR01_WY21A.png b/app/src/main/assets/car_images/myjp_PR01_WY21A.png new file mode 100644 index 0000000..92d7ed4 Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PR01_WY21A.png differ diff --git a/app/src/main/assets/car_images/myjp_PX02_WY21A.png b/app/src/main/assets/car_images/myjp_PX02_WY21A.png new file mode 100644 index 0000000..45099dc Binary files /dev/null and b/app/src/main/assets/car_images/myjp_PX02_WY21A.png differ diff --git a/app/src/main/java/com/matedroid/domain/model/CarImageResolver.kt b/app/src/main/java/com/matedroid/domain/model/CarImageResolver.kt index 2bc1320..af4a7a2 100644 --- a/app/src/main/java/com/matedroid/domain/model/CarImageResolver.kt +++ b/app/src/main/java/com/matedroid/domain/model/CarImageResolver.kt @@ -12,7 +12,13 @@ package com.matedroid.domain.model * - Legacy Model 3 (pre-2024): m3_{color}_{wheel}.png * - Highland Model 3 (2024+): m3h_{color}_{wheel}.png or m3hp_{color}_{wheel}.png * - Legacy Model Y (pre-2025): my_{color}_{wheel}.png - * - Juniper Model Y (2025+): myj_{color}_{wheel}.png + * - Juniper Model Y (2025+): myj_{color}_{wheel}.png (Standard/Premium) + * - Juniper Model Y Performance (2025+): myjp_{color}_{wheel}.png (has red calipers) + * + * Juniper Model Y trim detection via trim_badging: + * - "50" = Standard Range (18" Photon wheels) + * - "74", "74D" = Long Range/Premium (19" Crossflow wheels) + * - "P74D" = Performance (21" Überturbine wheels, red calipers) */ object CarImageResolver { @@ -30,7 +36,7 @@ object CarImageResolver { "white" to "PPSW", "pearlwhite" to "PPSW", "pearlwhitemulticoat" to "PPSW", - "deepblue" to "PPSB", + "deepblue" to "PPSB", // Legacy deep blue "deepbluemetallic" to "PPSB", "blue" to "PPSB", "red" to "PPMR", @@ -42,6 +48,7 @@ object CarImageResolver { "midnightcherryred" to "PR00", "ultrared" to "PR01", "blackdiamond" to "PX02" + // Note: PB02 (Juniper Deep Blue) is handled via fallback - same TeslamateAPI name as PPSB ) // Colors only available on Highland/Juniper @@ -52,7 +59,7 @@ object CarImageResolver { private val HIGHLAND_M3_WHEEL_TYPES = setOf("photon18", "glider18", "nova18", "nova19", "helix19", "w38a") // Wheel types only available on Juniper Model Y (normalized, lowercase) - private val JUNIPER_MY_WHEEL_TYPES = setOf("photon18", "wy18p", "crossflow19", "wy19p") + private val JUNIPER_MY_WHEEL_TYPES = setOf("photon18", "wy18p", "crossflow19", "wy19p", "helix20", "wy20a") // Legacy Model 3 valid colors private val LEGACY_M3_COLORS = setOf("PBSB", "PMNG", "PMSS", "PPSW", "PPSB", "PPMR", "PMBL") @@ -63,8 +70,12 @@ object CarImageResolver { // Legacy Model Y valid colors private val LEGACY_MY_COLORS = setOf("PBSB", "PMNG", "PPSW", "PPSB", "PPMR") - // Juniper Model Y valid colors - private val JUNIPER_MY_COLORS = setOf("PPSW", "PN01", "PX02") + // Juniper Model Y valid colors (Standard/Premium) + // Note: PN00/PR01/PPSB only available with Premium (MTY60) 19"/20" wheels + private val JUNIPER_MY_COLORS = setOf("PPSW", "PN01", "PX02", "PN00", "PR01", "PPSB") + + // Juniper Model Y Performance valid colors (all 6 colors) + private val JUNIPER_MY_PERF_COLORS = setOf("PPSW", "PN01", "PX02", "PB02", "PN00", "PR01") // Wheel code mappings per model variant // Keys are patterns that match the start of the TeslamateAPI wheel type @@ -118,14 +129,22 @@ object CarImageResolver { "18" to "WY18B" ) - // Juniper Model Y wheels + // Juniper Model Y wheels (Standard/Premium) private val WHEEL_PATTERNS_MYJ = listOf( + "helix20" to "WY20A", "crossflow19" to "WY19P", "photon18" to "WY18P", + "20" to "WY20A", "19" to "WY19P", "18" to "WY18P" ) + // Juniper Model Y Performance wheels + private val WHEEL_PATTERNS_MYJP = listOf( + "uberturbine21" to "WY21A", + "21" to "WY21A" + ) + // Model S wheels private val WHEEL_PATTERNS_MS = listOf( "tempest19" to "WT19", @@ -145,6 +164,7 @@ object CarImageResolver { "m3hp" to "W30P", "my" to "WY19B", "myj" to "WY18P", + "myjp" to "WY21A", "ms" to "WT19", "mx" to "WX20" ) @@ -156,6 +176,7 @@ object CarImageResolver { "m3hp" to "PPSW", "my" to "PPSW", "myj" to "PPSW", + "myjp" to "PPSW", "ms" to "PPSW", "mx" to "PPSW" ) @@ -210,7 +231,7 @@ object CarImageResolver { fun getScaleFactorForVariant(modelVariant: String): Float { return when (modelVariant) { "m3h", "m3hp" -> 1.35f // Highland Model 3 renders smaller - "myj" -> 1.25f // Juniper Model Y renders smaller + "myj", "myjp" -> 1.25f // Juniper Model Y renders smaller "mx" -> 1.4f // Model X renders smaller else -> 1.0f // Legacy models render at full size } @@ -271,6 +292,11 @@ object CarImageResolver { * 1. If color is a new Highland/Juniper-only color (PN00, PN01, PR01, PX02), use Highland/Juniper * 2. If wheel type is a Highland/Juniper-only wheel (Photon18, Glider18, etc.), use Highland/Juniper * 3. Otherwise, assume legacy + * + * Trim badging for Juniper Model Y: + * - "50" = Standard Range (18" Photon wheels) + * - "74", "74D" = Long Range/Premium (19" Crossflow wheels) + * - "P74D" = Performance (21" Überturbine wheels, red calipers) */ private fun determineModelVariant( model: String?, @@ -288,10 +314,14 @@ object CarImageResolver { val isHighlandM3Wheel = normalizedWheel != null && HIGHLAND_M3_WHEEL_TYPES.any { normalizedWheel.startsWith(it) } val isJuniperMYWheel = normalizedWheel != null && JUNIPER_MY_WHEEL_TYPES.any { normalizedWheel.startsWith(it) } - // Check for Performance trim + // Check for Performance trim (P prefix like "P74D") val isPerformance = trimBadging?.uppercase()?.startsWith("P") == true || trimBadging?.lowercase()?.contains("performance") == true + // Check for 21" Überturbine wheels (Performance-only on Juniper) + val isJuniperPerfWheel = normalizedWheel?.startsWith("uberturbine21") == true || + normalizedWheel?.startsWith("21") == true + return when (baseModel) { "3" -> when { (isHighlandJuniperColor || isHighlandM3Wheel) && isPerformance -> "m3hp" @@ -299,6 +329,9 @@ object CarImageResolver { else -> "m3" } "Y" -> when { + // Juniper Performance: P74D trim or 21" wheels + (isHighlandJuniperColor || isJuniperMYWheel || isJuniperPerfWheel) && (isPerformance || isJuniperPerfWheel) -> "myjp" + // Juniper Standard/Premium: non-P trim with Juniper colors/wheels isHighlandJuniperColor || isJuniperMYWheel -> "myj" else -> "my" } @@ -318,6 +351,7 @@ object CarImageResolver { "m3h", "m3hp" -> HIGHLAND_M3_COLORS "my" -> LEGACY_MY_COLORS "myj" -> JUNIPER_MY_COLORS + "myjp" -> JUNIPER_MY_PERF_COLORS "ms", "mx" -> MODEL_SX_COLORS else -> LEGACY_M3_COLORS } @@ -346,6 +380,7 @@ object CarImageResolver { "m3hp" -> WHEEL_PATTERNS_M3HP "my" -> WHEEL_PATTERNS_MY "myj" -> WHEEL_PATTERNS_MYJ + "myjp" -> WHEEL_PATTERNS_MYJP "ms" -> WHEEL_PATTERNS_MS "mx" -> WHEEL_PATTERNS_MX else -> WHEEL_PATTERNS_M3 diff --git a/docs/ASSETS.md b/docs/ASSETS.md index e2c7544..4c29753 100644 --- a/docs/ASSETS.md +++ b/docs/ASSETS.md @@ -76,7 +76,8 @@ https://static-assets.tesla.com/configurator/compositor?context=design_studio_2& | Highland Model 3 | 2024+ | New | `m3h` | | Highland Model 3 Performance | 2024+ Perf | New | `m3hp` | | Legacy Model Y | Pre-2025 | Old | `my` | -| Juniper Model Y | 2025+ | New | `myj` | +| Juniper Model Y | 2025+ Standard/Premium | New | `myj` | +| Juniper Model Y Performance | 2025+ Performance | New | `myjp` | | Model S | All | Old | `ms` | | Model X | All | Old | `mx` | @@ -87,7 +88,24 @@ https://static-assets.tesla.com/configurator/compositor?context=design_studio_2& | `MT369` | Model 3 Highland | Standard | `IPB2` | | `MT370` | Model 3 Highland | Premium | `IPB3` | | `MT371` | Model 3 Highland | Performance | `IPB4` | -| `MTY68` | Model Y Juniper | Standard | `IBB3` | +| `MTY68` | Model Y Juniper | Standard/Long Range | `IBB3` | +| `MTY52` | Model Y Juniper | Premium (19") | `IPB7` | +| `MTY60` | Model Y Juniper | Premium (20") | `IPB8` | +| `MTY53` | Model Y Juniper | Performance | `IPB10` | + +**Note on Model Y Juniper compositor support:** +- `MTY68` works with `STUD_3QTR` view for 3 colors (PPSW, PN01, PX02) with 18"/19" wheels +- `MTY52` has limited support on `STUD_3QTR` - we use `MTY68` with 19" wheels instead +- `MTY60` works with `STUD_3QTR` view for 5 colors (PPSW, PN01, PX02, PN00, PR01) with 20" wheels +- `MTY53` works with `STUD_3QTR` view for all 6 colors with 21" wheels + +### Model Y Juniper Trim Badging (from TeslamateAPI) + +| Trim Badge | Variant | Default Wheels | Notes | +|------------|---------|----------------|-------| +| `50` | Standard Range | 18" Photon (WY18P) | | +| `74`, `74D` | Long Range/Premium | 19" Crossflow (WY19P) | | +| `P74D` | Performance | 21" Überturbine (WY21A) | Red brake calipers | --- @@ -112,19 +130,20 @@ https://static-assets.tesla.com/configurator/compositor?context=design_studio_2& ### Color Availability by Model Variant -| Color Code | Legacy M3 | Highland M3 | Legacy MY | Juniper MY | -|------------|-----------|-------------|-----------|------------| -| `PBSB` | ✅ | ✅ | ✅ | ❌ | -| `PMBL` | ✅ | ❌ | ❌ | ❌ | -| `PMNG` | ✅ | ❌ | ✅ | ❌ | -| `PMSS` | ✅ | ❌ | ❌ | ❌ | -| `PPSW` | ✅ | ✅ | ✅ | ✅ | -| `PPSB` | ✅ | ✅ | ✅ | ❌ | -| `PPMR` | ✅ | ❌ | ✅ | ❌ | -| `PN00` | ❌ | ✅ | ❌ | ❌ | -| `PN01` | ❌ | ✅ | ❌ | ✅ | -| `PR01` | ❌ | ✅ | ❌ | ❌ | -| `PX02` | ❌ | ✅ | ❌ | ✅ | +| Color Code | Legacy M3 | Highland M3 | Legacy MY | Juniper MY | Juniper MY Perf | +|------------|-----------|-------------|-----------|------------|-----------------| +| `PBSB` | ✅ | ✅ | ✅ | ❌ | ❌ | +| `PMBL` | ✅ | ❌ | ❌ | ❌ | ❌ | +| `PMNG` | ✅ | ❌ | ✅ | ❌ | ❌ | +| `PMSS` | ✅ | ❌ | ❌ | ❌ | ❌ | +| `PPSW` | ✅ | ✅ | ✅ | ✅ | ✅ | +| `PPSB` | ✅ | ✅ | ✅ | ❌ | ❌ | +| `PPMR` | ✅ | ❌ | ✅ | ❌ | ❌ | +| `PN00` | ❌ | ✅ | ❌ | ❌ | ✅ | +| `PN01` | ❌ | ✅ | ❌ | ✅ | ✅ | +| `PR01` | ❌ | ✅ | ❌ | ❌ | ✅ | +| `PX02` | ❌ | ✅ | ❌ | ✅ | ✅ | +| `PB02` | ❌ | ❌ | ❌ | ❌ | ✅ | --- @@ -144,26 +163,29 @@ https://static-assets.tesla.com/configurator/compositor?context=design_studio_2& | `Photon18*` | `W38A` | `WY18P` | 18" Photon (Highland/Juniper) | | `Nova19*`, `Helix19*` | `W38A`* | - | 19" Nova (Highland M3) - *fallback, not in compositor | | `Crossflow19*` | - | `WY19P` | 19" Crossflow (Juniper MY) | +| `Helix20*` | - | `WY20A` | 20" Helix 2.0 (Juniper MY Premium) | | `Glider18*`, `Nova18*` | `W38A` | - | 18" Glider/Nova (Highland M3) | **Note**: TeslamateAPI may append suffixes like `CapKit`, `Cover`, etc. The mapping strips these. ### Wheel Availability by Model Variant -| Wheel Code | Legacy M3 | Highland M3 | Highland M3P | Legacy MY | Juniper MY | -|------------|-----------|-------------|--------------|-----------|------------| -| `W38B` | ✅ | ❌ | ❌ | - | - | -| `W39B` | ✅ | ❌ | ❌ | - | - | -| `W32P` | ✅ | ❌ | ❌ | - | - | -| `W38A` | ❌ | ✅ | ❌ | - | - | -| `W30P` | ❌ | ❌ | ✅ | - | - | -| `WY18B` | - | - | - | ✅ | ❌ | -| `WY19B` | - | - | - | ✅ | ❌ | -| `WY20P` | - | - | - | ✅ | ❌ | -| `WY0S` | - | - | - | ✅ | ❌ | -| `WY1S` | - | - | - | ✅ | ❌ | -| `WY18P` | - | - | - | ❌ | ✅ | -| `WY19P` | - | - | - | ❌ | ✅ | +| Wheel Code | Legacy M3 | Highland M3 | Highland M3P | Legacy MY | Juniper MY | Juniper MY Perf | +|------------|-----------|-------------|--------------|-----------|------------|-----------------| +| `W38B` | ✅ | ❌ | ❌ | - | - | - | +| `W39B` | ✅ | ❌ | ❌ | - | - | - | +| `W32P` | ✅ | ❌ | ❌ | - | - | - | +| `W38A` | ❌ | ✅ | ❌ | - | - | - | +| `W30P` | ❌ | ❌ | ✅ | - | - | - | +| `WY18B` | - | - | - | ✅ | ❌ | ❌ | +| `WY19B` | - | - | - | ✅ | ❌ | ❌ | +| `WY20P` | - | - | - | ✅ | ❌ | ❌ | +| `WY0S` | - | - | - | ✅ | ❌ | ❌ | +| `WY1S` | - | - | - | ✅ | ❌ | ❌ | +| `WY18P` | - | - | - | ❌ | ✅ | ❌ | +| `WY19P` | - | - | - | ❌ | ✅ | ❌ | +| `WY20A` | - | - | - | ❌ | ✅ | ❌ | +| `WY21A` | - | - | - | ❌ | ❌ | ✅ | --- @@ -227,6 +249,7 @@ Format: `{model_variant}_{color_code}_{wheel_code}.png` | Highland M3 Performance | `m3hp_PR01_W30P.png` | | Legacy Model Y | `my_PPSW_WY19B.png` | | Juniper Model Y | `myj_PX02_WY18P.png` | +| Juniper MY Performance | `myjp_PN01_WY21A.png` | | Model S | `ms_PPSW_WT19.png` | | Model X | `mx_PPSB_WX20.png` | @@ -240,10 +263,11 @@ Format: `{model_variant}_{color_code}_{wheel_code}.png` | Highland Model 3 | 7 | 1 | 7 | PNG | | Highland M3 Performance | 7 | 1 | 7 | PNG | | Legacy Model Y | 5 | 5 | 25 | PNG | -| Juniper Model Y | 3 | 2 | 6 | PNG | +| Juniper Model Y | 6 | 3 | 15 | PNG | +| Juniper MY Performance | 6 | 1 | 6 | PNG | | Model S | 5 | 1 | 5 | PNG | | Model X | 5 | 1 | 5 | PNG | -| **Total** | | | **76** | **~7 MB** | +| **Total** | | | **91** | **~9 MB** | --- diff --git a/util/fetch_tesla_assets.py b/util/fetch_tesla_assets.py index 647fc4a..e2e21d7 100755 --- a/util/fetch_tesla_assets.py +++ b/util/fetch_tesla_assets.py @@ -91,7 +91,8 @@ LEGACY_MY = { } # Juniper Model Y (2025+) -# MTY68 = Standard Juniper configuration +# MTY68 = Standard/Long Range configuration (18"/19" wheels) +# MTY60 = Premium configuration with 20" Helix wheels JUNIPER_MY = { "model_code": "my", "file_prefix": "myj", # j = juniper @@ -99,7 +100,33 @@ JUNIPER_MY = { "trim_code": "MTY68", "interior_code": "IBB3", "colors": ["PPSW", "PN01", "PX02"], - "wheels": ["WY18P", "WY19P"], # WY18P = Photon 18", WY19P = Crossflow 19" + "wheels": ["WY18P", "WY19P"], # WY18P = Photon 18" (Standard), WY19P = Crossflow 19" (Premium) + "compositor": "new", +} + +# Juniper Model Y Premium (2025+) +# MTY60 supports more colors than MTY68 for 19"/20" wheels +JUNIPER_MY_PREMIUM = { + "model_code": "my", + "file_prefix": "myj", # Same prefix, different wheel + "name": "Model Y Juniper Premium", + "trim_code": "MTY60", + "interior_code": "IPB8", + "colors": ["PPSW", "PN01", "PX02", "PN00", "PR01", "PPSB"], # 6 colors + "wheels": ["WY19P", "WY20A"], # 19" Crossflow and 20" Helix 2.0 + "compositor": "new", +} + +# Juniper Model Y Performance (2025+) +# MTY53 = Performance configuration with red calipers +JUNIPER_MY_PERF = { + "model_code": "my", + "file_prefix": "myjp", # jp = juniper performance + "name": "Model Y Juniper Performance", + "trim_code": "MTY53", + "interior_code": "IPB10", + "colors": ["PPSW", "PN01", "PX02", "PB02", "PN00", "PR01"], # All 6 colors available + "wheels": ["WY21A"], # 21" Überturbine wheels "compositor": "new", } @@ -124,7 +151,7 @@ MODEL_X = { } # All model configurations -ALL_MODELS = [LEGACY_M3, HIGHLAND_M3, HIGHLAND_M3_PERF, LEGACY_MY, JUNIPER_MY, MODEL_S, MODEL_X] +ALL_MODELS = [LEGACY_M3, HIGHLAND_M3, HIGHLAND_M3_PERF, LEGACY_MY, JUNIPER_MY, JUNIPER_MY_PREMIUM, JUNIPER_MY_PERF, MODEL_S, MODEL_X] # Color name mapping for display COLOR_NAMES = { @@ -140,6 +167,7 @@ COLOR_NAMES = { "PR00": "Midnight Cherry Red", "PR01": "Ultra Red", "PX02": "Black Diamond", + "PB02": "Deep Blue", # Juniper-only Deep Blue (different from PPSB) }