/* -*- C++ -*-
 * Copyright 2019-2025 LibRaw LLC (info@libraw.org)
 *

 LibRaw is free software; you can redistribute it and/or modify
 it under the terms of the one of two licenses as you choose:

1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
   (See file LICENSE.LGPL provided in LibRaw distribution archive for details).

2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
   (See file LICENSE.CDDL provided in LibRaw distribution archive for details).

 */

#include "../../internal/dcraw_defs.h"
#include "../../internal/libraw_cameraids.h"

void LibRaw::GetNormalizedModel()
{

  int i, j;
  char *ps;
  int try_xml = 0;

  static const struct
  {
    unsigned long long id;
    char t_model[20];
  } unique[] =
// clang-format off
    {
      { CanonID_EOS_M50,           "EOS M50"}, // Kiss M
      { CanonID_EOS_M6_Mark_II,    "EOS M6 Mark II"},
      { CanonID_EOS_M200,          "EOS M200"},
      { CanonID_EOS_D30,           "EOS D30"},
      { CanonID_EOS_D60,           "EOS D60"},
      { CanonID_EOS_M3,            "EOS M3"},
      { CanonID_EOS_M10,           "EOS M10"},
      { CanonID_EOS_M5,            "EOS M5"},
      { CanonID_EOS_M100,          "EOS M100"},
      { CanonID_EOS_M6,            "EOS M6"},

      { CanonID_EOS_R5_C,          "EOS R5 C"},

      { CanonID_EOS_1D,            "EOS-1D"},
      { CanonID_EOS_1Ds,           "EOS-1Ds"},
      { CanonID_EOS_10D,           "EOS 10D"},
      { CanonID_EOS_1D_Mark_III,   "EOS-1D Mark III"},
      { CanonID_EOS_300D,          "EOS 300D"}, // Digital Rebel / Kiss Digital
      { CanonID_EOS_1D_Mark_II,    "EOS-1D Mark II"},
      { CanonID_EOS_20D,           "EOS 20D"},
      { CanonID_EOS_450D,          "EOS 450D"}, // Digital Rebel XSi / Kiss X2
      { CanonID_EOS_1Ds_Mark_II,   "EOS-1Ds Mark II"},
      { CanonID_EOS_350D,          "EOS 350D"}, // Digital Rebel XT / Kiss Digital N
      { CanonID_EOS_40D,           "EOS 40D"},
      { CanonID_EOS_5D,            "EOS 5D"},
      { CanonID_EOS_1Ds_Mark_III,  "EOS-1Ds Mark III"},
      { CanonID_EOS_5D_Mark_II,    "EOS 5D Mark II"},
      { CanonID_EOS_1D_Mark_II_N,  "EOS-1D Mark II N"},
      { CanonID_EOS_30D,           "EOS 30D"},
      { CanonID_EOS_400D,          "EOS 400D"}, // Digital Rebel XTi / Kiss Digital X
      { CanonID_EOS_7D,            "EOS 7D"},
      { CanonID_EOS_500D,          "EOS 500D"},   // Rebel T1i / Kiss X3
      { CanonID_EOS_1000D,         "EOS 1000D"}, // Digital Rebel XS / Kiss F
      { CanonID_EOS_50D,           "EOS 50D"},
      { CanonID_EOS_1D_X,          "EOS-1D X"},
      { CanonID_EOS_550D,          "EOS 550D"}, // Rebel T2i / Kiss X4
      { CanonID_EOS_1D_Mark_IV,    "EOS-1D Mark IV"},
      { CanonID_EOS_5D_Mark_III,   "EOS 5D Mark III"},
      { CanonID_EOS_600D,          "EOS 600D"}, // Rebel T3i / Kiss X5
      { CanonID_EOS_60D,           "EOS 60D"},
      { CanonID_EOS_1100D,         "EOS 1100D"}, // Rebel T3 / Kiss X50
      { CanonID_EOS_7D_Mark_II,    "EOS 7D Mark II"},
      { CanonID_EOS_650D,          "EOS 650D"}, // Rebel T4i / Kiss X6i
      { CanonID_EOS_6D,            "EOS 6D"},
      { CanonID_EOS_1D_C,          "EOS-1D C"},
      { CanonID_EOS_70D,           "EOS 70D"},
      { CanonID_EOS_700D,          "EOS 700D"},   // Rebel T5i / Kiss X7i
      { CanonID_EOS_1200D,         "EOS 1200D"}, // Rebel T5 / Kiss X70 / Hi
      { CanonID_EOS_1D_X_Mark_II,  "EOS-1D X Mark II"},
      { CanonID_EOS_M,             "EOS M"},
      { CanonID_EOS_100D,          "EOS 100D"}, // Rebel SL1 / Kiss X7
      { CanonID_EOS_760D,          "EOS 760D"}, // Rebel T6s / 8000D
      { CanonID_EOS_5D_Mark_IV,    "EOS 5D Mark IV"},
      { CanonID_EOS_80D,           "EOS 80D"},
      { CanonID_EOS_M2,            "EOS M2"},
      { CanonID_EOS_5DS,           "EOS 5DS"},
      { CanonID_EOS_750D,          "EOS 750D"}, // Rebel T6i / Kiss X8i
      { CanonID_EOS_5DS_R,         "EOS 5DS R"},
      { CanonID_EOS_1300D,         "EOS 1300D"}, // Rebel T6 / Kiss X80
      { CanonID_EOS_800D,          "EOS 800D"},   // Rebel T7i / Kiss X9i
      { CanonID_EOS_6D_Mark_II,    "EOS 6D Mark II"},
      { CanonID_EOS_77D,           "EOS 77D"},     // 9000D
      { CanonID_EOS_200D,          "EOS 200D"},   // Rebel SL2 / Kiss X9
      { CanonID_EOS_R5,            "EOS R5"},
      { CanonID_EOS_3000D,         "EOS 3000D"}, // Rebel T100 / 4000D
      { CanonID_EOS_R,             "EOS R"},
      { CanonID_EOS_1D_X_Mark_III, "EOS-1D X Mark III"},
      { CanonID_EOS_1500D,         "EOS 1500D"}, // Rebel T7 / 2000D / Kiss X90
      { CanonID_EOS_RP,            "EOS RP"},
      { CanonID_EOS_850D,          "EOS 850D"},  // EOS Rebel T8i / X10i
      { CanonID_EOS_250D,          "EOS 250D"}, // Rebel SL3 / 200D II / Kiss X10
      { CanonID_EOS_90D,           "EOS 90D"},
      { CanonID_EOS_R3,            "EOS R3"},
      { CanonID_EOS_R6,            "EOS R6"},
      { CanonID_EOS_R7,            "EOS R7"},
      { CanonID_EOS_R10,           "EOS R10"},
      { CanonID_EOS_M50_Mark_II,   "EOS M50 Mark II"}, // M50m2, Kiss M2
      { CanonID_EOS_R50,           "EOS R50"},
      { CanonID_EOS_R6m2,          "EOS R6 Mark II"},
      { CanonID_EOS_R8,            "EOS R8"},
      { CanonID_EOS_R1,            "EOS R1"},
      { CanonID_EOS_R5_Mark_II,    "EOS R5 Mark II"}, // EOS R5m2
      { CanonID_EOS_R100,          "EOS R100"}
    },
#if 0
    olyque[] = {
      { OlyID_E_20,            "E-20"},
      { OlyID_E_20,            "E-20,E-20N,E-20P"},
      { OlyID_E_1,             "E-1"},
      { OlyID_E_300,           "E-300"},
      { OlyID_SP_550UZ,        "SP-550UZ"},
      { OlyID_SP_550UZ,        "SP550UZ"},
      { OlyID_SP_510UZ,        "SP-510UZ"},
      { OlyID_SP_510UZ,        "SP510UZ"},
      { OlyID_SP_560UZ,        "SP-560UZ"},
      { OlyID_SP_560UZ,        "SP560UZ"},
      { OlyID_SP_570UZ,        "SP-570UZ"},
      { OlyID_SP_570UZ,        "SP570UZ"},
      { OlyID_SP_565UZ,        "SP-565UZ"},
      { OlyID_SP_565UZ,        "SP565UZ"},
      { OlyID_XZ_1,            "XZ-1"},
      { OlyID_XZ_2,            "XZ-2"},
      { OlyID_XZ_10,           "XZ-10"},
      { OlyID_STYLUS_1,        "Stylus 1"},
      { OlyID_STYLUS_1,        "STYLUS1"},
      { OlyID_STYLUS_1,        "STYLUS1,1s"},
      { OlyID_SH_2,            "SH-2"},
      { OlyID_TG_4,            "TG-4"},
      { OlyID_TG_5,            "TG-5"},
      { OlyID_TG_6,            "TG-6"},
      { OlyID_TG_7,            "TG-7"},
      { OlyID_E_10,            "E-10"},
      { OlyID_AIR_A01,         "AIR A01"},
      { OlyID_AIR_A01,         "AIR-A01"},
      { OlyID_E_330,           "E-330"},
      { OlyID_E_500,           "E-500"},
      { OlyID_E_400,           "E-400"},
      { OlyID_E_510,           "E-510"},
      { OlyID_E_3,             "E-3"},
      { OlyID_E_410,           "E-410"},
      { OlyID_E_420,           "E-420"},
      { OlyID_E_30,            "E-30"},
      { OlyID_E_520,           "E-520"},
      { OlyID_E_P1,            "E-P1"},
      { OlyID_E_620,           "E-620"},
      { OlyID_E_P2,            "E-P2"},
      { OlyID_E_PL1,           "E-PL1"},
      { OlyID_E_450,           "E-450"},
      { OlyID_E_600,           "E-600"},
      { OlyID_E_P3,            "E-P3"},
      { OlyID_E_5,             "E-5"},
      { OlyID_E_PL2,           "E-PL2"},
      { OlyID_E_M5,            "E-M5"},
      { OlyID_E_PL3,           "E-PL3"},
      { OlyID_E_PM1,           "E-PM1"},
      { OlyID_E_PL1s,          "E-PL1s"},
      { OlyID_E_PL5,           "E-PL5"},
      { OlyID_E_PM2,           "E-PM2"},
      { OlyID_E_P5,            "E-P5"},
      { OlyID_E_PL6,           "E-PL6"},
      { OlyID_E_PL7,           "E-PL7"},
      { OlyID_E_M1,            "E-M1"},
      { OlyID_E_M10,           "E-M10"},
      { OlyID_E_M5_Mark_II,    "E-M5 Mark II"},
      { OlyID_E_M5_Mark_II,    "E-M5MarkII"},
      { OlyID_E_M5_Mark_II,    "E-M5_M2"},
      { OlyID_E_M10_Mark_II,   "E-M10 Mark II"}, // Clauss piX 5oo
      { OlyID_E_M10_Mark_II,   "E-M10MarkII"},
      { OlyID_E_M10_Mark_II,   "E-M10_M2"},
      { OlyID_PEN_F,           "PEN-F"},
      { OlyID_E_PL8,           "E-PL8"},
      { OlyID_E_M1_Mark_II,    "E-M1 Mark II"},
      { OlyID_E_M1_Mark_II,    "E-M1MarkII"},
      { OlyID_E_M1_Mark_II,    "E-M1_M2"},
      { OlyID_E_M10_Mark_III,  "E-M10 Mark III"},
      { OlyID_E_M10_Mark_III,  "E-M10_M3"},
      { OlyID_E_PL9,           "E-PL9"},
      { OlyID_E_M1X,           "E-M1X"},
      { OlyID_E_PL10,          "E-PL10"},
      { OlyID_E_M10_Mark_IV,   "E-M10 Mark IV"},
      { OlyID_E_M10_Mark_IV,   "E-M10MarkIV"},
      { OlyID_E_M10_Mark_IV,   "E-M10_M4"},
      { OlyID_E_M5_Mark_III,   "E-M5 Mark III"},
      { OlyID_E_M5_Mark_III,   "E-M5MarkIII"},
      { OlyID_E_M5_Mark_III,   "E-M5_M3"},
      { OlyID_E_M1_Mark_III,   "E-M1 Mark III"},
      { OlyID_E_M1_Mark_III,   "E-M1MarkIII"},
      { OlyID_E_M1_Mark_III,   "E-M1_M3"},
      { OlyID_E_P7             "E-P7"},
      { OlyID_C_3030Z,         "C-3030Z"},
      { OlyID_C_3030Z,         "C3030Z"},
      { OlyID_C_5050Z,         "C-5050Z"},
      { OlyID_C_5050Z,         "C5050Z"},
      { OlyID_C_350Z,          "C-350Z"},
      { OlyID_C_350Z,          "X200,D560Z,C350Z"},
      { OlyID_C_740UZ,         "C-740UZ"},
      { OlyID_C_740UZ,         "C740UZ"},
      { OlyID_C_5060WZ,        "C-5060WZ"},
      { OlyID_C_5060WZ,        "C5060WZ"},
      { OlyID_C_8080WZ,        "C-8080WZ"},
      { OlyID_C_8080WZ,        "C8080WZ"},
      { OlyID_C_770UZ,         "C-770UZ"},
      { OlyID_C_770UZ,         "C770UZ"},
      { OlyID_C_7070WZ,        "C-7070WZ"},
      { OlyID_C_7070WZ,        "C7070WZ"},
      { OlyID_C_7000Z,         "C-7000Z"},
      { OlyID_C_7000Z,         "C70Z,C7000Z"},
      { OlyID_SP_500UZ,        "SP-500UZ"},
      { OlyID_SP_500UZ,        "SP500UZ"},
      { OlyID_SP_310,          "SP-310"},
      { OlyID_SP_310,          "SP310"},
      { OlyID_SP_350,          "SP-350"},
      { OlyID_SP_350,          "SP350"},
      { OlyID_SP_320,          "SP-320"},
      { OlyID_SP_320,          "SP320"},
    },

    penique[] = {
      { PentaxID_Optio_S,      "Optio S"},
      { PentaxID_Optio_S_V101, "Optio S V1.01"},
      { PentaxID_staristD,     "*istD"},
      { PentaxID_staristD,     "*ist D"},
      { PentaxID_Optio_33WR,   "Optio 33WR"},
      { PentaxID_Optio_S4,     "Optio S4"},
      { PentaxID_Optio_750Z,   "Optio 750Z"},
      { PentaxID_staristDS,    "*istDS"},
      { PentaxID_staristDS,    "*ist DS"},
      { PentaxID_staristDL,    "*istDL"},
      { PentaxID_staristDL,    "*ist DL"},
      { PentaxID_staristDS2,   "*istDS2"},
      { PentaxID_staristDS2,   "*ist DS2"},
      { PentaxID_GX_1S,        "GX-1S"},        // Samsung
      { PentaxID_staristDL2,   "*istDL2"},
      { PentaxID_staristDL2,   "*ist DL2"},
      { PentaxID_GX_1L,        "GX-1L"},        // Samsung
      { PentaxID_K100D,        "K100D"},
      { PentaxID_K110D,        "K110D"},
      { PentaxID_K100D_Super,  "K100D Super"},
      { PentaxID_K10D,         "K10D"},
      { PentaxID_GX10,         "GX10"},         // Samsung
      { PentaxID_GX10,         "GX-10"},        // Samsung
      { PentaxID_K20D,         "K20D"},
      { PentaxID_GX20,         "GX20"},         // Samsung
      { PentaxID_GX20,         "GX-20"},        // Samsung
      { PentaxID_K200D,        "K200D"},
      { PentaxID_K2000,        "K2000"},
      { PentaxID_K_m,          "K-m"},
      { PentaxID_K_7,          "K-7"},
      { PentaxID_K_x,          "K-x"},
      { PentaxID_645D,         "645D"},
      { PentaxID_K_r,          "K-r"},
      { PentaxID_K_5,          "K-5"},
      { PentaxID_Q,            "Q"},
      { PentaxID_K_01,         "K-01"},
      { PentaxID_K_30,         "K-30"},
      { PentaxID_Q10,          "Q10"},
      { PentaxID_K_5_II,       "K-5 II"},
      { PentaxID_K_5_II_s,     "K-5 II s"},
      { PentaxID_Q7,           "Q7"},
      { PentaxID_MX_1,         "MX-1"},
      { PentaxID_K_50,         "K-50"},
      { PentaxID_K_3,          "K-3"},
      { PentaxID_K_500,        "K-500"},
      { PentaxID_645Z,         "645Z"},
      { PentaxID_K_S1,         "K-S1"},
      { PentaxID_K_S2,         "K-S2"},         // Ricoh
      { PentaxID_Q_S1,         "Q-S1"},
      { PentaxID_K_1,          "K-1"},          // Ricoh
      { PentaxID_K_3_II,       "K-3 II"},       // Ricoh
      { PentaxID_GR_III,       "GR III"},       // Ricoh
      { PentaxID_K_70,         "K-70"},         // Ricoh
      { PentaxID_KF,           "KF"},           // Ricoh
      { PentaxID_KP,           "KP"},           // Ricoh
      { PentaxID_K_1_Mark_II,  "K-1 Mark II"},  // Ricoh
      { PentaxID_K_3_III,      "K-3 Mark III"}, // Ricoh
      { PentaxID_GR_IIIx,      "GR IIIx"},
      { PentaxID_K_3_III_Mono, "K-3 Mark III Monochrome"},
    },
#endif
    sonique[] = {
      { SonyID_DSC_R1,         "DSC-R1"},
      { SonyID_DSLR_A100,      "DSLR-A100"},
      { SonyID_DSLR_A900,      "DSLR-A900"},
      { SonyID_DSLR_A700,      "DSLR-A700"},
      { SonyID_DSLR_A200,      "DSLR-A200"},
      { SonyID_DSLR_A350,      "DSLR-A350"},
      { SonyID_DSLR_A300,      "DSLR-A300"},
      { SonyID_DSLR_A900_APSC, "DSLR-A900"},
      { SonyID_DSLR_A380,      "DSLR-A380"},    // DSLR-A390
      { SonyID_DSLR_A330,      "DSLR-A330"},
      { SonyID_DSLR_A230,      "DSLR-A230"},
      { SonyID_DSLR_A290,      "DSLR-A290"},
      { SonyID_DSLR_A850,      "DSLR-A850"},
      { SonyID_DSLR_A850_APSC, "DSLR-A850"},
      { SonyID_DSLR_A550,      "DSLR-A550"},
      { SonyID_DSLR_A500,      "DSLR-A500"},
      { SonyID_DSLR_A450,      "DSLR-A450"},
      { SonyID_NEX_5,          "NEX-5"},
      { SonyID_NEX_3,          "NEX-3"},
      { SonyID_SLT_A33,        "SLT-A33"},
      { SonyID_SLT_A55,        "SLT-A55"},      // SLT-A55V
      { SonyID_DSLR_A560,      "DSLR-A560"},
      { SonyID_DSLR_A580,      "DSLR-A580"},
      { SonyID_NEX_C3,         "NEX-C3"},
      { SonyID_SLT_A35,        "SLT-A35"},
      { SonyID_SLT_A65,        "SLT-A65"},      // SLT-A65V
      { SonyID_SLT_A77,        "SLT-A77"},      // SLT-A77V
      { SonyID_NEX_5N,         "NEX-5N"},
      { SonyID_NEX_7,          "NEX-7"},        // Hasselblad Lunar
      { SonyID_NEX_VG20,       "NEX-VG20"},
      { SonyID_SLT_A37,        "SLT-A37"},
      { SonyID_SLT_A57,        "SLT-A57"},
      { SonyID_NEX_F3,         "NEX-F3"},
      { SonyID_SLT_A99,        "SLT-A99"},      // SLT-A99V / Hasselblad HV
      { SonyID_NEX_6,          "NEX-6"},
      { SonyID_NEX_5R,         "NEX-5R"},
      { SonyID_DSC_RX100,      "DSC-RX100"},    // Hasselblad Stellar
      { SonyID_DSC_RX1,        "DSC-RX1"},
      { SonyID_NEX_VG900,      "NEX-VG900"},
      { SonyID_NEX_VG30,       "NEX-VG30"},
      { SonyID_ILCE_3000,      "ILCE-3000"},    // ILCE-3500
      { SonyID_SLT_A58,        "SLT-A58"},
      { SonyID_NEX_3N,         "NEX-3N"},
      { SonyID_ILCE_7,         "ILCE-7"},
      { SonyID_NEX_5T,         "NEX-5T"},
      { SonyID_DSC_RX100M2,    "DSC-RX100M2"},  // Hasselblad Stellar II
      { SonyID_DSC_RX10,       "DSC-RX10"},
      { SonyID_DSC_RX1R,       "DSC-RX1R"},
      { SonyID_ILCE_7R,        "ILCE-7R"},      // Hasselblad Lusso
      { SonyID_ILCE_6000,      "ILCE-6000"},
      { SonyID_ILCE_5000,      "ILCE-5000"},
      { SonyID_DSC_RX100M3,    "DSC-RX100M3"},
      { SonyID_ILCE_7S,        "ILCE-7S"},
      { SonyID_ILCA_77M2,      "ILCA-77M2"},
      { SonyID_ILCE_5100,      "ILCE-5100"},
      { SonyID_ILCE_7M2,       "ILCE-7M2"},
      { SonyID_DSC_RX100M4,    "DSC-RX100M4"},
      { SonyID_DSC_RX10M2,     "DSC-RX10M2"},
      { SonyID_DSC_RX1RM2,     "DSC-RX1RM2"},
      { SonyID_ILCE_QX1,       "ILCE-QX1"},     // Sony UMC-R10C
      { SonyID_ILCE_7RM2,      "ILCE-7RM2"},
      { SonyID_ILCE_7SM2,      "ILCE-7SM2"},
      { SonyID_ILCA_68,        "ILCA-68"},
      { SonyID_ILCA_99M2,      "ILCA-99M2"},
      { SonyID_DSC_RX10M3,     "DSC-RX10M3"},
      { SonyID_DSC_RX100M5,    "DSC-RX100M5"},
      { SonyID_ILCE_6300,      "ILCE-6300"},
      { SonyID_ILCE_9,         "ILCE-9"},
      { SonyID_ILCE_6500,      "ILCE-6500"},
      { SonyID_ILCE_7RM3,      "ILCE-7RM3"},
      { SonyID_ILCE_7M3,       "ILCE-7M3"},
      { SonyID_DSC_RX0,        "DSC-RX0"},
      { SonyID_DSC_RX10M4,     "DSC-RX10M4"},
      { SonyID_DSC_RX100M6,    "DSC-RX100M6"},
      { SonyID_DSC_HX99,       "DSC-HX99"},
      { SonyID_DSC_RX100M5A,   "DSC-RX100M5A"},
      { SonyID_ILCE_6400,      "ILCE-6400"},
      { SonyID_DSC_RX0M2,      "DSC-RX0M2"},
      { SonyID_DSC_HX95,       "DSC-HX95"},
      { SonyID_DSC_RX100M7,    "DSC-RX100M7"},
      { SonyID_ILCE_7RM4,      "ILCE-7RM4"},
      { SonyID_ILCE_9M2,       "ILCE-9M2"},
      { SonyID_ILCE_6600,      "ILCE-6600"},
      { SonyID_ILCE_6100,      "ILCE-6100"},
      { SonyID_ZV_1,           "ZV-1"},
      { SonyID_ILCE_7C,        "ILCE-7C"},
      { SonyID_ZV_E10,         "ZV-E10"},
      { SonyID_ILCE_7SM3,      "ILCE-7SM3"},
      { SonyID_ILCE_1,         "ILCE-1"},
      { SonyID_ILCE_1M2,       "ILCE-1M2"},
      { SonyID_ILME_FX3,       "ILME-FX3"},
      { SonyID_ILCE_7RM3A,     "ILCE-7RM3A"},
      { SonyID_ILCE_7RM4A,     "ILCE-7RM4A"},
      { SonyID_ILCE_7M4,       "ILCE-7M4"},

// Sony ZV-1F doesn't save raw
//      { SonyID_ZV_1F,          "ZV-1F"},

      { SonyID_ILCE_7RM5,      "ILCE-7RM5"},
      { SonyID_ILME_FX30,      "ILME-FX30"},
      { SonyID_ILCE_9M3,       "ILCE-9M3"},
      { SonyID_ZV_E1,          "ZV-E1"},
      { SonyID_ILCE_6700,      "ILCE-6700"},
      { SonyID_ZV_1M2,         "ZV-1M2"},
      { SonyID_ILCE_7CR,       "ILCE-7CR"},
      { SonyID_ILCE_7CM2,      "ILCE-7CM2"},
      { SonyID_ILX_LR1,        "ILX-LR1"},
      { SonyID_ZV_E10M2,       "ZV-E10M2"},
      { SonyID_ILME_FX2,       "ILME-FX2"},
};

  static const char *orig;

  static const char fujialias[][16] = {
    "@DBP for GX680", "DX-2000",
    "@F500EXR", "F505EXR",
    "@F600EXR", "F605EXR",
    "@F770EXR", "F775EXR",
    "@HS10", "HS10 HS11",
    "@HS20EXR", "HS22EXR",
    "@HS30EXR", "HS33EXR", "HS35EXR",
    "@S5100", "S5500",
    "@S5200", "S5600",
    "@S6000fd", "S6500fd",
    "@S9000", "S9500",
    "@S9100", "S9600",
    "@S200EXR", "S205EXR",
    "@X-T1 IR", "X-T1IR",
    "@GFX 100 II", "GFX100 II",
    "@GFX 100S II", "GFX100S II",
    "@GFX 100S", "GFX100S",
    "@GFX 50S II", "GFX50S II"
  };

  static const char kodakalias[][16] = {
    "@DCS Pro 14N", "Camerz ZDS 14", // Camerz rebadge make: "Photo Control"
    "@DCS720X", "SCS2000",
    "@DCS520C", "EOS D2000C", "EOS D2000", // EOS rebadge make: Canon
    "@DCS560C", "EOS D6000C", "EOS D6000", // EOS rebadge make: Canon
    "@DCS460M", "DCS460A", // 'A' was supposed to stand for 'achromatic', marketing changed it to 'M'
    "@DCS460",  "DCS460C", "DCS460D",
    "@DCS465",  "DCS465C", "DCS465D",
    "@EOSDCS1", "EOSDCS1B", "EOSDCS1C",
    "@EOSDCS3", "EOSDCS3B", "EOSDCS3C",
  };

  static const struct
  {
    const char *Kmodel;
    ushort mount;
  } Kodak_mounts[] = {
      {"DCS465", LIBRAW_MOUNT_DigitalBack},
      {"DCS5", LIBRAW_MOUNT_Canon_EF},
      {"DCS Pro SLR/c", LIBRAW_MOUNT_Canon_EF},
      {"DCS", LIBRAW_MOUNT_Nikon_F},
      {"EOS", LIBRAW_MOUNT_Canon_EF},
      {"NC2000", LIBRAW_MOUNT_Nikon_F}, // AP "News Camera"
      {"Pixpro S-1", LIBRAW_MOUNT_mFT},
      {"ProBack", LIBRAW_MOUNT_DigitalBack},
      {"SCS1000", LIBRAW_MOUNT_Canon_EF},
  };

  static const char *KodakMonochrome[] = {
      "DCS420M",    "DCS420A",  "DCS420I",
      "DCS460M",    "DCS460A",  "DCS460I",
      "DCS465M",    "DCS465A",  "DCS465I",
      "DCS560M",    "DCS660M",  "DCS760M", "EOS D2000M", "EOS D6000M",
      "EOSDCS1M",   "EOSDCS1I",
      "EOSDCS3M",   "EOSDCS3I",
      "EOSDCS5M",   "EOSDCS5I",
      "NC2000M",    "NC2000A",  "NC2000I",
  };

  static const char leafalias[][16] = {
      // Leaf re-badged to Mamiya
    "@Aptus-II 5",  "DM22",
    "@Aptus-II 6",  "DM28",
    "@Aptus-II 7",  "DM33",
    "@Aptus-II 8",  "DM40",
    "@Aptus-II 10", "DM56",
  };

  static const char KonicaMinolta_aliases[][24] = {
    "@DG-5D", "DYNAX 5D", "MAXXUM 5D", "ALPHA-5 DIGITAL", "ALPHA SWEET DIGITAL",
    "@DG-7D", "DYNAX 7D", "MAXXUM 7D", "ALPHA-7 DIGITAL",
  };

  static const char nikonalias[][16] = {
      "@COOLPIX 2100",  "E2100",         "@COOLPIX 2500",  "E2500",
      "@COOLPIX 3200",  "E3200",         "@COOLPIX 3700",  "E3700",
      "@COOLPIX 4300",  "E4300",         "@COOLPIX 4500",  "E4500",
      "@COOLPIX 5000",  "E5000",         "@COOLPIX 5400",  "E5400",
      "@COOLPIX 5700",  "E5700",         "@COOLPIX 8400",  "E8400",
      "@COOLPIX 8700",  "E8700",         "@COOLPIX 8800",  "E8800",
      "@COOLPIX 700",   "E700",          "@COOLPIX 800",   "E800",
      "@COOLPIX 880",   "E880",          "@COOLPIX 900",   "E900",
      "@COOLPIX 950",   "E950",          "@COOLPIX 990",   "E990",
      "@COOLPIX 995",   "E995",          "@COOLPIX P7700", "COOLPIX Deneb",
      "@COOLPIX P7800", "COOLPIX Kalon",
  };

  static const char olyalias[][32] = { // Olympus
    "@AIR A01", "AIR-A01",
    "@C-3030Z", "C3030Z",
    "@C-5050Z", "C5050Z",
    "@C-5060WZ", "C5060WZ",
    "@C-7000Z", "C7000Z", "C70Z,C7000Z", "C70Z",
    "@C-7070WZ", "C7070WZ",
    "@C-8080WZ", "C8080WZ",
    "@C-350Z", "C350Z", "X200,D560Z,C350Z", "X200", "D560Z",
    "@C-740UZ", "C740UZ",
    "@C-770UZ", "C770UZ",
    "@E-20", "E-20,E-20N,E-20P", "E-20N", "E-20P",
    "@E-M10 Mark II", "E-M10MarkII", "E-M10_M2", "piX 5oo",
    "@E-M10 Mark III", "E-M10MarkIII", "E-M10_M3",
    "@E-M10 Mark IV", "E-M10MarkIV", "E-M10_M4",
    "@E-M1 Mark II", "E-M1MarkII", "E-M1_M2",
    "@E-M1 Mark III", "E-M1MarkIII", "E-M1_M3",
    "@E-M5 Mark II", "E-M5MarkII", "E-M5_M2",
    "@E-M5 Mark III", "E-M5MarkIII", "E-M5_M3",
    "@OM-1 Mark II", "OM-1MarkII", "OM-1_M2",
    "@SH-2", "SH-3",
    "@SP-310", "SP310",
    "@SP-320", "SP320",
    "@SP-350", "SP350",
    "@SP-500UZ", "SP500UZ",
    "@SP-510UZ", "SP510UZ",
    "@SP-550UZ", "SP550UZ",
    "@SP-560UZ", "SP560UZ",
    "@SP-565UZ", "SP565UZ",
    "@SP-570UZ", "SP570UZ",
    "@Stylus 1", "STYLUS1", "STYLUS1s", "STYLUS1,1s",
  };

  static const char panalias[][16] = { // Panasonic, PanaLeica
// fixed lens
    "@DMC-FX150", "DMC-FX180",
    "@DC-FZ1000M2", "DC-FZ10002", "V-Lux 5",
    "@DMC-FZ1000", "V-LUX (Typ 114)",
    "@DMC-FZ2500", "DMC-FZ2000", "DMC-FZH1",
    "@DMC-FZ100", "V-LUX 2",
    "@DMC-FZ150", "V-LUX 3",
    "@DMC-FZ200", "V-LUX 4",
    "@DMC-FZ300", "DMC-FZ330",
    "@DMC-FZ35", "DMC-FZ38",
    "@DMC-FZ40", "DMC-FZ42", "DMC-FZ45", "DC-FZ40", "DC-FZ42", "DC-FZ45",
    "@DMC-FZ50", "V-LUX 1", "V-LUX1",
    "@DMC-FZ70", "DMC-FZ72",
    "@DC-FZ80", "DC-FZ81", "DC-FZ82", "DC-FZ83", "DC-FZ85",
    "@DMC-LC1", "DIGILUX 2", "Digilux 2", "DIGILUX2",
    "@DMC-LF1", "C (Typ 112)",
    "@DC-LX100M2", "D-Lux 7",
    "@DMC-LX100", "D-LUX (Typ 109)", "D-Lux (Typ 109)",
    "@DMC-LX1", "D-Lux2", "D-LUX2", "D-LUX 2",
    "@DMC-LX2", "D-LUX 3", "D-LUX3",
    "@DMC-LX3", "D-LUX 4",
    "@DMC-LX5", "D-LUX 5",
    "@DMC-LX7", "D-LUX 6",
    "@DMC-LX9", "DMC-LX10", "DMC-LX15",
    "@DMC-ZS100", "DMC-ZS110", "DMC-TZ100", "DMC-TZ101", "DMC-TZ110", "DMC-TX1",
    "@DC-ZS200", "DC-ZS220", "DC-TZ200", "DC-TZ202", "DC-TZ220", "DC-TZ200D", "DC-TZ202D", "DC-TZ220D", "DC-ZS200D", "DC-ZS220D" "DC-TX2", "C-Lux", "CAM-DC25",
    "@DMC-ZS40", "DMC-TZ60", "DMC-TZ61",
    "@DMC-ZS50", "DMC-TZ70", "DMC-TZ71",
    "@DMC-ZS60", "DMC-TZ80", "DMC-TZ81", "DMC-TZ82", "DMC-TZ85",
    "@DC-ZS70", "DC-TZ90", "DC-TZ91", "DC-TZ92", "DC-TZ93",
    "@DC-ZS80", "DC-TZ95", "DC-TZ96", "DC-TZ97",

// interchangeable lens
    "@DC-G100",  "DC-G110",
    "@DC-G99",   "DC-G90",   "DC-G91",  "DC-G95",
    "@DMC-G7",   "DMC-G70",
    "@DMC-G8",   "DMC-G80",  "DMC-G81", "DMC-G85",
    "@DMC-GH4",  "AG-GH4",   "CGO4",
    "@DC-GF10",  "DC-GF90",  "DC-GX880",
    "@DC-GF9",   "DC-GX850", "DC-GX800",
    "@DMC-GM1",  "DMC-GM1S",
    "@DMC-GX85", "DMC-GX80", "DMC-GX7MK2",
    "@DC-GX9",   "DC-GX7MK3",
    "@DMC-L1",   "DIGILUX 3", "DIGILUX3", // full 4/3 mount, not m43
  };

  static const char phase1alias[][16] = {
    "@H20",  "H 20",
    "@H25",  "H 25",
    "@P20+", "P 20+",
    "@P20",  "P 20",
    "@P21+", "P 21+", "M18", // "Mamiya M18"
    "@P21",  "P 21",
    "@P25+", "P 25+", "M22", // "Mamiya M22"
    "@P25",  "P 25",
    "@P30+", "P 30+", "M31", // "Mamiya M31"
    "@P30",  "P 30",
    "@P40+", "P 40+",
    "@P40",  "P 40",
    "@P45+", "P 45+",
    "@P45",  "P 45",
    "@P65+", "P 65+",
    "@P65",  "P 65",
  };

  static const char SamsungPentax_aliases[][16] = {
    "@*istDL2", "*ist DL2", "GX-1L",
    "@*istDS2", "*ist DS2", "GX-1S",
    "@*istDL",  "*ist DL",
    "@*istDS",  "*ist DS",
    "@*istD",   "*ist D",
    "@K10D", "GX10", "GX-10",
    "@K20D", "GX20", "GX-20",
    "@K-m", "K2000",
  };

  static const char samsungalias[][64] = {
    "@EX1", "TL500",
    "@NX U", "EK-GN100", "EK-GN110", "EK-GN120", "EK-KN120", "Galaxy NX",
    "@NX mini", "NXF1",
    "@WB2000", "TL350",
      //    "@WB5000", "WB5000/HZ25W", // no spaces around the slash separating names
      //    "@WB5500", "WB5500 / VLUU WB5500 / SAMSUNG HZ50W",
      //    "@WB500", "WB510 / VLUU WB500 / SAMSUNG HZ10W",
      //    "@WB550", "WB560 / VLUU WB550 / SAMSUNG HZ15W",
      //    "@WB650", "SAMSUNG WB650 / VLUU WB650 / SAMSUNG WB660" aka HZ35W
  };

//clang-format on
  if (makeIs(LIBRAW_CAMERAMAKER_VLUU)) {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Samsung);
  }

  if (makeIs(LIBRAW_CAMERAMAKER_Samsung) &&
      (ilm.CameraMount == LIBRAW_MOUNT_Pentax_K)) {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Pentax);

  } else if (makeIs(LIBRAW_CAMERAMAKER_Unknown)) {
    if (strcasestr(model, "Google")) {
		  setMakeFromIndex(LIBRAW_CAMERAMAKER_Google);
    }
#ifdef USE_6BY9RPI
	else if(strcasestr(make,"RaspberryPi"))
		setMakeFromIndex(LIBRAW_CAMERAMAKER_RaspberryPi);
#endif
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Hasselblad) && is_Sony)
  {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Sony);
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_OmDigital))
  {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Olympus);
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Clauss) && (OlyID == OlyID_E_M10_Mark_II))
  {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Olympus);
  } else if (makeIs(LIBRAW_CAMERAMAKER_Canon) &&
             (!strncmp(model, "EOS D2000", 9) || // don't use unique_id here
              !strncmp(model, "EOS D6000", 9) || // because ids for Monochrome models are unknown
              !strncmp(model, "EOSDCS", 6))) {
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Kodak);
//    if (unique_id == CanonID_EOS_D2000C) {
//
//    } else if (unique_id  == CanonID_EOS_D6000C) {
///
//    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_PhotoControl) &&
             !strncasecmp(model, "Camerz ZDS 14", 13)) {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Kodak);

  } else {
    strcpy(normalized_make, make);
  }

  if (makeIs(LIBRAW_CAMERAMAKER_Apple)) {
    if ((imgdata.color.UniqueCameraModel[0]) &&
        (!strncmp(model, "iPad", 4) || !strncmp(model, "iPhone", 6)))
    strcpy(model, imgdata.color.UniqueCameraModel);

  } else if (makeIs(LIBRAW_CAMERAMAKER_Kodak)) {
    if ((model[6] == ' ') &&
        (!strncmp(model, "DCS4", 4) ||
         !strncmp(model, "NC2000", 6)))
    {
      model[6] = 0;
    }
    if ((model[6] != 'A') &&
        (model[6] != 'I') &&
        (model[6] != 'M') &&
        !strncmp(model, "NC2000", 6))
    {
      model[6] = 0;
    }
  }

  else if (makeIs(LIBRAW_CAMERAMAKER_Ricoh) &&
           !strncmp(model, "GXR", 3)) {
    strcpy(ilm.body, "Ricoh GXR");
    if (!imgdata.lens.Lens[0] && imgdata.color.UniqueCameraModel[0]) {
      strcpy (imgdata.lens.Lens, imgdata.color.UniqueCameraModel);
      remove_caseSubstr (imgdata.lens.Lens, (char *)"Ricoh");
      remove_caseSubstr (imgdata.lens.Lens, (char *)"Lens");
      removeExcessiveSpaces (imgdata.lens.Lens);
    }
    if (ilm.LensID == LIBRAW_LENS_NOT_SET) {
      if (strstr(imgdata.lens.Lens, "50mm"))
        ilm.LensID = 1;
      else if (strstr(imgdata.lens.Lens, "S10"))
        ilm.LensID = 2;
      else if (strstr(imgdata.lens.Lens, "P10"))
        ilm.LensID = 3;
      else if (strstr(imgdata.lens.Lens, "28mm"))
        ilm.LensID = 5;
      else if (strstr(imgdata.lens.Lens, "A16"))
        ilm.LensID = 6;
    }
    switch (ilm.LensID) {
    case 1: // GR Lens A12 50mm F2.5 Macro
      strcpy(model, "GXR A12 50mm");
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
      ilm.FocalType = LIBRAW_FT_PRIME_LENS;
      break;
    case 2:
      strcpy(model, "GXR S10");
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_1div1p7INCH;
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
      break;
    case 3: // Ricoh Lens P10 28-300mm F3.5-5.6 VC
      strcpy(model, "GXR P10");
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_1div2p3INCH;
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
      break;
    case 5: // GR Lens A12 28mm F2.5
      strcpy(model, "GXR A12 28mm");
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
      ilm.FocalType = LIBRAW_FT_PRIME_LENS;
      break;
    case 6: // Ricoh Lens A16 24-85mm F3.5-5.5
      strcpy(model, "GXR A16");
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
      break;
    case 8: // Ricoh Mount A12 (Leica M lenses)
      strcpy(model, "GXR Mount A12");
      ilm.CameraFormat = LIBRAW_FORMAT_APSC;
      ilm.CameraMount = LIBRAW_MOUNT_Leica_M;
      ilm.LensID = LIBRAW_LENS_NOT_SET;
      break;
    }
  }

  strcpy(normalized_model, model);

  if (makeIs(LIBRAW_CAMERAMAKER_Canon))
  {
    if (unique_id)
    {
      if ((unique_id != CanonID_EOS_D2000C) &&
          (unique_id != CanonID_EOS_D6000C))
      {
        for (i = 0; i < int(sizeof unique / sizeof *unique); i++)
        {
          if (unique_id == unique[i].id)
          {
            if (!strcmp(model, "EOS Ra")) {
              strcpy(normalized_model, model);
            } else {
              strcpy(model, unique[i].t_model);
              strcpy(normalized_model, unique[i].t_model);
            }
            break;
          }
        }
      }
    }
    else
    {
      if ((dng_version) &&
          (strlen(imgdata.color.UniqueCameraModel) > 6) &&
          strncmp(imgdata.color.UniqueCameraModel+6, "PowerShot", 9))
      {
        if (!strcmp(model, "EOS Ra")) {
          ilm.CamID = unique_id = CanonID_EOS_R;
          strcpy(normalized_model, model);
          // try_xml = 1; // ??
        } else {
          for (i = 0; i < int(sizeof unique / sizeof *unique); i++)
          {
            if (!strcmp(unique[i].t_model, imgdata.color.UniqueCameraModel+6))
            {
              ilm.CamID = unique_id = unique[i].id;
              strcpy(normalized_model, unique[i].t_model);
              try_xml = 1;
              break;
            }
          }
        }
      }
    }
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
  {
    for (i = 0; i < int(sizeof fujialias / sizeof *fujialias); i++)
    {
      if (fujialias[i][0] == '@')
      {
        orig = fujialias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, fujialias[i]))
      {
        strcpy(normalized_model, orig);
        break;
      }
    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_Hasselblad)) {
    parseHassyModel();
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Mamiya))
  {
    for (i = 0; i < int(sizeof phase1alias / sizeof *phase1alias); i++)
    { // re-badged Phase One backs
      if (phase1alias[i][0] == '@') orig = phase1alias[i] + 1;
      else if (!strcmp(model, phase1alias[i]))
      {
        setMakeFromIndex(LIBRAW_CAMERAMAKER_PhaseOne);
        strcpy(normalized_model, orig);
        break;
      }
    }
    for (i = 0; i < int(sizeof leafalias / sizeof *leafalias); i++)
    { // re-badged Leaf backs
      if (leafalias[i][0] == '@') orig = leafalias[i] + 1;
      else if (!strcmp(model, leafalias[i]))
      {
        setMakeFromIndex(LIBRAW_CAMERAMAKER_Leaf);
        strcpy(normalized_model, orig);
        break;
      }
    }

    /* repeating, because make for some Mamiya re-badged Leaf backs is set to
     * Leaf */
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Leaf))
  {
    for (i = 0; i < int(sizeof leafalias / sizeof *leafalias); i++)
    { // re-badged Leaf backs
      if (leafalias[i][0] == '@')
      {
        orig = leafalias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, leafalias[i]))
      { // maybe to change regular "make" to "Mamiya" too
        strcpy(normalized_model, orig);
        break;
      }
    }
    if ((ps = strchr(normalized_model, '(')))
      *ps = 0;
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Minolta) ||
           makeIs(LIBRAW_CAMERAMAKER_Konica))
  {
    if (makeIs(LIBRAW_CAMERAMAKER_Konica) && !strncasecmp(model, "DiMAGE", 6))
    {
      setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
      strcpy(make, "Minolta");
    }
    else
    {
      for (i = 0;
           i<int(sizeof KonicaMinolta_aliases / sizeof *KonicaMinolta_aliases);
           i++)
      {
        if (KonicaMinolta_aliases[i][0] == '@')
        {
          orig = KonicaMinolta_aliases[i] + 1;
          if (!strcmp(model, orig))
          {
            setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
            strcpy(make, "Minolta");
            break;
          }
        }
        else if (!strcasecmp(model, KonicaMinolta_aliases[i]))
        {
          setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
          strcpy(make, "Minolta");
          strcpy(normalized_model, orig);
          break;
        }
      }
    }
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Nikon))
  {
    for (i = 0; i < int(sizeof nikonalias / sizeof *nikonalias); i++)
    {
      if (nikonalias[i][0] == '@')
      {
        orig = nikonalias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, nikonalias[i]))
      {
        strcpy(normalized_model, orig);
        break;
      }
    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_Olympus)) {
    for (i = 0; i < int(sizeof olyalias / sizeof *olyalias); i++) {
      if (olyalias[i][0] == '@') {
        orig = olyalias[i] + 1;
        if (!strcmp(model, orig)) break;
      } else if (!strcmp(model, olyalias[i])) {
        strcpy(normalized_model, orig);
        break;
      }
    }

    if (!OlyID) {
      if (!strcmp(normalized_model, "C-740UZ")) {
        ilm.CamID = OlyID = unique_id = OlyID_C_740UZ;

      } else if (!strcmp(normalized_model, "C-770UZ")) {
        ilm.CamID = OlyID = unique_id = OlyID_C_770UZ;
      }
    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_Panasonic) ||
             makeIs(LIBRAW_CAMERAMAKER_Leica) ||
             makeIs(LIBRAW_CAMERAMAKER_Yuneec))
  {
    for (i = 0; i < int(sizeof panalias / sizeof *panalias); i++)
    {
      if (panalias[i][0] == '@')
      {
        orig = panalias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, panalias[i]))
      {
        setMakeFromIndex(LIBRAW_CAMERAMAKER_Panasonic);
        strcpy(normalized_model, orig);
        break;
      }
    }
  } else if (makeIs(LIBRAW_CAMERAMAKER_Pentax)) {
    if (!unique_id) {
      if (!strcmp(model, "Optio S")) {
        ilm.CamID = unique_id = PentaxID_Optio_S;
      } else if (!strcmp(model, "Optio S V1.01")) {
        ilm.CamID = unique_id = PentaxID_Optio_S_V101;
      } else if (!strcmp(model, "Optio S4")) {
        ilm.CamID = unique_id = PentaxID_Optio_S4;
      } else if (!strcmp(model, "Optio 750Z")) {
        ilm.CamID = unique_id = PentaxID_Optio_750Z;
      } else if (!strcmp(model, "Optio 33WR")) {
        ilm.CamID = unique_id = PentaxID_Optio_33WR;
      }
    }

    for (i = 0;
    i < int(sizeof SamsungPentax_aliases / sizeof *SamsungPentax_aliases);
    i++) {
      if (SamsungPentax_aliases[i][0] == '@') {
        orig = SamsungPentax_aliases[i] + 1;
        if (!strcmp(model, orig)) break;
      } else if (!strcmp(model, SamsungPentax_aliases[i])) {
        strcpy(normalized_model, orig);
        break;
      }
    }
    if (!strncmp(model, "GR", 2)) {
	  setMakeFromIndex(LIBRAW_CAMERAMAKER_Ricoh);
      strcpy(make, "Ricoh");
    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_PhaseOne))
  {
    for (i = 0; i < int(sizeof phase1alias / sizeof *phase1alias); i++)
    {
      if (phase1alias[i][0] == '@')
      {
        orig = phase1alias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, phase1alias[i]))
      {
        strcpy(normalized_model, orig);
        break;
      }
    }
	if (strstr(imPhaseOne.FirmwareString, "Achromatic"))
	{
		colors = 1;
		filters = 0;
	}
  }
  else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
  {
    j = 0;
    if (strstr(model, "WB5500") || strstr(model, "HZ50W"))
    {
      strcpy(model, "WB5500");
      j++;
    }
    else if (strstr(model, "WB5000") || strstr(model, "HZ25W"))
    {
      strcpy(model, "WB5000");
      j++;
    }
    else if (strstr(model, "WB550") || strstr(model, "HZ15W"))
    {
      strcpy(model, "WB550");
      j++;
    }
    else if (strstr(model, "WB500") || strstr(model, "HZ10W"))
    {
      strcpy(model, "WB500");
      j++;
    }
    if (j)
    {
      strcpy(normalized_model, model);
    }
    else
    {
      for (i = 0; i < int(sizeof samsungalias / sizeof *samsungalias); i++)
      {
        if (samsungalias[i][0] == '@')
        {
          orig = samsungalias[i] + 1;
          if (!strcmp(model, orig)) break;
        }
        else if (!strcmp(model, samsungalias[i]))
        {
          strcpy(normalized_model, orig);
          break;
        }
      }
    }

  } else if (makeIs(LIBRAW_CAMERAMAKER_Sony)) {
    if (unique_id)
    {
      for (i = 0; i < int(sizeof sonique / sizeof *sonique); i++)
      {
        if (unique_id == sonique[i].id)
        {
          if (!strcmp(make, "Sony"))
            strcpy(model, sonique[i].t_model);
          strcpy(normalized_model, sonique[i].t_model);
          break;
        }
      }
    }

/*
char pgroup9050 = '-';
char cameratype[16] = "unknown";
switch (imSony.CameraType) {
  case LIBRAW_SONY_DSC:  strcpy(cameratype, "DSC");  break;
  case LIBRAW_SONY_DSLR: strcpy(cameratype, "DSLR"); break;
  case LIBRAW_SONY_NEX:  strcpy(cameratype, "NEX");  break;
  case LIBRAW_SONY_SLT:  strcpy(cameratype, "SLT");  break;
  case LIBRAW_SONY_ILCE: strcpy(cameratype, "ILCE"); break;
  case LIBRAW_SONY_ILCA: strcpy(cameratype, "ILCA"); break;
}
switch (imSony.group9050) {
 case LIBRAW_SONY_Tag9050a:
  pgroup9050 = 'a';
  break;
 case LIBRAW_SONY_Tag9050b:
  pgroup9050 = 'b';
  break;
 case LIBRAW_SONY_Tag9050c:
  pgroup9050 = 'c';
  break;
 case LIBRAW_SONY_Tag9050d:
  pgroup9050 = 'd';
  break;
}
printf("catchme\t%s\t%s\t%s\t9050%c\t%d\t%d\n",
	model, normalized_model, cameratype, pgroup9050, imSony.len_group9050, imSony.FileFormat);
*/

  } else if (makeIs(LIBRAW_CAMERAMAKER_Kodak)) {
    remove_caseSubstr (normalized_model, (char *)"EasyShare");
    remove_caseSubstr (normalized_model, (char *)"ZOOM");
    removeExcessiveSpaces (normalized_model);
    for (i = 0; i < int(sizeof kodakalias / sizeof *kodakalias); i++)
    {
      if (kodakalias[i][0] == '@')
      {
        orig = kodakalias[i] + 1;
        if (!strcmp(model, orig)) break;
      }
      else if (!strcmp(model, kodakalias[i]))
      {
        strcpy(normalized_model, orig);
        break;
      }
    }

    if (strstr(model, "DC25"))
    {
      strcpy(model, "DC25");
      strcpy(normalized_model, model);
    }
    else if (!strcmp(model, "40"))
    {
      strcpy(model, "DC40");
      strcpy(normalized_model, model);
    }
    else if (strstr(model, "DC50"))
    {
      strcpy(model, "DC50");
      strcpy(normalized_model, model);
    }
    else if (strstr(model, "DC120"))
    {
      strcpy(model, "DC120");
      strcpy(normalized_model, model);
    }

    for (i = 0; i < int(sizeof KodakMonochrome / sizeof *KodakMonochrome); i++)
    {
      if (!strncmp(model, KodakMonochrome[i], strlen(KodakMonochrome[i])))
      {
        colors = 1;
        filters = 0;
      }
    }
  }

  if (ilm.body[0])
  {
    if ((ilm.CameraMount != LIBRAW_MOUNT_Hasselblad_V) &&
        !strncmp(ilm.body, "Hasselblad ", 11) &&
        ((ilm.body[11] == 'C') || (ilm.body[11] == '2') ||
         (ilm.body[11] == '5') || (ilm.body[11] == '9')))
    {
      ilm.CameraFormat = LIBRAW_FORMAT_66;
      ilm.CameraMount = LIBRAW_MOUNT_Hasselblad_V;
    }
    else if (!strncmp(ilm.body, "XF", 2) || !strncmp(ilm.body, "645DF", 5))
    {
      ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
      ilm.CameraFormat = LIBRAW_FORMAT_645;
    }
    else if (!strncmp(ilm.body, "Sinarcam", 2))
    {
      ilm.CameraMount = LIBRAW_MOUNT_LF;
      ilm.CameraFormat = LIBRAW_FORMAT_LF;
      strcat(ilm.body, " shutter system");
    }
  }

  if (makeIs(LIBRAW_CAMERAMAKER_Kodak))
  {
    if (((ilm.CameraMount == LIBRAW_MOUNT_DigitalBack) ||
         (ilm.CameraMount == LIBRAW_MOUNT_Unknown)) &&
        !strncmp(model2, "PB645", 5))
    {
      ilm.CameraFormat = LIBRAW_FORMAT_645;
      if (model2[5] == 'C')
      {
        ilm.CameraMount = LIBRAW_MOUNT_Contax645;
        strcpy(ilm.body, "Contax 645");
      }
      else if (model2[5] == 'H')
      {
        ilm.CameraMount = LIBRAW_MOUNT_Hasselblad_H;
        strcpy(ilm.body, "Hasselblad H1/H2");
      }
      else if (model2[5] == 'M')
      {
        ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
        strcpy(ilm.body, "Mamiya 645");
      }

    } else if (!strncasecmp(model, "PIXPRO S-1", 10)) {
      ilm.CameraFormat = LIBRAW_FORMAT_FT;
    } else if (!strncasecmp(model, "PIXPRO ", 7)) {
      ilm.CameraFormat = LIBRAW_FORMAT_1div2p3INCH;
    }
  }

  else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
  {
    if (!strncmp(normalized_model, "DBP", 3))
    {
      strcpy(ilm.body, "Fujifilm GX680");
    }
  }

  if ((ilm.CameraFormat == LIBRAW_FORMAT_Unknown) ||
      (ilm.CameraMount == LIBRAW_MOUNT_Unknown) ||
      (ilm.CameraMount == LIBRAW_MOUNT_IL_UM))
  {

    if (makeIs(LIBRAW_CAMERAMAKER_Canon))
    {
      if (strncmp(normalized_model, "EOS", 3))
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Nikon))
    {
      if (normalized_model[0] == 'D')
      {
        ilm.CameraMount = LIBRAW_MOUNT_Nikon_F;
      }
      else
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Panasonic))
    {
      if (!strncmp(normalized_model, "DC-S", 4))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_FF;
        ilm.CameraMount = LIBRAW_MOUNT_LPS_L;
      }
      else if (!strncmp(normalized_model, "DMC-L1", 6) ||
               !strncmp(normalized_model, "DMC-L10", 7))
      {
        ilm.CameraFormat = ilm.CameraMount = LIBRAW_FORMAT_FT;
      }
      else if (!strncmp(normalized_model + 2, "-G", 2) ||
               !strncmp(normalized_model + 3, "-G", 2))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_FT;
        ilm.CameraMount = LIBRAW_MOUNT_mFT;
      }
      else
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
        ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
        if (!strncmp(normalized_model + 2, "-LX100", 6) || // DC-LX100M2
            !strncmp(normalized_model + 3, "-LX100", 6))
        { // DMC-LX100
          ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_FT;
        }
        else if (!strncmp(normalized_model, "DMC-CM1", 7))
        {
          ilm.FocalType = LIBRAW_FT_PRIME_LENS;
        }
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
    {
      if (!strncmp(normalized_model, "GFX ", 4))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_CROP645;
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_GF;
      }
      else if (!strncmp(normalized_model, "X-", 2) &&
               (strncmp(normalized_model, "X-S1", 4)  ||
               !strncmp(normalized_model, "X-S10", 5) ||
               !strncmp(normalized_model, "X-S20", 5)))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_X;
      }
      else if (((normalized_model[0] == 'S') && // S2Pro, S3Pro, S5Pro
                (normalized_model[2] == 'P')) ||
               !strncasecmp(normalized_model, "IS Pro", 6))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        ilm.CameraMount = LIBRAW_MOUNT_Nikon_F;
      }
      else if (!strncmp(normalized_model, "DBP", 3))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_68;
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_GX;
      }
      else
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
    {
      if ((normalized_model[0] == 'N') &&
          (normalized_model[1] == 'X')) // DNG converters delete makernotes
      {
        if ((normalized_model[2] == 'F') && (normalized_model[3] == '1'))
        {
          ilm.CameraMount = LIBRAW_MOUNT_Samsung_NX_M;
          ilm.CameraFormat = LIBRAW_FORMAT_1INCH;
        }
        else
        {
          ilm.CameraMount = LIBRAW_MOUNT_Samsung_NX;
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        }
      }
      else
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Kodak))
    {
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      for (i = 0; i < int(sizeof Kodak_mounts / sizeof *Kodak_mounts); i++)
      {
        if (!strncmp(normalized_model, Kodak_mounts[i].Kmodel,
                     strlen(Kodak_mounts[i].Kmodel)))
        {
          ilm.CameraMount = Kodak_mounts[i].mount;
          break;
        }
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Minolta))
    {
      if (!strcmp(normalized_model, "DG-5D") ||
          !strcmp(normalized_model, "DG-7D"))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        ilm.CameraMount = LIBRAW_MOUNT_Minolta_A;
      }
      else if (!strncasecmp(normalized_model, "DiMAGE", 6))
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Casio) ||
             makeIs(LIBRAW_CAMERAMAKER_Creative))
    {
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Sigma))
    {
      if (!strncmp(normalized_model, "fp", 2))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_FF;
        ilm.CameraMount = LIBRAW_MOUNT_LPS_L;
      }
      else if (!strncasecmp(normalized_model, "SD", 2))
      {
        ilm.CameraMount = LIBRAW_MOUNT_Sigma_X3F;
        if (!strcmp(normalized_model, "SD1") || (normalized_model[4] == 'M'))
        {
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaMerrill;
        }
        else if (normalized_model[11] == 'H')
        { // 'sd Quattro H'
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSH;
        }
        else if (normalized_model[4] == 'Q')
        { // 'sd Quattro'
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        }
        else
        {
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSC;
        }
      }
      else if (!strncasecmp(normalized_model, "DP", 2))
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
        if (normalized_model[4] == 'M')
        {
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaMerrill;
        }
        else if (normalized_model[4] == 'Q')
        {
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
        }
        else
        {
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSC;
        }
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Konica))
    {
      if (!strncmp(model, "KD-", 3))
      { // Konica KD-400Z, KD-510Z
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Mamiya))
    {
      if (!strncmp(normalized_model, "ZD", 2))
      {
        ilm.CameraFormat = LIBRAW_FORMAT_3648;
        ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Sony))
    {
      if (!strncmp(normalized_model, "XCD-", 4))
      {
        ilm.CameraMount = LIBRAW_MOUNT_C;
      }
      else if (!strncmp(normalized_model, "DSC-V3", 6) ||
               !strncmp(normalized_model, "DSC-F828", 8))
      {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
        imSony.CameraType = LIBRAW_SONY_DSC;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Polaroid) &&
             !strncmp(normalized_model, "x530", 4))
    {
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Rollei) &&
             !strncmp(normalized_model, "d530flex", 8))
    {
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Pentax) &&
             !strncmp(normalized_model, "Optio", 5)) {
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Epson) &&
             !strncmp(normalized_model, "R-D1", 4))
    {
      ilm.CameraMount = LIBRAW_MOUNT_Leica_M;
      ilm.CameraFormat = LIBRAW_FORMAT_APSC;
    }
  }

  if ((ilm.LensMount == LIBRAW_MOUNT_Canon_RF) &&
      (ilm.LensID == 61182)                    &&
      (imCanon.RF_lensID != 0))                {
    ilm.LensID = imCanon.RF_lensID;
  }

  if (ilm.LensMount == LIBRAW_MOUNT_Unknown)
  {
    if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
    {
      if ((imgdata.lens.Lens[0] == 'N') &&
          (imgdata.lens.Lens[1] == 'X')) // same DNG problem
      {
        if (imgdata.lens.Lens[2] == '-')
        {
          ilm.LensMount = LIBRAW_MOUNT_Samsung_NX_M;
          ilm.LensFormat = LIBRAW_FORMAT_1INCH;
        }
        else
        {
          ilm.LensMount = LIBRAW_MOUNT_Samsung_NX;
          ilm.LensFormat = LIBRAW_FORMAT_APSC;
        }
      }
    }
  }

  if ((ilm.LensID == LIBRAW_LENS_NOT_SET) &&
      xmpdata &&
      (strlen(xmpdata) > 9))
  {
    if (makeIs(LIBRAW_CAMERAMAKER_Canon) &&
        try_xml &&
        (ps = strstr(xmpdata, "LensID=\"")))
    {
      ilm.LensID = atoi(ps + 8);
      if (ilm.LensID == 61182)
      {
        ilm.LensMount = ilm.CameraMount = LIBRAW_MOUNT_Canon_RF;
      }
    }
    else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
    {
      if ((ilm.LensMount == LIBRAW_MOUNT_Samsung_NX) &&
          (ps = strstr(xmpdata, "LensID=\"(")))
      {
        ilm.LensID = atoi(ps + 9);
      }
    }
  }

  if (ilm.CameraMount == LIBRAW_MOUNT_FixedLens)
  {
    if (ilm.CameraFormat)
      ilm.LensFormat = ilm.CameraFormat;
    if (ilm.LensMount == LIBRAW_MOUNT_Unknown)
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
  }

  if ((ilm.CameraMount != LIBRAW_MOUNT_Unknown) &&
      (ilm.CameraMount != LIBRAW_MOUNT_FixedLens) &&
      (ilm.LensMount == LIBRAW_MOUNT_Unknown)) {
    if (ilm.LensID == LIBRAW_LENS_NOT_SET) ilm.LensMount = LIBRAW_MOUNT_IL_UM;
    else ilm.LensMount = ilm.CameraMount;
    }
}

