├── .gitignore
├── index.js
├── lib
└── exif
│ ├── index.js
│ ├── Buffer.js
│ ├── makernotes
│ ├── sanyo.js
│ ├── fujifilm.js
│ ├── panasonic.js
│ ├── olympus.js
│ ├── agfa.js
│ └── epson.js
│ └── ExifImage.js
├── test
├── evil1.jpg
├── right.jpg
├── test1.jpg
├── test2.jpg
├── test3.jpg
├── lens_info.jpg
├── down-mirrored.jpg
├── short-ascii-II.jpg
├── short-ascii-MM.jpg
├── agfa-makernotes.jpg
├── sony-alpha-6000.jpg
├── right.jpg.json
├── down-mirrored.jpg.json
├── lens_info.jpg.json
├── test2.jpg.json
├── right.jpg.expected
├── down-mirrored.jpg.expected
├── lens_info.jpg.expected
├── test1.jpg.json
├── short-ascii-II.jpg.expected
├── short-ascii-MM.jpg.expected
├── test2.jpg.expected
├── test1.jpg.expected
├── test3.jpg.expected
├── test3.jpg.json
├── evil1.jpg.expected
├── sony-alpha-6000.jpg.expected
├── evil1.jpg.json
├── agfa-makernotes.jpg.json
├── short-ascii-MM.jpg.json
├── api-test.js
├── short-ascii-II.jpg.json
└── sony-alpha-6000.jpg.json
├── .project
├── package.json
├── LICENSE.md
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./lib/exif');
--------------------------------------------------------------------------------
/lib/exif/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./ExifImage');
--------------------------------------------------------------------------------
/test/evil1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/evil1.jpg
--------------------------------------------------------------------------------
/test/right.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/right.jpg
--------------------------------------------------------------------------------
/test/test1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/test1.jpg
--------------------------------------------------------------------------------
/test/test2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/test2.jpg
--------------------------------------------------------------------------------
/test/test3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/test3.jpg
--------------------------------------------------------------------------------
/test/lens_info.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/lens_info.jpg
--------------------------------------------------------------------------------
/test/down-mirrored.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/down-mirrored.jpg
--------------------------------------------------------------------------------
/test/short-ascii-II.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/short-ascii-II.jpg
--------------------------------------------------------------------------------
/test/short-ascii-MM.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/short-ascii-MM.jpg
--------------------------------------------------------------------------------
/test/agfa-makernotes.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/agfa-makernotes.jpg
--------------------------------------------------------------------------------
/test/sony-alpha-6000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josephfrazier/node-exif/master/test/sony-alpha-6000.jpg
--------------------------------------------------------------------------------
/test/right.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Orientation":8,"XResolution":28,"YResolution":28,"ResolutionUnit":3,"YCbCrPositioning":1},"thumbnail":{},"exif":{},"gps":{},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/test/down-mirrored.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Orientation":4,"XResolution":28,"YResolution":28,"ResolutionUnit":3,"YCbCrPositioning":1},"thumbnail":{},"exif":{},"gps":{},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/test/lens_info.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"XResolution":96,"YResolution":96,"ResolutionUnit":2,"YCbCrPositioning":1,"ExifOffset":90},"thumbnail":{},"exif":{"ExifVersion":{"type":"Buffer","data":[48,50,51,48]},"ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":65535,"LensInfo":[10,400,1.1,1.2],"LensMake":"Lens Maker Inc.","LensModel":"Lens Model mk I","LensSerialNumber":"123"},"gps":{},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | node-exif
4 |
5 |
6 |
7 |
8 |
9 | com.eclipsesource.jshint.ui.builder
10 |
11 |
12 |
13 |
14 |
15 | org.nodeclipse.ui.NodeNature
16 | org.eclipse.wst.jsdt.core.jsNature
17 | tern.eclipse.ide.core.ternnature
18 |
19 |
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name" : "exif",
3 | "version" : "0.6.0",
4 | "description" : "A node.js library to extract Exif metadata from images.",
5 | "author" : [ "Daniel Leinich ", "Olivier Oeuillot " ],
6 | "keywords" : ["exif", "image", "jpeg", "jpg", "makernotes", "gps"],
7 | "main" : "./lib/exif",
8 | "repository" : {
9 | "type" : "git",
10 | "url" : "http://github.com/gomfunkel/node-exif.git"
11 | },
12 | "dependencies": {
13 | "debug": "^2.2"
14 | },
15 | "devDependencies": {
16 | "mocha": "^2.4"
17 | },
18 | "scripts": {
19 | "test": "node_modules/.bin/mocha --reporter spec test/*-test.js"
20 | }
21 | }
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License
===============
Copyright (c) 2010 Daniel Leinich .
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/test/test2.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Make":"Apple","Model":"iPhone 4S","XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"6.0.1","ModifyDate":"2012:12:23 14:47:49","YCbCrPositioning":1,"ExifOffset":192,"GPSInfo":582},"thumbnail":{},"exif":{"ExposureTime":0.008333333333333333,"FNumber":2.4,"ExposureProgram":2,"ISO":80,"ExifVersion":{"type":"Buffer","data":[48,50,50,49]},"DateTimeOriginal":"2012:12:23 14:47:49","CreateDate":"2012:12:23 14:47:49","ComponentsConfiguration":{"type":"Buffer","data":[0,0,0,1]},"ShutterSpeedValue":6.906947890818858,"ApertureValue":2.5260691271236086,"BrightnessValue":4.82600561272217,"MeteringMode":5,"Flash":16,"FocalLength":4.28,"SubjectArea":[1631,1223,881,881],"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":1319,"ExifImageHeight":1040,"SensingMethod":2,"ExposureMode":0,"WhiteBalance":0,"FocalLengthIn35mmFormat":35,"SceneCaptureType":0},"gps":{"GPSLatitudeRef":"N","GPSLatitude":[37,48.88,0],"GPSLongitudeRef":"W","GPSLongitude":[122,15.85,0],"GPSAltitudeRef":0,"GPSAltitude":2,"GPSTimeStamp":[22,47,49],"GPSImgDirectionRef":"T","GPSImgDirection":24.543212890625},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/test/right.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make :
2 | Camera model :
3 | Software :
4 | Bits per sample : 0
5 | Image width : 0
6 | Image height : 0
7 | Image description :
8 | Image orientation : 8
9 | Image copyright :
10 | Image date/time :
11 | Original date/time :
12 | Digitize date/time :
13 | Subsecond time :
14 | Exposure time : 1/0 s
15 | F-stop : f/0.0
16 | ISO speed : 0
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 0
20 | Metering mode : 0
21 | Lens focal length : 0.000000 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/down-mirrored.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make :
2 | Camera model :
3 | Software :
4 | Bits per sample : 0
5 | Image width : 0
6 | Image height : 0
7 | Image description :
8 | Image orientation : 4
9 | Image copyright :
10 | Image date/time :
11 | Original date/time :
12 | Digitize date/time :
13 | Subsecond time :
14 | Exposure time : 1/0 s
15 | F-stop : f/0.0
16 | ISO speed : 0
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 0
20 | Metering mode : 0
21 | Lens focal length : 0.000000 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/lens_info.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make :
2 | Camera model :
3 | Software :
4 | Bits per sample : 0
5 | Image width : 0
6 | Image height : 0
7 | Image description :
8 | Image orientation : 0
9 | Image copyright :
10 | Image date/time :
11 | Original date/time :
12 | Digitize date/time :
13 | Subsecond time :
14 | Exposure time : 1/0 s
15 | F-stop : f/0.0
16 | ISO speed : 0
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 0
20 | Metering mode : 0
21 | Lens focal length : 0.000000 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 10.000000 mm
28 | Lens max focal length: 400.000000 mm
29 | Lens f-stop min : f/1.1
30 | Lens f-stop max : f/1.2
31 | Lens make : Lens Maker Inc.
32 | Lens model : Lens Model mk I
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/test1.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Make":"Apple","Model":"iPhone 4S","Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"6.1","ModifyDate":"2013:02:06 16:00:03","YCbCrPositioning":1,"ExifOffset":198,"GPSInfo":580},"thumbnail":{"Compression":6,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":876,"ThumbnailLength":10430},"exif":{"ExposureTime":0.00021701388888888888,"FNumber":2.4,"ExposureProgram":2,"ISO":50,"ExifVersion":{"type":"Buffer","data":[48,50,50,49]},"DateTimeOriginal":"2013:02:06 16:00:03","CreateDate":"2013:02:06 16:00:03","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"ShutterSpeedValue":12.170018281535649,"ApertureValue":2.5260688216892597,"BrightnessValue":10.693570451436388,"MeteringMode":5,"Flash":0,"FocalLength":4.28,"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":3264,"ExifImageHeight":2448,"SensingMethod":2,"CustomRendered":2,"ExposureMode":0,"WhiteBalance":0,"FocalLengthIn35mmFormat":35,"SceneCaptureType":0},"gps":{"GPSLatitudeRef":"N","GPSLatitude":[37,53.1,0],"GPSLongitudeRef":"W","GPSLongitude":[122,37.35,0],"GPSAltitudeRef":0,"GPSAltitude":122,"GPSTimeStamp":[0,0,2.49],"GPSImgDirectionRef":"T","GPSImgDirection":7.69967707212056},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/test/short-ascii-II.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : XIAOMI
2 | Camera model : MI3
3 | Software :
4 | Bits per sample : 0
5 | Image width : 4208
6 | Image height : 3120
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2015:02:28 17:10:49
11 | Original date/time : 2015:02:28 17:10:49
12 | Digitize date/time : 2015:02:28 17:10:49
13 | Subsecond time :
14 | Exposure time : 1/20 s
15 | F-stop : f/2.2
16 | ISO speed : 250
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 2
21 | Lens focal length : 3.510000 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/short-ascii-MM.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : Canon
2 | Camera model : S40
3 | Software :
4 | Bits per sample : 0
5 | Image width : 2272
6 | Image height : 1704
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2003:12:14 12:01:44
11 | Original date/time : 2003:12:14 12:01:44
12 | Digitize date/time : 2003:12:14 12:01:44
13 | Subsecond time :
14 | Exposure time : 1/500 s
15 | F-stop : f/4.9
16 | ISO speed : 0
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 2
21 | Lens focal length : 21.300000 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 8114.285714
34 | Focal plane YRes : 8114.285714
35 |
--------------------------------------------------------------------------------
/test/test2.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : Apple
2 | Camera model : iPhone 4S
3 | Software : 6.0.1
4 | Bits per sample : 0
5 | Image width : 1319
6 | Image height : 1040
7 | Image description :
8 | Image orientation : 0
9 | Image copyright :
10 | Image date/time : 2012:12:23 14:47:49
11 | Original date/time : 2012:12:23 14:47:49
12 | Digitize date/time : 2012:12:23 14:47:49
13 | Subsecond time :
14 | Exposure time : 1/120 s
15 | F-stop : f/2.4
16 | ISO speed : 80
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 5
21 | Lens focal length : 4.280000 mm
22 | 35mm focal length : 35 mm
23 | GPS Latitude : 37.814667 deg (37.000000 deg, 48.880000 min, 0.000000 sec N)
24 | GPS Longitude : -122.264167 deg (122.000000 deg, 15.850000 min, 0.000000 sec W)
25 | GPS Altitude : 2.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/test1.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : Apple
2 | Camera model : iPhone 4S
3 | Software : 6.1
4 | Bits per sample : 0
5 | Image width : 3264
6 | Image height : 2448
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2013:02:06 16:00:03
11 | Original date/time : 2013:02:06 16:00:03
12 | Digitize date/time : 2013:02:06 16:00:03
13 | Subsecond time :
14 | Exposure time : 1/4608 s
15 | F-stop : f/2.4
16 | ISO speed : 50
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 0
20 | Metering mode : 5
21 | Lens focal length : 4.280000 mm
22 | 35mm focal length : 35 mm
23 | GPS Latitude : 37.885000 deg (37.000000 deg, 53.100000 min, 0.000000 sec N)
24 | GPS Longitude : -122.622500 deg (122.000000 deg, 37.350000 min, 0.000000 sec W)
25 | GPS Altitude : 122.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/test3.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : Apple
2 | Camera model : iPhone 4S
3 | Software : 6.0.1
4 | Bits per sample : 0
5 | Image width : 3264
6 | Image height : 2448
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2012:12:22 19:40:02
11 | Original date/time : 2012:12:22 19:40:02
12 | Digitize date/time : 2012:12:22 19:40:02
13 | Subsecond time :
14 | Exposure time : 1/15 s
15 | F-stop : f/2.4
16 | ISO speed : 500
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 5
21 | Lens focal length : 4.280000 mm
22 | 35mm focal length : 35 mm
23 | GPS Latitude : 37.776333 deg (37.000000 deg, 46.580000 min, 0.000000 sec N)
24 | GPS Longitude : -122.419667 deg (122.000000 deg, 25.180000 min, 0.000000 sec W)
25 | GPS Altitude : 15.833345 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/test3.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Make":"Apple","Model":"iPhone 4S","Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"6.0.1","ModifyDate":"2012:12:22 19:40:02","YCbCrPositioning":1,"ExifOffset":204,"GPSInfo":594},"thumbnail":{"Compression":6,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":890,"ThumbnailLength":9881},"exif":{"ExposureTime":0.06666666666666667,"FNumber":2.4,"ExposureProgram":2,"ISO":500,"ExifVersion":{"type":"Buffer","data":[48,50,50,49]},"DateTimeOriginal":"2012:12:22 19:40:02","CreateDate":"2012:12:22 19:40:02","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"ShutterSpeedValue":3.906905055487053,"ApertureValue":2.5260688216892597,"BrightnessValue":-0.3639823717948718,"MeteringMode":5,"Flash":16,"FocalLength":4.28,"SubjectArea":[1631,1223,881,881],"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":3264,"ExifImageHeight":2448,"SensingMethod":2,"ExposureMode":0,"WhiteBalance":0,"FocalLengthIn35mmFormat":35,"SceneCaptureType":0},"gps":{"GPSLatitudeRef":"N","GPSLatitude":[37,46.58,0],"GPSLongitudeRef":"W","GPSLongitude":[122,25.18,0],"GPSAltitudeRef":0,"GPSAltitude":15.833345415005438,"GPSTimeStamp":[3,39,45.27],"GPSImgDirectionRef":"T","GPSImgDirection":190.08588957055215},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/test/evil1.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : Canon
2 | Camera model : Canon PowerShot S400
3 | Software : Adobe Photoshop 7.0
4 | Bits per sample : 0
5 | Image width : 400
6 | Image height : 300
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2003:05:25 11:11:41
11 | Original date/time : 2003:05:24 16:40:33
12 | Digitize date/time : 2003:05:24 16:40:33
13 | Subsecond time :
14 | Exposure time : 1/8 s
15 | F-stop : f/2.8
16 | ISO speed : 0
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 5
21 | Lens focal length : 7.406250 mm
22 | 35mm focal length : 0 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 0.000000 mm
28 | Lens max focal length: 0.000000 mm
29 | Lens f-stop min : f/0.0
30 | Lens f-stop max : f/0.0
31 | Lens make :
32 | Lens model :
33 | Focal plane XRes : 8114.285714
34 | Focal plane YRes : 8114.285714
35 |
--------------------------------------------------------------------------------
/test/sony-alpha-6000.jpg.expected:
--------------------------------------------------------------------------------
1 | Camera make : SONY
2 | Camera model : ILCE-6000
3 | Software : ILCE-6000 v1.00
4 | Bits per sample : 0
5 | Image width : 6000
6 | Image height : 4000
7 | Image description :
8 | Image orientation : 1
9 | Image copyright :
10 | Image date/time : 2014:04:18 20:33:53
11 | Original date/time : 2014:04:18 20:33:53
12 | Digitize date/time : 2014:04:18 20:33:53
13 | Subsecond time :
14 | Exposure time : 1/0 s
15 | F-stop : f/8.0
16 | ISO speed : 100
17 | Subject distance : 0.000000 m
18 | Exposure bias : 0.000000 EV
19 | Flash used? : 1
20 | Metering mode : 5
21 | Lens focal length : 22.000000 mm
22 | 35mm focal length : 33 mm
23 | GPS Latitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
24 | GPS Longitude : 0.000000 deg (0.000000 deg, 0.000000 min, 0.000000 sec ?)
25 | GPS Altitude : 0.000000 m
26 | GPS Precision (DOP) : 0.000000
27 | Lens min focal length: 16.000000 mm
28 | Lens max focal length: 50.000000 mm
29 | Lens f-stop min : f/3.5
30 | Lens f-stop max : f/5.6
31 | Lens make :
32 | Lens model : E PZ 16-50mm F3.5-5.6 OSS
33 | Focal plane XRes : 0.000000
34 | Focal plane YRes : 0.000000
35 |
--------------------------------------------------------------------------------
/test/evil1.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Make":"Canon","Model":"Canon PowerShot S400","Orientation":1,"XResolution":180,"YResolution":180,"ResolutionUnit":2,"Software":"Adobe Photoshop 7.0","ModifyDate":"2003:05:25 11:11:41","YCbCrPositioning":1,"ExifOffset":217},"thumbnail":{"Compression":6,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":1057,"ThumbnailLength":6298},"exif":{"ExposureTime":0.125,"FNumber":2.8,"ExifVersion":{"type":"Buffer","data":[48,50,50,48]},"DateTimeOriginal":"2003:05:24 16:40:33","CreateDate":"2003:05:24 16:40:33","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":3,"ShutterSpeedValue":3,"ApertureValue":2.96875,"ExposureCompensation":0,"MaxApertureValue":2.96875,"MeteringMode":5,"Flash":16,"FocalLength":7.40625,"UserComment":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":400,"ExifImageHeight":300,"FocalPlaneXResolution":8114.285714285715,"FocalPlaneYResolution":8114.285714285715,"FocalPlaneResolutionUnit":2,"SensingMethod":2,"FileSource":{"type":"Buffer","data":[3]},"CustomRendered":0,"ExposureMode":0,"WhiteBalance":0,"DigitalZoomRatio":1,"SceneCaptureType":0},"gps":{},"interoperability":{},"makernote":{}}
--------------------------------------------------------------------------------
/lib/exif/Buffer.js:
--------------------------------------------------------------------------------
1 | //
2 | // A couple of methods that make working with buffers more easy.
3 | //
4 |
5 | Buffer.prototype.getByte = function (offset) {
6 | return this[offset];
7 | };
8 |
9 | Buffer.prototype.getSignedByte = function (offset) {
10 | return (this[offset] > 127) ? this[offset] - 256 : this[offset];
11 | };
12 |
13 | Buffer.prototype.getShort = function (offset, bigEndian) {
14 | var shortVal = (bigEndian) ? (this[offset] << 8) + this[offset + 1] : (this[offset + 1] << 8) + this[offset];
15 | return (shortVal < 0) ? shortVal + 65536 : shortVal;
16 | };
17 |
18 | Buffer.prototype.getSignedShort = function (offset, bigEndian) {
19 | var shortVal = (bigEndian) ? (this[offset] << 8) + this[offset + 1] : (this[offset + 1] << 8) + this[offset];
20 | return (shortVal > 32767) ? shortVal - 65536 : shortVal;
21 | };
22 |
23 | Buffer.prototype.getLong = function (offset, bigEndian) {
24 | var longVal = (bigEndian) ? (((((this[offset] << 8) + this[offset + 1]) << 8) + this[offset + 2]) << 8) + this[offset + 3] : (((((this[offset + 3] << 8) + this[offset + 2]) << 8) + this[offset + 1]) << 8) + this[offset];
25 | return (longVal < 0) ? longVal + 4294967296 : longVal;
26 | };
27 |
28 | Buffer.prototype.getSignedLong = function (offset, bigEndian) {
29 | var longVal = (bigEndian) ? (((((this[offset] << 8) + this[offset + 1]) << 8) + this[offset + 2]) << 8) + this[offset + 3] : (((((this[offset + 3] << 8) + this[offset + 2]) << 8) + this[offset + 1]) << 8) + this[offset];
30 | return (longVal > 2147483647) ? longVal - 4294967296 : longVal;
31 | };
32 |
33 | Buffer.prototype.getString = function (offset, length) {
34 | var string = [];
35 | for (var i = offset; i < offset + length; i++) {
36 | string.push(String.fromCharCode(this[i]));
37 | }
38 | return string.join('');
39 | };
--------------------------------------------------------------------------------
/lib/exif/makernotes/sanyo.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Sanyo flavored Makernotes.
3 | */
4 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
5 |
6 | // List of vendor specific Makernote tags found on
7 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Sanyo.html
8 | var tags = {
9 |
10 | 0x00FF : "MakerNoteOffset",
11 | 0x0100 : "SanyoThumbnail",
12 | 0x0200 : "SpecialMode",
13 | 0x0201 : "SanyoQuality",
14 | 0x0202 : "Macro",
15 | 0x0204 : "DigitalZoom",
16 | 0x0207 : "SoftwareVersion",
17 | 0x0208 : "PictInfo",
18 | 0x0209 : "CameraID",
19 | 0x020E : "SequentialShot",
20 | 0x020F : "WideRange",
21 | 0x0210 : "ColorAdjustmentMode",
22 | 0x0213 : "QuickShot",
23 | 0x0214 : "SelfTimer",
24 | 0x0216 : "VoiceMemo",
25 | 0x0217 : "RecordShutterRelease",
26 | 0x0218 : "FlickerReduce",
27 | 0x0219 : "OpticalZoomOn",
28 | 0x021B : "DigitalZoomOn",
29 | 0x021D : "LightSourceSpecial",
30 | 0x021E : "Resaved",
31 | 0x021F : "SceneSelect",
32 | 0x0223 : function (entry) {
33 |
34 | switch (entry.format) {
35 | case 0x0005:
36 | return "ManualFocusDistance";
37 | case 0x0007:
38 | return "FaceInfo";
39 | default:
40 | return false;
41 | }
42 |
43 | },
44 | 0x0224 : "SequenceShotInterval",
45 | 0x0225 : "FlashMode",
46 | 0x0E00 : "PrintIM",
47 | 0x0F00 : "DataDump"
48 |
49 | };
50 |
51 | // Sanyo flavored Makernote data starts after eight bytes
52 | var ifdOffset = makernoteOffset + 8;
53 |
54 | // Get the number of entries and extract them
55 | var numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
56 | if (this.options.sanyoMaxEntries) {
57 | numberOfEntries=Math.min(numberOfEntries, this.options.sanyoMaxEntries);
58 | }
59 |
60 | var makernoteData = {};
61 |
62 | for (var i = 0; i < numberOfEntries; i++) {
63 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, tags);
64 | if (exifEntry && exifEntry.tagName) {
65 | makernoteData[exifEntry.tagName] = exifEntry.value;
66 | }
67 | }
68 |
69 | return makernoteData;
70 |
71 | };
--------------------------------------------------------------------------------
/test/agfa-makernotes.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"ImageDescription":"AGFA DIGITAL CAMERA","Make":"Agfa Gevaert","Model":"SR841","Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"v841p-73","ModifyDate":"2002:04:18 11:05:28","YCbCrPositioning":2,"ExifOffset":284},"thumbnail":{"Compression":6,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":2012,"ThumbnailLength":6314},"exif":{"ExposureTime":0.05,"FNumber":2.8,"ISO":100,"ExifVersion":{"type":"Buffer","data":[48,50,49,48]},"DateTimeOriginal":"2002:04:18 11:05:28","CreateDate":"2002:04:18 11:05:28","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":1,"ExposureCompensation":1.5,"MaxApertureValue":3,"MeteringMode":0,"LightSource":0,"Flash":0,"FocalLength":5.3,"MakerNote":{"type":"Buffer","data":[65,71,70,65,32,0,1,0,6,0,0,2,4,0,3,0,0,0,210,3,0,0,1,2,3,0,1,0,0,0,4,0,0,0,2,2,3,0,1,0,0,0,0,0,0,0,3,2,3,0,1,0,0,0,0,0,0,0,4,2,5,0,1,0,0,0,222,3,0,0,0,15,4,0,30,0,0,0,230,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,10,0,0,0,0,219,0,128,0,222,77,0,0,0,0,1,99,0,0,0,86,150,0,0,7,180,0,0,158,155,0,0,35,101,0,0,198,200,0,0,51,174,0,0,51,174,1,1,0,0,16,84,0,0,13,170,10,35,0,0,0,0,0,0,0,0,0,0,0,101,17,0,0,0,51,51,6,0,0,0,0,0,0,0,0,0,0,0,64,0,43,45,0,0,74,3,31,231,12,240,222,0,0,100,100,0,0,192,16,17,255,255,255,0,0,0,0,0,0,0,98,56,0,0]},"UserComment":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":1280,"ExifImageHeight":960,"InteropOffset":862,"FileSource":{"type":"Buffer","data":[3]}},"gps":{},"interoperability":{"InteropIndex":"R98","InteropVersion":{"type":"Buffer","data":[48,49,48,48]}},"makernote":{"SpecialMode":[0,0,0],"Quality":4,"Macro":0,"BWMode":0,"DigitalZoom":2,"DataDump":[2147539712,5103104,16777216,99,38486,46087,39838,25891,51398,44595,16887347,1410334720,2852978688,8970,0,0,1139968,858980352,6,0,0,757792832,55181312,4027377439,1677721822,3221225572,4294906128,255,0,14434]}}
--------------------------------------------------------------------------------
/test/short-ascii-MM.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"Compression":6,"Make":"Canon","Model":"S40","Orientation":1,"XResolution":180,"YResolution":180,"ResolutionUnit":2,"ModifyDate":"2003:12:14 12:01:44","YCbCrPositioning":1,"ExifOffset":176},"thumbnail":{"Compression":6,"XResolution":180,"YResolution":180,"ResolutionUnit":2,"ThumbnailOffset":1276,"ThumbnailLength":5448},"exif":{"ExposureTime":0.002,"FNumber":4.9,"ExifVersion":{"type":"Buffer","data":[48,50,50,48]},"DateTimeOriginal":"2003:12:14 12:01:44","CreateDate":"2003:12:14 12:01:44","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":5,"ShutterSpeedValue":8.968666803194758,"ApertureValue":4.643856143856143,"ExposureCompensation":0,"MaxApertureValue":2.9708536585365852,"MeteringMode":2,"Flash":24,"FocalLength":21.3,"MakerNote":{"type":"Buffer","data":[12,0,1,0,3,0,40,0,0,0,28,3,0,0,2,0,3,0,4,0,0,0,108,3,0,0,3,0,3,0,4,0,0,0,116,3,0,0,4,0,3,0,27,0,0,0,124,3,0,0,0,0,3,0,6,0,0,0,178,3,0,0,0,0,3,0,4,0,0,0,190,3,0,0,6,0,2,0,32,0,0,0,198,3,0,0,7,0,2,0,24,0,0,0,230,3,0,0,8,0,4,0,1,0,0,0,59,225,17,0,9,0,2,0,32,0,0,0,254,3,0,0,16,0,4,0,1,0,0,0,0,0,17,1,13,0,3,0,21,0,0,0,30,4,0,0,0,0,0,0,80,0,2,0,0,0,5,0,1,0,0,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,17,0,5,0,1,0,3,48,1,0,255,255,255,255,170,2,227,0,32,0,149,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,49,0,224,8,224,8,0,0,1,0,2,0,170,2,30,1,215,0,0,0,0,0,0,0,0,0,54,0,0,0,160,0,20,1,149,0,31,1,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,2,48,0,0,0,0,0,0,1,0,14,3,0,0,149,0,33,1,0,0,0,0,0,0,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,77,71,58,80,111,119,101,114,83,104,111,116,32,83,52,48,32,74,80,69,71,0,0,0,0,0,0,0,0,0,0,70,105,114,109,119,97,114,101,32,86,101,114,115,105,111,110,32,49,46,49,48,0,0,0,65,110,100,114,101,97,115,32,72,117,103,103,101,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,3,0,1,128,122,1,1,128,0,0,0,0,0,0,3,1,2,0,0,0,10,0,0,0,0,0,0,0,57,0,198,0,5,0,0,0,0,0,0,0,73,73,42,0,134,2,0,0]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":2272,"ExifImageHeight":1704,"InteropOffset":1128,"FocalPlaneXResolution":8114.285714285715,"FocalPlaneYResolution":8114.285714285715,"FocalPlaneResolutionUnit":2,"SensingMethod":2,"FileSource":{"type":"Buffer","data":[3]},"CustomRendered":0,"ExposureMode":0,"WhiteBalance":0,"DigitalZoomRatio":1,"SceneCaptureType":0},"gps":{},"interoperability":{"InteropIndex":"R98","InteropVersion":{"type":"Buffer","data":[48,49,48,48]},"RelatedImageWidth":2272,"RelatedImageHeight":1704},"makernote":{"error":"Unable to extract Makernote information as it is in an unsupported or unrecognized format."}}
--------------------------------------------------------------------------------
/lib/exif/makernotes/fujifilm.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Fujifilm flavored Makernotes which are always stored in little
3 | * endian, no matter what the rest of the file is. Additionally the offsets
4 | * are relative to the start of the Makernote instead of the start of the
5 | * TIFF header.
6 | */
7 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
8 |
9 | // List of vendor specific Makernote tags found on
10 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/FujiFilm.html
11 | var tags = {
12 | 0x0000 : "Version",
13 | 0x0010 : "InternalSerialNumber",
14 | 0x1000 : "Quality",
15 | 0x1001 : "Sharpness",
16 | 0x1002 : "WhiteBalance",
17 | 0x1003 : "Saturation",
18 | 0x1004 : "Contrast",
19 | 0x1005 : "ColorTemperature",
20 | 0x1006 : "Contrast",
21 | 0x100a : "WhiteBalanceFineTune",
22 | 0x100b : "NoiseReduction",
23 | 0x100e : "HighISONoiseReduction",
24 | 0x1010 : "FujiFlashMode",
25 | 0x1011 : "FlashExposureComp",
26 | 0x1020 : "Macro",
27 | 0x1021 : "FocusMode",
28 | 0x1023 : "FocusPixel",
29 | 0x1030 : "SlowSync",
30 | 0x1033 : "EXRAuto",
31 | 0x1034 : "EXRMode",
32 | 0x1100 : "AutoBracketing",
33 | 0x1101 : "SequenceNumber",
34 | 0x1210 : "ColorMode",
35 | 0x1300 : "BlurWarning",
36 | 0x1301 : "FocusWarning",
37 | 0x1302 : "ExposureWarning",
38 | 0x1304 : "GEImageSize",
39 | 0x1400 : "DynamicRange",
40 | 0x1401 : "FilmMode",
41 | 0x1402 : "DynamicRangeSetting",
42 | 0x1403 : "DevelopmentDynamicRange",
43 | 0x1404 : "MinFocalLength",
44 | 0x1405 : "MaxFocalLength",
45 | 0x1406 : "MaxApertureAtMinFocal",
46 | 0x1407 : "MaxApertureAtMaxFocal",
47 | 0x140b : "AutoDynamicRange",
48 | 0x4100 : "FacesDetected",
49 | 0x4103 : "FacePositions",
50 | 0x4282 : "FaceRecInfo",
51 | 0x8000 : "FileSource",
52 | 0x8002 : "OrderNumber",
53 | 0x8003 : "FrameNumber",
54 | 0xb211 : "Parallax"
55 |
56 | };
57 |
58 | // Start of the Fujifilm flavored Makernote data is determined by the four
59 | // bytes following the Makernote vendor name
60 | var ifdOffset = makernoteOffset + data.getLong(makernoteOffset + 8, false, tiffOffset);
61 |
62 | // Get the number of entries and extract them
63 | var numberOfEntries = data.getShort(ifdOffset, false);
64 | if (this.options.fujifilmMaxEntries) {
65 | numberOfEntries=Math.min(numberOfEntries, this.options.fujifilmMaxEntries);
66 | }
67 |
68 | var makernoteData = {};
69 |
70 | for (var i = 0; i < numberOfEntries; i++) {
71 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), makernoteOffset, false, tags);
72 | if (exifEntry && exifEntry.tagName !== null) makernoteData[exifEntry.tagName] = exifEntry.value;
73 | }
74 |
75 | return makernoteData;
76 |
77 | };
--------------------------------------------------------------------------------
/lib/exif/makernotes/panasonic.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Panasonic flavored Makernotes.
3 | */
4 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
5 |
6 | // List of vendor specific Makernote tags found on
7 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Panasonic.html
8 | var tags = {
9 |
10 | 0x0001 : "ImageQuality",
11 | 0x0002 : "FirmwareVersion",
12 | 0x0003 : "WhiteBalance",
13 | 0x0007 : "FocusMode",
14 | 0x000f : "AFAreaMode",
15 | 0x001a : "ImageStabilization",
16 | 0x001c : "MacroMode",
17 | 0x001f : "ShootingMode",
18 | 0x0020 : "Audio",
19 | 0x0021 : "DataDump",
20 | 0x0023 : "WhiteBalanceBias",
21 | 0x0024 : "FlashBias",
22 | 0x0025 : "InternalSerialNumber",
23 | 0x0026 : "PanasonicExifVersion",
24 | 0x0028 : "ColorEffect",
25 | 0x0029 : "TimeSincePowerOn",
26 | 0x002a : "BurstMode",
27 | 0x002b : "SequenceNumber",
28 | 0x002c : "ContrastMode",
29 | 0x002d : "NoiseReduction",
30 | 0x002e : "SelfTimer",
31 | 0x0030 : "Rotation",
32 | 0x0031 : "AFAssistLamp",
33 | 0x0032 : "ColorMode",
34 | 0x0033 : "BabyAge",
35 | 0x0034 : "OpticalZoomMode",
36 | 0x0035 : "ConversionLens",
37 | 0x0036 : "TravelDay",
38 | 0x0039 : "Contrast",
39 | 0x003a : "WorldTimeLocation",
40 | 0x003b : "TextStamp",
41 | 0x003c : "ProgramISO",
42 | 0x003d : "AdvancedSceneType",
43 | 0x003e : "TextStamp",
44 | 0x003f : "FacesDetected",
45 | 0x0040 : "Saturation",
46 | 0x0041 : "Sharpness",
47 | 0x0042 : "FilmMode",
48 | 0x0044 : "ColorTempKelvin",
49 | 0x0045 : "BracketSettings",
50 | 0x0046 : "WBShiftAB",
51 | 0x0047 : "WBShiftGM",
52 | 0x0048 : "FlashCurtain",
53 | 0x0049 : "LongExposureNoiseReduction",
54 | 0x004b : "PanasonicImageWidth",
55 | 0x004c : "PanasonicImageHeight",
56 | 0x004d : "AFPointPosition",
57 | 0x004e : "FaceDetInfo",
58 | 0x0051 : "LensType",
59 | 0x0052 : "LensSerialNumber",
60 | 0x0053 : "AccessoryType",
61 | 0x0054 : "AccessorySerialNumber",
62 | 0x0059 : "Transform",
63 | 0x005d : "IntelligentExposure",
64 | 0x0060 : "LensFirmwareVersion",
65 | 0x0061 : "FaceRecInfo",
66 | 0x0062 : "FlashWarning",
67 | 0x0063 : "RecognizedFaceFlags?",
68 | 0x0065 : "Title",
69 | 0x0066 : "BabyName",
70 | 0x0067 : "Location",
71 | 0x0069 : "Country",
72 | 0x006b : "State",
73 | 0x006d : "City",
74 | 0x006f : "Landmark",
75 | 0x0070 : "IntelligentResolution",
76 | 0x0077 : "BurstSpeed",
77 | 0x0079 : "IntelligentD-Range",
78 | 0x007c : "ClearRetouch",
79 | 0x0086 : "ManometerPressure",
80 | 0x0089 : "PhotoStyle",
81 | 0x008a : "ShadingCompensation",
82 | 0x008c : "AccelerometerZ",
83 | 0x008d : "AccelerometerX",
84 | 0x008e : "AccelerometerY",
85 | 0x008f : "CameraOrientation",
86 | 0x0090 : "RollAngle",
87 | 0x0091 : "PitchAngle",
88 | 0x0093 : "SweepPanoramaDirection",
89 | 0x0094 : "SweepPanoramaFieldOfView",
90 | 0x0096 : "TimerRecording",
91 | 0x009d : "InternalNDFilter",
92 | 0x009e : "HDR",
93 | 0x009f : "ShutterType",
94 | 0x00a3 : "ClearRetouchValue",
95 | 0x00ab : "TouchAE",
96 | 0x0e00 : "PrintIM",
97 | 0x8000 : "MakerNoteVersion",
98 | 0x8001 : "SceneMode",
99 | 0x8004 : "WBRedLevel",
100 | 0x8005 : "WBGreenLevel",
101 | 0x8006 : "WBBlueLevel",
102 | 0x8007 : "FlashFired",
103 | 0x8008 : "TextStamp",
104 | 0x8009 : "TextStamp",
105 | 0x8010 : "BabyAge",
106 | 0x8012 : "Transform"
107 |
108 | };
109 |
110 | // Panasonic flavored Makernote data starts after twelve bytes
111 | var ifdOffset = makernoteOffset + 12;
112 |
113 | // Get the number of entries and extract them
114 | var numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
115 | if (this.options.panasonicMaxEntries) {
116 | numberOfEntries=Math.min(numberOfEntries, this.options.panasonicMaxEntries);
117 | }
118 |
119 | var makernoteData = {};
120 |
121 | for (var i = 0; i < numberOfEntries; i++) {
122 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), makernoteOffset, false, tags);
123 | if( ! exifEntry ) break; // stop if exifEntry starts to return false, prevents a process out of memory
124 | if (exifEntry && exifEntry.tagName) {
125 | makernoteData[exifEntry.tagName] = exifEntry.value;
126 | }
127 | }
128 |
129 | return makernoteData;
130 |
131 | };
132 |
--------------------------------------------------------------------------------
/test/api-test.js:
--------------------------------------------------------------------------------
1 | var assert = require('assert');
2 | var fs=require('fs');
3 | var Path = require('path');
4 |
5 | describe('node-exif API', function() {
6 |
7 | var path=Path.join(__dirname, "evil1.jpg");
8 | var json='{"image":{"Make":"Canon","Model":"Canon PowerShot S400","Orientation":1,"XResolution":180,"YResolution":180,"ResolutionUnit":2,"Software":"Adobe Photoshop 7.0","ModifyDate":"2003:05:25 11:11:41","YCbCrPositioning":1,"ExifOffset":217},"thumbnail":{"Compression":6,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":1057,"ThumbnailLength":6298},"exif":{"ExposureTime":0.125,"FNumber":2.8,"ExifVersion":{"type":"Buffer","data":[48,50,50,48]},"DateTimeOriginal":"2003:05:24 16:40:33","CreateDate":"2003:05:24 16:40:33","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":3,"ShutterSpeedValue":3,"ApertureValue":2.96875,"ExposureCompensation":0,"MaxApertureValue":2.96875,"MeteringMode":5,"Flash":16,"FocalLength":7.40625,"UserComment":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":400,"ExifImageHeight":300,"FocalPlaneXResolution":8114.285714285715,"FocalPlaneYResolution":8114.285714285715,"FocalPlaneResolutionUnit":2,"SensingMethod":2,"FileSource":{"type":"Buffer","data":[3]},"CustomRendered":0,"ExposureMode":0,"WhiteBalance":0,"DigitalZoomRatio":1,"SceneCaptureType":0},"gps":{},"interoperability":{},"makernote":{}}';
9 |
10 |
11 | it('test constructor (filename)', function(done) {
12 |
13 | var ExifImage = require('..').ExifImage;
14 |
15 | new ExifImage({image: path }, function(error, data) {
16 | if (error) {
17 | throw error;
18 | }
19 |
20 | assert.equal(JSON.stringify(data), json, "Not same datas ?");
21 |
22 | done();
23 | });
24 | });
25 |
26 | it('test constructor (buffer)', function(done) {
27 |
28 | var ExifImage = require('..').ExifImage;
29 |
30 | var buffer=fs.readFileSync(path);
31 |
32 | new ExifImage({image: buffer }, function(error, data) {
33 | if (error) {
34 | throw error;
35 | }
36 |
37 | assert.equal(JSON.stringify(data), json, "Not same datas ?");
38 |
39 | done();
40 | });
41 | });
42 |
43 | it('test loadImage (filename)', function(done) {
44 |
45 | var ExifImage = require('..').ExifImage;
46 |
47 | var exif=new ExifImage();
48 |
49 | exif.loadImage(path, function(error, data) {
50 | if (error) {
51 | throw error;
52 | }
53 |
54 | assert.equal(JSON.stringify(data), json, "Not same datas ?");
55 |
56 | done();
57 | });
58 | });
59 |
60 | it('test loadImage (buffer)', function(done) {
61 |
62 | var ExifImage = require('..').ExifImage;
63 |
64 | var buffer=fs.readFileSync(path);
65 |
66 | var exif=new ExifImage();
67 |
68 | exif.loadImage(buffer , function(error, data) {
69 | if (error) {
70 | throw error;
71 | }
72 |
73 | assert.equal(JSON.stringify(data), json, "Not same datas");
74 |
75 | done();
76 | });
77 | });
78 |
79 | it('test wrapper', function(done) {
80 |
81 | var Exif = require('..');
82 |
83 | Exif(path, function(error, data, dataPath) {
84 | if (error) {
85 | throw error;
86 | }
87 |
88 | assert.equal(dataPath, path, "Not same path");
89 | delete data.path;
90 |
91 | assert.equal(JSON.stringify(data), json, "Not same datas ?");
92 |
93 | done();
94 | });
95 | });
96 | });
97 |
98 | describe('node-exif tests', function() {
99 | var ExifImage = require('..').ExifImage;
100 |
101 | var files=fs.readdirSync(__dirname);
102 |
103 | files.forEach(function(f) {
104 | if (!/\.jpg$/.exec(f)) {
105 | return;
106 | }
107 |
108 | var path=Path.join(__dirname, f);
109 |
110 | it('test '+f, function(done) {
111 | var expected=String(fs.readFileSync(path+".json"));
112 |
113 | new ExifImage({image: path }, function(error, data) {
114 | if (error) {
115 | throw error;
116 | }
117 |
118 | var json=JSON.stringify(data);
119 |
120 | //console.log(" data=", json, json.length);
121 | // console.log("expected=", expected, expected.length);
122 |
123 | assert.equal(json, expected, "Data are not the same");
124 |
125 | done();
126 | });
127 | });
128 | });
129 | });
130 |
--------------------------------------------------------------------------------
/lib/exif/makernotes/olympus.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Olympus flavored Makernotes.
3 | */
4 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
5 |
6 | // List of vendor specific Makernote tags found on
7 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Olympus.html
8 | var tags = {
9 |
10 | 0x0000 : "MakerNoteVersion",
11 | 0x0001 : "MinoltaCameraSettingsOld",
12 | 0x0003 : "MinoltaCameraSettings",
13 | 0x0040 : "CompressedImageSize",
14 | 0x0081 : "PreviewImageData",
15 | 0x0088 : "PreviewImageStart",
16 | 0x0089 : "PreviewImageLength",
17 | 0x0100 : "ThumbnailImage",
18 | 0x0104 : "BodyFirmwareVersion",
19 | 0x0200 : "SpecialMode",
20 | 0x0201 : "Quality",
21 | 0x0202 : "Macro",
22 | 0x0203 : "BWMode",
23 | 0x0204 : "DigitalZoom",
24 | 0x0205 : "FocalPlaneDiagonal",
25 | 0x0206 : "LensDistortionParams",
26 | 0x0207 : "CameraType",
27 | 0x0208 : "TextInfo",
28 | 0x0209 : "CameraID",
29 | 0x020B : "EpsonImageWidth",
30 | 0x020C : "EpsonImageHeight",
31 | 0x020D : "EpsonSoftware",
32 | 0x0280 : "PreviewImage",
33 | 0x0300 : "PreCaptureFrames",
34 | 0x0301 : "WhiteBoard",
35 | 0x0302 : "OneTouchWB",
36 | 0x0303 : "WhiteBalanceBracket",
37 | 0x0304 : "WhiteBalanceBias",
38 | 0x0403 : "SceneMode",
39 | 0x0404 : "SerialNumber",
40 | 0x0405 : "Firmware",
41 | 0x0E00 : "PrintIM",
42 | 0x0F00 : "DataDump",
43 | 0x0F01 : "DataDump2",
44 | 0x0F04 : "ZoomedPreviewStart",
45 | 0x0F05 : "ZoomedPreviewLength",
46 | 0x0F06 : "ZoomedPreviewSize",
47 | 0x1000 : "ShutterSpeedValue",
48 | 0x1001 : "ISOValue",
49 | 0x1002 : "ApertureValue",
50 | 0x1003 : "BrightnessValue",
51 | 0x1004 : "FlashMode",
52 | 0x1005 : "FlashDevice",
53 | 0x1006 : "ExposureCompensation",
54 | 0x1007 : "SensorTemperature",
55 | 0x1008 : "LensTemperature",
56 | 0x1009 : "LightCondition",
57 | 0x100A : "FocusRange",
58 | 0x100B : "FocusMode",
59 | 0x100C : "ManualFocusDistance",
60 | 0x100D : "ZoomStepCount",
61 | 0x100E : "FocusStepCount",
62 | 0x100F : "Sharpness",
63 | 0x1010 : "FlashChargeLevel",
64 | 0x1011 : "ColorMatrix",
65 | 0x1012 : "BlackLevel",
66 | 0x1013 : "ColorTemperatureBG?",
67 | 0x1014 : "ColorTemperatureRG?",
68 | 0x1015 : "WBMode",
69 | 0x1017 : "RedBalance",
70 | 0x1018 : "BlueBalance",
71 | 0x1019 : "ColorMatrixNumber",
72 | 0x101A : "SerialNumber",
73 | 0x101B : "ExternalFlashAE1_0?",
74 | 0x101C : "ExternalFlashAE2_0?",
75 | 0x101D : "InternalFlashAE1_0?",
76 | 0x101E : "InternalFlashAE2_0?",
77 | 0x101F : "ExternalFlashAE1?",
78 | 0x1020 : "ExternalFlashAE2?",
79 | 0x1021 : "InternalFlashAE1?",
80 | 0x1022 : "InternalFlashAE2?",
81 | 0x1023 : "FlashExposureComp",
82 | 0x1024 : "InternalFlashTable",
83 | 0x1025 : "ExternalFlashGValue",
84 | 0x1026 : "ExternalFlashBounce",
85 | 0x1027 : "ExternalFlashZoom",
86 | 0x1028 : "ExternalFlashMode",
87 | 0x1029 : "Contrast",
88 | 0x102A : "SharpnessFactor",
89 | 0x102B : "ColorControl",
90 | 0x102C : "ValidBits",
91 | 0x102D : "CoringFilter",
92 | 0x102E : "OlympusImageWidth",
93 | 0x102F : "OlympusImageHeight",
94 | 0x1030 : "SceneDetect",
95 | 0x1031 : "SceneArea?",
96 | 0x1033 : "SceneDetectData?",
97 | 0x1034 : "CompressionRatio",
98 | 0x1035 : "PreviewImageValid",
99 | 0x1036 : "PreviewImageStart",
100 | 0x1037 : "PreviewImageLength",
101 | 0x1038 : "AFResult",
102 | 0x1039 : "CCDScanMode",
103 | 0x103A : "NoiseReduction",
104 | 0x103B : "FocusStepInfinity",
105 | 0x103C : "FocusStepNear",
106 | 0x103D : "LightValueCenter",
107 | 0x103E : "LightValuePeriphery",
108 | 0x103F : "FieldCount?",
109 | 0x2010 : "Equipment",
110 | 0x2020 : "CameraSettings",
111 | 0x2030 : "RawDevelopment",
112 | 0x2031 : "RawDev2",
113 | 0x2040 : "ImageProcessing",
114 | 0x2050 : "FocusInfo",
115 | 0x2100 : "Olympus2100",
116 | 0x2200 : "Olympus2200",
117 | 0x2300 : "Olympus2300",
118 | 0x2400 : "Olympus2400",
119 | 0x2500 : "Olympus2500",
120 | 0x2600 : "Olympus2600",
121 | 0x2700 : "Olympus2700",
122 | 0x2800 : "Olympus2800",
123 | 0x2900 : "Olympus2900",
124 | 0x3000 : "RawInfo",
125 | 0x4000 : "MainInfo",
126 | 0x5000 : "UnknownInfo"
127 |
128 | };
129 |
130 | // Olympus flavored Makernote data starts after eight bytes
131 | var ifdOffset = makernoteOffset + 8;
132 |
133 | // Get the number of entries and extract them
134 | var numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
135 | if (this.options.olympusMaxEntries) {
136 | numberOfEntries=Math.min(numberOfEntries, this.options.olympusMaxEntries);
137 | }
138 |
139 | var makernoteData = {};
140 |
141 | for (var i = 0; i < numberOfEntries; i++) {
142 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, tags);
143 | if (exifEntry && exifEntry.tagName !== null) makernoteData[exifEntry.tagName] = exifEntry.value;
144 | }
145 |
146 | return makernoteData;
147 |
148 | };
--------------------------------------------------------------------------------
/lib/exif/makernotes/agfa.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Agfa flavored Makernotes which are equal to those of Olympus.
3 | */
4 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
5 |
6 | // List of vendor specific Makernote tags found on
7 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Olympus.html
8 | var tags = {
9 |
10 | 0x0000 : "MakerNoteVersion",
11 | 0x0001 : "MinoltaCameraSettingsOld",
12 | 0x0003 : "MinoltaCameraSettings",
13 | 0x0040 : "CompressedImageSize",
14 | 0x0081 : "PreviewImageData",
15 | 0x0088 : "PreviewImageStart",
16 | 0x0089 : "PreviewImageLength",
17 | 0x0100 : "ThumbnailImage",
18 | 0x0104 : "BodyFirmwareVersion",
19 | 0x0200 : "SpecialMode",
20 | 0x0201 : "Quality",
21 | 0x0202 : "Macro",
22 | 0x0203 : "BWMode",
23 | 0x0204 : "DigitalZoom",
24 | 0x0205 : "FocalPlaneDiagonal",
25 | 0x0206 : "LensDistortionParams",
26 | 0x0207 : "CameraType",
27 | 0x0208 : "TextInfo",
28 | 0x0209 : "CameraID",
29 | 0x020B : "EpsonImageWidth",
30 | 0x020C : "EpsonImageHeight",
31 | 0x020D : "EpsonSoftware",
32 | 0x0280 : "PreviewImage",
33 | 0x0300 : "PreCaptureFrames",
34 | 0x0301 : "WhiteBoard",
35 | 0x0302 : "OneTouchWB",
36 | 0x0303 : "WhiteBalanceBracket",
37 | 0x0304 : "WhiteBalanceBias",
38 | 0x0403 : "SceneMode",
39 | 0x0404 : "SerialNumber",
40 | 0x0405 : "Firmware",
41 | 0x0E00 : "PrintIM",
42 | 0x0F00 : "DataDump",
43 | 0x0F01 : "DataDump2",
44 | 0x0F04 : "ZoomedPreviewStart",
45 | 0x0F05 : "ZoomedPreviewLength",
46 | 0x0F06 : "ZoomedPreviewSize",
47 | 0x1000 : "ShutterSpeedValue",
48 | 0x1001 : "ISOValue",
49 | 0x1002 : "ApertureValue",
50 | 0x1003 : "BrightnessValue",
51 | 0x1004 : "FlashMode",
52 | 0x1005 : "FlashDevice",
53 | 0x1006 : "ExposureCompensation",
54 | 0x1007 : "SensorTemperature",
55 | 0x1008 : "LensTemperature",
56 | 0x1009 : "LightCondition",
57 | 0x100A : "FocusRange",
58 | 0x100B : "FocusMode",
59 | 0x100C : "ManualFocusDistance",
60 | 0x100D : "ZoomStepCount",
61 | 0x100E : "FocusStepCount",
62 | 0x100F : "Sharpness",
63 | 0x1010 : "FlashChargeLevel",
64 | 0x1011 : "ColorMatrix",
65 | 0x1012 : "BlackLevel",
66 | 0x1013 : "ColorTemperatureBG?",
67 | 0x1014 : "ColorTemperatureRG?",
68 | 0x1015 : "WBMode",
69 | 0x1017 : "RedBalance",
70 | 0x1018 : "BlueBalance",
71 | 0x1019 : "ColorMatrixNumber",
72 | 0x101A : "SerialNumber",
73 | 0x101B : "ExternalFlashAE1_0?",
74 | 0x101C : "ExternalFlashAE2_0?",
75 | 0x101D : "InternalFlashAE1_0?",
76 | 0x101E : "InternalFlashAE2_0?",
77 | 0x101F : "ExternalFlashAE1?",
78 | 0x1020 : "ExternalFlashAE2?",
79 | 0x1021 : "InternalFlashAE1?",
80 | 0x1022 : "InternalFlashAE2?",
81 | 0x1023 : "FlashExposureComp",
82 | 0x1024 : "InternalFlashTable",
83 | 0x1025 : "ExternalFlashGValue",
84 | 0x1026 : "ExternalFlashBounce",
85 | 0x1027 : "ExternalFlashZoom",
86 | 0x1028 : "ExternalFlashMode",
87 | 0x1029 : "Contrast",
88 | 0x102A : "SharpnessFactor",
89 | 0x102B : "ColorControl",
90 | 0x102C : "ValidBits",
91 | 0x102D : "CoringFilter",
92 | 0x102E : "OlympusImageWidth",
93 | 0x102F : "OlympusImageHeight",
94 | 0x1030 : "SceneDetect",
95 | 0x1031 : "SceneArea?",
96 | 0x1033 : "SceneDetectData?",
97 | 0x1034 : "CompressionRatio",
98 | 0x1035 : "PreviewImageValid",
99 | 0x1036 : "PreviewImageStart",
100 | 0x1037 : "PreviewImageLength",
101 | 0x1038 : "AFResult",
102 | 0x1039 : "CCDScanMode",
103 | 0x103A : "NoiseReduction",
104 | 0x103B : "FocusStepInfinity",
105 | 0x103C : "FocusStepNear",
106 | 0x103D : "LightValueCenter",
107 | 0x103E : "LightValuePeriphery",
108 | 0x103F : "FieldCount?",
109 | 0x2010 : "Equipment",
110 | 0x2020 : "CameraSettings",
111 | 0x2030 : "RawDevelopment",
112 | 0x2031 : "RawDev2",
113 | 0x2040 : "ImageProcessing",
114 | 0x2050 : "FocusInfo",
115 | 0x2100 : "Olympus2100",
116 | 0x2200 : "Olympus2200",
117 | 0x2300 : "Olympus2300",
118 | 0x2400 : "Olympus2400",
119 | 0x2500 : "Olympus2500",
120 | 0x2600 : "Olympus2600",
121 | 0x2700 : "Olympus2700",
122 | 0x2800 : "Olympus2800",
123 | 0x2900 : "Olympus2900",
124 | 0x3000 : "RawInfo",
125 | 0x4000 : "MainInfo",
126 | 0x5000 : "UnknownInfo"
127 |
128 | };
129 |
130 | // Agfa flavored Makernote data starts after eight bytes
131 | var ifdOffset = makernoteOffset + 8;
132 |
133 | // Get the number of entries and extract them
134 | var numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
135 | if (this.options.agfaMaxEntries) {
136 | numberOfEntries=Math.min(numberOfEntries, this.options.agfaMaxEntries);
137 | }
138 |
139 | var makernoteData = {};
140 |
141 | for (var i = 0; i < numberOfEntries; i++) {
142 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, tags);
143 | if (exifEntry && exifEntry.tagName !== null) {
144 | makernoteData[exifEntry.tagName] = exifEntry.value;
145 | }
146 | }
147 |
148 | return makernoteData;
149 |
150 | };
--------------------------------------------------------------------------------
/lib/exif/makernotes/epson.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts Epson flavored Makernotes which are equal to those of Olympus.
3 | */
4 | exports.extractMakernotes = function (data, makernoteOffset, tiffOffset) {
5 |
6 | // List of vendor specific Makernote tags found on
7 | // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Olympus.html
8 | var tags = {
9 |
10 | 0x0000 : "MakerNoteVersion",
11 | 0x0001 : "MinoltaCameraSettingsOld",
12 | 0x0003 : "MinoltaCameraSettings",
13 | 0x0040 : "CompressedImageSize",
14 | 0x0081 : "PreviewImageData",
15 | 0x0088 : "PreviewImageStart",
16 | 0x0089 : "PreviewImageLength",
17 | 0x0100 : "ThumbnailImage",
18 | 0x0104 : "BodyFirmwareVersion",
19 | 0x0200 : "SpecialMode",
20 | 0x0201 : "Quality",
21 | 0x0202 : "Macro",
22 | 0x0203 : "BWMode",
23 | 0x0204 : "DigitalZoom",
24 | 0x0205 : "FocalPlaneDiagonal",
25 | 0x0206 : "LensDistortionParams",
26 | 0x0207 : "CameraType",
27 | 0x0208 : "TextInfo",
28 | 0x0209 : "CameraID",
29 | 0x020B : "EpsonImageWidth",
30 | 0x020C : "EpsonImageHeight",
31 | 0x020D : "EpsonSoftware",
32 | 0x0280 : "PreviewImage",
33 | 0x0300 : "PreCaptureFrames",
34 | 0x0301 : "WhiteBoard",
35 | 0x0302 : "OneTouchWB",
36 | 0x0303 : "WhiteBalanceBracket",
37 | 0x0304 : "WhiteBalanceBias",
38 | 0x0403 : "SceneMode",
39 | 0x0404 : "SerialNumber",
40 | 0x0405 : "Firmware",
41 | 0x0E00 : "PrintIM",
42 | 0x0F00 : "DataDump",
43 | 0x0F01 : "DataDump2",
44 | 0x0F04 : "ZoomedPreviewStart",
45 | 0x0F05 : "ZoomedPreviewLength",
46 | 0x0F06 : "ZoomedPreviewSize",
47 | 0x1000 : "ShutterSpeedValue",
48 | 0x1001 : "ISOValue",
49 | 0x1002 : "ApertureValue",
50 | 0x1003 : "BrightnessValue",
51 | 0x1004 : "FlashMode",
52 | 0x1005 : "FlashDevice",
53 | 0x1006 : "ExposureCompensation",
54 | 0x1007 : "SensorTemperature",
55 | 0x1008 : "LensTemperature",
56 | 0x1009 : "LightCondition",
57 | 0x100A : "FocusRange",
58 | 0x100B : "FocusMode",
59 | 0x100C : "ManualFocusDistance",
60 | 0x100D : "ZoomStepCount",
61 | 0x100E : "FocusStepCount",
62 | 0x100F : "Sharpness",
63 | 0x1010 : "FlashChargeLevel",
64 | 0x1011 : "ColorMatrix",
65 | 0x1012 : "BlackLevel",
66 | 0x1013 : "ColorTemperatureBG?",
67 | 0x1014 : "ColorTemperatureRG?",
68 | 0x1015 : "WBMode",
69 | 0x1017 : "RedBalance",
70 | 0x1018 : "BlueBalance",
71 | 0x1019 : "ColorMatrixNumber",
72 | 0x101A : "SerialNumber",
73 | 0x101B : "ExternalFlashAE1_0?",
74 | 0x101C : "ExternalFlashAE2_0?",
75 | 0x101D : "InternalFlashAE1_0?",
76 | 0x101E : "InternalFlashAE2_0?",
77 | 0x101F : "ExternalFlashAE1?",
78 | 0x1020 : "ExternalFlashAE2?",
79 | 0x1021 : "InternalFlashAE1?",
80 | 0x1022 : "InternalFlashAE2?",
81 | 0x1023 : "FlashExposureComp",
82 | 0x1024 : "InternalFlashTable",
83 | 0x1025 : "ExternalFlashGValue",
84 | 0x1026 : "ExternalFlashBounce",
85 | 0x1027 : "ExternalFlashZoom",
86 | 0x1028 : "ExternalFlashMode",
87 | 0x1029 : "Contrast",
88 | 0x102A : "SharpnessFactor",
89 | 0x102B : "ColorControl",
90 | 0x102C : "ValidBits",
91 | 0x102D : "CoringFilter",
92 | 0x102E : "OlympusImageWidth",
93 | 0x102F : "OlympusImageHeight",
94 | 0x1030 : "SceneDetect",
95 | 0x1031 : "SceneArea?",
96 | 0x1033 : "SceneDetectData?",
97 | 0x1034 : "CompressionRatio",
98 | 0x1035 : "PreviewImageValid",
99 | 0x1036 : "PreviewImageStart",
100 | 0x1037 : "PreviewImageLength",
101 | 0x1038 : "AFResult",
102 | 0x1039 : "CCDScanMode",
103 | 0x103A : "NoiseReduction",
104 | 0x103B : "FocusStepInfinity",
105 | 0x103C : "FocusStepNear",
106 | 0x103D : "LightValueCenter",
107 | 0x103E : "LightValuePeriphery",
108 | 0x103F : "FieldCount?",
109 | 0x2010 : "Equipment",
110 | 0x2020 : "CameraSettings",
111 | 0x2030 : "RawDevelopment",
112 | 0x2031 : "RawDev2",
113 | 0x2040 : "ImageProcessing",
114 | 0x2050 : "FocusInfo",
115 | 0x2100 : "Olympus2100",
116 | 0x2200 : "Olympus2200",
117 | 0x2300 : "Olympus2300",
118 | 0x2400 : "Olympus2400",
119 | 0x2500 : "Olympus2500",
120 | 0x2600 : "Olympus2600",
121 | 0x2700 : "Olympus2700",
122 | 0x2800 : "Olympus2800",
123 | 0x2900 : "Olympus2900",
124 | 0x3000 : "RawInfo",
125 | 0x4000 : "MainInfo",
126 | 0x5000 : "UnknownInfo"
127 |
128 | };
129 |
130 | // Epson flavored Makernote data starts after eight bytes
131 | var ifdOffset = makernoteOffset + 8;
132 |
133 | // Get the number of entries and extract them
134 | var numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
135 | if (this.options.epsonMaxEntries) {
136 | numberOfEntries=Math.min(numberOfEntries, this.options.epsonMaxEntries);
137 | }
138 |
139 | var makernoteData = {};
140 |
141 | for (var i = 0; i < numberOfEntries; i++) {
142 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, tags);
143 | if (exifEntry && exifEntry.tagName !== null) {
144 | makernoteData[exifEntry.tagName] = exifEntry.value;
145 | }
146 | }
147 |
148 | return makernoteData;
149 |
150 | };
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # node-exif
2 |
3 | With _node-exif_ you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.
4 |
5 | ## node-exif CLI
6 |
7 | Rodrigo Espinosa proposes the npm package [exif-cli](https://github.com/RodrigoEspinosa/exif-cli) to execute node-exif from a shell.
8 |
9 | ## Table of Contents
10 |
11 | * [Installation](#installation)
12 | * [Usage](#usage)
13 | * [ToDo / Ideas](#todo--ideas)
14 | * [License](#license)
15 |
16 | ## Installation
17 |
18 | Installing using npm (node package manager):
19 |
20 | npm install exif
21 |
22 | If you don't have npm installed or don't want to use it:
23 |
24 | cd ~/.node_libraries
25 | git clone git://github.com/gomfunkel/node-exif.git exif
26 |
27 | ## Usage
28 |
29 | Easy. Just require _node-exif_ and throw an image at it. If _node-exif_ is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.
30 |
31 | ```javascript
32 | var ExifImage = require('exif').ExifImage;
33 |
34 | try {
35 | new ExifImage({ image : 'myImage.jpg' }, function (error, exifData) {
36 | if (error)
37 | console.log('Error: '+error.message);
38 | else
39 | console.log(exifData); // Do something with your data!
40 | });
41 | } catch (error) {
42 | console.log('Error: ' + error.message);
43 | }
44 | ```
45 |
46 | Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.
47 |
48 | The data returned (`exifData` in the example above) is an object containing objects for each type of available Exif metadata:
49 |
50 | * `image` for image information data (IFD0)
51 | * `thumbnail` for information regarding a possibly embedded thumbnail (IFD1)
52 | * `exif` for Exif-specific attribute information (Exif IFD)
53 | * `gps` for GPS information (GPS IFD)
54 | * `interoperability` for interoperability information (Interoperability IFD)
55 | * `makernote` for vendor specific Exif information (Makernotes)
56 |
57 | The ouput for an [example image](http://www.exif.org/samples/fujifilm-finepix40i.jpg) might thus look like this:
58 |
59 | ```
60 | {
61 | image: {
62 | Make: 'FUJIFILM',
63 | Model: 'FinePix40i',
64 | Orientation: 1,
65 | XResolution: 72,
66 | YResolution: 72,
67 | ResolutionUnit: 2,
68 | Software: 'Digital Camera FinePix40i Ver1.39',
69 | ModifyDate: '2000:08:04 18:22:57',
70 | YCbCrPositioning: 2,
71 | Copyright: ' ',
72 | ExifOffset: 250
73 | },
74 | thumbnail: {
75 | Compression: 6,
76 | Orientation: 1,
77 | XResolution: 72,
78 | YResolution: 72,
79 | ResolutionUnit: 2,
80 | ThumbnailOffset: 1074,
81 | ThumbnailLength: 8691,
82 | YCbCrPositioning: 2
83 | },
84 | exif: {
85 | FNumber: 2.8,
86 | ExposureProgram: 2,
87 | ISO: 200,
88 | ExifVersion: ,
89 | DateTimeOriginal: '2000:08:04 18:22:57',
90 | CreateDate: '2000:08:04 18:22:57',
91 | ComponentsConfiguration: ,
92 | CompressedBitsPerPixel: 1.5,
93 | ShutterSpeedValue: 5.5,
94 | ApertureValue: 3,
95 | BrightnessValue: 0.26,
96 | ExposureCompensation: 0,
97 | MaxApertureValue: 3,
98 | MeteringMode: 5,
99 | Flash: 1,
100 | FocalLength: 8.7,
101 | MakerNote: ,
102 | FlashpixVersion: ,
103 | ColorSpace: 1,
104 | ExifImageWidth: 2400,
105 | ExifImageHeight: 1800,
106 | InteropOffset: 926,
107 | FocalPlaneXResolution: 2381,
108 | FocalPlaneYResolution: 2381,
109 | FocalPlaneResolutionUnit: 3,
110 | SensingMethod: 2,
111 | FileSource: ,
112 | SceneType:
113 | },
114 | gps: {},
115 | interoperability: {
116 | InteropIndex: 'R98',
117 | InteropVersion:
118 | },
119 | makernote: {
120 | Version: ,
121 | Quality: 'NORMAL ',
122 | Sharpness: 3,
123 | WhiteBalance: 0,
124 | FujiFlashMode: 1,
125 | FlashExposureComp: 0,
126 | Macro: 0,
127 | FocusMode: 0,
128 | SlowSync: 0,
129 | AutoBracketing: 0,
130 | BlurWarning: 0,
131 | FocusWarning: 0,
132 | ExposureWarning: 0
133 | }
134 | }
135 | ```
136 |
137 | For more information about the Exif standard please refer to the specification found on [http://www.exif.org](http://www.exif.org). A comprehensive list of available Exif attributes and their meaning can be found on [http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/](http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/).
138 |
139 | ## ToDo / Ideas
140 |
141 | There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.
142 |
143 | ## License
144 |
145 | _node-exif_ is licensed under the MIT License. (See LICENSE)
--------------------------------------------------------------------------------
/test/short-ascii-II.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"ImageDescription":"\u0000\u0000\u0000\u0000","Make":"XIAOMI","Model":"MI3","Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"\u0000\u0000\u0000\u0000","ModifyDate":"2015:02:28 17:10:49","Artist":"\u0000\u0000\u0000\u0000","YCbCrPositioning":1,"Copyright":"\u0000\u0000\u0000\u0000","ExifOffset":245,"GPSInfo":2964},"thumbnail":{"Compression":6,"Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"ThumbnailOffset":3159,"ThumbnailLength":11279,"YCbCrPositioning":1},"exif":{"ExposureTime":0.0499,"FNumber":2.2,"ExposureProgram":2,"ISO":250,"ExifVersion":{"type":"Buffer","data":[48,50,50,48]},"DateTimeOriginal":"2015:02:28 17:10:49","CreateDate":"2015:02:28 17:10:49","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":4,"ExposureCompensation":0,"MaxApertureValue":2.2,"SubjectDistance":0,"MeteringMode":2,"LightSource":0,"Flash":9,"FocalLength":3.51,"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":4208,"ExifImageHeight":3120,"InteropOffset":2902,"FileSource":{"type":"Buffer","data":[3]},"CustomRendered":0,"ExposureMode":0,"WhiteBalance":0,"DigitalZoomRatio":1,"SceneCaptureType":0,"ImageUniqueID":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","ShutterSpeedValue":null,"ApertureValue":2.275,"BrightnessValue":0.5374,"UserComment":{"type":"Buffer","data":[65,83,67,73,73,0,0,0,0]},"Sharpness":1,"SensingMethod":2,"SubjectArea":[0,7172,0,6150],"MakerNote":{"type":"Buffer","data":[1,11,108,160,201,214,29,174,106,200,26,240,30,114,97,159,67,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,196,223,253,13,222,12,33,237,125,217,179,220,25,19,157,33,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,179,224,25,97,0,128,97,58,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,32,139,211,87,111,88,17,249,121,194,211,230,160,128,43,181,90,233,243,176,52,11,116,20,214,255,117,97,65,192,13,203,253,177,137,191,179,111,122,73,253,45,104,11,116,25,54,136,214,146,168,133,104,73,69,61,115,133,6,146,76,222,9,140,115,139,89,68,115,220,140,167,94,40,78,60,247,93,22,76,86,133,226,190,186,128,87,251,241,216,125,35,127,88,161,185,49,217,158,49,252,218,131,215,73,168,117,222,246,87,108,111,137,94,223,141,17,223,119,24,39,116,34,61,202,178,238,87,129,66,212,214,179,179,47,76,211,231,129,23,253,102,36,31,45,46,132,145,219,0,172,229,161,59,83,171,164,109,239,228,126,45,182,180,76,191,179,179,110,100,26,163,249,213,232,136,166,171,121,168,61,6,247,125,198,3,29,220,152,135,111,168,29,105,106,235,65,230,75,210,188,218,218,242,98,13,82,90,133,38,207,189,224,242,230,252,49,41,93,61,178,233,124,15,101,1,114,234,18,86,178,9,59,108,141,156,199,210,151,244,186,181,92,107,86,119,236,131,10,213,146,39,111,205,69,69,237,11,14,1,207,197,71,106,205,88,17,125,132,21,222,100,60,216,128,160,103,241,243,133,107,203,163,208,122,203,182,60,197,52,94,85,26,12,171,98,2,132,120,58,49,189,142,253,76,125,248,210,4,209,237,73,78,116,55,246,89,153,65,128,73,207,226,21,232,41,78,239,22,150,56,5,20,187,130,172,175,120,168,105,50,27,225,49,158,241,71,159,40,170,253,180,212,47,190,98,193,223,228,47,240,193,226,109,241,227,232,90,130,89,91,57,91,188,164,74,233,217,164,128,134,19,172,127,34,189,184,90,130,223,185,203,140,133,75,22,51,228,21,47,63,144,195,233,141,113,211,148,3,140,112,149,214,226,91,133,233,89,86,79,116,139,105,104,13,13,7,142,228,20,82,134,197,250,91,118,111,13,85,65,20,202,249,69,124,35,223,218,226,223,135,37,95,64,230,84,59,210,181,222,251,2,159,100,88,160,90,118,214,118,31,5,203,87,49,4,183,179,110,160,14,215,111,234,82,204,201,113,121,94,222,144,16,173,64,214,127,141,141,62,112,42,112,188,193,209,190,19,107,77,254,6,18,38,144,143,146,83,34,119,139,71,61,185,238,183,161,75,97,194,161,91,85,12,186,113,163,52,68,140,12,165,59,58,15,61,53,3,223,211,191,255,24,46,44,15,10,10,236,36,205,138,145,253,243,57,235,116,112,242,62,185,139,55,2,142,54,249,97,222,151,123,198,189,206,134,21,208,52,238,109,67,215,193,223,110,18,155,184,82,161,255,60,16,185,208,80,62,14,89,206,99,162,245,6,75,44,215,221,151,139,147,125,173,10,106,82,250,151,177,133,202,19,227,1,188,214,24,183,159,3,52,200,142,55,250,40,69,25,22,66,15,36,87,135,94,206,67,4,243,18,72,2,38,73,202,30,58,17,183,130,232,61,188,40,250,148,247,160,174,145,149,143,128,96,80,255,211,48,69,139,72,41,90,17,208,222,212,27,39,133,62,28,34,152,100,0,252,25,17,186,141,37,204,161,175,19,134,28,84,237,212,48,79,143,66,11,56,199,168,33,225,87,194,49,203,151,4,127,24,130,241,1,4,197,0,99,149,189,143,44,197,83,130,143,28,16,245,209,56,113,5,62,150,101,161,112,104,67,80,112,28,160,159,48,158,60,4,65,47,68,7,212,38,207,150,43,95,160,22,144,135,212,159,225,107,60,199,27,173,25,184,163,143,201,103,101,247,231,238,71,8,60,196,197,241,156,135,246,121,180,203,226,114,146,71,81,112,140,108,126,150,33,222,243,121,214,255,14,239,177,89,189,73,152,10,88,143,216,54,38,144,167,175,226,119,104,65,66,96,102,230,53,5,153,25,53,171,8,48,61,21,243,55,67,33,46,21,169,153,251,195,6,202,161,100,182,181,231,252,242,150,108,174,214,204,24,236,254,44,202,64,209,162,147,171,122,183,140,177,161,148,122,149,89,128,85,6,60,218,117,105,184,6,30,233,255,249,61,172,173,89,214,134,76,77,78,145,184,239,143,130,249,125,227,192,131,196,130,225,88,58,170,105,242,254,28,99,164,244,152,118,222,50,76,110,53,32,98,128,144,41,125,211,167,116,140,86,180,153,143,38,38,208,52,73,146,152,241,15,149,40,138,158,33,192,36,235,43,240,57,73,73,175,53,85,138,31,197,138,255,32,12,18,175,81,162,33,44,143,255,58,161,72,178,23,149,171,206,4,107,30,115,199,220,106,77,68,123,146,193,158,11,114,16,70,86,36,130,55,208,120,229,227,59,145,45,37,108,254,235,174,150,24,45,37,108,254,235,174,150,24,129,168,153,72,24,87,225,186,72,229,9,161,92,25,40,183,119,187,35,4,230,144,73,136,10,38,83,91,136,247,136,97,122,10,183,251,126,240,2,200,131,204,204,141,106,112,134,237,147,173,166,85,70,236,104,19,47,97,210,27,127,74,37,191,79,200,178,230,185,190,10,165,48,15,164,225,138,242,228,190,95,90,193,181,159,13,186,12,65,77,38,47,79,245,63,175,232,33,232,26,62,1,91,101,140,250,91,140,7,221,133,195,60,220,156,231,18,33,93,80,130,182,105,18,185,205,250,63,107,197,31,49,83,223,110,199,239,184,186,135,5,151,117,252,118,255,36,204,181,229,62,252,239,180,251,5,165,13,23,132,28,252,106,184,156,202,224,6,79,164,165,52,190,14,187,76,33,210,118,202,175,52,229,241,84,52,93,209,15,253,128,172,95,110,77,87,208,167,124,13,147,56,105,201,128,225,105,250,240,224,55,138,169,159,202,7,20,238,11,230,223,235,219,19,87,148,24,212,34,231,81,141,235,120,190,119,243,165,147,208,10,200,45,22,213,129,23,85,141,96,128,212,228,202,91,48,56,35,236,166,202,133,255,85,193,175,220,60,59,47,104,40,75,35,11,195,80,138,227,126,187,238,249,15,213,20,253,110,166,237,198,55,114,26,103,41,124,185,112,140,194,186,245,177,196,107,39,195,94,190,202,223,33,90,123,89,197,68,27,27,202,64,124,223,173,209,203,70,168,188,131,84,148,134,255,80,18,8,87,109,50,180,51,73,228,174,119,230,180,210,168,213,17,140,151,100,43,26,58,210,55,175,59,178,94,179,7,72,99,179,116,171,88,41,240,57,68,100,221,55,239,66,63,40,26,47,31,35,58,211,251,115,249,126,209,182,21,152,173,129,213,228,180,90,16,115,123,89,218,40,243,93,5,3,97,4,27,98,126,78,255,185,159,227,149,104,88,77,10,68,16,186,138,21,206,231,22,238,45,7,121,83,37,12,68,207,226,250,152,13,216,142,133,250,93,2,176,32,99,41,130,46,216,44,174,192,40,12,242,58,35,167,13,17,114,53,39,16,210,133,191,79,9,150,127,217,195,73,83,16,124,222,34,212,100,162,19,8,85,124,152,21,127,119,179,189,206,168,179,199,61,216,60,175,83,50,202,161,224,72,101,116,165,137,192,157,225,122,5,143,135,129,63,231,16,164,65,76,148,241,71,122,135,242,208,51,198,252,237,131,13,119,243,148,200,138,1,25,9,228,124,188,239,99,235,197,18,5,52,232,113,229,70,156,163,181,30,11,75,255,156,161,238,149,1,168,243,181,14,115,182,200,222,94,47,163,153,177,97,242,146,99,150,226,134,47,166,143,8,157,19,234,206,214,215,19,158,250,207,3,176,49,160,197,19,125,118,12,84,111,183,163,34,66,235,173,122,191,179,223,38,160,175,225,54,236,108,196,187,187,251,106,248,120,153,252,145,147,220,36,32,92,203,239,92,63,248,249,249,1,200,21,131,59,237,19,22,168,90,109,252,57,80,187,39,210,52,112,7,49,31,215,118,216,65,77,74,111,98,143,147,162,125,230,217,79,19,233,46,230,119,205,34,154,103,239,64,203,156,17,48,99,50,212,55,134,81,113,60,254,10,21,200,126,20,160,201,181,85,1,21,59,168,210,58,0,119,252,28,20,254,240,127,177,5,228,43,35,248,219,23,14,97,91,252,91,204,185,89,122,48,154,200,36,5,250,242,164,236,45,34,44,224,19,39,175,228,141,1,165,27,92,176,205,240,16,45,231,230,122,28,32,87,104,89,104,92,65,25,158,30,126,133,252,3,26,118,161,116,242,149,69,54,190,243,81,66,57,54,80,244,136,220,228,11,129,66,9,247,68,45,136,217,165,250,93,207,69,206,24,178,14,148,204,249,55,206,24,178,14,148,204,249,55]}},"gps":{"GPSVersionID":[2,2,0,0],"GPSTimeStamp":[9,10,49],"GPSDateStamp":"2015:02:28"},"interoperability":{"InteropIndex":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","InteropVersion":{"type":"Buffer","data":[48,49,49,48]}},"makernote":{"error":"Unable to extract Makernote information as it is in an unsupported or unrecognized format."}}
--------------------------------------------------------------------------------
/lib/exif/ExifImage.js:
--------------------------------------------------------------------------------
1 | /*jslint node: true */
2 | "use strict";
3 |
4 | var assert = require('assert');
5 | var fs = require('fs');
6 | var util = require('util');
7 | var BufferExtender = require('./Buffer'); // bad idea
8 | var debug = require('debug')('exif');
9 |
10 | var DEFAULT_MAX_ENTRIES=128;
11 |
12 | /**
13 | * Represents an image with Exif information. When instantiating it you have to
14 | * provide an image and a callback function which is called once all metadata
15 | * is extracted from the image.
16 | *
17 | * Available options are:
18 | * - image The image to get Exif data from can be either a filesystem path or
19 | * a Buffer.
20 | * - tiffOffsets (boolean) an object named "offsets" is added to exifData
21 | * and contains lot of offsets needed to get thumbnail and other things.
22 | * - fixThumbnailOffset: node-exif corrects the thumbnail offset in order to have an offset from the start of the buffer/file.
23 | * - maxEntries: Specifies the maximum entries to be parsed
24 | * - ifd0MaxEntries
25 | * - ifd1MaxEntries
26 | * - maxGpsEntries
27 | * - maxInteroperabilityEntries
28 | * - agfaMaxEntries
29 | * - epsonMaxEntries
30 | * - fujifilmMaxEntries
31 | * - olympusMaxEntries
32 | * - panasonicMaxEntries
33 | * - sanyoMaxEntries
34 | * - noPadding
35 | *
36 | * If you don't set the image field, you might call exifImage.loadImage(image, callback) to get exif datas.
37 | *
38 | * @param options Configuration options as described above
39 | * @param callback Function to call when data is extracted or an error occurred
40 | * @return Nothing of importance, calls the specified callback function instead
41 | */
42 | function ExifImage (options, callback) {
43 | if (!(this instanceof ExifImage)) {
44 | if (typeof(options)==="string") {
45 | options = {
46 | image: options
47 | }
48 | }
49 |
50 | assert(typeof(options)==="object", "Invalid options object");
51 |
52 | var exifImage = new ExifImage(options, function(error, data) {
53 | if (error) {
54 | return callback(error);
55 | }
56 |
57 | callback(null, data, options.image);
58 | });
59 |
60 | return exifImage;
61 | }
62 |
63 | if (typeof(options)==="string") {
64 | options= {
65 | image: options
66 | }
67 | } else if (options instanceof Buffer) {
68 | options= {
69 | image: options
70 | }
71 | }
72 |
73 | var ops={};
74 | if (options) {
75 | for(var k in options) {
76 | ops[k]=options[k];
77 | }
78 | }
79 | this.options=ops;
80 |
81 | // Default option values
82 | ["ifd0MaxEntries", "ifd1MaxEntries", "maxGpsEntries", "maxInteroperabilityEntries", "agfaMaxEntries", "epsonMaxEntries",
83 | "fujifilmMaxEntries", "olympusMaxEntries", "panasonicMaxEntries", "sanyoMaxEntries"].forEach(function(p) {
84 | if (ops[p]===undefined) {
85 | ops[p]=DEFAULT_MAX_ENTRIES;
86 | }
87 | });
88 |
89 | this.exifData = {
90 | image : {}, // Information about the main image
91 | thumbnail : {}, // Information about the thumbnail
92 | exif : {}, // Exif information
93 | gps : {}, // GPS information
94 | interoperability: {}, // Exif Interoperability information
95 | makernote : {} // Makernote information
96 | };
97 |
98 | this.offsets={};
99 | if (ops.tiffOffsets) {
100 | exifData.offsets=offsets;
101 | }
102 |
103 | debug("New ExifImage options=",options);
104 |
105 | if (!ops.image) {
106 | // If options image is not specified, the developper must call loadImage() to parse the image.
107 | // callback(new Error('You have to provide an image, it is pretty hard to extract Exif data from nothing...'));
108 | return;
109 | }
110 |
111 | if (typeof callback !== 'function') {
112 | throw new Error('You have to provide a callback function.');
113 | }
114 |
115 | var self=this;
116 | setImmediate(function() {
117 | self.loadImage(ops.image, function (error, exifData) {
118 | if (error) {
119 | return callback(error);
120 | }
121 |
122 | callback(null, exifData, ops.image);
123 | });
124 | });
125 | }
126 |
127 | ExifImage.ExifImage=ExifImage;
128 |
129 | module.exports = ExifImage;
130 |
131 | /**
132 | * Load image and parse exifDatas
133 | *
134 | * @param [String|Buffer] image the image
135 | * @param callback a callback which is called when exif datas are parsed.
136 | * @return Nothing
137 | */
138 | ExifImage.prototype.loadImage = function (image, callback) {
139 | assert(typeof(callback)==="function", "Callback must be a function");
140 |
141 | var self = this;
142 |
143 | debug("loadImage image=", image);
144 |
145 | if (image.constructor.name === 'Buffer') {
146 | this.processImage("Buffer", image, callback);
147 | return;
148 | }
149 |
150 | if (image.constructor.name === 'String') {
151 | fs.readFile(image, function (error, data) {
152 | if (error) {
153 | callback(new Error('Encountered the following error while trying to read given image: '+error));
154 | return;
155 | }
156 |
157 | self.processImage("File: "+image, data, callback);
158 | });
159 | return;
160 | }
161 |
162 | callback(new Error('Given image is neither a buffer nor a file, please provide one of these.'));
163 | };
164 |
165 | ExifImage.prototype.processImage = function (source, data, callback) {
166 | assert(typeof(source)==="string", "Source must be a string");
167 | assert(typeof(callback)==="function", "Callback must be a function");
168 |
169 | var offset = 0;
170 |
171 | if (data[offset++] != 0xFF || data[offset++] != 0xD8) {
172 | var e=new Error('The given image is not a JPEG and thus unsupported right now.');
173 | e.source=source;
174 | e.code="NOT_A_JPEG";
175 | callback(e);
176 | return;
177 | }
178 |
179 | this.imageType = 'JPEG';
180 |
181 | while (offset < data.length) {
182 |
183 | if (data[offset++] != 0xFF) {
184 | break;
185 | }
186 |
187 | if (data[offset++] == 0xE1) {
188 | try {
189 | this.extractExifData(data, offset + 2, data.getShort(offset, true) - 2);
190 |
191 | } catch (error) {
192 | error.code="PARSING_ERROR";
193 | error.source=source;
194 |
195 | debug("Extract exif data error source=", source, "offset=", offset, "error=",error);
196 |
197 | callback(error);
198 | return;
199 | }
200 |
201 | debug("Extract exif data success source=", source, "exifData=",this.exifData);
202 |
203 | callback(null, this.exifData);
204 | return;
205 | }
206 |
207 | offset += data.getShort(offset, true);
208 | }
209 |
210 | var e2=new Error('No Exif segment found in the given image.');
211 | e2.source=source;
212 | e2.code="NO_EXIF_SEGMENT";
213 |
214 | callback(e2);
215 | };
216 |
217 | ExifImage.prototype.extractExifData = function (data, start, length) {
218 |
219 | var exifData=this.exifData;
220 | var tiffOffset = start + 6;
221 | var ifdOffset, numberOfEntries;
222 | var noPadding = (this.options.noPadding!==false);
223 |
224 | this.offsets.tiff=tiffOffset;
225 |
226 | // Exif data always starts with Exif\0\0
227 | if (data.toString('utf8', start, tiffOffset) != 'Exif\0\0') {
228 | throw new Error('The Exif data is not valid.');
229 | }
230 |
231 | // After the Exif start we either have 0x4949 if the following data is
232 | // stored in big endian or 0x4D4D if it is stored in little endian
233 | if (data.getShort(tiffOffset) == 0x4949) {
234 | this.isBigEndian = false;
235 |
236 | } else if (data.getShort(tiffOffset) == 0x4D4D) {
237 | this.isBigEndian = true;
238 |
239 | } else {
240 | throw new Error('Invalid TIFF data! Expected 0x4949 or 0x4D4D at offset '+(tiffOffset)+' but found 0x'+data[tiffOffset].toString(16).toUpperCase()+data[tiffOffset + 1].toString(16).toUpperCase()+".");
241 | }
242 |
243 | debug("BigEndian=",this.isBigEndian);
244 |
245 | // Valid TIFF headers always have 0x002A here
246 | if (data.getShort(tiffOffset + 2, this.isBigEndian) != 0x002A) {
247 | var expected = (this.isBigEndian) ? '0x002A' : '0x2A00';
248 | throw new Error('Invalid TIFF data! Expected '+expected+' at offset '+(tiffOffset + 2)+' but found 0x'+data[tiffOffset + 2].toString(16).toUpperCase()+data[tiffOffset + 3].toString(16).toUpperCase()+".");
249 | }
250 |
251 | /********************************* IFD0 **********************************/
252 |
253 | // Offset to IFD0 which is always followed by two bytes with the amount of
254 | // entries in this IFD
255 | ifdOffset = tiffOffset + data.getLong(tiffOffset + 4, this.isBigEndian);
256 | this.offsets.ifd0=ifdOffset;
257 |
258 | numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
259 | if (this.options.ifd0MaxEntries) {
260 | numberOfEntries=Math.min(numberOfEntries, this.options.ifd0MaxEntries);
261 | }
262 |
263 | debug("IFD0 ifdOffset=",ifdOffset, "numberOfEntries=", numberOfEntries);
264 |
265 | // Each IFD entry consists of 12 bytes which we loop through and extract
266 | // the data from
267 | for (var i = 0; i < numberOfEntries; i++) {
268 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, ExifImage.TAGS.exif);
269 | if (!exifEntry) {
270 | continue;
271 | }
272 |
273 | if (exifEntry.tagId===0xEA1C && noPadding) {
274 | continue;
275 | }
276 |
277 | exifData.image[exifEntry.tagName] = exifEntry.value;
278 | }
279 |
280 | debug("IFD0 parsed", exifData.image);
281 |
282 | /********************************* IFD1 **********************************/
283 |
284 | // Check if there is an offset for IFD1. If so it is always followed by two
285 | // bytes with the amount of entries in this IFD, if not there is no IFD1
286 | var nextIfdOffset = data.getLong(ifdOffset + 2 + (numberOfEntries * 12), this.isBigEndian)
287 | if (nextIfdOffset != 0x00000000) {
288 | ifdOffset = tiffOffset + nextIfdOffset;
289 | this.offsets.ifd1=ifdOffset;
290 | numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
291 | if (this.options.ifd1MaxEntries) {
292 | numberOfEntries=Math.min(numberOfEntries, this.options.ifd1MaxEntries);
293 | }
294 |
295 | debug("IFD1 ifdOffset=",ifdOffset, "numberOfEntries=", numberOfEntries);
296 |
297 | // Each IFD entry consists of 12 bytes which we loop through and extract
298 | // the data from
299 | for (var i = 0; i < numberOfEntries; i++) {
300 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, ExifImage.TAGS.exif);
301 | if (!exifEntry) {
302 | continue;
303 | }
304 |
305 | if (exifEntry.tagId===0xEA1C && noPadding) {
306 | continue;
307 | }
308 |
309 | exifData.thumbnail[exifEntry.tagName] = exifEntry.value;
310 | }
311 |
312 | if (this.options.fixThumbnailOffset) {
313 | var thumbnailOffset=exifData.thumbnail[ExifImage.TAGS.exif[0x0201]];
314 | if (thumbnailOffset) {
315 | debug("IFD1 fix thumbnail offset, add=",this.offsets.tiff);
316 |
317 | exifData.thumbnail[ExifImage.TAGS.exif[0x0201]]+=this.offsets.tiff;
318 | }
319 | }
320 |
321 | debug("IFD1 parsed", exifData.thumbnail);
322 | }
323 |
324 | /******************************* EXIF IFD ********************************/
325 |
326 | // Look for a pointer to the Exif IFD in IFD0 and extract information from
327 | // it if available
328 | if (exifData.image[ExifImage.TAGS.exif[0x8769]]) {
329 |
330 | ifdOffset = tiffOffset + exifData.image[ExifImage.TAGS.exif[0x8769]];
331 | this.offsets.tags=ifdOffset;
332 |
333 | numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
334 | if (this.options.maxEntries) {
335 | numberOfEntries=Math.min(numberOfEntries, this.options.maxEntries);
336 | }
337 |
338 | debug("EXIF IFD ifdOffset=",ifdOffset, "numberOfEntries=", numberOfEntries);
339 |
340 | // Each IFD entry consists of 12 bytes which we loop through and extract
341 | // the data from
342 | for (var i = 0; i < numberOfEntries; i++) {
343 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, ExifImage.TAGS.exif);
344 | if (!exifEntry) {
345 | continue;
346 | }
347 |
348 | if (exifEntry.tagId===0xEA1C && noPadding) {
349 | continue;
350 | }
351 |
352 | exifData.exif[exifEntry.tagName] = exifEntry.value;
353 | }
354 |
355 | debug("EXIF IFD parsed",exifData.exif);
356 | }
357 |
358 | /******************************** GPS IFD ********************************/
359 |
360 | // Look for a pointer to the GPS IFD in IFD0 and extract information from
361 | // it if available
362 | if (exifData.image[ExifImage.TAGS.exif[0x8825]]) {
363 |
364 | ifdOffset = tiffOffset + exifData.image[ExifImage.TAGS.exif[0x8825]];
365 | this.offsets.gps=ifdOffset;
366 |
367 | numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
368 | if (this.options.maxGpsEntries) {
369 | numberOfEntries=Math.min(numberOfEntries, this.options.maxGpsEntries);
370 | }
371 |
372 | debug("GPS IFD ifdOffset=", ifdOffset, "numberOfEntries=", numberOfEntries);
373 |
374 | // Each IFD entry consists of 12 bytes which we loop through and extract
375 | // the data from
376 | for (var i = 0; i < numberOfEntries; i++) {
377 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, ExifImage.TAGS.gps);
378 | if (!exifEntry) {
379 | continue;
380 | }
381 |
382 | if (exifEntry.tagId===0xEA1C && noPadding) {
383 | continue;
384 | }
385 |
386 | exifData.gps[exifEntry.tagName] = exifEntry.value;
387 | }
388 |
389 | debug("GPS IFD parsed",exifData.gps);
390 | }
391 |
392 | /************************* Interoperability IFD **************************/
393 |
394 | // Look for a pointer to the interoperatbility IFD in the Exif IFD and
395 | // extract information from it if available
396 | if (exifData.exif[ExifImage.TAGS.exif[0xA005]]) {
397 |
398 | ifdOffset = tiffOffset + exifData.exif[ExifImage.TAGS.exif[0xA005]];
399 | this.offsets.interoperability=ifdOffset;
400 |
401 | numberOfEntries = data.getShort(ifdOffset, this.isBigEndian);
402 | if (this.options.maxInteroperabilityEntries) {
403 | numberOfEntries=Math.min(numberOfEntries, this.options.maxInteroperabilityEntries);
404 | }
405 |
406 | debug("Interoperability IFD ifdOffset=", ifdOffset, "numberOfEntries=", numberOfEntries);
407 |
408 | // Each IFD entry consists of 12 bytes which we loop through and extract
409 | // the data from
410 | for (var i = 0; i < numberOfEntries; i++) {
411 | var exifEntry = this.extractExifEntry(data, (ifdOffset + 2 + (i * 12)), tiffOffset, this.isBigEndian, ExifImage.TAGS.exif);
412 | if (!exifEntry) {
413 | break;
414 | }
415 |
416 | if (exifEntry.tagId===0xEA1C && noPadding) {
417 | continue;
418 | }
419 |
420 | exifData.interoperability[exifEntry.tagName] = exifEntry.value;
421 | }
422 |
423 | debug("Interoperability IFD parsed",exifData.gps);
424 | }
425 |
426 | /***************************** Makernote IFD *****************************/
427 |
428 | // Look for Makernote data in the Exif IFD, check which type of proprietary
429 | // Makernotes the image contains, load the respective functionality and
430 | // start the extraction
431 | if (typeof exifData.exif[ExifImage.TAGS.exif[0x927C]] != "undefined") {
432 |
433 | var type;
434 | // Check the header to see what kind of Makernote we are dealing with
435 | if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 7) === "OLYMP\x00\x01" || exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 7) === "OLYMP\x00\x02") {
436 | type="olympus"
437 |
438 | } else if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 7) === "AGFA \x00\x01") {
439 | type="agfa";
440 |
441 | } else if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 8) === "EPSON\x00\x01\x00") {
442 | type="epson";
443 |
444 | } else if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 8) === "FUJIFILM") {
445 | type="fujifilm";
446 |
447 | } else if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 9) === "Panasonic") {
448 | type="panasonic";
449 |
450 | } else if (exifData.exif[ExifImage.TAGS.exif[0x927C]].getString(0, 5) === "SANYO") {
451 | type="sanyo";
452 | }
453 |
454 |
455 | debug("Makernote IFD ifdOffset=", ifdOffset, "type=", type);
456 |
457 | if (type) {
458 | var extractMakernotes = require('./makernotes/'+type).extractMakernotes;
459 |
460 | exifData.makernote = extractMakernotes.call(this, data, this.offsets.makernoteOffset, tiffOffset);
461 |
462 | } else {
463 | // Makernotes are available but the format is not recognized so
464 | // an error message is pushed instead, this ain't the best
465 | // solution but should do for now
466 | exifData.makernote['error'] = 'Unable to extract Makernote information as it is in an unsupported or unrecognized format.';
467 | }
468 |
469 | debug("Makernote IFD parsed",exifData.makernote);
470 | }
471 | };
472 |
473 | ExifImage.prototype.extractExifEntry = function (data, entryOffset, tiffOffset, isBigEndian, tags) {
474 |
475 | var entry = {
476 | tag : data.slice(entryOffset, entryOffset + 2),
477 | tagId : null,
478 | tagName : null,
479 | format : data.getShort(entryOffset + 2, isBigEndian),
480 | components : data.getLong(entryOffset + 4, isBigEndian),
481 | valueOffset: null,
482 | value : []
483 | }
484 |
485 | entry.tagId = entry.tag.getShort(0, isBigEndian);
486 |
487 | // The tagId may correspond to more then one tagName so check which
488 | if (tags && tags[entry.tagId] && typeof tags[entry.tagId] == "function") {
489 | entry.tagName = tags[entry.tagId].call(this, entry);
490 | if (!entry.tagName) {
491 | return false;
492 | }
493 |
494 | // The tagId corresponds to exactly one tagName
495 | } else if (tags && tags[entry.tagId]) {
496 | entry.tagName = tags[entry.tagId];
497 | if (entry.tagName===undefined) {
498 | return false;
499 | }
500 |
501 | // The tagId is not recognized
502 | } else {
503 | return false;
504 | }
505 |
506 | switch (entry.format) {
507 |
508 | case 0x0001: // unsigned byte, 1 byte per component
509 | entry.valueOffset = (entry.components <= 4) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
510 | for (var i = 0; i < entry.components; i++)
511 | entry.value.push(data.getByte(entry.valueOffset + i));
512 | break;
513 |
514 | case 0x0002: // ascii strings, 1 byte per component
515 | entry.valueOffset = (entry.components <= 4) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
516 | entry.value = data.getString(entry.valueOffset, entry.components);
517 | if (entry.value[entry.value.length - 1] === "\u0000") // Trim null terminated strings
518 | entry.value = entry.value.substring(0, entry.value.length - 1);
519 | break;
520 |
521 | case 0x0003: // unsigned short, 2 byte per component
522 | entry.valueOffset = (entry.components <= 2) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
523 | for (var i = 0; i < entry.components; i++)
524 | entry.value.push(data.getShort(entry.valueOffset + i * 2, isBigEndian));
525 | break;
526 |
527 | case 0x0004: // unsigned long, 4 byte per component
528 | entry.valueOffset = (entry.components == 1) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
529 | for (var i = 0; i < entry.components; i++)
530 | entry.value.push(data.getLong(entry.valueOffset + i * 4, isBigEndian));
531 | break;
532 |
533 | case 0x0005: // unsigned rational, 8 byte per component (4 byte numerator and 4 byte denominator)
534 | entry.valueOffset = data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
535 | for (var i = 0; i < entry.components; i++)
536 | entry.value.push(data.getLong(entry.valueOffset + i * 8, isBigEndian) / data.getLong(entry.valueOffset + i * 8 + 4, isBigEndian));
537 | break;
538 |
539 | case 0x0006: // signed byte, 1 byte per component
540 | entry.valueOffset = (entry.components <= 4) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
541 | for (var i = 0; i < entry.components; i++)
542 | entry.value.push(data.getSignedByte(entry.valueOffset + i));
543 | break;
544 |
545 | case 0x0007: // undefined, 1 byte per component
546 | entry.valueOffset = (entry.components <= 4) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
547 | entry.value.push(data.slice(entry.valueOffset, entry.valueOffset + entry.components));
548 | break;
549 |
550 | case 0x0008: // signed short, 2 byte per component
551 | entry.valueOffset = (entry.components <= 2) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
552 | for (var i = 0; i < entry.components; i++)
553 | entry.value.push(data.getSignedShort(entry.valueOffset + i * 2, isBigEndian));
554 | break;
555 |
556 | case 0x0009: // signed long, 4 byte per component
557 | entry.valueOffset = (entry.components == 1) ? entryOffset + 8 : data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
558 | for (var i = 0; i < entry.components; i++)
559 | entry.value.push(data.getSignedLong(entry.valueOffset + i * 4, isBigEndian));
560 | break;
561 |
562 | case 0x000A: // signed rational, 8 byte per component (4 byte numerator and 4 byte denominator)
563 | entry.valueOffset = data.getLong(entryOffset + 8, isBigEndian) + tiffOffset;
564 | for (var i = 0; i < entry.components; i++)
565 | entry.value.push(data.getSignedLong(entry.valueOffset + i * 8, isBigEndian) / data.getSignedLong(entry.valueOffset + i * 8 + 4, isBigEndian));
566 | break;
567 |
568 | default:
569 | return false;
570 |
571 | }
572 |
573 | // If this is the Makernote tag save its offset for later use
574 | if (entry.tagName === "MakerNote") {
575 | this.offsets.makernoteOffset = entry.valueOffset;
576 | }
577 |
578 | // If the value array has only one element we don't need an array
579 | if (entry.value.length == 1) {
580 | entry.value = entry.value[0];
581 | }
582 |
583 | return entry;
584 | };
585 |
586 | /**
587 | * Comprehensive list of TIFF and Exif tags found on
588 | * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
589 | */
590 | ExifImage.TAGS = {
591 |
592 | // Exif tags
593 | exif : {
594 |
595 | 0x0001 : "InteropIndex",
596 | 0x0002 : "InteropVersion",
597 | 0x000B : "ProcessingSoftware",
598 | 0x00FE : "SubfileType",
599 | 0x00FF : "OldSubfileType",
600 | 0x0100 : "ImageWidth",
601 | 0x0101 : "ImageHeight",
602 | 0x0102 : "BitsPerSample",
603 | 0x0103 : "Compression",
604 | 0x0106 : "PhotometricInterpretation",
605 | 0x0107 : "Thresholding",
606 | 0x0108 : "CellWidth",
607 | 0x0109 : "CellLength",
608 | 0x010A : "FillOrder",
609 | 0x010D : "DocumentName",
610 | 0x010E : "ImageDescription",
611 | 0x010F : "Make",
612 | 0x0110 : "Model",
613 | 0x0111 : "StripOffsets",
614 | 0x0112 : "Orientation",
615 | 0x0115 : "SamplesPerPixel",
616 | 0x0116 : "RowsPerStrip",
617 | 0x0117 : "StripByteCounts",
618 | 0x0118 : "MinSampleValue",
619 | 0x0119 : "MaxSampleValue",
620 | 0x011A : "XResolution",
621 | 0x011B : "YResolution",
622 | 0x011C : "PlanarConfiguration",
623 | 0x011D : "PageName",
624 | 0x011E : "XPosition",
625 | 0x011F : "YPosition",
626 | 0x0120 : "FreeOffsets",
627 | 0x0121 : "FreeByteCounts",
628 | 0x0122 : "GrayResponseUnit",
629 | 0x0123 : "GrayResponseCurve",
630 | 0x0124 : "T4Options",
631 | 0x0125 : "T6Options",
632 | 0x0128 : "ResolutionUnit",
633 | 0x0129 : "PageNumber",
634 | 0x012C : "ColorResponseUnit",
635 | 0x012D : "TransferFunction",
636 | 0x0131 : "Software",
637 | 0x0132 : "ModifyDate",
638 | 0x013B : "Artist",
639 | 0x013C : "HostComputer",
640 | 0x013D : "Predictor",
641 | 0x013E : "WhitePoint",
642 | 0x013F : "PrimaryChromaticities",
643 | 0x0140 : "ColorMap",
644 | 0x0141 : "HalftoneHints",
645 | 0x0142 : "TileWidth",
646 | 0x0143 : "TileLength",
647 | 0x0144 : "TileOffsets",
648 | 0x0145 : "TileByteCounts",
649 | 0x0146 : "BadFaxLines",
650 | 0x0147 : "CleanFaxData",
651 | 0x0148 : "ConsecutiveBadFaxLines",
652 | 0x014A : "SubIFD",
653 | 0x014C : "InkSet",
654 | 0x014D : "InkNames",
655 | 0x014E : "NumberofInks",
656 | 0x0150 : "DotRange",
657 | 0x0151 : "TargetPrinter",
658 | 0x0152 : "ExtraSamples",
659 | 0x0153 : "SampleFormat",
660 | 0x0154 : "SMinSampleValue",
661 | 0x0155 : "SMaxSampleValue",
662 | 0x0156 : "TransferRange",
663 | 0x0157 : "ClipPath",
664 | 0x0158 : "XClipPathUnits",
665 | 0x0159 : "YClipPathUnits",
666 | 0x015A : "Indexed",
667 | 0x015B : "JPEGTables",
668 | 0x015F : "OPIProxy",
669 | 0x0190 : "GlobalParametersIFD",
670 | 0x0191 : "ProfileType",
671 | 0x0192 : "FaxProfile",
672 | 0x0193 : "CodingMethods",
673 | 0x0194 : "VersionYear",
674 | 0x0195 : "ModeNumber",
675 | 0x01B1 : "Decode",
676 | 0x01B2 : "DefaultImageColor",
677 | 0x01B3 : "T82Options",
678 | 0x01B5 : "JPEGTables",
679 | 0x0200 : "JPEGProc",
680 | 0x0201 : "ThumbnailOffset",
681 | 0x0202 : "ThumbnailLength",
682 | 0x0203 : "JPEGRestartInterval",
683 | 0x0205 : "JPEGLosslessPredictors",
684 | 0x0206 : "JPEGPointTransforms",
685 | 0x0207 : "JPEGQTables",
686 | 0x0208 : "JPEGDCTables",
687 | 0x0209 : "JPEGACTables",
688 | 0x0211 : "YCbCrCoefficients",
689 | 0x0212 : "YCbCrSubSampling",
690 | 0x0213 : "YCbCrPositioning",
691 | 0x0214 : "ReferenceBlackWhite",
692 | 0x022F : "StripRowCounts",
693 | 0x02BC : "ApplicationNotes",
694 | 0x03E7 : "USPTOMiscellaneous",
695 | 0x1000 : "RelatedImageFileFormat",
696 | 0x1001 : "RelatedImageWidth",
697 | 0x1002 : "RelatedImageHeight",
698 | 0x4746 : "Rating",
699 | 0x4747 : "XP_DIP_XML",
700 | 0x4748 : "StitchInfo",
701 | 0x4749 : "RatingPercent",
702 | 0x800D : "ImageID",
703 | 0x80A3 : "WangTag1",
704 | 0x80A4 : "WangAnnotation",
705 | 0x80A5 : "WangTag3",
706 | 0x80A6 : "WangTag4",
707 | 0x80E3 : "Matteing",
708 | 0x80E4 : "DataType",
709 | 0x80E5 : "ImageDepth",
710 | 0x80E6 : "TileDepth",
711 | 0x827D : "Model2",
712 | 0x828D : "CFARepeatPatternDim",
713 | 0x828E : "CFAPattern2",
714 | 0x828F : "BatteryLevel",
715 | 0x8290 : "KodakIFD",
716 | 0x8298 : "Copyright",
717 | 0x829A : "ExposureTime",
718 | 0x829D : "FNumber",
719 | 0x82A5 : "MDFileTag",
720 | 0x82A6 : "MDScalePixel",
721 | 0x82A7 : "MDColorTable",
722 | 0x82A8 : "MDLabName",
723 | 0x82A9 : "MDSampleInfo",
724 | 0x82AA : "MDPrepDate",
725 | 0x82AB : "MDPrepTime",
726 | 0x82AC : "MDFileUnits",
727 | 0x830E : "PixelScale",
728 | 0x8335 : "AdventScale",
729 | 0x8336 : "AdventRevision",
730 | 0x835C : "UIC1Tag",
731 | 0x835D : "UIC2Tag",
732 | 0x835E : "UIC3Tag",
733 | 0x835F : "UIC4Tag",
734 | 0x83BB : "IPTC-NAA",
735 | 0x847E : "IntergraphPacketData",
736 | 0x847F : "IntergraphFlagRegisters",
737 | 0x8480 : "IntergraphMatrix",
738 | 0x8481 : "INGRReserved",
739 | 0x8482 : "ModelTiePoint",
740 | 0x84E0 : "Site",
741 | 0x84E1 : "ColorSequence",
742 | 0x84E2 : "IT8Header",
743 | 0x84E3 : "RasterPadding",
744 | 0x84E4 : "BitsPerRunLength",
745 | 0x84E5 : "BitsPerExtendedRunLength",
746 | 0x84E6 : "ColorTable",
747 | 0x84E7 : "ImageColorIndicator",
748 | 0x84E8 : "BackgroundColorIndicator",
749 | 0x84E9 : "ImageColorValue",
750 | 0x84EA : "BackgroundColorValue",
751 | 0x84EB : "PixelIntensityRange",
752 | 0x84EC : "TransparencyIndicator",
753 | 0x84ED : "ColorCharacterization",
754 | 0x84EE : "HCUsage",
755 | 0x84EF : "TrapIndicator",
756 | 0x84F0 : "CMYKEquivalent",
757 | 0x8546 : "SEMInfo",
758 | 0x8568 : "AFCP_IPTC",
759 | 0x85B8 : "PixelMagicJBIGOptions",
760 | 0x85D8 : "ModelTransform",
761 | 0x8602 : "WB_GRGBLevels",
762 | 0x8606 : "LeafData",
763 | 0x8649 : "PhotoshopSettings",
764 | 0x8769 : "ExifOffset",
765 | 0x8773 : "ICC_Profile",
766 | 0x877F : "TIFF_FXExtensions",
767 | 0x8780 : "MultiProfiles",
768 | 0x8781 : "SharedData",
769 | 0x8782 : "T88Options",
770 | 0x87AC : "ImageLayer",
771 | 0x87AF : "GeoTiffDirectory",
772 | 0x87B0 : "GeoTiffDoubleParams",
773 | 0x87B1 : "GeoTiffAsciiParams",
774 | 0x8822 : "ExposureProgram",
775 | 0x8824 : "SpectralSensitivity",
776 | 0x8825 : "GPSInfo",
777 | 0x8827 : "ISO",
778 | 0x8828 : "Opto-ElectricConvFactor",
779 | 0x8829 : "Interlace",
780 | 0x882A : "TimeZoneOffset",
781 | 0x882B : "SelfTimerMode",
782 | 0x8830 : "SensitivityType",
783 | 0x8831 : "StandardOutputSensitivity",
784 | 0x8832 : "RecommendedExposureIndex",
785 | 0x8833 : "ISOSpeed",
786 | 0x8834 : "ISOSpeedLatitudeyyy",
787 | 0x8835 : "ISOSpeedLatitudezzz",
788 | 0x885C : "FaxRecvParams",
789 | 0x885D : "FaxSubAddress",
790 | 0x885E : "FaxRecvTime",
791 | 0x888A : "LeafSubIFD",
792 | 0x9000 : "ExifVersion",
793 | 0x9003 : "DateTimeOriginal",
794 | 0x9004 : "CreateDate",
795 | 0x9101 : "ComponentsConfiguration",
796 | 0x9102 : "CompressedBitsPerPixel",
797 | 0x9201 : "ShutterSpeedValue",
798 | 0x9202 : "ApertureValue",
799 | 0x9203 : "BrightnessValue",
800 | 0x9204 : "ExposureCompensation",
801 | 0x9205 : "MaxApertureValue",
802 | 0x9206 : "SubjectDistance",
803 | 0x9207 : "MeteringMode",
804 | 0x9208 : "LightSource",
805 | 0x9209 : "Flash",
806 | 0x920A : "FocalLength",
807 | 0x920B : "FlashEnergy",
808 | 0x920C : "SpatialFrequencyResponse",
809 | 0x920D : "Noise",
810 | 0x920E : "FocalPlaneXResolution",
811 | 0x920F : "FocalPlaneYResolution",
812 | 0x9210 : "FocalPlaneResolutionUnit",
813 | 0x9211 : "ImageNumber",
814 | 0x9212 : "SecurityClassification",
815 | 0x9213 : "ImageHistory",
816 | 0x9214 : "SubjectArea",
817 | 0x9215 : "ExposureIndex",
818 | 0x9216 : "TIFF-EPStandardID",
819 | 0x9217 : "SensingMethod",
820 | 0x923A : "CIP3DataFile",
821 | 0x923B : "CIP3Sheet",
822 | 0x923C : "CIP3Side",
823 | 0x923F : "StoNits",
824 | 0x927C : "MakerNote",
825 | 0x9286 : "UserComment",
826 | 0x9290 : "SubSecTime",
827 | 0x9291 : "SubSecTimeOriginal",
828 | 0x9292 : "SubSecTimeDigitized",
829 | 0x932F : "MSDocumentText",
830 | 0x9330 : "MSPropertySetStorage",
831 | 0x9331 : "MSDocumentTextPosition",
832 | 0x935C : "ImageSourceData",
833 | 0x9C9B : "XPTitle",
834 | 0x9C9C : "XPComment",
835 | 0x9C9D : "XPAuthor",
836 | 0x9C9E : "XPKeywords",
837 | 0x9C9F : "XPSubject",
838 | 0xA000 : "FlashpixVersion",
839 | 0xA001 : "ColorSpace",
840 | 0xA002 : "ExifImageWidth",
841 | 0xA003 : "ExifImageHeight",
842 | 0xA004 : "RelatedSoundFile",
843 | 0xA005 : "InteropOffset",
844 | 0xA20B : "FlashEnergy",
845 | 0xA20C : "SpatialFrequencyResponse",
846 | 0xA20D : "Noise",
847 | 0xA20E : "FocalPlaneXResolution",
848 | 0xA20F : "FocalPlaneYResolution",
849 | 0xA210 : "FocalPlaneResolutionUnit",
850 | 0xA211 : "ImageNumber",
851 | 0xA212 : "SecurityClassification",
852 | 0xA213 : "ImageHistory",
853 | 0xA214 : "SubjectLocation",
854 | 0xA215 : "ExposureIndex",
855 | 0xA216 : "TIFF-EPStandardID",
856 | 0xA217 : "SensingMethod",
857 | 0xA300 : "FileSource",
858 | 0xA301 : "SceneType",
859 | 0xA302 : "CFAPattern",
860 | 0xA401 : "CustomRendered",
861 | 0xA402 : "ExposureMode",
862 | 0xA403 : "WhiteBalance",
863 | 0xA404 : "DigitalZoomRatio",
864 | 0xA405 : "FocalLengthIn35mmFormat",
865 | 0xA406 : "SceneCaptureType",
866 | 0xA407 : "GainControl",
867 | 0xA408 : "Contrast",
868 | 0xA409 : "Saturation",
869 | 0xA40A : "Sharpness",
870 | 0xA40B : "DeviceSettingDescription",
871 | 0xA40C : "SubjectDistanceRange",
872 | 0xA420 : "ImageUniqueID",
873 | 0xA430 : "OwnerName",
874 | 0xA431 : "SerialNumber",
875 | 0xA432 : "LensInfo",
876 | 0xA433 : "LensMake",
877 | 0xA434 : "LensModel",
878 | 0xA435 : "LensSerialNumber",
879 | 0xA480 : "GDALMetadata",
880 | 0xA481 : "GDALNoData",
881 | 0xA500 : "Gamma",
882 | 0xAFC0 : "ExpandSoftware",
883 | 0xAFC1 : "ExpandLens",
884 | 0xAFC2 : "ExpandFilm",
885 | 0xAFC3 : "ExpandFilterLens",
886 | 0xAFC4 : "ExpandScanner",
887 | 0xAFC5 : "ExpandFlashLamp",
888 | 0xBC01 : "PixelFormat",
889 | 0xBC02 : "Transformation",
890 | 0xBC03 : "Uncompressed",
891 | 0xBC04 : "ImageType",
892 | 0xBC80 : "ImageWidth",
893 | 0xBC81 : "ImageHeight",
894 | 0xBC82 : "WidthResolution",
895 | 0xBC83 : "HeightResolution",
896 | 0xBCC0 : "ImageOffset",
897 | 0xBCC1 : "ImageByteCount",
898 | 0xBCC2 : "AlphaOffset",
899 | 0xBCC3 : "AlphaByteCount",
900 | 0xBCC4 : "ImageDataDiscard",
901 | 0xBCC5 : "AlphaDataDiscard",
902 | 0xC427 : "OceScanjobDesc",
903 | 0xC428 : "OceApplicationSelector",
904 | 0xC429 : "OceIDNumber",
905 | 0xC42A : "OceImageLogic",
906 | 0xC44F : "Annotations",
907 | 0xC4A5 : "PrintIM",
908 | 0xC580 : "USPTOOriginalContentType",
909 | 0xC612 : "DNGVersion",
910 | 0xC613 : "DNGBackwardVersion",
911 | 0xC614 : "UniqueCameraModel",
912 | 0xC615 : "LocalizedCameraModel",
913 | 0xC616 : "CFAPlaneColor",
914 | 0xC617 : "CFALayout",
915 | 0xC618 : "LinearizationTable",
916 | 0xC619 : "BlackLevelRepeatDim",
917 | 0xC61A : "BlackLevel",
918 | 0xC61B : "BlackLevelDeltaH",
919 | 0xC61C : "BlackLevelDeltaV",
920 | 0xC61D : "WhiteLevel",
921 | 0xC61E : "DefaultScale",
922 | 0xC61F : "DefaultCropOrigin",
923 | 0xC620 : "DefaultCropSize",
924 | 0xC621 : "ColorMatrix1",
925 | 0xC622 : "ColorMatrix2",
926 | 0xC623 : "CameraCalibration1",
927 | 0xC624 : "CameraCalibration2",
928 | 0xC625 : "ReductionMatrix1",
929 | 0xC626 : "ReductionMatrix2",
930 | 0xC627 : "AnalogBalance",
931 | 0xC628 : "AsShotNeutral",
932 | 0xC629 : "AsShotWhiteXY",
933 | 0xC62A : "BaselineExposure",
934 | 0xC62B : "BaselineNoise",
935 | 0xC62C : "BaselineSharpness",
936 | 0xC62D : "BayerGreenSplit",
937 | 0xC62E : "LinearResponseLimit",
938 | 0xC62F : "CameraSerialNumber",
939 | 0xC630 : "DNGLensInfo",
940 | 0xC631 : "ChromaBlurRadius",
941 | 0xC632 : "AntiAliasStrength",
942 | 0xC633 : "ShadowScale",
943 | 0xC634 : "DNGPrivateData",
944 | 0xC635 : "MakerNoteSafety",
945 | 0xC640 : "RawImageSegmentation",
946 | 0xC65A : "CalibrationIlluminant1",
947 | 0xC65B : "CalibrationIlluminant2",
948 | 0xC65C : "BestQualityScale",
949 | 0xC65D : "RawDataUniqueID",
950 | 0xC660 : "AliasLayerMetadata",
951 | 0xC68B : "OriginalRawFileName",
952 | 0xC68C : "OriginalRawFileData",
953 | 0xC68D : "ActiveArea",
954 | 0xC68E : "MaskedAreas",
955 | 0xC68F : "AsShotICCProfile",
956 | 0xC690 : "AsShotPreProfileMatrix",
957 | 0xC691 : "CurrentICCProfile",
958 | 0xC692 : "CurrentPreProfileMatrix",
959 | 0xC6BF : "ColorimetricReference",
960 | 0xC6D2 : "PanasonicTitle",
961 | 0xC6D3 : "PanasonicTitle2",
962 | 0xC6F3 : "CameraCalibrationSig",
963 | 0xC6F4 : "ProfileCalibrationSig",
964 | 0xC6F5 : "ProfileIFD",
965 | 0xC6F6 : "AsShotProfileName",
966 | 0xC6F7 : "NoiseReductionApplied",
967 | 0xC6F8 : "ProfileName",
968 | 0xC6F9 : "ProfileHueSatMapDims",
969 | 0xC6FA : "ProfileHueSatMapData1",
970 | 0xC6FB : "ProfileHueSatMapData2",
971 | 0xC6FC : "ProfileToneCurve",
972 | 0xC6FD : "ProfileEmbedPolicy",
973 | 0xC6FE : "ProfileCopyright",
974 | 0xC714 : "ForwardMatrix1",
975 | 0xC715 : "ForwardMatrix2",
976 | 0xC716 : "PreviewApplicationName",
977 | 0xC717 : "PreviewApplicationVersion",
978 | 0xC718 : "PreviewSettingsName",
979 | 0xC719 : "PreviewSettingsDigest",
980 | 0xC71A : "PreviewColorSpace",
981 | 0xC71B : "PreviewDateTime",
982 | 0xC71C : "RawImageDigest",
983 | 0xC71D : "OriginalRawFileDigest",
984 | 0xC71E : "SubTileBlockSize",
985 | 0xC71F : "RowInterleaveFactor",
986 | 0xC725 : "ProfileLookTableDims",
987 | 0xC726 : "ProfileLookTableData",
988 | 0xC740 : "OpcodeList1",
989 | 0xC741 : "OpcodeList2",
990 | 0xC74E : "OpcodeList3",
991 | 0xC761 : "NoiseProfile",
992 | 0xC763 : "TimeCodes",
993 | 0xC764 : "FrameRate",
994 | 0xC772 : "TStop",
995 | 0xC789 : "ReelName",
996 | 0xC791 : "OriginalDefaultFinalSize",
997 | 0xC792 : "OriginalBestQualitySize",
998 | 0xC793 : "OriginalDefaultCropSize",
999 | 0xC7A1 : "CameraLabel",
1000 | 0xC7A3 : "ProfileHueSatMapEncoding",
1001 | 0xC7A4 : "ProfileLookTableEncoding",
1002 | 0xC7A5 : "BaselineExposureOffset",
1003 | 0xC7A6 : "DefaultBlackRender",
1004 | 0xC7A7 : "NewRawImageDigest",
1005 | 0xC7A8 : "RawToPreviewGain",
1006 | 0xC7B5 : "DefaultUserCrop",
1007 | 0xEA1C : "Padding",
1008 | 0xEA1D : "OffsetSchema",
1009 | 0xFDE8 : "OwnerName",
1010 | 0xFDE9 : "SerialNumber",
1011 | 0xFDEA : "Lens",
1012 | 0xFE00 : "KDC_IFD",
1013 | 0xFE4C : "RawFile",
1014 | 0xFE4D : "Converter",
1015 | 0xFE4E : "WhiteBalance",
1016 | 0xFE51 : "Exposure",
1017 | 0xFE52 : "Shadows",
1018 | 0xFE53 : "Brightness",
1019 | 0xFE54 : "Contrast",
1020 | 0xFE55 : "Saturation",
1021 | 0xFE56 : "Sharpness",
1022 | 0xFE57 : "Smoothness",
1023 | 0xFE58 : "MoireFilter"
1024 |
1025 | },
1026 |
1027 | // GPS Tags
1028 | gps : {
1029 |
1030 | 0x0000 : 'GPSVersionID',
1031 | 0x0001 : 'GPSLatitudeRef',
1032 | 0x0002 : 'GPSLatitude',
1033 | 0x0003 : 'GPSLongitudeRef',
1034 | 0x0004 : 'GPSLongitude',
1035 | 0x0005 : 'GPSAltitudeRef',
1036 | 0x0006 : 'GPSAltitude',
1037 | 0x0007 : 'GPSTimeStamp',
1038 | 0x0008 : 'GPSSatellites',
1039 | 0x0009 : 'GPSStatus',
1040 | 0x000A : 'GPSMeasureMode',
1041 | 0x000B : 'GPSDOP',
1042 | 0x000C : 'GPSSpeedRef',
1043 | 0x000D : 'GPSSpeed',
1044 | 0x000E : 'GPSTrackRef',
1045 | 0x000F : 'GPSTrack',
1046 | 0x0010 : 'GPSImgDirectionRef',
1047 | 0x0011 : 'GPSImgDirection',
1048 | 0x0012 : 'GPSMapDatum',
1049 | 0x0013 : 'GPSDestLatitudeRef',
1050 | 0x0014 : 'GPSDestLatitude',
1051 | 0x0015 : 'GPSDestLongitudeRef',
1052 | 0x0016 : 'GPSDestLongitude',
1053 | 0x0017 : 'GPSDestBearingRef',
1054 | 0x0018 : 'GPSDestBearing',
1055 | 0x0019 : 'GPSDestDistanceRef',
1056 | 0x001A : 'GPSDestDistance',
1057 | 0x001B : 'GPSProcessingMethod',
1058 | 0x001C : 'GPSAreaInformation',
1059 | 0x001D : 'GPSDateStamp',
1060 | 0x001E : 'GPSDifferential',
1061 | 0x001F : 'GPSHPositioningError'
1062 |
1063 | }
1064 |
1065 | };
--------------------------------------------------------------------------------
/test/sony-alpha-6000.jpg.json:
--------------------------------------------------------------------------------
1 | {"image":{"ImageDescription":" ","Make":"SONY","Model":"ILCE-6000","Orientation":1,"XResolution":350,"YResolution":350,"ResolutionUnit":2,"Software":"ILCE-6000 v1.00","ModifyDate":"2014:04:18 20:33:53","YCbCrPositioning":2,"ExifOffset":364,"PrintIM":{"type":"Buffer","data":[80,114,105,110,116,73,77,0,48,51,48,48,0,0,3,0,2,0,1,0,0,0,3,0,34,0,0,0,1,1,0,0,0,0,9,17,0,0,16,39,0,0,11,15,0,0,16,39,0,0,151,5,0,0,16,39,0,0,176,8,0,0,16,39,0,0,1,28,0,0,16,39,0,0,94,2,0,0,16,39,0,0,139,0,0,0,16,39,0,0,203,3,0,0,16,39,0,0,229,27,0,0,16,39,0,0]}},"thumbnail":{"Compression":6,"ImageDescription":" ","Make":"SONY","Model":"ILCE-6000","Orientation":1,"XResolution":72,"YResolution":72,"ResolutionUnit":2,"Software":"ILCE-6000 v1.00","ModifyDate":"2014:04:18 20:33:53","ThumbnailOffset":38460,"ThumbnailLength":8156,"YCbCrPositioning":2},"exif":{"ExposureTime":6,"FNumber":8,"ExposureProgram":1,"ISO":100,"SensitivityType":2,"RecommendedExposureIndex":100,"ExifVersion":{"type":"Buffer","data":[48,50,51,48]},"DateTimeOriginal":"2014:04:18 20:33:53","CreateDate":"2014:04:18 20:33:53","ComponentsConfiguration":{"type":"Buffer","data":[1,2,3,0]},"CompressedBitsPerPixel":2,"BrightnessValue":-2.04921875,"ExposureCompensation":0,"MaxApertureValue":4,"MeteringMode":5,"LightSource":0,"Flash":16,"FocalLength":22,"MakerNote":{"type":"Buffer","data":[83,79,78,89,32,68,83,67,32,0,0,0,94,0,3,16,4,0,16,0,0,0,16,8,0,0,0,32,7,0,1,0,0,0,0,0,0,0,1,32,7,0,149,34,9,0,118,24,91,0,2,32,4,0,1,0,0,0,0,0,0,0,3,32,2,0,0,1,0,0,80,8,0,0,4,32,9,0,1,0,0,0,0,0,0,0,5,32,9,0,1,0,0,0,0,0,0,0,6,32,9,0,1,0,0,0,0,0,0,0,7,32,9,0,1,0,0,0,0,0,0,0,8,32,4,0,1,0,0,0,1,0,1,0,9,32,3,0,1,0,0,0,2,0,0,0,10,32,4,0,1,0,0,0,0,0,0,0,12,32,4,0,3,0,0,0,80,9,0,0,13,32,5,0,1,0,0,0,92,9,0,0,20,32,9,0,2,0,0,0,100,9,0,0,0,48,7,0,134,1,0,0,108,9,0,0,32,176,2,0,16,0,0,0,242,10,0,0,33,176,4,0,1,0,0,0,0,0,0,0,34,176,4,0,1,0,0,0,0,0,0,0,35,176,4,0,1,0,0,0,0,0,0,0,36,176,4,0,1,0,0,0,0,0,0,0,37,176,4,0,1,0,0,0,3,0,0,0,38,176,4,0,1,0,0,0,0,0,0,0,41,176,4,0,1,0,0,0,0,0,0,0,43,176,4,0,2,0,0,0,2,11,0,0,44,176,4,0,2,0,0,0,10,11,0,0,0,176,1,0,4,0,0,0,3,3,1,0,2,1,4,0,1,0,0,0,6,0,0,0,4,1,10,0,1,0,0,0,18,11,0,0,18,1,4,0,1,0,0,0,0,0,0,0,21,1,4,0,1,0,0,0,0,0,0,0,1,176,3,0,1,0,0,0,56,1,0,0,5,1,4,0,1,0,0,0,0,0,0,0,11,32,4,0,1,0,0,0,0,0,0,0,14,32,3,0,1,0,0,0,0,0,0,0,15,32,4,0,1,0,0,0,0,0,0,0,17,32,4,0,1,0,0,0,2,0,0,0,18,32,4,0,1,0,0,0,2,0,0,0,19,32,4,0,1,0,0,0,2,0,0,0,21,32,3,0,1,0,0,0,255,255,0,0,39,176,4,0,1,0,0,0,255,255,0,0,42,176,1,0,8,0,0,0,26,11,0,0,22,32,3,0,1,0,0,0,0,0,0,0,23,32,4,0,1,0,0,0,0,0,0,0,24,32,4,0,1,0,0,0,0,0,0,0,25,32,4,0,1,0,0,0,0,0,0,0,26,32,4,0,1,0,0,0,1,0,0,0,27,32,1,0,1,0,0,0,0,0,0,0,28,32,1,0,1,0,0,0,3,0,0,0,29,32,3,0,2,0,0,0,64,1,240,0,30,32,1,0,1,0,0,0,0,0,0,0,31,32,1,0,4,0,0,0,0,0,0,0,32,32,1,0,10,0,0,0,34,11,0,0,33,32,1,0,1,0,0,0,0,0,0,0,34,32,1,0,26,0,0,0,44,11,0,0,35,32,4,0,1,0,0,0,0,0,0,0,1,80,5,0,1,0,0,0,70,11,0,0,2,80,1,0,1,0,0,0,128,0,0,0,65,176,3,0,1,0,0,0,15,0,0,0,69,176,3,0,1,0,0,0,0,0,0,0,70,176,3,0,1,0,0,0,0,0,0,0,71,176,3,0,1,0,0,0,255,255,255,255,72,176,8,0,1,0,0,0,0,0,0,0,73,176,3,0,1,0,0,0,0,0,0,0,74,176,3,0,1,0,0,0,0,0,0,0,75,176,3,0,1,0,0,0,0,0,0,0,76,176,5,0,1,0,0,0,86,11,0,0,77,176,3,0,1,0,0,0,0,0,0,0,79,176,3,0,1,0,0,0,1,0,0,0,80,176,3,0,1,0,0,0,255,255,255,255,81,176,3,0,1,0,0,0,0,0,0,0,82,176,3,0,1,0,0,0,0,0,0,0,83,176,3,0,1,0,0,0,0,0,0,0,84,176,3,0,1,0,0,0,0,0,0,0,0,148,7,0,44,2,0,0,94,11,0,0,1,148,7,0,0,16,0,0,138,13,0,0,2,148,7,0,144,1,0,0,138,29,0,0,3,148,7,0,232,3,0,0,26,31,0,0,4,148,7,0,44,2,0,0,2,35,0,0,5,148,7,0,200,7,0,0,46,37,0,0,6,148,7,0,64,0,0,0,246,44,0,0,7,148,7,0,64,0,0,0,54,45,0,0,8,148,7,0,232,3,0,0,118,45,0,0,9,148,7,0,64,5,0,0,94,49,0,0,10,148,7,0,16,1,0,0,158,54,0,0,11,148,7,0,144,1,0,0,174,55,0,0,12,148,7,0,64,0,0,0,62,57,0,0,13,148,7,0,236,4,0,0,126,57,0,0,14,148,7,0,0,48,0,0,106,62,0,0,0,161,7,0,64,0,0,0,106,110,0,0,16,32,7,0,156,25,0,0,170,110,0,0,15,148,7,0,0,8,0,0,70,136,0,0,80,144,7,0,176,3,0,0,70,144,0,0,18,148,7,0,160,0,0,0,246,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,73,73,94,0,2,1,50,48,49,52,58,48,52,58,49,56,32,50,48,58,51,51,58,53,51,0,160,15,112,23,0,0,210,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,68,67,55,51,48,51,51,50,48,50,50,50,48,48,48,0,0,0,0,0,135,22,217,62,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,97,110,100,97,114,100,0,0,0,0,0,0,0,0,160,15,0,0,112,23,0,0,56,4,0,0,80,6,0,0,0,0,0,0,10,0,0,0,195,0,22,0,80,53,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,3,0,0,1,0,0,0,1,0,0,0,10,0,0,0,10,0,0,0,35,1,1,1,0,0,0,0,0,0,1,0,0,0,146,78,0,74,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,129,1,223,8,0,0,1,8,1,0,64,135,5,0,0,0,0,0,0,67,8,0,0,0,0,0,0,0,0,0,0,0,0,86,218,0,124,1,1,0,255,255,255,255,255,233,0,215,5,79,255,255,255,255,255,255,255,255,255,255,255,231,255,255,255,255,255,5,255,255,255,255,255,231,255,255,255,255,255,0,255,255,255,255,255,27,255,255,255,255,255,0,255,255,255,255,255,0,255,255,255,255,255,14,255,255,255,255,255,0,255,255,255,255,255,1,255,255,255,255,255,0,255,255,255,255,255,105,255,255,255,255,255,1,255,255,255,255,255,1,255,255,255,255,255,125,255,255,255,255,255,182,4,255,255,255,255,255,94,255,255,255,255,255,182,4,255,255,255,255,255,94,255,255,255,255,255,182,4,255,255,255,255,255,94,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,182,4,255,255,255,255,255,94,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,8,18,91,43,0,0,0,0,72,220,95,220,62,255,220,255,254,255,255,255,255,255,61,253,255,255,252,170,249,255,127,62,170,92,255,241,78,251,255,38,31,65,27,255,255,255,56,220,251,153,255,153,191,16,255,255,255,64,255,163,255,192,11,16,255,251,220,255,251,255,255,253,192,31,31,56,255,251,255,62,255,144,220,253,254,255,16,253,255,255,255,255,255,12,146,16,253,192,220,254,255,255,251,255,255,220,15,255,62,31,78,255,153,255,251,62,220,16,251,255,31,12,254,253,251,157,251,255,254,170,255,31,154,251,160,254,251,251,255,255,251,31,253,255,255,255,252,62,255,192,68,255,62,255,106,255,255,72,62,253,255,255,253,16,139,255,220,31,253,255,255,3,253,255,62,62,255,62,199,55,24,255,254,255,199,255,254,226,170,144,11,255,255,255,220,11,132,78,255,62,255,255,255,16,78,255,253,16,255,16,170,255,170,170,31,255,251,251,255,206,255,167,255,173,255,251,253,253,255,20,250,255,156,59,255,255,62,220,254,170,70,255,254,255,28,191,255,253,16,255,237,72,194,0,162,5,1,0,0,1,0,1,0,0,0,0,0,0,112,228,96,0,0,0,0,1,203,86,233,146,202,76,25,190,166,1,71,190,71,146,186,146,213,106,213,197,71,190,71,146,186,146,213,106,213,197,1,0,0,36,0,0,0,0,0,0,0,14,0,0,156,27,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,31,0,0,86,81,0,0,75,228,0,0,184,226,1,0,24,0,0,64,0,216,17,94,27,131,0,0,0,0,0,1,0,0,0,0,0,0,0,4,165,96,0,0,0,0,0,48,187,1,0,64,88,187,4,135,20,105,47,8,71,190,71,146,186,146,213,106,225,135,71,190,71,146,186,146,213,106,225,135,1,0,0,36,0,0,0,0,0,0,0,14,0,0,25,27,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,74,0,0,119,26,0,0,164,140,0,0,187,197,1,0,0,0,74,27,0,216,16,94,27,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,1,0,35,149,0,0,148,146,0,0,123,108,0,0,83,81,0,0,33,93,0,0,167,160,0,0,170,135,0,0,32,2,0,0,191,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,149,91,255,0,0,0,0,0,0,0,0,0,0,0,0,60,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,16,26,0,0,200,76,0,0,95,76,0,0,117,135,0,0,142,7,0,0,28,106,0,0,23,211,0,0,126,160,0,0,210,12,0,0,186,186,0,0,110,142,0,0,64,35,0,0,209,203,0,0,165,71,0,0,141,172,0,0,5,36,0,0,46,135,0,0,19,211,0,0,234,226,0,0,93,96,0,0,118,96,0,0,214,172,0,0,119,2,0,0,188,240,0,0,132,57,0,0,101,211,0,0,179,146,0,0,254,112,0,0,185,205,0,0,62,48,0,0,33,32,0,0,119,7,0,0,21,236,0,0,174,136,0,0,44,112,0,0,29,5,0,0,227,94,0,0,30,236,0,0,131,138,0,0,246,205,0,0,36,215,0,0,0,234,0,0,171,14,0,0,184,125,0,0,134,105,0,0,229,94,0,0,121,40,0,0,97,94,0,0,118,5,0,0,36,94,0,0,196,216,0,0,153,138,0,0,44,48,0,0,160,231,0,0,247,125,0,0,128,182,0,0,98,48,0,0,34,234,0,0,184,86,0,0,54,234,0,0,34,182,0,0,58,138,0,0,205,125,0,0,98,246,79,69,69,69,79,246,98,98,246,79,69,69,69,79,246,98,79,69,19,91,147,91,19,69,79,101,207,177,115,95,115,177,207,101,101,75,39,45,74,45,39,75,101,101,207,177,115,95,115,177,207,101,79,69,19,91,147,91,19,69,79,0,0,127,160,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,30,12,0,0,30,12,0,0,0,0,0,0,0,0,0,0,128,255,37,255,37,255,157,255,37,255,0,149,27,1,73,215,0,0,0,149,0,0,30,12,0,0,0,149,0,0,231,231,0,0,73,215,0,0,12,12,0,0,157,40,0,0,22,160,0,0,21,106,0,0,53,197,0,0,68,36,0,0,60,220,60,136,0,4,193,94,0,0,228,255,0,0,37,255,228,96,228,96,12,43,174,96,121,43,207,43,19,43,19,43,227,43,2,43,146,43,0,43,209,96,151,96,45,96,167,43,107,43,63,43,46,43,29,43,139,43,179,43,212,43,78,43,105,43,89,96,201,43,253,43,4,71,138,71,1,71,15,43,157,43,170,43,204,43,75,43,136,43,6,43,53,43,209,43,103,43,192,43,153,43,80,43,24,43,172,43,241,96,148,96,38,224,189,96,67,224,37,96,159,96,243,43,251,96,219,96,226,96,187,96,141,224,12,224,84,224,253,96,205,96,202,224,158,96,170,224,186,224,12,224,163,96,117,224,12,224,75,224,44,96,12,224,248,224,12,224,12,224,48,96,37,96,216,96,12,224,12,224,12,224,47,96,12,224,0,96,144,224,12,224,172,224,129,96,12,224,12,224,12,224,12,224,65,96,142,43,20,224,75,224,188,96,237,96,216,96,12,224,96,224,138,220,92,0,171,255,224,220,224,220,224,220,224,220,60,220,224,220,94,1,60,220,60,220,60,220,60,220,60,220,64,0,0,0,0,91,0,0,0,0,0,0,0,0,0,0,0,249,255,0,0,204,0,0,0,0,0,0,86,81,8,33,231,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,153,255,60,220,86,220,86,150,0,194,86,150,0,194,0,194,194,254,86,0,86,0,146,0,0,0,0,0,8,0,207,215,0,0,157,108,0,0,84,12,0,0,157,108,0,0,235,14,0,0,207,215,0,0,143,146,0,0,203,40,0,0,140,108,0,0,40,106,0,0,34,92,0,0,231,121,0,0,60,220,60,136,0,4,48,14,0,0,126,255,0,0,126,255,37,96,12,43,166,96,205,220,149,0,133,255,240,220,60,220,60,220,60,220,60,220,224,220,94,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,36,158,239,147,239,57,226,64,26,238,197,255,106,159,211,184,108,90,196,223,194,30,78,91,220,201,51,172,203,206,224,236,36,219,92,112,224,148,142,76,35,98,117,196,35,149,172,41,240,174,57,145,108,75,182,161,5,100,48,199,136,184,76,217,146,134,215,100,136,27,112,71,14,75,40,145,205,243,86,237,129,244,86,109,14,11,14,213,105,122,231,36,236,154,231,247,138,5,14,239,125,233,5,116,160,237,94,69,94,245,105,97,136,121,234,231,234,194,205,124,136,231,112,236,125,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,216,1,0,1,0,0,0,216,1,0,1,234,0,0,64,27,64,27,125,0,190,0,112,110,205,0,112,0,0,0,0,0,0,92,190,0,0,0,112,0,0,0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,19,112,0,0,0,1,1,56,112,0,0,1,0,0,0,0,27,113,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,255,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,112,228,96,1,0,0,0,0,0,1,0,0,0,0,1,0,27,27,94,159,0,0,27,0,0,0,0,191,198,8,0,1,132,1,1,0,0,0,48,187,23,0,0,1,0,0,149,125,64,27,35,160,0,0,98,76,0,0,55,236,0,0,109,48,0,0,91,205,0,0,1,0,0,0,1,0,126,255,12,32,0,190,0,190,0,112,0,112,110,205,0,112,0,1,113,138,0,0,0,0,0,112,228,96,216,0,1,0,149,27,86,146,0,0,0,146,0,0,0,0,0,219,238,0,149,191,0,0,0,0,0,0,0,0,0,148,146,0,0,107,255,196,108,0,0,42,255,148,146,0,0,184,76,0,0,0,0,0,0,81,0,113,76,0,0,255,135,0,0,112,76,0,0,141,197,0,0,7,7,0,0,167,106,0,0,219,211,0,0,145,160,0,0,109,12,0,0,100,71,0,0,3,117,0,0,37,142,0,0,56,203,0,0,35,71,0,0,225,172,0,0,202,239,0,0,206,135,0,0,33,81,0,0,78,226,0,0,50,96,0,0,191,96,0,0,66,172,0,0,178,183,0,0,30,240,0,0,148,57,0,0,80,211,0,0,17,146,0,0,180,112,0,0,40,5,0,0,7,48,0,0,88,136,0,0,85,106,0,0,232,187,0,0,35,48,0,0,8,182,0,0,130,138,0,0,180,94,0,0,58,160,0,0,237,5,0,0,254,234,0,0,63,215,0,0,254,4,0,0,75,14,0,0,16,125,0,0,179,136,0,0,116,94,0,0,208,187,0,0,123,216,0,0,142,112,0,0,254,125,0,0,56,125,0,0,72,5,0,0,221,190,0,0,145,14,0,0,235,125,0,0,56,32,0,0,218,48,0,0,8,234,0,0,124,86,0,0,136,234,0,0,194,112,0,0,196,182,0,0,130,125,0,0,122,240,0,0,36,226,0,0,227,226,0,0,86,240,0,0,48,76,0,0,91,7,0,0,113,93,0,0,108,81,0,0,190,236,0,0,161,96,0,0,200,43,0,0,169,71,0,0,77,96,0,0,249,183,0,0,65,36,0,0,192,76,0,0,162,92,0,0,74,81,0,0,140,26,0,0,67,239,0,0,11,36,0,0,248,36,0,0,11,239,0,0,37,76,0,0,128,106,0,0,61,149,0,0,71,12,0,0,190,48,0,0,218,190,0,0,90,146,0,0,204,146,0,0,15,81,0,0,166,12,0,0,19,190,0,0,240,136,0,0,105,182,0,0,43,86,0,0,209,190,0,0,41,112,0,0,61,138,0,0,35,32,0,0,221,5,0,0,173,86,0,0,152,4,0,0,55,182,0,0,3,4,0,0,201,136,0,0,201,234,0,0,222,5,0,0,61,231,0,0,57,231,0,0,123,205,0,0,211,182,0,0,14,4,0,0,47,14,0,0,160,105,0,0,23,136,0,0,47,234,0,0,191,86,0,0,148,86,0,0,193,138,0,0,86,112,0,0,229,94,0,0,119,0,6,0,58,0,218,0,229,0,84,0,172,0,86,0,13,255,25,0,23,0,52,0,66,0,151,0,28,0,232,0,194,0,112,0,189,0,61,0,181,0,162,0,134,0,191,0,142,0,125,0,153,255,188,255,31,255,53,255,198,255,48,0,213,255,175,255,227,255,215,255,90,254,119,255,5,255,185,254,91,255,168,254,37,254,115,254,106,255,49,254,56,255,148,254,113,254,227,254,36,254,46,254,187,255,83,254,125,254,26,255,116,255,210,254,204,254,154,254,241,254,0,255,201,253,98,246,79,69,69,69,79,246,98,98,246,79,69,69,69,79,246,98,79,69,19,91,147,91,19,69,79,101,207,177,115,95,115,177,207,101,101,75,39,45,74,45,39,75,101,101,207,177,115,95,115,177,207,101,79,69,19,91,147,91,19,69,79,98,246,79,69,69,69,79,246,98,98,246,79,69,69,69,79,246,98,79,69,19,91,147,91,19,69,79,101,207,177,115,95,115,177,207,101,101,75,39,45,74,45,39,75,101,101,207,177,115,95,115,177,207,101,79,69,19,91,147,91,19,69,79,0,0,0,0,0,0,0,0,84,12,0,0,84,12,0,0,0,0,0,0,0,0,0,0,77,255,126,255,126,255,242,255,126,255,0,0,0,0,0,0,0,0,0,0,0,0,0,74,74,74,74,74,74,74,74,0,0,0,0,0,0,0,0,0,190,0,112,110,205,0,112,0,0,0,0,0,190,0,112,60,136,0,4,0,190,0,112,110,205,0,112,206,32,0,112,165,32,146,4,0,190,0,112,60,136,0,4,81,0,0,86,0,4,146,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,220,224,220,110,220,0,206,32,0,0,190,0,112,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,190,0,112,60,136,0,4,0,190,0,112,60,136,0,4,0,190,0,112,60,136,0,4,0,190,0,112,110,205,0,112,0,190,0,112,0,136,0,86,206,32,0,112,125,32,0,86,0,190,0,112,0,136,0,86,16,255,56,252,170,16,16,255,255,16,251,254,255,255,255,75,255,251,255,255,31,255,220,255,254,255,255,62,255,254,255,16,16,255,31,253,16,255,255,255,255,153,255,254,255,31,220,11,255,255,255,62,167,205,255,62,27,255,253,251,255,98,255,253,255,220,255,62,255,255,255,255,170,31,255,255,220,31,170,255,170,255,255,157,255,170,59,255,254,15,255,132,254,251,139,220,255,168,27,163,16,255,144,144,255,254,220,170,31,62,62,255,255,191,159,220,199,255,35,255,255,78,253,67,153,255,255,255,192,255,255,16,16,255,255,255,255,255,255,62,255,255,255,220,24,255,255,255,255,251,255,220,62,27,62,253,16,255,170,255,27,16,255,255,16,255,255,251,13,255,255,255,62,220,251,255,20,255,254,156,255,132,11,159,255,31,62,255,253,254,255,255,255,12,255,220,255,170,253,255,255,132,254,255,255,251,251,11,31,255,255,119,254,62,255,254,255,250,20,67,255,241,121,253,16,255,8,252,255,144,255,56,170,255,62,255,170,251,59,254,253,220,220,252,16,170,255,255,69,31,98,252,170,62,255,144,21,255,255,62,170,255,253,254,144,255,170,220,72,251,255,255,255,64,16,255,251,31,62,62,255,31,251,255,255,220,254,255,255,16,253,255,170,251,72,170,250,237,255,255,251,31,220,254,255,255,220,220,251,249,251,31,255,251,255,255,255,255,254,253,11,255,220,16,255,251,62,237,192,255,255,237,16,16,255,253,255,191,243,253,251,205,62,255,255,12,62,254,253,255,251,144,170,255,255,8,32,1,0,0,0,0,4,0,4,211,227,0,0,0,0,0,217,138,0,0,0,0,0,255,0,0,0,255,0,0,0,0,119,112,0,0,0,0,13,0,0,0,209,0,0,22,0,0,51,35,0,0,51,35,0,0,63,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,1,8,94,207,0,0,0,0,0,0,0,0,51,35,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,47,8,8,216,8,216,64,0,0,1,27,0,0,0,0,0,0,0,167,216,0,0,0,0,52,94,0,0,14,1,0,0,0,0,8,195,96,40,12,200,138,230,231,215,231,173,14,251,231,142,205,94,205,115,234,153,4,126,231,4,231,16,14,251,14,76,231,192,14,8,14,191,94,22,1,35,0,197,0,236,0,48,0,105,0,231,0,14,0,14,0,64,0,1,0,0,0,0,0,42,1,83,0,142,0,164,0,85,0,61,0,102,0,197,0,27,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,1,14,64,8,27,216,112,216,0,0,0,0,0,0,0,0,0,51,51,254,51,0,0,0,205,0,216,125,0,0,167,180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,0,69,0,0,0,0,65,94,0,0,167,216,149,4,0,0,0,0,0,18,0,113,0,18,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,16,0,0,0,0,0,0,0,196,0,0,0,0,0,57,146,2,2,1,127,0,187,187,48,48,69,117,7,4,0,0,1,1,0,1,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,255,255,0,0,231,231,27,27,27,27,231,27,231,27,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,31,8,170,255,72,253,58,251,253,56,0,112,0,112,0,0,0,112,0,0,110,205,216,0,1,0,0,190,12,32,119,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,125,27,0,27,0,0,0,0,0,0,0,251,251,231,0,0,16,58,215,22,138,8,0,1,0,0,0,27,0,0,0,0,0,1,0,0,0,0,0,0,0,0,27,16,0,1,1,8,1,8,255,187,74,0,0,7,0,0,0,63,255,189,255,129,255,133,254,36,254,22,253,36,253,170,252,93,252,0,0,0,0,0,0,0,0,0,0,255,255,55,255,255,253,241,87,251,255,253,253,170,255,253,62,105,0,0,0,0,0,0,251,74,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,112,110,205,1,62,255,255,16,62,0,0,0,0,0,255,62,255,0,112,0,112,0,112,0,112,0,112,0,112,0,112,0,112,8,112,64,112,231,112,5,112,182,112,187,112,47,112,26,112,96,112,78,112,56,112,87,112,49,112,45,112,49,112,212,112,131,112,131,112,74,112,233,112,11,112,8,182,50,182,53,182,0,112,0,112,0,112,0,112,0,112,0,112,0,112,0,112,8,112,64,112,231,112,5,112,182,112,187,112,47,112,26,112,96,112,78,112,56,112,87,112,49,112,45,112,49,112,212,112,131,112,131,112,74,112,233,112,11,112,8,182,50,182,53,182,0,112,0,112,0,112,0,112,0,112,0,112,0,112,0,112,8,112,64,112,231,112,5,112,182,112,187,112,47,112,26,112,96,112,78,112,56,112,87,112,49,112,45,112,49,112,212,112,131,112,131,112,74,112,233,112,11,112,8,182,50,182,53,182,0,112,0,112,0,112,0,112,0,112,0,112,0,112,0,112,8,112,64,112,231,112,5,112,182,112,187,112,47,112,26,112,96,112,78,112,56,112,87,112,49,112,45,112,49,112,212,112,131,112,131,112,74,112,233,112,11,112,8,182,50,182,53,182,255,255,255,255,255,255,255,255,255,255,0,253,9,86,9,86,9,86,9,86,62,94,62,94,62,94,62,94,215,215,215,215,215,215,215,215,215,0,215,0,215,0,215,0,215,0,215,0,215,0,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,1,0,93,0,0,190,0,0,110,205,14,1,0,1,1,27,1,0,0,0,149,0,199,0,199,1,0,27,62,64,149,94,74,231,0,205,0,105,196,187,0,0,0,0,0,0,0,0,0,0,1,1,1,86,234,1,0,0,0,0,0,0,0,0,4,0,1,1,128,255,128,255,168,255,0,0,71,0,204,0,67,0,21,1,64,8,158,8,194,27,0,0,0,0,0,0,0,0,0,0,246,125,248,64,162,64,71,64,128,27,238,27,9,8,238,8,107,1,112,1,196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,8,0,27,0,64,0,125,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,4,0,231,0,14,0,14,0,94,0,216,0,125,0,27,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,0,2,0,2,0,2,0,0,155,219,216,81,0,219,216,81,0,219,216,81,0,105,0,105,0,105,0,93,0,93,0,93,0,96,0,96,0,96,0,5,5,5,8,8,8,1,1,1,255,62,255,255,254,153,144,255,31,254,220,170,35,253,255,251,251,62,156,170,16,0,63,125,0,0,0,0,0,0,0,74,125,1,255,16,253,0,0,0,0,215,0,0,190,0,112,0,112,1,8,255,237,31,173,255,16,220,255,255,255,255,15,170,31,255,253,16,170,255,254,191,254,220,255,0,0,0,112,1,1,1,1,1,38,255,0,0,0,8,1,0,8,0,0,219,0,219,0,0,0,0,0,254,27,0,0,0,0,1,27,1,36,1,0,95,0,1,71,164,0,0,0,0,0,254,27,14,255,74,94,138,138,0,1,0,0,164,0,0,0,0,0,254,27,14,0,14,0,14,0,14,0,0,74,0,1,0,0,0,0,0,0,1,0,0,1,0,27,149,0,149,0,125,94,8,1,0,1,1,1,0,0,0,0,0,0,216,216,255,220,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,253,255,170,16,124,31,205,0,8,0,1,0,0,1,1,1,74,74,8,8,196,251,1,1,1,1,160,64,1,129,1,236,138,216,160,64,1,129,1,236,138,216,0,0,0,0,0,0,27,27,8,57,160,220,62,255,255,255,251,254,75,255,255,220,255,11,255,70,220,92,251,255,255,249,254,255,159,255,136,254,254,79,170,159,254,191,16,254,237,31,35,253,157,255,112,255,255,220,253,255,170,255,255,255,27,251,255,62,255,16,237,170,255,255,170,253,253,27,255,8,253,255,253,255,251,16,191,72,255,255,12,255,255,226,12,255,220,27,251,68,255,170,12,170,156,254,255,170,252,255,255,255,255,62,170,255,16,31,62,220,252,255,170,106,251,31,255,253,255,62,64,255,191,62,16,254,255,255,251,8,255,255,170,255,254,255,153,255,254,255,253,68,253,62,249,220,126,220,62,251,253,31,251,220,255,191,255,253,255,31,237,255,253,0,112,1,1,1,0,196,0,0,216,216,1,1,0,0,0,0,1,1,0,8,0,112,0,129,0,8,0,112,0,129,0,0,1,1,74,0,0,0,196,39,74,1,8,14,0,27,1,0,0,25,86,13,94,1,149,112,0,149,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,112,0,112,0,112,0,255,254,254,252,0,205,254,149,23,255,30,27,235,255,73,0,18,255,165,0,196,0,196,0,39,0,39,0,0,1,0,1,74,0,74,0,0,108,181,1,108,170,181,1,223,0,0,0,0,0,0,0,8,125,91,125,0,0,8,125,91,125,0,0,8,125,91,125,0,0,8,125,91,125,34,255,152,0,245,255,47,0,125,215,86,196,74,74,39,74,74,39,246,255,196,0,0,0,69,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,8,8,56,0,8,36,128,64,0,0,0,0,129,196,149,74,253,1,128,0,16,0,67,27,112,0,40,0,69,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,31,255,220,253,254,254,170,62,255,255,170,255,255,8,1,149,1,149,0,196,0,0,199,0,0,8,74,0,74,0,149,0,39,0,0,8,74,0,74,0,0,1,86,0,255,0,39,0,0,8,39,0,74,0,0,8,112,0,196,0,0,0,63,0,39,1,0,8,1,149,1,149,0,196,0,0,225,0,0,8,74,0,74,0,149,0,196,0,0,8,74,0,74,0,225,0,86,0,255,0,39,0,0,8,39,0,74,0,0,8,112,0,196,0,0,0,63,0,39,1,0,0,0,31,255,31,237,0,0,0,0,209,0,166,0,200,0,140,0,89,0,0,0,1,27,0,14,1,1,0,0,0,0,0,0,255,255,0,0,255,62,170,31,255,255,254,31,255,31,62,255,62,16,31,255,255,62,251,191,255,255,12,255,253,64,254,255,255,254,121,255,255,255,253,250,254,255,64,255,255,185,251,12,192,255,255,27,255,255,62,149,253,251,62,16,255,255,251,16,249,72,8,234,27,9,9,79,0,84,0,187,27,108,27,13,8,13,8,44,8,157,8,38,8,2,27,186,27,0,217,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,255,254,255,255,12,255,254,255,255,220,170,252,12,253,62,153,170,56,255,31,253,253,220,31,96,255,253,255,255,220,255,255,170,16,106,255,255,253,255,92,62,62,255,255,253,170,185,8,255,255,255,253,254,254,254,62,170,220,255,16,255,255,255,255,31,255,255,11,106,220,16,220,167,254,220,255,191,220,255,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,8,0,1,0,1,63,1,104,129,0,0,0,196,0,0,0,196,0,0,134,93,0,0,0,0,54,8,0,1,63,1,234,125,238,255,174,255,143,255,117,125,18,254,67,255,61,255,204,64,87,110,164,19,107,1,156,1,158,1,235,1,1,0,0,0,0,0,163,14,241,215,67,94,248,4,0,0,0,0,112,112,1,0,1,112,112,1,149,149,103,27,103,27,103,27,1,0,0,0,0,0,0,0,94,136,171,112,191,86,171,112,191,86,11,4,195,105,11,4,195,105,5,1,1,1,233,0,14,125,48,4,245,8,0,0,0,0,171,105,172,4,59,4,143,182,74,74,74,74,62,62,62,62,0,0,196,112,36,138,56,0,0,240,0,229,0,64,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,199,76,0,87,0,2,211,196,37,74,74,196,0,221,126,64,1,183,58,0,0,105,0,0,234,125,238,255,174,255,143,255,117,125,18,254,67,255,61,255,204,64,0,0,140,135,29,212,49,172,106,147,198,2,77,51,175,79,178,43,214,26,136,188,213,121,216,24,0,0,0,0,96,92,86,73,211,169,191,93,248,47,21,119,112,211,167,194,28,197,76,212,62,36,65,208,83,226,29,98,216,78,16,186,87,47,87,69,39,96,195,65,208,105,182,48,168,0,19,86,189,94,68,30,0,0,0,0,115,1,134,186,189,8,99,231,79,94,145,0,114,0,121,0,183,129,231,0,213,121,216,24,0,0,0,0,144,226,32,68,0,0,0,0,37,216,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,31,226,37,68,175,226,74,68,90,226,74,68,253,226,47,87,253,226,47,87,253,226,47,87,175,226,74,68,3,36,254,169,3,36,254,169,255,255,96,255,255,255,5,172,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,1,0,0,144,226,32,68,0,0,0,0,0,0,0,0,140,135,29,212,214,26,136,188,144,226,32,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,105,0,0,182,48,0,0,100,0,0,0,19,86,0,0,234,125,0,0,213,27,0,0,236,0,0,0,229,0,0,0,0,0,0,0,0,0,0,0,134,186,0,0,122,36,254,169,122,36,254,169,186,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,36,254,169,186,197,0,0,0,0,0,0,0,0,0,0,122,36,254,169,254,169,0,0,122,36,254,169,122,36,254,169,0,0,0,0,2,1,0,8,0,8,0,8,48,36,17,65,136,36,17,65,136,36,17,65,0,0,0,0,3,36,254,169,0,0,0,0,3,36,254,169,3,36,254,169,54,8,0,1,63,1,54,8,0,1,63,1,104,129,0,196,134,93,208,4,0,64,0,94,8,0,0,0,254,0,0,0,240,0,157,0,254,0,0,0,254,169,0,0,0,0,0,0,0,0,0,0,138,135,201,219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,1,0,0,187,0,89,84,2,61,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,226,37,68,31,226,37,68,0,26,0,26,138,135,201,219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,1,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,0,0,0,58,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,158,0,166,0,166,0,139,0,80,0,134,0,17,0,140,0,21,0,97,0,120,0,163,0,33,0,124,0,163,0,34,0,143,0,178,0,11,0,28,0,60,0,2,1,98,1,84,1,208,1,116,1,142,1,106,1,4,1,244,0,10,0,193,0,216,1,57,1,150,1,227,1,43,1,240,1,138,1,245,0,157,0,151,0,30,0,145,0,84,0,35,0,177,0,83,0,210,0,123,0,84,0,69,0,194,0,203,0,32,0,211,0,21,0,172,0,239,0,97,0,7,0,40,0,136,0,177,0,211,0,105,0,108,0,169,0,48,0,186,0,190,0,136,0,43,0,50,0,239,0,231,0,125,0,40,0,101,0,146,0,96,0,197,0,105,0,129,0,96,0,205,0,94,0,4,0,48,0,246,0,17,0,149,0,135,0,56,0,208,0,43,0,12,0,236,0,167,0,55,0,99,0,29,0,151,0,230,0,199,0,61,0,17,0,175,0,188,0,249,0,94,1,234,1,234,1,216,1,249,0,67,0,143,0,46,0,167,0,200,0,147,1,229,1,90,1,60,1,45,1,221,1,98,1,57,1,216,1,62,0,107,0,226,1,84,1,123,1,70,1,219,1,232,1,43,1,136,1,235,0,9,0,167,0,127,0,16,0,246,0,219,0,97,0,148,0,176,0,131,0,65,0,207,0,194,0,211,0,26,0,191,0,43,0,183,0,21,0,172,0,93,0,93,0,169,0,36,0,40,0,239,0,45,0,93,0,51,0,81,0,190,0,186,0,73,0,183,0,205,0,138,0,76,0,101,0,135,0,51,0,224,0,227,0,93,0,186,0,5,0,136,0,136,0,57,0,75,0,189,0,106,0,239,0,96,0,123,0,227,0,239,0,187,0,0,0,156,149,229,200,59,149,95,228,124,149,107,154,75,81,178,154,172,211,118,154,186,81,162,20,93,81,41,20,68,81,91,20,3,81,39,228,156,149,178,37,245,160,117,37,57,47,187,85,125,47,237,119,206,47,58,119,32,93,237,119,120,47,104,73,12,93,43,119,205,93,219,119,6,47,208,119,220,47,40,204,232,47,9,204,163,47,80,17,223,92,75,164,217,92,98,164,240,57,84,232,147,57,100,232,79,57,196,232,40,57,25,243,123,57,5,164,64,57,150,164,141,92,225,45,79,57,179,130,56,57,129,176,0,2,80,208,61,2,82,147,70,183,246,147,110,172,26,147,67,183,241,110,242,172,13,147,188,183,117,208,203,2,68,50,229,121,158,177,178,36,48,87,104,239,178,87,74,196,222,78,104,220,99,150,44,220,19,246,15,194,35,79,249,117,222,116,202,98,213,117,207,227,84,196,190,79,101,78,118,196,124,238,100,150,125,227,120,238,66,150,255,255,255,255,118,212,58,224,46,97,123,43,166,82,166,203,204,91,245,194,76,220,35,227,196,117,45,78,107,21,233,81,255,255,255,255,44,188,34,160,174,208,237,2,255,255,255,255,175,87,90,183,67,207,193,145,167,65,158,101,244,169,148,106,255,255,255,255,98,83,51,93,145,110,229,183,212,79,78,142,187,98,251,196,255,255,255,255,255,255,255,255,242,75,1,26,124,68,6,172,255,255,255,255,227,116,23,2,91,88,228,160,255,255,255,255,255,255,255,255,64,87,145,121,112,7,193,150,255,255,255,255,255,255,255,255,99,106,178,116,92,116,199,240,123,56,225,117,23,110,7,150,44,101,223,226,195,142,80,78,241,177,120,186,62,219,64,76,185,39,174,81,123,16,156,106,147,47,137,200,130,47,64,200,206,47,101,37,244,47,120,228,27,93,60,228,26,93,210,228,183,93,113,228,69,93,19,37,115,93,239,200,109,93,218,225,191,93,122,118,17,93,234,17,132,93,39,85,14,106,201,204,135,106,56,204,169,106,135,204,243,106,135,204,188,106,30,204,88,106,57,85,243,106,197,17,139,106,5,6,46,106,217,6,203,57,227,130,74,57,173,45,193,57,173,45,23,57,233,45,62,57,49,45,231,7,88,45,255,57,77,45,163,57,221,130,59,57,17,176,8,7,6,189,136,7,247,175,143,121,22,97,243,2,254,177,226,183,26,177,52,183,242,50,154,183,108,177,214,183,186,65,2,183,140,97,118,2,3,65,107,121,90,169,146,121,45,39,99,36,51,221,226,196,133,238,243,150,106,207,7,220,137,207,63,127,142,207,168,127,79,101,137,75,232,186,121,79,15,246,57,79,194,101,138,98,3,238,144,98,20,98,225,246,255,101,6,35,192,238,81,238,232,117,204,91,248,227,197,110,67,71,42,19,101,246,219,101,236,117,93,207,29,117,222,83,84,71,247,208,28,71,185,39,217,92,155,56,79,150,255,255,255,255,240,16,89,224,143,75,168,172,194,188,246,226,174,75,151,239,95,69,98,183,255,255,255,255,174,208,92,186,188,207,90,203,155,50,173,186,255,255,255,255,255,255,255,255,108,238,127,71,139,50,235,224,132,150,67,142,45,116,12,36,198,84,204,36,242,246,192,79,115,110,198,226,5,110,181,117,255,255,255,255,255,255,255,255,255,255,255,255,168,172,129,79,24,101,27,224,84,56,130,71,166,56,231,35,206,207,79,239,109,127,58,145,97,39,118,239,232,169,173,121,150,97,129,226,19,68,14,224,0,0,0,0,0,0,0,0,182,182,81,184,255,255,255,255,156,0,48,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,13,209,67,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,32,255,255,255,255,255,255,64,187,74,196,1,149,1,8,0,0,0,0,231,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,89,0,0,0,0,0,0,0,90,0,0,0,15,0,0,0,90,0,0,0,171,0,0,0,1,0,0,0,0,0,0,0,89,0,0,0,47,255,255,255,62,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,47,255,15,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,216,0,0,89,90,33,0,196,1,0,89,90,51,255,168,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,255,31,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,96,214,141,2,0,0,42,0,98,50,232,90,0,0,10,0,148,187,46,129,0,0,30,0,198,147,223,79,0,0,240,0,6,29,245,108,0,0,182,0,35,4,9,203,0,0,31,10,15,18,105,182,0,0,115,0,73,232,6,182,0,0,117,250,149,89,192,218,0,0,187,1,151,147,65,229,0,0,133,1,43,229,234,129,0,0,17,0,171,151,183,129,0,0,40,0,25,177,103,229,0,0,8,0,147,229,137,246,0,0,153,0,87,240,21,122,0,0,240,0,140,90,186,83,0,0,122,0,123,240,226,57,0,0,68,0,175,147,247,155,0,0,57,51,171,74,9,108,0,0,212,7,49,139,37,246,0,0,33,1,65,193,79,145,0,0,203,1,19,171,103,151,0,0,10,0,145,246,30,190,0,0,74,0,67,26,104,193,0,0,155,0,246,26,81,105,0,0,242,0,56,108,180,224,0,0,108,0,39,211,180,182,0,0,10,0,100,193,40,150,0,0,91,0,199,177,224,151,0,0,251,103,204,151,138,218,0,0,254,241,4,151,58,218,0,0,179,218,167,117,11,211,0,0,47,0,78,194,132,84,0,0,12,0,17,229,74,134,0,0,242,0,250,232,211,90,0,0,178,0,87,227,39,193,0,0,177,0,1,193,97,150,0,0,214,0,247,211,41,86,0,0,210,171,57,151,105,218,0,0,121,92,115,151,211,123,0,0,29,101,79,171,96,218,0,0,203,1,21,211,58,174,0,0,248,0,168,218,74,1,0,0,12,0,132,189,156,90,0,0,83,0,167,218,151,123,0,0,182,0,76,218,128,218,0,0,179,0,198,50,190,84,0,0,229,0,169,26,183,50,0,0,177,0,161,246,79,187,0,0,242,0,232,229,79,26,0,0,193,0,249,246,220,184,0,0,232,20,60,171,243,218,0,0,248,0,142,117,113,190,0,0,40,0,14,151,200,194,0,0,83,0,230,50,143,158,0,0,153,0,182,123,216,214,0,0,250,255,245,130,71,158,0,0,240,0,195,193,251,239,0,0,214,0,131,240,226,150,0,0,178,0,91,194,108,151,0,0,122,0,252,229,78,229,0,0,242,0,20,177,124,93,0,0,38,227,61,151,122,218,0,0,254,0,83,214,4,189,0,0,74,0,67,50,251,147,0,0,118,0,170,194,96,117,0,0,229,0,236,211,49,118,0,0,103,0,231,178,199,181,0,0,254,255,28,50,121,117,0,0,8,0,125,193,107,130,0,0,178,0,240,50,233,194,0,0,30,0,249,177,129,97,0,0,11,0,45,147,118,239,0,0,167,203,76,89,143,218,0,0,226,0,139,50,46,177,0,0,27,0,172,240,244,90,0,0,182,0,156,179,132,143,0,0,153,0,181,158,176,182,0,0,89,0,146,108,235,125,0,0,155,0,34,207,233,210,0,0,105,0,9,90,43,203,0,0,242,0,153,232,73,240,0,0,153,0,86,240,129,178,0,0,186,245,69,89,138,218,0,0,115,0,53,189,226,123,0,0,12,0,151,117,167,125,0,0,243,0,161,4,85,243,0,0,193,0,54,229,31,26,0,0,240,0,28,240,197,130,0,0,182,0,85,53,217,224,96,232,103,0,125,53,39,125,0,0,243,0,122,50,127,240,0,0,83,0,95,240,11,80,0,0,113,248,128,171,133,218,0,0,17,0,227,179,143,151,0,0,140,0,242,246,35,2,0,0,13,0,54,117,129,246,0,0,155,0,211,179,79,227,0,0,229,0,127,117,125,53,0,0,153,0,223,235,34,134,38,177,240,0,35,122,137,145,72,177,132,102,157,151,221,218,0,0,254,241,180,151,171,123,0,0,157,1,76,177,213,227,0,0,93,1,227,117,179,105,0,0,102,0,69,151,250,240,0,0,118,0,169,4,20,142,0,0,97,0,89,147,150,239,0,0,0,0,197,122,28,154,0,0,250,255,183,207,189,174,0,0,171,12,115,54,189,130,0,0,134,10,24,151,117,123,0,0,230,205,74,171,170,218,0,0,186,246,200,151,239,218,0,0,190,1,40,179,46,5,0,0,54,1,198,246,194,117,0,0,42,0,96,171,92,50,0,0,242,0,148,117,17,148,0,0,214,0,208,211,206,206,0,0,242,0,143,193,19,203,0,0,48,0,228,229,37,89,0,0,105,29,96,171,241,218,0,0,190,1,198,151,96,218,0,0,209,103,108,171,176,218,0,0,61,242,164,2,150,218,0,0,125,1,61,50,161,182,0,0,101,0,246,2,210,229,0,0,27,0,241,50,167,4,0,0,254,255,138,211,126,198,0,0,48,0,198,29,17,179,0,0,177,0,125,240,226,243,0,0,185,147,172,171,33,218,0,0,118,85,55,2,183,218,0,0,146,132,197,2,238,218,0,0,47,0,147,246,42,235,0,0,50,1,44,29,107,57,0,0,215,1,137,117,183,182,0,0,195,0,100,89,250,2,0,0,63,0,129,26,102,179,0,0,108,0,215,232,5,117,0,0,55,255,217,227,81,134,0,0,122,0,211,50,89,151,0,0,51,227,47,151,54,123,0,0,132,69,217,171,41,218,0,0,107,0,31,232,229,2,0,0,250,0,140,232,201,202,0,0,198,1,49,229,74,54,0,0,102,0,52,189,239,89,0,0,48,0,120,229,174,194,0,0,178,0,103,147,0,193,0,0,193,0,223,229,61,227,0,0,177,0,22,50,197,229,0,0,98,255,89,189,174,179,0,0,223,0,97,50,183,2,0,0,254,241,171,151,96,218,0,0,188,1,5,50,194,235,0,0,50,1,56,177,167,203,0,0,117,1,155,171,8,194,0,0,19,0,107,151,245,123,0,0,12,0,104,117,209,148,0,0,214,0,66,147,0,53,0,0,0,0,227,179,202,54,0,0,119,255,3,26,155,125,0,0,254,255,171,179,143,129,0,0,122,0,131,187,222,171,0,0,222,193,148,2,128,1,0,0,33,1,92,229,212,148,0,0,54,1,207,232,182,182,0,0,10,0,50,171,76,2,0,0,11,0,191,189,116,2,0,0,103,0,247,130,72,134,0,0,126,255,229,240,119,229,0,0,0,0,90,177,143,147,0,0,3,255,50,26,18,145,0,0,191,0,57,50,27,179,0,0,93,233,170,2,148,218,0,0,247,0,16,26,73,122,0,0,167,1,170,187,214,177,0,0,215,1,164,194,198,26,0,0,215,116,137,89,112,0,1,0,0,0,0,0,53,1,196,0,92,0,97,0,5,5,218,1,255,136,255,159,253,8,48,254,3,251,62,255,146,15,220,31,255,31,255,251,254,191,255,39,255,31,255,253,136,255,255,254,170,255,16,129,255,31,255,16,31,255,255,31,255,11,255,255,251,255,75,55,31,255,253,255,255,170,253,62,62,156,255,220,31,153,255,254,170,170,253,159,255,255,255,220,255,31,220,196,64,255,255,254,78,251,199,255,191,255,254,62,255,255,170,255,237,16,255,255,170,255,249,255,255,12,199,255,251,255,75,255,31,251,220,255,170,255,255,255,251,191,255,254,254,255,253,253,253,12,31,255,170,249,255,255,249,126,72,255,255,255,253,255,16,255,255,220,62,255,255,255,255,16,144,157,16,255,170,170,220,173,62,17,170,170,62,75,255,15,31,62,255,35,255,255,255,251,255,253,64,255,249,255,16,255,170,255,79,255,64,252,255,153,224,255,255,128,62,255,255,255,255,251,31,28,31,170,31,255,250,253,16,31,62,255,31,255,255,220,255,170,16,72,255,255,255,220,255,255,255,62,255,251,253,255,220,251,220,254,11,251,62,55,255,255,255,255,55,31,254,72,253,153,252,255,220,255,254,253,253,144,237,255,255,255,255,255,255,220,255,255,156,255,255,255,220,255,251,170,253,170,255,255,255,62,255,250,255,170,170,255,170,255,255,64,255,255,255,199,251,255,255,220,253,254,253,56,199,251,255,254,255,31,253,254,192,78,192,220,144,16,144,62,255,255,253,220,255,255,250,220,170,255,62,72,254,220,220,170,255,255,48,255,31,27,255,128,251,255,253,62,255,255,156,253,251,255,170,157,220,255,72,220,35,255,255,220,72,220,253,255,220,251,254,255,62,16,255,255,255,255,226,106,255,255,255,62,255,255,255,216,255,255,255,62,220,62,62,220,255,255,255,255,253,255,249,31,31,16,6,56,31,78,253,170,170,170,255,237,251,254,170,255,251,170,62,220,255,255,62,220,255,255,255,192,251,31,255,120,170,170,255,254,78,254,254,254,170,253,255,254,62,16,254,251,251,106,255,220,251,255,255,255,255,255,220,255,31,31,255,255,153,255,255,255,220,16,255,255,170,192,255,255,254,255,237,8,62,255,252,220,59,16,62,255,65,31,47,255,16,251,255,255,255,12,255,255,153,191,12,220,16,255,12,255,153,253,255,59,251,251,220,31,251,15,16,255,220,255,255,255,255,253,65,255,16,144,220,255,255,255,255,115,255,170,6,16,68,192,59,255,251,31,37,255,255,199,220,255,255,15,255,75,220,255,255,255,64,16,249,253,159,16,254,255,62,255,255,255,251,31,253,254,170,255,31,220,192,255,254,255,255,153,253,75,139,255,255,251,92,16,255,255,255,255,255,255,255,31,144,255,170,16,255,254,31,255,254,170,251,170,169,220,255,251,16,75,255,251,254,248,253,255,251,95,255,62,72,255,255,255,255,255,170,255,255,255,255,255,220,124,251,255,253,255,251,255,31,255,59,170,132,255,92,253,62,255,255,255,254,253,16,31,255,253,255,255,255,112,255,255,255,220,251,31,255,170,16,16,62,255,255,12,62,106,16,31,255,237,255,153,70,254,254,251,255,31,255,64,255,255,31,192,75,220,64,251,254,255,192,255,156,255,156,255,255,255,255,255,255,62,255,31,252,255,55,250,62,254,255,251,220,254,255,170,255,132,255,254,255,255,255,255,126,11,220,251,220,255,27,255,16,255,31,8,255,28,253,255,62,255,255,153,220,255,254,255,255,62,170,170,106,253,255,170,255,255,31,106,255,255,220,12,255,254,255,255,106,255,255,144,255,253,35,170,255,255,199,31,62,220,170,251,255,220,251,62,15,75,16,255,255,249,255,255,35,253,170,253,11,253,255,255,255,255,191,16,192,255,255,31,62,11,255,255,255,255,170,255,255,31,27,220,255,62,192,255,16,254,255,237,255,62,255,153,255,16,170,132,255,250,251,64,75,255,16,255,75,64,16,255,254,253,220,31,62,255,255,192,253,35,251,35,255,254,255,255,255,31,105,191,255,255,253,31,255,98,64,255,220,62,78,255,156,62,156,251,255,251,255,170,254,16,106,255,251,255,62,56,254,255,255,106,251,255,255,16,220,157,255,159,255,255,169,220,254,255,220,255,62,255,255,16,255,255,170,191,255,62,255,221,255,55,255,170,11,255,255,255,220,62,31,255,55,255,48,255,255,251,15,16,255,255,253,191,255,255,255,255,255,255,255,255,17,255,149,251,253,170,12,83,255,255,255,255,59,62,255,251,81,220,15,78,255,255,255,255,253,192,153,170,255,255,16,31,62,14,191,31,255,255,31,255,62,78,220,255,255,220,31,156,27,255,255,251,62,251,255,16,67,170,92,16,55,16,255,237,253,255,255,220,72,255,220,251,220,62,255,255,255,31,254,192,255,255,253,255,251,255,255,255,16,255,106,251,253,254,255,31,255,62,31,255,255,220,191,251,255,62,255,255,72,255,31,31,63,199,254,153,255,251,27,62,255,255,255,255,255,255,254,254,16,62,31,255,31,254,255,220,255,254,31,255,255,255,170,255,253,255,156,255,255,255,255,255,254,255,220,255,115,252,255,251,253,252,16,255,255,170,255,8,255,220,255,31,255,254,199,255,31,106,78,251,31,220,255,170,255,255,253,255,255,78,153,170,255,62,255,31,255,255,35,253,61,139,255,192,170,27,16,220,255,253,220,255,253,220,251,255,255,220,220,251,62,255,170,192,254,250,254,255,253,220,255,255,220,255,72,254,255,250,255,255,251,132,254,31,255,35,253,255,21,254,35,250,17,237,254,254,255,255,62,16,62,253,27,11,255,220,31,255,255,255,255,251,255,255,251,16,170,255,250,237,220,255,16,35,252,62,153,106,255,253,16,253,255,170,31,38,59,255,11,75,170,254,255,132,185,31,220,62,132,16,255,170,255,16,255,237,254,253,255,255,126,112,210,255,255,255,132,255,255,75,255,153,255,255,255,255,255,254,157,255,255,254,255,192,16,237,255,255,255,77,255,170,62,56,255,255,106,255,255,62,159,249,31,31,62,70,11,205,252,62,251,192,253,119,255,185,255,253,170,253,255,255,255,251,62,255,16,249,157,252,255,31,35,55,64,156,255,255,220,255,62,62,170,59,255,170,255,255,255,220,132,31,62,170,16,255,62,255,220,255,16,75,16,55,255,75,14,132,255,253,255,255,16,255,255,62,255,156,92,255,255,72,250,185,153,253,3,255,253,254,170,170,153,255,255,251,255,254,255,255,255,220,62,251,255,220,170,35,254,62,170,251,220,255,16,16,126,254,255,255,255,220,255,170,254,253,255,78,62,255,191,255,167,31,255,254,220,31,16,31,255,254,253,255,8,62,78,12,254,255,16,16,254,220,251,170,144,62,220,31,252,62,255,255,255,255,16,62,255,220,78,255,72,55,62,255,157,16,170,170,254,251,253,255,254,255,16,170,8,62,220,251,254,127,255,255,255,72,255,35,255,255,255,255,255,255,144,220,255,254,254,255,255,255,255,78,253,255,237,170,237,62,255,170,170,253,255,255,56,253,94,251,255,16,255,31,59,255,255,255,255,8,157,253,255,255,126,170,253,220,255,31,255,226,254,192,191,132,255,255,255,255,251,16,253,62,255,255,46,3,106,255,31,253,170,255,62,255,31,220,62,62,255,253,253,170,156,62,156,220,253,62,220,255,253,255,63,255,169,255,255,254,255,255,253,12,255,16,253,87,253,31,255,255,156,255,253,62,255,255,55,255,255,156,255,220,31,153,220,255,48,175,170,255,170,16,255,251,255,255,254,126,255,255,255,16,192,170,254,255,255,255,62,62,255,31,255,12,253,255,255,65,255,12,255,250,255,16,31,62,255,255,255,254,191,16,251,254,254,251,75,255,220,191,255,62,255,255,253,95,220,255,255,255,251,251,31,59,62,8,11,55,255,31,31,254,255,255,220,56,249,16,62,255,25,31,255,220,64,70,220,62,220,78,255,255,255,31,62,255,170,251,224,72,255,255,253,253,173,139,255,255,31,251,56,255,255,11,62,255,251,220,255,255,253,255,255,220,255,31,255,255,31,253,254,255,254,192,254,115,255,255,62,253,254,15,11,15,16,157,255,31,216,254,65,145,31,255,115,254,106,168,220,255,255,251,255,255,255,255,8,252,255,255,255,255,78,16,254,254,251,31,255,159,255,251,62,254,255,16,255,248,255,31,62,255,255,255,255,255,15,8,255,241,255,255,199,255,31,31,255,62,255,170,31,255,255,255,220,237,255,62,124,62,254,255,27,70,255,16,254,16,251,106,126,253,255,31,255,72,255,255,21,144,59,31,77,253,255,255,255,199,75,251,255,159,255,255,62,11,255,72,72,255,255,184,55,253,254,255,255,24,255,255,159,255,255,16,255,220,251,251,220,251,132,255,255,253,255,35,255,253,255,153,27,159,255,255,62,249,62,255,251,16,16,237,255,255,75,220,65,180,255,170,255,255,253,220,126,16,255,255,255,255,255,255,255,87,255,31,255,255,106,16,237,255,62,255,255,173,253,251,255,170,255,192,250,255,153,251,220,62,156,31,16,255,16,16,254,62,170,255,252,237,255,16,220,255,31,11,170,255,251,255,31,220,220,254,255,253,250,255,255,251,221,255,253,75,47,254,255,27,27,255,255,255,77,126,170,255,255,255,255,15,255,170,253,255,31,255,119,255,157,255,255,255,255,255,255,251,251,170,72,62,3,255,170,255,170,16,115,254,170,224,255,157,191,78,199,72,220,251,255,255,64,251,255,255,255,191,75,31,254,255,255,62,255,62,54,128,31,254,170,62,15,255,255,251,170,156,59,254,31,153,62,253,59,255,124,159,255,255,255,254,251,255,253,255,255,255,170,251,250,192,253,253,16,12,252,253,78,64,255,31,12,255,78,255,251,156,220,156,254,16,255,106,255,255,253,255,251,170,255,255,255,255,16,16,253,253,170,11,12,220,72,62,255,220,255,62,255,253,75,250,27,153,62,255,15,250,255,253,198,16,31,144,64,8,253,253,255,220,170,170,31,31,255,56,31,170,251,255,255,255,220,132,255,31,255,255,170,255,31,255,28,12,255,184,250,254,16,27,132,31,255,63,254,27,255,136,255,255,255,252,112,170,255,254,255,191,95,255,170,251,254,255,254,255,192,255,255,16,255,62,132,251,220,255,75,170,250,255,255,170,62,75,59,16,255,255,255,170,255,64,16,216,255,247,31,170,255,255,64,255,251,220,16,170,144,255,255,62,56,255,132,255,220,255,255,16,255,62,12,249,254,255,250,78,16,157,253,31,255,254,16,255,65,255,170,249,255,16,31,15,78,220,255,31,115,72,31,251,62,255,62,254,254,255,255,78,254,255,16,12,255,254,56,31,75,255,126,255,237,255,16,59,255,12,255,38,220,220,170,255,59,35,75,11,253,31,170,31,255,139,74,255,255,16,255,64,255,159,255,255,255,255,255,255,255,254,170,251,255,62,255,132,255,27,62,106,255,255,16,146,15,62,255,55,27,159,255,254,254,72,255,255,95,255,192,144,132,27,220,59,255,220,255,149,253,78,31,62,255,31,255,20,253,255,255,12,255,253,16,255,253,252,16,12,35,251,78,12,255,170,156,255,75,35,251,78,255,255,255,255,156,220,254,255,144,254,31,255,255,255,255,255,254,255,255,170,255,144,170,255,255,255,31,12,65,156,16,255,155,255,255,31,255,253,251,255,255,255,255,251,255,252,255,255,31,255,68,251,220,253,62,27,16,62,255,31,255,255,255,220,153,254,12,31,16,159,251,144,251,170,255,255,255,31,255,16,31,72,16,255,254,132,255,78,255,118,251,59,220,254,106,163,255,191,255,78,59,255,255,255,253,254,255,255,255,254,149,83,16,255,98,191,121,136,62,251,3,255,62,255,62,255,255,199,59,120,251,12,255,16,16,251,255,159,255,255,55,170,255,31,255,31,170,254,16,253,254,15,255,255,255,255,62,255,255,255,255,220,31,255,220,253,255,106,159,255,153,255,255,255,62,31,254,255,255,251,255,255,251,220,199,59,220,27,255,62,251,251,255,220,31,255,251,255,255,16,31,255,170,255,255,251,170,255,254,255,199,253,255,255,132,12,255,72,255,226,255,170,251,255,106,255,159,31,59,252,160,31,163,56,255,255,17,255,251,16,237,254,144,254,255,132,255,255,16,255,255,220,255,255,31,255,220,170,255,139,255,251,255,16,255,253,31,255,56,254,255,255,253,253,31,251,255,255,255,188,255,255,237,153,254,255,191,31,31,255,157,16,253,159,255,251,253,16,255,31,254,126,153,31,220,254,170,255,253,252,31,255,62,31,249,119,251,16,255,220,62,255,255,255,255,106,16,251,170,77,16,106,255,220,12,92,170,112,132,153,255,255,255,255,16,255,255,251,220,255,255,255,191,249,62,253,255,253,192,251,11,255,255,31,255,254,170,106,8,253,255,255,16,55,255,59,255,62,255,31,255,220,255,251,255,254,255,255,254,199,255,31,255,72,255,27,255,255,35,255,255,255,62,126,157,220,255,16,62,255,126,255,16,253,255,255,22,255,255,199,31,170,251,253,255,159,255,16,62,8,255,255,27,255,191,255,251,157,27,220,255,255,255,31,62,249,160,255,35,220,173,251,11,144,255,254,31,253,92,253,170,255,56,255,255,62,16,169,255,255,28,170,255,220,170,62,255,106,251,251,255,59,62,64,251,255,255,31,255,253,255,144,255,31,251,255,255,254,255,255,255,254,16,255,38,12,255,255,64,251,251,170,31,220,255,255,120,255,255,64,255,255,16,220,62,254,192,255,251,255,255,64,254,254,62,156,253,62,62,255,251,255,255,12,255,31,255,255,254,55,173,16,254,255,255,170,255,237,62,199,249,251,255,12,255,252,255,170,255,220,255,255,255,132,62,149,56,253,255,65,255,220,255,126,253,255,31,251,255,220,16,253,255,251,124,153,253,255,254,16,170,255,60,255,254,255,78,255,31,199,220,231,62,255,62,220,128,31,250,31,241,255,15,170,254,254,170,253,255,255,255,199,255,199,16,255,255,253,31,251,254,72,255,255,35,255,31,170,157,255,255,255,16,255,255,255,221,35,255,16,16,255,255,255,255,255,220,255,255,220,255,169,62,255,251,220,31,255,3,251,59,220,253,251,255,255,251,192,16,253,255,16,220,255,255,78,255,250,255,255,251,252,255,255,255,253,220,255,95,253,170,255,220,255,255,255,254,255,253,255,250,255,255,255,255,255,62,59,254,255,31,199,255,254,191,255,249,251,255,255,31,255,253,250,255,255,253,255,255,255,170,16,170,247,31,255,253,253,31,220,191,72,255,27,255,62,255,156,27,255,255,254,132,255,255,255,253,255,16,255,255,157,62,31,220,252,255,157,253,253,31,251,237,254,62,78,62,75,255,251,56,255,153,172,255,255,255,251,255,254,255,255,255,62,170,255,62,255,144,255,255,253,31,16,31,251,170,31,255,124,220,38,20,95,255,255,220,255,255,255,255,16,157,255,251,254,251,253,220,255,255,251,255,170,62,157,156,251,255,251,255,255,255,31,170,255,255,255,223,62,255,255,254,254,255,255,11,255,170,255,255,62,136,220,255,112,254,255,156,31,12,251,169,251,255,132,62,255,255,255,20,255,255,31,68,11,255,255,95,199,255,255,106,35,255,170,220,31,255,170,253,255,31,31,78,254,251,16,62,255,255,220,255,220,255,27,255,250,255,255,16,255,17,254,31,255,255,191,255,62,64,250,251,59,255,255,255,59,62,159,163,255,74,59,141,233,31,31,16,56,255,255,248,62,251,255,254,255,157,251,255,255,255,191,220,253,62,255,62,55,12,62,255,31,170,31,188,247,255,254,254,156,255,31,255,253,54,255,255,159,248,170,251,56,65,31,220,251,255,27,253,16,255,78,255,253,255,31,255,223,253,157,253,62,255,132,75,255,16,250,254,16,31,31,62,254,62,255,237,255,31,255,250,62,255,16,253,255,62,31,159,254,92,255,159,255,16,62,253,31,16,255,36,254,31,153,62,255,31,255,62,62,46,255,255,255,27,157,220,15,255,255,255,75,15,253,106,255,255,255,28,255,163,255,170,62,62,27,255,12,31,253,220,255,62,251,254,252,254,255,62,255,255,255,55,62,78,8,170,255,255,253,62,16,56,255,253,90,191,199,255,15,255,220,62,255,255,251,219,75,255,253,255,253,31,31,254,31,15,220,62,62,16,255,255,255,255,16,254,15,31,12,170,255,255,31,62,255,255,255,75,62,31,251,255,62,16,255,255,250,16,255,255,255,254,31,255,220,220,255,74,253,255,255,251,253,126,31,62,255,253,62,31,251,170,31,255,255,11,255,48,35,28,132,253,255,255,16,253,196,255,253,16,255,255,170,255,252,31,220,157,251,250,64,255,75,251,255,59,255,255,169,27,251,106,8,255,255,163,16,253,255,170,255,255,126,139,220,55,255,16,59,75,255,255,251,220,255,254,253,255,255,192,255,254,255,170,170,64,254,157,255,16,16,139,255,255,13,255,192,252,255,55,12,255,220,255,255,255,62,170,255,12,56,255,220,196,220,146,31,31,72,255,153,254,16,255,170,255,77,220,31,64,255,251,255,255,255,255,64,62,16,251,251,255,251,255,149,255,255,255,250,255,220,255,170,62,16,170,170,98,35,254,255,255,16,255,255,16,255,237,78,255,255,255,255,255,31,255,170,255,8,62,255,21,253,210,255,170,255,255,255,255,8,255,255,62,62,31,48,126,255,255,255,255,255,11,250,55,62,255,59,255,255,64,255,253,16,12,255,106,253,167,253,255,251,62,255,106,106,220,139,253,255,255,64,255,253,255,31,255,255,255,234,62,254,16,255,255,255,255,255,255,56,139,59,255,170,252,192,12,255,254,255,153,95,62,255,253,220,255,169,220,254,255,255,253,62,255,251,255,170,254,62,254,55,112,118,16,255,12,251,220,255,157,56,31,62,12,12,254,16,31,220,255,255,78,70,157,132,255,253,220,255,255,255,255,255,255,253,253,56,192,255,170,237,251,199,255,31,220,31,157,255,255,255,255,62,27,255,255,255,254,126,255,255,126,8,252,255,16,255,253,253,255,255,255,170,31,16,255,255,255,255,31,255,170,255,251,255,255,255,16,255,78,255,253,128,255,253,252,253,16,255,255,255,253,255,255,144,251,12,78,255,220,255,56,255,15,12,15,254,251,64,253,62,255,153,237,255,255,255,157,255,16,235,254,255,255,192,255,78,27,12,70,255,255,255,255,220,31,31,220,255,251,170,11,253,255,255,126,220,170,157,16,253,31,254,255,255,157,255,255,62,149,255,253,62,255,31,31,255,83,251,253,72,220,35,144,255,59,64,255,255,255,255,251,118,16,62,253,55,255,255,237,255,170,31,65,62,31,255,255,255,255,78,56,255,255,191,95,62,192,16,16,255,255,251,255,251,78,170,255,254,78,255,255,255,153,192,254,251,255,255,253,251,160,199,75,255,16,62,255,254,170,157,254,254,254,210,254,72,255,191,16,255,255,254,120,159,255,128,251,170,156,255,192,255,59,255,156,220,132,12,251,255,251,251,31,255,255,170,254,253,31,255,170,112,255,163,254,136,16,255,255,255,253,78,75,72,255,251,15,255,92,16,255,156,255,16,170,157,254,255,159,129,31,255,16,254,159,170,254,220,132,255,31,75,255,16,250,255,149,255,255,255,254,62,255,255,62,16,255,6,255,253,11,253,255,255,255,255,224,72,255,156,31,255,220,255,255,220,106,220,78,255,191,255,62,16,62,95,251,255,253,72,255,255,255,255,144,255,170,254,11,12,27,255,255,31,170,255,62,62,254,62,31,16,255,31,255,254,62,254,16,139,255,220,255,170,255,250,251,255,255,144,16,31,255,220,250,251,255,255,255,255,255,199,255,237,253,255,254,220,67,31,192,255,173,254,3,255,220,233,255,191,62,255,251,251,62,255,251,31,255,254,16,62,255,12,31,16,254,255,55,92,255,62,253,254,255,255,16,254,254,255,255,255,31,254,170,255,220,188,191,62,16,253,62,251,255,254,170,234,255,31,254,255,62,170,144,31,170,255,255,192,255,255,31,64,255,191,255,170,62,255,255,59,62,220,31,255,255,251,31,153,31,255,78,62,254,220,251,157,220,251,255,11,254,253,255,255,255,62,16,163,220,255,64,255,46,255,255,78,56,16,170,255,255,220,192,16,254,249,121,255,144,255,254,255,27,170,12,8,237,237,92,12,255,255,255,170,70,255,255,170,191,31,170,255,255,255,255,62,253,252,255,253,78,253,255,27,132,251,255,16,220,255,255,16,255,192,255,156,62,16,12,62,62,72,156,255,255,95,255,255,220,251,16,16,21,255,196,255,253,170,255,255,255,249,255,239,255,8,255,255,253,156,20,255,35,251,251,255,254,250,78,111,55,250,254,191,253,255,255,62,15,16,170,220,251,62,106,253,254,31,255,64,220,255,255,78,255,255,16,255,255,255,251,255,199,255,16,11,255,253,31,255,170,16,255,255,255,253,31,170,253,159,149,64,255,170,255,170,141,62,74,255,220,75,255,255,62,188,255,255,62,17,255,255,255,255,185,170,255,251,255,250,88,255,255,16,250,253,254,205,255,31,156,255,8,75,255,31,220,255,255,62,255,253,255,255,191,253,255,157,153,255,250,255,255,11,255,170,254,220,72,255,31,255,255,170,170,126,16,255,31,255,157,255,255,254,255,37,253,255,16,255,157,6,35,255,62,27,251,192,255,254,31,255,255,255,170,255,253,251,64,31,254,56,254,16,255,255,157,35,255,237,59,254,255,220,255,170,20,95,255,250,192,62,31,16,62,255,255,191,255,252,251,47,167,126,170,16,253,64,31,255,255,220,72,31,251,255,255,31,77,16,251,255,255,255,31,251,255,255,170,164,255,24,255,170,252,62,255,252,170,75,170,255,157,56,255,255,170,237,192,199,254,185,78,16,220,252,78,156,170,62,251,64,59,220,220,139,62,220,251,27,220,8,153,170,253,255,220,251,252,255,255,253,31,254,132,255,72,255,255,251,253,220,31,255,255,8,255,249,255,38,255,170,153,31,31,157,255,252,255,170,255,254,170,31,12,62,78,255,255,255,78,253,255,255,255,220,253,254,92,220,106,62,255,111,31,255,255,153,255,253,220,255,254,255,167,170,149,188,255,11,255,170,255,62,31,255,167,255,253,255,62,255,255,72,153,170,255,254,255,170,31,72,255,170,170,253,191,62,255,62,255,255,157,255,251,255,255,255,16,15,127,255,159,31,255,255,255,255,255,255,255,170,62,255,253,255,255,253,255,255,62,15,255,255,254,253,255,251,31,31,220,31,255,220,253,255,251,220,253,255,254,255,255,255,255,253,16,255,253,47,75,170,255,17,249,255,254,254,255,170,55,37,251,55,56,31,149,170,253,98,253,255,254,106,251,255,255,255,255,251,31,56,64,15,254,170,170,255,255,255,255,255,255,252,192,170,255,56,251,255,35,255,78,16,12,220,255,255,220,72,255,170,255,21,255,16,8,157,255,255,237,16,59,149,199,254,251,251,255,254,255,64,156,170,255,241,253,255,156,31,144,17,255,56,253,255,254,31,251,224,62,220,254,62,255,156,31,255,170,16,62,220,255,11,62,254,170,139,255,253,121,254,255,253,170,170,62,157,255,170,159,255,251,255,254,255,251,255,255,255,96,255,62,255,255,156,255,62,31,31,15,255,251,255,255,254,253,255,255,255,75,59,255,255,255,170,255,255,255,31,220,56,8,16,255,255,255,255,170,253,255,251,255,255,255,15,255,255,255,16,170,254,251,255,253,255,251,78,55,255,220,62,255,170,132,255,255,255,78,62,31,220,255,253,253,251,170,191,62,255,255,16,255,8,252,255,254,220,251,62,255,255,251,255,16,255,75,156,255,255,220,255,255,170,16,127,35,255,255,11,255,16,31,251,62,255,170,64,220,252,65,255,62,62,250,205,95,255,255,8,255,75,170,16,255,16,255,144,255,220,216,255,55,170,24,255,255,255,170,170,255,255,255,255,255,62,254,255,255,255,255,251,255,255,255,78,253,254,170,150,255,255,62,55,254,157,170,255,35,254,16,153,192,255,170,255,252,252,170,255,220,255,27,62,255,253,16,255,65,253,255,62,255,170,185,16,170,8,24,255,255,251,16,170,220,221,31,255,255,255,255,156,17,255,255,59,62,255,255,255,27,75,237,255,220,254,255,251,16,253,192,255,170,254,170,255,253,255,251,153,16,55,16,31,254,255,255,31,31,16,56,255,255,255,255,255,253,153,255,35,28,220,255,16,255,253,255,31,255,255,192,254,72,62,253,192,251,62,255,132,255,31,253,255,255,255,8,255,62,255,253,255,159,16,255,255,251,255,255,8,231,251,255,255,255,255,255,255,31,255,132,255,255,220,255,192,31,220,255,255,170,253,170,255,31,255,255,255,160,62,255,251,107,220,255,159,220,255,255,255,255,252,31,16,253,220,255,255,12,59,235,16,255,62,255,170,253,8,64,237,170,255,255,16,254,255,251,254,75,255,167,16,255,254,78,255,254,72,251,233,56,255,255,255,253,241,250,250,75,255,12,31,255,172,251,153,191,132,255,255,251,62,255,255,255,62,62,255,255,255,35,31,251,255,255,16,159,255,8,253,252,255,16,255,255,220,238,64,220,170,255,255,35,27,118,251,255,106,254,191,62,255,251,255,252,59,255,251,255,132,255,255,255,254,185,255,255,255,170,170,67,255,255,255,75,255,255,253,220,163,255,255,255,255,31,255,115,220,170,16,252,144,255,255,255,170,255,220,220,255,64,144,75,17,31,156,255,254,255,251,255,72,253,255,62,220,170,251,62,253,255,255,220,241,12,16,255,255,255,255,255,15,16,12,75,255,31,31,255,72,255,170,220,255,255,251,191,255,16,251,252,220,15,255,255,220,251,31,255,255,153,62,62,59,196,255,254,255,62,255,255,62,251,253,31,250,249,31,75,255,251,255,27,144,205,192,255,220,62,157,255,220,255,16,62,255,31,27,251,253,255,14,62,62,255,221,16,62,255,255,254,62,192,132,255,255,255,255,17,253,255,59,255,255,144,255,253,255,255,170,253,55,254,255,220,253,255,237,78,220,255,15,255,252,247,254,255,255,255,253,251,255,255,220,255,254,170,191,170,255,255,255,255,255,191,27,253,170,255,16,220,255,255,255,75,31,31,255,31,170,8,255,254,6,156,255,254,255,255,31,253,254,255,16,72,253,255,127,75,72,255,255,220,55,255,192,220,28,31,253,220,255,255,12,96,255,254,255,159,255,192,255,254,72,12,255,255,255,255,255,255,255,12,255,253,62,78,255,255,254,255,31,253,126,255,170,255,35,255,16,255,159,255,255,252,254,16,255,62,253,255,255,220,56,254,220,95,220,253,249,255,72,156,31,55,220,255,78,252,253,255,255,62,255,255,255,255,31,132,59,220,255,255,255,62,255,255,255,75,255,16,255,253,255,68,59,251,191,255,59,255,253,16,157,31,255,253,255,254,157,253,253,252,255,255,170,157,250,132,192,62,254,255,251,254,62,255,251,62,220,41,170,251,255,253,31,255,255,255,185,75,251,255,255,59,255,255,255,31,255,255,255,255,62,11,92,255,159,253,255,252,255,12,163,255,253,255,153,31,255,62,8,16,62,11,251,8,251,31,170,251,55,255,255,170,56,31,62,255,124,170,254,255,253,170,255,254,220,251,255,253,237,170,16,35,255,255,63,255,253,106,255,31,255,255,157,255,255,16,255,220,62,31,255,255,220,38,31,255,254,251,112,170,55,144,255,253,82,255,255,220,251,156,255,132,255,62,220,27,255,255,255,251,255,255,16,254,251,251,126,156,255,16,16,255,253,255,31,255,62,12,31,253,16,59,16,199,59,16,255,157,255,254,251,156,255,251,31,170,255,255,255,16,253,255,153,170,252,255,237,16,16,170,255,31,55,31,255,62,255,255,255,169,35,255,16,255,251,64,170,220,255,255,255,31,255,251,251,252,254,144,251,255,153,8,62,253,255,255,64,255,31,255,153,220,27,255,170,62,220,220,254,170,255,253,255,255,254,153,254,255,253,31,31,56,255,255,255,144,255,255,255,62,67,255,246,251,220,168,96,62,31,255,255,253,170,118,255,220,255,255,16,253,255,251,16,254,255,255,255,169,8,251,255,255,220,250,31,220,62,153,64,251,20,255,31,220,170,199,255,157,220,255,192,254,159,38,144,31,35,17,255,62,255,199,16,255,255,16,255,255,55,255,251,16,255,255,255,220,255,251,255,253,255,255,31,170,251,255,255,255,16,255,31,255,255,156,220,255,253,106,255,220,253,37,255,249,220,255,253,199,251,255,153,16,255,16,11,255,255,251,220,255,255,144,170,255,31,170,199,255,220,251,27,15,255,255,233,251,59,144,16,17,31,255,220,160,255,128,255,62,220,62,255,255,253,159,255,253,255,95,220,159,159,62,168,16,55,62,251,255,65,59,255,12,255,16,255,255,253,253,12,255,16,253,92,253,253,255,16,255,170,170,126,255,75,153,226,255,253,199,31,62,31,220,255,254,220,237,255,170,254,56,255,255,255,24,170,31,253,251,251,251,255,255,16,16,255,253,205,72,72,31,53,255,75,31,170,62,254,31,255,254,255,21,16,254,16,170,185,253,16,255,153,251,31,255,170,55,56,255,92,254,254,251,255,62,255,255,251,255,31,255,255,254,48,31,251,255,253,153,251,75,159,251,192,255,31,254,16,251,62,62,11,255,144,255,16,255,241,255,31,255,159,255,62,253,255,251,16,251,254,220,254,255,255,37,255,31,221,16,16,255,220,78,255,159,220,255,250,255,251,255,62,16,12,126,255,255,255,78,255,255,255,255,255,255,72,255,254,70,56,16,191,251,255,255,251,255,253,144,56,31,126,16,251,159,255,255,65,59,95,59,172,159,255,254,153,255,101,31,255,251,220,92,78,15,159,255,31,159,56,121,64,255,251,255,255,255,220,251,255,255,255,220,251,255,15,31,62,254,253,8,78,159,255,253,255,255,255,255,255,255,254,16,255,237,254,170,31,255,159,254,255,255,16,254,255,220,220,31,251,191,255,255,251,220,255,255,31,255,170,16,237,16,255,255,12,62,255,255,255,255,254,170,191,254,253,191,132,255,255,255,16,253,255,251,255,170,75,255,192,31,255,255,251,220,196,255,255,255,170,255,255,255,254,12,220,255,255,31,21,255,3,62,255,254,255,255,255,220,255,251,255,156,255,255,156,220,255,16,251,254,220,255,16,159,254,255,255,255,251,31,170,62,255,253,16,132,16,92,64,255,220,220,31,255,255,31,255,27,254,253,220,16,56,255,253,170,220,159,255,72,192,255,31,255,62,251,62,250,124,16,251,132,255,255,255,62,254,255,255,255,62,251,75,252,253,31,255,255,255,159,251,255,255,170,151,241,220,31,157,253,255,55,251,16,75,31,255,255,253,253,255,31,62,255,65,255,170,255,255,27,62,255,191,255,255,31,35,59,253,255,255,220,220,255,255,255,31,255,62,255,55,31,37,255,255,255,255,249,255,66,255,255,253,251,192,220,255,255,255,31,254,27,16,8,253,255,255,255,75,170,255,252,253,254,192,255,31,255,192,254,255,253,16,251,255,172,254,220,75,16,255,220,251,62,251,255,255,170,249,255,127,199,11,255,62,255,170,12,254,170,16,255,255,254,255,255,16,255,27,220,59,255,255,170,255,251,255,199,255,255,62,253,62,255,16,31,126,255,255,62,253,255,16,255,251,255,255,241,47,31,78,255,56,249,251,59,75,255,78,75,255,255,255,220,255,253,79,134,254,251,255,75,255,153,255,255,254,253,251,254,255,170,255,39,233,251,255,255,252,255,16,253,255,255,199,220,255,253,253,255,255,255,210,251,255,12,153,255,250,92,255,11,144,255,16,62,31,124,147,255,62,62,255,255,31,255,16,255,255,255,255,255,255,16,170,62,255,16,191,253,62,255,255,62,62,255,255,31,254,255,31,31,255,255,170,31,254,12,255,62,75,16,255,163,255,168,255,255,255,8,16,255,255,255,153,62,237,78,153,220,170,250,255,254,255,255,96,62,255,255,251,31,255,11,16,254,255,132,16,255,254,170,132,220,255,249,255,255,255,255,64,62,252,62,156,64,8,254,220,253,62,255,62,191,220,255,251,23,67,11,24,255,255,253,255,170,170,255,254,255,55,253,254,27,220,255,255,62,56,16,255,251,220,255,255,124,255,31,191,254,253,255,255,254,255,254,251,254,250,255,255,255,255,255,31,255,254,35,16,255,255,78,16,188,220,220,31,62,255,255,31,254,3,16,254,255,255,255,253,156,253,157,16,255,75,75,64,42,255,255,15,220,255,16,255,220,62,170,255,62,254,251,31,220,220,251,106,55,220,255,16,16,255,170,31,255,253,251,255,255,255,170,255,16,253,254,191,255,56,16,255,159,255,255,255,220,56,253,251,220,255,127,255,157,255,251,31,72,144,255,251,11,220,75,253,255,255,31,12,106,62,16,132,251,255,3,255,72,8,255,159,255,253,172,139,77,255,16,255,15,254,191,255,255,255,160,251,253,31,220,192,251,8,13,255,220,255,250,255,220,15,146,255,159,62,170,170,170,254,255,170,75,167,255,170,16,95,146,64,254,253,62,16,75,170,62,13,62,141,31,199,16,254,255,16,254,253,16,16,59,255,255,255,220,255,16,72,255,255,255,11,170,254,191,250,254,255,132,255,62,62,255,250,64,255,170,255,16,255,255,16,157,255,251,255,255,15,253,12,199,132,255,62,255,62,170,220,62,255,251,136,35,199,157,251,255,253,255,192,170,255,255,16,255,62,254,255,255,254,255,167,220,255,192,31,253,132,253,31,62,254,27,255,65,255,220,237,62,191,16,254,11,255,255,27,170,255,220,254,11,72,251,96,255,255,191,59,141,255,255,255,220,255,251,255,251,62,16,251,255,220,12,241,255,252,255,16,16,254,255,255,56,75,220,192,255,220,255,16,255,255,249,170,255,199,92,47,118,255,255,255,255,255,12,16,255,253,255,153,144,255,252,192,251,144,78,31,255,254,191,220,62,254,253,106,62,119,106,62,16,59,163,255,170,220,255,170,170,253,24,16,255,250,255,31,255,62,255,251,255,220,255,170,255,255,31,13,31,255,251,16,255,255,255,254,255,255,35,16,169,167,255,16,220,170,163,106,192,253,255,62,251,31,255,255,255,56,62,16,255,255,255,192,220,31,157,252,220,115,237,153,255,170,64,15,31,255,37,239,254,255,255,106,62,254,251,31,62,253,251,8,255,255,31,46,170,255,199,12,16,62,31,12,255,255,251,254,251,253,251,255,127,132,254,31,13,95,31,16,55,253,31,78,255,144,172,170,255,255,126,8,237,254,254,255,31,220,254,16,254,254,106,220,31,255,132,255,251,255,250,31,253,27,255,251,251,124,255,170,255,253,255,16,255,16,55,255,220,35,16,255,62,255,253,92,62,254,255,205,253,62,255,255,255,255,192,31,253,255,255,255,31,220,255,24,220,255,251,31,170,55,255,255,157,255,255,78,56,159,168,251,220,75,255,59,132,62,31,62,255,255,251,170,31,255,253,250,72,159,31,31,35,75,255,251,220,31,220,255,220,62,157,251,31,220,31,255,255,72,191,255,96,255,251,255,31,199,255,64,255,255,254,249,254,255,255,237,255,31,118,255,255,255,132,255,72,62,255,170,255,220,144,255,126,31,191,78,253,56,255,255,159,72,31,121,255,255,96,31,81,255,255,170,255,255,255,31,255,255,253,220,251,253,255,170,62,62,255,255,255,253,254,255,253,235,251,8,254,253,16,153,106,251,170,144,170,251,255,31,68,62,75,255,251,255,255,251,255,255,251,16,255,254,255,192,62,255,255,251,255,254,255,253,64,254,153,191,8,251,255,31,55,75,31,59,255,75,255,16,255,55,255,251,14,255,8,255,252,255,16,16,255,16,255,16,255,255,16,254,255,13,255,251,255,62,255,31,170,252,255,16,255,255,255,255,255,62,72,255,15,255,255,64,255,106,156,255,62,199,157,216,255,253,62,251,14,255,170,62,220,254,255,24,249,255,64,170,72,254,62,255,253,254,16,255,255,62,255,255,31,31,153,170,255,199,255,255,251,12,255,255,62,255,255,170,255,253,255,12,255,255,255,12,254,170,255,255,255,168,253,170,255,255,255,255,16,170,255,255,56,124,12,255,255,255,192,255,255,255,192,192,31,255,253,255,254,255,6,255,254,31,62,255,254,55,253,170,220,255,255,255,220,255,248,170,253,251,251,255,255,255,255,255,253,220,64,157,15,16,74,170,255,250,16,255,55,62,16,170,55,255,199,255,252,16,12,78,255,11,255,251,253,55,254,220,64,255,160,12,37,157,170,255,255,252,16,12,62,220,16,255,255,62,255,255,75,255,170,38,14,220,191,170,255,170,249,170,255,220,156,255,170,255,253,251,31,237,170,251,220,253,170,255,62,16,170,255,75,55,249,255,255,254,16,255,251,20,106,250,255,255,170,16,31,251,255,253,16,254,255,255,255,220,65,255,153,254,220,255,253,255,255,255,255,156,255,255,199,252,62,192,255,220,27,170,255,255,252,8,255,31,78,251,56,255,253,251,255,170,255,136,255,255,220,255,235,78,62,255,254,251,31,62,255,254,3,170,255,62,254,64,255,115,170,170,157,255,31,255,72,11,255,16,255,62,251,255,255,255,255,191,255,255,153,254,255,255,16,16,106,252,255,255,62,255,255,255,255,252,31,255,56,254,16,251,31,220,255,149,64,220,255,251,251,251,56,170,253,255,62,255,220,72,16,255,220,252,255,254,255,128,255,253,170,220,255,251,156,62,170,98,62,31,251,255,170,251,254,59,31,254,16,170,132,62,199,192,255,253,16,255,31,254,251,121,106,16,255,255,255,254,255,170,95,255,220,78,220,56,251,31,254,199,255,157,106,62,251,185,255,31,255,159,254,255,170,31,198,62,15,255,76,255,253,31,75,255,251,31,220,169,249,251,255,59,27,31,64,255,106,251,255,220,255,255,255,62,96,121,220,255,255,156,72,62,255,192,15,254,254,31,255,56,72,255,72,251,16,62,170,170,253,153,220,62,254,11,72,170,157,126,220,16,27,191,56,255,64,255,31,255,31,16,115,255,31,255,220,12,253,153,157,254,153,220,255,255,16,170,31,255,160,255,62,253,251,254,62,199,126,126,252,31,205,170,251,255,199,78,255,254,255,255,255,254,16,170,31,186,255,255,253,170,16,16,255,170,31,16,254,255,192,157,255,255,251,170,62,253,255,192,255,220,16,233,255,255,8,251,70,253,253,255,255,159,170,254,255,255,62,16,255,75,255,255,251,31,251,220,254,31,255,156,255,254,16,16,254,252,8,35,249,249,255,16,16,254,157,251,255,87,31,170,255,62,249,251,31,255,255,255,170,255,31,78,255,252,191,170,27,220,64,16,254,253,156,255,255,255,254,253,55,101,249,255,255,106,220,255,255,255,62,78,255,255,191,220,252,72,14,153,35,253,254,255,220,255,255,255,255,62,144,253,253,253,191,16,255,115,255,255,62,254,78,251,220,55,255,255,255,159,170,255,255,62,255,31,106,255,237,153,255,16,144,251,8,255,220,255,75,250,249,168,255,62,255,251,253,254,255,254,255,255,255,16,56,255,255,252,255,62,255,251,31,252,255,251,92,126,13,251,62,75,255,255,62,65,255,31,255,255,253,255,252,220,255,31,126,255,16,254,255,255,170,255,255,16,16,253,255,28,255,255,31,255,255,251,253,56,255,255,255,220,31,185,254,62,31,31,16,255,255,255,62,159,255,16,55,255,170,13,15,255,170,12,62,255,251,106,62,255,220,43,255,255,62,59,220,72,16,255,170,255,11,255,35,159,31,62,173,220,8,255,68,253,106,251,255,220,28,255,170,62,16,255,55,254,255,153,255,72,255,170,253,255,185,253,255,254,16,62,255,255,255,163,255,72,255,31,62,56,255,253,255,199,12,255,16,253,255,251,170,255,16,255,255,253,192,250,55,253,255,250,255,255,255,31,159,255,75,255,220,254,255,220,255,253,255,31,253,62,27,31,255,255,185,254,56,255,251,255,254,252,64,8,56,170,255,255,255,220,16,255,255,251,98,255,170,255,31,255,75,253,199,255,16,255,62,255,16,16,253,251,253,157,253,255,72,146,255,16,255,255,31,220,220,55,132,192,35,255,170,126,255,62,255,31,255,31,253,8,255,220,191,144,255,253,170,170,255,72,255,255,62,254,253,24,27,62,56,255,62,255,251,136,255,255,64,251,255,62,12,253,255,235,255,31,16,255,255,255,254,255,47,255,255,254,255,220,251,62,251,220,255,72,255,31,220,156,170,126,144,255,62,254,255,159,255,16,255,255,62,192,59,72,170,31,170,255,78,170,31,55,251,31,255,255,255,255,255,62,62,31,159,115,255,254,62,248,255,255,254,254,220,251,255,220,254,255,254,31,28,255,255,252,255,78,126,220,220,170,31,157,8,16,255,62,16,31,170,254,253,255,72,255,129,16,255,16,253,253,255,78,16,255,62,255,255,255,11,156,255,220,255,199,251,255,220,132,170,8,255,253,255,153,62,255,255,250,62,62,173,251,253,237,16,255,255,255,31,255,62,31,255,249,220,255,251,255,56,72,16,16,255,62,253,198,16,255,191,170,253,254,185,255,220,255,78,251,16,55,64,191,255,253,255,255,126,62,251,31,170,253,255,255,255,106,192,56,255,144,253,255,241,255,250,170,252,255,172,255,220,255,74,170,220,62,255,144,220,62,255,220,55,56,255,253,255,196,255,252,199,55,255,16,255,255,255,170,170,253,251,255,255,255,255,255,220,62,220,255,255,255,251,16,255,62,255,12,255,157,220,144,253,220,16,255,254,62,16,170,255,255,55,255,254,176,31,31,255,255,255,121,220,255,255,255,255,70,253,249,153,255,255,237,16,37,157,255,254,252,255,251,16,255,192,220,255,255,255,48,253,253,251,96,199,159,15,220,55,255,255,255,251,255,255,8,16,253,255,144,254,255,27,62,253,255,16,31,72,62,220,251,62,253,12,251,252,67,78,255,199,16,255,12,253,251,237,255,253,252,55,254,255,255,253,255,255,233,251,255,255,62,255,199,251,255,255,78,255,156,132,78,251,220,253,153,255,255,64,251,255,59,255,255,220,255,146,192,93,255,62,31,119,220,62,11,255,172,255,255,156,96,255,78,255,31,170,255,252,170,255,255,255,220,255,255,241,170,255,253,254,255,255,254,253,251,255,255,255,254,59,31,170,6,62,31,255,255,253,191,255,255,253,253,157,255,12,16,157,255,31,255,170,156,255,251,220,255,255,255,255,15,220,251,253,253,255,254,31,255,62,255,255,159,255,31,255,241,255,253,6,31,62,16,255,255,62,255,253,254,253,16,15,62,220,255,251,255,31,221,255,220,170,191,255,251,251,255,156,249,255,31,255,253,254,251,255,62,255,31,31,255,254,255,72,255,251,156,255,170,255,251,255,170,255,255,255,159,253,255,170,159,255,16,251,72,16,153,255,170,255,255,255,251,220,255,255,220,170,220,199,31,253,16,62,254,170,255,255,254,62,255,55,237,31,255,255,159,255,239,255,56,16,255,246,220,191,255,255,21,62,31,255,255,253,255,55,126,170,255,47,253,255,144,170,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,38,47,117,107,218,76,117,29,33,253,142,189,121,7,35,203,86,233,146,202,76,25,190,166,1,0,0,1,0,1,64,71,190,71,146,186,146,213,106,213,197,0,36,0,172,0,0,1,0,1,64,71,190,71,146,186,146,213,106,213,197,0,36,0,172,62,62,1,0,0,0,1,1,0,0,219,54,0,0,14,138,0,0,20,216,0,0,96,216,0,0,64,216,0,0,189,216,0,0,215,216,0,0,23,125,0,0,165,64,0,0,162,64,0,0,130,64,0,0,72,27,0,0,30,27,0,0,133,27,0,0,44,27,0,0,153,64,0,0,112,94,0,0,126,4,0,0,106,4,0,0,155,4,0,0,174,86,0,0,24,234,0,0,112,8,0,0,48,0,0,0,94,0,0,0,27,0,0,0,125,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,186,0,0,211,57,0,0,123,138,0,0,35,234,0,0,196,216,0,0,133,216,0,0,146,14,0,0,125,234,0,0,250,5,0,0,18,182,0,0,194,182,0,0,41,105,0,0,117,136,0,0,38,136,0,0,160,48,0,0,56,234,0,0,73,27,0,0,47,0,0,0,215,0,0,0,86,0,0,0,125,0,0,0,216,0,0,0,14,0,0,0,94,0,0,0,216,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,226,1,0,196,108,0,0,148,146,0,0,42,255,107,255,0,0,0,0,0,0,0,0,0,170,255,56,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,0,0,0,0,0,0,0,0,0,0,0,0,8,255,15,255,1,0,0,0,0,0,0,112,228,96,253,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,220,126,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,27,27,94,0,159,0,131,8,176,0,220,255,0,0,0,0,8,0,0,0,0,27,0,0,0,0,191,255,198,8,0,1,132,1,1,0,1,0,0,36,0,0,1,0,0,48,187,254,23,0,0,1,0,0,0,0,0,0,0,0,0,237,0,0,1,0,1,64,71,190,71,146,186,146,213,106,225,135,0,36,0,172,0,0,1,0,1,64,71,190,71,146,186,146,213,106,225,135,0,36,0,172,0,0,0,149,125,255,64,27,0,0,0,0,0,0,0,0,0,0,0,92,255,170,35,160,0,0,98,76,0,0,55,236,0,0,109,48,0,0,91,205,0,0,1,0,0,0,1,0,126,255,255,1,0,0,74,56,196,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,159,0,0,0,0,1,94,237,255,0,0,0,0,0,0,2,8,219,1,158,183,240,234,19,231,236,14,84,94,200,216,44,125,158,125,45,125,64,125,2,125,63,125,62,216,68,14,119,112,0,0,0,117,13,0,199,0,124,1,8,1,0,16,156,74,0,0,0,0,0,0,0,0,0,0,0,0,0,112,220,254,35,149,0,0,148,146,0,0,123,108,0,0,83,81,0,0,33,93,0,0,167,160,0,0,170,135,0,0,32,2,0,0,100,187,198,190,198,190,100,187,198,190,198,190,100,187,198,190,198,190,100,187,198,190,198,190,100,187,198,190,198,190,0,0,234,0,0,0,95,0,0,0,102,36,0,0,234,0,0,0,212,0,0,0,158,239,0,0,234,0,0,0,212,0,0,0,147,239,0,0,234,0,0,0,131,0,0,0,57,226,0,0,234,0,0,0,195,0,0,0,64,26,0,0,234,0,0,0,87,0,0,0,238,197,0,0,234,0,0,0,91,0,0,0,255,106,0,0,234,0,0,0,207,0,0,0,159,211,0,0,234,0,0,0,194,0,0,0,184,108,0,0,234,0,0,0,118,0,0,0,90,196,0,0,234,0,0,0,80,0,0,0,223,194,0,0,234,0,0,0,184,0,0,0,30,78,0,0,234,0,0,0,161,0,0,0,91,220,0,0,234,0,0,0,225,0,0,0,201,51,0,0,234,0,0,0,17,0,0,0,172,203,0,0,234,0,0,0,175,0,0,0,206,224,0,0,234,0,0,0,229,0,0,0,236,36,0,0,234,0,0,0,110,0,0,0,219,92,0,0,112,0,0,0,176,0,0,0,112,224,0,0,112,0,0,0,154,0,0,0,148,142,0,0,112,0,0,0,20,0,0,0,76,35,0,0,112,0,0,0,58,0,0,0,98,117,0,0,112,0,0,0,228,0,0,0,196,35,0,0,112,0,0,0,130,0,0,0,149,172,0,0,112,0,0,0,115,0,0,0,41,240,0,0,112,0,0,0,50,0,0,0,174,57,0,0,112,0,0,0,194,0,0,0,145,108,0,0,112,0,0,0,57,0,0,0,75,182,0,0,112,0,0,0,81,0,0,0,161,5,0,0,112,0,0,0,121,0,0,0,100,48,0,0,112,0,0,0,26,0,0,0,199,136,0,0,112,0,0,0,221,0,0,0,184,76,0,0,112,0,0,0,117,0,0,0,217,146,0,0,112,0,0,0,224,0,0,0,134,215,0,0,112,0,0,0,26,0,0,0,100,136,0,0,112,0,0,0,47,0,0,0,27,112,0,0,112,0,0,0,105,0,0,0,71,14,0,0,112,0,0,0,196,0,0,0,75,40,0,0,112,0,0,0,236,0,0,0,145,205,0,0,112,0,0,0,187,0,0,0,243,86,0,0,112,0,0,0,71,0,0,0,237,129,0,0,112,0,0,0,12,0,0,0,244,86,0,0,112,0,0,0,136,0,0,0,109,14,0,0,112,0,0,0,136,0,0,0,11,14,0,0,112,0,0,0,135,0,0,0,213,105,0,0,234,0,0,0,48,0,0,0,122,231,0,0,234,0,0,0,150,0,0,0,36,236,0,0,234,0,0,0,48,0,0,0,154,231,0,0,234,0,0,0,47,0,0,0,247,138,0,0,234,0,0,0,105,0,0,0,5,14,0,0,234,0,0,0,86,0,0,0,239,125,0,0,234,0,0,0,81,0,0,0,233,5,0,0,234,0,0,0,127,0,0,0,116,160,0,0,234,0,0,0,182,0,0,0,237,94,0,0,234,0,0,0,112,0,0,0,69,94,0,0,234,0,0,0,135,0,0,0,245,105,0,0,234,0,0,0,76,0,0,0,97,136,0,0,234,0,0,0,12,0,0,0,121,234,0,0,234,0,0,0,12,0,0,0,231,234,0,0,234,0,0,0,236,0,0,0,194,205,0,0,234,0,0,0,26,0,0,0,124,136,0,0,234,0,0,0,93,0,0,0,231,112,0,0,234,0,0,0,86,0,0,0,236,125,0,0,234,0,0,0,84,0,0,0,129,106,0,0,234,0,0,0,177,0,0,0,125,7,0,0,234,0,0,0,97,0,0,0,69,7,0,0,234,0,0,0,177,0,0,0,137,57,0,0,234,0,0,0,208,0,0,0,13,92,0,0,234,0,0,0,84,0,0,0,172,106,0,0,234,0,0,0,19,0,0,0,231,47,0,0,234,0,0,0,79,0,0,0,21,149,0,0,234,0,0,0,220,0,0,0,148,236,0,0,234,0,0,0,117,0,0,0,156,146,0,0,234,0,0,0,183,0,0,0,174,190,0,0,234,0,0,0,45,0,0,0,99,183,0,0,234,0,0,0,90,0,0,0,84,96,0,0,234,0,0,0,31,0,0,0,253,96,0,0,234,0,0,0,31,0,0,0,77,96,0,0,234,0,0,0,175,0,0,0,243,224,0,0,234,0,0,0,232,0,0,0,156,2,0,0,234,0,0,0,212,0,0,0,200,239,0,0,234,0,0,0,221,0,0,0,134,76,0,0,234,0,0,0,50,0,0,0,116,57,0,0,234,0,0,0,207,0,0,0,247,211,0,0,234,0,0,0,220,0,0,0,237,236,0,0,234,0,0,0,228,0,0,0,54,35,0,0,234,0,0,0,54,0,0,0,39,150,0,0,234,0,0,0,80,0,0,0,223,194,0,0,234,0,0,0,184,0,0,0,30,78,0,0,234,0,0,0,161,0,0,0,91,220,0,0,234,0,0,0,225,0,0,0,201,51,0,0,234,0,0,0,17,0,0,0,172,203,0,0,234,0,0,0,175,0,0,0,206,224,0,0,234,0,0,0,229,0,0,0,236,36,0,0,234,0,0,0,169,0,0,0,152,197,0,0,234,0,0,0,19,0,0,0,239,47,0,0,112,0,0,0,70,0,0,0,29,121,0,0,112,0,0,0,109,0,0,0,49,71,0,0,112,0,0,0,154,0,0,0,148,142,0,0,112,0,0,0,20,0,0,0,76,35,0,0,112,0,0,0,58,0,0,0,98,117,0,0,112,0,0,0,228,0,0,0,196,35,0,0,112,0,0,0,130,0,0,0,149,172,0,0,112,0,0,0,115,0,0,0,41,240,0,0,112,0,0,0,50,0,0,0,174,57,0,0,112,0,0,0,69,0,0,0,246,81,0,0,112,0,0,0,142,0,0,0,26,12,0,0,112,0,0,0,160,0,0,0,132,205,0,0,112,0,0,0,239,0,0,0,217,32,0,0,112,0,0,0,81,0,0,0,161,5,0,0,112,0,0,0,121,0,0,0,100,48,0,0,112,0,0,0,26,0,0,0,199,136,0,0,112,0,0,0,221,0,0,0,184,76,0,0,112,0,0,0,117,0,0,0,217,146,0,0,112,0,0,0,224,0,0,0,134,215,0,0,112,0,0,0,26,0,0,0,100,136,0,0,112,0,0,0,92,0,0,0,215,182,0,0,112,0,0,0,81,0,0,0,18,5,0,0,112,0,0,0,138,0,0,0,34,216,0,0,112,0,0,0,48,0,0,0,200,231,0,0,112,0,0,0,196,0,0,0,75,40,0,0,112,0,0,0,236,0,0,0,145,205,0,0,112,0,0,0,187,0,0,0,243,86,0,0,112,0,0,0,71,0,0,0,237,129,0,0,112,0,0,0,12,0,0,0,244,86,0,0,112,0,0,0,136,0,0,0,109,14,0,0,112,0,0,0,136,0,0,0,11,14,0,0,112,0,0,0,145,0,0,0,244,187,0,0,112,0,0,0,146,0,0,0,167,86,0,0,234,0,0,0,138,0,0,0,104,216,0,0,234,0,0,0,40,0,0,0,167,234,0,0,234,0,0,0,150,0,0,0,36,236,0,0,234,0,0,0,48,0,0,0,154,231,0,0,234,0,0,0,47,0,0,0,247,138,0,0,234,0,0,0,105,0,0,0,5,14,0,0,234,0,0,0,86,0,0,0,239,125,0,0,234,0,0,0,81,0,0,0,233,5,0,0,234,0,0,0,127,0,0,0,116,160,0,0,234,0,0,0,236,0,0,0,15,234,0,0,234,0,0,0,216,0,0,0,52,8,0,0,234,0,0,0,216,0,0,0,66,8,0,0,234,0,0,0,190,0,0,0,137,231,0,0,234,0,0,0,76,0,0,0,231,136,0,0,234,0,0,0,48,0,0,0,133,231,0,0,234,0,0,0,81,0,0,0,118,5,0,0,234,0,0,0,236,0,0,0,4,205,0,0,234,0,0,0,81,0,0,0,111,5,0,0,234,0,0,0,32,0,0,0,96,231,0,0,234,0,0,0,149,0,0,0,87,5,0,0,234,0,0,0,216,0,0,0,230,8,0,0,234,0,0,0,231,0,0,0,121,64,0,0,234,0,0,0,231,0,0,0,86,64,0,0,234,0,0,0,112,0,0,0,145,94,0,0,234,0,0,0,135,0,0,0,156,105,0,0,234,0,0,0,227,0,0,0,4,236,0,0,234,0,0,0,190,0,0,0,192,231,0,0,234,0,0,0,187,0,0,0,231,86,0,0,234,0,0,0,146,0,0,0,72,86,0,0,234,0,0,0,78,0,0,0,151,108,0,0,234,0,0,0,7,0,0,0,29,182,0,0,234,0,0,0,40,0,0,0,39,234,0,0,234,0,0,0,205,0,0,0,93,216,0,0,187,215,6,121,2,215,183,121,95,215,245,36,200,215,213,36,102,215,166,36,206,215,148,36,128,215,23,36,141,215,235,36,235,215,220,121,64,129,107,121,249,215,240,2,231,129,245,240,224,129,170,240,191,129,119,240,20,129,116,240,55,129,51,240,77,129,51,240,214,129,219,240,22,129,162,240,77,129,249,240,44,129,116,226,1,187,80,226,36,146,239,7,115,146,125,7,6,146,125,7,139,146,18,57,122,146,62,57,143,146,209,57,9,146,1,7,46,146,203,7,29,146,165,7,173,146,27,197,13,146,176,197,181,211,85,108,129,47,227,108,11,47,185,236,226,93,143,236,241,47,18,236,236,93,171,108,170,47,95,108,36,47,103,108,6,211,17,160,94,211,51,149,22,81,217,149,0,226,4,187,9,239,61,187,87,36,141,187,71,183,162,187,69,183,26,129,32,117,4,105,7,224,11,215,149,224,135,129,130,183,234,187,211,172,26,215,174,172,95,129,170,26,129,187,218,43,211,136,235,35,106,48,164,51,168,182,116,145,243,215,236,96,27,136,190,186,145,136,55,142,102,182,58,227,198,182,94,246,79,86,56,203,150,48,255,255,255,255,54,101,214,112,64,117,87,112,243,69,249,205,62,203,218,5,245,96,23,138,255,255,255,255,70,227,163,182,101,186,128,105,45,150,76,105,255,255,255,255,255,255,255,255,140,43,184,182,43,150,153,112,14,36,230,136,154,71,139,5,75,35,213,5,141,172,0,129,165,51,47,5,68,51,36,136,255,255,255,255,255,255,255,255,255,255,255,255,0,106,132,215,149,96,21,112,192,145,180,182,32,203,29,136,30,186,147,5,64,183,123,105,228,98,191,5,231,127,227,138,74,220,67,205,22,127,95,112,179,94,58,94,17,94,85,94,204,94,204,94,204,94,204,94,204,94,85,94,17,94,90,94,175,94,176,94,130,94,45,94,164,94,45,94,130,94,176,94,176,94,176,94,177,94,208,94,147,94,110,94,91,94,84,94,91,94,110,94,208,94,50,94,97,94,160,1,93,1,135,1,240,1,76,1,57,0,92,1,149,1,215,234,112,234,5,234,81,1,189,1,0,234,93,0,92,1,109,1,175,1,195,1,106,1,7,1,57,1,0,234,0,234,215,234,0,234,0,234,68,1,0,234,0,234,0,234,0,234,0,234,0,234,0,234,47,1,0,234,0,234,0,234,0,234,0,234,149,1,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,234,220,1,0,234,0,234,0,234,0,234,0,234,0,234,0,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,1,0,0,0,43,0,0,0,0,125,0,0,0,0,0,0,0,0,0,0,0,125,0,0,1,0,0,0,254,255,255,255,0,125,0,0,0,0,0,0,50,1,0,0,0,27,0,0,0,0,0,0,19,0,0,0,0,27,0,0,0,0,0,0,51,0,0,0,63,27,0,0,0,0,0,0,163,255,255,255,63,27,0,0,0,0,0,0,158,1,0,0,0,216,0,0,0,0,0,0,115,0,0,0,0,216,0,0,0,0,0,0,151,0,0,0,74,190,0,0,1,0,0,0,137,8,0,0,0,48,0,0,1,0,0,0,237,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,148,146,0,0,0,0,0,0,0,0,0,0,1,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,148,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,170,170,251,156,254,255,251,255,251,253,255,253,254,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,103,27,103,27,103,27,234,125,238,255,174,255,143,255,117,125,18,254,67,255,61,255,204,64,107,255,156,255,158,255,235,255,87,0,110,0,164,0,19,0,0,0,8,14,151,8,0,1,10,1,0,0,46,215,0,196,77,47,54,8,0,1,63,1,104,129,0,196,134,93,54,8,0,1,63,1,0,0,1,0,103,27,103,27,103,27,0,0,0,0,0,0,0,0,196,0,0,0,0,136,94,0,1,0,0,0,0,0,163,14,241,215,67,94,248,4,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,149,149,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,103,27,103,27,103,27,234,125,238,255,174,255,143,255,117,125,18,254,67,255,61,255,204,64,107,255,202,255,139,255,155,255,169,0,91,0,45,0,56,0,0,0,8,14,151,8,0,1,10,1,0,0,46,215,0,196,77,47,151,8,0,1,10,1,46,215,0,196,77,47,151,8,0,1,10,1,0,0,1,0,103,27,103,27,103,27,0,0,0,0,0,0,0,0,196,0,0,0,0,136,94,0,1,0,0,0,0,0,163,14,241,215,67,94,248,4,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,149,149,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,132,56,255,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,74,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,8,0,27,0,64,0,125,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,4,0,231,0,14,0,14,0,94,0,216,0,125,0,27,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,220,62,0,0,0,0,0,0,0,0,93,0,2,0,2,0,2,0,0,16,219,216,81,0,219,216,81,0,219,216,81,0,105,0,105,0,105,0,93,0,93,0,93,0,96,0,96,0,96,0,5,5,5,8,8,8,1,1,1,1,220,56,0,0,0,0,0,63,125,0,0,0,74,125,1,1,1,1,1,0,8,1,0,8,219,0,219,0,0,0,0,0,0,0,0,0,1,1,27,36,95,0,1,71,14,55,74,94,138,138,164,0,0,0,254,27,1,0,0,0,164,0,0,0,254,27,14,0,14,0,14,0,14,0,0,74,0,1,1,1,0,0,1,1,1,0,64,94,0,72,0,0,149,0,25,86,13,94,216,0,216,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,255,31,255,254,253,220,78,255,254,92,156,72,255,255,16,255,62,255,16,255,255,0,0,0,0,255,255,16,220,249,170,253,11,31,251,12,199,255,255,253,62,255,31,255,220,255,12,115,253,255,170,255,255,37,47,255,254,12,255,255,253,168,251,255,255,255,255,255,255,106,255,255,62,16,251,255,255,56,31,255,251,253,255,56,254,220,139,157,128,251,170,255,157,251,255,253,255,255,12,255,31,255,16,255,157,255,255,255,255,78,255,56,220,170,255,255,56,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,160,0,0,0,64,0,0,0,1,0,0,0,129,0,0,0,1,0,0,0,236,0,0,0,138,0,0,0,216,0,0,0,160,0,0,0,64,0,0,0,1,0,0,0,129,0,0,0,1,0,0,0,236,0,0,0,138,0,0,0,216,0,0,0,0,0,0,0,8,0,0,0,1,0,0,0,1,0,0,0,74,0,0,0,74,0,0,0,8,0,0,0,8,0,0,0,196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,0,27,0,0,0,8,0,0,0,57,0,0,0,160,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,196,0,0,0,216,0,0,0,216,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,8,0,0,0,112,0,0,0,129,0,0,0,0,0,0,0,8,0,0,0,112,0,0,0,129,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,196,0,0,0,39,0,0,0,74,0,0,0,1,0,0,0,14,0,0,0,8,0,0,0,27,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,149,0,0,0,112,0,0,0,0,0,0,0,149,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,0,1,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,0,0,0,112,0,0,0,63,0,0,0,189,0,0,0,0,0,0,0,1,0,0,0,51,81,125,0,0,0,0,0,81,32,0,0,0,0,0,0,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,94,0,0,0,113,0,0,0,8,0,0,0,149,0,0,0,211,0,0,0,93,0,0,0,92,0,0,0,7,0,0,0,36,0,0,0,149,0,0,0,211,0,0,0,93,0,0,0,92,0,0,0,7,0,0,0,197,0,0,0,1,0,0,0,27,0,0,0,1,0,0,0,8,0,0,0,112,0,0,0,1,0,0,0,44,27,0,0,191,8,0,0,44,27,0,0,191,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,255,149,23,255,30,27,235,255,73,0,18,255,165,0,196,0,196,0,39,0,39,0,0,1,0,1,74,0,74,0,0,108,181,1,108,16,181,1,223,0,0,0,0,0,0,0,8,125,91,125,0,0,8,125,91,125,0,0,8,125,91,125,0,0,8,125,91,125,34,255,152,0,245,255,47,0,125,215,86,196,74,74,39,74,74,39,246,255,196,0,0,0,69,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,8,8,56,0,8,36,128,64,0,0,0,0,129,196,149,74,253,1,128,0,16,0,67,27,112,0,40,0,69,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,174,196,124,253,185,116,128,253,185,116,84,223,64,51,143,118,64,51,0,0,0,0,76,236,200,220,149,0,0,0,234,29,174,196,32,0,0,0,190,205,125,0,204,149,0,0,255,255,31,31,160,67,220,255,255,56,255,251,251,170,191,31,170,55,170,253,62,31,220,170,255,220,31,255,254,255,251,191,220,253,255,251,255,59,31,38,255,31,15,64,254,255,253,106,255,255,31,249,254,75,31,220,253,237,255,254,59,255,62,255,255,251,251,251,62,255,62,31,255,31,253,153,255,253,7,0,0,0,63,255,189,255,129,255,133,254,36,254,22,253,36,253,170,252,93,252,93,252,93,252,93,252,93,252,93,252,8,1,8,187,74,0,0,0,1,86,253,255,8,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,119,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,236,0,0,1,0,0,0,0,0,0,0,1,0,0,0,253,144,255,255,170,16,255,67,255,255,255,35,126,255,72,62,251,255,255,16,221,90,255,62,170,233,72,78,255,8,255,31,255,237,254,255,170,249,255,253,62,255,255,56,170,255,31,20,251,255,255,253,62,255,255,255,16,170,121,254,255,250,253,254,70,215,0,0,199,138,0,0,234,0,234,0,234,0,234,0,0,0,129,0,0,0,0,0,8,0,70,215,199,138,0,72,16,15,31,255,255,255,253,255,255,255,255,255,170,16,59,251,254,255,62,220,251,254,255,255,255,144,253,255,12,255,255,31,170,255,220,254,153,153,255,254,255,24,170,141,31,255,255,170,255,255,255,255,159,27,55,62,8,157,0,8,108,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,4,1,0,84,0,0,0,199,8,105,0,0,0,0,0,64,64,0,0,199,27,105,0,0,0,0,0,145,64,0,0,199,8,105,0,0,0,0,0,152,64,0,0,199,27,105,0,0,0,0,0,246,216,0,0,199,8,105,0,0,0,0,0,31,94,0,0,199,27,105,0,0,0,0,0,93,14,0,0,199,64,105,0,73,0,0,0,106,14,0,0,41,0,105,0,73,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194,0,0,0,3,27,0,0,0,0,0,0,194,0,0,0,151,182,0,0,0,0,0,0,13,0,0,0,170,149,0,0,0,0,0,0,147,1,0,0,170,0,0,0,0,0,0,0,26,8,0,0,170,149,0,0,0,0,0,0,14,27,0,0,170,0,0,0,0,0,0,0,70,64,0,0,170,149,0,0,0,0,0,0,46,125,0,0,170,36,0,0,0,0,0,0,221,94,0,0,170,149,0,0,0,0,0,0,107,94,0,0,170,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,234,184,48,214,12,0,0,0,0,0,0,0,0,0,0,0,196,45,27,0,0,0,0,0,8,110,205,0,190,0,0,0,0,196,138,0,227,0,0,0,0,1,0,45,27,0,0,0,5,64,105,136,81,197,32,182,182,182,32,0,0,0,0,0,8,110,205,0,190,0,0,0,0,196,138,0,227,0,0,0,0,0,0,64,0,0,0,49,174,39,0,254,254,248,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,63,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,1,187,74,0,0,1,1,1,1,0,1,1,27,0,1,1,153,0,48,215,48,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,1,204,0,2,0,192,0,137,8,51,8,231,86,0,112,207,0,149,0,192,255,0,192,255,0,0,0,0,0,0,0,0,0,0,211,116,27,0,0,20,125,129,86,158,112,36,190,107,12,246,81,143,92,39,26,44,121,189,43,93,0,93,0,93,0,93,0,93,0,106,0,106,0,106,0,106,0,93,0,47,0,0,0,0,0,0,0,45,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,5,199,253,0,145,71,43,224,183,121,226,226,26,76,135,197,197,57,57,92,106,106,106,93,93,47,47,47,211,211,81,211,211,211,81,81,81,81,81,81,81,81,81,81,81,149,0,233,0,196,138,64,0,0,0,0,0,8,8,1,187,74,0,0,1,1,1,1,0,1,1,27,0,1,1,153,0,48,215,48,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,1,85,0,2,0,192,0,44,8,117,8,231,86,0,112,207,0,149,0,192,255,0,192,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,190,0,112,60,136,0,4,0,190,0,112,110,205,0,112,206,32,0,112,165,32,146,4,0,190,0,112,60,136,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,220,224,220,110,220,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,62,215,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,251,255,159,31,220,62,255,249,153,247,255,255,75,255,8,0,136,0,136,0,27,0,86,86,0,0,0,0,0,0,0,0,0,0,0,0,190,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,113,138,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,1,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"UserComment":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"FlashpixVersion":{"type":"Buffer","data":[48,49,48,48]},"ColorSpace":1,"ExifImageWidth":6000,"ExifImageHeight":4000,"InteropOffset":38168,"FileSource":{"type":"Buffer","data":[3]},"SceneType":{"type":"Buffer","data":[1]},"CustomRendered":0,"ExposureMode":1,"WhiteBalance":0,"DigitalZoomRatio":1,"FocalLengthIn35mmFormat":33,"SceneCaptureType":0,"Contrast":0,"Saturation":0,"Sharpness":0,"LensInfo":[16,50,3.5,5.6],"LensModel":"E PZ 16-50mm F3.5-5.6 OSS"},"gps":{},"interoperability":{"InteropIndex":"R98","InteropVersion":{"type":"Buffer","data":[48,49,48,48]}},"makernote":{"error":"Unable to extract Makernote information as it is in an unsupported or unrecognized format."}}
--------------------------------------------------------------------------------