import re
from itertools import cycle
from datetime import datetime
from typing import List


def vin_years(vin_char: str) -> List[int]:
    letters = 'ABCDEFGHJKLMNPRSTVWXY123456789'
    year_letter = vin_char

    year = 1979
    year_current = datetime.now().year

    result = []

    for letter in cycle(letters):
        year += 1

        if letter == year_letter:
            result.append(year)

        if year == year_current:
            break

    result.sort(reverse=True)

    return result


wmi_manufacturer_mapping = {
    "AAA": "Audi",
    "AAK": "FAW",
    "AAM": "MAN",
    "AAV": "Volkswagen",
    "ABJ": "Mitsubishi",
    "ABM": "BMW",
    "ACV": "Isuzu",
    "AC5": "Hyundai",
    "ADM": "GM",
    "ADN": "Nissan",
    "ADR": "Renault",
    "ADX": "Tata",
    "AFA": "Ford",
    "AFB": "Mazda",
    "AHH": "Hino",
    "AHM": "Honda",
    "AHT": "Toyota",
    "BR1": "Mercedes-Benz",
    "HA0": "Wuxi",
    "HA6": "Niu",
    "HES": "smart",
    "HL4": "Morini",
    "HRV": "Henrey",
    "JAA": "Isuzu",
    "JAB": "Isuzu",
    "JAC": "Isuzu",
    "JAE": "Acura",
    "JAL": "Isuzu",
    "JA3": "Mitsubishi",
    "JA4": "Mitsubishi",
    "JA7": "Mitsubishi",
    "JB3": "Dodge",
    "JB4": "Dodge",
    "JB7": "Dodge",
    "JC0": "Ford",
    "JC1": "Fiat",
    "JC2": "Ford",
    "JDA": "Daihatsu",
    "JD1": "Daihatsu",
    "JD2": "Daihatsu",
    "JD4": "Daihatsu",
    "JE3": "Eagle",
    "JE4": "Mitsubishi",
    "JF1": "Subaru",
    "JF2": "Subaru",
    "JF3": "Subaru",
    "JF4": "Saab",
    "JG1": "Chevrolet",
    "JG7": "Pontiac",
    "JGC": "Chevrolet",
    "JGT": "GMC",
    "JHA": "Hino",
    "JHD": "Hino",
    "JHF": "Honda",
    "JHZ": "Honda",
    "JHN": "Honda",
    "JHL": "Honda",
    "JHG": "Honda",
    "JH5": "Honda",
    "JH1": "Honda",
    "JHM": "Honda",
    "JH3": "Honda",
    "JH4": "Acura",
    "JJ3": "Chrysler",
    "JLF": "Mitsubishi",
    "JLS": "Sterling",
    "JL5": "Mitsubishi",
    "JL6": "Mitsubishi",
    "JMA": "Mitsubishi",
    "JMB": "Mitsubishi",
    "JMF": "Mitsubishi",
    "JMP": "Mitsubishi",
    "JMR": "Mitsubishi",
    "JMY": "Mitsubishi",
    "JMZ": "Mazda",
    "JM0": "Mazda",
    "JM1": "Mazda",
    "JM2": "Mazda",
    "JM3": "Mazda",
    "JM4": "Mazda",
    "JM6": "Mazda",
    "JM7": "Mazda",
    "JNC": "Nissan",
    "JNE": "Nissan",
    "JNK": "Infiniti",
    "JNR": "Infiniti",
    "JN1": "Nissan",
    "JN6": "Nissan",
    "JN8": "Nissan",
    "JPC": "Nissan",
    "JP3": "Plymouth",
    "JP4": "Plymouth",
    "JP7": "Plymouth",
    "JR2": "Isuzu",
    "JST": "Suzuki",
    "JS2": "Suzuki",
    "JS3": "Suzuki",
    "JS4": "Suzuki",
    "JTB": "Toyota",
    "JTD": "Toyota",
    "JTE": "Toyota",
    "JTF": "Toyota",
    "JTG": "Toyota",
    "JTH": "Lexus",
    "JTJ": "Lexus",
    "JTK": "Toyota",
    "JTL": "Toyota",
    "JTM": "Toyota",
    "JTN": "Toyota",
    "JTP": "Toyota",
    "JT1": "Toyota",
    "JT2": "Toyota",
    "JT3": "Toyota",
    "JT4": "Toyota",
    "JT6": "Lexus",
    "JT8": "Lexus",
    "JW6": "Mitsubishi",
    "J81": "Chevrolet",
    "J87": "Pontiac",
    "J8C": "Chevrolet",
    "J8T": "GMC",
    "J8Z": "Chevrolet",
    "KF3": "Merkavim",
    "KL": "Daewoo",
    "KLA": "Daewoo",
    "KLP": "CT&T United",
    "KLT": "Tata Daewoo",
    "KLU": "Tata Daewoo",
    "KLY": "Daewoo",
    "KL1": "Daewoo",
    "KL2": "Daewoo",
    "KL3": "Daewoo",
    "KL4": "Daewoo",
    "KL5": "Daewoo",
    "KL6": "Daewoo",
    "KL7": "Daewoo",
    "KL8": "Daewoo",
    "KM": "Hyundai",
    "KMC": "Hyundai",
    "KME": "Hyundai",
    "KMF": "Hyundai",
    "KMH": "Hyundai",
    "KMJ": "Hyundai",
    "KMT": "Genesis",
    "KMU": "Genesis",
    "KM8": "Hyundai",
    "KNA": "Kia",
    "KNC": "Kia",
    "KND": "Kia",
    "KNE": "Kia",
    "KNF": "Kia",
    "KNG": "Kia",
    "KNJ": "Ford",
    "KNM": "Renault",
    "KN1": "Asia Motors",
    "KN2": "Asia Motors",
    "KPA": "SsangYong",
    "KPB": "SsangYong",
    "KPH": "Mitsubishi",
    "KPT": "SsangYong",
    "LA6": "King Long",
    "LC0": "BYD",
    "LBE": "Hyundai Shouwang",
    "LBM": "Zongshen Piaggio",
    "LBV": "BMW",
    "LB1": "Fujian Benz",
    "LB3": "Geely",
    "LCR": "Gonow",
    "LC2": "Kwang Yang",
    "LDC": "Dongfeng",
    "LDD": "Dandong Huanghai",
    "LDK": "FAW Bus",
    "LDN": "Soueast",
    "LDP": "Voyah",
    "LDY": "Zhongtong Bus,",
    "LEF": "Jiangling",
    "LET": "Jiangling Isuzu",
    "LE4": "Beijing Benz",
    "LFB": "FAW",
    "LFF": "Wangye",
    "LFM": "FAW Toyota",
    "LFN": "FAW",
    "LFP": "FAW",
    "LFT": "FAW",
    "LFV": "FAW Volkswagen,",
    "LFW": "FAW JieFang,",
    "LFZ": "Leapmotor",
    "LGA": "Dongfeng",
    "LGB": "Dongfeng",
    "LGG": "Dongfeng Liuzhou",
    "LGJ": "Dongfeng Fengshen",
    "LGL": "Guilin Daewoo",
    "LGW": "Great Wall",
    "LGX": "BYD",
    "LHA": "Shuanghuan",
    "LHB": "BAIC",
    "LHG": "Guangzhou Honda",
    "LH1": "FAW",
    "LJC": "Jincheng",
    "LJD": "Yueda Kia",
    "LJN": "Zhengzhou Nissan",
    "LJS": "Yaxing Coach",
    "LJU": "Lotus Geely",
    "LJX": "JMC Ford",
    "LJ1": "Nio",
    "LJ8": "Zotye",
    "LKC": "Changhe",
    "LKL": "Higer Bus",
    "LKT": "Lifan",
    "LLC": "Loncin",
    "LLN": "Qoros",
    "LLV": "Lifan",
    "LL3": "Golden Dragon",
    "LL6": "GAC Mitsubishi",
    "LL8": "Linhai Yamaha",
    "LME": "Skyworth",
    "LMG": "GAC",
    "LMV": "XPeng",
    "LMW": "GAC",
    "LM6": "SWM",
    "LM8": "Seres",
    "LNA": "GAC",
    "LNB": "BAIC",
    "LND": "JMEV",
    "LNP": "NAC MG",
    "LNY": "Yuejin",
    "LPA": "Changan",
    "LPE": "BYD",
    "LPS": "Polestar",
    "LRB": "SAIC Buick",
    "LRD": "Foton",
    "LRE": "SAIC Cadillac",
    "LRW": "Tesla",
    "LSC": "Changan",
    "LSF": "SAIC Maxus",
    "LSG": "SAIC Chevrolet",
    "LSH": "SAIC Maxus",
    "LSJ": "SAIC MG",
    "LSK": "SAIC Maxus",
    "LSV": "SAIC Volkswagen",
    "LSY": "Brilliance",
    "LS4": "Changan",
    "LS5": "Changan",
    "LS6": "Changan",
    "LS7": "JMC",
    "LTA": "ZX Auto",
    "LTN": "Soueast",
    "LTV": "FAW Toyota",
    "LUC": "Honda",
    "LUD": "Dongfeng Nissan",
    "LUX": "Dongfeng Yulon",
    "LUZ": "Hozon",
    "LVA": "Foton",
    "LVB": "Foton",
    "LVC": "Foton",
    "LVF": "Changhe Suzuki",
    "LVG": "GAC Toyota",
    "LVH": "Dongfeng Honda",
    "LVM": "Chery",
    "LVP": "Dongfeng Sokon",
    "LVR": "Changan Mazda",
    "LVS": "Changan Ford",
    "LVT": "Chery",
    "LVU": "Chery",
    "LVV": "Chery",
    "LVX": "Aiways",
    "LVY": "Volvo",
    "LVZ": "Dongfeng Sokon",
    "LWG": "Chongqing",
    "LWL": "Isuzu",
    "LWV": "GAC",
    "LW4": "Li Auto",
    "LXV": "Borgward",
    "LYB": "Yaxing",
    "LYV": "Volvo",
    "LZE": "Isuzu",
    "LZF": "SAIC",
    "LZG": "Shaanxi",
    "LZK": "Huanghe",
    "LZM": "MAN",
    "LZS": "Meccanica",
    "LZU": "Isuzu Bus",
    "LZW": "SAIC",
    "LZY": "Yutong",
    "LZZ": "Sinotruk",
    "LZ4": "Shangyang",
    "L1N": "XPeng",
    "L2C": "Chery",
    "L4F": "Suzhou Eagle",
    "L5C": "KangDi",
    "L5K": "Yongkang",
    "L6T": "Lynk & Co",
    "L82": "Baotian",
    "L85": "Yongkang Huabao",
    "L9N": "Taotao",
    "MAH": "Fiat",
    "MAJ": "Ford",
    "MAK": "Honda",
    "MAL": "Hyundai",
    "MAT": "Tatar",
    "MA3": "Suzuki",
    "MA6": "GM",
    "MA7": "Hindustan",
    "MBF": "Royal Enfield",
    "MBH": "Suzuki & Nissan",
    "MBJ": "Toyota",
    "MBK": "MAN",
    "MBL": "Hero MotoCorp",
    "MBR": "Mercedes-Benz",
    "MBU": "Swaraj",
    "MBV": "Premier",
    "MBX": "Piaggio",
    "MBY": "Asia Motors",
    "MB1": "Ashok Leyland",
    "MCB": "GM",
    "MCG": "Atul",
    "MC1": "Force",
    "MC2": "Eicher",
    "MDE": "Kinetic Engineering Limited",
    "MDH": "Nissan",
    "MDT": "Kerala Limited",
    "MD6": "TVS",
    "MD9": "Shuttles",
    "MEC": "Daimler",
    "MEE": "Renault",
    "MEG": "Harley-Davidson",
    "MER": "Benelli",
    "MET": "Piaggio",
    "MEX": "Škoda",
    "ME1": "Yamaha",
    "ME3": "Royal Enfield",
    "MYH": "Ather Energy",
    "MZB": "Kia",
    "MZZ": "Citroën",
    "MZ7": "MG",
    "M3G": "Isuzu",
    "MF3": "Hyundai",
    "MHD": "Suzuki",
    "MHF": "Toyota",
    "MHK": "Daihatsu",
    "MHL": "Mercedes-Benz",
    "MHR": "Honda",
    "MLB": "Siam Yamaha Co",
    "ML3": "Mitsubishi",
    "MMA": "Mitsubishi",
    "MMB": "Mitsubishi",
    "MMC": "Mitsubishi",
    "MMD": "Mitsubishi",
    "MMF": "BMW",
    "MML": "MG",
    "MMM": "Chevrolet",
    "MMR": "Subaru",
    "MMS": "Suzuki",
    "MMT": "Mitsubishi",
    "MMU": "Holden",
    "MNB": "Ford",
    "MNK": "Hino",
    "MNT": "Nissan",
    "MNU": "Great Wall",
    "MPA": "Isuzu",
    "MPB": "Ford",
    "MP1": "Isuzu",
    "MP2": "Mazda Isuzu",
    "MP5": "Foton",
    "MRH": "Honda",
    "MRT": "Neta",
    "MR0": "Toyota",
    "MR1": "Toyota",
    "MR2": "Toyota",
    "MR3": "Toyota",
    "MXL": "Yutong",
    "MX3": "Hyundai",
    "NAA": "Iran Khodro",
    "NAC": "Mammut",
    "NAD": "Škoda",
    "NAP": "Pars Khodro",
    "NC9": "VIRA Diesel",
    "NFB": "Honda",
    "NG3": "Lucky Motors",
    "NLA": "Honda",
    "NLE": "Mercedes-Benz",
    "NLH": "Hyundai",
    "NLJ": "Hyundai",
    "NLN": "Karsan",
    "NLR": "Otokar",
    "NLT": "Temsa",
    "NL1": "TOGG",
    "NMA": "MAN",
    "NMB": "Mercedes-Benz",
    "NMC": "BMC",
    "NMT": "Toyota",
    "NM0": "Ford",
    "NM1": "Renault",
    "NM4": "Tofa",
    "NNA": "Anadolu Isuzu",
    "NNN": "Gépébus Oréos 4X",
    "NRE": "Bozankaya",
    "NSA": "SamAvto",
    "NS2": "JV MAN Auto",
    "PAB": "Isuzu",
    "PAD": "Honda",
    "PE1": "Ford",
    "PE3": "Mazda",
    "PFD": "Hyundai",
    "PL1": "Proton",
    "PL8": "Inokom Hyundai",
    "PLP": "Subaru",
    "PLZ": "Isuzu",
    "PMH": "Honda",
    "PML": "Hicom",
    "PMN": "Modenas",
    "PM1": "BMW Mini",
    "PM2": "Perodua",
    "PM9/": "Bufori",
    "PNA": "Stellantis",
    "PNV": "Volvo",
    "PN1": "UMW Toyota",
    "PN2": "UMW Toyota",
    "PN8": "Nissan",
    "PPP": "Suzuki",
    "PPV": "Volkswagen",
    "PP1": "Mazda",
    "PP3": "Hyundai",
    "PRA": "Sinotruk",
    "PRH": "Chery",
    "PRX": "Kia",
    "PR8": "Ford",
    "RA1": "Steyr",
    "LFA": "Ford Lio Hon",
    "RFB": "Kymco",
    "RFC": "Taiwan Golden Bee",
    "RFD": "Tai Ling",
    "RFG": "Sanyang",
    "RFL": "Adly",
    "RFT": "CPI",
    "RF3": "Aeon Motor",
    "RF5": "Yulon Motor",
    "RGS": "Kawasaki",
    "RHA": "Ford Lio Ho",
    "RKJ": "Prince ",
    "RKL": "Kuozui",
    "RKM": "CMC",
    "RKR": "Yamaha",
    "RKT": "Honda",
    "RK7": "Kawasaki",
    "RLA": "Mitsubishi",
    "RLC": "Yamaha Motor",
    "RLE": "Isuzu",
    "RLH": "Honda",
    "RLL": "VinFast",
    "RLM": "Mercedes-Benz",
    "RLN": "VinFast",
    "RL0": "Ford",
    "RL4": "Toyota",
    "RP8": "Piaggio",
    "R3M": "Mangosteen",
    "R4N": "Elyx",
    "SAA": "Austin",
    "SAB": "Optare",
    "SAD": "Jaguar",
    "SAF": "ERF",
    "SAH": "Honda",
    "SAJ": "Jaguar",
    "SAL": "Land Rover",
    "SAM": "Morris",
    "SAR": "Rover MG",
    "SAT": "Triumph",
    "SAX": "Austin-Rover",
    "SAZ": "Freight Rover",
    "SA9/": "OX Global",
    "SBB": "Leyland",
    "SBC": "Iveco Ford",
    "SBJ": "Leyland",
    "SBL": "Leyland",
    "SBM": "McLaren",
    "SBS": "Scammell",
    "SB1": "Toyota",
    "SCA": "Rolls Royce",
    "SCB": "Bentley",
    "SCC": "Lotus",
    "SCD": "Reliant",
    "SCE": "DeLorean",
    "SCF": "Aston Martin",
    "SC5": "Wrightbus",
    "SC6": "INEOS",
    "SDB": "Talbot",
    "SDF": "Dodge",
    "SDG": "Renault",
    "SDK": "Caterham",
    "SDL": "TVR",
    "SDP": "MG",
    "SD7": "Aston Martin",
    "SFA": "Ford",
    "SFN": "Foden",
    "SFZ": "Tesla",
    "SGA": "Avondale",
    "SGB": "Bailey",
    "SGD": "Swift",
    "SGE": "Elddis",
    "SGL": "Lunaravans",
    "SG4": "Coachman",
    "SHH": "Honda",
    "SHS": "Honda",
    "SH7": "INEOS",
    "SJA": "Bentley",
    "SJK": "Infiniti",
    "SJN": "Nissan",
    "SJ1": "Ree",
    "SKA": "Vauxhall",
    "SKB": "Kel-Berg",
    "SKF": "Bedford",
    "SLA": "Rolls Royce",
    "SLP": "JC Bamford",
    "SNE": "Wartburg",
    "SNT": "Trabant",
    "SWH": "Temared",
    "TLJ": "Jawa Moto",
    "TMA": "Hyundai",
    "TMB": "Škoda",
    "TMC": "Hyundai",
    "TMK": "Karosa",
    "TMP": "Škoda",
    "TMT": "Tatra",
    "TNA": "Avia",
    "TNE": "TAZ",
    "TNT": "Tatra",
    "TNU": "Tatra",
    "TN9": "Karosa",
    "TRA": "Ikarus Bus",
    "TRC": "Csepel",
    "TRU": "Audi",
    "TSB": "Ikarus Bus",
    "TSE": "Ikarus,",
    "TSF": "Alfabusz",
    "TSM": "Suzuki Fiat",
    "TWG": "Ceatano Bus",
    "TW1": "Toyota",
    "TW2": "Ford",
    "TW6": "Citroën",
    "TW7": "Mini",
    "TX5": "Mini",
    "TYA": "Mitsubishi",
    "TYB": "Mitsubishi",
    "UN1": "Ford",
    "UU1": "Dacia",
    "UU2": "Oltcit",
    "UU3": "ARO",
    "UU4": "Roman",
    "UU5": "Rocar",
    "UU6": "Daewoo",
    "UU7": "Euro Bus",
    "UU9": "Astra Bus",
    "UV9": "ATP Bus",
    "UWR": "Robus",
    "UZT": "UTB",
    "U1A": "Sanos",
    "U5Y": "Kia",
    "U6Y": "Kia",
    "VAG": "Steyr Daimler",
    "VA4": "KSR",
    "VBK": "KTM",
    "VCF": "Fisker",
    "VFA": "Renault",
    "VFN": "Trailor",
    "VF1": "Renault",
    "VF2": "Renault",
    "VF3": "Peugeot",
    "VF4": "Talbot",
    "VF5": "Iveco Unic",
    "VF6": "Renault",
    "VF7": "Citroën",
    "VF8": "Matra",
    "VGY": "Lohr",
    "VG6": "Renault",
    "VG7": "Renault",
    "VG8": "Renault",
    "VJR": "Ligier",
    "VJY": "Gruau",
    "VJ1": "Heuliez Bus",
    "VJ2": "Mia Electric",
    "VK1": "SEG",
    "VK2": "Grandin",
    "VK8": "Venturi",
    "VLG": "Aixam-Mega",
    "VLU": "Scania",
    "VL4": "Citroën",
    "VMK": "Renault",
    "VM3": "Lamberet",
    "VN1": "Renault",
    "VN4": "Voxan",
    "VNE": "Iveco",
    "VNK": "Toyota",
    "VNV": "Nissan",
    "VRW": "Goupil",
    "VR1": "DS",
    "VR3": "Peugeot",
    "VR7": "Citroën",
    "VXE": "Opel",
    "VXF": "Fiat",
    "VXK": "Opel",
    "VYF": "Fiat",
    "VSA": "Mercedes-Benz",
    "VSC": "Talbot",
    "VSE": "Santana Suzuki",
    "VSF": "Santana",
    "VSK": "Nissan",
    "VSR": "Leciñena",
    "VSS": "SEAT",
    "VSX": "Opel",
    "VSY": "Renault",
    "VS1": "Pegaso",
    "VS5": "Renault",
    "VS6": "Ford",
    "VS7": "Citroën",
    "VS8": "Peugeot",
    "VTR": "Gas Gas",
    "VVC": "SOR Ibrica",
    "VV1": "Lecitrailer",
    "VWA": "Nissan",
    "VWF": "Guillén",
    "VWV": "Volkswagen",
    "WAC": "Audi",
    "WAG": "Neoplan",
    "WAP": "Alpina",
    "WAU": "Audi",
    "WA1": "Audi",
    "WBA": "BMW",
    "WBJ": "Bitters",
    "WBS": "BMW",
    "WBU": "Bürstner",
    "WBX": "BMW",
    "WBY": "BMW",
    "WB1": "BMW",
    "WB5": "BMW",
    "WCD": "Freightliner",
    "WDB": "Mercedes-Benz Maybach",
    "WDC": "Mercedes-Benz",
    "WDD": "Mercedes-Benz",
    "WDF": "Mercedes-Benz",
    "WDR": "Freightliner",
    "WDT": "Dethleffs",
    "WDW": "Dodge",
    "WDY": "Freightliner",
    "WDZ": "Mercedes-Benz",
    "WD0": "Dodge",
    "WD2": "Freightliner",
    "WD3": "Mercedes-Benz",
    "WD4": "Mercedes-Benz",
    "WD5": "Freightliner",
    "WD6": "Freightliner",
    "WD8": "Dodge",
    "WEB": "Evobus GmbH",
    "WFC": "Fendt",
    "WFD": "Fliegl Trailer",
    "WF0": "Ford",
    "WF1": "Merkur",
    "WHB": "Hobby",
    "WHY": "Hymer",
    "WJM": "Iveco",
    "WJR": "Irmscher",
    "WKE": "Krone",
    "WKK": "Setra",
    "WKN": "Knaus",
    "WK0": "Kögel",
    "WLA": "Langendorf",
    "WMA": "MAN & Bus",
    "WME": "smart",
    "WMW": "MINI",
    "WMX": "Mercedes-Benz",
    "WMZ": "MINI",
    "WNA": "Next.e.GO Mobile SE",
    "WP0": "Porsche",
    "WP1": "Porsche",
    "WSK": "Schmitz-Cargobull",
    "WSM": "Schmitz-Cargobull",
    "WSV": "Aebi Schmidt",
    "WS5": "StreetScooter",
    "WS7": "Sono",
    "WTA": "Tabbert",
    "WUA": "Audi",
    "WU1": "Audi",
    "WVG": "Volkswagen",
    "WVP": "Viseon Bus",
    "WVW": "Volkswagen",
    "WV1": "Volkswagen",
    "WV2": "Volkswagen",
    "WV3": "Volkswagen",
    "WV4": "Volkswagen",
    "WZ1": "Toyota",
    "W0L": "Opel",
    "W0V": "Opel",
    "W04": "Buick",
    "W06": "Cadillac",
    "W08": "Saturn Astra",
    "W1A": "smart",
    "W1K": "Mercedes-Benz",
    "W1N": "Mercedes-Benz",
    "W1T": "Mercedes-Benz",
    "W1V": "Mercedes-Benz",
    "W1W": "Mercedes-Benz",
    "W1Y": "Mercedes-Benz",
    "W1Z": "Mercedes-Benz",
    "W2W": "Freightliner",
    "W2Y": "Freightliner",
    "W2Z": "Freightliner",
    "XLA": "DAF Bus",
    "XLB": "Volvo.",
    "XLC": "Ford",
    "XLD": "Pacton",
    "XLE": "Scania",
    "XLK": "Burg",
    "XLR": "DAF",
    "XLV": "DAF",
    "XL3": "Ebusco",
    "XL4": "Lightyear",
    "XMC": "Mitsubishi",
    "XMD": "Mitsubishi",
    "XMG": "VDL Bus",
    "XMR": "Nooteboom",
    "XM4": "RAVO Holding",
    "XNB": "Mitsubishi",
    "XNC": "Mitsubishi",
    "XP7": "Tesla",
    "XTA": "Lada",
    "XTB": "Moskvitch",
    "XTC": "KAMAZ",
    "XTE": "ZAZ",
    "XTF": "GolAZ",
    "XTH": "GAZ",
    "XTK": "IzhAvto",
    "XTP": "Ural",
    "XTT": "UAZ",
    "XTU": "Trolza",
    "XTW": "LAZ",
    "XTY": "LiAZ",
    "XTZ": "ZiL",
    "XUF": "General",
    "XUU": "AvtoTor",
    "XW7": "Toyota",
    "XW8": "Volkswagen",
    "XWB": "Daewoo",
    "XWE": "AvtoTor",
    "XWF": "AvtoTor",
    "XX3": "Ujet",
    "XZG": "Great Wall",
    "X1E": "KAvZ",
    "X1F": "NefAZ",
    "X1M": "PAZ",
    "X4X": "AvtoTor",
    "X7L": "Renault",
    "X7M": "Hyundai Vortex",
    "X8U": "Scania",
    "X96": "GAZ",
    "X9F": "Ford",
    "X9L": "GM",
    "X9P": "Volvo",
    "X9X": "Great Wall",
    "YAF": "Faymonville",
    "YAR": "Toyota",
    "YBW": "Volkswagen",
    "YB1": "Volvo",
    "YB2": "Volvo",
    "YB6": "Jonckheere",
    "YE2": "Van Hool",
    "YH1": "Solifer",
    "YH2": "BRP",
    "YH4": "Fisker",
    "YK1": "Saab",
    "YSC": "Cadillac",
    "YSM": "Polestars",
    "YSP": "Volta AB",
    "YSR": "Polestar",
    "YS2": "Scania",
    "YS3": "Saabs",
    "YS4": "Scania",
    "YTN": "Saab",
    "YT7": "Kabe",
    "YV1": "Volvo",
    "YV2": "Volvo",
    "YV3": "Volvos",
    "YV4": "Volvo",
    "YYC": "Think Nordic",
    "Y3M": "MAZ",
    "Y4F": "Ford",
    "Y4K": "Geely",
    "Y6D": "ZAZ",
    "Y6J": "Bogdan",
    "Y6L": "Hyundai",
    "Y6U": "Škoda",
    "Y7B": "Bogdan",
    "Y7C": "Great Wall",
    "Y7F": "Boryspil Bus",
    "Y8A": "LAZ",
    "Y9H": "LAZ",
    "ZAA": "Autobianchi",
    "ZAC": "Jeep Dodge",
    "ZAM": "Maserati",
    "ZAP": "Piaggio",
    "ZAR": "Alfa Romeo",
    "ZAS": "Alfa Romeo",
    "ZBB": "Bertone",
    "ZBN": "Benelli",
    "ZBW": "Rayton-Fissore",
    "ZCB": "Bartoletti",
    "ZCF": "Iveco",
    "ZCG": "Cagiva",
    "ZCM": "Menarinibus",
    "ZC2": "Chrysler",
    "ZDC": "Honda",
    "ZDF": "Ferrari",
    "ZDM": "Ducati",
    "ZDT": "De Tomaso",
    "ZDY": "Cacciamali",
    "ZD0": "Yamaha",
    "ZD3": "Beta Motor",
    "ZD4": "Aprilia",
    "ZES": "Bimota",
    "ZFA": "Fiat",
    "ZFB": "Fiat",
    "ZFC": "Fiat",
    "ZFF": "Ferrari",
    "ZFM": "Fantic",
    "ZFR": "Pininfarina",
    "ZF4": "Qvale",
    "ZGA": "Iveco Bus",
    "ZGU": "Moto Guzzi",
    "ZHW": "Lamborghini",
    "ZJM": "Malaguti",
    "ZJN": "Innocenti",
    "ZJT": "Italjet",
    "ZLA": "Lancia",
    "ZLF": "Tazzari",
    "ZLM": "Moto Morini",
    "ZLV": "Laverda",
    "ZNN": "Energica",
    "ZN3": "Iveco Defence",
    "ZN6": "Maserati",
    "ZPB": "Lamborghini",
    "ZPY": "DR",
    "ZRG": "Tazzari",
    "ZSG": "Ferrari",
    "ZY1": "Adria",
    "Z6F": "Ford",
    "Z76": "SEMAZ",
    "Z8M": "Marussia",
    "Z8N": "Nissan",
    "Z8T": "PCMA",
    "Z9M": "Mercedes-Benz",
    "Z94": "Hyundai",
    "1B3": "Dodge",
    "1B4": "Dodge",
    "1B7": "Dodge",
    "1BA": "Blue Bird",
    "1BB": "Blue Bird",
    "1BL": "Balko",
    "1C3": "Chrysler",
    "1C4": "Chrysler",
    "1C6": "Chrysler",
    "1C8": "Chrysler",
    "1CM": "Checker",
    "1CU": "Cushman Haulster",
    "1CY": "Cranerier",
    "1D3": "Dodge",
    "1D4": "Dodge",
    "1D7": "Dodge",
    "1D8": "Dodge",
    "1FA": "Ford",
    "1FB": "Ford",
    "1FC": "Ford",
    "1FM": "Ford",
    "1FT": "Ford",
    "1FU": "Freightliner",
    "1FV": "Freightliner",
    "1F1": "Ford",
    "1F6": "Ford",
    "1G": "GM",
    "1G0": "Opel",
    "1G1": "Chevrolet",
    "1G2": "Pontiac",
    "1G3": "Oldsmobile",
    "1G4": "Buick",
    "1G5": "GMC",
    "1G6": "Cadillac",
    "1G7": "Pontiac",
    "1G8": "Saturn",
    "1GA": "Chevrolet",
    "1GC": "Chevrolet",
    "1GF": "Flxible",
    "1GG": "Isuzu",
    "1GH": "Holden",
    "1GJ": "GMC",
    "1GK": "GMC",
    "1GM": "Pontiac",
    "1GN": "Chevrolet",
    "1GT": "GMC",
    "1GY": "Cadillac",
    "1HD": "Harley-Davidson",
    "1HG": "Honda",
    "1HS": "Caterpillar",
    "1JC": "Jeep",
    "1JT": "Jeep",
    "1JU": "Marmon",
    "1J4": "Jeep",
    "1J7": "Jeep",
    "1J8": "Jeep",
    "1LN": "Lincoln",
    "1L1": "Lincoln",
    "1MB": "Mercedes-Benz",
    "1ME": "Mercury",
    "1MR": "Continental",
    "1M0": "John Deere Gator",
    "1M1": "Mack USA",
    "1M2": "Mack USA",
    "1M3": "Mack USA",
    "1M4": "Mack USA",
    "1N4": "Nissan",
    "1N6": "Nissan",
    "1NX": "Toyota",
    "1P3": "Plymouth",
    "1P4": "Plymouth",
    "1PY": "John Deere",
    "1TC": "Coachmen",
    "1UJ": "Jayco",
    "1UT": "Jeep",
    "1VH": "Orion Bus",
    "1VW": "Volkswagen",
    "1V1": "Volkswagen",
    "1V2": "Volkswagen",
    "1WT": "Winnebago",
    "1WU": "White Motor",
    "1XA": "Excalibur",
    "1XK": "Kenworth",
    "1XM": "Renault",
    "1XP": "Peterbilt",
    "1Y1": "Chevrolet",
    "1YJ": "Rokon",
    "1YV": "Mazda",
    "1ZV": "Ford",
    "1ZW": "Mercury",
    "10T": "Oshkosh",
    "12A": "Avanti",
    "137": "Hummer",
    "16X": "Vixen",
    "19U": "Acura",
    "19V": "Acura",
    "19X": "Honda",
    "2A3": "Imperial",
    "2BC": "Jeep",
    "2BP": "Ski-Doo",
    "2B1": "Orion Bus",
    "2B3": "Dodge",
    "2B4": "Dodge",
    "2B5": "Dodge",
    "2B7": "Dodge",
    "2C1": "Chevrolet",
    "2C3": "Chrysler",
    "2C4": "Chrysler",
    "2C7": "Pontiac",
    "2C8": "Chrysler",
    "2CC": "American Corporation",
    "2CG": "Pontiac",
    "2CK": "Pontiac",
    "2CM": "American Corporation",
    "2CN": "Chevrolet",
    "2CT": "GMC",
    "2D4": "Dodge",
    "2D7": "Dodge",
    "2D8": "Dodge",
    "2EZ": "Electra Meccanica",
    "2FA": "Ford",
    "2FH": "Zenn",
    "2FM": "Ford",
    "2FT": "Ford",
    "2FU": "Freightliner",
    "2FV": "Freightliner",
    "2FW": "Sterling",
    "2FY": "New Flyer",
    "2Gx": "GM",
    "2G0": "GMC",
    "2G1": "Chevrolet",
    "2G2": "Pontiac",
    "2G3": "Oldsmobile",
    "2G4": "Buick",
    "2G5": "GMC",
    "2G6": "Cadillac",
    "2G7": "Pontiac",
    "2G8": "Chevrolet",
    "2GA": "Chevrolet",
    "2GC": "Chevrolet",
    "2GH": "GMC",
    "2GJ": "GMC",
    "2GK": "GMC",
    "2GN": "Chevrolet",
    "2GT": "GMC",
    "2HG": "Honda",
    "2HH": "Acura",
    "2HJ": "Honda",
    "2HK": "Honda",
    "2HM": "Hyundai",
    "2HN": "Acura",
    "2HS": "International Trucks",
    "2J4": "Jeep",
    "2LM": "Lincoln",
    "2LN": "Lincoln",
    "2M1": "Mack",
    "2M2": "Mack",
    "2ME": "Mercury",
    "2MG": "Motor Coach Industries",
    "2MR": "Mercury",
    "2NV": "Nova Bus",
    "2P3": "Plymouth",
    "2P4": "Plymouth",
    "2P5": "Plymouth",
    "2PC": "Prevost",
    "2S2": "Suzuki",
    "2S3": "Suzuki",
    "2T1": "Toyota",
    "2T2": "Lexus",
    "2T3": "Toyota",
    "2V4": "Volkswagen",
    "2V8": "Volkswagen",
    "2WK": "WWestern Star Truck",
    "2XK": "Kenworth",
    "2XM": "Eagle Premier",
    "2XP": "Peterbilt Truck",
    "3AK": "Freightliner",
    "3AL": "Freightliner",
    "3AX": "Scania",
    "3BE": "Scania",
    "3BJ": "Western Star",
    "3B3": "Dodge",
    "3B4": "Dodge",
    "3B7": "Dodge",
    "3C3": "Chrysler",
    "3C4": "Chrysler",
    "3C6": "Chrysler",
    "3C8": "Chrysler",
    "3CE": "Volvo",
    "3CZ": "Honda",
    "3D3": "Dodge",
    "3D4": "Dodge",
    "3D7": "Dodge",
    "3FA": "Ford",
    "3FC": "Ford",
    "3FE": "Ford",
    "3FM": "Ford",
    "3FN": "Ford",
    "3FT": "Ford",
    "3F6": "Sterling Bullet",
    "3G": "GM",
    "3G0": "Holden",
    "3G1": "Chevrolet",
    "3G2": "Pontiac",
    "3G4": "Buick",
    "3G5": "Buick",
    "3G7": "Pontiac",
    "3GC": "Chevrolet",
    "3GK": "GMC",
    "3GM": "Holden",
    "3GN": "Chevrolet",
    "3GP": "Honda",
    "3GS": "Saturn",
    "3GT": "GMC",
    "3GY": "Cadillac",
    "3H3": "Hyundai",
    "3HC": "International Trucks",
    "3HG": "Honda",
    "3HS": "International Trucks & Caterpillar",
    "3JB": "BRP",
    "3KP": "Kia Hyundai",
    "3LN": "Lincoln",
    "3MA": "Mercury",
    "3MD": "Mazda",
    "3ME": "Mercury",
    "3MF": "BMW",
    "3MV": "Mazda",
    "3MW": "BMW",
    "3MY": "Toyota",
    "3MZ": "Mazda",
    "3N1": "Nissan",
    "3N6": "Nissan Chevrolet",
    "3N8": "Nissan",
    "3NS": "Polaris",
    "3NE": "Polaris",
    "3P3": "Plymouth",
    "3PC": "Infiniti",
    "3TM": "Toyota",
    "3TY": "Toyota",
    "3VV": "Volkswagen",
    "3VW": "Volkswagen",
    "3WK": "Kenworth",
    "3WP": "Peterbilt Truck",
    "4A3": "Mitsubishi",
    "4A4": "Mitsubishi",
    "4B3": "Dodge",
    "4C3": "Chrysler",
    "4DR": "IC Bus",
    "4EN": "E-ONE",
    "4F2": "Mazda",
    "4F4": "Mazda",
    "4G1": "Chevrolet",
    "4G2": "Pontiac",
    "4G3": "Toyota",
    "4G5": "GM",
    "4GD": "Opel",
    "4JG": "Mercedes-Benz",
    "4KL": "Isuzu",
    "4M2": "Mercury",
    "4ML": "Oshkosh Trailer",
    "4N2": "Nissan",
    "4NU": "Isuzu",
    "4P1": "Pierce",
    "4P3": "Mitsubishi",
    "4RK": "Nova Bus",
    "4S1": "Isuzu",
    "4S2": "Isuzu",
    "4S3": "Subaru",
    "4S4": "Subaru",
    "4S6": "Honda",
    "4TA": "Toyota",
    "4T1": "Toyota",
    "4T3": "Toyota",
    "4T4": "Toyota",
    "4UF": "Arctic Cat",
    "4US": "BMW",
    "4UZ": "Freightliner",
    "4V1": "WhiteGMC Truck",
    "4V3": "Volvo",
    "4V4": "Volvo",
    "4V6": "Volvo",
    "4VA": "Volvo",
    "4VG": "Volvo",
    "4W5": "Acura",
    "4XA": "Polaris",
    "4X4": "Forest River",
    "4YM": "Carry-On Trailer, Inc.",
    "4Z3": "American LaFrance",
    "43C": "Consulier",
    "478": "Honda",
    "480": "Sterling",
    "5AS": "Global Electric Motorcars",
    "5BP": "Solectria",
    "5BZ": "Nissan",
    "5CX": "Shelby",
    "5DF": "Thomas Dennis",
    "5FC": "Columbia Vehicle",
    "5FN": "Honda",
    "5FP": "Honda",
    "5FR": "Acura",
    "5FY": "New Flyer",
    "5GA": "Buick",
    "5GD": "Daewoo",
    "5GN": "Hummer",
    "5GR": "Hummer",
    "5GT": "Hummer",
    "5GZ": "Saturn",
    "5G8": "Holden",
    "5HD": "Harley-Davidson",
    "5J6": "Honda",
    "5J8": "Acura",
    "5KB": "Honda",
    "5KJ": "Western Star",
    "5KK": "Western Star",
    "5L1": "Lincoln",
    "5LM": "Lincoln",
    "5LT": "Lincoln",
    "5N1": "Nissan Infiniti",
    "5N3": "Infiniti",
    "5NH": "Forest River",
    "5NM": "Hyundai",
    "5NP": "Hyundai",
    "5NT": "Hyundai",
    "5S3": "Saab",
    "5SA": "Suzuki",
    "5TB": "Toyota",
    "5TD": "Toyota",
    "5TE": "Toyota",
    "5TF": "Toyota",
    "5UM": "BMW",
    "5UX": "BMW",
    "5VF": "American Electric Vehicle Company",
    "5XX": "Kia",
    "5XY": "Kia Hyundai",
    "5YF": "Toyota",
    "5YJ": "Tesla",
    "5YM": "BMW ",
    "5YN": "Cruise",
    "5Y2": "Pontiac",
    "5ZT": "Forest River",
    "5Z6": "Suzuki",
    "50E": "Lucid",
    "50G": "Karma Automotive",
    "516": "Autocar",
    "523": "VPG",
    "52C": "GEM",
    "53G": "Coda Automotive",
    "53T": "Think North America in Elkhart, IN",
    "546": "EBR",
    "54C": "Winnebago",
    "54D": "Chevrolet",
    "55S": "Mercedes-Benz",
    "57W": "Mobility Ventures",
    "57X": "Polaris Slingshot",
    "58A": "Lexus",
    "6AB": "MAN",
    "6AM": "Jayco",
    "6F1": "Ford",
    "6F2": "Iveco",
    "6F4": "Nissan",
    "6F5": "Kenworth",
    "6FM": "Mack",
    "6FP": "Ford",
    "6G1": "GM",
    "6G2": "Pontiac",
    "6G3": "GM",
    "6H8": "GM",
    "6MM": "Mitsubishi",
    "6MP": "Mercury",
    "6T1": "Toyota",
    "6U9": "Privately",
    "7A1": "Mitsubishi",
    "7A3": "Honda",
    "7A4": "Toyota",
    "7A5": "Ford",
    "7A7": "Nissan",
    "7FA": "Honda",
    "7FC": "Rivian",
    "7F7": "Arcimoto",
    "7G2": "Tesla",
    "7H4": "Hino",
    "7H8": "Cenntro",
    "7JD": "Volvo",
    "7JR": "Volvo",
    "7JZ": "Proterra",
    "7KG": "Vanderhall",
    "7MM": "Mazda",
    "7MU": "Toyota",
    "7MW": "Cenntro",
    "7NA": "Navistar",
    "7NY": "Lordstown",
    "7PD": "Rivian",
    "7SA": "Tesla",
    "7SU": "Blue Arc",
    "7SV": "Toyota",
    "7SX": "Global Electric Motorcars",
    "7SY": "Polestar",
    "7TN": "Canoo",
    "7VV": "Ree",
    "7Z0": "Zoox",
    "8AB": "Mercedes-Benz",
    "8AC": "Mercedes-Benz",
    "8AD": "Peugeot",
    "8AE": "Peugeot",
    "8AF": "Ford",
    "8AG": "Chevrolet",
    "8AJ": "Toyota",
    "8AK": "Suzuki",
    "8AN": "Nissan",
    "8AP": "Fiat",
    "8AT": "Iveco",
    "8AW": "Volkswagen",
    "8A1": "Renault",
    "8A3": "Scania",
    "8BB": "Agrale",
    "8BC": "Citroën",
    "8BR": "Mercedes-Benz",
    "8BT": "Mercedes-Benz",
    "8BU": "Mercedes-Benz",
    "8C3": "Honda",
    "8G1": "Renault",
    "8GD": "Peugeot",
    "8GG": "Chevrolet",
    "8LD": "Chevrolet",
    "8LF": "Maresa",
    "8LG": "Aymesa",
    "8L4": "Great Wall",
    "8XD": "Ford",
    "9BD": "Fiat",
    "9BF": "Ford",
    "9BG": "Chevrolet",
    "9BH": "Hyundai",
    "9BM": "Mercedes-Benz",
    "9BN": "Mafersa",
    "9BR": "Toyota",
    "9BS": "Scania",
    "9BV": "Volvo",
    "9BW": "Volkswagen",
    "9DF": "Puma",
    "932": "Harley-Davidson",
    "935": "Citroën",
    "936": "Peugeot",
    "937": "Dodge",
    "93C": "Chevrolet",
    "93H": "Honda",
    "93K": "Volvo",
    "93P": "Volare",
    "93S": "Navistar",
    "93R": "Toyota",
    "93U": "Audi",
    "93W": "Fiat",
    "93V": "Navistar",
    "93X": "Mitsubishi",
    "93Y": "Renault",
    "93Z": "Iveco",
    "94D": "Nissan",
    "94N": "RWM",
    "95P": "CAOA",
    "988": "Jeep Fiat",
    "98M": "BMW",
    "98P": "DAF",
    "98R": "Chery",
    "99A": "Audi",
    "99H": "Shineray",
    "99J": "Jaguar Land Rover",
    "99K": "Haojue Kymco",
    "99L": "BYD",
    "9FB": "Renault",
    "9FC": "Compañía",
    "9GA": "Chevrolet",
    "9UJ": "Chery",
    "9UK": "Lifan",
    "9UT": "Dongfeng",
    "9UW": "Kia",
    "9VC": "Fiat",
    "9V7": "Citroën",
    "9V8": "Peugeot",
    "MM0": "Mazda",
    "MM6": "Mazda",
    "MM7": "Mazda",
    "MM8": "Mazda"
}


