1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Lens database for the conversion of Nikon lens data to readable lens names
4  * Copyright (C) 2005-2014 Robert Rottmerhusen <lens_id@rottmerhusen.com>
5  *
6  * Copyright (C) 2004-2021 Exiv2 authors
7  * This program is part of the Exiv2 distribution.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
22  */
23 // *****************************************************************************
24 // included header files
25 #include "types.hpp"
26 #include "nikonmn_int.hpp"
27 #include "value.hpp"
28 #include "image.hpp"
29 #include "tags_int.hpp"
30 #include "makernote_int.hpp"
31 #include "error.hpp"
32 #include "i18n.h"                // NLS support.
33 
34 // + standard includes
35 #include <string>
36 #include <sstream>
37 #include <iomanip>
38 #include <cassert>
39 #include <cstring>
40 #include <math.h> //for log, pow, abs
41 
42 // *****************************************************************************
43 // class member definitions
44 namespace Exiv2 {
45     namespace Internal {
46 
47     //! OffOn, multiple tags
48     extern const TagDetails nikonOffOn[] = {
49         {  0, N_("Off") },
50         {  1, N_("On")  }
51     };
52 
53     //! Off, Low, Normal, High, multiple tags
54     extern const TagDetails nikonOlnh[] = {
55         {  0, N_("Off")    },
56         {  1, N_("Low")    },
57         {  3, N_("Normal") },
58         {  5, N_("High")   }
59     };
60 
61     //! Off, Low, Normal, High, multiple tags
62     extern const TagDetails nikonActiveDLighning[] = {
63         {     0, N_("Off")        },
64         {     1, N_("Low")        },
65         {     3, N_("Normal")     },
66         {     5, N_("High")       },
67         {     7, N_("Extra High") },
68         { 65535, N_("Auto")       }
69     };
70 
71     //! Focus area for Nikon cameras.
72     extern const char * const nikonFocusarea[] = {
73         N_("Single area"),
74         N_("Dynamic area"),
75         N_("Dynamic area, closest subject"),
76         N_("Group dynamic"),
77         N_("Single area (wide)"),
78         N_("Dynamic area (wide)")
79     };
80 
81     // Roger Larsson: My guess is that focuspoints will follow autofocus sensor
82     // module. Note that relative size and position will vary depending on if
83     // "wide" or not
84     //! Focus points for Nikon cameras, used for Nikon 1 and Nikon 3 makernotes.
85     extern const char * const nikonFocuspoints[] = {
86         N_("Center"),
87         N_("Top"),
88         N_("Bottom"),
89         N_("Left"),
90         N_("Right"),
91         N_("Upper-left"),
92         N_("Upper-right"),
93         N_("Lower-left"),
94         N_("Lower-right"),
95         N_("Left-most"),
96         N_("Right-most")
97     };
98 
99     //! Shutter Modes (credits to exiftool)
100     extern const TagDetails nikonShutterModes[] = {
101         { 0, "Mechanical" },
102         { 16, "Electronic" },
103         { 48, "Electronic Front Curtain" },
104         { 64, "Electronic (Movie)" },
105         { 80, "Auto (Mechanical)" },
106         { 81, "Auto (Electronic Front Curtain)" }
107     };
108 
109     //! FlashComp, tag 0x0012
110     extern const TagDetails nikonFlashComp[] = {
111         // From the PHP JPEG Metadata Toolkit
112         { 0x06, "+1.0 EV" },
113         { 0x04, "+0.7 EV" },
114         { 0x03, "+0.5 EV" },
115         { 0x02, "+0.3 EV" },
116         { 0x00,  "0.0 EV" },
117         { 0xfe, "-0.3 EV" },
118         { 0xfd, "-0.5 EV" },
119         { 0xfc, "-0.7 EV" },
120         { 0xfa, "-1.0 EV" },
121         { 0xf8, "-1.3 EV" },
122         { 0xf7, "-1.5 EV" },
123         { 0xf6, "-1.7 EV" },
124         { 0xf4, "-2.0 EV" },
125         { 0xf2, "-2.3 EV" },
126         { 0xf1, "-2.5 EV" },
127         { 0xf0, "-2.7 EV" },
128         { 0xee, "-3.0 EV" }
129     };
130 
131     //! ColorSpace, tag 0x001e
132     extern const TagDetails nikonColorSpace[] = {
133         { 1, N_("sRGB")      },
134         { 2, N_("Adobe RGB") }
135     };
136 
137     //! FlashMode, tag 0x0087
138     extern const TagDetails nikonFlashMode[] = {
139         { 0, N_("Did not fire")         },
140         { 1, N_("Fire, manual")         },
141         { 7, N_("Fire, external")       },
142         { 8, N_("Fire, commander mode") },
143         { 9, N_("Fire, TTL mode")       }
144     };
145 
146     //! ShootingMode, tag 0x0089
147     extern const TagDetailsBitmask nikonShootingMode[] = {
148         { 0x0001, N_("Continuous")               },
149         { 0x0002, N_("Delay")                    },
150         { 0x0004, N_("PC Control")               },
151         { 0x0008, N_("Self-timer")               },
152         { 0x0010, N_("Exposure Bracketing")      },
153         { 0x0020, N_("Auto ISO")                 },
154         { 0x0040, N_("White-Balance Bracketing") },
155         { 0x0080, N_("IR Control")               },
156         { 0x0100, N_("D-Lighting Bracketing")    }
157     };
158 
159     //! ShootingMode D70, tag 0x0089
160     extern const TagDetailsBitmask nikonShootingModeD70[] = {
161         { 0x0001, N_("Continuous")               },
162         { 0x0002, N_("Delay")                    },
163         { 0x0004, N_("PC control")               },
164         { 0x0010, N_("Exposure bracketing")      },
165         { 0x0020, N_("Unused LE-NR slowdown") },
166         { 0x0040, N_("White balance bracketing") },
167         { 0x0080, N_("IR control")               }
168     };
169 
170     //! AutoBracketRelease, tag 0x008a
171     extern const TagDetails nikonAutoBracketRelease[] = {
172         { 0, N_("None")           },
173         { 1, N_("Auto release")   },
174         { 2, N_("Manual release") }
175     };
176 
177     //! NEFCompression, tag 0x0093
178     extern const TagDetails nikonNefCompression[] = {
179         {  1, N_("Lossy (type 1)") },
180         {  2, N_("Uncompressed")   },
181         {  3, N_("Lossless")       },
182         {  4, N_("Lossy (type 2)") }
183     };
184 
185     //! RetouchHistory, tag 0x009e
186     extern const TagDetails nikonRetouchHistory[] = {
187         {  0, N_("None")          },
188         {  3, N_("B & W")         },
189         {  4, N_("Sepia")         },
190         {  5, N_("Trim")          },
191         {  6, N_("Small picture") },
192         {  7, N_("D-Lighting")    },
193         {  8, N_("Red eye")       },
194         {  9, N_("Cyanotype")     },
195         { 10, N_("Sky light")     },
196         { 11, N_("Warm tone")     },
197         { 12, N_("Color custom")  },
198         { 13, N_("Image overlay") }
199     };
200 
201     //! HighISONoiseReduction, tag 0x00b1
202     extern const TagDetails nikonHighISONoiseReduction[] = {
203         { 0, N_("Off")     },
204         { 1, N_("Minimal") },
205         { 2, N_("Low")     },
206         { 4, N_("Normal")  },
207         { 6, N_("High")    }
208     };
209 
210     // Nikon1 MakerNote Tag Info
211     const TagInfo Nikon1MakerNote::tagInfo_[] = {
212         TagInfo(0x0001, "Version", N_("Version"),
213                 N_("Nikon Makernote version"),
214                 nikon1Id, makerTags, undefined, -1, printValue),
215         TagInfo(0x0002, "ISOSpeed", N_("ISO Speed"),
216                 N_("ISO speed setting"),
217                 nikon1Id, makerTags, unsignedShort, -1, print0x0002),
218         TagInfo(0x0003, "ColorMode", N_("Color Mode"),
219                 N_("Color mode"),
220                 nikon1Id, makerTags, asciiString, -1, printValue),
221         TagInfo(0x0004, "Quality", N_("Quality"),
222                 N_("Image quality setting"),
223                 nikon1Id, makerTags, asciiString, -1, printValue),
224         TagInfo(0x0005, "WhiteBalance", N_("White Balance"),
225                 N_("White balance"),
226                 nikon1Id, makerTags, asciiString, -1, printValue),
227         TagInfo(0x0006, "Sharpening", N_("Sharpening"),
228                 N_("Image sharpening setting"),
229                 nikon1Id, makerTags, asciiString, -1, printValue),
230         TagInfo(0x0007, "Focus", N_("Focus"),
231                 N_("Focus mode"),
232                 nikon1Id, makerTags, asciiString, -1, print0x0007),
233         TagInfo(0x0008, "FlashSetting", N_("Flash Setting"),
234                 N_("Flash setting"),
235                 nikon1Id, makerTags, asciiString, -1, printValue),
236         TagInfo(0x000a, "0x000a", "0x000a",
237                 N_("Unknown"),
238                 nikon1Id, makerTags, unsignedRational, -1, printValue),
239         TagInfo(0x000f, "ISOSelection", N_("ISO Selection"),
240                 N_("ISO selection"),
241                 nikon1Id, makerTags, asciiString, -1, printValue),
242         TagInfo(0x0010, "DataDump", N_("Data Dump"),
243                 N_("Data dump"),
244                 nikon1Id, makerTags, undefined, -1, printValue),
245         TagInfo(0x0080, "ImageAdjustment", N_("Image Adjustment"),
246                 N_("Image adjustment setting"),
247                 nikon1Id, makerTags, asciiString, -1, printValue),
248         TagInfo(0x0082, "AuxiliaryLens", N_("Auxiliary Lens"),
249                 N_("Auxiliary lens (adapter)"),
250                 nikon1Id, makerTags, asciiString, -1, printValue),
251         TagInfo(0x0085, "FocusDistance", N_("Focus Distance"),
252                 N_("Manual focus distance"),
253                 nikon1Id, makerTags, unsignedRational, -1, print0x0085),
254         TagInfo(0x0086, "DigitalZoom", N_("Digital Zoom"),
255                 N_("Digital zoom setting"),
256                 nikon1Id, makerTags, unsignedRational, -1, print0x0086),
257         TagInfo(0x0088, "AFFocusPos", N_("AF Focus Position"),
258                 N_("AF focus position information"),
259                 nikon1Id, makerTags, undefined, -1, print0x0088),
260         // End of list marker
261         TagInfo(0xffff, "(UnknownNikon1MnTag)", "(UnknownNikon1MnTag)",
262                 N_("Unknown Nikon1MakerNote tag"),
263                 nikon1Id, makerTags, asciiString, -1, printValue)
264     };
265 
tagList()266     const TagInfo* Nikon1MakerNote::tagList()
267     {
268         return tagInfo_;
269     }
270 
print0x0002(std::ostream & os,const Value & value,const ExifData *)271     std::ostream& Nikon1MakerNote::print0x0002(std::ostream& os,
272                                                const Value& value,
273                                                const ExifData*)
274     {
275         if (value.count() > 1) {
276             os << value.toLong(1);
277         }
278         else {
279             os << "(" << value << ")";
280         }
281         return os;
282     }
283 
getKeyString(const std::string & key,const ExifData * metadata)284     static std::string getKeyString(const std::string& key,const ExifData* metadata)
285     {
286         std::string result;
287         if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
288             result = metadata->findKey(ExifKey(key))->toString();
289         }
290         return result;
291     }
292 
293 
printBarValue(std::ostream & os,const Value & value,const ExifData * exifData)294     std::ostream& Nikon1MakerNote::printBarValue(std::ostream& os,
295                                                const Value& value,
296                                                const ExifData* exifData)
297     {
298         if ( ! exifData ) return os << "undefined" ;
299 
300         if ( value.count() >= 9 ) {
301             ByteOrder bo = getKeyString("Exif.MakerNote.ByteOrder",exifData) == "MM" ? bigEndian : littleEndian;
302             byte      p[4];
303             for ( int n = 0 ; n < 4 ; n++ ) p[n] = (byte)value.toLong(6+n);
304             os << getLong(p, bo);
305         }
306 
307         return os;
308     }
309 
print0x0007(std::ostream & os,const Value & value,const ExifData *)310     std::ostream& Nikon1MakerNote::print0x0007(std::ostream& os,
311                                                const Value& value,
312                                                const ExifData*)
313     {
314         std::string focus = value.toString();
315         if      (focus == "AF-C  ") os << _("Continuous autofocus");
316         else if (focus == "AF-S  ") os << _("Single autofocus");
317         else if (focus == "AF-A  ") os << _("Automatic");
318         else                      os << "(" << value << ")";
319         return os;
320     }
321 
print0x0085(std::ostream & os,const Value & value,const ExifData *)322     std::ostream& Nikon1MakerNote::print0x0085(std::ostream& os,
323                                                const Value& value,
324                                                const ExifData*)
325     {
326         std::ios::fmtflags f( os.flags() );
327         Rational distance = value.toRational();
328         if (distance.first == 0) {
329             os << _("Unknown");
330         }
331         else if (distance.second != 0) {
332             std::ostringstream oss;
333             oss.copyfmt(os);
334             os << std::fixed << std::setprecision(2)
335                << (float)distance.first / distance.second
336                << " m";
337             os.copyfmt(oss);
338         }
339         else {
340             os << "(" << value << ")";
341         }
342         os.flags(f);
343         return os;
344     }
345 
print0x0086(std::ostream & os,const Value & value,const ExifData *)346     std::ostream& Nikon1MakerNote::print0x0086(std::ostream& os,
347                                                const Value& value,
348                                                const ExifData*)
349     {
350         std::ios::fmtflags f( os.flags() );
351         Rational zoom = value.toRational();
352         if (zoom.first == 0) {
353             os << _("Not used");
354         }
355         else if (zoom.second != 0) {
356             std::ostringstream oss;
357             oss.copyfmt(os);
358             os << std::fixed << std::setprecision(1)
359                << (float)zoom.first / zoom.second
360                << "x";
361             os.copyfmt(oss);
362         }
363         else {
364             os << "(" << value << ")";
365         }
366         os.flags(f);
367         return os;
368     }
369 
print0x0088(std::ostream & os,const Value & value,const ExifData *)370     std::ostream& Nikon1MakerNote::print0x0088(std::ostream& os,
371                                                const Value& value,
372                                                const ExifData*)
373     {
374         if (value.count() >= 1) {
375             const unsigned long focusArea = value.toLong(0);
376             if (focusArea >= EXV_COUNTOF(nikonFocusarea)) {
377                 os << "Invalid value";
378             } else {
379                 os << nikonFocusarea[focusArea];
380             }
381         }
382         if (value.count() >= 2) {
383             os << "; ";
384             unsigned long focusPoint = value.toLong(1);
385 
386             switch (focusPoint) {
387             // Could use array nikonFokuspoints
388             case 0:
389             case 1:
390             case 2:
391             case 3:
392             case 4:
393                 os << nikonFocuspoints[focusPoint];
394                 break;
395             default:
396                 os << value;
397                 if (focusPoint < sizeof(nikonFocuspoints)/sizeof(nikonFocuspoints[0]))
398                     os << " " << _("guess") << " " << nikonFocuspoints[focusPoint];
399                 break;
400             }
401         }
402         if (value.count() >= 3) {
403             unsigned long focusPointsUsed1 = value.toLong(2);
404             unsigned long focusPointsUsed2 = value.toLong(3);
405 
406             if (focusPointsUsed1 != 0 && focusPointsUsed2 != 0)
407             {
408                 os << "; [";
409 
410                 if (focusPointsUsed1 & 1)
411                     os << nikonFocuspoints[0] << " ";
412                 if (focusPointsUsed1 & 2)
413                     os << nikonFocuspoints[1] << " ";
414                 if (focusPointsUsed1 & 4)
415                     os << nikonFocuspoints[2] << " ";
416                 if (focusPointsUsed1 & 8)
417                     os << nikonFocuspoints[3] << " ";
418                 if (focusPointsUsed1 & 16)
419                     os << nikonFocuspoints[4] << " ";
420                 if (focusPointsUsed1 & 32)
421                     os << nikonFocuspoints[5] << " ";
422                 if (focusPointsUsed1 & 64)
423                     os << nikonFocuspoints[6] << " ";
424                 if (focusPointsUsed1 & 128)
425                     os << nikonFocuspoints[7] << " ";
426 
427                 if (focusPointsUsed2 & 1)
428                     os << nikonFocuspoints[8] << " ";
429                 if (focusPointsUsed2 & 2)
430                     os << nikonFocuspoints[9] << " ";
431                 if (focusPointsUsed2 & 4)
432                     os << nikonFocuspoints[10] << " ";
433 
434                 os << "]";
435             }
436         }
437         else {
438             os << "(" << value << ")";
439         }
440         return os;
441     }
442 
443     //! Quality, tag 0x0003
444     extern const TagDetails nikon2Quality[] = {
445         { 1, N_("VGA Basic")   },
446         { 2, N_("VGA Normal")  },
447         { 3, N_("VGA Fine")    },
448         { 4, N_("SXGA Basic")  },
449         { 5, N_("SXGA Normal") },
450         { 6, N_("SXGA Fine")   }
451     };
452 
453     //! ColorMode, tag 0x0004
454     extern const TagDetails nikon2ColorMode[] = {
455         { 1, N_("Color")      },
456         { 2, N_("Monochrome") }
457     };
458 
459     //! ImageAdjustment, tag 0x0005
460     extern const TagDetails nikon2ImageAdjustment[] = {
461         { 0, N_("Normal")    },
462         { 1, N_("Bright+")   },
463         { 2, N_("Bright-")   },
464         { 3, N_("Contrast+") },
465         { 4, N_("Contrast-") }
466     };
467 
468     //! ISOSpeed, tag 0x0006
469     extern const TagDetails nikon2IsoSpeed[] = {
470         { 0, "80"  },
471         { 2, "160" },
472         { 4, "320" },
473         { 5, "100" }
474     };
475 
476     //! WhiteBalance, tag 0x0007
477     extern const TagDetails nikon2WhiteBalance[] = {
478         { 0, N_("Auto")         },
479         { 1, N_("Preset")       },
480         { 2, N_("Daylight")     },
481         { 3, N_("Incandescent") },
482         { 4, N_("Fluorescent")  },
483         { 5, N_("Cloudy")       },
484         { 6, N_("Speedlight")   }
485     };
486 
487     // Nikon2 MakerNote Tag Info
488     const TagInfo Nikon2MakerNote::tagInfo_[] = {
489         TagInfo(0x0002, "0x0002", "0x0002",
490                 N_("Unknown"),
491                 nikon2Id, makerTags, asciiString, -1, printValue),
492         TagInfo(0x0003, "Quality", N_("Quality"),
493                 N_("Image quality setting"),
494                 nikon2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikon2Quality)),
495         TagInfo(0x0004, "ColorMode", N_("Color Mode"),
496                 N_("Color mode"),
497                 nikon2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikon2ColorMode)),
498         TagInfo(0x0005, "ImageAdjustment", N_("Image Adjustment"),
499                 N_("Image adjustment setting"),
500                 nikon2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikon2ImageAdjustment)),
501         TagInfo(0x0006, "ISOSpeed", N_("ISO Speed"),
502                 N_("ISO speed setting"),
503                 nikon2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikon2IsoSpeed)),
504         TagInfo(0x0007, "WhiteBalance", N_("White Balance"),
505                 N_("White balance"),
506                 nikon2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikon2WhiteBalance)),
507         TagInfo(0x0008, "Focus", N_("Focus Mode"),
508                 N_("Focus mode"),
509                 nikon2Id, makerTags, unsignedRational, -1, printValue),
510         TagInfo(0x0009, "0x0009", "0x0009",
511                 N_("Unknown"),
512                 nikon2Id, makerTags, asciiString, -1, printValue),
513         TagInfo(0x000a, "DigitalZoom", N_("Digital Zoom"),
514                 N_("Digital zoom setting"),
515                 nikon2Id, makerTags, unsignedRational, -1, print0x000a),
516         TagInfo(0x000b, "AuxiliaryLens", N_("Auxiliary Lens"),
517                 N_("Auxiliary lens (adapter)"),
518                 nikon2Id, makerTags, unsignedShort, -1, printValue),
519         TagInfo(0x0f00, "0x0f00", "0x0f00",
520                 N_("Unknown"),
521                 nikon2Id, makerTags, unsignedLong, -1, printValue),
522         // End of list marker
523         TagInfo(0xffff, "(UnknownNikon2MnTag)", "(UnknownNikon2MnTag)",
524                 N_("Unknown Nikon2MakerNote tag"),
525                 nikon2Id, makerTags, asciiString, -1, printValue)
526     };
527 
tagList()528     const TagInfo* Nikon2MakerNote::tagList()
529     {
530         return tagInfo_;
531     }
532 
print0x000a(std::ostream & os,const Value & value,const ExifData *)533     std::ostream& Nikon2MakerNote::print0x000a(std::ostream& os,
534                                                const Value& value,
535                                                const ExifData*)
536     {
537         std::ios::fmtflags f( os.flags() );
538         Rational zoom = value.toRational();
539         if (zoom.first == 0) {
540             os << _("Not used");
541         }
542         else if (zoom.second != 0) {
543             std::ostringstream oss;
544             oss.copyfmt(os);
545             os << std::fixed << std::setprecision(1)
546                << (float)zoom.first / zoom.second
547                << "x";
548             os.copyfmt(oss);
549         }
550         else {
551             os << "(" << value << ")";
552         }
553         os.flags(f);
554         return os;
555     }
556 
557     // Nikon3 MakerNote Tag Info
558     const TagInfo Nikon3MakerNote::tagInfo_[] = {
559         TagInfo(0x0001, "Version", N_("Version"), N_("Nikon Makernote version"), nikon3Id, makerTags, undefined, -1, printExifVersion),
560         TagInfo(0x0002, "ISOSpeed", N_("ISO Speed"), N_("ISO speed setting"), nikon3Id, makerTags, unsignedShort, -1, print0x0002),
561         TagInfo(0x0003, "ColorMode", N_("Color Mode"), N_("Color mode"), nikon3Id, makerTags, asciiString, -1, printValue),
562         TagInfo(0x0004, "Quality", N_("Quality"), N_("Image quality setting"), nikon3Id, makerTags, asciiString, -1, printValue),
563         TagInfo(0x0005, "WhiteBalance", N_("White Balance"), N_("White balance"), nikon3Id, makerTags, asciiString, -1, printValue),
564         TagInfo(0x0006, "Sharpening", N_("Sharpening"), N_("Image sharpening setting"), nikon3Id, makerTags, asciiString, -1, printValue),
565         TagInfo(0x0007, "Focus", N_("Focus"), N_("Focus mode"), nikon3Id, makerTags, asciiString, -1, print0x0007),
566         TagInfo(0x0008, "FlashSetting", N_("Flash Setting"), N_("Flash setting"), nikon3Id, makerTags, asciiString, -1, printValue),
567         TagInfo(0x0009, "FlashDevice", N_("Flash Device"), N_("Flash device"), nikon3Id, makerTags, asciiString, -1, printValue),
568         TagInfo(0x000a, "0x000a", "0x000a", N_("Unknown"), nikon3Id, makerTags, unsignedRational, -1, printValue),
569         TagInfo(0x000b, "WhiteBalanceBias", N_("White Balance Bias"), N_("White balance bias"), nikon3Id, makerTags, signedShort, -1, printValue),
570         TagInfo(0x000c, "WB_RBLevels", N_("WB RB Levels"), N_("WB RB levels"), nikon3Id, makerTags, unsignedRational, -1, printValue),
571         TagInfo(0x000d, "ProgramShift", N_("Program Shift"), N_("Program shift"), nikon3Id, makerTags, undefined, -1, EXV_PRINT_TAG(nikonFlashComp)),
572         TagInfo(0x000e, "ExposureDiff", N_("Exposure Difference"), N_("Exposure difference"), nikon3Id, makerTags, undefined, -1, EXV_PRINT_TAG(nikonFlashComp)),
573         TagInfo(0x000f, "ISOSelection", N_("ISO Selection"), N_("ISO selection"), nikon3Id, makerTags, asciiString, -1, printValue),
574         TagInfo(0x0010, "DataDump", N_("Data Dump"), N_("Data dump"), nikon3Id, makerTags, undefined, -1, printValue),
575         TagInfo(0x0011, "Preview", N_("Pointer to a preview image"), N_("Offset to an IFD containing a preview image"), nikon3Id, makerTags, undefined, -1, printValue),
576         TagInfo(0x0012, "FlashComp", N_("Flash Comp"), N_("Flash compensation setting"), nikon3Id, makerTags, undefined, -1, EXV_PRINT_TAG(nikonFlashComp)),
577         TagInfo(0x0013, "ISOSettings", N_("ISO Settings"), N_("ISO setting"), nikon3Id, makerTags, unsignedShort, -1, print0x0002), // use 0x0002 print fct
578         TagInfo(0x0016, "ImageBoundary", N_("Image Boundary"), N_("Image boundary"), nikon3Id, makerTags, unsignedShort, -1, printValue),
579         TagInfo(0x0017, "FlashExposureComp", "Flash Exposure Comp", N_("Flash exposure comp"), nikon3Id, makerTags, undefined, -1, EXV_PRINT_TAG(nikonFlashComp)),
580         TagInfo(0x0018, "FlashBracketComp", N_("Flash Bracket Comp"), N_("Flash bracket compensation applied"), nikon3Id, makerTags, undefined, -1, EXV_PRINT_TAG(nikonFlashComp)), // use 0x0012 print fct
581         TagInfo(0x0019, "ExposureBracketComp", N_("Exposure Bracket Comp"), N_("AE bracket compensation applied"), nikon3Id, makerTags, signedRational, -1, printValue),
582         TagInfo(0x001a, "ImageProcessing", N_("Image Processing"), N_("Image processing"), nikon3Id, makerTags, asciiString, -1, printValue),
583         TagInfo(0x001b, "CropHiSpeed", N_("Crop High Speed"), N_("Crop high speed"), nikon3Id, makerTags, unsignedShort, -1, printValue),
584         TagInfo(0x001c, "ExposureTuning", N_("Exposure Tuning"), N_("Exposure tuning"), nikon3Id, makerTags, unsignedShort, -1, printValue),
585         TagInfo(0x001d, "SerialNumber", N_("Serial Number"), N_("Serial Number"), nikon3Id, makerTags, asciiString, -1, printValue),
586         TagInfo(0x001e, "ColorSpace", N_("Color Space"), N_("Color space"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonColorSpace)),
587         TagInfo(0x001f, "VRInfo", N_("VR Info"), N_("VR info"), nikon3Id, makerTags, undefined, -1, printValue),
588         TagInfo(0x0020, "ImageAuthentication", N_("Image Authentication"), N_("Image authentication"), nikon3Id, makerTags, unsignedByte, -1, EXV_PRINT_TAG(nikonOffOn)),
589         TagInfo(0x0022, "ActiveDLighting", N_("ActiveD-Lighting"), N_("ActiveD-lighting"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonActiveDLighning)),
590         TagInfo(0x0023, "PictureControl", N_("Picture Control"), N_(" Picture control"), nikon3Id, makerTags, undefined, -1, printValue),
591         TagInfo(0x0024, "WorldTime", N_("World Time"), N_("World time"), nikon3Id, makerTags, undefined, -1, printValue),
592         TagInfo(0x0025, "ISOInfo", N_("ISO Info"), N_("ISO info"), nikon3Id, makerTags, undefined, -1, printValue),
593         TagInfo(0x002a, "VignetteControl", N_("Vignette Control"), N_("Vignette control"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonOlnh)),
594         TagInfo(0x0034, "ShutterMode", N_("Shutter Mode"), N_("Shutter mode"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonShutterModes)),
595         TagInfo(0x0037, "MechanicalShutterCount", N_("Mechanical Shutter Count"), N_("Mechanical shutter count"), nikon3Id, makerTags, unsignedLong, -1, printValue),
596         TagInfo(0x0080, "ImageAdjustment", N_("Image Adjustment"), N_("Image adjustment setting"), nikon3Id, makerTags, asciiString, -1, printValue),
597         TagInfo(0x0081, "ToneComp", N_("Tone Compensation"), N_("Tone compensation"), nikon3Id, makerTags, asciiString, -1, printValue),
598         TagInfo(0x0082, "AuxiliaryLens", N_("Auxiliary Lens"), N_("Auxiliary lens (adapter)"), nikon3Id, makerTags, asciiString, -1, printValue),
599         TagInfo(0x0083, "LensType", N_("Lens Type"), N_("Lens type"), nikon3Id, makerTags, unsignedByte, -1, print0x0083),
600         TagInfo(0x0084, "Lens", N_("Lens"), N_("Lens"), nikon3Id, makerTags, unsignedRational, -1, print0x0084),
601         TagInfo(0x0085, "FocusDistance", N_("Focus Distance"), N_("Manual focus distance"), nikon3Id, makerTags, unsignedRational, -1, print0x0085),
602         TagInfo(0x0086, "DigitalZoom", N_("Digital Zoom"), N_("Digital zoom setting"), nikon3Id, makerTags, unsignedRational, -1, print0x0086),
603         TagInfo(0x0087, "FlashMode", N_("Flash Mode"), N_("Mode of flash used"), nikon3Id, makerTags, unsignedByte, -1, EXV_PRINT_TAG(nikonFlashMode)),
604         TagInfo(0x0088, "AFInfo", N_("AF Info"), N_("AF info"), nikon3Id, makerTags, undefined, -1, printValue),
605         TagInfo(0x0089, "ShootingMode", N_("Shooting Mode"), N_("Shooting mode"), nikon3Id, makerTags, unsignedShort, -1, print0x0089),
606         TagInfo(0x008a, "AutoBracketRelease", N_("Auto Bracket Release"), N_("Auto bracket release"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonAutoBracketRelease)),
607         TagInfo(0x008b, "LensFStops", N_("Lens FStops"), N_("Lens FStops"), nikon3Id, makerTags, undefined, -1, print0x008b),
608         TagInfo(0x008c, "ContrastCurve", N_("Contrast Curve"), N_("Contrast curve"), nikon3Id, makerTags, undefined, -1, printValue),
609         TagInfo(0x008d, "ColorHue", N_("Color Hue"), N_("Color hue"), nikon3Id, makerTags, asciiString, -1, printValue),
610         TagInfo(0x008f, "SceneMode", N_("Scene Mode"), N_("Scene mode"), nikon3Id, makerTags, asciiString, -1, printValue),
611         TagInfo(0x0090, "LightSource", N_("Light Source"), N_("Light source"), nikon3Id, makerTags, asciiString, -1, printValue),
612         TagInfo(0x0091, "ShotInfo", "Shot Info", N_("Shot info"), nikon3Id, makerTags, undefined, -1, printValue),
613         TagInfo(0x0092, "HueAdjustment", N_("Hue Adjustment"), N_("Hue adjustment"), nikon3Id, makerTags, signedShort, -1, printValue),
614         TagInfo(0x0093, "NEFCompression", N_("NEF Compression"), N_("NEF compression"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonNefCompression)),
615         TagInfo(0x0094, "Saturation", N_("Saturation"), N_("Saturation"), nikon3Id, makerTags, signedShort, -1, printValue),
616         TagInfo(0x0095, "NoiseReduction", N_("Noise Reduction"), N_("Noise reduction"), nikon3Id, makerTags, asciiString, -1, printValue),
617         TagInfo(0x0096, "LinearizationTable", N_("Linearization Table"), N_("Linearization table"), nikon3Id, makerTags, undefined, -1, printValue),
618         TagInfo(0x0097, "ColorBalance", N_("Color Balance"), N_("Color balance"), nikon3Id, makerTags, undefined, -1, printValue),
619         TagInfo(0x0098, "LensData", N_("Lens Data"), N_("Lens data settings"), nikon3Id, makerTags, undefined, -1, printValue),
620         TagInfo(0x0099, "RawImageCenter", N_("Raw Image Center"), N_("Raw image center"), nikon3Id, makerTags, unsignedShort, -1, printValue),
621         TagInfo(0x009a, "SensorPixelSize", N_("Sensor Pixel Size"), N_("Sensor pixel size"), nikon3Id, makerTags, unsignedRational, -1, print0x009a),
622         TagInfo(0x009b, "0x009b", "0x009b", N_("Unknown"), nikon3Id, makerTags, unsignedShort, -1, printValue),
623         TagInfo(0x009c, "SceneAssist", N_("Scene Assist"), N_("Scene assist"), nikon3Id, makerTags, asciiString, -1, printValue),
624         TagInfo(0x009e, "RetouchHistory", N_("Retouch History"), N_("Retouch history"), nikon3Id, makerTags, unsignedShort, -1, print0x009e),
625         TagInfo(0x009f, "0x009f", "0x009f", N_("Unknown"), nikon3Id, makerTags, signedShort, -1, printValue),
626         TagInfo(0x00a0, "SerialNO", N_("Serial NO"), N_("Camera serial number, usually starts with \"NO= \""), nikon3Id, makerTags, asciiString, -1, printValue),
627         TagInfo(0x00a2, "ImageDataSize", N_("Image Data Size"), N_("Image data size"), nikon3Id, makerTags, unsignedLong, -1, printValue),
628         TagInfo(0x00a3, "0x00a3", "0x00a3", N_("Unknown"), nikon3Id, makerTags, unsignedByte, -1, printValue),
629         TagInfo(0x00a5, "ImageCount", N_("Image Count"), N_("Image count"), nikon3Id, makerTags, unsignedLong, -1, printValue),
630         TagInfo(0x00a6, "DeletedImageCount", N_("Deleted Image Count"), N_("Deleted image count"), nikon3Id, makerTags, unsignedLong, -1, printValue),
631         TagInfo(0x00a7, "ShutterCount", N_("Shutter Count"), N_("Number of shots taken by camera"), nikon3Id, makerTags, unsignedLong, -1, printValue),
632         TagInfo(0x00a8, "FlashInfo", "Flash Info", N_("Flash info"), nikon3Id, makerTags, undefined, -1, printValue),
633         TagInfo(0x00a9, "ImageOptimization", N_("Image Optimization"), N_("Image optimization"), nikon3Id, makerTags, asciiString, -1, printValue),
634         TagInfo(0x00aa, "Saturation", N_("Saturation"), N_("Saturation"), nikon3Id, makerTags, asciiString, -1, printValue),
635         TagInfo(0x00ab, "VariProgram", N_("Program Variation"), N_("Program variation"), nikon3Id, makerTags, asciiString, -1, printValue),
636         TagInfo(0x00ac, "ImageStabilization", N_("Image Stabilization"), N_("Image stabilization"), nikon3Id, makerTags, asciiString, -1, printValue),
637         TagInfo(0x00ad, "AFResponse", N_("AF Response"), N_("AF response"), nikon3Id, makerTags, asciiString, -1, printValue),
638         TagInfo(0x00b0, "MultiExposure", "Multi Exposure", N_("Multi exposure"), nikon3Id, makerTags, undefined, -1, printValue),
639         TagInfo(0x00b1, "HighISONoiseReduction", N_("High ISO Noise Reduction"), N_("High ISO Noise Reduction"), nikon3Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(nikonHighISONoiseReduction)),
640         TagInfo(0x00b3, "ToningEffect", "Toning Effect", N_("Toning effect"), nikon3Id, makerTags, asciiString, -1, printValue),
641         TagInfo(0x00b7, "AFInfo2", "AF Info 2", N_("AF info 2"), nikon3Id, makerTags, undefined, -1, printValue),
642         TagInfo(0x00b8, "FileInfo", "File Info", N_("File info"), nikon3Id, makerTags, undefined, -1, printValue),
643         TagInfo(0x00b9, "AFTune", "AF Tune", N_("AF tune"), nikon3Id, makerTags, undefined, -1, printValue),
644         TagInfo(0x00c3, "BarometerInfo", "Barometer Info", N_("Barometer Info"), nikon3Id, makerTags, signedLong, -1, Nikon1MakerNote::printBarValue),
645         TagInfo(0x0e00, "PrintIM", N_("Print IM"), N_("PrintIM information"), nikon3Id, makerTags, undefined, -1, printValue),
646         // TODO: Add Capture Data decoding implementation.
647         TagInfo(0x0e01, "CaptureData", N_("Capture Data"), N_("Capture data"), nikon3Id, makerTags, undefined, -1, printValue),
648         TagInfo(0x0e09, "CaptureVersion", N_("Capture Version"), N_("Capture version"), nikon3Id, makerTags, asciiString, -1, printValue),
649         // TODO: Add Capture Offsets decoding implementation.
650         TagInfo(0x0e0e, "CaptureOffsets", N_("Capture Offsets"), N_("Capture offsets"), nikon3Id, makerTags, undefined, -1, printValue),
651         TagInfo(0x0e10, "ScanIFD", "Scan IFD", N_("Scan IFD"), nikon3Id, makerTags, undefined, -1, printValue),
652         TagInfo(0x0e1d, "ICCProfile", "ICC Profile", N_("ICC profile"), nikon3Id, makerTags, undefined, -1, printValue),
653         TagInfo(0x0e1e, "CaptureOutput", "Capture Output", N_("Capture output"), nikon3Id, makerTags, undefined, -1, printValue),
654         // End of list marker
655         TagInfo(0xffff, "(UnknownNikon3MnTag)", "(UnknownNikon3MnTag)", N_("Unknown Nikon3MakerNote tag"), nikon3Id, makerTags, asciiString, -1, printValue)
656     };
657 
tagList()658     const TagInfo* Nikon3MakerNote::tagList()
659     {
660         return tagInfo_;
661     }
662 
663     //! YesNo, used for DaylightSavings, tag index 2
664     extern const TagDetails nikonYesNo[] = {
665         { 0, N_("No")    },
666         { 1, N_("Yes")   }
667     };
668 
669     //! DateDisplayFormat, tag index 3
670     extern const TagDetails nikonDateDisplayFormat[] = {
671         { 0, N_("Y/M/D") },
672         { 1, N_("M/D/Y") },
673         { 2, N_("D/M/Y") }
674     };
675 
676     //! OnOff
677     extern const TagDetails nikonOnOff[] = {
678         {  1, N_("On")  },
679         {  2, N_("Off") }
680     };
681 
682     // Nikon3 Vibration Reduction Tag Info
683     const TagInfo Nikon3MakerNote::tagInfoVr_[] = {
684         TagInfo(0, "Version", N_("Version"), N_("Version"), nikonVrId, makerTags, undefined, 4, printExifVersion),
685         TagInfo(4, "VibrationReduction", N_("Vibration Reduction"), N_("Vibration reduction"), nikonVrId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOnOff)),
686         // End of list marker
687         TagInfo(0xffff, "(UnknownNikonVrTag)", "(UnknownNikonVrTag)", N_("Unknown Nikon Vibration Reduction Tag"), nikonVrId, makerTags, unsignedByte, 1, printValue)
688     };
689 
tagListVr()690     const TagInfo* Nikon3MakerNote::tagListVr()
691     {
692         return tagInfoVr_;
693     }
694 
695     //! Adjust
696     extern const TagDetails nikonAdjust[] = {
697         {  0, N_("Default Settings") },
698         {  1, N_("Quick Adjust")     },
699         {  2, N_("Full Control")     }
700     };
701 
702     //! FilterEffect
703     extern const TagDetails nikonFilterEffect[] = {
704         { 0x80, N_("Off")    },
705         { 0x81, N_("Yellow") },
706         { 0x82, N_("Orange") },
707         { 0x83, N_("Red")    },
708         { 0x84, N_("Green")  },
709         { 0xff, N_("n/a")    }
710     };
711 
712     //! ToningEffect
713     extern const TagDetails nikonToningEffect[] = {
714         { 0x80, N_("B&W")         },
715         { 0x81, N_("Sepia")       },
716         { 0x82, N_("Cyanotype")   },
717         { 0x83, N_("Red")         },
718         { 0x84, N_("Yellow")      },
719         { 0x85, N_("Green")       },
720         { 0x86, N_("Blue-green")  },
721         { 0x87, N_("Blue")        },
722         { 0x88, N_("Purple-blue") },
723         { 0x89, N_("Red-purple")  },
724         { 0xff, N_("n/a")         }
725     };
726 
727     // Nikon3 Picture Control Tag Info
728     const TagInfo Nikon3MakerNote::tagInfoPc_[] = {
729         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonPcId, makerTags, undefined, 4, printExifVersion),
730         TagInfo( 4, "Name", N_("Name"), N_("Name"), nikonPcId, makerTags, asciiString, 20, printValue),
731         TagInfo(24, "Base", N_("Base"), N_("Base"), nikonPcId, makerTags, asciiString, 20, printValue),
732         TagInfo(48, "Adjust", N_("Adjust"), N_("Adjust"), nikonPcId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonAdjust)),
733         TagInfo(49, "QuickAdjust", N_("Quick Adjust"), N_("Quick adjust"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
734         TagInfo(50, "Sharpness", N_("Sharpness"), N_("Sharpness"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
735         TagInfo(51, "Contrast", N_("Contrast"), N_("Contrast"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
736         TagInfo(52, "Brightness", N_("Brightness"), N_("Brightness"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
737         TagInfo(53, "Saturation", N_("Saturation"), N_("Saturation"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
738         TagInfo(54, "HueAdjustment", N_("Hue Adjustment"), N_("Hue adjustment"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
739         TagInfo(55, "FilterEffect", N_("Filter Effect"), N_("Filter effect"), nikonPcId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFilterEffect)),
740         TagInfo(56, "ToningEffect", N_("Toning Effect"), N_("Toning effect"), nikonPcId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonToningEffect)),
741         TagInfo(57, "ToningSaturation", N_("Toning Saturation"), N_("Toning saturation"), nikonPcId, makerTags, unsignedByte, 1, printPictureControl),
742         // End of list marker
743         TagInfo(0xffff, "(UnknownNikonPcTag)", "(UnknownNikonPcTag)", N_("Unknown Nikon Picture Control Tag"), nikonPcId, makerTags, unsignedByte, 1, printValue)
744     };
745 
tagListPc()746     const TagInfo* Nikon3MakerNote::tagListPc()
747     {
748         return tagInfoPc_;
749     }
750 
751     //! OnOff
752     extern const TagDetails aftOnOff[] = {
753         {  0, N_("Off")  },
754         {  1, N_("On") },
755         {  2, N_("On") }
756     };
757 
758     // Nikon3 AF Fine Tune
759     const TagInfo Nikon3MakerNote::tagInfoAFT_[] = {
760         TagInfo(0, "AFFineTune", N_("AF Fine Tune"), N_("AF fine tune"), nikonAFTId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(aftOnOff)),
761         TagInfo(1, "AFFineTuneIndex", N_("AF Fine Tune Index"), N_("AF fine tune index"), nikonAFTId, makerTags, unsignedByte, 1, printValue),
762         TagInfo(2, "AFFineTuneAdj", N_("AF Fine Tune Adjustment"), N_("AF fine tune adjustment"), nikonAFTId, makerTags, signedByte, 1, printValue),
763         // End of list marker
764         TagInfo(0xffff, "(UnknownNikonAFTTag)", "(UnknownNikonAFTTag)", N_("Unknown Nikon AF Fine Tune Tag"), nikonAFTId, makerTags, unsignedByte, 1, printValue)
765     };
766 
tagListAFT()767     const TagInfo* Nikon3MakerNote::tagListAFT()
768     {
769         return tagInfoAFT_;
770     }
771 
772     // Nikon3 World Time Tag Info
773     const TagInfo Nikon3MakerNote::tagInfoWt_[] = {
774         TagInfo(0, "Timezone", N_("Timezone"), N_("Timezone"), nikonWtId, makerTags, signedShort, 1, printTimeZone),
775         TagInfo(2, "DaylightSavings", N_("Daylight Savings"), N_("Daylight savings"), nikonWtId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonYesNo)),
776         TagInfo(3, "DateDisplayFormat", N_("Date Display Format"), N_("Date display format"), nikonWtId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonDateDisplayFormat)),
777         // End of list marker
778         TagInfo(0xffff, "(UnknownNikonWtTag)", "(UnknownNikonWtTag)", N_("Unknown Nikon World Time Tag"), nikonWtId, makerTags, unsignedByte, 1, printValue)
779     };
780 
tagListWt()781     const TagInfo* Nikon3MakerNote::tagListWt()
782     {
783         return tagInfoWt_;
784     }
785 
786     //! ISOExpansion, tag index 4 and 10
787     extern const TagDetails nikonIsoExpansion[] = {
788         { 0x000, N_("Off")    },
789         { 0x101, N_("Hi 0.3") },
790         { 0x102, N_("Hi 0.5") },
791         { 0x103, N_("Hi 0.7") },
792         { 0x104, N_("Hi 1.0") },
793         { 0x105, N_("Hi 1.3") },
794         { 0x106, N_("Hi 1.5") },
795         { 0x107, N_("Hi 1.7") },
796         { 0x108, N_("Hi 2.0") },
797         { 0x109, N_("Hi 2.3") },
798         { 0x10a, N_("Hi 2.5") },
799         { 0x10b, N_("Hi 2.7") },
800         { 0x10c, N_("Hi 3.0") },
801         { 0x10d, N_("Hi 3.3") },
802         { 0x10e, N_("Hi 3.5") },
803         { 0x10f, N_("Hi 3.7") },
804         { 0x110, N_("Hi 4.0") },
805         { 0x111, N_("Hi 4.3") },
806         { 0x112, N_("Hi 4.5") },
807         { 0x113, N_("Hi 4.7") },
808         { 0x114, N_("Hi 5.0") },
809         { 0x201, N_("Lo 0.3") },
810         { 0x202, N_("Lo 0.5") },
811         { 0x203, N_("Lo 0.7") },
812         { 0x204, N_("Lo 1.0") }
813     };
814 
815     // Nikon3 ISO Info Tag Info
816     const TagInfo Nikon3MakerNote::tagInfoIi_[] = {
817         TagInfo( 0, "ISO", N_("ISO"), N_("ISO"), nikonIiId, makerTags, unsignedByte, 1, printIiIso),
818         TagInfo( 4, "ISOExpansion", N_("ISO Expansion"), N_("ISO expansion"), nikonIiId, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonIsoExpansion)),
819         TagInfo( 6, "ISO2", N_("ISO 2"), N_("ISO 2"), nikonIiId, makerTags, unsignedByte, 1, printIiIso),
820         TagInfo(10, "ISOExpansion2", N_("ISO Expansion 2"), N_("ISO expansion 2"), nikonIiId, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonIsoExpansion)),
821         // End of list marker
822         TagInfo(0xffff, "(UnknownNikonIiTag)", "(UnknownNikonIiTag)", N_("Unknown Nikon Iso Info Tag"), nikonIiId, makerTags, unsignedByte, 1, printValue)
823     };
824 
tagListIi()825     const TagInfo* Nikon3MakerNote::tagListIi()
826     {
827         return tagInfoIi_;
828     }
829 
830     //! AfAreaMode
831     extern const TagDetails nikonAfAreaMode[] = {
832         { 0, N_("Single Area")                   },
833         { 1, N_("Dynamic Area")                  },
834         { 2, N_("Dynamic Area, Closest Subject") },
835         { 3, N_("Group Dynamic")                 },
836         { 4, N_("Single Area (wide)")            },
837         { 5, N_("Dynamic Area (wide)")           }
838     };
839 
840     //! AfPoint
841     extern const TagDetails nikonAfPoint[] = {
842         { 0, N_("Center")      },
843         { 1, N_("Top")         },
844         { 2, N_("Bottom")      },
845         { 3, N_("Mid-left")    },
846         { 4, N_("Mid-right")   },
847         { 5, N_("Upper-left")  },
848         { 6, N_("Upper-right") },
849         { 7, N_("Lower-left")  },
850         { 8, N_("Lower-right") },
851         { 9, N_("Far Left")    },
852         { 10, N_("Far Right")  }
853     };
854 
855     //! AfPointsInFocus
856     extern const TagDetailsBitmask nikonAfPointsInFocus[] = {
857         { 0x0001, N_("Center")        },
858         { 0x0002, N_("Top")           },
859         { 0x0004, N_("Bottom")        },
860         { 0x0008, N_("Mid-left")      },
861         { 0x0010, N_("Mid-right")     },
862         { 0x0020, N_("Upper-left")    },
863         { 0x0040, N_("Upper-right")   },
864         { 0x0080, N_("Lower-left")    },
865         { 0x0100, N_("Lower-right")   },
866         { 0x0200, N_("Far Left")      },
867         { 0x0400, N_("Far Right")     }
868     };
869 
870     // Nikon3 Auto Focus Tag Info
871     const TagInfo Nikon3MakerNote::tagInfoAf_[] = {
872         TagInfo( 0, "AFAreaMode", N_("AF Area Mode"), N_("AF area mode"), nikonAfId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonAfAreaMode)),
873         TagInfo( 1, "AFPoint", N_("AF Point"), N_("AF point"), nikonAfId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonAfPoint)),
874         TagInfo( 2, "AFPointsInFocus", N_("AF Points In Focus"), N_("AF points in focus"), nikonAfId, makerTags, unsignedShort, 1, printAfPointsInFocus),
875         // End of list marker
876         TagInfo(0xffff, "(UnknownNikonAfTag)", "(UnknownNikonAfTag)", N_("Unknown Nikon Auto Focus Tag"), nikonAfId, makerTags, unsignedByte, 1, printValue)
877     };
878 
tagListAf()879     const TagInfo* Nikon3MakerNote::tagListAf()
880     {
881         return tagInfoAf_;
882     }
883 
884     //! PhaseDetectAF
885     extern const TagDetails nikonPhaseDetectAF[] = {
886         { 0, N_("Off")                },
887         { 1, N_("On (51-point)")      },
888         { 2, N_("On (11-point)")      },
889         { 3, N_("On (39-point)")      },
890         { 4, N_("On (73-point)")      },
891         { 5, N_("On (73-point, new)") },
892         { 6, N_("On (105-point)")     },
893         { 7, N_("On (153-point)")     },
894     };
895 
896     // Nikon3 Auto Focus Tag Info
897     const TagInfo Nikon3MakerNote::tagInfoAf21_[] = {
898         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonAf21Id, makerTags, undefined, 4, printExifVersion),
899         TagInfo(  4, "ContrastDetectAF", N_("Contrast Detect AF"), N_("Contrast detect AF"), nikonAf21Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOffOn)),
900         TagInfo(  5, "AFAreaMode", N_("AF Area Mode"), N_("AF area mode"), nikonAf21Id, makerTags, unsignedByte, 1, printValue),
901         TagInfo(  6, "PhaseDetectAF", N_("Phase Detect AF"), N_("Phase detect AF"), nikonAf21Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonPhaseDetectAF)),
902         TagInfo(  7, "PrimaryAFPoint", N_("Primary AF Point"), N_("Primary AF point"), nikonAf21Id, makerTags, unsignedByte, 1, printValue),
903         TagInfo(  8, "AFPointsUsed", N_("AF Points Used"), N_("AF points used"), nikonAf21Id, makerTags, unsignedByte, 7, printValue),
904         TagInfo( 16, "AFImageWidth", N_("AF Image Width"), N_("AF image width"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
905         TagInfo( 18, "AFImageHeight", N_("AF Image Height"), N_("AF image height"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
906         TagInfo( 20, "AFAreaXPosition", N_("AF Area X Position"), N_("AF area x position"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
907         TagInfo( 22, "AFAreaYPosition", N_("AF Area Y Position"), N_("AF area y position"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
908         TagInfo( 24, "AFAreaWidth", N_("AF Area Width"), N_("AF area width"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
909         TagInfo( 26, "AFAreaHeight", N_("AF Area Height"), N_("AF area height"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
910         TagInfo( 28, "ContrastDetectAFInFocus", N_("Contrast Detect AF In Focus"), N_("Contrast detect AF in focus"), nikonAf21Id, makerTags, unsignedShort, 1, printValue),
911         // End of list marker
912         TagInfo(0xffff, "(UnknownNikonAf2Tag)", "(UnknownNikonAf2Tag)", N_("Unknown Nikon Auto Focus 2 Tag"), nikonAf21Id, makerTags, unsignedByte, 1, printValue)
913     };
914 
tagListAf21()915     const TagInfo* Nikon3MakerNote::tagListAf21()
916     {
917         return tagInfoAf21_;
918     }
919 
920     // Nikon3 Auto Focus Tag Info Version 1.01 https://github.com/Exiv2/exiv2/pull/900
921     const TagInfo Nikon3MakerNote::tagInfoAf22_[] = {
922         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonAf22Id, makerTags, undefined, 4, printExifVersion),
923         TagInfo(  4, "ContrastDetectAF", N_("Contrast Detect AF"), N_("Contrast detect AF"), nikonAf22Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOffOn)),
924         TagInfo(  5, "AFAreaMode", N_("AF Area Mode"), N_("AF area mode"), nikonAf22Id, makerTags, unsignedByte, 1, printValue),
925         TagInfo(  6, "PhaseDetectAF", N_("Phase Detect AF"), N_("Phase detect AF"), nikonAf22Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonPhaseDetectAF)),
926         TagInfo(  7, "PrimaryAFPoint", N_("Primary AF Point"), N_("Primary AF point"), nikonAf22Id, makerTags, unsignedByte, 1, printValue),
927         TagInfo(  8, "AFPointsUsed", N_("AF Points Used"), N_("AF points used"), nikonAf22Id, makerTags, unsignedByte, 7, printValue),
928         TagInfo( 70, "AFImageWidth", N_("AF Image Width"), N_("AF image width"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
929         TagInfo( 72, "AFImageHeight", N_("AF Image Height"), N_("AF image height"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
930         TagInfo( 74, "AFAreaXPosition", N_("AF Area X Position"), N_("AF area x position"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
931         TagInfo( 76, "AFAreaYPosition", N_("AF Area Y Position"), N_("AF area y position"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
932         TagInfo( 78, "AFAreaWidth", N_("AF Area Width"), N_("AF area width"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
933         TagInfo( 80, "AFAreaHeight", N_("AF Area Height"), N_("AF area height"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
934         TagInfo( 82, "ContrastDetectAFInFocus", N_("Contrast Detect AF In Focus"), N_("Contrast detect AF in focus"), nikonAf22Id, makerTags, unsignedShort, 1, printValue),
935         // End of list marker
936         TagInfo(0xffff, "(UnknownNikonAf2Tag)", "(UnknownNikonAf2Tag)", N_("Unknown Nikon Auto Focus 2 Tag"), nikonAf22Id, makerTags, unsignedByte, 1, printValue)
937     };
938 
tagListAf22()939     const TagInfo* Nikon3MakerNote::tagListAf22()
940     {
941         return tagInfoAf22_;
942     }
943 
944 
945     // Nikon3 File Info Tag Info
946     const TagInfo Nikon3MakerNote::tagInfoFi_[] = {
947         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonFiId, makerTags, undefined, 4, printExifVersion),
948         TagInfo( 6, "DirectoryNumber", N_("Directory Number"), N_("Directory number"), nikonFiId, makerTags, unsignedShort, 1, printValue),
949         TagInfo( 8, "FileNumber", N_("File Number"), N_("File number"), nikonFiId, makerTags, unsignedShort, 1, printValue),
950         // End of list marker
951         TagInfo(0xffff, "(UnknownNikonFiTag)", "(UnknownNikonFiTag)", N_("Unknown Nikon File Info Tag"), nikonFiId, makerTags, unsignedByte, 1, printValue)
952     };
953 
tagListFi()954     const TagInfo* Nikon3MakerNote::tagListFi()
955     {
956         return tagInfoFi_;
957     }
958 
959     //! MultiExposureMode
960     extern const TagDetails nikonMultiExposureMode[] = {
961         { 0, N_("Off")               },
962         { 1, N_("Multiple Exposure") },
963         { 2, N_("Image Overlay")     }
964     };
965 
966     // Nikon3 Multi Exposure Tag Info
967     const TagInfo Nikon3MakerNote::tagInfoMe_[] = {
968         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonMeId, makerTags, undefined, 4, printExifVersion),
969         TagInfo(  4, "MultiExposureMode", N_("Multi Exposure Mode"), N_("Multi exposure mode"), nikonMeId, makerTags, unsignedLong, 1, EXV_PRINT_TAG(nikonMultiExposureMode)),
970         TagInfo(  8, "MultiExposureShots", N_("Multi Exposure Shots"), N_("Multi exposure shots"), nikonMeId, makerTags, unsignedLong, 1, printValue),
971         TagInfo( 12, "MultiExposureAutoGain", N_("Multi Exposure Auto Gain"), N_("Multi exposure auto gain"), nikonMeId, makerTags, unsignedLong, 1, EXV_PRINT_TAG(nikonOffOn)),
972         // End of list marker
973         TagInfo(0xffff, "(UnknownNikonMeTag)", "(UnknownNikonMeTag)", N_("Unknown Nikon Multi Exposure Tag"), nikonMeId, makerTags, unsignedByte, 1, printValue)
974     };
975 
tagListMe()976     const TagInfo* Nikon3MakerNote::tagListMe()
977     {
978         return tagInfoMe_;
979     }
980 
981     //! FlashSource
982     extern const TagDetails nikonFlashSource[] = {
983         { 0, N_("None")     },
984         { 1, N_("External") },
985         { 2, N_("Internal") }
986     };
987 
988     //! FlashFirmware
989     extern const TagDetails nikonFlashFirmware[] = {
990         { 0x0000, N_("n/a")                            },
991         { 0x0101, N_("1.01 (SB-800 or Metz 58 AF-1)")  },
992         { 0x0103, "1.03 (SB-800)"                  },
993         { 0x0201, "2.01 (SB-800)"                  },
994         { 0x0204, "2.04 (SB-600)"                  },
995         { 0x0205, "2.05 (SB-600)"                  },
996         { 0x0301, "3.01 (SU-800 Remote Commander)" },
997         { 0x0401, "4.01 (SB-400)"                  },
998         { 0x0402, "4.02 (SB-400)"                  },
999         { 0x0404, "4.04 (SB-400)"                  },
1000         { 0x0501, "5.01 (SB-900)"                  },
1001         { 0x0502, "5.02 (SB-900)"                  },
1002         { 0x0601, "6.01 (SB-700)"                  },
1003         { 0x0701, "7.01 (SB-910)"                  }
1004     };
1005 
1006     //! FlashGNDistance
1007     extern const TagDetails nikonFlashGNDistance[] = {
1008         {   0, N_("None")  },
1009         {   1, "0.1 m" },
1010         {   2, "0.2 m" },
1011         {   3, "0.3 m" },
1012         {   4, "0.4 m" },
1013         {   5, "0.5 m" },
1014         {   6, "0.6 m" },
1015         {   7, "0.7 m" },
1016         {   8, "0.8 m" },
1017         {   9, "0.9 m" },
1018         {  10, "1.0 m" },
1019         {  11, "1.1 m" },
1020         {  12, "1.3 m" },
1021         {  13, "1.4 m" },
1022         {  14, "1.6 m" },
1023         {  15, "1.8 m" },
1024         {  16, "2.0 m" },
1025         {  17, "2.2 m" },
1026         {  18, "2.5 m" },
1027         {  19, "2.8 m" },
1028         {  20, "3.2 m" },
1029         {  21, "3.6 m" },
1030         {  22, "4.0 m" },
1031         {  23, "4.5 m" },
1032         {  24, "5.0 m" },
1033         {  25, "5.6 m" },
1034         {  26, "6.3 m" },
1035         {  27, "7.1 m" },
1036         {  28, "8.0 m" },
1037         {  29, "9.0 m" },
1038         {  30, "10.0 m" },
1039         {  31, "11.0 m" },
1040         {  32, "13.0 m" },
1041         {  33, "14.0 m" },
1042         {  34, "16.0 m" },
1043         {  35, "18.0 m" },
1044         {  36, "20.0 m" },
1045         { 255, N_("n/a") }
1046     };
1047 
1048     //! FlashControlMode
1049     extern const TagDetails nikonFlashControlMode[] = {
1050         { 0, N_("Off")                    },
1051         { 1, N_("iTTL-BL")                },
1052         { 2, N_("iTTL")                   },
1053         { 3, N_("Auto Aperture")          },
1054         { 4, N_("Automatic")              },
1055         { 5, N_("GN (distance priority)") },
1056         { 6, N_("Manual")                 },
1057         { 7, N_("Repeating Flash")        },
1058         { 7, N_("Repeating Flash")        }     // To silence compiler warning
1059     };
1060 
1061     //! ExternalFlashFlags
1062     extern const TagDetails nikonExternalFlashFlags[] = {
1063         { 0, N_("Fired")              },
1064         { 2, N_("Bounce Flash")       },
1065         { 4, N_("Wide Flash Adapter") }
1066     };
1067 
1068     //! FlashColorFilter
1069     extern const TagDetails nikonFlashColorFilter[] = {
1070         {  0, N_("None")   },
1071         {  1, N_("FL-GL1") },
1072         {  2, N_("FL-GL2") },
1073         {  9, N_("TN-A1")  },
1074         { 10, N_("TN-A2")  },
1075         { 65, N_("Red")    },
1076         { 66, N_("Blue")   },
1077         { 67, N_("Yellow") },
1078         { 68, N_("Amber")  }
1079     };
1080 
1081     // Nikon3 Flash Info 1 Tag Info
1082     const TagInfo Nikon3MakerNote::tagInfoFl1_[] = {
1083         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonFl1Id, makerTags, undefined, 4, printExifVersion),
1084         TagInfo(  4, "FlashSource", N_("Flash Source"), N_("Flash source"), nikonFl1Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)),
1085         TagInfo(  5, "0x0005", N_("0x0005"), N_("Unknown"), nikonFl1Id, makerTags, unsignedByte, 1, printValue),
1086         TagInfo(  6, "ExternalFlashFirmware", N_("External Flash Firmware"), N_("External flash firmware"), nikonFl1Id, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonFlashFirmware)),
1087         TagInfo(  8, "ExternalFlashFlags", N_("External Flash Flags"), N_("External flash flags"), nikonFl1Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonExternalFlashFlags)),
1088         TagInfo( 11, "FlashFocalLength", N_("Flash Focal Length"), N_("Flash focal length"), nikonFl1Id, makerTags, unsignedByte, 1, printFlashFocalLength),
1089         TagInfo( 12, "RepeatingFlashRate", N_("Repeating Flash Rate"), N_("Repeating flash rate"), nikonFl1Id, makerTags, unsignedByte, 1, printRepeatingFlashRate),
1090         TagInfo( 13, "RepeatingFlashCount", N_("Repeating Flash Count"), N_("Repeating flash count"), nikonFl1Id, makerTags, unsignedByte, 1, printRepeatingFlashCount),
1091         TagInfo( 14, "FlashGNDistance", N_("Flash GN Distance"), N_("Flash GN distance"), nikonFl1Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)),
1092         TagInfo( 15, "FlashGroupAControlMode", N_("Flash Group A Control Mode"), N_("Flash group a control mode"), nikonFl1Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashControlMode)),
1093         TagInfo( 16, "FlashGroupBControlMode", N_("Flash Group B Control Mode"), N_("Flash group b control mode"), nikonFl1Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashControlMode)),
1094         // End of list marker
1095         TagInfo(0xffff, "(UnknownNikonMeTag)", "(UnknownNikonMeTag)", N_("Unknown Nikon Multi Exposure Tag"), nikonFl1Id, makerTags, unsignedByte, 1, printValue)
1096     };
1097 
tagListFl1()1098     const TagInfo* Nikon3MakerNote::tagListFl1()
1099     {
1100         return tagInfoFl1_;
1101     }
1102 
1103     // Nikon3 Flash Info 2 Tag Info
1104     const TagInfo Nikon3MakerNote::tagInfoFl2_[] = {
1105         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonFl2Id, makerTags, undefined, 4, printExifVersion),
1106         TagInfo(  4, "FlashSource", N_("Flash Source"), N_("Flash source"), nikonFl2Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)),
1107         TagInfo(  5, "0x0005", N_("0x0005"), N_("Unknown"), nikonFl2Id, makerTags, unsignedByte, 1, printValue),
1108         TagInfo(  6, "ExternalFlashFirmware", N_("External Flash Firmware"), N_("External flash firmware"), nikonFl2Id, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonFlashFirmware)),
1109         TagInfo(  8, "ExternalFlashFlags", N_("External Flash Flags"), N_("External flash flags"), nikonFl2Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonExternalFlashFlags)),
1110         TagInfo( 12, "FlashFocalLength", N_("Flash Focal Length"), N_("Flash focal length"), nikonFl2Id, makerTags, unsignedByte, 1, printFlashFocalLength),
1111         TagInfo( 13, "RepeatingFlashRate", N_("Repeating Flash Rate"), N_("Repeating flash rate"), nikonFl2Id, makerTags, unsignedByte, 1, printRepeatingFlashRate),
1112         TagInfo( 14, "RepeatingFlashCount", N_("Repeating Flash Count"), N_("Repeating flash count"), nikonFl2Id, makerTags, unsignedByte, 1, printRepeatingFlashCount),
1113         TagInfo( 15, "FlashGNDistance", N_("Flash GN Distance"), N_("Flash GN distance"), nikonFl2Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)),
1114         // End of list marker
1115         TagInfo(0xffff, "(UnknownNikonMeTag)", "(UnknownNikonMeTag)", N_("Unknown Nikon Multi Exposure Tag"), nikonFl2Id, makerTags, unsignedByte, 1, printValue)
1116     };
1117 
tagListFl2()1118     const TagInfo* Nikon3MakerNote::tagListFl2()
1119     {
1120         return tagInfoFl2_;
1121     }
1122 
1123     // Nikon3 Flash Info 3 Tag Info
1124     const TagInfo Nikon3MakerNote::tagInfoFl3_[] = {
1125         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonFl3Id, makerTags, undefined, 4, printExifVersion),
1126         TagInfo(  4, "FlashSource", N_("Flash Source"), N_("Flash source"), nikonFl3Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)),
1127         TagInfo(  6, "ExternalFlashFirmware", N_("External Flash Firmware"), N_("External flash firmware"), nikonFl3Id, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonFlashFirmware)),
1128         TagInfo(  8, "ExternalFlashFlags", N_("External Flash Flags"), N_("External flash flags"), nikonFl3Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonExternalFlashFlags)),
1129         TagInfo( 12, "FlashFocalLength", N_("Flash Focal Length"), N_("Flash focal length"), nikonFl3Id, makerTags, unsignedByte, 1, printFlashFocalLength),
1130         TagInfo( 13, "RepeatingFlashRate", N_("Repeating Flash Rate"), N_("Repeating flash rate"), nikonFl3Id, makerTags, unsignedByte, 1, printRepeatingFlashRate),
1131         TagInfo( 14, "RepeatingFlashCount", N_("Repeating Flash Count"), N_("Repeating flash count"), nikonFl3Id, makerTags, unsignedByte, 1, printRepeatingFlashCount),
1132         TagInfo( 15, "FlashGNDistance", N_("Flash GN Distance"), N_("Flash GN distance"), nikonFl3Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)),
1133         TagInfo( 16, "FlashColorFilter", N_("Flash Color Filter"), N_("Flash color filter"), nikonFl3Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashColorFilter)),
1134         // End of list marker
1135         TagInfo(0xffff, "(UnknownNikonMeTag)", "(UnknownNikonMeTag)", N_("Unknown Nikon Multi Exposure Tag"), nikonFl3Id, makerTags, unsignedByte, 1, printValue)
1136     };
1137 
tagListFl3()1138     const TagInfo* Nikon3MakerNote::tagListFl3()
1139     {
1140         return tagInfoFl3_;
1141     }
1142 
1143     // Nikon3 Shot Info D80 Tag Info
1144     const TagInfo Nikon3MakerNote::tagInfoSi1_[] = {
1145         TagInfo(   0, "Version", N_("Version"), N_("Version"), nikonSi1Id, makerTags, unsignedByte, 4, printExifVersion),
1146         TagInfo( 586, "ShutterCount", N_("Shutter Count"), N_("Shutter count"), nikonSi1Id, makerTags, unsignedLong, 1, printValue),
1147         // End of list marker
1148         TagInfo(0xffff, "(UnknownNikonSi1Tag)", "(UnknownNikonSi1Tag)", N_("Unknown Nikon Shot Info D80 Tag"), nikonSi1Id, makerTags, unsignedByte, 1, printValue)
1149     };
1150 
tagListSi1()1151     const TagInfo* Nikon3MakerNote::tagListSi1()
1152     {
1153         return tagInfoSi1_;
1154     }
1155 
1156     // Nikon3 Shot Info D40 Tag Info
1157     const TagInfo Nikon3MakerNote::tagInfoSi2_[] = {
1158         TagInfo(   0, "Version", N_("Version"), N_("Version"), nikonSi2Id, makerTags, unsignedByte, 4, printExifVersion),
1159         TagInfo( 582, "ShutterCount", N_("Shutter Count"), N_("Shutter count"), nikonSi2Id, makerTags, unsignedLong, 1, printValue),
1160         TagInfo( 738, "FlashLevel", N_("Flash Level"), N_("Flash level"), nikonSi2Id, makerTags, unsignedByte, 1, printValue),
1161         // End of list marker
1162         TagInfo(0xffff, "(UnknownNikonSi2Tag)", "(UnknownNikonSi2Tag)", N_("Unknown Nikon Shot Info D40 Tag"), nikonSi2Id, makerTags, unsignedByte, 1, printValue)
1163     };
1164 
tagListSi2()1165     const TagInfo* Nikon3MakerNote::tagListSi2()
1166     {
1167         return tagInfoSi2_;
1168     }
1169 
1170     //! AfFineTuneAdj D300 (a)
1171     extern const TagDetails nikonAfFineTuneAdj1[] = {
1172         { 0x0000, "0"   },
1173         { 0x003a, "+1"  },
1174         { 0x003b, "+2"  },
1175         { 0x003c, "+4"  },
1176         { 0x003d, "+8"  },
1177         { 0x003e, "+16" },
1178         { 0x00c2, "-16" },
1179         { 0x00c3, "-8"  },
1180         { 0x00c4, "-4"  },
1181         { 0x00c5, "-2"  },
1182         { 0x00c6, "-1"  },
1183         { 0x103e, "+17" },
1184         { 0x10c2, "-17" },
1185         { 0x203d, "+9"  },
1186         { 0x203e, "+18" },
1187         { 0x20c2, "-18" },
1188         { 0x20c3, "-9"  },
1189         { 0x303e, "+19" },
1190         { 0x30c2, "-19" },
1191         { 0x403c, "+5"  },
1192         { 0x403d, "+10" },
1193         { 0x403e, "+20" },
1194         { 0x40c2, "-20" },
1195         { 0x40c3, "-10" },
1196         { 0x40c4, "-5"  },
1197         { 0x603d, "+11" },
1198         { 0x60c3, "-11" },
1199         { 0x803b, "+3"  },
1200         { 0x803c, "+6"  },
1201         { 0x803d, "+12" },
1202         { 0x80c3, "-12" },
1203         { 0x80c4, "-6"  },
1204         { 0x80c5, "-3"  },
1205         { 0xa03d, "+13" },
1206         { 0xa0c3, "-13" },
1207         { 0xc03c, "+7"  },
1208         { 0xc03d, "+14" },
1209         { 0xc0c3, "-14" },
1210         { 0xc0c4, "-7"  },
1211         { 0xe03d, "+15" },
1212         { 0xe0c3, "-15" }
1213     };
1214 
1215     // Nikon3 Shot Info D300 (a) Tag Info
1216     const TagInfo Nikon3MakerNote::tagInfoSi3_[] = {
1217         TagInfo(   0, "Version", N_("Version"), N_("Version"), nikonSi3Id, makerTags, unsignedByte, 4, printExifVersion),
1218         TagInfo( 604, "ISO", N_("ISO"), N_("ISO"), nikonSi3Id, makerTags, unsignedByte, 1, printIiIso),
1219         TagInfo( 633, "ShutterCount", N_("Shutter Count"), N_("Shutter count"), nikonSi3Id, makerTags, unsignedLong, 1, printValue),
1220         TagInfo( 721, "AFFineTuneAdj", N_("AF Fine Tune Adj"), N_("AF fine tune adj"), nikonSi3Id, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonAfFineTuneAdj1)),
1221         // End of list marker
1222         TagInfo(0xffff, "(UnknownNikonSi3Tag)", "(UnknownNikonSi3Tag)", N_("Unknown Nikon Shot Info D300 (a) Tag"), nikonSi3Id, makerTags, unsignedByte, 1, printValue)
1223     };
1224 
tagListSi3()1225     const TagInfo* Nikon3MakerNote::tagListSi3()
1226     {
1227         return tagInfoSi3_;
1228     }
1229 
1230     //! AfFineTuneAdj D300 (b)
1231     extern const TagDetails nikonAfFineTuneAdj2[] = {
1232         { 0x0000, "0"   },
1233         { 0x043e, "+13" },
1234         { 0x04c2, "-13" },
1235         { 0x183d, "+7"  },
1236         { 0x183e, "+14" },
1237         { 0x18c2, "-14" },
1238         { 0x18c3, "-7"  },
1239         { 0x2c3e, "+15" },
1240         { 0x2cc2, "-15" },
1241         { 0x403a, "+1"  },
1242         { 0x403b, "+2"  },
1243         { 0x403c, "+4"  },
1244         { 0x403d, "+8"  },
1245         { 0x403e, "+16" },
1246         { 0x40c2, "-16" },
1247         { 0x40c3, "-8"  },
1248         { 0x40c4, "-4"  },
1249         { 0x40c5, "-2"  },
1250         { 0x40c6, "-1"  },
1251         { 0x543e, "+17" },
1252         { 0x54c2, "-17" },
1253         { 0x683d, "+9"  },
1254         { 0x683e, "+18" },
1255         { 0x68c2, "-18" },
1256         { 0x68c3, "-9"  },
1257         { 0x7c3e, "+19" },
1258         { 0x7cc2, "-19" },
1259         { 0x903c, "+5"  },
1260         { 0x903d, "+10" },
1261         { 0x903e, "+20" },
1262         { 0x90c2, "-20" },
1263         { 0x90c3, "-10" },
1264         { 0x90c4, "-5"  },
1265         { 0xb83d, "+11" },
1266         { 0xb8c3, "-11" },
1267         { 0xe03b, "+3"  },
1268         { 0xe03c, "+6"  },
1269         { 0xe03d, "+12" },
1270         { 0xe0c3, "-12" },
1271         { 0xe0c4, "-6"  },
1272         { 0xe0c5, "-3"  }
1273     };
1274 
1275     // Nikon3 Shot Info D300 (b) Tag Info
1276     const TagInfo Nikon3MakerNote::tagInfoSi4_[] = {
1277         TagInfo(   0, "Version", N_("Version"), N_("Version"), nikonSi4Id, makerTags, unsignedByte, 4, printExifVersion),
1278         TagInfo( 613, "ISO", N_("ISO"), N_("ISO"), nikonSi4Id, makerTags, unsignedByte, 1, printIiIso),
1279         TagInfo( 644, "ShutterCount", N_("Shutter Count"), N_("Shutter count"), nikonSi4Id, makerTags, unsignedLong, 1, printValue),
1280         TagInfo( 732, "AFFineTuneAdj", N_("AF Fine Tune Adj"), N_("AF fine tune adj"), nikonSi4Id, makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonAfFineTuneAdj2)),
1281         // End of list marker
1282         TagInfo(0xffff, "(UnknownNikonSi4Tag)", "(UnknownNikonSi4Tag)", N_("Unknown Nikon Shot Info D300 (b) Tag"), nikonSi4Id, makerTags, unsignedByte, 1, printValue)
1283     };
1284 
tagListSi4()1285     const TagInfo* Nikon3MakerNote::tagListSi4()
1286     {
1287         return tagInfoSi4_;
1288     }
1289 
1290     //! VibrationReduction
1291     extern const TagDetails nikonOffOn2[] = {
1292         { 0, N_("Off")    },
1293         { 1, N_("On (1)") },
1294         { 2, N_("On (2)") },
1295         { 3, N_("On (3)") }
1296     };
1297 
1298     //! VibrationReduction2
1299     extern const TagDetails nikonOffOn3[] = {
1300         { 0x0, N_("n/a") },
1301         { 0xc, N_("Off") },
1302         { 0xf, N_("On")  }
1303     };
1304 
1305     // Nikon3 Shot Info Tag Info
1306     const TagInfo Nikon3MakerNote::tagInfoSi5_[] = {
1307         TagInfo(   0, "Version", N_("Version"), N_("Version"), nikonSi5Id, makerTags, unsignedByte, 4, printExifVersion),
1308         TagInfo( 106, "ShutterCount1", N_("Shutter Count 1"), N_("Shutter count 1"), nikonSi5Id, makerTags, unsignedLong, 1, printValue),
1309         TagInfo( 110, "DeletedImageCount", N_("Deleted Image Count"), N_("Deleted image count"), nikonSi5Id, makerTags, unsignedLong, 1, printValue),
1310         TagInfo( 117, "VibrationReduction", N_("Vibration Reduction"), N_("Vibration reduction"), nikonSi5Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOffOn2)),
1311         TagInfo( 130, "VibrationReduction1", N_("Vibration Reduction 1"), N_("Vibration reduction 1"), nikonSi5Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOffOn)),
1312         TagInfo( 343, "ShutterCount2", N_("Shutter Count 2"), N_("Shutter count 2"), nikonSi5Id, makerTags, undefined, 2, printValue),
1313         TagInfo( 430, "VibrationReduction2", N_("Vibration Reduction 2"), N_("Vibration reduction 2"), nikonSi5Id, makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonOffOn3)),
1314         TagInfo( 598, "ISO", N_("ISO"), N_("ISO"), nikonSi5Id, makerTags, unsignedByte, 1, printIiIso),
1315         TagInfo( 630, "ShutterCount", N_("Shutter Count"), N_("Shutter count"), nikonSi5Id, makerTags, unsignedLong, 1, printValue),
1316         // End of list marker
1317         TagInfo(0xffff, "(UnknownNikonSi5Tag)", "(UnknownNikonSi5Tag)", N_("Unknown Nikon Shot Info Tag"), nikonSi5Id, makerTags, unsignedByte, 1, printValue)
1318     };
1319 
tagListSi5()1320     const TagInfo* Nikon3MakerNote::tagListSi5()
1321     {
1322         return tagInfoSi5_;
1323     }
1324 
1325     // Nikon3 Color Balance 1 Tag Info
1326     const TagInfo Nikon3MakerNote::tagInfoCb1_[] = {
1327         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonCb1Id, makerTags, undefined, 4, printExifVersion),
1328         TagInfo(36, "WB_RBGGLevels", N_("WB RBGG Levels"), N_("WB RBGG levels"), nikonCb1Id, makerTags, unsignedShort, 4, printValue),
1329         // End of list marker
1330         TagInfo(0xffff, "(UnknownNikonCb1Tag)", "(UnknownNikonCb1Tag)", N_("Unknown Nikon Color Balance 1 Tag"), nikonCb1Id, makerTags, unsignedShort, 1, printValue)
1331     };
1332 
tagListCb1()1333     const TagInfo* Nikon3MakerNote::tagListCb1()
1334     {
1335         return tagInfoCb1_;
1336     }
1337 
1338     // Nikon3 Color Balance 2 Tag Info
1339     const TagInfo Nikon3MakerNote::tagInfoCb2_[] = {
1340         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonCb2Id, makerTags, undefined, 4, printExifVersion),
1341         TagInfo( 5, "WB_RGGBLevels", N_("WB RGGB Levels"), N_("WB RGGB levels"), nikonCb2Id, makerTags, unsignedShort, 4, printValue),
1342         // End of list marker
1343         TagInfo(0xffff, "(UnknownNikonCb2Tag)", "(UnknownNikonCb2Tag)", N_("Unknown Nikon Color Balance 2 Tag"), nikonCb2Id, makerTags, unsignedShort, 1, printValue)
1344     };
1345 
tagListCb2()1346     const TagInfo* Nikon3MakerNote::tagListCb2()
1347     {
1348         return tagInfoCb2_;
1349     }
1350 
1351     // Nikon3 Color Balance 2a Tag Info
1352     const TagInfo Nikon3MakerNote::tagInfoCb2a_[] = {
1353         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonCb2aId, makerTags, undefined, 4, printExifVersion),
1354         TagInfo( 9, "WB_RGGBLevels", N_("WB RGGB Levels"), N_("WB RGGB levels"), nikonCb2aId, makerTags, unsignedShort, 4, printValue),
1355         // End of list marker
1356         TagInfo(0xffff, "(UnknownNikonCb2aTag)", "(UnknownNikonCb2aTag)", N_("Unknown Nikon Color Balance 2a Tag"), nikonCb2aId, makerTags, unsignedShort, 1, printValue)
1357     };
1358 
tagListCb2a()1359     const TagInfo* Nikon3MakerNote::tagListCb2a()
1360     {
1361         return tagInfoCb2a_;
1362     }
1363 
1364     // Nikon3 Color Balance 2b Tag Info
1365     const TagInfo Nikon3MakerNote::tagInfoCb2b_[] = {
1366         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonCb2bId, makerTags, undefined, 4, printExifVersion),
1367         TagInfo(145, "WB_RGGBLevels", N_("WB RGGB Levels"), N_("WB RGGB levels"), nikonCb2bId, makerTags, unsignedShort, 4, printValue),
1368         // End of list marker
1369         TagInfo(0xffff, "(UnknownNikonCb2bTag)", "(UnknownNikonCb2bTag)", N_("Unknown Nikon Color Balance 2b Tag"), nikonCb2bId, makerTags, unsignedShort, 1, printValue)
1370     };
1371 
tagListCb2b()1372     const TagInfo* Nikon3MakerNote::tagListCb2b()
1373     {
1374         return tagInfoCb2b_;
1375     }
1376 
1377     // Nikon3 Color Balance 3 Tag Info
1378     const TagInfo Nikon3MakerNote::tagInfoCb3_[] = {
1379         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonCb3Id, makerTags, undefined, 4, printExifVersion),
1380         TagInfo(10, "WB_RGBGLevels", N_("WB RGBG Levels"), N_("WB RGBG levels"), nikonCb3Id, makerTags, unsignedShort, 4, printValue),
1381         // End of list marker
1382         TagInfo(0xffff, "(UnknownNikonCb3Tag)", "(UnknownNikonCb3Tag)", N_("Unknown Nikon Color Balance 3 Tag"), nikonCb3Id, makerTags, unsignedShort, 1, printValue)
1383     };
1384 
tagListCb3()1385     const TagInfo* Nikon3MakerNote::tagListCb3()
1386     {
1387         return tagInfoCb3_;
1388     }
1389 
1390     // Nikon3 Color Balance 4 Tag Info
1391     const TagInfo Nikon3MakerNote::tagInfoCb4_[] = {
1392         TagInfo(  0, "Version", N_("Version"), N_("Version"), nikonCb4Id, makerTags, undefined, 4, printExifVersion),
1393         TagInfo(147, "WB_GRBGLevels", N_("WB GRBG Levels"), N_("WB GRBG levels"), nikonCb4Id, makerTags, unsignedShort, 4, printValue),
1394         // End of list marker
1395         TagInfo(0xffff, "(UnknownNikonCb4Tag)", "(UnknownNikonCb4Tag)", N_("Unknown Nikon Color Balance 4 Tag"), nikonCb4Id, makerTags, unsignedShort, 1, printValue)
1396     };
1397 
tagListCb4()1398     const TagInfo* Nikon3MakerNote::tagListCb4()
1399     {
1400         return tagInfoCb4_;
1401     }
1402 
1403     // Nikon3 Lens Data 1 Tag Info
1404     const TagInfo Nikon3MakerNote::tagInfoLd1_[] = {
1405         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonLd1Id, makerTags, undefined, 4, printExifVersion),
1406         TagInfo( 6, "LensIDNumber", N_("Lens ID Number"), N_("Lens ID number"), nikonLd1Id, makerTags, unsignedByte, 1, printLensId1),
1407         TagInfo( 7, "LensFStops", N_("Lens F-Stops"), N_("Lens F-stops"), nikonLd1Id, makerTags, unsignedByte, 1, printFStops),
1408         TagInfo( 8, "MinFocalLength", N_("Min Focal Length"), N_("Min focal length"), nikonLd1Id, makerTags, unsignedByte, 1, printFocal),
1409         TagInfo( 9, "MaxFocalLength", N_("Max Focal Length"), N_("Max focal length"), nikonLd1Id, makerTags, unsignedByte, 1, printFocal),
1410         TagInfo(10, "MaxApertureAtMinFocal", N_("Max Aperture At Min Focal"), N_("Max aperture at min focal"), nikonLd1Id, makerTags, unsignedByte, 1, printAperture),
1411         TagInfo(11, "MaxApertureAtMaxFocal", N_("Max Aperture At Max Focal"), N_("Max aperture at max focal"), nikonLd1Id, makerTags, unsignedByte, 1, printAperture),
1412         TagInfo(12, "MCUVersion", N_("MCU Version"), N_("MCU version"), nikonLd1Id, makerTags, unsignedByte, 1, printValue),
1413         // End of list marker
1414         TagInfo(0xffff, "(UnknownNikonLd1Tag)", "(UnknownNikonLd1Tag)", N_("Unknown Nikon Lens Data 1 Tag"), nikonLd1Id, makerTags, unsignedByte, 1, printValue)
1415     };
1416 
tagListLd1()1417     const TagInfo* Nikon3MakerNote::tagListLd1()
1418     {
1419         return tagInfoLd1_;
1420     }
1421 
1422     // Nikon3 Lens Data 2 Tag Info
1423     const TagInfo Nikon3MakerNote::tagInfoLd2_[] = {
1424         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonLd2Id, makerTags, undefined, 4, printExifVersion),
1425         TagInfo( 4, "ExitPupilPosition", N_("Exit Pupil Position"), N_("Exit pupil position"), nikonLd2Id, makerTags, unsignedByte, 1, printExitPupilPosition),
1426         TagInfo( 5, "AFAperture", N_("AF Aperture"), N_("AF aperture"), nikonLd2Id, makerTags, unsignedByte, 1, printAperture),
1427         TagInfo( 8, "FocusPosition", N_("Focus Position"), N_("Focus position"), nikonLd2Id, makerTags, unsignedByte, 1, printValue),
1428         TagInfo( 9, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), nikonLd2Id, makerTags, unsignedByte, 1, printFocusDistance),
1429         TagInfo(10, "FocalLength", N_("Focal Length"), N_("Focal length"), nikonLd2Id, makerTags, unsignedByte, 1, printFocal),
1430         TagInfo(11, "LensIDNumber", N_("Lens ID Number"), N_("Lens ID number"), nikonLd2Id, makerTags, unsignedByte, 1, printLensId2),
1431         TagInfo(12, "LensFStops", N_("Lens F-Stops"), N_("Lens F-stops"), nikonLd2Id, makerTags, unsignedByte, 1, printFStops),
1432         TagInfo(13, "MinFocalLength", N_("Min Focal Length"), N_("Min focal length"), nikonLd2Id, makerTags, unsignedByte, 1, printFocal),
1433         TagInfo(14, "MaxFocalLength", N_("Max Focal Length"), N_("Max focal length"), nikonLd2Id, makerTags, unsignedByte, 1, printFocal),
1434         TagInfo(15, "MaxApertureAtMinFocal", N_("Max Aperture At Min Focal"), N_("Max aperture at min focal"), nikonLd2Id, makerTags, unsignedByte, 1, printAperture),
1435         TagInfo(16, "MaxApertureAtMaxFocal", N_("Max Aperture At Max Focal"), N_("Max aperture at max focal"), nikonLd2Id, makerTags, unsignedByte, 1, printAperture),
1436         TagInfo(17, "MCUVersion", N_("MCU Version"), N_("MCU version"), nikonLd2Id, makerTags, unsignedByte, 1, printValue),
1437         TagInfo(18, "EffectiveMaxAperture", N_("Effective Max Aperture"), N_("Effective max aperture"), nikonLd2Id, makerTags, unsignedByte, 1, printAperture),
1438         // End of list marker
1439         TagInfo(0xffff, "(UnknownNikonLd2Tag)", "(UnknownNikonLd2Tag)", N_("Unknown Nikon Lens Data 2 Tag"), nikonLd2Id, makerTags, unsignedByte, 1, printValue)
1440     };
1441 
tagListLd2()1442     const TagInfo* Nikon3MakerNote::tagListLd2()
1443     {
1444         return tagInfoLd2_;
1445     }
1446 
1447     // Nikon3 Lens Data 3 Tag Info
1448     const TagInfo Nikon3MakerNote::tagInfoLd3_[] = {
1449         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonLd3Id, makerTags, undefined, 4, printExifVersion),
1450         TagInfo( 4, "ExitPupilPosition", N_("Exit Pupil Position"), N_("Exit pupil position"), nikonLd3Id, makerTags, unsignedByte, 1, printExitPupilPosition),
1451         TagInfo( 5, "AFAperture", N_("AF Aperture"), N_("AF aperture"), nikonLd3Id, makerTags, unsignedByte, 1, printAperture),
1452         TagInfo( 8, "FocusPosition", N_("Focus Position"), N_("Focus position"), nikonLd3Id, makerTags, unsignedByte, 1, printValue),
1453         TagInfo(10, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), nikonLd3Id, makerTags, unsignedByte, 1, printFocusDistance),
1454         TagInfo(11, "FocalLength", N_("Focal Length"), N_("Focal length"), nikonLd3Id, makerTags, unsignedByte, 1, printFocal),
1455         TagInfo(12, "LensIDNumber", N_("Lens ID Number"), N_("Lens ID number"), nikonLd3Id, makerTags, unsignedByte, 1, printLensId3),
1456         TagInfo(13, "LensFStops", N_("Lens F-Stops"), N_("Lens F-stops"), nikonLd3Id, makerTags, unsignedByte, 1, printFStops),
1457         TagInfo(14, "MinFocalLength", N_("Min Focal Length"), N_("Min focal length"), nikonLd3Id, makerTags, unsignedByte, 1, printFocal),
1458         TagInfo(15, "MaxFocalLength", N_("Max Focal Length"), N_("Max focal length"), nikonLd3Id, makerTags, unsignedByte, 1, printFocal),
1459         TagInfo(16, "MaxApertureAtMinFocal", N_("Max Aperture At Min Focal"), N_("Max aperture at min focal length"), nikonLd3Id, makerTags, unsignedByte, 1, printAperture),
1460         TagInfo(17, "MaxApertureAtMaxFocal", N_("Max Aperture At Max Focal"), N_("Max aperture at max focal length"), nikonLd3Id, makerTags, unsignedByte, 1, printAperture),
1461         TagInfo(18, "MCUVersion", N_("MCU Version"), N_("MCU version"), nikonLd3Id, makerTags, unsignedByte, 1, printValue),
1462         TagInfo(19, "EffectiveMaxAperture", N_("Effective Max Aperture"), N_("Effective max aperture"), nikonLd3Id, makerTags, unsignedByte, 1, printAperture),
1463         // End of list marker
1464         TagInfo(0xffff, "(UnknownNikonLd3Tag)", "(UnknownNikonLd3Tag)", N_("Unknown Nikon Lens Data 3 Tag"), nikonLd3Id, makerTags, unsignedByte, 1, printValue)
1465     };
1466 
tagListLd3()1467     const TagInfo* Nikon3MakerNote::tagListLd3()
1468     {
1469         return tagInfoLd3_;
1470     }
1471 
1472     // Nikon3 Lens Data 4 Tag Info
1473     // based on https://exiftool.org/TagNames/Nikon.html#LensData0800
1474     const TagInfo Nikon3MakerNote::tagInfoLd4_[] = {
1475         TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonLd4Id, makerTags, undefined, 4, printExifVersion),
1476         TagInfo( 4, "ExitPupilPosition", N_("Exit Pupil Position"), N_("Exit pupil position"), nikonLd4Id, makerTags, unsignedByte, 1, printExitPupilPosition),
1477         TagInfo( 5, "AFAperture", N_("AF Aperture"), N_("AF aperture"), nikonLd4Id, makerTags, unsignedByte, 1, printAperture),
1478         TagInfo( 9, "FocusPosition", N_("Focus Position"), N_("Focus position"), nikonLd4Id, makerTags, unsignedByte, 1, printValue),
1479         TagInfo(11, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), nikonLd4Id, makerTags, unsignedByte, 1, printFocusDistance),
1480         TagInfo(12, "FocalLength", N_("Focal Length"), N_("Focal length"), nikonLd4Id, makerTags, unsignedByte, 1, printFocal),
1481         TagInfo(13, "LensIDNumber", N_("Lens ID Number"), N_("Lens ID number"), nikonLd4Id, makerTags, unsignedByte, 1, printLensId4),
1482         TagInfo(14, "LensFStops", N_("Lens F-Stops"), N_("Lens F-stops"), nikonLd4Id, makerTags, unsignedByte, 1, printFStops),
1483         TagInfo(15, "MinFocalLength", N_("Min Focal Length"), N_("Min focal length"), nikonLd4Id, makerTags, unsignedByte, 1, printFocal),
1484         TagInfo(16, "MaxFocalLength", N_("Max Focal Length"), N_("Max focal length"), nikonLd4Id, makerTags, unsignedByte, 1, printFocal),
1485         TagInfo(17, "MaxApertureAtMinFocal", N_("Max Aperture At Min Focal"), N_("Max aperture at min focal length"), nikonLd4Id, makerTags, unsignedByte, 1, printAperture),
1486         TagInfo(18, "MaxApertureAtMaxFocal", N_("Max Aperture At Max Focal"), N_("Max aperture at max focal length"), nikonLd4Id, makerTags, unsignedByte, 1, printAperture),
1487         TagInfo(19, "MCUVersion", N_("MCU Version"), N_("MCU version"), nikonLd4Id, makerTags, unsignedByte, 1, printValue),
1488         TagInfo(20, "EffectiveMaxAperture", N_("Effective Max Aperture"), N_("Effective max aperture"), nikonLd4Id, makerTags, unsignedByte, 1, printAperture),
1489         TagInfo(48, "LensID", N_("LensID"), N_("Lens ID"), nikonLd4Id, makerTags, unsignedShort, 1, printLensId4ZMount),
1490         TagInfo(54, "MaxAperture", N_("Max Aperture"), N_("Max aperture"), nikonLd4Id, makerTags, unsignedShort, 1, printApertureLd4),
1491         TagInfo(56, "FNumber", N_("F-Number"), N_("F-Number"), nikonLd4Id, makerTags, unsignedShort, 1, printApertureLd4),
1492         TagInfo(60, "FocalLength", N_("Focal Length"), N_("Focal length"), nikonLd4Id, makerTags, unsignedShort, 1, printFocalLd4),
1493         TagInfo(79, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), nikonLd4Id, makerTags, unsignedByte, 1, printFocusDistance),
1494         // End of list marker
1495         TagInfo(0xffff, "(UnknownNikonLd4Tag)", "(UnknownNikonLd4Tag)", N_("Unknown Nikon Lens Data 3 Tag"), nikonLd4Id, makerTags, unsignedByte, 1, printValue)
1496     };
1497 
tagListLd4()1498     const TagInfo* Nikon3MakerNote::tagListLd4()
1499     {
1500         return tagInfoLd4_;
1501     }
1502 
printIiIso(std::ostream & os,const Value & value,const ExifData *)1503     std::ostream& Nikon3MakerNote::printIiIso(std::ostream& os,
1504                                               const Value& value,
1505                                               const ExifData*)
1506     {
1507         double v = 100 * exp((value.toLong() / 12.0 - 5) * log(2.0));
1508         return os << static_cast<int>(v + 0.5);
1509     }
1510 
print0x0002(std::ostream & os,const Value & value,const ExifData *)1511     std::ostream& Nikon3MakerNote::print0x0002(std::ostream& os,
1512                                                const Value& value,
1513                                                const ExifData*)
1514     {
1515         if (value.count() > 1) {
1516             os << value.toLong(1);
1517         }
1518         else {
1519             os << "(" << value << ")";
1520         }
1521         return os;
1522     }
1523 
print0x0007(std::ostream & os,const Value & value,const ExifData *)1524     std::ostream& Nikon3MakerNote::print0x0007(std::ostream& os,
1525                                                const Value& value,
1526                                                const ExifData*)
1527     {
1528         std::string focus = value.toString();
1529         if      (focus == "AF-C  ") os << _("Continuous autofocus");
1530         else if (focus == "AF-S  ") os << _("Single autofocus");
1531         else if (focus == "AF-A  ") os << _("Automatic");
1532         else                      os << "(" << value << ")";
1533         return os;
1534     }
1535 
print0x0083(std::ostream & os,const Value & value,const ExifData *)1536     std::ostream& Nikon3MakerNote::print0x0083(std::ostream& os,
1537                                                const Value& value,
1538                                                const ExifData*)
1539     {
1540         long lensType = value.toLong();
1541 
1542         bool valid=false;
1543         if (lensType & 1)
1544         {
1545             os << "MF ";
1546             valid=true;
1547         }
1548         if (lensType & 2)
1549         {
1550             os << "D ";
1551             valid=true;
1552         }
1553         if (lensType & 4)
1554         {
1555             os << "G ";
1556             valid=true;
1557         }
1558         if (lensType & 8)
1559         {
1560             os << "VR";
1561             valid=true;
1562         }
1563 
1564         if (!valid)
1565             os << "(" << lensType << ")";
1566 
1567         return os;
1568     }
1569 
print0x0084(std::ostream & os,const Value & value,const ExifData *)1570     std::ostream& Nikon3MakerNote::print0x0084(std::ostream& os,
1571                                                const Value& value,
1572                                                const ExifData*)
1573     {
1574         std::ios::fmtflags f( os.flags() );
1575         if (   value.count() != 4
1576             || value.toRational(0).second == 0
1577             || value.toRational(1).second == 0) {
1578             os << "(" << value << ")";
1579             return os;
1580         }
1581         long len1 = value.toLong(0);
1582         long len2 = value.toLong(1);
1583 
1584         Rational fno1 = value.toRational(2);
1585         Rational fno2 = value.toRational(3);
1586         os << len1;
1587         if (len2 != len1) {
1588             os << "-" << len2;
1589         }
1590         os << "mm ";
1591         std::ostringstream oss;
1592         oss.copyfmt(os);
1593         os << "F" << std::setprecision(2)
1594            << static_cast<float>(fno1.first) / fno1.second;
1595         if (fno2 != fno1) {
1596             os << "-" << std::setprecision(2)
1597                << static_cast<float>(fno2.first) / fno2.second;
1598         }
1599         os.copyfmt(oss);
1600         os.flags(f);
1601         return os;
1602     }
1603 
print0x0085(std::ostream & os,const Value & value,const ExifData *)1604     std::ostream& Nikon3MakerNote::print0x0085(std::ostream& os,
1605                                                const Value& value,
1606                                                const ExifData*)
1607     {
1608         std::ios::fmtflags f( os.flags() );
1609         Rational distance = value.toRational();
1610         if (distance.first == 0) {
1611             os << _("Unknown");
1612         }
1613         else if (distance.second != 0) {
1614             std::ostringstream oss;
1615             oss.copyfmt(os);
1616             os << std::fixed << std::setprecision(2)
1617                << (float)distance.first / distance.second
1618                << " m";
1619             os.copyfmt(oss);
1620         }
1621         else {
1622             os << "(" << value << ")";
1623         }
1624         os.flags(f);
1625         return os;
1626     }
1627 
print0x0086(std::ostream & os,const Value & value,const ExifData *)1628     std::ostream& Nikon3MakerNote::print0x0086(std::ostream& os,
1629                                                const Value& value,
1630                                                const ExifData*)
1631     {
1632         std::ios::fmtflags f( os.flags() );
1633         Rational zoom = value.toRational();
1634         if (zoom.first == 0) {
1635             os << _("Not used");
1636         }
1637         else if (zoom.second != 0) {
1638             std::ostringstream oss;
1639             oss.copyfmt(os);
1640             os << std::fixed << std::setprecision(1)
1641                << (float)zoom.first / zoom.second
1642                << "x";
1643             os.copyfmt(oss);
1644         }
1645         else {
1646             os << "(" << value << ")";
1647         }
1648         os.flags(f);
1649         return os;
1650     }
1651 
print0x0088(std::ostream & os,const Value & value,const ExifData *)1652     std::ostream& Nikon3MakerNote::print0x0088(std::ostream& os,
1653                                                const Value& value,
1654                                                const ExifData*)
1655     {
1656         if (value.size() != 4) { // Size is 4 even for those who map this way...
1657             os << "(" << value << ")";
1658         }
1659         else {
1660             // Mapping by Roger Larsson
1661             unsigned focusmetering = value.toLong(0);
1662             unsigned focuspoint = value.toLong(1);
1663             unsigned focusused = (value.toLong(2) << 8) + value.toLong(3);
1664             // TODO: enum {standard, wide} combination = standard;
1665             const unsigned focuspoints =   sizeof(nikonFocuspoints)
1666                                          / sizeof(nikonFocuspoints[0]);
1667 
1668             if (focusmetering == 0 && focuspoint == 0 && focusused == 0) {
1669                 // Special case, in Manual focus and with Nikon compacts
1670                 // this indicates that the field has no meaning.
1671                 // But when actually in "Single area, Center" this can mean
1672                 // that focus was not found (try this in AF-C mode)
1673                 // TODO: handle the meaningful case (interacts with other fields)
1674                 os << "N/A";
1675                 return os;
1676             }
1677 
1678             switch (focusmetering) {
1679             case 0x00: os << _("Single area");          break; // D70, D200
1680             case 0x01: os << _("Dynamic area");         break; // D70, D200
1681             case 0x02: os << _("Closest subject");      break; // D70, D200
1682             case 0x03: os << _("Group dynamic-AF");     break; // D200
1683             case 0x04: os << _("Single area (wide)");   /* TODO: combination = wide; */ break; // D200
1684             case 0x05: os << _("Dynamic area (wide)");  /* TODO: combination = wide; */ break; // D200
1685             default: os << "(" << focusmetering << ")"; break;
1686             }
1687 
1688             char sep = ';';
1689             if (focusmetering != 0x02) { //  No user selected point for Closest subject
1690                 os << sep << ' ';
1691 
1692                 // What focuspoint did the user select?
1693                 if (focuspoint < focuspoints) {
1694                     os << nikonFocuspoints[focuspoint];
1695                     // TODO: os << position[fokuspoint][combination]
1696                 }
1697                 else
1698                     os << "(" << focuspoint << ")";
1699 
1700                 sep = ',';
1701             }
1702 
1703             // What fokuspoints(!) did the camera use? add if differs
1704             if (focusused == 0)
1705                 os << sep << " " << _("none");
1706             else if (focusused != 1U<<focuspoint) {
1707                 // selected point was not the actually used one
1708                 // (Roger Larsson: my interpretation, verify)
1709                 os << sep;
1710                 for (unsigned fpid=0; fpid<focuspoints; fpid++)
1711                     if (focusused & 1<<fpid)
1712                         os << ' ' << nikonFocuspoints[fpid];
1713             }
1714 
1715             os << " " << _("used");
1716         }
1717 
1718         return os;
1719     }
1720 
printAfPointsInFocus(std::ostream & os,const Value & value,const ExifData * metadata)1721     std::ostream& Nikon3MakerNote::printAfPointsInFocus(std::ostream& os,
1722                                                         const Value& value,
1723                                                         const ExifData* metadata)
1724     {
1725         if (value.typeId() != unsignedShort) return os << "(" << value << ")";
1726 
1727         bool dModel = false;
1728         if (metadata) {
1729             ExifData::const_iterator pos = metadata->findKey(ExifKey("Exif.Image.Model"));
1730             if (pos != metadata->end() && pos->count() != 0) {
1731                 std::string model = pos->toString();
1732                 if (model.find("NIKON D") != std::string::npos) {
1733                     dModel = true;
1734                 }
1735             }
1736         }
1737 
1738         uint16_t val = static_cast<uint16_t>(value.toLong());
1739         if (dModel) val = (val >> 8) | ((val & 0x00ff) << 8);
1740 
1741         if (val == 0x07ff) return os << _("All 11 Points");
1742 
1743         UShortValue v;
1744         v.value_.push_back(val);
1745         return EXV_PRINT_TAG_BITMASK(nikonAfPointsInFocus)(os, v, 0);
1746     }
1747 
print0x0089(std::ostream & os,const Value & value,const ExifData * metadata)1748     std::ostream& Nikon3MakerNote::print0x0089(std::ostream& os,
1749                                                const Value& value,
1750                                                const ExifData* metadata)
1751     {
1752         if (value.count() != 1 || value.typeId() != unsignedShort) {
1753             return os << "(" << value << ")";
1754         }
1755         long l = value.toLong(0);
1756         if (l == 0) return os << _("Single-frame");
1757         if (!(l & 0x87)) os << _("Single-frame") << ", ";
1758         bool d70 = false;
1759         if (metadata) {
1760             ExifKey key("Exif.Image.Model");
1761             ExifData::const_iterator pos = metadata->findKey(key);
1762             if (pos != metadata->end() && pos->count() != 0) {
1763                 std::string model = pos->toString();
1764                 if (model.find("D70") != std::string::npos) {
1765                     d70 = true;
1766                 }
1767             }
1768         }
1769         if (d70) {
1770             EXV_PRINT_TAG_BITMASK(nikonShootingModeD70)(os, value, 0);
1771         }
1772         else {
1773             EXV_PRINT_TAG_BITMASK(nikonShootingMode)(os, value, 0);
1774         }
1775         return os;
1776     }
1777 
print0x008b(std::ostream & os,const Value & value,const ExifData *)1778     std::ostream& Nikon3MakerNote::print0x008b(std::ostream& os,
1779                                                const Value& value,
1780                                                const ExifData*)
1781     {
1782         // Decoded by Robert Rottmerhusen <email@rottmerhusen.com>
1783         if (   value.size() != 4
1784             || value.typeId() != undefined) {
1785             return os << "(" << value << ")";
1786         }
1787         float a = value.toFloat(0);
1788         long  b = value.toLong(1);
1789         long  c = value.toLong(2);
1790         if (c == 0) return os << "(" << value << ")";
1791         return os << a * b / c;
1792     }
1793 
1794     static bool testConfigFile(std::ostream& os,const Value& value);
testConfigFile(std::ostream & os,const Value & value)1795     static bool testConfigFile(std::ostream& os,const Value& value)
1796     {
1797         bool result = false;
1798         const std::string undefined("undefined") ;
1799         const std::string section  ("nikon");
1800         if ( Internal::readExiv2Config(section,value.toString(),undefined) != undefined ) {
1801             os << Internal::readExiv2Config(section,value.toString(),undefined);
1802             result = true;
1803         }
1804         return result;
1805     }
1806 
printLensId1(std::ostream & os,const Value & value,const ExifData * metadata)1807     std::ostream& Nikon3MakerNote::printLensId1(std::ostream& os,
1808                                                 const Value& value,
1809                                                 const ExifData* metadata)
1810     {
1811         return testConfigFile(os,value) ? os : printLensId(os, value, metadata, "NikonLd1");
1812     }
1813 
printLensId2(std::ostream & os,const Value & value,const ExifData * metadata)1814     std::ostream& Nikon3MakerNote::printLensId2(std::ostream& os,
1815                                                 const Value& value,
1816                                                 const ExifData* metadata)
1817     {
1818         return testConfigFile(os,value) ? os : printLensId(os, value, metadata, "NikonLd2");
1819     }
1820 
printLensId3(std::ostream & os,const Value & value,const ExifData * metadata)1821     std::ostream& Nikon3MakerNote::printLensId3(std::ostream& os,
1822                                                 const Value& value,
1823                                                 const ExifData* metadata)
1824     {
1825         return testConfigFile(os,value) ? os : printLensId(os, value, metadata, "NikonLd3");
1826     }
1827 
printLensId4(std::ostream & os,const Value & value,const ExifData * metadata)1828     std::ostream& Nikon3MakerNote::printLensId4(std::ostream& os,
1829                                                 const Value& value,
1830                                                 const ExifData* metadata)
1831     {
1832         return testConfigFile(os,value) ? os : printLensId(os, value, metadata, "NikonLd4");
1833     }
1834 
printLensId(std::ostream & os,const Value & value,const ExifData * metadata,const std::string & group)1835     std::ostream& Nikon3MakerNote::printLensId(std::ostream& os,
1836                                                const Value& value,
1837                                                const ExifData* metadata,
1838                                                const std::string& group)
1839     {
1840 #ifdef EXV_HAVE_LENSDATA
1841 // 8< - - - 8< do not remove this line >8 - - - >8
1842 //------------------------------------------------------------------------------
1843 #ifndef FMOUNTLH
1844 #define FMOUNTLH
1845 //------------------------------------------------------------------------------
1846 // List of AF F-Mount lenses - Version 4.4.550.02                    2018-03-03
1847 //------------------------------------------------------------------------------
1848 #define FMLVERSION "4.4.550.02"
1849 #define FMLDATE "2018-03-03"
1850 //------------------------------------------------------------------------------
1851 //
1852 //
1853 // Created by Robert Rottmerhusen 2005 - 2018
1854 // http://www.rottmerhusen.com (lens_id@rottmerhusen.com)
1855 //
1856 // For contributor info and more visit my online list:
1857 // http://www.rottmerhusen.com/objektives/lensid/thirdparty.html
1858 //
1859 //
1860 // Eight misidentified lenses due to double LensIDs:
1861 //
1862 // 2F 48 30 44 24 24 29 02.1: Nikon AF Zoom-Nikkor 20-35mm f/2.8D IF
1863 // 2F 48 30 44 24 24 29 02.2: Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8)
1864 //
1865 // 32 54 6A 6A 24 24 35 02.1: Nikon AF Micro-Nikkor 105mm f/2.8D
1866 // 32 54 6A 6A 24 24 35 02.2: Sigma Macro 105mm F2.8 EX DG
1867 //
1868 // 7A 3C 1F 37 30 30 7E 06.1: Nikon AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED
1869 // 7A 3C 1F 37 30 30 7E 06.2: Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)
1870 //
1871 // 8B 40 2D 80 2C 3C FD 0E.1: Nikon AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED
1872 // 8B 40 2D 80 2C 3C FD 0E.2: Nikon AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED II
1873 //
1874 // 32 53 64 64 24 24 35 02.1: Tamron SP AF 90mm F/2.8 Macro 1:1 (172E)
1875 // 32 53 64 64 24 24 35 02.2: Tamron SP AF 90mm F/2.8 Di Macro 1:1 (272E)
1876 //
1877 // 2F 40 30 44 2C 34 29 02.1: Tokina AF 235 II (AF 20-35mm f/3.5-4.5)
1878 // 2F 40 30 44 2C 34 29 02.2: Tokina AF 193 (AF 19-35mm f/3.5-4.5)
1879 //
1880 // 25 48 3C 5C 24 24 1B 02.1: Tokina AT-X 287 AF PRO SV (AF 28-70mm f/2.8)
1881 // 25 48 3C 5C 24 24 1B 02.2: Tokina AT-X 270 AF PRO II (AF 28-70mm f/2.6-2.8)
1882 //
1883 // 4A 48 24 24 24 0C 4D 02.1: Samyang AE 14mm f/2.8 ED AS IF UMC
1884 // 4A 48 24 24 24 0C 4D 02.2: Samyang 10mm f/2.8 ED AS NCS CS
1885 //
1886 //
1887 // product number/order code not complete
1888 //
1889 // Free use in non-commercial, GPL or open source software only!
1890 // Please contact me for adding lenses or use in commercial software.
1891 //
1892 //"data from TAG 0x98" "ltyp" " "TC" "MID" "maker" "PN" "lens name from manuf";
1893 //
1894 //------------------------------------------------------------------------------
1895 // Nikkor lenses by their LensID
1896 //------------------------------------------------------------------------------
1897 //
1898 static const struct FMntLens {unsigned char lid,stps,focs,focl,aps,apl,lfw, ltype, tcinfo, dblid, mid; const char *manuf, *lnumber, *lensname;}
1899 fmountlens[] = {
1900 {0x01,0x58,0x50,0x50,0x14,0x14,0x02,0x00,0x00,0x00,0x00, "Nikon", "JAA00901", "AF Nikkor 50mm f/1.8"},
1901 {0x01,0x58,0x50,0x50,0x14,0x14,0x05,0x00,0x00,0x00,0x00, "Nikon", "JAA00901", "AF Nikkor 50mm f/1.8"},
1902 {0x02,0x42,0x44,0x5C,0x2A,0x34,0x02,0x00,0x00,0x00,0x00, "Nikon", "JAA72701", "AF Zoom-Nikkor 35-70mm f/3.3-4.5"},
1903 {0x02,0x42,0x44,0x5C,0x2A,0x34,0x08,0x00,0x00,0x00,0x00, "Nikon", "JAA72701", "AF Zoom-Nikkor 35-70mm f/3.3-4.5"},
1904 {0x03,0x48,0x5C,0x81,0x30,0x30,0x02,0x00,0x00,0x00,0x00, "Nikon", "JAA72801", "AF Zoom-Nikkor 70-210mm f/4"},
1905 {0x04,0x48,0x3C,0x3C,0x24,0x24,0x03,0x00,0x00,0x00,0x00, "Nikon", "JAA12001", "AF Nikkor 28mm f/2.8"},
1906 {0x05,0x54,0x50,0x50,0x0C,0x0C,0x04,0x00,0x00,0x00,0x00, "Nikon", "JAA01001", "AF Nikkor 50mm f/1.4"},
1907 {0x06,0x54,0x53,0x53,0x24,0x24,0x06,0x00,0x40,0x00,0x00, "Nikon", "JAA62101", "AF Micro-Nikkor 55mm f/2.8"},
1908 {0x07,0x40,0x3C,0x62,0x2C,0x34,0x03,0x00,0x00,0x00,0x00, "Nikon", "JAA72901", "AF Zoom-Nikkor 28-85mm f/3.5-4.5"},
1909 {0x08,0x40,0x44,0x6A,0x2C,0x34,0x04,0x00,0x00,0x00,0x00, "Nikon", "JAA73001", "AF Zoom-Nikkor 35-105mm f/3.5-4.5"},
1910 {0x09,0x48,0x37,0x37,0x24,0x24,0x04,0x00,0x00,0x00,0x00, "Nikon", "JAA12101", "AF Nikkor 24mm f/2.8"},
1911 {0x0A,0x48,0x8E,0x8E,0x24,0x24,0x03,0x00,0x00,0x00,0x00, "Nikon", "JAA322AA", "AF Nikkor 300mm f/2.8 IF-ED"},
1912 {0x0A,0x48,0x8E,0x8E,0x24,0x24,0x05,0x00,0x00,0x00,0x00, "Nikon", "JAA322AB", "AF Nikkor 300mm f/2.8 IF-ED"},
1913 {0x0B,0x48,0x7C,0x7C,0x24,0x24,0x05,0x00,0x00,0x00,0x00, "Nikon", "JAA32101", "AF Nikkor 180mm f/2.8 IF-ED"},
1914 //0C
1915 {0x0D,0x40,0x44,0x72,0x2C,0x34,0x07,0x00,0x00,0x00,0x00, "Nikon", "JAA73101", "AF Zoom-Nikkor 35-135mm f/3.5-4.5"},
1916 {0x0E,0x48,0x5C,0x81,0x30,0x30,0x05,0x00,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 70-210mm f/4"},
1917 {0x0F,0x58,0x50,0x50,0x14,0x14,0x05,0x00,0x00,0x00,0x00, "Nikon", "JAA009AD", "AF Nikkor 50mm f/1.8 N"},
1918 {0x10,0x48,0x8E,0x8E,0x30,0x30,0x08,0x00,0x00,0x00,0x00, "Nikon", "JAA32301", "AF Nikkor 300mm f/4 IF-ED"},
1919 {0x11,0x48,0x44,0x5C,0x24,0x24,0x08,0x00,0x00,0x00,0x00, "Nikon", "JAA73301", "AF Zoom-Nikkor 35-70mm f/2.8"},
1920 {0x11,0x48,0x44,0x5C,0x24,0x24,0x15,0x00,0x00,0x00,0x00, "Nikon", "JAA73301", "AF Zoom-Nikkor 35-70mm f/2.8"},
1921 {0x12,0x48,0x5C,0x81,0x30,0x3C,0x09,0x00,0x00,0x00,0x00, "Nikon", "JAA73201", "AF Nikkor 70-210mm f/4-5.6"},
1922 {0x13,0x42,0x37,0x50,0x2A,0x34,0x0B,0x00,0x00,0x00,0x00, "Nikon", "JAA73401", "AF Zoom-Nikkor 24-50mm f/3.3-4.5"},
1923 {0x14,0x48,0x60,0x80,0x24,0x24,0x0B,0x00,0x00,0x00,0x00, "Nikon", "JAA73501", "AF Zoom-Nikkor 80-200mm f/2.8 ED"},
1924 {0x15,0x4C,0x62,0x62,0x14,0x14,0x0C,0x00,0x00,0x00,0x00, "Nikon", "JAA32401", "AF Nikkor 85mm f/1.8"},
1925 //16
1926 {0x17,0x3C,0xA0,0xA0,0x30,0x30,0x0F,0x00,0x00,0x00,0x00, "Nikon", "JAA518AA", "Nikkor 500mm f/4 P ED IF"},
1927 {0x17,0x3C,0xA0,0xA0,0x30,0x30,0x11,0x00,0x00,0x00,0x00, "Nikon", "JAA518AA", "Nikkor 500mm f/4 P ED IF"},
1928 {0x18,0x40,0x44,0x72,0x2C,0x34,0x0E,0x00,0x00,0x00,0x00, "Nikon", "JAA736AA", "AF Zoom-Nikkor 35-135mm f/3.5-4.5 N"},
1929 //19
1930 {0x1A,0x54,0x44,0x44,0x18,0x18,0x11,0x00,0x00,0x00,0x00, "Nikon", "JAA12201", "AF Nikkor 35mm f/2"},
1931 {0x1B,0x44,0x5E,0x8E,0x34,0x3C,0x10,0x00,0x00,0x00,0x00, "Nikon", "JAA738AA", "AF Zoom-Nikkor 75-300mm f/4.5-5.6"},
1932 {0x1C,0x48,0x30,0x30,0x24,0x24,0x12,0x00,0x00,0x00,0x00, "Nikon", "JAA12301", "AF Nikkor 20mm f/2.8"},
1933 {0x1D,0x42,0x44,0x5C,0x2A,0x34,0x12,0x00,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 35-70mm f/3.3-4.5 N"},
1934 {0x1E,0x54,0x56,0x56,0x24,0x24,0x13,0x00,0x40,0x00,0x00, "Nikon", "JAA62201", "AF Micro-Nikkor 60mm f/2.8"},
1935 {0x1F,0x54,0x6A,0x6A,0x24,0x24,0x14,0x00,0x40,0x00,0x00, "Nikon", "JAA62301", "AF Micro-Nikkor 105mm f/2.8"},
1936 {0x20,0x48,0x60,0x80,0x24,0x24,0x15,0x00,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 80-200mm f/2.8 ED"},
1937 {0x21,0x40,0x3C,0x5C,0x2C,0x34,0x16,0x00,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 28-70mm f/3.5-4.5"},
1938 {0x22,0x48,0x72,0x72,0x18,0x18,0x16,0x00,0x00,0x00,0x00, "Nikon", "JAA32501", "AF DC-Nikkor 135mm f/2"},
1939 {0x23,0x30,0xBE,0xCA,0x3C,0x48,0x17,0x00,0x00,0x00,0x00, "Nikon", "", "Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF"},
1940 // - D - lenses from here
1941 {0x24,0x48,0x60,0x80,0x24,0x24,0x1A,0x02,0x00,0x00,0x00, "Nikon", "JAA742DA", "AF Zoom-Nikkor 80-200mm f/2.8D ED"},
1942 {0x25,0x48,0x44,0x5c,0x24,0x24,0x1B,0x02,0x00,0x00,0x00, "Nikon", "JAA743DA", "AF Zoom-Nikkor 35-70mm f/2.8D"},
1943 {0x25,0x48,0x44,0x5C,0x24,0x24,0x3A,0x02,0x00,0x00,0x00, "Nikon", "JAA743DA", "AF Zoom-Nikkor 35-70mm f/2.8D"},
1944 {0x25,0x48,0x44,0x5c,0x24,0x24,0x52,0x02,0x00,0x00,0x00, "Nikon", "JAA743DA", "AF Zoom-Nikkor 35-70mm f/2.8D"},
1945 {0x26,0x40,0x3C,0x5C,0x2C,0x34,0x1C,0x02,0x00,0x00,0x00, "Nikon", "JAA744DA", "AF Zoom-Nikkor 28-70mm f/3.5-4.5D"},
1946 // ^- not yet verified
1947 {0x27,0x48,0x8E,0x8E,0x24,0x24,0x1D,0x02,0x07,0x00,0x00, "Nikon", "JAA326DA", "AF-I Nikkor 300mm f/2.8D IF-ED"},
1948 {0x27,0x48,0x8E,0x8E,0x24,0x24,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA326DA", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-14E"},
1949 {0x27,0x48,0x8E,0x8E,0x24,0x24,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA326DA", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-17E"},
1950 {0x27,0x48,0x8E,0x8E,0x24,0x24,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA326DA", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-20E"},
1951 {0x28,0x3C,0xA6,0xA6,0x30,0x30,0x1D,0x02,0x07,0x00,0x00, "Nikon", "JAA519DA", "AF-I Nikkor 600mm f/4D IF-ED"},
1952 {0x28,0x3C,0xA6,0xA6,0x30,0x30,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA519DA", "AF-I Nikkor 600mm f/4D IF-ED + TC-14E"},
1953 {0x28,0x3C,0xA6,0xA6,0x30,0x30,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA519DA", "AF-I Nikkor 600mm f/4D IF-ED + TC-17E"},
1954 {0x28,0x3C,0xA6,0xA6,0x30,0x30,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA519DA", "AF-I Nikkor 600mm f/4D IF-ED + TC-20E"},
1955 //29
1956 {0x2A,0x54,0x3C,0x3C,0x0C,0x0C,0x26,0x02,0x00,0x00,0x00, "Nikon", "JAA124DA", "AF Nikkor 28mm f/1.4D"},
1957 {0x2B,0x3C,0x44,0x60,0x30,0x3C,0x1F,0x02,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 35-80mm f/4-5.6D"},
1958 {0x2C,0x48,0x6A,0x6A,0x18,0x18,0x27,0x02,0x00,0x00,0x00, "Nikon", "JAA327DA", "AF DC-Nikkor 105mm f/2D"},
1959 {0x2D,0x48,0x80,0x80,0x30,0x30,0x21,0x02,0x40,0x00,0x00, "Nikon", "JAA624DA", "AF Micro-Nikkor 200mm f/4D IF-ED"},
1960 {0x2E,0x48,0x5C,0x82,0x30,0x3C,0x22,0x02,0x00,0x00,0x00, "Nikon", "JAA747DA", "AF Nikkor 70-210mm f/4-5.6D"},
1961 {0x2E,0x48,0x5C,0x82,0x30,0x3C,0x28,0x02,0x00,0x00,0x00, "Nikon", "JAA747DA", "AF Nikkor 70-210mm f/4-5.6D"},
1962 {0x2F,0x48,0x30,0x44,0x24,0x24,0x29,0x02,0x00,0x01,0x00, "Nikon", "JAA746DA", "AF Zoom-Nikkor 20-35mm f/2.8D IF"},
1963 {0x30,0x48,0x98,0x98,0x24,0x24,0x24,0x02,0x07,0x00,0x00, "Nikon", "JAA520DA", "AF-I Nikkor 400mm f/2.8D IF-ED"},
1964 {0x30,0x48,0x98,0x98,0x24,0x24,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA520DA", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E"},
1965 {0x30,0x48,0x98,0x98,0x24,0x24,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA520DA", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E"},
1966 {0x30,0x48,0x98,0x98,0x24,0x24,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA520DA", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E"},
1967 {0x31,0x54,0x56,0x56,0x24,0x24,0x25,0x02,0x40,0x00,0x00, "Nikon", "JAA625DA", "AF Micro-Nikkor 60mm f/2.8D"},
1968 {0x32,0x54,0x6A,0x6A,0x24,0x24,0x35,0x02,0x40,0x01,0x00, "Nikon", "JAA627DA", "AF Micro-Nikkor 105mm f/2.8D"},
1969 {0x33,0x48,0x2D,0x2D,0x24,0x24,0x31,0x02,0x00,0x00,0x00, "Nikon", "JAA126DA", "AF Nikkor 18mm f/2.8D"},
1970 {0x34,0x48,0x29,0x29,0x24,0x24,0x32,0x02,0x00,0x00,0x00, "Nikon", "JAA626DA", "AF Fisheye Nikkor 16mm f/2.8D"},
1971 {0x35,0x3C,0xA0,0xA0,0x30,0x30,0x33,0x02,0x07,0x00,0x00, "Nikon", "JAA521DA", "AF-I Nikkor 500mm f/4D IF-ED"},
1972 {0x35,0x3C,0xA0,0xA0,0x30,0x30,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA521DA", "AF-I Nikkor 500mm f/4D IF-ED + TC-14E"},
1973 {0x35,0x3C,0xA0,0xA0,0x30,0x30,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA521DA", "AF-I Nikkor 500mm f/4D IF-ED + TC-17E"},
1974 {0x35,0x3C,0xA0,0xA0,0x30,0x30,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA521DA", "AF-I Nikkor 500mm f/4D IF-ED + TC-20E"},
1975 {0x36,0x48,0x37,0x37,0x24,0x24,0x34,0x02,0x00,0x00,0x00, "Nikon", "JAA125DA", "AF Nikkor 24mm f/2.8D"},
1976 {0x37,0x48,0x30,0x30,0x24,0x24,0x36,0x02,0x00,0x00,0x00, "Nikon", "JAA127DA", "AF Nikkor 20mm f/2.8D"},
1977 {0x38,0x4C,0x62,0x62,0x14,0x14,0x37,0x02,0x00,0x00,0x00, "Nikon", "JAA328DA", "AF Nikkor 85mm f/1.8D"},
1978 //39                38
1979 {0x3A,0x40,0x3C,0x5C,0x2C,0x34,0x39,0x02,0x00,0x00,0x00, "Nikon", "JAA744DA", "AF Zoom-Nikkor 28-70mm f/3.5-4.5D"},
1980 {0x3B,0x48,0x44,0x5C,0x24,0x24,0x3A,0x02,0x00,0x00,0x00, "Nikon", "JAA743DA", "AF Zoom-Nikkor 35-70mm f/2.8D N"},
1981 {0x3C,0x48,0x60,0x80,0x24,0x24,0x3B,0x02,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 80-200mm f/2.8D ED"},
1982 {0x3D,0x3C,0x44,0x60,0x30,0x3C,0x3E,0x02,0x00,0x00,0x00, "Nikon", "", "AF Zoom-Nikkor 35-80mm f/4-5.6D"},
1983 {0x3E,0x48,0x3C,0x3C,0x24,0x24,0x3D,0x02,0x00,0x00,0x00, "Nikon", "JAA128DA", "AF Nikkor 28mm f/2.8D"},
1984 {0x3F,0x40,0x44,0x6A,0x2C,0x34,0x45,0x02,0x00,0x00,0x00, "Nikon", "JAA748DA", "AF Zoom-Nikkor 35-105mm f/3.5-4.5D"},
1985 //40
1986 {0x41,0x48,0x7c,0x7c,0x24,0x24,0x43,0x02,0x00,0x00,0x00, "Nikon", "JAA330DA", "AF Nikkor 180mm f/2.8D IF-ED"},
1987 {0x42,0x54,0x44,0x44,0x18,0x18,0x44,0x02,0x00,0x00,0x00, "Nikon", "JAA129DA", "AF Nikkor 35mm f/2D"},
1988 {0x43,0x54,0x50,0x50,0x0C,0x0C,0x46,0x02,0x00,0x00,0x00, "Nikon", "JAA011DB", "AF Nikkor 50mm f/1.4D"},
1989 {0x44,0x44,0x60,0x80,0x34,0x3C,0x47,0x02,0x00,0x00,0x00, "Nikon", "JAA753DB", "AF Zoom-Nikkor 80-200mm f/4.5-5.6D"},
1990 {0x45,0x40,0x3C,0x60,0x2C,0x3C,0x48,0x02,0x00,0x00,0x00, "Nikon", "JAA752DA", "AF Zoom-Nikkor 28-80mm f/3.5-5.6D"},
1991 {0x46,0x3C,0x44,0x60,0x30,0x3C,0x49,0x02,0x00,0x00,0x00, "Nikon", "JAA754DA", "AF Zoom-Nikkor 35-80mm f/4-5.6D N"},
1992 {0x47,0x42,0x37,0x50,0x2A,0x34,0x4A,0x02,0x00,0x00,0x00, "Nikon", "JAA756DA", "AF Zoom-Nikkor 24-50mm f/3.3-4.5D"},
1993 {0x48,0x48,0x8E,0x8E,0x24,0x24,0x4B,0x02,0x07,0x00,0x00, "Nikon", "JAA333DA", "AF-S Nikkor 300mm f/2.8D IF-ED"},
1994 {0x48,0x48,0x8E,0x8E,0x24,0x24,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA333DA", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E"},
1995 {0x48,0x48,0x8E,0x8E,0x24,0x24,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA333DA", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-17E"},
1996 {0x48,0x48,0x8E,0x8E,0x24,0x24,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA333DA", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E"},
1997 {0x49,0x3C,0xA6,0xA6,0x30,0x30,0x4C,0x02,0x07,0x00,0x00, "Nikon", "JAA522DA", "AF-S Nikkor 600mm f/4D IF-ED"},
1998 {0x49,0x3C,0xA6,0xA6,0x30,0x30,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA522DA", "AF-S Nikkor 600mm f/4D IF-ED + TC-14E"},
1999 {0x49,0x3C,0xA6,0xA6,0x30,0x30,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA522DA", "AF-S Nikkor 600mm f/4D IF-ED + TC-17E"},
2000 {0x49,0x3C,0xA6,0xA6,0x30,0x30,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA522DA", "AF-S Nikkor 600mm f/4D IF-ED + TC-20E"},
2001 {0x4A,0x54,0x62,0x62,0x0C,0x0C,0x4D,0x02,0x00,0x00,0x00, "Nikon", "JAA332DA", "AF Nikkor 85mm f/1.4D IF"},
2002 {0x4B,0x3C,0xA0,0xA0,0x30,0x30,0x4E,0x02,0x07,0x00,0x00, "Nikon", "JAA523DA", "AF-S Nikkor 500mm f/4D IF-ED"},
2003 {0x4B,0x3C,0xA0,0xA0,0x30,0x30,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA523DA", "AF-S Nikkor 500mm f/4D IF-ED + TC-14E"},
2004 {0x4B,0x3C,0xA0,0xA0,0x30,0x30,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA523DA", "AF-S Nikkor 500mm f/4D IF-ED + TC-17E"},
2005 {0x4B,0x3C,0xA0,0xA0,0x30,0x30,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA523DA", "AF-S Nikkor 500mm f/4D IF-ED + TC-20E"},
2006 {0x4C,0x40,0x37,0x6E,0x2C,0x3C,0x4F,0x02,0x00,0x00,0x00, "Nikon", "JAA757DA", "AF Zoom-Nikkor 24-120mm f/3.5-5.6D IF"},
2007 {0x4D,0x40,0x3C,0x80,0x2C,0x3C,0x62,0x02,0x00,0x00,0x00, "Nikon", "JAA758DA", "AF Zoom-Nikkor 28-200mm f/3.5-5.6D IF"},
2008 {0x4E,0x48,0x72,0x72,0x18,0x18,0x51,0x02,0x00,0x00,0x00, "Nikon", "JAA329DA", "AF DC-Nikkor 135mm f/2D"},
2009 {0x4F,0x40,0x37,0x5C,0x2C,0x3C,0x53,0x06,0x00,0x00,0x00, "Nikon", "JBA701AA", "IX-Nikkor 24-70mm f/3.5-5.6"},
2010 {0x50,0x48,0x56,0x7C,0x30,0x3C,0x54,0x06,0x00,0x00,0x00, "Nikon", "JBA702AA", "IX-Nikkor 60-180mm f/4-5.6"},
2011 //                                                  "JBA703AC" "IX-Nikkor 20-60 mm f/3.5-5.6";
2012 //51
2013 //52
2014 {0x53,0x48,0x60,0x80,0x24,0x24,0x57,0x02,0x00,0x00,0x00, "Nikon", "JAA762DA", "AF Zoom-Nikkor 80-200mm f/2.8D ED"},
2015 {0x53,0x48,0x60,0x80,0x24,0x24,0x60,0x02,0x00,0x00,0x00, "Nikon", "JAA762DA", "AF Zoom-Nikkor 80-200mm f/2.8D ED"},
2016 {0x54,0x44,0x5C,0x7C,0x34,0x3C,0x58,0x02,0x00,0x00,0x00, "Nikon", "JAA763DA", "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED"},
2017 {0x54,0x44,0x5C,0x7C,0x34,0x3C,0x61,0x02,0x00,0x00,0x00, "Nikon", "JAA763DA", "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED"},
2018 //55
2019 {0x56,0x48,0x5C,0x8E,0x30,0x3C,0x5A,0x02,0x00,0x00,0x00, "Nikon", "JAA764DA", "AF Zoom-Nikkor 70-300mm f/4-5.6D ED"},
2020 //57
2021 //58
2022 {0x59,0x48,0x98,0x98,0x24,0x24,0x5D,0x02,0x07,0x00,0x00, "Nikon", "JAA524DA", "AF-S Nikkor 400mm f/2.8D IF-ED"},
2023 {0x59,0x48,0x98,0x98,0x24,0x24,0xF1,0x02,0x0F,0x00,0x00, "Nikon", "JAA524DA", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-14E"},
2024 {0x59,0x48,0x98,0x98,0x24,0x24,0xE1,0x02,0x0F,0x00,0x00, "Nikon", "JAA524DA", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-17E"},
2025 {0x59,0x48,0x98,0x98,0x24,0x24,0xF2,0x02,0x0F,0x00,0x00, "Nikon", "JAA524DA", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-20E"},
2026 {0x5A,0x3C,0x3E,0x56,0x30,0x3C,0x5E,0x06,0x00,0x00,0x00, "Nikon", "JBA704AA", "IX-Nikkor 30-60mm f/4-5.6"},
2027 {0x5B,0x44,0x56,0x7C,0x34,0x3C,0x5F,0x06,0x00,0x00,0x00, "Nikon", "JBA705AA", "IX-Nikkor 60-180mm f/4.5-5.6"},
2028 //                                                  "JBA706AC" "IX-Nikkor 20-60 mm f/3.5-5.6N";
2029 //5C
2030 {0x5D,0x48,0x3C,0x5C,0x24,0x24,0x63,0x02,0x01,0x00,0x00, "Nikon", "JAA767DA", "AF-S Zoom-Nikkor 28-70mm f/2.8D IF-ED"},
2031 {0x5E,0x48,0x60,0x80,0x24,0x24,0x64,0x02,0x03,0x00,0x00, "Nikon", "JAA765DA", "AF-S Zoom-Nikkor 80-200mm f/2.8D IF-ED"},
2032 {0x5F,0x40,0x3C,0x6A,0x2C,0x34,0x65,0x02,0x00,0x00,0x00, "Nikon", "JAA766DA", "AF Zoom-Nikkor 28-105mm f/3.5-4.5D IF"},
2033 {0x60,0x40,0x3C,0x60,0x2C,0x3C,0x66,0x02,0x00,0x00,0x00, "Nikon", "JAA769DA", "AF Zoom-Nikkor 28-80mm f/3.5-5.6D"},
2034 {0x61,0x44,0x5E,0x86,0x34,0x3C,0x67,0x02,0x00,0x00,0x00, "Nikon", "JAA768DA", "AF Zoom-Nikkor 75-240mm f/4.5-5.6D"},
2035 //62                69
2036 {0x63,0x48,0x2B,0x44,0x24,0x24,0x68,0x02,0x01,0x00,0x00, "Nikon", "JAA770DA", "AF-S Nikkor 17-35mm f/2.8D IF-ED"},
2037 {0x64,0x00,0x62,0x62,0x24,0x24,0x6A,0x02,0x40,0x00,0x00, "Nikon", "JAA628DA", "PC Micro-Nikkor 85mm f/2.8D"},
2038 {0x65,0x44,0x60,0x98,0x34,0x3C,0x6B,0x0A,0x00,0x00,0x00, "Nikon", "JAA771DA", "AF VR Zoom-Nikkor 80-400mm f/4.5-5.6D ED"},
2039 {0x66,0x40,0x2D,0x44,0x2C,0x34,0x6C,0x02,0x00,0x00,0x00, "Nikon", "JAA772DA", "AF Zoom-Nikkor 18-35mm f/3.5-4.5D IF-ED"},
2040 {0x67,0x48,0x37,0x62,0x24,0x30,0x6D,0x02,0x00,0x00,0x00, "Nikon", "JAA774DA", "AF Zoom-Nikkor 24-85mm f/2.8-4D IF"},
2041 {0x68,0x42,0x3C,0x60,0x2A,0x3C,0x6E,0x06,0x00,0x00,0x00, "Nikon", "JAA777DA", "AF Zoom-Nikkor 28-80mm f/3.3-5.6G"},
2042 {0x69,0x48,0x5C,0x8E,0x30,0x3C,0x6F,0x06,0x00,0x00,0x00, "Nikon", "JAA776DA", "AF Zoom-Nikkor 70-300mm f/4-5.6G"},
2043 {0x6A,0x48,0x8E,0x8E,0x30,0x30,0x70,0x02,0x03,0x00,0x00, "Nikon", "JAA334DA", "AF-S Nikkor 300mm f/4D IF-ED"},
2044 {0x6B,0x48,0x24,0x24,0x24,0x24,0x71,0x02,0x00,0x00,0x00, "Nikon", "JAA130DA", "AF Nikkor ED 14mm f/2.8D"},
2045 //6C                72
2046 {0x6D,0x48,0x8E,0x8E,0x24,0x24,0x73,0x02,0x03,0x00,0x00, "Nikon", "JAA335DA", "AF-S Nikkor 300mm f/2.8D IF-ED II"},
2047 {0x6E,0x48,0x98,0x98,0x24,0x24,0x74,0x02,0x03,0x00,0x00, "Nikon", "JAA525DA", "AF-S Nikkor 400mm f/2.8D IF-ED II"},
2048 {0x6F,0x3C,0xA0,0xA0,0x30,0x30,0x75,0x02,0x03,0x00,0x00, "Nikon", "JAA526DA", "AF-S Nikkor 500mm f/4D IF-ED II"},
2049 {0x70,0x3C,0xA6,0xA6,0x30,0x30,0x76,0x02,0x03,0x00,0x00, "Nikon", "JAA527DA", "AF-S Nikkor 600mm f/4D IF-ED II"},
2050 //71
2051 {0x72,0x48,0x4C,0x4C,0x24,0x24,0x77,0x00,0x00,0x00,0x00, "Nikon", "JAA012AA", "Nikkor 45mm f/2.8 P"},
2052 //73
2053 {0x74,0x40,0x37,0x62,0x2C,0x34,0x78,0x06,0x01,0x00,0x00, "Nikon", "JAA780DA", "AF-S Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED"},
2054 {0x75,0x40,0x3C,0x68,0x2C,0x3C,0x79,0x06,0x00,0x00,0x00, "Nikon", "JAA778DA", "AF Zoom-Nikkor 28-100mm f/3.5-5.6G"},
2055 {0x76,0x58,0x50,0x50,0x14,0x14,0x7A,0x02,0x00,0x00,0x00, "Nikon", "JAA013DA", "AF Nikkor 50mm f/1.8D"},
2056 {0x77,0x48,0x5C,0x80,0x24,0x24,0x7B,0x0E,0x03,0x00,0x00, "Nikon", "JAA781DA", "AF-S VR Zoom-Nikkor 70-200mm f/2.8G IF-ED"},
2057 {0x78,0x40,0x37,0x6E,0x2C,0x3C,0x7C,0x0E,0x01,0x00,0x00, "Nikon", "JAA782DA", "AF-S VR Zoom-Nikkor 24-120mm f/3.5-5.6G IF-ED"},
2058 {0x79,0x40,0x3C,0x80,0x2C,0x3C,0x7F,0x06,0x00,0x00,0x00, "Nikon", "JAA783DA", "AF Zoom-Nikkor 28-200mm f/3.5-5.6G IF-ED"},
2059 {0x7A,0x3C,0x1F,0x37,0x30,0x30,0x7E,0x06,0x01,0x01,0x00, "Nikon", "JAA784DA", "AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED"},
2060 {0x7B,0x48,0x80,0x98,0x30,0x30,0x80,0x0E,0x03,0x00,0x00, "Nikon", "JAA787DA", "AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED"},
2061 //7C                81
2062 {0x7D,0x48,0x2B,0x53,0x24,0x24,0x82,0x06,0x01,0x00,0x00, "Nikon", "JAA788DA", "AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED"},
2063 //7E                83
2064 {0x7F,0x40,0x2D,0x5C,0x2C,0x34,0x84,0x06,0x11,0x00,0x00, "Nikon", "JAA790DA", "AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED"},
2065 {0x80,0x48,0x1A,0x1A,0x24,0x24,0x85,0x06,0x00,0x00,0x00, "Nikon", "JAA629DA", "AF DX Fisheye-Nikkor 10.5mm f/2.8G ED"},
2066 {0x81,0x54,0x80,0x80,0x18,0x18,0x86,0x0E,0x03,0x00,0x00, "Nikon", "JAA336DA", "AF-S VR Nikkor 200mm f/2G IF-ED"},
2067 {0x82,0x48,0x8E,0x8E,0x24,0x24,0x87,0x0E,0x13,0x00,0x00, "Nikon", "JAA337DA", "AF-S VR Nikkor 300mm f/2.8G IF-ED"},
2068 {0x83,0x00,0xB0,0xB0,0x5A,0x5A,0x88,0x04,0x00,0x00,0x00, "Nikon", "", "FSA-L2, EDG 65, 800mm F13 G"},
2069 //84
2070 //85
2071 //86
2072 //87
2073 //88
2074 {0x89,0x3C,0x53,0x80,0x30,0x3C,0x8B,0x06,0x01,0x00,0x00, "Nikon", "JAA793DA", "AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED"},
2075 {0x8A,0x54,0x6A,0x6A,0x24,0x24,0x8C,0x0E,0x53,0x00,0x00, "Nikon", "JAA630DA", "AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED"},
2076 {0x8B,0x40,0x2D,0x80,0x2C,0x3C,0x8D,0x0E,0x01,0x00,0x00, "Nikon", "JAA794DA", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED"},
2077 //{0x8B,0x40,0x2D,0x80,0x2C,0x3C,0xFD,0x0E,0x01,0x01,0x00, "Nikon", "JAA794DA", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED"}, // Fix bug #1026.
2078 {0x8B,0x40,0x2D,0x80,0x2C,0x3C,0xFD,0x0E,0x01,0x02,0x00, "Nikon", "JAA813DA", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED II"},
2079 {0x8C,0x40,0x2D,0x53,0x2C,0x3C,0x8E,0x06,0x01,0x00,0x00, "Nikon", "JAA792DA", "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED"},
2080 {0x8D,0x44,0x5C,0x8E,0x34,0x3C,0x8F,0x0E,0x31,0x00,0x00, "Nikon", "JAA795DA", "AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED"},
2081 //8E                90
2082 {0x8F,0x40,0x2D,0x72,0x2C,0x3C,0x91,0x06,0x01,0x00,0x00, "Nikon", "JAA796DA", "AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED"},
2083 {0x90,0x3B,0x53,0x80,0x30,0x3C,0x92,0x0E,0x01,0x00,0x00, "Nikon", "JAA798DA", "AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED"},
2084 //91                93
2085 {0x92,0x48,0x24,0x37,0x24,0x24,0x94,0x06,0x01,0x00,0x00, "Nikon", "JAA801DA", "AF-S Zoom-Nikkor 14-24mm f/2.8G ED"},
2086 {0x93,0x48,0x37,0x5C,0x24,0x24,0x95,0x06,0x01,0x00,0x00, "Nikon", "JAA802DA", "AF-S Zoom-Nikkor 24-70mm f/2.8G ED"},
2087 {0x94,0x40,0x2D,0x53,0x2C,0x3C,0x96,0x06,0x01,0x00,0x00, "Nikon", "JAA797DA", "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II"},
2088 {0x95,0x4C,0x37,0x37,0x2C,0x2C,0x97,0x02,0x00,0x00,0x00, "Nikon", "JAA631DA", "PC-E Nikkor 24mm f/3.5D ED"},
2089 {0x95,0x00,0x37,0x37,0x2C,0x2C,0x97,0x06,0x00,0x00,0x00, "Nikon", "JAA631DA", "PC-E Nikkor 24mm f/3.5D ED"},
2090 {0x96,0x48,0x98,0x98,0x24,0x24,0x98,0x0E,0x13,0x00,0x00, "Nikon", "JAA528DA", "AF-S VR Nikkor 400mm f/2.8G ED"},
2091 {0x97,0x3C,0xA0,0xA0,0x30,0x30,0x99,0x0E,0x13,0x00,0x00, "Nikon", "JAA529DA", "AF-S VR Nikkor 500mm f/4G ED"},
2092 {0x98,0x3C,0xA6,0xA6,0x30,0x30,0x9A,0x0E,0x13,0x00,0x00, "Nikon", "JAA530DA", "AF-S VR Nikkor 600mm f/4G ED"},
2093 {0x99,0x40,0x29,0x62,0x2C,0x3C,0x9B,0x0E,0x01,0x00,0x00, "Nikon", "JAA800DA", "AF-S DX VR Zoom-Nikkor 16-85mm f/3.5-5.6G ED"},
2094 {0x9A,0x40,0x2D,0x53,0x2C,0x3C,0x9C,0x0E,0x01,0x00,0x00, "Nikon", "JAA803DA", "AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G"},
2095 {0x9B,0x54,0x4C,0x4C,0x24,0x24,0x9D,0x02,0x00,0x00,0x00, "Nikon", "JAA633DA", "PC-E Micro Nikkor 45mm f/2.8D ED"},
2096 {0x9B,0x00,0x4C,0x4C,0x24,0x24,0x9D,0x06,0x00,0x00,0x00, "Nikon", "JAA633DA", "PC-E Micro Nikkor 45mm f/2.8D ED"},
2097 {0x9C,0x54,0x56,0x56,0x24,0x24,0x9E,0x06,0x41,0x00,0x00, "Nikon", "JAA632DA", "AF-S Micro Nikkor 60mm f/2.8G ED"},
2098 {0x9D,0x54,0x62,0x62,0x24,0x24,0x9F,0x02,0x40,0x00,0x00, "Nikon", "JAA634DA", "PC-E Micro Nikkor 85mm f/2.8D"},
2099 {0x9D,0x00,0x62,0x62,0x24,0x24,0x9F,0x06,0x40,0x00,0x00, "Nikon", "JAA634DA", "PC-E Micro Nikkor 85mm f/2.8D"},
2100 {0x9E,0x40,0x2D,0x6A,0x2C,0x3C,0xA0,0x0E,0x01,0x00,0x00, "Nikon", "JAA805DA", "AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED"},
2101 {0x9F,0x58,0x44,0x44,0x14,0x14,0xA1,0x06,0x01,0x00,0x00, "Nikon", "JAA132DA", "AF-S DX Nikkor 35mm f/1.8G"},
2102 {0xA0,0x54,0x50,0x50,0x0C,0x0C,0xA2,0x06,0x01,0x00,0x00, "Nikon", "JAA014DA", "AF-S Nikkor 50mm f/1.4G"},
2103 {0xA1,0x40,0x18,0x37,0x2C,0x34,0xA3,0x06,0x01,0x00,0x00, "Nikon", "JAA804DA", "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED"},
2104 {0xA2,0x48,0x5C,0x80,0x24,0x24,0xA4,0x0E,0x13,0x00,0x00, "Nikon", "JAA807DA", "AF-S Nikkor 70-200mm f/2.8G ED VR II"},
2105 {0xA3,0x3C,0x29,0x44,0x30,0x30,0xA5,0x0E,0x01,0x00,0x00, "Nikon", "JAA806DA", "AF-S Nikkor 16-35mm f/4G ED VR"},
2106 {0xA4,0x54,0x37,0x37,0x0C,0x0C,0xA6,0x06,0x01,0x00,0x00, "Nikon", "JAA131DA", "AF-S Nikkor 24mm f/1.4G ED"},
2107 {0xA5,0x40,0x3C,0x8E,0x2C,0x3C,0xA7,0x0E,0x01,0x00,0x00, "Nikon", "JAA808DA", "AF-S Nikkor 28-300mm f/3.5-5.6G ED VR"},
2108 {0xA6,0x48,0x8E,0x8E,0x24,0x24,0xA8,0x0E,0x13,0x00,0x00, "Nikon", "JAA339DA", "AF-S Nikkor 300mm f/2.8G IF-ED VR II"},
2109 {0xA7,0x4B,0x62,0x62,0x2C,0x2C,0xA9,0x0E,0x41,0x00,0x00, "Nikon", "JAA637DA", "AF-S DX Micro Nikkor 85mm f/3.5G ED VR"},
2110 {0xA8,0x48,0x80,0x98,0x30,0x30,0xAA,0x0E,0x03,0x00,0x00, "Nikon", "JAA809DA", "AF-S Zoom-Nikkor 200-400mm f/4G IF-ED VR II"},
2111 {0xA9,0x54,0x80,0x80,0x18,0x18,0xAB,0x0E,0x13,0x00,0x00, "Nikon", "JAA340DA", "AF-S Nikkor 200mm f/2G ED VR II"},
2112 {0xAA,0x3C,0x37,0x6E,0x30,0x30,0xAC,0x0E,0x01,0x00,0x00, "Nikon", "JAA811DA", "AF-S Nikkor 24-120mm f/4G ED VR"},
2113 //AB                AD                                          -- no lens --
2114 {0xAC,0x38,0x53,0x8E,0x34,0x3C,0xAE,0x0E,0x01,0x00,0x00, "Nikon", "JAA814DA", "AF-S DX Nikkor 55-300mm f/4.5-5.6G ED VR"},
2115 {0xAD,0x3C,0x2D,0x8E,0x2C,0x3C,0xAF,0x0E,0x01,0x00,0x00, "Nikon", "JAA812DA", "AF-S DX Nikkor 18-300mm f/3.5-5.6G ED VR"},
2116 {0xAE,0x54,0x62,0x62,0x0C,0x0C,0xB0,0x06,0x01,0x00,0x00, "Nikon", "JAA338DA", "AF-S Nikkor 85mm f/1.4G"},
2117 {0xAF,0x54,0x44,0x44,0x0C,0x0C,0xB1,0x06,0x01,0x00,0x00, "Nikon", "JAA134DA", "AF-S Nikkor 35mm f/1.4G"},
2118 {0xB0,0x4C,0x50,0x50,0x14,0x14,0xB2,0x06,0x01,0x00,0x00, "Nikon", "JAA015DA", "AF-S Nikkor 50mm f/1.8G"},
2119 {0xB1,0x48,0x48,0x48,0x24,0x24,0xB3,0x06,0x01,0x00,0x00, "Nikon", "JAA638DA", "AF-S DX Micro Nikkor 40mm f/2.8G"},
2120 {0xB2,0x48,0x5C,0x80,0x30,0x30,0xB4,0x0E,0x01,0x00,0x00, "Nikon", "JAA815DA", "AF-S Nikkor 70-200mm f/4G ED VR"},
2121 {0xB3,0x4C,0x62,0x62,0x14,0x14,0xB5,0x06,0x01,0x00,0x00, "Nikon", "JAA341DA", "AF-S Nikkor 85mm f/1.8G"},
2122 {0xB4,0x40,0x37,0x62,0x2C,0x34,0xB6,0x0E,0x01,0x00,0x00, "Nikon", "JAA816DA", "AF-S Nikkor 24-85mm f/3.5-4.5G ED VR"},
2123 {0xB5,0x4C,0x3C,0x3C,0x14,0x14,0xB7,0x06,0x01,0x00,0x00, "Nikon", "JAA135DA", "AF-S Nikkor 28mm f/1.8G"},
2124 {0xB6,0x3C,0xB0,0xB0,0x3C,0x3C,0xB8,0x0E,0x01,0x00,0x00, "Nikon", "JAA531DA", "AF-S VR Nikkor 800mm f/5.6E FL ED"},
2125 {0xB6,0x3C,0xB0,0xB0,0x3C,0x3C,0xB8,0x4E,0x01,0x00,0x00, "Nikon", "JAA531DA", "AF-S VR Nikkor 800mm f/5.6E FL ED"},
2126 {0xB7,0x44,0x60,0x98,0x34,0x3C,0xB9,0x0E,0x01,0x00,0x00, "Nikon", "JAA817DA", "AF-S Nikkor 80-400mm f/4.5-5.6G ED VR"},
2127 {0xB8,0x40,0x2D,0x44,0x2C,0x34,0xBA,0x06,0x01,0x00,0x00, "Nikon", "JAA818DA", "AF-S Nikkor 18-35mm f/3.5-4.5G ED"},
2128 {0xA0,0x40,0x2D,0x74,0x2C,0x3C,0xBB,0x0E,0x01,0x00,0x01, "Nikon", "JAA819DA", "AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR"},
2129 {0xA1,0x54,0x55,0x55,0x0C,0x0C,0xBC,0x06,0x01,0x00,0x01, "Nikon", "JAA136DA", "AF-S Nikkor 58mm f/1.4G"},
2130 {0xA2,0x40,0x2D,0x53,0x2C,0x3C,0xBD,0x0E,0x01,0x00,0x01, "Nikon", "JAA820DA", "AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II"},
2131 {0xA4,0x40,0x2D,0x8E,0x2C,0x40,0xBF,0x0E,0x01,0x00,0x01, "Nikon", "JAA821DA", "AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR"},
2132 {0xA5,0x4C,0x44,0x44,0x14,0x14,0xC0,0x06,0x01,0x00,0x01, "Nikon", "JAA137DA", "AF-S Nikkor 35mm f/1.8G ED"},
2133 {0xA6,0x48,0x98,0x98,0x24,0x24,0xC1,0x0E,0x01,0x00,0x01, "Nikon", "JAA532DA", "AF-S Nikkor 400mm f/2.8E FL ED VR"},
2134 {0xA7,0x3C,0x53,0x80,0x30,0x3C,0xC2,0x0E,0x01,0x00,0x01, "Nikon", "JAA823DA", "AF-S DX Nikkor 55-200mm f/4-5.6G ED VR II"},
2135 {0xA8,0x48,0x8E,0x8E,0x30,0x30,0xC3,0x4E,0x01,0x00,0x01, "Nikon", "JAA342DA", "AF-S Nikkor 300mm f/4E PF ED VR"},
2136 {0xA8,0x48,0x8E,0x8E,0x30,0x30,0xC3,0x0E,0x01,0x00,0x01, "Nikon", "JAA342DA", "AF-S Nikkor 300mm f/4E PF ED VR"},
2137 {0xA9,0x4C,0x31,0x31,0x14,0x14,0xC4,0x06,0x01,0x00,0x01, "Nikon", "JAA138DA", "AF-S Nikkor 20mm f/1.8G ED"},
2138 {0xAA,0x48,0x37,0x5C,0x24,0x24,0xC5,0x4E,0x01,0x00,0x02, "Nikon", "JAA824DA", "AF-S Nikkor 24-70mm f/2.8E ED VR"},
2139 {0xAA,0x48,0x37,0x5C,0x24,0x24,0xC5,0x0E,0x01,0x00,0x02, "Nikon", "JAA824DA", "AF-S Nikkor 24-70mm f/2.8E ED VR"},
2140 {0xAB,0x3C,0xA0,0xA0,0x30,0x30,0xC6,0x4E,0x01,0x00,0x02, "Nikon", "JAA533DA", "AF-S Nikkor 500mm f/4E FL ED VR"},
2141 {0xAC,0x3C,0xA6,0xA6,0x30,0x30,0xC7,0x4E,0x01,0x00,0x02, "Nikon", "JAA534DA", "AF-S Nikkor 600mm f/4E FL ED VR"},
2142 {0xAD,0x48,0x28,0x60,0x24,0x30,0xC8,0x4E,0x01,0x00,0x02, "Nikon", "JAA825DA", "AF-S DX Nikkor 16-80mm f/2.8-4E ED VR"},
2143 {0xAD,0x48,0x28,0x60,0x24,0x30,0xC8,0x0E,0x01,0x00,0x02, "Nikon", "JAA825DA", "AF-S DX Nikkor 16-80mm f/2.8-4E ED VR"},
2144 {0xAE,0x3C,0x80,0xA0,0x3C,0x3C,0xC9,0x4E,0x01,0x00,0x02, "Nikon", "JAA822DA", "AF-S Nikkor 200-500mm f/5.6E ED VR"},
2145 {0xAE,0x3C,0x80,0xA0,0x3C,0x3C,0xC9,0x0E,0x01,0x00,0x02, "Nikon", "JAA822DA", "AF-S Nikkor 200-500mm f/5.6E ED VR"},
2146 {0xA0,0x40,0x2D,0x53,0x2C,0x3C,0xCA,0x8E,0x01,0x00,0x03, "Nikon", "JAA826DA", "AF-P DX Nikkor 18-55mm f/3.5-5.6G VR"},
2147 {0xA0,0x40,0x2D,0x53,0x2C,0x3C,0xCA,0x0E,0x01,0x00,0x03, "Nikon", "JAA827DA", "AF-P DX Nikkor 18-55mm f/3.5-5.6G"},
2148 //                  CB
2149 {0xAF,0x4C,0x37,0x37,0x14,0x14,0xCC,0x06,0x01,0x00,0x03, "Nikon", "JAA139DA", "AF-S Nikkor 24mm f/1.8G ED"},
2150 {0xA3,0x38,0x5C,0x8E,0x34,0x40,0xCE,0x8E,0x01,0x00,0x03, "Nikon", "JAA829DA", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED VR"},
2151 {0xA3,0x38,0x5C,0x8E,0x34,0x40,0xCE,0x0E,0x01,0x00,0x03, "Nikon", "JAA828DA", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED"},
2152 {0xA4,0x48,0x5C,0x80,0x24,0x24,0xCF,0x4E,0x01,0x00,0x03, "Nikon", "JAA830DA", "AF-S Nikkor 70-200mm f/2.8E FL ED VR"},
2153 {0xA4,0x48,0x5C,0x80,0x24,0x24,0xCF,0x0E,0x01,0x00,0x03, "Nikon", "JAA830DA", "AF-S Nikkor 70-200mm f/2.8E FL ED VR"},
2154 {0xA5,0x54,0x6A,0x6A,0x0C,0x0C,0xD0,0x46,0x01,0x00,0x03, "Nikon", "JAA343DA", "AF-S Nikkor 105mm f/1.4E ED"},
2155 {0xA5,0x54,0x6A,0x6A,0x0C,0x0C,0xD0,0x06,0x01,0x00,0x03, "Nikon", "JAA343DA", "AF-S Nikkor 105mm f/1.4E ED"},
2156 {0xA6,0x48,0x2F,0x2F,0x30,0x30,0xD1,0x46,0x01,0x00,0x03, "Nikon", "JAA639DA", "PC Nikkor 19mm f/4E ED"},
2157 {0xA6,0x48,0x2F,0x2F,0x30,0x30,0xD1,0x06,0x01,0x00,0x03, "Nikon", "JAA639DA", "PC Nikkor 19mm f/4E ED"},
2158 {0xA7,0x40,0x11,0x26,0x2C,0x34,0xD2,0x46,0x01,0x00,0x03, "Nikon", "JAA831DA", "AF-S Fisheye Nikkor 8-15mm f/3.5-4.5E ED"},
2159 {0xA7,0x40,0x11,0x26,0x2C,0x34,0xD2,0x06,0x01,0x00,0x03, "Nikon", "JAA831DA", "AF-S Fisheye Nikkor 8-15mm f/3.5-4.5E ED"},
2160 {0xA8,0x38,0x18,0x30,0x34,0x3C,0xD3,0x8E,0x01,0x00,0x03, "Nikon", "JAA832DA", "AF-P DX Nikkor 10-20mm f/4.5-5.6G VR"},
2161 {0xA8,0x38,0x18,0x30,0x34,0x3C,0xD3,0x0E,0x01,0x00,0x03, "Nikon", "JAA832DA", "AF-P DX Nikkor 10-20mm f/4.5-5.6G VR"},
2162 //A9                D4
2163 //AA                D5
2164 {0xAB,0x44,0x5C,0x8E,0x34,0x3C,0xD6,0xCE,0x01,0x00,0x03, "Nikon", "JAA833DA", "AF-P Nikkor 70-300mm f/4.5-5.6E ED VR"},
2165 {0xAB,0x44,0x5C,0x8E,0x34,0x3C,0xD6,0x0E,0x01,0x00,0x03, "Nikon", "JAA833DA", "AF-P Nikkor 70-300mm f/4.5-5.6E ED VR"},
2166 {0xAC,0x54,0x3C,0x3C,0x0C,0x0C,0xD7,0x46,0x01,0x00,0x03, "Nikon", "JAA140DA", "AF-S Nikkor 28mm f/1.4E ED"},
2167 {0xAC,0x54,0x3C,0x3C,0x0C,0x0C,0xD7,0x06,0x01,0x00,0x03, "Nikon", "JAA140DA", "AF-S Nikkor 28mm f/1.4E ED"},
2168 //
2169 //
2170 //
2171 //
2172 //   "AF-S DX Nikkor 18-200mm f/3.5-5.6G ED VR II"
2173 //
2174 {0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, "Nikon", "JAA90701", "TC-16A"},
2175 {0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, "Nikon", "JAA90701", "TC-16A"},
2176 //
2177 //------------------------------------------------------------------------------
2178 // Sigma lenses by focal length, first fixed then zoom lenses
2179 //------------------------------------------------------------------------------
2180 //
2181 {0xFE,0x47,0x00,0x00,0x24,0x24,0x4B,0x06,0x01,0x00,0x00, "Sigma", "486556", "4.5mm F2.8 EX DC HSM Circular Fisheye"},
2182 {0x26,0x48,0x11,0x11,0x30,0x30,0x1C,0x02,0x00,0x00,0x00, "Sigma", "483", "8mm F4 EX Circular Fisheye"},
2183 {0x79,0x40,0x11,0x11,0x2C,0x2C,0x1C,0x06,0x00,0x00,0x00, "Sigma", "485597", "8mm F3.5 EX Circular Fisheye"},
2184 {0xDC,0x48,0x19,0x19,0x24,0x24,0x4B,0x06,0x01,0x00,0x00, "Sigma", "477554", "10mm F2.8 EX DC HSM Fisheye"},
2185 {0x02,0x3F,0x24,0x24,0x2C,0x2C,0x02,0x00,0x00,0x00,0x00, "Sigma", "468", "14mm F3.5"},
2186 {0x48,0x48,0x24,0x24,0x24,0x24,0x4B,0x02,0x01,0x00,0x00, "Sigma", "", "14mm F2.8 EX Aspherical HSM"},
2187 {0x26,0x48,0x27,0x27,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "476441", "15mm F2.8 EX Diagonal Fisheye"},
2188 {0xEA,0x48,0x27,0x27,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "15mm F2.8 EX Diagonal Fisheye"},
2189 //M                                         "Sigma" "410"    "18mm F3.5";
2190 {0x26,0x58,0x31,0x31,0x14,0x14,0x1C,0x02,0x00,0x00,0x00, "Sigma", "411442", "20mm F1.8 EX DG Aspherical RF"},
2191 {0x79,0x54,0x31,0x31,0x0C,0x0C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "412555", "20mm F1.4 DG HSM | A"},
2192 {0x26,0x58,0x37,0x37,0x14,0x14,0x1C,0x02,0x00,0x00,0x00, "Sigma", "432447", "24mm F1.8 EX DG Aspherical Macro"},
2193 {0xE1,0x58,0x37,0x37,0x14,0x14,0x1C,0x02,0x00,0x00,0x00, "Sigma", "432447", "24mm F1.8 EX DG Aspherical Macro"},
2194 {0x02,0x46,0x37,0x37,0x25,0x25,0x02,0x00,0x00,0x00,0x00, "Sigma", "438", "24mm F2.8 Super Wide II Macro"},
2195 {0x26,0x58,0x3C,0x3C,0x14,0x14,0x1C,0x02,0x00,0x00,0x00, "Sigma", "440442", "28mm F1.8 EX DG Aspherical Macro"},
2196 {0x48,0x54,0x3E,0x3E,0x0C,0x0C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "477554", "30mm F1.4 EX DC HSM"},
2197 {0xF8,0x54,0x3E,0x3E,0x0C,0x0C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "477554", "30mm F1.4 EX DC HSM"},
2198 {0x91,0x54,0x44,0x44,0x0C,0x0C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "", "35mm F1.4 DG HSM"},
2199 {0xDE,0x54,0x50,0x50,0x0C,0x0C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "310554", "50mm F1.4 EX DG HSM"},
2200 {0x88,0x54,0x50,0x50,0x0C,0x0C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "311551", "50mm F1.4 DG HSM | A"},
2201 {0x02,0x48,0x50,0x50,0x24,0x24,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "Macro 50mm F2.8"},
2202 {0x32,0x54,0x50,0x50,0x24,0x24,0x35,0x02,0x00,0x00,0x00, "Sigma", "346447", "Macro 50mm F2.8 EX DG"},
2203 {0xE3,0x54,0x50,0x50,0x24,0x24,0x35,0x02,0x00,0x00,0x00, "Sigma", "", "Macro 50mm F2.8 EX DG"},
2204 {0x79,0x48,0x5C,0x5C,0x24,0x24,0x1C,0x06,0x00,0x00,0x00, "Sigma", "270599", "Macro 70mm F2.8 EX DG"},
2205 {0x9B,0x54,0x62,0x62,0x0C,0x0C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "85mm F1.4 EX DG HSM"},
2206 {0x02,0x48,0x65,0x65,0x24,0x24,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "Macro 90mm F2.8"},
2207 {0x32,0x54,0x6A,0x6A,0x24,0x24,0x35,0x02,0x00,0x02,0x00, "Sigma", "256", "Macro 105mm F2.8 EX DG"},
2208 {0xE5,0x54,0x6A,0x6A,0x24,0x24,0x35,0x02,0x40,0x00,0x00, "Sigma", "257446", "Macro 105mm F2.8 EX DG"},
2209 {0x97,0x48,0x6A,0x6A,0x24,0x24,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "Macro 105mm F2.8 EX DG OS HSM"},
2210 {0x48,0x48,0x76,0x76,0x24,0x24,0x4B,0x06,0x43,0x00,0x00, "Sigma", "104559", "APO Macro 150mm F2.8 EX DG HSM"},
2211 {0xF5,0x48,0x76,0x76,0x24,0x24,0x4B,0x06,0x43,0x00,0x00, "Sigma", "104559", "APO Macro 150mm F2.8 EX DG HSM"},
2212 {0x99,0x48,0x76,0x76,0x24,0x24,0x4B,0x0E,0x43,0x00,0x00, "Sigma", "", "APO Macro 150mm F2.8 EX DG OS HSM"},
2213 {0x48,0x4C,0x7C,0x7C,0x2C,0x2C,0x4B,0x02,0x43,0x00,0x00, "Sigma", "", "APO Macro 180mm F3.5 EX DG HSM"},
2214 {0x48,0x4C,0x7D,0x7D,0x2C,0x2C,0x4B,0x02,0x43,0x00,0x00, "Sigma", "105556", "APO Macro 180mm F3.5 EX DG HSM"},
2215 {0x94,0x48,0x7C,0x7C,0x24,0x24,0x4B,0x0E,0x43,0x00,0x00, "Sigma", "", "APO Macro 180mm F2.8 EX DG OS HSM"},
2216 //M                                         "Sigma" ""       "APO 300mm F2.8";
2217 {0x48,0x54,0x8E,0x8E,0x24,0x24,0x4B,0x02,0x03,0x00,0x00, "Sigma", "", "APO 300mm F2.8 EX DG HSM"},
2218 {0xFB,0x54,0x8E,0x8E,0x24,0x24,0x4B,0x02,0x13,0x00,0x00, "Sigma", "195557", "APO 300mm F2.8 EX DG HSM"},
2219 {0x26,0x48,0x8E,0x8E,0x30,0x30,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "APO Tele Macro 300mm F4"},
2220 {0x02,0x2F,0x98,0x98,0x3D,0x3D,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "APO 400mm F5.6"},
2221 {0x26,0x3C,0x98,0x98,0x3C,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "APO Tele Macro 400mm F5.6"},
2222 {0x02,0x37,0xA0,0xA0,0x34,0x34,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "APO 500mm F4.5"},
2223 {0x48,0x44,0xA0,0xA0,0x34,0x34,0x4B,0x02,0x03,0x00,0x00, "Sigma", "", "APO 500mm F4.5 EX HSM"},
2224 {0xF1,0x44,0xA0,0xA0,0x34,0x34,0x4B,0x02,0x03,0x00,0x00, "Sigma", "184551", "APO 500mm F4.5 EX DG HSM"},
2225 {0x02,0x34,0xA0,0xA0,0x44,0x44,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "APO 500mm F7.2"},
2226 {0x02,0x3C,0xB0,0xB0,0x3C,0x3C,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "APO 800mm F5.6"},
2227 {0x48,0x3C,0xB0,0xB0,0x3C,0x3C,0x4B,0x02,0x03,0x00,0x00, "Sigma", "", "APO 800mm F5.6 EX HSM"},
2228 //M                                         "Sigma" "152550" "APO 800mm F5.6 EX DG HSM";
2229 //M2    B8 B8 49 49 02" "00" "00" "00" "00" "Sigma" ""       "APO 1000mm F8.0";
2230 //
2231 {0x9E,0x38,0x11,0x29,0x34,0x3C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "", "8-16mm F4.5-5.6 DC HSM"},
2232 {0xA1,0x41,0x19,0x31,0x2C,0x2C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "", "10-20mm F3.5 EX DC HSM"},
2233 {0x48,0x3C,0x19,0x31,0x30,0x3C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "201555", "10-20mm F4-5.6 EX DC HSM"},
2234 {0xF9,0x3C,0x19,0x31,0x30,0x3C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "201555", "10-20mm F4-5.6 EX DC HSM"},
2235 {0x48,0x38,0x1F,0x37,0x34,0x3C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "200558", "12-24mm F4.5-5.6 EX DG Aspherical HSM"},
2236 {0xF0,0x38,0x1F,0x37,0x34,0x3C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "200558", "12-24mm F4.5-5.6 EX DG Aspherical HSM"},
2237 {0x96,0x38,0x1F,0x37,0x34,0x3C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "12-24mm F4.5-5.6 II DG HSM"},
2238 {0x26,0x40,0x27,0x3F,0x2C,0x34,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "15-30mm F3.5-4.5 EX DG Aspherical DF"},
2239 {0x48,0x48,0x2B,0x44,0x24,0x30,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "17-35mm F2.8-4 EX DG  Aspherical HSM"},
2240 {0x26,0x54,0x2B,0x44,0x24,0x30,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "17-35mm F2.8-4 EX Aspherical"},
2241 {0x9D,0x48,0x2B,0x50,0x24,0x24,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "17-50mm F2.8 EX DC OS HSM"},
2242 {0x8F,0x48,0x2B,0x50,0x24,0x24,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "17-50mm F2.8 EX DC OS HSM"},
2243 {0x7A,0x47,0x2B,0x5C,0x24,0x34,0x4B,0x06,0x00,0x00,0x00, "Sigma", "689599", "17-70mm F2.8-4.5 DC Macro Asp. IF HSM"},
2244 {0x7A,0x48,0x2B,0x5C,0x24,0x34,0x4B,0x06,0x00,0x00,0x00, "Sigma", "689599", "17-70mm F2.8-4.5 DC Macro Asp. IF HSM"},
2245 {0x7F,0x48,0x2B,0x5C,0x24,0x34,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "17-70mm F2.8-4.5 DC Macro Asp. IF"},
2246 {0x8E,0x3C,0x2B,0x5C,0x24,0x30,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "17-70mm F2.8-4 DC MACRO OS HSM | C"},
2247 {0xA0,0x48,0x2A,0x5C,0x24,0x30,0x4B,0x0E,0x00,0x00,0xFE, "Sigma", "", "17-70mm F2.8-4 DC Macro OS HSM"},
2248 {0x8B,0x4C,0x2D,0x44,0x14,0x14,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "18-35mm F1.8 DC HSM"},
2249 {0x26,0x40,0x2D,0x44,0x2B,0x34,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "18-35mm F3.5-4.5 Aspherical"},
2250 {0x26,0x48,0x2D,0x50,0x24,0x24,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "18-50mm F2.8 EX DC"},
2251 {0x7F,0x48,0x2D,0x50,0x24,0x24,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "18-50mm F2.8 EX DC Macro"},
2252 {0x7A,0x48,0x2D,0x50,0x24,0x24,0x4B,0x06,0x01,0x00,0x00, "Sigma", "582593", "18-50mm F2.8 EX DC Macro"},
2253 {0xF6,0x48,0x2D,0x50,0x24,0x24,0x4B,0x06,0x01,0x00,0x00, "Sigma", "582593", "18-50mm F2.8 EX DC Macro"},
2254 {0xA4,0x47,0x2D,0x50,0x24,0x34,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "", "18-50mm F2.8-4.5 DC OS HSM"},
2255 {0x26,0x40,0x2D,0x50,0x2C,0x3C,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "18-50mm F3.5-5.6 DC"},
2256 {0x7A,0x40,0x2D,0x50,0x2C,0x3C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "551551", "18-50mm F3.5-5.6 DC HSM"},
2257 {0x26,0x40,0x2D,0x70,0x2B,0x3C,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "18-125mm F3.5-5.6 DC"},
2258 {0xCD,0x3D,0x2D,0x70,0x2E,0x3C,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "853556", "18-125mm F3.8-5.6 DC OS HSM"},
2259 {0x26,0x40,0x2D,0x80,0x2C,0x40,0x1C,0x06,0x00,0x00,0x00, "Sigma", "777555", "18-200mm F3.5-6.3 DC"},
2260 {0xFF,0x40,0x2D,0x80,0x2C,0x40,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "18-200mm F3.5-6.3 DC"},
2261 {0x7A,0x40,0x2D,0x80,0x2C,0x40,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "888558", "18-200mm F3.5-6.3 DC OS HSM"},
2262 {0xED,0x40,0x2D,0x80,0x2C,0x40,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "888558", "18-200mm F3.5-6.3 DC OS HSM"},
2263 {0x90,0x40,0x2D,0x80,0x2C,0x40,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "", "18-200mm F3.5-6.3 II DC OS HSM"},
2264 {0xA5,0x40,0x2D,0x88,0x2C,0x40,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "", "18-250mm F3.5-6.3 DC OS HSM"},
2265 {0x92,0x39,0x2D,0x88,0x2C,0x40,0x4B,0x0E,0x01,0x00,0x00, "Sigma", "", "18-250mm F3.5-6.3 DC OS Macro HSM"},
2266 {0x26,0x48,0x31,0x49,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "20-40mm F2.8"},
2267 {0x02,0x3A,0x37,0x50,0x31,0x3D,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "24-50mm F4-5.6 UC"},
2268 {0x26,0x48,0x37,0x56,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "547448", "24-60mm F2.8 EX DG"},
2269 {0xB6,0x48,0x37,0x56,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "547448", "24-60mm F2.8 EX DG"},
2270 {0xA6,0x48,0x37,0x5C,0x24,0x24,0x4B,0x06,0x01,0x00,0x00, "Sigma", "571559", "24-70mm F2.8 IF EX DG HSM"},
2271 {0x26,0x54,0x37,0x5C,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "24-70mm F2.8 EX DG Macro"},
2272 {0x67,0x54,0x37,0x5C,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "548445", "24-70mm F2.8 EX DG Macro"},
2273 {0xE9,0x54,0x37,0x5C,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "548445", "24-70mm F2.8 EX DG Macro"},
2274 {0x26,0x40,0x37,0x5C,0x2C,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "24-70mm F3.5-5.6 Aspherical HF"},
2275 {0x8A,0x3C,0x37,0x6A,0x30,0x30,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "24-105mm F4 DG OS HSM"},
2276 {0x26,0x54,0x37,0x73,0x24,0x34,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "24-135mm F2.8-4.5"},
2277 {0x02,0x46,0x3C,0x5C,0x25,0x25,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "28-70mm F2.8"},
2278 {0x26,0x54,0x3C,0x5C,0x24,0x24,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-70mm F2.8 EX"},
2279 {0x26,0x48,0x3C,0x5C,0x24,0x24,0x1C,0x06,0x00,0x00,0x00, "Sigma", "549442", "28-70mm F2.8 EX DG"},
2280 {0x79,0x48,0x3C,0x5C,0x24,0x24,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "28-70mm F2.8 EX DG"},
2281 {0x26,0x48,0x3C,0x5C,0x24,0x30,0x1C,0x02,0x00,0x00,0x00, "Sigma", "634445", "28-70mm F2.8-4 DG"},
2282 {0x02,0x3F,0x3C,0x5C,0x2D,0x35,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "28-70mm F3.5-4.5 UC"},
2283 {0x26,0x40,0x3C,0x60,0x2C,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-80mm F3.5-5.6 Mini Zoom Macro II Aspherical"},
2284 {0x26,0x40,0x3C,0x65,0x2C,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-90mm F3.5-5.6 Macro"},
2285 {0x26,0x48,0x3C,0x6A,0x24,0x30,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-105mm F2.8-4 Aspherical"},
2286 {0x26,0x3E,0x3C,0x6A,0x2E,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-105mm F3.8-5.6 UC-III Aspherical IF"},
2287 {0x26,0x40,0x3C,0x80,0x2C,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro"},
2288 {0x26,0x40,0x3C,0x80,0x2B,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro"},
2289 {0x26,0x3D,0x3C,0x80,0x2F,0x3D,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-300mm F3.8-5.6 Aspherical"},
2290 {0x26,0x41,0x3C,0x8E,0x2C,0x40,0x1C,0x02,0x00,0x00,0x00, "Sigma", "795443", "28-300mm F3.5-6.3 DG Macro"},
2291 {0xE6,0x41,0x3C,0x8E,0x2C,0x40,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-300mm F3.5-6.3 DG Macro"},
2292 {0x26,0x40,0x3C,0x8E,0x2C,0x40,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "28-300mm F3.5-6.3 Macro"},
2293 {0x02,0x3B,0x44,0x61,0x30,0x3D,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "35-80mm F4-5.6"},
2294 {0x02,0x40,0x44,0x73,0x2B,0x36,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "35-135mm F3.5-4.5 a"},
2295 {0xCC,0x4C,0x50,0x68,0x14,0x14,0x4B,0x06,0x00,0x00,0x00, "Sigma", "", "50-100mm F1.8 DC HSM | A"},
2296 {0x7A,0x47,0x50,0x76,0x24,0x24,0x4B,0x06,0x03,0x00,0x00, "Sigma", "", "50-150mm F2.8 EX APO DC HSM"},
2297 {0xFD,0x47,0x50,0x76,0x24,0x24,0x4B,0x06,0x03,0x00,0x00, "Sigma", "691554", "50-150mm F2.8 EX APO DC HSM II"},
2298 {0x98,0x48,0x50,0x76,0x24,0x24,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "", "50-150 f/2.8 EX DC APO OS HSM"},
2299 {0x48,0x3C,0x50,0xA0,0x30,0x40,0x4B,0x02,0x03,0x00,0x00, "Sigma", "736552", "APO 50-500mm F4-6.3 EX HSM"},
2300 {0x9F,0x37,0x50,0xA0,0x34,0x40,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "", "50-500mm F4.5-6.3 APO DG OS HSM"},
2301 //M                                         "Sigma" "686550" "50-200mm F4-5.6 DC OS HSM";
2302 {0x26,0x3C,0x54,0x80,0x30,0x3C,0x1C,0x06,0x00,0x00,0x00, "Sigma", "", "55-200mm F4-5.6 DC"},
2303 {0x7A,0x3B,0x53,0x80,0x30,0x3C,0x4B,0x06,0x01,0x00,0x00, "Sigma", "", "55-200mm F4-5.6 DC HSM"},
2304 {0x48,0x54,0x5C,0x80,0x24,0x24,0x4B,0x02,0x00,0x00,0x00, "Sigma", "", "70-200mm F2.8 EX APO IF HSM"},
2305 {0x7A,0x48,0x5C,0x80,0x24,0x24,0x4B,0x06,0x03,0x00,0x00, "Sigma", "", "70-200mm F2.8 EX APO DG Macro HSM II"},
2306 {0xEE,0x48,0x5C,0x80,0x24,0x24,0x4B,0x06,0x03,0x00,0x00, "Sigma", "579555", "70-200mm F2.8 EX APO DG Macro HSM II"},
2307 {0x9C,0x48,0x5C,0x80,0x24,0x24,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "", "70-200mm F2.8 EX DG OS HSM"},
2308 {0x02,0x46,0x5C,0x82,0x25,0x25,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "70-210mm F2.8 APO"},
2309 {0x02,0x40,0x5C,0x82,0x2C,0x35,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "APO 70-210mm F3.5-4.5"},
2310 {0x26,0x3C,0x5C,0x82,0x30,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "70-210mm F4-5.6 UC-II"},
2311 {0x26,0x3C,0x5C,0x8E,0x30,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "70-300mm F4-5.6 DG Macro"},
2312 {0x56,0x3C,0x5C,0x8E,0x30,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "70-300mm F4-5.6 APO Macro Super II"},
2313 {0xE0,0x3C,0x5C,0x8E,0x30,0x3C,0x4B,0x06,0x00,0x00,0x00, "Sigma", "508555", "APO 70-300mm F4-5.6 DG Macro"},
2314 {0xA3,0x3C,0x5C,0x8E,0x30,0x3C,0x4B,0x0E,0x00,0x00,0x00, "Sigma", "572556", "70-300mm F4-5.6 DG OS"},
2315 {0x02,0x37,0x5E,0x8E,0x35,0x3D,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "75-300mm F4.5-5.6 APO"},
2316 {0x02,0x3A,0x5E,0x8E,0x32,0x3D,0x02,0x00,0x00,0x00,0x00, "Sigma", "", "75-300mm F4.0-5.6"},
2317 {0x77,0x44,0x61,0x98,0x34,0x3C,0x7B,0x0E,0x03,0x00,0x00, "Sigma", "", "80-400mm f4.5-5.6 EX OS"},
2318 {0x77,0x44,0x60,0x98,0x34,0x3C,0x7B,0x0E,0x03,0x00,0x00, "Sigma", "", "80-400mm f4.5-5.6 APO DG D OS"},
2319 {0x48,0x48,0x68,0x8E,0x30,0x30,0x4B,0x02,0x03,0x00,0x00, "Sigma", "134556", "APO 100-300mm F4 EX IF HSM"},
2320 {0xF3,0x48,0x68,0x8E,0x30,0x30,0x4B,0x02,0x13,0x00,0x00, "Sigma", "134556", "APO 100-300mm F4 EX IF HSM"},
2321 {0x48,0x54,0x6F,0x8E,0x24,0x24,0x4B,0x02,0x03,0x00,0x00, "Sigma", "", "APO 120-300mm F2.8 EX DG HSM"},
2322 {0x7A,0x54,0x6E,0x8E,0x24,0x24,0x4B,0x02,0x03,0x00,0x00, "Sigma", "135553", "APO 120-300mm F2.8 EX DG HSM"},
2323 {0xFA,0x54,0x6E,0x8E,0x24,0x24,0x4B,0x02,0x03,0x00,0x00, "Sigma", "135553", "APO 120-300mm F2.8 EX DG HSM"},
2324 {0xCF,0x38,0x6E,0x98,0x34,0x3C,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "728557", "APO 120-400mm F4.5-5.6 DG OS HSM"},
2325 {0xC3,0x34,0x68,0x98,0x38,0x40,0x4B,0x4E,0x03,0x00,0x00, "Sigma", "", "100-400mm F5-6.3 DG OS HSM C"},
2326 {0x8D,0x48,0x6E,0x8E,0x24,0x24,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "", "120-300mm F2.8 DG OS HSM | S"},
2327 {0x26,0x44,0x73,0x98,0x34,0x3C,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "135-400mm F4.5-5.6 APO Aspherical"},
2328 {0xCE,0x34,0x76,0xA0,0x38,0x40,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "737559", "APO 150-500mm F5-6.3 DG OS HSM"},
2329 {0x81,0x34,0x76,0xA6,0x38,0x40,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "", "150-600mm F5-6.3 DG OS HSM Sports"},
2330 {0x82,0x34,0x76,0xA6,0x38,0x40,0x4B,0x0E,0x03,0x00,0x00, "Sigma", "", "150-600mm F5-6.3 DG OS HSM Contemporary"},
2331 {0x26,0x40,0x7B,0xA0,0x34,0x40,0x1C,0x02,0x00,0x00,0x00, "Sigma", "", "APO 170-500mm F5-6.3 Aspherical RF"},
2332 {0xA7,0x49,0x80,0xA0,0x24,0x24,0x4B,0x06,0x03,0x00,0x00, "Sigma", "", "APO 200-500mm F2.8 EX DG"},
2333 {0x48,0x3C,0x8E,0xB0,0x3C,0x3C,0x4B,0x02,0x03,0x00,0x00, "Sigma", "595555", "APO 300-800mm F5.6 EX DG HSM"},
2334 //
2335 //------------------------------------------------------------------------------
2336 // Tamron lenses by focal length, first fixed then zoom lenses
2337 //------------------------------------------------------------------------------
2338 //
2339 {0x00,0x47,0x25,0x25,0x24,0x24,0x00,0x02,0x00,0x00,0x00, "Tamron", "69E", "SP AF 14mm F/2.8 Aspherical (IF)"},
2340 {0xE8,0x4C,0x44,0x44,0x14,0x14,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "F012", "SP 35mm F/1.8 Di VC USD"},
2341 {0xE7,0x4C,0x4C,0x4C,0x14,0x14,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "F013", "SP 45mm F/1.8 Di VC USD"},
2342 {0xF4,0x54,0x56,0x56,0x18,0x18,0x84,0x06,0x01,0x00,0x00, "Tamron", "G005", "SP AF 60mm F/2 Di II LD (IF) Macro 1:1"},
2343 {0x1E,0x5D,0x64,0x64,0x20,0x20,0x13,0x00,0x40,0x00,0x00, "Tamron", "52E", "SP AF 90mm F/2.5"},
2344 {0x20,0x5A,0x64,0x64,0x20,0x20,0x14,0x00,0x40,0x00,0x00, "Tamron", "152E", "SP AF 90mm F/2.5 Macro"},
2345 {0x22,0x53,0x64,0x64,0x24,0x24,0xE0,0x02,0x40,0x00,0x00, "Tamron", "72E", "SP AF 90mm F/2.8 Macro 1:1"},
2346 {0x32,0x53,0x64,0x64,0x24,0x24,0x35,0x02,0x40,0x01,0x00, "Tamron", "172E", "SP AF 90mm F/2.8 Macro 1:1"},
2347 {0x32,0x53,0x64,0x64,0x24,0x24,0x35,0x02,0x40,0x02,0x00, "Tamron", "272E", "SP AF 90mm F/2.8 Di Macro 1:1"},
2348 {0xF8,0x55,0x64,0x64,0x24,0x24,0x84,0x06,0x41,0x00,0x00, "Tamron", "272NII", "SP AF 90mm F/2.8 Di Macro 1:1"},
2349 {0xF8,0x54,0x64,0x64,0x24,0x24,0xDF,0x06,0x41,0x00,0x00, "Tamron", "272NII", "SP AF 90mm F/2.8 Di Macro 1:1"},
2350 {0xFE,0x54,0x64,0x64,0x24,0x24,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "F004", "SP 90mm F/2.8 Di VC USD MACRO 1:1"},
2351 {0xE4,0x54,0x64,0x64,0x24,0x24,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "F017", "SP 90mm f/2.8 Di VC USD Macro 1:1"},
2352 {0x00,0x4C,0x7C,0x7C,0x2C,0x2C,0x00,0x02,0x00,0x00,0x00, "Tamron", "B01", "SP AF 180mm F/3.5 Di Model"},
2353 {0x21,0x56,0x8E,0x8E,0x24,0x24,0x14,0x00,0x00,0x00,0x00, "Tamron", "60E", "SP AF 300mm F/2.8 LD-IF"},
2354 {0x27,0x54,0x8E,0x8E,0x24,0x24,0x1D,0x02,0x00,0x00,0x00, "Tamron", "360E", "SP AF 300mm F/2.8 LD-IF"},
2355 //
2356 {0xF6,0x3F,0x18,0x37,0x2C,0x34,0x84,0x06,0x01,0x00,0x00, "Tamron", "B001", "SP AF 10-24mm F/3.5-4.5 Di II LD Aspherical (IF)"},
2357 {0xF6,0x3F,0x18,0x37,0x2C,0x34,0xDF,0x06,0x01,0x00,0x00, "Tamron", "B001", "SP AF 10-24mm F/3.5-4.5 Di II LD Aspherical (IF)"},
2358 {0x00,0x36,0x1C,0x2D,0x34,0x3C,0x00,0x06,0x00,0x00,0x00, "Tamron", "A13", "SP AF 11-18mm F/4.5-5.6 Di II LD Aspherical (IF)"},
2359 {0xE9,0x48,0x27,0x3E,0x24,0x24,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "A012", "SP 15-30mm F/2.8 Di VC USD"},
2360 {0xEA,0x40,0x29,0x8E,0x2C,0x40,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "B016", "AF 16-300mm F/3.5-6.3 Di II VC PZD"},
2361 {0x07,0x46,0x2B,0x44,0x24,0x30,0x03,0x02,0x00,0x00,0x00, "Tamron", "A05", "SP AF 17-35mm F/2.8-4 Di LD Aspherical (IF)"},
2362 {0x00,0x53,0x2B,0x50,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tamron", "A16", "SP AF 17-50mm F/2.8 XR Di II LD Aspherical (IF)"},
2363 {0x00,0x54,0x2B,0x50,0x24,0x24,0x00,0x06,0x01,0x00,0x00, "Tamron", "A16NII", "SP AF 17-50mm F/2.8 XR Di II LD Aspherical (IF)"},
2364 {0xFB,0x54,0x2B,0x50,0x24,0x24,0x84,0x06,0x01,0x00,0x00, "Tamron", "A16NII", "SP AF 17-50mm F/2.8 XR Di II LD Aspherical (IF)"},
2365 {0xF3,0x54,0x2B,0x50,0x24,0x24,0x84,0x0E,0x01,0x00,0x00, "Tamron", "B005", "SP AF 17-50mm F/2.8 XR Di II VC LD Aspherical (IF)"},
2366 {0x00,0x3F,0x2D,0x80,0x2B,0x40,0x00,0x06,0x00,0x00,0x00, "Tamron", "A14", "AF 18-200mm F/3.5-6.3 XR Di II LD Aspherical (IF)"},
2367 {0x00,0x3F,0x2D,0x80,0x2C,0x40,0x00,0x06,0x00,0x00,0x00, "Tamron", "A14", "AF 18-200mm F/3.5-6.3 XR Di II LD Aspherical (IF) Macro"},
2368 {0x00,0x40,0x2D,0x80,0x2C,0x40,0x00,0x06,0x01,0x00,0x00, "Tamron", "A14NII", "AF 18-200mm F/3.5-6.3 XR Di II LD Aspherical (IF) Macro"},
2369 {0xFC,0x40,0x2D,0x80,0x2C,0x40,0xDF,0x06,0x01,0x00,0x00, "Tamron", "A14NII", "AF 18-200mm F/3.5-6.3 XR Di II LD Aspherical (IF) Macro"},
2370 {0xE6,0x40,0x2D,0x80,0x2C,0x40,0xDF,0x0E,0x01,0x00,0x00, "Tamron", "B018", "AF 18-200mm f/3.5-6.3 Di II VC"},
2371 {0x00,0x40,0x2D,0x88,0x2C,0x40,0x62,0x06,0x00,0x00,0x00, "Tamron", "A18", "AF 18-250mm F/3.5-6.3 Di II LD Aspherical (IF) Macro"},
2372 {0x00,0x40,0x2D,0x88,0x2C,0x40,0x00,0x06,0x01,0x00,0x00, "Tamron", "A18NII", "AF 18-250mm F/3.5-6.3 Di II LD Aspherical (IF) Macro "},
2373 {0xF5,0x40,0x2C,0x8A,0x2C,0x40,0x40,0x0E,0x01,0x00,0x00, "Tamron", "B003", "AF 18-270mm F/3.5-6.3 Di II VC LD Aspherical (IF) Macro"},
2374 {0xF0,0x3F,0x2D,0x8A,0x2C,0x40,0xDF,0x0E,0x01,0x00,0x00, "Tamron", "B008", "AF 18-270mm F/3.5-6.3 Di II VC PZD"},
2375 {0xE0,0x40,0x2D,0x98,0x2C,0x41,0xDF,0x4E,0x01,0x00,0x00, "Tamron", "B028", "AF 18-400mm F/3.5-6.3 Di II VC HLD"},
2376 {0x07,0x40,0x2F,0x44,0x2C,0x34,0x03,0x02,0x00,0x00,0x00, "Tamron", "A10", "AF 19-35mm F/3.5-4.5"},
2377 {0x07,0x40,0x30,0x45,0x2D,0x35,0x03,0x02,0x00,0x00,0x00, "Tamron", "A10", "AF 19-35mm F/3.5-4.5"},
2378 {0x00,0x49,0x30,0x48,0x22,0x2B,0x00,0x02,0x00,0x00,0x00, "Tamron", "166D", "SP AF 20-40mm F/2.7-3.5"},
2379 {0x0E,0x4A,0x31,0x48,0x23,0x2D,0x0E,0x02,0x00,0x00,0x00, "Tamron", "166D", "SP AF 20-40mm F/2.7-3.5"},
2380 //M                                         "Tamron" "266D"   "SP AF 20-40mm F/2.7-3.5 Aspherical-IF";
2381 {0xFE,0x48,0x37,0x5C,0x24,0x24,0xDF,0x0E,0x01,0x00,0x00, "Tamron", "A007", "SP 24-70mm F/2.8 Di VC USD"},
2382 //M                                         "Tamron" "73D"    "AF 24-70mm F/3.3-5.6 Aspherical";
2383 {0xCE,0x47,0x37,0x5C,0x25,0x25,0xDF,0x4E,0x00,0x00,0x00, "Tamron", "A032", "SP 24-70mm F/2.8 Di VC USD G2"},
2384 {0x45,0x41,0x37,0x72,0x2C,0x3C,0x48,0x02,0x00,0x00,0x00, "Tamron", "190D", "SP AF 24-135mm F/3.5-5.6 AD Aspherical (IF) Macro"},
2385 //M                                         "Tamron" "159D"   "AF 28-70mm F/3.5-4.5";
2386 //M                                         "Tamron" "259D"   "AF 28-70mm F/3.5-4.5";
2387 {0x33,0x54,0x3C,0x5E,0x24,0x24,0x62,0x02,0x00,0x00,0x00, "Tamron", "A09", "SP AF 28-75mm F/2.8 XR Di LD Aspherical (IF) Macro"},
2388 {0xFA,0x54,0x3C,0x5E,0x24,0x24,0x84,0x06,0x01,0x00,0x00, "Tamron", "A09NII", "SP AF 28-75mm F/2.8 XR Di LD Aspherical (IF) Macro"},
2389 {0xFA,0x54,0x3C,0x5E,0x24,0x24,0xDF,0x06,0x01,0x00,0x00, "Tamron", "A09NII", "SP AF 28-75mm F/2.8 XR Di LD Aspherical (IF) Macro"},
2390 {0x10,0x3D,0x3C,0x60,0x2C,0x3C,0xD2,0x02,0x00,0x00,0x00, "Tamron", "177D", "AF 28-80mm F/3.5-5.6 Aspherical"},
2391 {0x45,0x3D,0x3C,0x60,0x2C,0x3C,0x48,0x02,0x00,0x00,0x00, "Tamron", "177D", "AF 28-80mm F/3.5-5.6 Aspherical"},
2392 {0x00,0x48,0x3C,0x6A,0x24,0x24,0x00,0x02,0x00,0x00,0x00, "Tamron", "176D", "SP AF 28-105mm F/2.8 LD Aspherical IF"},
2393 //M                                         "Tamron" "276D"   "SP AF 28-105mm F/2.8 LD Aspherical IF";
2394 //M                                         "Tamron" "179D"   "AF 28-105mm F4.0-5.6 IF";
2395 {0x4D,0x3E,0x3C,0x80,0x2E,0x3C,0x62,0x02,0x00,0x00,0x00, "Tamron", "A03N", "AF 28-200mm F/3.8-5.6 XR Aspherical (IF) Macro"},
2396 //M                                         "Tamron" "471D"   "AF 28-200mm F/3.8-5.6 Aspherical IF Super2 Silver";
2397 {0x0B,0x3E,0x3D,0x7F,0x2F,0x3D,0x0E,0x00,0x00,0x00,0x00, "Tamron", "71D", "AF 28-200mm F/3.8-5.6"},
2398 {0x0B,0x3E,0x3D,0x7F,0x2F,0x3D,0x0E,0x02,0x00,0x00,0x00, "Tamron", "171D", "AF 28-200mm F/3.8-5.6D"},
2399 {0x12,0x3D,0x3C,0x80,0x2E,0x3C,0xDF,0x02,0x00,0x00,0x00, "Tamron", "271D", "AF 28-200mm F/3.8-5.6 LD Aspherical (IF)"},
2400 {0x4D,0x41,0x3C,0x8E,0x2B,0x40,0x62,0x02,0x00,0x00,0x00, "Tamron", "A061", "AF 28-300mm F/3.5-6.3 XR Di LD Aspherical (IF)"},
2401 {0x4D,0x41,0x3C,0x8E,0x2C,0x40,0x62,0x02,0x00,0x00,0x00, "Tamron", "185D", "AF 28-300mm F/3.5-6.3 XR LD Aspherical (IF)"},
2402 //M                                         "Tamron" "285D"   "AF 28-300mm F/3.8-6.3 LD Aspherical IF Silver";
2403 {0xF9,0x40,0x3C,0x8E,0x2C,0x40,0x40,0x0E,0x01,0x00,0x00, "Tamron", "A20", "AF 28-300mm F/3.5-6.3 XR Di VC LD Aspherical (IF) Macro"},
2404 //M                                         "Tamron" "63D"    "AF 35-90mm F/4-5.6";
2405 //M                                         "Tamron" "65D"    "SP AF 35-105mm F/2.8 Aspherical";
2406 //M                                         "Tamron" ""       "AF 35-135mm F/3.5-4.5";
2407 {0x00,0x47,0x53,0x80,0x30,0x3C,0x00,0x06,0x00,0x00,0x00, "Tamron", "A15", "AF 55-200mm F/4-5.6 Di II LD"},
2408 {0xF7,0x53,0x5C,0x80,0x24,0x24,0x84,0x06,0x01,0x00,0x00, "Tamron", "A001", "SP AF 70-200mm F/2.8 Di LD (IF) Macro"},
2409 {0xFE,0x53,0x5C,0x80,0x24,0x24,0x84,0x06,0x01,0x00,0x00, "Tamron", "A001", "SP AF 70-200mm F/2.8 Di LD (IF) Macro"},
2410 {0xF7,0x53,0x5C,0x80,0x24,0x24,0x40,0x06,0x01,0x00,0x00, "Tamron", "A001", "SP AF 70-200mm F/2.8 Di LD (IF) Macro"},
2411 {0xFE,0x54,0x5C,0x80,0x24,0x24,0xDF,0x0E,0x01,0x00,0x00, "Tamron", "A009", "SP 70-200mm F/2.8 Di VC USD"},
2412 //M                                         "Tamron" "67D"    "SP AF 70-210mm f/2.8 LD";
2413 //M                                         "Tamron" ""       "AF 70-210mm F/3.5-4.5";
2414 //M                                         "Tamron" "158D"   "AF 70-210mm F/4-5.6";
2415 //M                                         "Tamron" "258D"   "AF 70-210mm F/4-5.6";
2416 //M                                         "Tamron" "172D"   "AF 70-300mm F/4-5.6";
2417 //M                                         "Tamron" "472D"   "AF 70-300mm F/4-5.6 LD";
2418 {0x69,0x48,0x5C,0x8E,0x30,0x3C,0x6F,0x02,0x00,0x00,0x00, "Tamron", "572D/772D", "AF 70-300mm F/4-5.6 LD Macro 1:2"},
2419 {0x69,0x47,0x5C,0x8E,0x30,0x3C,0x00,0x02,0x00,0x00,0x00, "Tamron", "A17N", "AF 70-300mm F/4-5.6 Di LD Macro 1:2"},
2420 {0x00,0x48,0x5C,0x8E,0x30,0x3C,0x00,0x06,0x01,0x00,0x00, "Tamron", "A17NII", "AF 70-300mm F/4-5.6 Di LD Macro 1:2"},
2421 {0xF1,0x47,0x5C,0x8E,0x30,0x3C,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "A005", "SP 70-300mm F4-5.6 Di VC USD"},
2422 //M                                         "Tamron" "872D"   "AF 75-300mm F/4-5.6 LD";
2423 //M                                         "Tamron" "278D"   "AF 80-210mm F/4.5-5.6";
2424 //M                                         "Tamron" "62D"    "AF 90-300mm F/4.5-5.6";
2425 //M                                         "Tamron" "186D"   "AF 100-300mm F/5-6.3";
2426 {0xEB,0x40,0x76,0xA6,0x38,0x40,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "A011", "SP AF 150-600mm F/5-6.3 VC USD"},
2427 {0xE3,0x40,0x76,0xA6,0x38,0x40,0xDF,0x4E,0x00,0x00,0x00, "Tamron", "A022", "SP AF 150-600mm F/5-6.3 Di VC USD G2"},
2428 {0x20,0x3C,0x80,0x98,0x3D,0x3D,0x1E,0x02,0x00,0x00,0x00, "Tamron", "75D", "AF 200-400mm F/5.6 LD IF"},
2429 {0x00,0x3E,0x80,0xA0,0x38,0x3F,0x00,0x02,0x00,0x00,0x00, "Tamron", "A08", "SP AF 200-500mm F/5-6.3 Di LD (IF)"},
2430 {0x00,0x3F,0x80,0xA0,0x38,0x3F,0x00,0x02,0x00,0x00,0x00, "Tamron", "A08", "SP AF 200-500mm F/5-6.3 Di"},
2431 //
2432 //------------------------------------------------------------------------------
2433 // Tokina Lenses by focal length, first fixed then zoom lenses
2434 //------------------------------------------------------------------------------
2435 //
2436 {0x00,0x40,0x2B,0x2B,0x2C,0x2C,0x00,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 17 AF PRO (AF 17mm f/3.5)"},
2437 {0x00,0x47,0x44,0x44,0x24,0x24,0x00,0x06,0x40,0x00,0x00, "Tokina", "T303503", "AT-X M35 PRO DX (AF 35mm f/2.8 Macro)"},
2438 {0x00,0x54,0x68,0x68,0x24,0x24,0x00,0x02,0x40,0x00,0x00, "Tokina", "T310003N", "AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)"},
2439 {0x27,0x48,0x8E,0x8E,0x30,0x30,0x1D,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 304 AF (AF 300mm f/4.0)"},
2440 {0x00,0x54,0x8E,0x8E,0x24,0x24,0x00,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 300 AF PRO (AF 300mm f/2.8)"},
2441 {0x12,0x3B,0x98,0x98,0x3D,0x3D,0x09,0x00,0x00,0x00,0x00, "Tokina", "", "AT-X 400 AF SD (AF 400mm f/5.6)"},
2442 //
2443 {0x00,0x40,0x18,0x2B,0x2C,0x34,0x00,0x06,0x00,0x00,0x00, "Tokina", "T4101703", "AT-X 107 AF DX Fisheye (AF 10-17mm f/3.5-4.5)"},
2444 {0x00,0x48,0x1C,0x29,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tokina", "T4111603", "AT-X 116 PRO DX (AF 11-16mm f/2.8)"},
2445 {0x7A,0x48,0x1C,0x29,0x24,0x24,0x7E,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 116 PRO DX II (AF 11-16mm f/2.8)"},
2446 {0x7A,0x48,0x1C,0x30,0x24,0x24,0x7E,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)"},
2447 {0x00,0x3C,0x1F,0x37,0x30,0x30,0x00,0x06,0x00,0x00,0x00, "Tokina", "T4122403", "AT-X 124 AF PRO DX (AF 12-24mm f/4)"},
2448 {0x7A,0x3C,0x1F,0x37,0x30,0x30,0x7E,0x06,0x01,0x02,0x00, "Tokina", "T4122423", "AT-X 124 AF PRO DX II (AF 12-24mm f/4)"},
2449 {0x7A,0x3C,0x1F,0x3C,0x30,0x30,0x7E,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 12-28 PRO DX (AF 12-28mm F/4)"},
2450 {0x00,0x48,0x29,0x3C,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 16-28 AF PRO FX (AF 16-28mm f/2.8)"},
2451 {0x00,0x48,0x29,0x50,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 165 PRO DX (AF 16-50mm f/2.8)"},
2452 {0x00,0x40,0x2A,0x72,0x2C,0x3C,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 16.5-135 DX (AF 16.5-135mm F3.5-5.6)"},
2453 {0x00,0x3C,0x2B,0x44,0x30,0x30,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 17-35 F4 PRO FX (AF 17-35mm f/4)"},
2454 {0x2F,0x40,0x30,0x44,0x2C,0x34,0x29,0x02,0x00,0x02,0x00, "Tokina", "", "AF 193 (AF 19-35mm f/3.5-4.5)"},
2455 {0x2F,0x48,0x30,0x44,0x24,0x24,0x29,0x02,0x00,0x02,0x00, "Tokina", "", "AT-X 235 AF PRO (AF 20-35mm f/2.8)"},
2456 //M                                         "Tokina" ""          "AF 235 (AF 20-35mm f/3.5-4.5)"
2457 {0x2F,0x40,0x30,0x44,0x2C,0x34,0x29,0x02,0x00,0x01,0x00, "Tokina", "", "AF 235 II (AF 20-35mm f/3.5-4.5)"},
2458 //M                                         "Tokina" ""          "AT-X 240 AF (AF 24-40mm f/2.8)"
2459 {0x00,0x48,0x37,0x5C,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 24-70MM F2.8 PRO FX (AF 24-70mm f/2.8)"},
2460 {0x00,0x40,0x37,0x80,0x2C,0x3C,0x00,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 242 AF (AF 24-200mm f/3.5-5.6)"},
2461 {0x25,0x48,0x3C,0x5C,0x24,0x24,0x1B,0x02,0x00,0x02,0x00, "Tokina", "", "AT-X 270 AF PRO II (AF 28-70mm f/2.6-2.8)"},
2462 {0x25,0x48,0x3C,0x5C,0x24,0x24,0x1B,0x02,0x00,0x01,0x00, "Tokina", "", "AT-X 287 AF PRO SV (AF 28-70mm f/2.8)"},
2463 {0x07,0x48,0x3C,0x5C,0x24,0x24,0x03,0x00,0x00,0x00,0x00, "Tokina", "", "AT-X 287 AF (AF 28-70mm f/2.8)"},
2464 {0x07,0x47,0x3C,0x5C,0x25,0x35,0x03,0x00,0x00,0x00,0x00, "Tokina", "", "AF 287 SD (AF 28-70mm f/2.8-4.5)"},
2465 {0x07,0x40,0x3C,0x5C,0x2C,0x35,0x03,0x00,0x00,0x00,0x00, "Tokina", "", "AF 270 II (AF 28-70mm f/3.5-4.5)"},
2466 {0x00,0x48,0x3C,0x60,0x24,0x24,0x00,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 280 AF PRO (AF 28-80mm f/2.8)"},
2467 //M                                         "Tokina" ""          "AF 280 II EMZ (AF 28-80mm f/3.5-5.6)"
2468 //M                                         "Tokina" ""          "AF 205 (AF 28-105mm f/3.5-4.5)"
2469 //M                                         "Tokina" ""          "AF 282 (AF 28-200mm 3.5-5.6)"
2470 //M                                         "Tokina" ""          "AF 282 EMZ II (AF 28-210mm f/4.2-6.5)"
2471 //M                                         "Tokina" ""          "AF 370 (AF 35-70mm f/3.5-4.6)"
2472 //M                                         "Tokina" ""          "AF 370 II (AF 35-70mm f/3.5-4.6)"
2473 {0x25,0x44,0x44,0x8E,0x34,0x42,0x1B,0x02,0x00,0x00,0x00, "Tokina", "", "AF 353 (AF 35-300mm f/4.5-6.7)"},
2474 {0x00,0x48,0x50,0x72,0x24,0x24,0x00,0x06,0x00,0x00,0x00, "Tokina", "", "AT-X 535 PRO DX (AF 50-135mm f/2.8)"},
2475 {0x00,0x3C,0x5C,0x80,0x30,0x30,0x00,0x0E,0x00,0x00,0x00, "Tokina", "", "AT-X 70-200MM F4 FX VCM-S (AF 70-200mm f/4)"},
2476 {0x00,0x48,0x5C,0x80,0x30,0x30,0x00,0x0E,0x00,0x00,0x00, "Tokina", "", "AT-X 70-200MM F4 FX VCM-S (AF 70-200mm f/4)"},
2477 //M                                         "Tokina" ""          "AF 745 (AF 70-210mm f/4.5)"
2478 //M                                         "Tokina" ""          "AF 210 (AF 70-210mm f/4.0-5.6)"
2479 //M                                         "Tokina" ""          "AF 210 II SD (AF 70-210mm f/4.0-5.6)"
2480 {0x12,0x44,0x5E,0x8E,0x34,0x3C,0x09,0x00,0x00,0x00,0x00, "Tokina", "", "AF 730 (AF 75-300mm F4.5-5.6)"},
2481 //M                                         "Tokina" ""          "AF 730 II (AF 75-300mm f/4.5-5.6)"
2482 {0x14,0x54,0x60,0x80,0x24,0x24,0x0B,0x00,0x00,0x00,0x00, "Tokina", "", "AT-X 828 AF (AF 80-200mm f/2.8)"},
2483 {0x24,0x54,0x60,0x80,0x24,0x24,0x1A,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 828 AF PRO (AF 80-200mm f/2.8)"},
2484 //M                                         "Tokina" ""          "AT-X 840 AF (AF 80-400mm f/4.5-5.6)"
2485 {0x24,0x44,0x60,0x98,0x34,0x3C,0x1A,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 840 AF-II (AF 80-400mm f/4.5-5.6)"},
2486 {0x00,0x44,0x60,0x98,0x34,0x3C,0x00,0x02,0x00,0x00,0x00, "Tokina", "", "AT-X 840 D (AF 80-400mm f/4.5-5.6)"},
2487 {0x14,0x48,0x68,0x8E,0x30,0x30,0x0B,0x00,0x00,0x00,0x00, "Tokina", "", "AT-X 340 AF (AF 100-300mm f/4)"},
2488 //M                                         "Tokina" ""          "AT-X 340 AF-II (AF 100-300mm f/4)"
2489 //M                                         "Tokina" ""          "AF 130 EMZ II (AF 100-300mm f/5.6-6.7)"
2490 //M                                         "Tokina" ""          "AF 140 EMZ (AF 100-400mm f/4.5-6.3)"
2491 //
2492 //------------------------------------------------------------------------------
2493 // Lenses from various other brands
2494 //------------------------------------------------------------------------------
2495 //
2496 {0x06,0x3F,0x68,0x68,0x2C,0x2C,0x06,0x00,0x00,0x00,0x00, "Cosina", "", "AF 100mm F3.5 Macro"},
2497 {0x07,0x36,0x3D,0x5F,0x2C,0x3C,0x03,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 28-80mm F3.5-5.6 MC Macro"},
2498 {0x07,0x46,0x3D,0x6A,0x25,0x2F,0x03,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 28-105mm F2.8-3.8 MC"},
2499 //M                                         "Cosina" "" "AF Zoom 28-210mm F3.5-5.6";
2500 //M                                         "Cosina" "" "AF Zoom 28-210mm F4.2-6.5 Aspherical IF";
2501 //M                                         "Cosina" "" "AF Zoom 28-300mm F4.0-6.3";
2502 //M                                         "Cosina" "" "AF Zoom 70-210mm F2.8-4.0";
2503 {0x12,0x36,0x5C,0x81,0x35,0x3D,0x09,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 70-210mm F4.5-5.6 MC Macro"},
2504 {0x12,0x39,0x5C,0x8E,0x34,0x3D,0x08,0x02,0x00,0x00,0x00, "Cosina", "", "AF Zoom 70-300mm F4.5-5.6 MC Macro"},
2505 {0x12,0x3B,0x68,0x8D,0x3D,0x43,0x09,0x02,0x00,0x00,0x00, "Cosina", "", "AF Zoom 100-300mm F5.6-6.7 MC Macro"},
2506 //M                                         "Cosina" "" "AF Zoom 100-400mm F5.6-6.7 MC";
2507 //
2508 {0x12,0x38,0x69,0x97,0x35,0x42,0x09,0x02,0x00,0x00,0x00, "Promaster", "", "Spectrum 7 100-400mm 1:4.5-6.7"},
2509 //
2510 {0x00,0x40,0x31,0x31,0x2C,0x2C,0x00,0x00,0x00,0x00,0x00, "Voigtlander", "BA295AN", "Color Skopar 20mm F3.5 SLII Aspherical"},
2511 {0x00,0x48,0x3C,0x3C,0x24,0x24,0x00,0x00,0x00,0x00,0x00, "Voigtlander", "", "Color Skopar 28mm F2.8 SL II"},
2512 {0x00,0x54,0x48,0x48,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Voigtlander", "BA229DN", "Ultron 40mm F2 SLII Aspherical"},
2513 {0x00,0x54,0x55,0x55,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Voigtlander", "BA239BN", "Nokton 58mm F1.4 SLII"},
2514 {0x00,0x40,0x64,0x64,0x2C,0x2C,0x00,0x00,0x00,0x00,0x00, "Voigtlander", "", "APO-Lanthar 90mm F3.5 SLII Close Focus"},
2515 //
2516 {0x00,0x40,0x2D,0x2D,0x2C,0x2C,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 3,5/18 ZF.2"},
2517 {0x00,0x48,0x32,0x32,0x24,0x24,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 2,8/21 ZF.2"},
2518 {0x00,0x54,0x38,0x38,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 2/25 ZF.2"},
2519 {0x00,0x54,0x3C,0x3C,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 2/28 ZF.2"},
2520 {0x00,0x54,0x44,0x44,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 1.4/35 ZF.2"},
2521 {0x00,0x54,0x44,0x44,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Distagon T* 2/35 ZF.2"},
2522 {0x00,0x54,0x50,0x50,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Planar T* 1,4/50 ZF.2"},
2523 {0x00,0x54,0x50,0x50,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Makro-Planar T* 2/50 ZF.2"},
2524 {0x00,0x54,0x62,0x62,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Planar T* 1,4/85 ZF.2"},
2525 {0x00,0x54,0x68,0x68,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Makro-Planar T* 2/100 ZF.2"},
2526 {0x00,0x54,0x72,0x72,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Carl Zeiss", "", "Apo Sonnar T* 2/135 ZF.2"},
2527 {0x00,0x54,0x53,0x53,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Otus 1.4/55"},
2528 {0x01,0x54,0x62,0x62,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Otus 1.4/85"},
2529 //                    " "00" "00" "00" "00" "Zeiss" "" "Milvus 2.8/21"
2530 {0x52,0x54,0x44,0x44,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Milvus 2/35"},
2531 {0x53,0x54,0x50,0x50,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Milvus 1.4/50"},
2532 {0x54,0x54,0x50,0x50,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Milvus 2/50M"},
2533 {0x55,0x54,0x62,0x62,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Milvus 1.4/85"},
2534 {0x56,0x54,0x68,0x68,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Zeiss", "", "Milvus 2/100M"},
2535 //
2536 {0x00,0x54,0x56,0x56,0x30,0x30,0x00,0x00,0x00,0x00,0x00, "Coastal Optical Systems", "", "60mm 1:4 UV-VIS-IR Macro Apo"},
2537 //
2538 {0xBF,0x4E,0x26,0x26,0x1E,0x1E,0x01,0x04,0x00,0x00,0x00, "Irix", "", "15mm f/2.4 Firefly"},
2539 {0xBF,0x3C,0x1B,0x1B,0x30,0x30,0x01,0x04,0x00,0x00,0x00, "Irix", "", "11mm f/4.0 Blackstone/Firefly"},
2540 //
2541 {0x4A,0x40,0x11,0x11,0x2C,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "8mm f/3.5 Fish-Eye CS"},
2542 {0x4A,0x48,0x24,0x24,0x24,0x0C,0x4D,0x02,0x00,0x02,0x00, "Samyang", "", "10mm f/2.8 ED AS NCS CS"},
2543 {0x4A,0x48,0x1E,0x1E,0x24,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "12mm f/2.8 ED AS NCS Fish-eye"},
2544 {0x4A,0x4C,0x24,0x24,0x1E,0x6C,0x4D,0x06,0x00,0x00,0x00, "Samyang", "", "14mm f/2.4 Premium"},
2545 {0x4A,0x48,0x24,0x24,0x24,0x0C,0x4D,0x02,0x00,0x01,0x00, "Samyang", "", "AE 14mm f/2.8 ED AS IF UMC"},
2546 {0x4A,0x54,0x29,0x29,0x18,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "16mm F2.0 ED AS UMC CS"},
2547 {0x4A,0x60,0x36,0x36,0x0C,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "24mm f/1.4 ED AS UMC"},
2548 {0x4A,0x60,0x44,0x44,0x0C,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "35mm f/1.4 AS UMC"},
2549 {0x4A,0x60,0x62,0x62,0x0C,0x0C,0x4D,0x02,0x00,0x00,0x00, "Samyang", "", "AE 85mm f/1.4 AS IF UMC"},
2550 //
2551 {0x9A,0x4C,0x50,0x50,0x14,0x14,0x9C,0x06,0x00,0x00,0x00, "Yongnuo", "", "YN50mm F1.8N"},
2552 //
2553 {0x02,0x40,0x44,0x5C,0x2C,0x34,0x02,0x00,0x00,0x00,0x00, "Exakta", "", "AF 35-70mm 1:3.5-4.5 MC"},
2554 {0x07,0x3E,0x30,0x43,0x2D,0x35,0x03,0x00,0x00,0x00,0x00, "Soligor", "", "AF Zoom 19-35mm 1:3.5-4.5 MC"},
2555 {0x03,0x43,0x5C,0x81,0x35,0x35,0x02,0x00,0x00,0x00,0x00, "Soligor", "", "AF C/D Zoom UMCS 70-210mm 1:4.5"},
2556 {0x12,0x4A,0x5C,0x81,0x31,0x3D,0x09,0x00,0x00,0x00,0x00, "Soligor", "", "AF C/D Auto Zoom+Macro 70-210mm 1:4-5.6 UMCS"},
2557 {0x12,0x36,0x69,0x97,0x35,0x42,0x09,0x00,0x00,0x00,0x00, "Soligor", "", "AF Zoom 100-400mm 1:4.5-6.7 MC"},
2558 //
2559 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, "Manual Lens", "", "No CPU"},
2560 {0x00,0x00,0x48,0x48,0x53,0x53,0x00,0x01,0x00,0x00,0x00, "Loreo", "", "40mm F11-22 3D Lens in a Cap 9005"},
2561 //
2562 //------------------------------------------------------------------------------
2563 //
2564 // Lenses, that were upgraded with custom CPU
2565 //
2566 {0x00,0x47,0x10,0x10,0x24,0x24,0x00,0x00,0x00,0x00,0x00, "Nikon", "JAA604AC", "Fisheye Nikkor 8mm f/2.8 AiS"},
2567 {0x00,0x47,0x3C,0x3C,0x24,0x24,0x00,0x00,0x00,0x00,0x00, "Nikon", "", "Nikkor 28mm f/2.8 AiS"},
2568 //"00 54 44 44 0C 0C 00" "00" "00" "00" "00" "Nikon"   "JAA115AD" "Nikkor 35mm f/1.4 AiS" double ID with Zeiss
2569 {0x00,0x57,0x50,0x50,0x14,0x14,0x00,0x00,0x00,0x00,0x00, "Nikon", "", "Nikkor 50mm f/1.8 AI"},
2570 {0x00,0x48,0x50,0x50,0x18,0x18,0x00,0x00,0x00,0x00,0x00, "Nikon", "", "Nikkor H 50mm f/2"},
2571 {0x00,0x48,0x68,0x68,0x24,0x24,0x00,0x00,0x00,0x00,0x00, "Nikon", "JAA304AA", "Series E 100mm f/2.8"},
2572 {0x00,0x4C,0x6A,0x6A,0x20,0x20,0x00,0x00,0x00,0x00,0x00, "Nikon", "JAA305AA", "Nikkor 105mm f/2.5 AiS"},
2573 {0x00,0x48,0x80,0x80,0x30,0x30,0x00,0x00,0x00,0x00,0x00, "Nikon", "JAA313AA", "Nikkor 200mm f/4 AiS"},
2574 {0x00,0x40,0x11,0x11,0x2C,0x2C,0x00,0x00,0x00,0x00,0x00, "Samyang", "", "8mm f/3.5 Fish-Eye"},
2575 {0x00,0x58,0x64,0x64,0x20,0x20,0x00,0x00,0x00,0x00,0x00, "Soligor", "", "C/D Macro MC 90mm f/2.5"},
2576 // https://github.com/Exiv2/exiv2/issues/743
2577 {0xc9,0x48,0x37,0x5c,0x24,0x24,0x4b,0x4e,0x01,0x00,0x00, "Sigma", "", "24-70mm F2.8 DG OS HSM Art"},
2578 //  https://github.com/Exiv2/exiv2/issues/598 , https://github.com/Exiv2/exiv2/pull/891
2579 {0xCF,0x47,0x5C,0x8E,0x31,0x3D,0xDF,0x0E,0x00,0x00,0x00, "Tamron", "A030", "SP 70-300mm F/4-5.6 Di VC USD"},
2580 //
2581 {0xf4,0x4c,0x7c,0x7c,0x2c,0x2c,0x4b,0x02,0x00,0x00,0x00, "Sigma", "", "APO Macro 180mm F3.5 EX DG HSM"},
2582 // https://github.com/Exiv2/exiv2/issues/1078
2583 {0x80,0x48,0x1C,0x29,0x24,0x24,0x7A,0x06,0x00,0x00,0x00, "Tokina", "", "atx-i 11-16mm F2.8 CF"},
2584 // https://github.com/Exiv2/exiv2/issues/1069
2585 {0xc8,0x54,0x44,0x44,0x0d,0x0d,0xdf,0x46,0x00,0x00,0x00, "Tamron", "F045", "SP 35mm f/1.4 Di USD"},
2586 // https://github.com/Exiv2/exiv2/pull/1105
2587 {0xCB,0x3C,0x2B,0x44,0x24,0x31,0xDF,0x46,0x00,0x00,0x00, "Tamron", "A037", "17-35mm F/2.8-4 Di OSD"},
2588 // https://github.com/Exiv2/exiv2/issues/1208
2589 {0xC8,0x54,0x62,0x62,0x0C,0x0C,0x4B,0x46,0x00,0x00,0x00, "Sigma", "321550", "85mm F1.4 DG HSM | A"},
2590 // Always leave this at the end!
2591 {0,0,0,0,0,0,0,0,0,0,0, NULL, NULL, NULL}
2592 };
2593 //------------------------------------------------------------------------------
2594 #endif
2595 // 8< - - - 8< do not remove this line >8 - - - >8
2596 
2597     /* if no meta obj is provided, try to use the value param that *may*
2598      * be the pre-parsed lensid
2599      */
2600         if (metadata == 0)
2601         {
2602             const unsigned char  vid = (unsigned)value.toLong(0);
2603 
2604         /* the 'FMntLens' name is added to the annonymous struct for
2605          * fmountlens[]
2606          *
2607          * remember to name the struct when importing/updating the lens info
2608          * from:
2609          *
2610          * www.rottmerhusen.com/objektives/lensid/files/c-header/fmountlens4.h
2611          */
2612             const struct FMntLens*  pf = fmountlens;
2613             while (pf->lid && pf->lensname) {
2614                 if (pf->lid == vid) {
2615                     break;
2616                 }
2617                 ++pf;
2618             }
2619 
2620             if (pf->lensname == NULL) {
2621                 return os << value;
2622             }
2623             else {
2624                 return os << pf->manuf << " " << pf->lensname;
2625             }
2626         }
2627 
2628 
2629         byte raw[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
2630 
2631         static const char* tags[] = {
2632             "LensIDNumber",
2633             "LensFStops",
2634             "MinFocalLength",
2635             "MaxFocalLength",
2636             "MaxApertureAtMinFocal",
2637             "MaxApertureAtMaxFocal",
2638             "MCUVersion"
2639         };
2640 
2641         const std::string pre = std::string("Exif.") + group + std::string(".");
2642         for (unsigned int i = 0; i < 7; ++i) {
2643             ExifKey key(pre + std::string(tags[i]));
2644             ExifData::const_iterator md = metadata->findKey(key);
2645             if (md == metadata->end() || md->typeId() != unsignedByte || md->count() == 0) {
2646                 return os << value;
2647             }
2648             raw[i] = static_cast<byte>(md->toLong());
2649         }
2650 
2651         ExifData::const_iterator md = metadata->findKey(ExifKey("Exif.Nikon3.LensType"));
2652         if (md == metadata->end() || md->typeId() != unsignedByte || md->count() == 0) {
2653             return os << value;
2654         }
2655         raw[7] = static_cast<byte>(md->toLong());
2656 
2657         for (int i = 0; fmountlens[i].lensname != NULL; ++i) {
2658             if (   raw[0] == fmountlens[i].lid ) {
2659                 // #1034
2660                 const std::string  undefined("undefined") ;
2661                 const std::string  section  ("nikon");
2662                 std::ostringstream lensIDStream;
2663                 lensIDStream  << (int) raw[7];
2664                 if ( Internal::readExiv2Config(section,lensIDStream.str(),undefined) != undefined ) {
2665                     return os << Internal::readExiv2Config(section,lensIDStream.str(),undefined);
2666                 }
2667             }
2668 
2669             if (   raw[0] == fmountlens[i].lid
2670                 // stps varies with focal length for some Sigma zoom lenses.
2671                 &&(raw[1] == fmountlens[i].stps || strcmp(fmountlens[i].manuf, "Sigma") == 0)
2672                 && raw[2] == fmountlens[i].focs
2673                 && raw[3] == fmountlens[i].focl
2674                 && raw[4] == fmountlens[i].aps
2675                 && raw[5] == fmountlens[i].apl
2676                 && raw[6] == fmountlens[i].lfw
2677                 && raw[7] == fmountlens[i].ltype) {
2678                 // Lens found in database
2679                 return os << fmountlens[i].manuf << " " << fmountlens[i].lensname;
2680             }
2681         }
2682         // Lens not found in database
2683         return os << value;
2684 #else
2685         return os << value;
2686 #endif // EXV_HAVE_LENSDATA
2687     }
2688 
printFocusDistance(std::ostream & os,const Value & value,const ExifData *)2689     std::ostream& Nikon3MakerNote::printFocusDistance(std::ostream& os,
2690                                                       const Value& value,
2691                                                       const ExifData*)
2692     {
2693         std::ios::fmtflags f( os.flags() );
2694         if (value.count() != 1 || value.typeId() != unsignedByte) {
2695             os << "(" << value << ")";
2696             os.flags(f);
2697             return os;
2698         }
2699         double dist = 0.01 * pow(10.0, value.toLong()/40.0);
2700         std::ostringstream oss;
2701         oss.copyfmt(os);
2702         os << std::fixed << std::setprecision(2) << dist << " m";
2703         os.copyfmt(oss);
2704         os.flags(f);
2705         return os;
2706     }
2707 
printAperture(std::ostream & os,const Value & value,const ExifData *)2708     std::ostream& Nikon3MakerNote::printAperture(std::ostream& os,
2709                                                  const Value& value,
2710                                                  const ExifData*)
2711     {
2712         std::ios::fmtflags f( os.flags() );
2713         if (value.count() != 1 || value.typeId() != unsignedByte) {
2714             os << "(" << value << ")";
2715             os.flags(f);
2716             return os;
2717         }
2718         double aperture = pow(2.0, value.toLong()/24.0);
2719         std::ostringstream oss;
2720         oss.copyfmt(os);
2721         os << std::fixed << std::setprecision(1) << "F" << aperture;
2722         os.copyfmt(oss);
2723         os.flags(f);
2724         return os;
2725     }
2726 
printFocal(std::ostream & os,const Value & value,const ExifData *)2727     std::ostream& Nikon3MakerNote::printFocal(std::ostream& os,
2728                                               const Value& value,
2729                                               const ExifData*)
2730     {
2731         if (value.count() != 1 || value.typeId() != unsignedByte) {
2732             return os << "(" << value << ")";
2733         }
2734         double focal = 5.0 * pow(2.0, value.toLong()/24.0);
2735         std::ostringstream oss;
2736         oss.copyfmt(os);
2737         os << std::fixed << std::setprecision(1) << focal << " mm";
2738         os.copyfmt(oss);
2739         return os;
2740     }
2741 
printFStops(std::ostream & os,const Value & value,const ExifData *)2742     std::ostream& Nikon3MakerNote::printFStops(std::ostream& os,
2743                                                const Value& value,
2744                                                const ExifData*)
2745     {
2746         std::ios::fmtflags f( os.flags() );
2747         if (value.count() != 1 || value.typeId() != unsignedByte) {
2748             os << "(" << value << ")";
2749             os.flags(f);
2750             return os;
2751         }
2752         double fstops = value.toLong()/12.0;
2753         std::ostringstream oss;
2754         oss.copyfmt(os);
2755         os << std::fixed << std::setprecision(1) << "F" << fstops;
2756         os.copyfmt(oss);
2757         os.flags(f);
2758         return os;
2759     }
2760 
printExitPupilPosition(std::ostream & os,const Value & value,const ExifData *)2761     std::ostream& Nikon3MakerNote::printExitPupilPosition(std::ostream& os,
2762                                                           const Value& value,
2763                                                           const ExifData*)
2764     {
2765         std::ios::fmtflags f( os.flags() );
2766         if (value.count() != 1 || value.typeId() != unsignedByte || value.toLong() == 0) {
2767             os << "(" << value << ")";
2768             os.flags(f);
2769             return os;
2770         }
2771         double epp = 2048.0/value.toLong();
2772         std::ostringstream oss;
2773         oss.copyfmt(os);
2774         os << std::fixed << std::setprecision(1) << epp << " mm";
2775         os.copyfmt(oss);
2776         os.flags(f);
2777         return os;
2778     }
2779 
printFlashFocalLength(std::ostream & os,const Value & value,const ExifData *)2780     std::ostream& Nikon3MakerNote::printFlashFocalLength(std::ostream& os,
2781                                                          const Value& value,
2782                                                          const ExifData*)
2783     {
2784         std::ios::fmtflags f( os.flags() );
2785         if (value.count() != 1 || value.typeId() != unsignedByte || value.toLong() == 0 || value.toLong() == 255) {
2786             os << "(" << value << ")";
2787             os.flags(f);
2788             return os;
2789         }
2790         std::ostringstream oss;
2791         oss.copyfmt(os);
2792         os << std::fixed << std::setprecision(1) << value.toLong() << " mm";
2793         os.copyfmt(oss);
2794         os.flags(f);
2795         return os;
2796     }
2797 
printRepeatingFlashRate(std::ostream & os,const Value & value,const ExifData *)2798     std::ostream& Nikon3MakerNote::printRepeatingFlashRate(std::ostream& os,
2799                                                            const Value& value,
2800                                                            const ExifData*)
2801     {
2802         std::ios::fmtflags f( os.flags() );
2803         if (value.count() != 1 || value.typeId() != unsignedByte || value.toLong() == 0 || value.toLong() == 255) {
2804             return os << "(" << value << ")";
2805         }
2806         std::ostringstream oss;
2807         oss.copyfmt(os);
2808         os << std::fixed << std::setprecision(2) << value.toLong() << " Hz";
2809         os.copyfmt(oss);
2810         os.flags(f);
2811         return os;
2812     }
2813 
printRepeatingFlashCount(std::ostream & os,const Value & value,const ExifData *)2814     std::ostream& Nikon3MakerNote::printRepeatingFlashCount(std::ostream& os,
2815                                                             const Value& value,
2816                                                             const ExifData*)
2817     {
2818         std::ios::fmtflags f( os.flags() );
2819         if (value.count() != 1 || value.typeId() != unsignedByte || value.toLong() == 0 || value.toLong() == 255) {
2820             return os << "(" << value << ")";
2821         }
2822         std::ostringstream oss;
2823         oss.copyfmt(os);
2824         os << std::fixed << std::setprecision(2) << value.toLong();
2825         os.copyfmt(oss);
2826         os.flags(f);
2827         return os;
2828     }
2829 
printTimeZone(std::ostream & os,const Value & value,const ExifData *)2830     std::ostream& Nikon3MakerNote::printTimeZone(std::ostream& os,
2831                                                  const Value& value,
2832                                                  const ExifData*)
2833     {
2834         std::ios::fmtflags f( os.flags() );
2835         if (value.count() != 1 || value.typeId() != signedShort) {
2836             os << "(" << value << ")";
2837             os.flags(f);
2838             return os;
2839         }
2840         std::ostringstream oss;
2841         oss.copyfmt(os);
2842         char sign = value.toLong() < 0 ? '-' : '+';
2843         long h    = long(std::abs( (int) (value.toFloat()/60.0)  ))%24;
2844         long min  = long(std::abs( (int) (value.toFloat()-h*60)  ))%60;
2845         os << std::fixed << "UTC " << sign << std::setw(2) << std::setfill('0') << h << ":"
2846            << std::setw(2) << std::setfill('0') << min;
2847         os.copyfmt(oss);
2848         os.flags(f);
2849         return os;
2850     }
2851 
printPictureControl(std::ostream & os,const Value & value,const ExifData *)2852     std::ostream& Nikon3MakerNote::printPictureControl(std::ostream& os,
2853                                                        const Value& value,
2854                                                        const ExifData*)
2855     {
2856         if (value.count() != 1 || value.typeId() != unsignedByte) {
2857             return os << "(" << value << ")";
2858         }
2859         long pcval = value.toLong() - 0x80;
2860         std::ostringstream oss;
2861         oss.copyfmt(os);
2862         switch(pcval)
2863         {
2864         case 0:
2865             os << "Normal";
2866             break;
2867         case 127:
2868             os << "n/a";
2869             break;
2870         case -127:
2871             os << "User";
2872             break;
2873         case -128:
2874             os << "Auto";
2875             break;
2876         default:
2877             os << pcval;
2878             break;
2879         }
2880         os.copyfmt(oss);
2881         return os;
2882     }
2883 
print0x009a(std::ostream & os,const Value & value,const ExifData *)2884     std::ostream& Nikon3MakerNote::print0x009a(std::ostream& os,
2885                                                const Value& value,
2886                                                const ExifData*)
2887     {
2888         if (value.count() != 2 || value.typeId() != unsignedRational) {
2889             return os << value;
2890         }
2891         float f1 = value.toFloat(0);
2892         float f2 = value.toFloat(1);
2893         return os << f1 << " x " << f2 << " um";
2894     }
2895 
print0x009e(std::ostream & os,const Value & value,const ExifData *)2896     std::ostream& Nikon3MakerNote::print0x009e(std::ostream& os,
2897                                                const Value& value,
2898                                                const ExifData*)
2899     {
2900         if (value.count() != 10 || value.typeId() != unsignedShort) {
2901             return os << value;
2902         }
2903         std::string s;
2904         bool trim = true;
2905         for (int i = 9; i >= 0; --i) {
2906             long l = value.toLong(i);
2907             if (i > 0 && l == 0 && trim) continue;
2908             if (l != 0) trim = false;
2909             std::string d = s.empty() ? "" : "; ";
2910             const TagDetails* td = find(nikonRetouchHistory, l);
2911             if (td) {
2912                 s = std::string(exvGettext(td->label_)) + d + s;
2913             }
2914             else {
2915                 s = std::string(_("Unknown")) + std::string(" (") + toString(l) + std::string(")") + d + s;
2916             }
2917         }
2918         return os << s;
2919     }
2920 
printLensId4ZMount(std::ostream & os,const Value & value,const ExifData *)2921     std::ostream& Nikon3MakerNote::printLensId4ZMount(std::ostream& os,
2922                                               const Value& value,
2923                                               const ExifData*)
2924     {
2925         if (value.count() != 1 || value.typeId() != unsignedShort) {
2926             return os << "(" << value << ")";
2927         }
2928 
2929 // from https://github.com/exiftool/exiftool/blob/12.12/lib/Image/ExifTool/Nikon.pm#L4646
2930 static const struct ZMntLens {uint16_t lid; const char *manuf, *lensname;}
2931 zmountlens[] = {
2932              {1 , "Nikon", "Nikkor Z 24-70mm f/4 S"},
2933              {2 , "Nikon", "Nikkor Z 14-30mm f/4 S"},
2934              {4 , "Nikon", "Nikkor Z 35mm f/1.8 S"},
2935              {8 , "Nikon", "Nikkor Z 58mm f/0.95 S Noct"}, //IB
2936              {9 , "Nikon", "Nikkor Z 50mm f/1.8 S"},
2937             {11 , "Nikon", "Nikkor Z DX 16-50mm f/3.5-6.3 VR"},
2938             {12 , "Nikon", "Nikkor Z DX 50-250mm f/4.5-6.3 VR"},
2939             {13 , "Nikon", "Nikkor Z 24-70mm f/2.8 S"},
2940             {14 , "Nikon", "Nikkor Z 85mm f/1.8 S"},
2941             {15 , "Nikon", "Nikkor Z 24mm f/1.8 S"}, //IB
2942             {16 , "Nikon", "Nikkor Z 70-200mm f/2.8 VR S"}, //IB
2943             {17 , "Nikon", "Nikkor Z 20mm f/1.8 S"}, //IB
2944             {18 , "Nikon", "Nikkor Z 24-200mm f/4-6.3 VR"}, //IB
2945             {21 , "Nikon", "Nikkor Z 50mm f/1.2 S"}, //IB
2946             {22 , "Nikon", "Nikkor Z 24-50mm f/4-6.3"}, //IB
2947             {23 , "Nikon", "Nikkor Z 14-24mm f/2.8 S"}, //IB
2948             {0 , "", ""} //end of array
2949 };
2950 
2951         uint16_t lid = static_cast<uint16_t>(value.toLong());
2952         for(int i = 0; zmountlens[i].lid != 0; ++i){
2953           if ( zmountlens[i].lid == lid ) return os << zmountlens[i].manuf << " " << zmountlens[i].lensname;
2954         }
2955         return os << lid;
2956     }
2957 
printApertureLd4(std::ostream & os,const Value & value,const ExifData *)2958     std::ostream& Nikon3MakerNote::printApertureLd4(std::ostream& os,
2959                                               const Value& value,
2960                                               const ExifData*)
2961     {
2962         if (value.count() != 1 || value.typeId() != unsignedShort) {
2963             return os << "(" << value << ")";
2964         }
2965 
2966         double aperture = pow(2.0, value.toLong()/384.0 - 1.0);
2967         std::ostringstream oss;
2968         oss.copyfmt(os);
2969         os << std::fixed << std::setprecision(1) << "F" << aperture;
2970         os.copyfmt(oss);
2971         return os;
2972     }
printFocalLd4(std::ostream & os,const Value & value,const ExifData *)2973     std::ostream& Nikon3MakerNote::printFocalLd4(std::ostream& os,
2974                                               const Value& value,
2975                                               const ExifData*)
2976     {
2977         if (value.count() != 1 || value.typeId() != unsignedShort) {
2978             return os << "(" << value << ")";
2979         }
2980         std::ostringstream oss;
2981         oss.copyfmt(os);
2982         os << std::fixed << std::setprecision(1) << value.toLong() << " mm";
2983         os.copyfmt(oss);
2984         return os;
2985     }
2986 
2987 
2988 }}                                      // namespace Internal, Exiv2
2989