From b6970c09b89e3690113bb00efd9cd61d51ac801e Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 10 Jan 2023 17:08:34 +0000 Subject: [PATCH] Update bandwidth meter estimates PiperOrigin-RevId: 501010994 (cherry picked from commit 2c7e9ca8237e39bde686dd635699778aa8c6b96e) --- .../upstream/DefaultBandwidthMeter.java | 470 +++++++++--------- 1 file changed, 243 insertions(+), 227 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java index 04f73c76ee..924b9d3ac0 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java @@ -48,27 +48,27 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList /** Default initial Wifi bitrate estimate in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI = - ImmutableList.of(4_800_000L, 3_100_000L, 2_100_000L, 1_500_000L, 800_000L); + ImmutableList.of(4_400_000L, 3_200_000L, 2_300_000L, 1_600_000L, 810_000L); /** Default initial 2G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_2G = - ImmutableList.of(1_500_000L, 1_000_000L, 730_000L, 440_000L, 170_000L); + ImmutableList.of(1_400_000L, 990_000L, 730_000L, 510_000L, 230_000L); /** Default initial 3G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_3G = - ImmutableList.of(2_200_000L, 1_400_000L, 1_100_000L, 910_000L, 620_000L); + ImmutableList.of(2_100_000L, 1_400_000L, 1_000_000L, 890_000L, 640_000L); /** Default initial 4G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_4G = - ImmutableList.of(3_000_000L, 1_900_000L, 1_400_000L, 1_000_000L, 660_000L); + ImmutableList.of(2_600_000L, 1_700_000L, 1_300_000L, 1_000_000L, 700_000L); /** Default initial 5G-NSA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA = - ImmutableList.of(6_000_000L, 4_100_000L, 3_200_000L, 1_800_000L, 1_000_000L); + ImmutableList.of(5_700_000L, 3_700_000L, 2_300_000L, 1_700_000L, 990_000L); /** Default initial 5G-SA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA = - ImmutableList.of(2_800_000L, 2_400_000L, 1_600_000L, 1_100_000L, 950_000L); + ImmutableList.of(2_800_000L, 1_800_000L, 1_400_000L, 1_100_000L, 870_000L); /** * Default initial bitrate estimate used when the device is offline or the network type cannot be @@ -483,394 +483,410 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList */ private static int[] getInitialBitrateCountryGroupAssignment(String country) { switch (country) { + case "AD": + case "CW": + return new int[] {2, 2, 0, 0, 2, 2}; case "AE": - return new int[] {1, 4, 4, 4, 4, 0}; + return new int[] {1, 4, 3, 4, 4, 2}; case "AG": - return new int[] {2, 4, 1, 2, 2, 2}; - case "AI": - return new int[] {0, 2, 0, 3, 2, 2}; + return new int[] {2, 4, 3, 4, 2, 2}; + case "AL": + return new int[] {1, 1, 1, 3, 2, 2}; case "AM": return new int[] {2, 3, 2, 3, 2, 2}; case "AO": - return new int[] {4, 4, 3, 2, 2, 2}; + return new int[] {4, 4, 4, 3, 2, 2}; case "AS": return new int[] {2, 2, 3, 3, 2, 2}; case "AT": - return new int[] {1, 0, 1, 1, 0, 0}; + return new int[] {1, 2, 1, 4, 1, 4}; case "AU": - return new int[] {0, 1, 1, 1, 2, 0}; - case "AW": - return new int[] {1, 3, 4, 4, 2, 2}; - case "BA": - return new int[] {1, 2, 1, 1, 2, 2}; - case "BD": - return new int[] {2, 1, 3, 3, 2, 2}; + return new int[] {0, 2, 1, 1, 3, 0}; case "BE": return new int[] {0, 1, 4, 4, 3, 2}; - case "BF": - return new int[] {4, 3, 4, 3, 2, 2}; case "BH": - return new int[] {1, 2, 1, 3, 4, 2}; + return new int[] {1, 3, 1, 4, 4, 2}; case "BJ": - return new int[] {4, 4, 3, 3, 2, 2}; + return new int[] {4, 4, 2, 3, 2, 2}; + case "BN": + return new int[] {3, 2, 0, 1, 2, 2}; case "BO": return new int[] {1, 2, 3, 2, 2, 2}; - case "BS": - return new int[] {4, 4, 2, 2, 2, 2}; - case "BT": - return new int[] {3, 1, 3, 2, 2, 2}; + case "BR": + return new int[] {1, 1, 2, 1, 1, 0}; case "BW": return new int[] {3, 2, 1, 0, 2, 2}; case "BY": - return new int[] {0, 1, 2, 3, 2, 2}; - case "BZ": - return new int[] {2, 4, 2, 1, 2, 2}; + return new int[] {1, 1, 2, 3, 2, 2}; case "CA": - return new int[] {0, 2, 2, 2, 3, 2}; - case "CD": - return new int[] {4, 2, 3, 2, 2, 2}; + return new int[] {0, 2, 3, 3, 3, 3}; case "CH": - return new int[] {0, 0, 0, 1, 0, 2}; + return new int[] {0, 0, 0, 0, 0, 3}; + case "BZ": + case "CK": + return new int[] {2, 2, 2, 1, 2, 2}; + case "CL": + return new int[] {1, 1, 2, 1, 3, 2}; case "CM": - return new int[] {3, 3, 3, 3, 2, 2}; + return new int[] {4, 3, 3, 4, 2, 2}; case "CN": - return new int[] {2, 0, 1, 1, 3, 2}; + return new int[] {2, 0, 4, 3, 3, 1}; case "CO": - return new int[] {2, 3, 4, 3, 2, 2}; + return new int[] {2, 3, 4, 2, 2, 2}; case "CR": - return new int[] {2, 3, 4, 4, 2, 2}; + return new int[] {2, 4, 4, 4, 2, 2}; case "CV": - return new int[] {2, 1, 0, 0, 2, 2}; - case "BN": - case "CW": - return new int[] {2, 2, 0, 0, 2, 2}; + return new int[] {2, 3, 0, 1, 2, 2}; + case "CZ": + return new int[] {0, 0, 2, 0, 1, 2}; case "DE": - return new int[] {0, 1, 2, 2, 2, 3}; - case "DK": - return new int[] {0, 0, 3, 2, 0, 2}; + return new int[] {0, 1, 3, 2, 2, 2}; case "DO": return new int[] {3, 4, 4, 4, 4, 2}; + case "AZ": + case "BF": + case "DZ": + return new int[] {3, 3, 4, 4, 2, 2}; case "EC": - return new int[] {2, 3, 2, 1, 2, 2}; - case "ET": - return new int[] {4, 3, 3, 1, 2, 2}; + return new int[] {1, 3, 2, 1, 2, 2}; + case "CI": + case "EG": + return new int[] {3, 4, 3, 3, 2, 2}; case "FI": - return new int[] {0, 0, 0, 3, 0, 2}; + return new int[] {0, 0, 0, 2, 0, 2}; case "FJ": - return new int[] {3, 1, 2, 2, 2, 2}; + return new int[] {3, 1, 2, 3, 2, 2}; case "FM": - return new int[] {4, 2, 4, 1, 2, 2}; - case "FR": - return new int[] {1, 2, 3, 1, 0, 2}; - case "GB": - return new int[] {0, 0, 1, 1, 1, 1}; - case "GE": - return new int[] {1, 1, 1, 2, 2, 2}; + return new int[] {4, 2, 3, 0, 2, 2}; + case "AI": case "BB": + case "BM": + case "BQ": case "DM": case "FO": - case "GI": return new int[] {0, 2, 0, 0, 2, 2}; - case "AF": - case "GM": - return new int[] {4, 3, 3, 4, 2, 2}; - case "GN": - return new int[] {4, 3, 4, 2, 2, 2}; - case "GQ": - return new int[] {4, 2, 1, 4, 2, 2}; - case "GT": - return new int[] {2, 3, 2, 2, 2, 2}; + case "FR": + return new int[] {1, 1, 2, 1, 1, 2}; + case "GB": + return new int[] {0, 1, 1, 2, 1, 2}; + case "GE": + return new int[] {1, 0, 0, 2, 2, 2}; + case "GG": + return new int[] {0, 2, 1, 0, 2, 2}; case "CG": - case "EG": + case "GH": + return new int[] {3, 3, 3, 3, 2, 2}; + case "GM": + return new int[] {4, 3, 2, 4, 2, 2}; + case "GN": + return new int[] {4, 4, 4, 2, 2, 2}; + case "GP": + return new int[] {3, 1, 1, 3, 2, 2}; + case "GQ": + return new int[] {4, 4, 3, 3, 2, 2}; + case "GT": + return new int[] {2, 2, 2, 1, 1, 2}; + case "AW": + case "GU": + return new int[] {1, 2, 4, 4, 2, 2}; case "GW": - return new int[] {3, 4, 3, 3, 2, 2}; + return new int[] {4, 4, 2, 2, 2, 2}; case "GY": - return new int[] {3, 2, 2, 1, 2, 2}; + return new int[] {3, 0, 1, 1, 2, 2}; case "HK": - return new int[] {0, 1, 2, 3, 2, 0}; - case "HU": - return new int[] {0, 0, 0, 1, 3, 2}; + return new int[] {0, 1, 1, 3, 2, 0}; + case "HN": + return new int[] {3, 3, 2, 2, 2, 2}; case "ID": - return new int[] {3, 1, 2, 2, 3, 2}; - case "ES": + return new int[] {3, 1, 1, 2, 3, 2}; + case "BA": case "IE": - return new int[] {0, 1, 1, 1, 2, 2}; - case "CL": + return new int[] {1, 1, 1, 1, 2, 2}; case "IL": - return new int[] {1, 2, 2, 2, 3, 2}; + return new int[] {1, 2, 2, 3, 4, 2}; + case "IM": + return new int[] {0, 2, 0, 1, 2, 2}; case "IN": - return new int[] {1, 1, 3, 2, 3, 3}; - case "IQ": - return new int[] {3, 2, 2, 3, 2, 2}; + return new int[] {1, 1, 2, 1, 2, 1}; case "IR": - return new int[] {3, 0, 1, 1, 4, 1}; + return new int[] {4, 2, 3, 3, 4, 2}; + case "IS": + return new int[] {0, 0, 1, 0, 0, 2}; case "IT": - return new int[] {0, 0, 0, 1, 1, 2}; + return new int[] {0, 0, 1, 1, 1, 2}; + case "GI": + case "JE": + return new int[] {1, 2, 0, 1, 2, 2}; case "JM": - return new int[] {2, 4, 3, 2, 2, 2}; + return new int[] {2, 4, 2, 1, 2, 2}; case "JO": - return new int[] {2, 1, 1, 2, 2, 2}; + return new int[] {2, 0, 1, 1, 2, 2}; case "JP": - return new int[] {0, 1, 1, 2, 2, 4}; - case "KH": - return new int[] {2, 1, 4, 2, 2, 2}; - case "CF": - case "KI": - return new int[] {4, 2, 4, 2, 2, 2}; - case "FK": + return new int[] {0, 3, 3, 3, 4, 4}; case "KE": - case "KP": - return new int[] {3, 2, 2, 2, 2, 2}; + return new int[] {3, 2, 2, 1, 2, 2}; + case "KH": + return new int[] {1, 0, 4, 2, 2, 2}; + case "CU": + case "KI": + return new int[] {4, 2, 4, 3, 2, 2}; + case "CD": + case "KM": + return new int[] {4, 3, 3, 2, 2, 2}; case "KR": - return new int[] {0, 1, 1, 3, 4, 4}; - case "CY": + return new int[] {0, 2, 2, 4, 4, 4}; case "KW": - return new int[] {1, 0, 0, 0, 0, 2}; + return new int[] {1, 0, 1, 0, 0, 2}; + case "BD": case "KZ": return new int[] {2, 1, 2, 2, 2, 2}; case "LA": return new int[] {1, 2, 1, 3, 2, 2}; + case "BS": case "LB": - return new int[] {3, 3, 2, 4, 2, 2}; + return new int[] {3, 2, 1, 2, 2, 2}; case "LK": - return new int[] {3, 1, 3, 3, 4, 2}; - case "CI": - case "DZ": + return new int[] {3, 2, 3, 4, 4, 2}; case "LR": - return new int[] {3, 4, 4, 4, 2, 2}; - case "LS": - return new int[] {3, 3, 2, 2, 2, 2}; - case "LT": - return new int[] {0, 0, 0, 0, 2, 2}; + return new int[] {3, 4, 3, 4, 2, 2}; case "LU": - return new int[] {1, 0, 3, 2, 1, 4}; + return new int[] {1, 1, 4, 2, 0, 2}; + case "CY": + case "HR": + case "LV": + return new int[] {1, 0, 0, 0, 0, 2}; case "MA": - return new int[] {3, 3, 1, 1, 2, 2}; + return new int[] {3, 3, 2, 1, 2, 2}; case "MC": return new int[] {0, 2, 2, 0, 2, 2}; + case "MD": + return new int[] {1, 0, 0, 0, 2, 2}; case "ME": - return new int[] {2, 0, 0, 1, 2, 2}; + return new int[] {2, 0, 0, 1, 1, 2}; + case "MH": + return new int[] {4, 2, 1, 3, 2, 2}; case "MK": - return new int[] {1, 0, 0, 1, 3, 2}; + return new int[] {2, 0, 0, 1, 3, 2}; case "MM": - return new int[] {2, 4, 2, 3, 2, 2}; + return new int[] {2, 2, 2, 3, 4, 2}; case "MN": return new int[] {2, 0, 1, 2, 2, 2}; case "MO": - case "MP": - return new int[] {0, 2, 4, 4, 2, 2}; - case "GP": + return new int[] {0, 2, 4, 4, 4, 2}; + case "KG": case "MQ": - return new int[] {2, 1, 2, 3, 2, 2}; - case "MU": - return new int[] {3, 1, 1, 2, 2, 2}; + return new int[] {2, 1, 1, 2, 2, 2}; + case "MR": + return new int[] {4, 2, 3, 4, 2, 2}; + case "DK": + case "EE": + case "HU": + case "LT": + case "MT": + return new int[] {0, 0, 0, 0, 0, 2}; case "MV": - return new int[] {3, 4, 1, 4, 2, 2}; + return new int[] {3, 4, 1, 3, 3, 2}; case "MW": return new int[] {4, 2, 3, 3, 2, 2}; case "MX": - return new int[] {2, 4, 3, 4, 2, 2}; + return new int[] {3, 4, 4, 4, 2, 2}; case "MY": - return new int[] {1, 0, 3, 1, 3, 2}; - case "MZ": - return new int[] {3, 1, 2, 1, 2, 2}; + return new int[] {1, 0, 4, 1, 2, 2}; + case "NA": + return new int[] {3, 4, 3, 2, 2, 2}; case "NC": - return new int[] {3, 3, 4, 4, 2, 2}; + return new int[] {3, 2, 3, 4, 2, 2}; case "NG": return new int[] {3, 4, 2, 1, 2, 2}; + case "NI": + return new int[] {2, 3, 4, 3, 2, 2}; case "NL": - return new int[] {0, 2, 2, 3, 0, 3}; - case "CZ": + return new int[] {0, 2, 3, 3, 0, 4}; case "NO": - return new int[] {0, 0, 2, 0, 1, 2}; + return new int[] {0, 1, 2, 1, 1, 2}; case "NP": - return new int[] {2, 2, 4, 3, 2, 2}; + return new int[] {2, 1, 4, 3, 2, 2}; case "NR": + return new int[] {4, 0, 3, 2, 2, 2}; case "NU": return new int[] {4, 2, 2, 1, 2, 2}; + case "NZ": + return new int[] {1, 0, 2, 2, 4, 2}; case "OM": return new int[] {2, 3, 1, 3, 4, 2}; - case "GU": + case "PA": + return new int[] {2, 3, 3, 3, 2, 2}; case "PE": - return new int[] {1, 2, 4, 4, 4, 2}; - case "CK": - case "PF": - return new int[] {2, 2, 2, 1, 2, 2}; - case "ML": + return new int[] {1, 2, 4, 4, 3, 2}; + case "AF": case "PG": - return new int[] {4, 3, 3, 2, 2, 2}; + return new int[] {4, 3, 3, 3, 2, 2}; case "PH": - return new int[] {2, 1, 3, 3, 3, 0}; - case "NZ": + return new int[] {2, 1, 3, 2, 2, 0}; case "PL": - return new int[] {1, 1, 2, 2, 4, 2}; + return new int[] {2, 1, 2, 2, 4, 2}; case "PR": - return new int[] {2, 0, 2, 1, 2, 1}; + return new int[] {2, 0, 2, 0, 2, 1}; case "PS": - return new int[] {3, 4, 1, 2, 2, 2}; + return new int[] {3, 4, 1, 4, 2, 2}; + case "PT": + return new int[] {1, 0, 0, 0, 1, 2}; case "PW": - return new int[] {2, 2, 4, 1, 2, 2}; - case "QA": - return new int[] {2, 4, 4, 4, 4, 2}; + return new int[] {2, 2, 4, 2, 2, 2}; + case "BL": case "MF": + case "PY": + return new int[] {1, 2, 2, 2, 2, 2}; + case "QA": + return new int[] {1, 4, 4, 4, 4, 2}; case "RE": - return new int[] {1, 2, 1, 2, 2, 2}; + return new int[] {1, 2, 2, 3, 1, 2}; case "RO": return new int[] {0, 0, 1, 2, 1, 2}; - case "MD": case "RS": - return new int[] {1, 0, 0, 0, 2, 2}; + return new int[] {2, 0, 0, 0, 2, 2}; case "RU": - return new int[] {1, 0, 0, 0, 4, 3}; + return new int[] {1, 0, 0, 0, 3, 3}; case "RW": - return new int[] {3, 4, 2, 0, 2, 2}; + return new int[] {3, 3, 1, 0, 2, 2}; + case "MU": case "SA": - return new int[] {3, 1, 1, 1, 2, 2}; + return new int[] {3, 1, 1, 2, 2, 2}; + case "CF": case "SB": - return new int[] {4, 2, 4, 3, 2, 2}; + return new int[] {4, 2, 4, 2, 2, 2}; + case "SC": + return new int[] {4, 3, 1, 1, 2, 2}; + case "SD": + return new int[] {4, 3, 4, 2, 2, 2}; + case "SE": + return new int[] {0, 1, 1, 1, 0, 2}; case "SG": - return new int[] {1, 1, 2, 2, 2, 1}; + return new int[] {2, 3, 3, 3, 3, 3}; case "AQ": case "ER": case "SH": return new int[] {4, 2, 2, 2, 2, 2}; - case "GR": - case "HR": - case "SI": - return new int[] {1, 0, 0, 0, 1, 2}; case "BG": - case "MT": - case "SK": + case "ES": + case "GR": + case "SI": return new int[] {0, 0, 0, 0, 1, 2}; - case "AX": - case "LI": - case "MS": - case "PM": - case "SM": - return new int[] {0, 2, 2, 2, 2, 2}; + case "IQ": + case "SJ": + return new int[] {3, 2, 2, 2, 2, 2}; + case "SK": + return new int[] {1, 1, 1, 1, 3, 2}; + case "GF": + case "PK": + case "SL": + return new int[] {3, 2, 3, 3, 2, 2}; + case "ET": case "SN": - return new int[] {4, 4, 4, 3, 2, 2}; + return new int[] {4, 4, 3, 2, 2, 2}; + case "SO": + return new int[] {3, 2, 2, 4, 4, 2}; case "SR": return new int[] {2, 4, 3, 0, 2, 2}; - case "SS": - return new int[] {4, 3, 2, 3, 2, 2}; case "ST": return new int[] {2, 2, 1, 2, 2, 2}; - case "NI": - case "PA": + case "PF": case "SV": - return new int[] {2, 3, 3, 3, 2, 2}; + return new int[] {2, 3, 3, 1, 2, 2}; case "SZ": - return new int[] {3, 3, 3, 4, 2, 2}; - case "SX": + return new int[] {4, 4, 3, 4, 2, 2}; case "TC": - return new int[] {1, 2, 1, 0, 2, 2}; + return new int[] {2, 2, 1, 3, 2, 2}; case "GA": case "TG": return new int[] {3, 4, 1, 0, 2, 2}; case "TH": - return new int[] {0, 2, 2, 3, 3, 4}; - case "TK": - return new int[] {2, 2, 2, 4, 2, 2}; - case "CU": + return new int[] {0, 1, 2, 1, 2, 2}; case "DJ": case "SY": case "TJ": - case "TL": return new int[] {4, 3, 4, 4, 2, 2}; - case "SC": + case "GL": + case "TK": + return new int[] {2, 2, 2, 4, 2, 2}; + case "TL": + return new int[] {4, 2, 4, 4, 2, 2}; + case "SS": case "TM": - return new int[] {4, 2, 1, 1, 2, 2}; - case "AZ": - case "GF": - case "LY": - case "PK": - case "SO": - case "TO": - return new int[] {3, 2, 3, 3, 2, 2}; + return new int[] {4, 2, 2, 3, 2, 2}; case "TR": - return new int[] {1, 1, 0, 0, 2, 2}; + return new int[] {1, 0, 0, 1, 3, 2}; case "TT": - return new int[] {1, 4, 1, 3, 2, 2}; - case "EE": - case "IS": - case "LV": - case "PT": - case "SE": + return new int[] {1, 4, 0, 0, 2, 2}; case "TW": - return new int[] {0, 0, 0, 0, 0, 2}; + return new int[] {0, 2, 0, 0, 0, 0}; + case "ML": case "TZ": - return new int[] {3, 4, 3, 2, 2, 2}; - case "IM": + return new int[] {3, 4, 2, 2, 2, 2}; case "UA": - return new int[] {0, 2, 1, 1, 2, 2}; - case "SL": + return new int[] {0, 1, 1, 2, 4, 2}; + case "LS": case "UG": - return new int[] {3, 3, 4, 3, 2, 2}; + return new int[] {3, 3, 3, 2, 2, 2}; case "US": - return new int[] {1, 0, 2, 2, 3, 1}; - case "AR": - case "KG": + return new int[] {1, 1, 4, 1, 3, 1}; case "TN": case "UY": return new int[] {2, 1, 1, 1, 2, 2}; case "UZ": - return new int[] {2, 2, 3, 4, 2, 2}; - case "BL": + return new int[] {2, 2, 3, 4, 3, 2}; + case "AX": case "CX": + case "LI": + case "MP": + case "MS": + case "PM": + case "SM": case "VA": - return new int[] {1, 2, 2, 2, 2, 2}; - case "AD": - case "BM": - case "BQ": + return new int[] {0, 2, 2, 2, 2, 2}; case "GD": - case "GL": case "KN": case "KY": case "LC": + case "SX": case "VC": return new int[] {1, 2, 0, 0, 2, 2}; case "VG": - return new int[] {2, 2, 1, 1, 2, 2}; - case "GG": + return new int[] {2, 2, 0, 1, 2, 2}; case "VI": - return new int[] {0, 2, 0, 1, 2, 2}; + return new int[] {0, 2, 1, 2, 2, 2}; case "VN": - return new int[] {0, 3, 3, 4, 2, 2}; - case "GH": - case "NA": + return new int[] {0, 0, 1, 2, 2, 1}; case "VU": - return new int[] {3, 3, 3, 2, 2, 2}; + return new int[] {4, 3, 3, 1, 2, 2}; case "IO": - case "MH": case "TV": case "WF": return new int[] {4, 2, 2, 4, 2, 2}; + case "BT": + case "MZ": case "WS": - return new int[] {3, 1, 3, 1, 2, 2}; - case "AL": + return new int[] {3, 1, 2, 1, 2, 2}; case "XK": - return new int[] {1, 1, 1, 1, 2, 2}; + return new int[] {1, 2, 1, 1, 2, 2}; case "BI": case "HT": - case "KM": case "MG": case "NE": - case "SD": case "TD": case "VE": case "YE": return new int[] {4, 4, 4, 4, 2, 2}; - case "JE": case "YT": - return new int[] {4, 2, 2, 3, 2, 2}; + return new int[] {2, 3, 3, 4, 2, 2}; case "ZA": - return new int[] {3, 2, 2, 1, 1, 2}; + return new int[] {2, 3, 2, 1, 2, 2}; case "ZM": - return new int[] {3, 3, 4, 2, 2, 2}; - case "MR": + return new int[] {4, 4, 4, 3, 3, 2}; + case "LY": + case "TO": case "ZW": - return new int[] {4, 2, 4, 4, 2, 2}; + return new int[] {3, 2, 4, 3, 2, 2}; default: return new int[] {2, 2, 2, 2, 2, 2}; }