void LibRaw::SetStandardIlluminants (unsigned makerIdx, const char* /*normModel*/) {
//  int i = -1;
  int c;
  if (!icWBC[LIBRAW_WBI_Ill_A][0] &&
      !icWBC[LIBRAW_WBI_D65][0]) {
    if (makerIdx == LIBRAW_CAMERAMAKER_Olympus ) {
		for (int i = 0; i < 64 && icWBCCTC[i][0]; i++) {
        if (icWBCCTC[i][0] == 3000)
          FORC4 icWBC[LIBRAW_WBI_Ill_A][c] = int(icWBCCTC[i][c+1]);
        else if (icWBCCTC[i][0] == 6600)
          FORC4 icWBC[LIBRAW_WBI_D65][c] = int(icWBCCTC[i][c+1]);
      }
    }
  }

  if (!icWBC[LIBRAW_WBI_Ill_A][0] && icWBC[LIBRAW_WBI_Tungsten][0])
    FORC4 icWBC[LIBRAW_WBI_Ill_A][c] = icWBC[LIBRAW_WBI_Tungsten][c];

  if (!icWBC[LIBRAW_WBI_D65][0] && icWBC[LIBRAW_WBI_FL_N][0])
    FORC4 icWBC[LIBRAW_WBI_D65][c] = icWBC[LIBRAW_WBI_FL_N][c];

  return;
}