def decode_vds(manufacturer, vds):
    vds_model_mapping = {
        'Honda': {
            1: {
                'F': 'Agila',
                'G': 'Insignia',
                'J': 'Mokka',
                'L': 'Antara',
                'M': 'Movano',
                'P': ['Astra J', 'Zafira C'],
                'R': 'Astra GTC J',
                'S': 'Meriva',
                'V': 'Combo II',
                'W': 'Cascada',
            }
        },

        'Kia': {
            1: {
                'A': ['Rio', 'EV9'],
                'C': ['Niro', 'EV6'],
                'D': 'Rio',
                'E': ['Stinger', 'Seltos'],
                'F': ['Forte', 'K4'],
                'G': ['Optima', 'Magentis', 'K5'],
                'H': 'Rondo',
                'J': 'Soul',
                'K': ['Mohave', 'Sorento', 'Sportage'],
                'L': ['Cadenza', 'K9'],
                'M': 'Sedona',
                'N': 'Carnival',
                'P': ['Sportage', 'Sorento', 'Telluride'],
                'R': 'Sorento',
                'S': 'K9'
            }
        },

        'Peugeot': {
            1: {
                'A': '604',
                '2': '206',
                '8': ['406', '508'],
                '6': '407',
                '9': '308',
                "4": '308',
                'B': 'Expert',
                'C': ['208', '504'],
                'D': '301',
                '3': '307',
                '7': ['306', 'Partner'],
                'U': '2008',
                'M': '3008',
            }
        },

        'Toyota': {
            5: {  # 5th character in VDS
                '0': 'MR2 Spyder',
                '1': 'Tundra',
                '3': ['Echo', 'Yaris'],
                'A': ['Highlander', 'Sequoia', 'Celica', 'Supra'],
                'B': 'Avalon',
                'C': ['Sienna', 'Previa'],
                'D': 'T100',
                'E': ['Corolla', 'Matrix'],
                'F': 'FJ Cruiser',
                'G': 'Hilux',
                'H': 'Highlander',
                'J': 'Land Cruiser',
                'K': 'Camry',
                'L': ['Tercel', 'Paseo'],
                'M': 'Previa',
                'N': 'Tacoma',
                'P': 'Camry',
                'R': ['4Runner', 'Corolla'],
                'T': 'Celica FWD',
                'U': 'Prius',
                'V': 'RAV4',
                'W': 'MR2 non Spyder',
                'X': 'Cressida',
            }
        },

        'Nissan': {
            2: {
                'A': ['Armada', 'Titan', 'Maxima'],
                'B': 'Sentra',
                'C': 'Versa (07-11)',
                'D': ['Truck', 'Xterra (00-04)', 'Frontier'],
                'J': 'Maxima',
                'L': 'Altima',
                'N': 'Xterra (05-11)',
                'P': 'Kicks',
                'R': 'Pathfinder',
                'S': ['240SX', 'Rogue (08-11)'],
                'T': 'X Trail',
                'U': 'Altima',
                'Y': 'Patrol',
                'Z': ['300Z', '350Z', 'Murano'],
            }
        },

        'Renault': {
            2: {  # 5th character in VDS
                '0': 'Twingo',
                '1': 'R4',
                '2': 'R25',
                '3': 'R4',
                '4': ['R21', 'Express'],
                '5': ['Clio I', 'Laguna', 'R19', 'Safrane'],
                'A': ['Megane I', 'Master'],
                'B': 'Clio II',
                'C': 'Kangoo',
                'D': 'Master',
                'E': ['Espace III', 'Avantime'],
                'G': 'Laguna II',
                'H': 'Master Propulsion',
                'J': ['Vel Satis', 'New Trafic'],
                'K': 'Espace IV',
                'L': 'Trafic',
                'M': 'Megan II',
                'P': 'Modus',
                'S': ['Logan', 'Sandero', 'Duster', 'Dokker', 'Lodgy'],
                'Y': 'Koleos',
            }
        }
    }

    manufacturer_mapping = vds_model_mapping.get(manufacturer, {})

    for position, models in manufacturer_mapping.items():
        if position - 1 < len(vds):
            key = vds[position - 1]
            model = models.get(key, None)
            if model:
                return model

    return "Unknown Model"


def decode_vin(vin):
    if len(vin) != 17:
        raise ValueError("Invalid VIN length. VIN must be 17 characters.")

    pattern = r"^[A-HJ-NPR-Z0-9]{17}$"
    if not re.match(pattern, vin):
        raise Exception(f"VIN number must only contain alphanumeric symbols except 'I', 'O', and 'Q' ")

    vin = vin.upper()

    wmi = vin[:3]
    vds = vin[3:9]
    vis = vin[9:17]

    manufacturer = wmi_manufacturer_mapping.get(wmi, vds)

    year_code = vis[0]
    year = vin_years(year_code)
    model = decode_vds(manufacturer, vds)

    return {
        'VIN': vin,
        'Manufacturer': manufacturer,
        'Year': year,
        'Model': model
    }


# JTDKB3FU4G3507653
# VR3USHNLWRJ521303
# KNARH81E8P5194005
# Example usage
vin_number = 'LGWEE4A53SK607775'
decoded_vin = decode_vin(vin_number)
print(decoded_vin)


