Codebase list edid-decode / upstream/0.1_git20201230.95d81c9
New upstream version 0.1~git20201230.95d81c9 Andrej Shadura 3 years ago
42 changed file(s) with 12343 addition(s) and 1545 deletion(s). Raw diff Collapse all Expand all
00 Copyright 2006-2012 Red Hat, Inc.
1 Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
1 Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
22
33 Permission is hereby granted, free of charge, to any person obtaining a
44 copy of this software and associated documentation files (the "Software"),
00 bindir ?= /usr/bin
11 mandir ?= /usr/share/man
2
3 EMXX ?= em++
24
35 SOURCES = edid-decode.cpp parse-base-block.cpp parse-cta-block.cpp \
46 parse-displayid-block.cpp parse-ls-ext-block.cpp \
79
810 all: edid-decode
911
10 sha = -DSHA=$(shell if [ -d .git ]; then git rev-parse HEAD ; else printf '"not available"'; fi)
12 sha = -DSHA=$(shell if test -d .git ; then git rev-parse --short=12 HEAD ; fi)
13 date = -DDATE=$(shell if test -d .git ; then printf '"'; TZ=UTC git show --quiet --date='format-local:%F %T"' --format="%cd"; fi)
1114
1215 edid-decode: $(SOURCES) edid-decode.h Makefile
13 $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(sha) -o $@ $(SOURCES) -lm
16 $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(sha) $(date) -o $@ $(SOURCES) -lm
17
18 edid-decode.js: $(SOURCES) edid-decode.h Makefile
19 $(EMXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) $(sha) $(date) -s EXPORTED_FUNCTIONS='["_parse_edid"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -o $@ $(SOURCES) -lm
1420
1521 clean:
1622 rm -f edid-decode
1010
1111 Patches and bug reports can be sent to the linux-media@vger.kernel.org
1212 mailinglist (see https://www.linuxtv.org/lists.php). Please make sure
13 that 'edid-decode' appears in the subject line.
13 that 'edid-decode' appears in the subject line and don't forget to
14 add a 'Signed-off-by' line when submitting patches!
1415
15 Please add a 'Signed-off-by' line when submitting patches!
16 If you don't know what that is, then see:
17 https://elinux.org/Developer_Certificate_Of_Origin
1618
1719 New sample EDIDs are welcome. Please note that these must be real
1820 EDIDs read from real hardware, so no artificially constructed EDIDs.
2729
2830 All lower case.
2931
32 If the EDID was modified by other devices in the chain (e.g. AV Receivers),
33 then name the EDID as:
34
35 <TV vendor>-<TV model>-<TV port>-<AV vendor>-<AV model>-<AV port>
36
37 The test directory contains some special input files to verify the
38 edid-decode parser and hand-crafted EDIDs to test rarely seen
39 EDID features.
40
41 You can find a very large collection of EDIDs here:
42 https://github.com/linuxhw/EDID
43
44 This collection has been used to test edid-decode.
45
3046 I can also be contacted directly:
3147
3248 Hans Verkuil <hverkuil-cisco@xs4all.nl>
Binary diff not shown
Binary diff not shown
Binary diff not shown
2828 .B /sys/class/drm/*/edid
2929 on modern Linux systems with kernel modesetting support.
3030
31 All timings are shown in a short format, for example:
32
33 VIC 16: 1920x1080 60.000 Hz 16:9 67.500 kHz 148.500 MHz (native)
34 VIC 5: 1920x1080i 60.000 Hz 16:9 33.750 kHz 74.250 MHz
35 VIC 39: 1920x1080i 50.000 Hz 16:9 31.250 kHz 72.000 MHz
36
37 Each format starts with a timings type prefix, the resolution, an optional
38 interlaced indicator ('i'), the frame rate (field rate for interlaced formats),
39 the picture aspect ratio, the horizontal frequency, the pixelclock
40 frequency and optionally additional flags between parenthesis.
41
42 Note that for interlaced formats the frame height is given, not the field
43 height. So each field in a 1920x1080i format has 540 lines.
44
45 Detailed timings have another 2-3 lines of data:
46
47 VIC 16: 1920x1080 60.000 Hz 16:9 67.500 kHz 148.500 MHz (native)
48 Hfront 88 Hsync 44 Hback 148 Hpol P
49 Vfront 4 Vsync 5 Vback 36 Vpol P
50 VIC 5: 1920x1080i 60.000 Hz 16:9 33.750 kHz 74.250 MHz
51 Hfront 88 Hsync 44 Hback 148 Hpol P
52 Vfront 2 Vsync 5 Vback 15 Vpol P Vfront +0.5 Odd Field
53 Vfront 2 Vsync 5 Vback 15 Vpol P Vback +0.5 Even Field
54 VIC 39: 1920x1080i 50.000 Hz 16:9 31.250 kHz 72.000 MHz
55 Hfront 32 Hsync 168 Hback 184 Hpol P
56 Vfront 23 Vsync 5 Vback 57 Vpol N Both Fields
57
58 These describe the horizontal and vertical front porch, sync, backporch
59 and sync polarity values. For interlaced formats there are two lines
60 for the vertical information: one for the Odd Field (aka Field 1) and
61 one for the Even Field (aka Field 2). The vertical front porch of the
62 Odd Field is actually 2.5 (hence the 'Vfront +0.5' at the end of the
63 line), and the back porch of the Even Field is actually 15.5 (hence
64 the 'Vback +0.5' at the end of the line).
65
66 There is a special 'VIC 39' interlaced format where both fields have
67 the same vertical timings, in that case this is marked with 'Both Fields'.
68
69 The following timing types can be shown:
70
71 .RS
72 .TP
73 DMT #: Discrete Monitor Timing (see DMT 1.3 standard). The number is the DMT ID in hexadecimal.
74 .TP
75 CVT: Coordinated Video Timings (formula-based, see CVT 1.2 standard)
76 .TP
77 GTF: Generalized Timing Formula (formula-based, see GTF 1.1 standard)
78 .TP
79 IBM: Old IBM Timings
80 .TP
81 Apple: Old Apple Timings
82 .TP
83 VIC #: Video Identification Code (see CTA-861 standard). The number is the actual
84 VIC code.
85 .TP
86 HDMI VIC #: HDMI-specific Video Identification Code (see HDMI 2.1 standard). The number
87 is the actual HDMI VIC code.
88 .TP
89 DTD #: Detailed Timings Descriptor (see EDID standard). Also used for
90 DisplayID Video Timing Modes Types I, II, VI and VII. The number denotes that
91 this is the Nth DTD in the EDID.
92 .RE
93
94 By default DTDs are shown in the long format while others are just shown in
95 the short format. With the option \fB\-\-short\-timings\fR all timings are
96 shown in short format only. With the option \fB\-\-long\-timings\fR all timings
97 are shown in long format.
98
99 Alternate formats for long timings can be chosen via the \fB\-\-xmodeline\fR or
100 \fB\-\-fbmode\fR options.
101
31102 .SH STANDARDS
32103 .TP
33104 The following EDID standards are supported by edid-decode:
47118 .TP
48119 VTB-EXT: VESA Video Timing Block Extension Data Standard, Release A
49120 .TP
121 DTCDB: VESA Display Transfer Characteristics Data Block Standard, Version 1.0
122 .TP
123 DDDB: VESA Display Device Data Block (DDDB) Standard, Version 1
124 .TP
50125 HDMI 1.4b: High-Definition Multimedia Interface, Version 1.4b
51126 .TP
52127 HDMI 2.1: High-Definition Multimedia Interface, Version 2.1
53128 .TP
54129 HDMI 2.1: Amendment A1 to HDMI Specification Version 2.1
55130 .TP
56 CTA-861-G: A DTV Profile for Uncompressed High Speed Digital Interfaces
131 CTA-861-H: A DTV Profile for Uncompressed High Speed Digital Interfaces
57132 .TP
58133 SPWG Notebook Panel Specification, Version 3.5
59134 .TP
60135 EPI Embedded Panel Interface, Revision 1.0
61136 .RE
62137
138 .TP
139 The following related standards are also used by edid-decode:
140 .RS
141 .TP
142 DMT 1.3: VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT), Version 1.0, Rev. 13
143 .TP
144 CVT 1.2: VESA Coordinated Video Timings (CVT) Standard, Version 1.2
145 .TP
146 GTF 1.1: VESA Generalized Timing Formula Standard, Version: 1.1
147 .RE
148
63149 .SH OPTIONS
64150 .TP
65151 \fB\-h\fR, \fB\-\-help\fR
75161 raw: binary data (default unless writing to stdout)
76162 .br
77163 carray: c-program struct
164 .br
165 xml: XML data
78166 .TP
79167 \fB\-c\fR, \fB\-\-check\fR
80168 Check if the EDID conforms to the standards. Warnings and failures are
83171 \fB\-C\fR, \fB\-\-check\-inline\fR
84172 Check if the EDID conforms to the standards. Warnings and failures are
85173 reported as they happen.
174 .TP
175 \fB\-n\fR, \fB\-\-native\-timings\fR
176 Report the native timings at the end. There may be multiple native timing reports
177 depending on whether the Source only parses Block 0 (e.g. DVI outputs) or Block 0
178 and the CTA-861 Extension Blocks (HDMI).
179 .TP
180 \fB\-p\fR, \fB\-\-preferred\-timings\fR
181 Report the preferred timings at the end. There may be multiple native timing reports
182 depending on whether the Source only parses Block 0 (e.g. DVI outputs), or Block 0
183 and the CTA-861 Extension Blocks (HDMI), or Block 0 and the DisplayID Extension Blocks
184 (typical for DisplayPort).
185 .TP
186 \fB\-P\fR, \fB\-\-physical\-address\fR
187 Just report the HDMI Source Physical Address and nothing else. Reports f.f.f.f
188 if the EDID could not be parsed, or if there was no CTA-861 Vendor-Specific Data Block
189 with OUI 00-0C-03. Otherwise it reports the Source Physical Address as provided
190 in that Data Block. This can be used as input to HDMI CEC utilities such as the
191 linux cec-ctl(1) utility.
192 .TP
193 \fB\-S\fR, \fB\-\-short\-timings\fR
194 Report all video timings in a short format.
195 .TP
196 \fB\-L\fR, \fB\-\-long\-timings\fR
197 Report all video timings in a long format.
198 .TP
199 \fB\-X\fR, \fB\-\-xmodeline\fR
200 Report all long video timings in the ModeLine format as defined in xorg.conf(5).
201 This ModeLine can be used in the xorg.conf file or passed to xrandr(1) with the
202 xrandr \fB\-\-newmode\fR option.
203 .TP
204 \fB\-F\fR, \fB\-\-fbmode\fR
205 Report all long video timings in the video mode format as defined in fb.modes(5).
206 .TP
207 \fB\-V\fR, \fB\-\-v4l2\-timings\fR
208 Report all long video timings in the video mode format as defined in the linux header v4l2-dv-timings.h
209 for use with the V4L2 VIDIOC_S_DV_TIMINGS ioctl.
86210 .TP
87211 \fB\-s\fR, \fB\-\-skip\-hex\-dump\fR
88212 Skip the initial hex dump of the EDID.
95219 in the git repository, even if nothing else changed in the edid-decode output.
96220 Use this option to avoid including the SHA in the edid-decode output.
97221 .TP
98 \fB\-e\fR, \fB\-\-extract\fR
99 Extract the contents of the first block in hex values.
100 This was always done in old edid-decode versions. To get
101 the same behavior add this option.
222 \fB\-\-hide\-serial\-numbers\fR
223 Replace any serial numbers in the human readable output by '...'.
224 Note that they are still easily extracted from the EDID hex dump at
225 the start.
226 .TP
227 \fB\-\-version\fR
228 Show the SHA hash and the last commit date.
102229
103230 .PP
104231 .SH NOTES
112239 change in future versions of the tool as additional fields and extensions are
113240 added.
114241 .SH "SEE ALSO"
115 Xorg(1), xrandr(1)
242 Xorg(1), xrandr(1), cec-ctl(1), xorg.conf(5), fb.modes(5)
116243 .SH AUTHORS
117244 edid-decode was written by Adam Jackson, with contributions from Eric
118245 Anholt, Damien Lespiau, Hans Verkuil and others. For complete history and the
00 // SPDX-License-Identifier: MIT
11 /*
22 * Copyright 2006-2012 Red Hat, Inc.
3 * Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
44 *
55 * Author: Adam Jackson <ajax@nwnk.net>
66 * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl>
1313 #include <stdarg.h>
1414 #include <stdio.h>
1515 #include <stdlib.h>
16 #include <string.h>
1716 #include <unistd.h>
1817
1918 #include "edid-decode.h"
2019
20 #define STR(x) #x
21 #define STRING(x) STR(x)
22
2123 static edid_state state;
2224
2325 static unsigned char edid[EDID_PAGE_SIZE * EDID_MAX_BLOCKS];
26 static bool odd_hex_digits;
2427
2528 enum output_format {
2629 OUT_FMT_DEFAULT,
2730 OUT_FMT_HEX,
2831 OUT_FMT_RAW,
29 OUT_FMT_CARRAY
32 OUT_FMT_CARRAY,
33 OUT_FMT_XML,
3034 };
3135
3236 /*
3741 enum Option {
3842 OptCheck = 'c',
3943 OptCheckInline = 'C',
40 OptExtract = 'e',
4144 OptHelp = 'h',
45 OptNativeTimings = 'n',
4246 OptOutputFormat = 'o',
47 OptPreferredTimings = 'p',
48 OptPhysicalAddress = 'P',
49 OptLongTimings = 'L',
50 OptShortTimings = 'S',
51 OptFBModeTimings = 'F',
52 OptXModeLineTimings = 'X',
53 OptV4L2Timings = 'V',
4354 OptSkipHexDump = 's',
4455 OptSkipSHA = 128,
56 OptHideSerialNumbers,
57 OptVersion,
4558 OptLast = 256
4659 };
4760
5063 static struct option long_options[] = {
5164 { "help", no_argument, 0, OptHelp },
5265 { "output-format", required_argument, 0, OptOutputFormat },
53 { "extract", no_argument, 0, OptExtract },
66 { "native-timings", no_argument, 0, OptNativeTimings },
67 { "preferred-timings", no_argument, 0, OptPreferredTimings },
68 { "physical-address", no_argument, 0, OptPhysicalAddress },
5469 { "skip-hex-dump", no_argument, 0, OptSkipHexDump },
5570 { "skip-sha", no_argument, 0, OptSkipSHA },
71 { "hide-serial-numbers", no_argument, 0, OptHideSerialNumbers },
72 { "version", no_argument, 0, OptVersion },
5673 { "check-inline", no_argument, 0, OptCheckInline },
5774 { "check", no_argument, 0, OptCheck },
75 { "short-timings", no_argument, 0, OptShortTimings },
76 { "long-timings", no_argument, 0, OptLongTimings },
77 { "xmodeline", no_argument, 0, OptXModeLineTimings },
78 { "fbmode", no_argument, 0, OptFBModeTimings },
79 { "v4l2-timings", no_argument, 0, OptV4L2Timings },
5880 { 0, 0, 0, 0 }
5981 };
6082
7294 " hex: hex numbers in ascii text (default for stdout)\n"
7395 " raw: binary data (default unless writing to stdout)\n"
7496 " carray: c-program struct\n"
97 " xml: XML data\n"
7598 " -c, --check check if the EDID conforms to the standards, failures and\n"
7699 " warnings are reported at the end.\n"
77100 " -C, --check-inline check if the EDID conforms to the standards, failures and\n"
78101 " warnings are reported inline.\n"
102 " -n, --native-timings report the native timings\n"
103 " -p, --preferred-timings report the preferred timings\n"
104 " -P, --physical-address only report the CEC physical address\n"
105 " -S, --short-timings report all video timings in a short format\n"
106 " -L, --long-timings report all video timings in a long format\n"
107 " -X, --xmodeline report all long video timings in Xorg.conf format\n"
108 " -F, --fbmode report all long video timings in fb.modes format\n"
109 " -V, --v4l2-timings report all long video timings in v4l2-dv-timings.h format\n"
79110 " -s, --skip-hex-dump skip the initial hex dump of the EDID\n"
80111 " --skip-sha skip the SHA report\n"
81 " -e, --extract extract the contents of the first block in hex values\n"
112 " --hide-serial-numbers replace serial numbers with '...'\n"
113 " --version show the edid-decode version (SHA)\n"
82114 " -h, --help display this help message\n");
83115 }
84116
86118
87119 void msg(bool is_warn, const char *fmt, ...)
88120 {
89 char buf[256] = "";
121 char buf[1024] = "";
90122 va_list ap;
91123
92124 va_start(ap, fmt);
112144 for (unsigned i = 0; i < state.num_blocks; i++) {
113145 if (s_msgs[i][is_warn].empty())
114146 continue;
115 printf("Block %u (%s):\n%s",
147 printf("Block %u, %s:\n%s",
116148 i, block_name(edid[i * EDID_PAGE_SIZE]).c_str(),
117149 s_msgs[i][is_warn].c_str());
118150 }
119151 if (s_msgs[EDID_MAX_BLOCKS][is_warn].empty())
120152 return;
121 printf("All Blocks:\n%s",
153 printf("EDID:\n%s",
122154 s_msgs[EDID_MAX_BLOCKS][is_warn].c_str());
123155 }
124156
129161 unsigned char sum = 0;
130162 unsigned i;
131163
132 printf("%sChecksum: 0x%hhx", prefix, check);
164 printf("%sChecksum: 0x%02hhx", prefix, check);
133165
134166 for (i = 0; i < len-1; i++)
135167 sum += x[i];
136168
137169 if ((unsigned char)(check + sum) != 0) {
138170 printf(" (should be 0x%02x)\n", -sum & 0xff);
139 fail("Invalid checksum 0x%02x (should be 0x%02x)\n",
171 fail("Invalid checksum 0x%02x (should be 0x%02x).\n",
140172 check, -sum & 0xff);
141173 return;
142174 }
158190 {
159191 unsigned d = gcd(t->hact, t->vact);
160192
193 if (d == 0) {
194 t->hratio = t->vratio = 0;
195 return;
196 }
161197 t->hratio = t->hact / d;
162198 t->vratio = t->vact / d;
163199 }
164200
165 void edid_state::print_timings(const char *prefix, const struct timings *t,
166 const char *suffix)
201 std::string edid_state::dtd_type(unsigned cnt)
202 {
203 unsigned len = std::to_string(cta.preparse_total_dtds).length();
204 char buf[16];
205 sprintf(buf, "DTD %*u", len, cnt);
206 return buf;
207 }
208
209 bool edid_state::match_timings(const timings &t1, const timings &t2)
210 {
211 if (t1.hact != t2.hact ||
212 t1.vact != t2.vact ||
213 t1.rb != t2.rb ||
214 t1.interlaced != t2.interlaced ||
215 t1.hfp != t2.hfp ||
216 t1.hbp != t2.hbp ||
217 t1.hsync != t2.hsync ||
218 t1.pos_pol_hsync != t2.pos_pol_hsync ||
219 t1.hratio != t2.hratio ||
220 t1.vfp != t2.vfp ||
221 t1.vbp != t2.vbp ||
222 t1.vsync != t2.vsync ||
223 t1.pos_pol_vsync != t2.pos_pol_vsync ||
224 t1.vratio != t2.vratio ||
225 t1.pixclk_khz != t2.pixclk_khz)
226 return false;
227 return true;
228 }
229
230 static void or_str(std::string &s, const std::string &flag, unsigned &num_flags)
231 {
232 if (!num_flags)
233 s = flag;
234 else if (num_flags % 2 == 0)
235 s = s + " | \\\n\t\t" + flag;
236 else
237 s = s + " | " + flag;
238 num_flags++;
239 }
240
241 static void print_modeline(unsigned indent, const struct timings *t, double refresh)
242 {
243 unsigned offset = (!t->even_vtotal && t->interlaced) ? 1 : 0;
244
245 printf("%*sModeline \"%ux%u_%.2f%s\" %.3f %u %u %u %u %u %u %u %u %cHSync",
246 indent, "",
247 t->hact, t->vact, refresh,
248 t->interlaced ? "i" : "", t->pixclk_khz / 1000.0,
249 t->hact, t->hact + t->hfp, t->hact + t->hfp + t->hsync,
250 t->hact + t->hfp + t->hsync + t->hbp,
251 t->vact, t->vact + t->vfp, t->vact + t->vfp + t->vsync,
252 t->vact + t->vfp + t->vsync + t->vbp + offset,
253 t->pos_pol_hsync ? '+' : '-');
254 if (!t->no_pol_vsync)
255 printf(" %cVSync", t->pos_pol_vsync ? '+' : '-');
256 if (t->interlaced)
257 printf(" Interlace");
258 printf("\n");
259 }
260
261 static void print_fbmode(unsigned indent, const struct timings *t,
262 double refresh, double hor_freq_khz)
263 {
264 printf("%*smode \"%ux%u-%u%s\"\n",
265 indent, "",
266 t->hact, t->vact,
267 (unsigned)(0.5 + (t->interlaced ? refresh / 2.0 : refresh)),
268 t->interlaced ? "-lace" : "");
269 printf("%*s# D: %.2f MHz, H: %.3f kHz, V: %.2f Hz\n",
270 indent + 8, "",
271 t->pixclk_khz / 1000.0, hor_freq_khz, refresh);
272 printf("%*sgeometry %u %u %u %u 32\n",
273 indent + 8, "",
274 t->hact, t->vact, t->hact, t->vact);
275 unsigned mult = t->interlaced ? 2 : 1;
276 unsigned offset = !t->even_vtotal && t->interlaced;
277 printf("%*stimings %llu %d %d %d %u %u %u\n",
278 indent + 8, "",
279 (unsigned long long)(1000000000.0 / (double)(t->pixclk_khz) + 0.5),
280 t->hbp, t->hfp, mult * t->vbp, mult * t->vfp + offset, t->hsync, mult * t->vsync);
281 if (t->interlaced)
282 printf("%*slaced true\n", indent + 8, "");
283 if (t->pos_pol_hsync)
284 printf("%*shsync high\n", indent + 8, "");
285 if (t->pos_pol_vsync)
286 printf("%*svsync high\n", indent + 8, "");
287 printf("%*sendmode\n", indent, "");
288 }
289
290 static void print_v4l2_timing(const struct timings *t,
291 double refresh, const char *type)
292 {
293 printf("\t#define V4L2_DV_BT_%uX%u%c%u_%02u { \\\n",
294 t->hact, t->vact, t->interlaced ? 'I' : 'P',
295 (unsigned)refresh, (unsigned)(0.5 + 100.0 * (refresh - (unsigned)refresh)));
296 printf("\t\t.type = V4L2_DV_BT_656_1120, \\\n");
297 printf("\t\tV4L2_INIT_BT_TIMINGS(%u, %u, %u, ",
298 t->hact, t->vact, t->interlaced);
299 if (!t->pos_pol_hsync && !t->pos_pol_vsync)
300 printf("0, \\\n");
301 else if (t->pos_pol_hsync && t->pos_pol_vsync)
302 printf("\\\n\t\t\tV4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \\\n");
303 else if (t->pos_pol_hsync)
304 printf("V4L2_DV_HSYNC_POS_POL, \\\n");
305 else
306 printf("V4L2_DV_VSYNC_POS_POL, \\\n");
307 printf("\t\t\t%lluULL, %d, %u, %d, %u, %u, %d, %u, %u, %d, \\\n",
308 t->pixclk_khz * 1000ULL, t->hfp, t->hsync, t->hbp,
309 t->vfp, t->vsync, t->vbp,
310 t->interlaced ? t->vfp : 0,
311 t->interlaced ? t->vsync : 0,
312 t->interlaced ? t->vbp + !t->even_vtotal : 0);
313
314 std::string flags;
315 unsigned num_flags = 0;
316 unsigned vic = 0;
317 unsigned hdmi_vic = 0;
318 const char *std = "0";
319
320 if (t->interlaced && !t->even_vtotal)
321 or_str(flags, "V4L2_DV_FL_HALF_LINE", num_flags);
322 if (!memcmp(type, "VIC", 3)) {
323 or_str(flags, "V4L2_DV_FL_HAS_CEA861_VIC", num_flags);
324 or_str(flags, "V4L2_DV_FL_IS_CE_VIDEO", num_flags);
325 vic = strtoul(type + 4, 0, 0);
326 }
327 if (!memcmp(type, "HDMI VIC", 8)) {
328 or_str(flags, "V4L2_DV_FL_HAS_HDMI_VIC", num_flags);
329 or_str(flags, "V4L2_DV_FL_IS_CE_VIDEO", num_flags);
330 hdmi_vic = strtoul(type + 9, 0, 0);
331 vic = hdmi_vic_to_vic(hdmi_vic);
332 if (vic)
333 or_str(flags, "V4L2_DV_FL_HAS_CEA861_VIC", num_flags);
334 }
335 if (vic && (fmod(refresh, 6)) == 0.0)
336 or_str(flags, "V4L2_DV_FL_CAN_REDUCE_FPS", num_flags);
337 if (t->rb)
338 or_str(flags, "V4L2_DV_FL_REDUCED_BLANKING", num_flags);
339 if (t->hratio && t->vratio)
340 or_str(flags, "V4L2_DV_FL_HAS_PICTURE_ASPECT", num_flags);
341
342 if (!memcmp(type, "VIC", 3) || !memcmp(type, "HDMI VIC", 8))
343 std = "V4L2_DV_BT_STD_CEA861";
344 else if (!memcmp(type, "DMT", 3))
345 std = "V4L2_DV_BT_STD_DMT";
346 else if (!memcmp(type, "CVT", 3))
347 std = "V4L2_DV_BT_STD_CVT";
348 else if (!memcmp(type, "GTF", 3))
349 std = "V4L2_DV_BT_STD_GTF";
350 printf("\t\t\t%s, \\\n", std);
351 printf("\t\t\t%s, \\\n", flags.empty() ? "0" : flags.c_str());
352 printf("\t\t\t{ %u, %u }, %u, %u) \\\n",
353 t->hratio, t->vratio, vic, hdmi_vic);
354 printf("\t}\n");
355 }
356
357 static void print_detailed_timing(unsigned indent, const struct timings *t)
358 {
359 printf("%*sHfront %4d Hsync %3u Hback %3d Hpol %s",
360 indent, "",
361 t->hfp, t->hsync, t->hbp, t->pos_pol_hsync ? "P" : "N");
362 if (t->hborder)
363 printf(" Hborder %u", t->hborder);
364 printf("\n");
365
366 printf("%*sVfront %4u Vsync %3u Vback %3d",
367 indent, "", t->vfp, t->vsync, t->vbp);
368 if (!t->no_pol_vsync)
369 printf(" Vpol %s", t->pos_pol_vsync ? "P" : "N");
370 if (t->vborder)
371 printf(" Vborder %u", t->vborder);
372 if (t->even_vtotal) {
373 printf(" Both Fields");
374 } else if (t->interlaced) {
375 printf(" Vfront +0.5 Odd Field\n");
376 printf("%*sVfront %4d Vsync %3u Vback %3d",
377 indent, "", t->vfp, t->vsync, t->vbp);
378 if (!t->no_pol_vsync)
379 printf(" Vpol %s", t->pos_pol_vsync ? "P" : "N");
380 if (t->vborder)
381 printf(" Vborder %u", t->vborder);
382 printf(" Vback +0.5 Even Field");
383 }
384 printf("\n");
385 }
386
387 bool edid_state::print_timings(const char *prefix, const struct timings *t,
388 const char *type, const char *flags,
389 bool detailed)
167390 {
168391 if (!t) {
169392 // Should not happen
170 fail("Unknown short timings\n");
171 return;
172 }
173
174 unsigned htotal = t->hact + t->hfp + t->hsync + t->hbp;
175 double hor_freq_khz = (double)t->pixclk_khz / htotal;
176
177 double vtotal = t->vact + t->vfp + t->vsync + t->vbp;
393 fail("Unknown video timings.\n");
394 return false;
395 }
396
397 if (detailed && options[OptShortTimings])
398 detailed = false;
399 if (options[OptLongTimings])
400 detailed = true;
401
402 unsigned vact = t->vact;
403 unsigned hbl = t->hfp + t->hsync + t->hbp;
404 unsigned vbl = t->vfp + t->vsync + t->vbp;
405 unsigned htotal = t->hact + hbl;
406 double hor_freq_khz = htotal ? (double)t->pixclk_khz / htotal : 0;
407
408 if (t->interlaced)
409 vact /= 2;
410
411 if (t->ycbcr420)
412 hor_freq_khz /= 2;
413
414 double vtotal = vact + vbl;
415
416 bool ok = true;
417
418 if (!t->hact || !hbl || !t->hfp || !t->hsync ||
419 !vact || !vbl || (!t->vfp && !t->interlaced && !t->even_vtotal) || !t->vsync) {
420 fail("0 values in the video timing:\n"
421 " Horizontal Active/Blanking %u/%u\n"
422 " Horizontal Frontporch/Sync Width %u/%u\n"
423 " Vertical Active/Blanking %u/%u\n"
424 " Vertical Frontporch/Sync Width %u/%u\n",
425 t->hact, hbl, t->hfp, t->hsync, vact, vbl, t->vfp, t->vsync);
426 ok = false;
427 }
428
178429 if (t->even_vtotal)
179 vtotal = t->vact / 2.0 + t->vfp + t->vsync + t->vbp;
430 vtotal = vact + t->vfp + t->vsync + t->vbp;
180431 else if (t->interlaced)
181 vtotal = t->vact / 2.0 + t->vfp + t->vsync + t->vbp + 0.5;
432 vtotal = vact + t->vfp + t->vsync + t->vbp + 0.5;
433
182434 double refresh = (double)t->pixclk_khz * 1000.0 / (htotal * vtotal);
183435
184 min_vert_freq_hz = min(min_vert_freq_hz, refresh);
185 max_vert_freq_hz = max(max_vert_freq_hz, refresh);
186 min_hor_freq_hz = min(min_hor_freq_hz, hor_freq_khz * 1000);
187 max_hor_freq_hz = max(max_hor_freq_hz, hor_freq_khz * 1000);
188 max_pixclk_khz = max(max_pixclk_khz, t->pixclk_khz);
189
190 std::string s(suffix);
436 std::string s;
191437 if (t->rb) {
192 if (s.empty())
193 s = "RB";
194 else
195 s += ", RB";
438 s = "RB";
196439 if (t->rb == 2)
197440 s += "v2";
198 }
441 else if (t->rb == 3)
442 s += "v3";
443 }
444 add_str(s, flags);
445 if (t->hsize_mm || t->vsize_mm)
446 add_str(s, std::to_string(t->hsize_mm) + " mm x " + std::to_string(t->vsize_mm) + " mm");
199447 if (!s.empty())
200448 s = " (" + s + ")";
449 unsigned pixclk_khz = t->pixclk_khz / (t->ycbcr420 ? 2 : 1);
201450
202451 char buf[10];
452
203453 sprintf(buf, "%u%s", t->vact, t->interlaced ? "i" : "");
204 printf("%s%5ux%-5s %7.3f Hz %3u:%-3u %7.3f kHz %7.3f MHz%s\n",
205 prefix,
454 printf("%s%s: %5ux%-5s %7.3f Hz %3u:%-3u %7.3f kHz %7.3f MHz%s\n",
455 prefix, type,
206456 t->hact, buf,
207457 refresh,
208458 t->hratio, t->vratio,
209459 hor_freq_khz,
210 t->pixclk_khz / 1000.0,
460 pixclk_khz / 1000.0,
211461 s.c_str());
212 }
213
214 bool edid_state::print_detailed_timings(const char *prefix, const struct timings &t, const char *flags)
215 {
216 unsigned vact = t.vact;
217 unsigned hbl = t.hfp + t.hsync + t.hbp;
218 unsigned vbl = t.vfp + t.vsync + t.vbp;
219
220 if (t.interlaced)
221 vact /= 2;
222
223 double vtotal = vact + vbl;
224
225 bool ok = true;
226
227 if (!t.hact || !hbl || !t.hfp || !t.hsync || !vact || !vbl || !t.vfp || !t.vsync) {
228 fail("0 values in the detailed timings:\n"
229 " Horizontal Active/Blanking %u/%u\n"
230 " Horizontal Frontporch/Sync Width %u/%u\n"
231 " Vertical Active/Blanking %u/%u\n"
232 " Vertical Frontporch/Sync Width %u/%u\n",
233 t.hact, hbl, t.hfp, t.hsync, vact, vbl, t.vfp, t.vsync);
234 ok = false;
235 }
236
237 if (t.even_vtotal)
238 vtotal = vact + t.vfp + t.vsync + t.vbp;
239 else if (t.interlaced)
240 vtotal = vact + t.vfp + t.vsync + t.vbp + 0.5;
241
242 double refresh = (double)t.pixclk_khz * 1000.0 / ((t.hact + hbl) * vtotal);
243
244 printf("%sDetailed mode: Clock %.3f MHz", prefix, t.pixclk_khz / 1000.0);
245 if (flags && *flags)
246 printf(", %s", flags);
247 if (t.hsize_mm || t.vsize_mm)
248 printf(", %u mm x %u mm", t.hsize_mm, t.vsize_mm);
249 printf("\n");
250 printf("%s %4u %4u %4u %4u (%3u %3u %3d)%s\n"
251 "%s %4u %4u %4u %4u (%3u %3u %3d)%s\n"
252 "%s %chsync%s\n"
253 "%s VertFreq: %.3f%s Hz, HorFreq: %.3f kHz\n",
254 prefix,
255 t.hact, t.hact + t.hfp, t.hact + t.hfp + t.hsync, t.hact + hbl, t.hfp, t.hsync, t.hbp,
256 t.hborder ? (std::string(" hborder ") + std::to_string(t.hborder)).c_str() : "",
257 prefix,
258 vact, vact + t.vfp, vact + t.vfp + t.vsync, vact + vbl, t.vfp, t.vsync, t.vbp,
259 t.vborder ? (std::string(" vborder ") + std::to_string(t.vborder)).c_str() : "",
260 prefix,
261 t.pos_pol_hsync ? '+' : '-', t.no_pol_vsync ? "" : (t.pos_pol_vsync ? " +vsync" : " -vsync"),
262 prefix,
263 refresh, t.interlaced ? "i" : "",
264 t.hact + hbl ? (double)t.pixclk_khz / (t.hact + hbl) : 0.0);
265
266 if (t.hbp <= 0)
267 fail("0 or negative horizontal back porch\n");
268 if (t.vbp <= 0)
269 fail("0 or negative vertical back porch\n");
270 if ((!max_display_width_mm && t.hsize_mm) ||
271 (!max_display_height_mm && t.vsize_mm)) {
272 fail("Mismatch of image size vs display size: image size is set, but not display size\n");
273 } else if (!t.hsize_mm && !t.vsize_mm) {
462
463 unsigned len = strlen(prefix) + 2;
464
465 if (!t->ycbcr420 && detailed && options[OptXModeLineTimings])
466 print_modeline(len, t, refresh);
467 else if (!t->ycbcr420 && detailed && options[OptFBModeTimings])
468 print_fbmode(len, t, refresh, hor_freq_khz);
469 else if (!t->ycbcr420 && detailed && options[OptV4L2Timings])
470 print_v4l2_timing(t, refresh, type);
471 else if (detailed)
472 print_detailed_timing(len + strlen(type) + 6, t);
473
474 if (t->ycbcr420 && t->pixclk_khz < 590000)
475 warn_once("Some YCbCr 4:2:0 timings are invalid for HDMI (which requires an RGB timings pixel rate >= 590 MHz).\n");
476 if (t->hfp <= 0)
477 fail("0 or negative horizontal front porch.\n");
478 if (t->hbp <= 0)
479 fail("0 or negative horizontal back porch.\n");
480 if (t->vbp <= 0)
481 fail("0 or negative vertical back porch.\n");
482 if ((!base.max_display_width_mm && t->hsize_mm) ||
483 (!base.max_display_height_mm && t->vsize_mm)) {
484 fail("Mismatch of image size vs display size: image size is set, but not display size.\n");
485 } else if (!t->hsize_mm && !t->vsize_mm) {
274486 /* this is valid */
275 } else if (t.hsize_mm > max_display_width_mm + 9 ||
276 t.vsize_mm > max_display_height_mm + 9) {
277 fail("Mismatch of image size %ux%u mm vs display size %ux%u mm\n",
278 t.hsize_mm, t.vsize_mm, max_display_width_mm, max_display_height_mm);
279 } else if (t.hsize_mm < max_display_width_mm - 9 &&
280 t.vsize_mm < max_display_height_mm - 9) {
281 fail("Mismatch of image size %ux%u mm vs display size %ux%u mm\n",
282 t.hsize_mm, t.vsize_mm, max_display_width_mm, max_display_height_mm);
487 } else if (t->hsize_mm > base.max_display_width_mm + 9 ||
488 t->vsize_mm > base.max_display_height_mm + 9) {
489 fail("Mismatch of image size %ux%u mm vs display size %ux%u mm.\n",
490 t->hsize_mm, t->vsize_mm, base.max_display_width_mm, base.max_display_height_mm);
491 } else if (t->hsize_mm < base.max_display_width_mm - 9 &&
492 t->vsize_mm < base.max_display_height_mm - 9) {
493 fail("Mismatch of image size %ux%u mm vs display size %ux%u mm.\n",
494 t->hsize_mm, t->vsize_mm, base.max_display_width_mm, base.max_display_height_mm);
283495 }
284496 if (refresh) {
285497 min_vert_freq_hz = min(min_vert_freq_hz, refresh);
286498 max_vert_freq_hz = max(max_vert_freq_hz, refresh);
287499 }
288 if (t.pixclk_khz && (t.hact + hbl)) {
289 min_hor_freq_hz = min(min_hor_freq_hz, (t.pixclk_khz * 1000) / (t.hact + hbl));
290 max_hor_freq_hz = max(max_hor_freq_hz, (t.pixclk_khz * 1000) / (t.hact + hbl));
291 max_pixclk_khz = max(max_pixclk_khz, t.pixclk_khz);
500 if (pixclk_khz && (t->hact + hbl)) {
501 min_hor_freq_hz = min(min_hor_freq_hz, (pixclk_khz * 1000) / (t->hact + hbl));
502 max_hor_freq_hz = max(max_hor_freq_hz, (pixclk_khz * 1000) / (t->hact + hbl));
503 max_pixclk_khz = max(max_pixclk_khz, pixclk_khz);
292504 }
293505 return ok;
294506 }
298510 char buf[10];
299511
300512 sprintf(buf, "0x%02hhx", x);
513 return buf;
514 }
515
516 const char *oui_name(unsigned oui, bool reverse)
517 {
518 if (reverse)
519 oui = (oui >> 16) | (oui & 0xff00) | ((oui & 0xff) << 16);
520
521 switch (oui) {
522 case 0x00001a: return "AMD";
523 case 0x000c03: return "HDMI";
524 case 0x00044b: return "NVIDIA";
525 case 0x000c6e: return "ASUS";
526 case 0x0010fa: return "Apple";
527 case 0x0014b9: return "MSTAR";
528 case 0x00d046: return "Dolby";
529 case 0x00e047: return "InFocus";
530 case 0x3a0292: return "VESA";
531 case 0x90848b: return "HDR10+";
532 case 0xc45dd8: return "HDMI Forum";
533 case 0xca125c: return "Microsoft";
534 default: return NULL;
535 }
536 }
537
538 std::string ouitohex(unsigned oui)
539 {
540 char buf[32];
541
542 sprintf(buf, "%02X-%02X-%02X", (oui >> 16) & 0xff, (oui >> 8) & 0xff, oui & 0xff);
301543 return buf;
302544 }
303545
318560 return;
319561
320562 for (i = 0; i < length; i += step) {
563 unsigned len = min(step, length - i);
564
321565 printf("%s", prefix);
322 for (j = 0; j < step; j++)
323 if (i + j < length)
324 printf("%02x ", x[i + j]);
325 else if (length > step)
566 for (j = 0; j < len; j++)
567 printf("%s%02x", j ? " " : "", x[i + j]);
568
569 if (show_ascii) {
570 for (j = len; j < step; j++)
326571 printf(" ");
327 if (show_ascii) {
328 printf(" ");
329 for (j = 0; j < step && i + j < length; j++)
572 printf(" '");
573 for (j = 0; j < len; j++)
330574 printf("%c", x[i + j] >= ' ' && x[i + j] <= '~' ? x[i + j] : '.');
575 printf("'");
331576 }
332577 printf("\n");
333578 }
334579 }
335580
336 static bool edid_add_byte(const char *s)
581 static bool edid_add_byte(const char *s, bool two_digits = true)
337582 {
338583 char buf[3];
339584
340585 if (state.edid_size == sizeof(edid))
341586 return false;
342587 buf[0] = s[0];
343 buf[1] = s[1];
588 buf[1] = two_digits ? s[1] : 0;
344589 buf[2] = 0;
345590 edid[state.edid_size++] = strtoul(buf, NULL, 16);
346591 return true;
359604 return false;
360605 start = strstr(start, "<BLOCK");
361606 } while (start);
362 return state.edid_size && !(state.edid_size % EDID_PAGE_SIZE);
607 return state.edid_size;
363608 }
364609
365610 static const char *ignore_chars = ",:;";
366611
367 static bool extract_edid_hex(const char *s)
612 static bool extract_edid_hex(const char *s, bool require_two_digits = true)
368613 {
369614 for (; *s; s++) {
370615 if (isspace(*s) || strchr(ignore_chars, *s))
375620 continue;
376621 }
377622
378 /* Read a %02x from the log */
379 if (!isxdigit(s[0]) || !isxdigit(s[1])) {
623 /* Read one or two hex digits from the log */
624 if (!isxdigit(s[0])) {
380625 if (state.edid_size && state.edid_size % 128 == 0)
381626 break;
382627 return false;
383628 }
384 if (!edid_add_byte(s))
629 if (require_two_digits && !isxdigit(s[1])) {
630 odd_hex_digits = true;
385631 return false;
386 s++;
387 }
388 return state.edid_size && !(state.edid_size % EDID_PAGE_SIZE);
632 }
633 if (!edid_add_byte(s, isxdigit(s[1])))
634 return false;
635 if (isxdigit(s[1]))
636 s++;
637 }
638 return state.edid_size;
389639 }
390640
391641 static bool extract_edid_xrandr(const char *start)
431681 return false;
432682 }
433683 }
434 return state.edid_size && !(state.edid_size % EDID_PAGE_SIZE);
684 return state.edid_size;
435685 }
436686
437687 static bool extract_edid_xorg(const char *start)
465715 start++;
466716 }
467717 }
468 return state.edid_size && !(state.edid_size % EDID_PAGE_SIZE);
469 }
470
471 static bool extract_edid(int fd)
718 return state.edid_size;
719 }
720
721 static bool extract_edid(int fd, FILE *error)
472722 {
473723 std::vector<char> edid_data;
474724 char buf[EDID_PAGE_SIZE];
499749 /* Look for C-array */
500750 start = strstr(data, "unsigned char edid[] = {");
501751 if (start)
502 return extract_edid_hex(strchr(start, '{') + 1);
752 return extract_edid_hex(strchr(start, '{') + 1, false);
503753
504754 /* Look for QuantumData EDID output */
505755 start = strstr(data, "<BLOCK");
530780 return extract_edid_hex(data);
531781
532782 /* Assume binary */
533 if (edid_data.size() % EDID_PAGE_SIZE || edid_data.size() > sizeof(edid))
783 if (edid_data.size() > sizeof(edid)) {
784 fprintf(error, "Binary EDID length %zu is greater than %zu.\n",
785 edid_data.size(), sizeof(edid));
534786 return false;
787 }
535788 memcpy(edid, data, edid_data.size());
536789 state.edid_size = edid_data.size();
537790 return true;
538 }
539
540 static void print_subsection(const char *name, const unsigned char *edid,
541 unsigned start, unsigned end)
542 {
543 unsigned i;
544
545 printf("%s:", name);
546 for (i = strlen(name); i < 15; i++)
547 printf(" ");
548 for (i = start; i <= end; i++)
549 printf(" %02x", edid[i]);
550 printf("\n");
551 }
552
553 static void dump_breakdown(const unsigned char *edid)
554 {
555 printf("Extracted contents:\n");
556 print_subsection("header", edid, 0, 7);
557 print_subsection("serial number", edid, 8, 17);
558 print_subsection("version", edid,18, 19);
559 print_subsection("basic params", edid, 20, 24);
560 print_subsection("chroma info", edid, 25, 34);
561 print_subsection("established", edid, 35, 37);
562 print_subsection("standard", edid, 38, 53);
563 print_subsection("descriptor 1", edid, 54, 71);
564 print_subsection("descriptor 2", edid, 72, 89);
565 print_subsection("descriptor 3", edid, 90, 107);
566 print_subsection("descriptor 4", edid, 108, 125);
567 print_subsection("extensions", edid, 126, 126);
568 print_subsection("checksum", edid, 127, 127);
569 printf("\n");
570791 }
571792
572793 static unsigned char crc_calc(const unsigned char *b)
601822 fprintf(f, "\n");
602823 }
603824 if (!crc_ok(buf))
604 fprintf(f, "Block %u has a checksum error (should be 0x%02x)\n",
825 fprintf(f, "Block %u has a checksum error (should be 0x%02x).\n",
605826 b, crc_calc(buf));
606827 }
607828 }
624845 fprintf(f, "\n");
625846 }
626847 if (!crc_ok(buf))
627 fprintf(f, "\t/* Block %u has a checksum error (should be 0x%02x) */\n",
848 fprintf(f, "\t/* Block %u has a checksum error (should be 0x%02x). */\n",
628849 b, crc_calc(buf));
629850 }
630851 fprintf(f, "};\n");
631852 }
632853
633 static void write_edid(FILE *f, const unsigned char *edid, unsigned size,
634 enum output_format out_fmt)
635 {
854 // This format can be read by the QuantumData EDID editor
855 static void xmldumpedid(FILE *f, const unsigned char *edid, unsigned size)
856 {
857 fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
858 fprintf(f, "<DATAOBJ>\n");
859 fprintf(f, " <HEADER TYPE=\"DID\" VERSION=\"1.0\"/>\n");
860 fprintf(f, " <DATA>\n");
861 for (unsigned b = 0; b < size / 128; b++) {
862 const unsigned char *buf = edid + 128 * b;
863
864 fprintf(f, " <BLOCK%u>", b);
865 for (unsigned i = 0; i < 128; i++)
866 fprintf(f, "%02X", buf[i]);
867 fprintf(f, "</BLOCK%u>\n", b);
868 }
869 fprintf(f, " </DATA>\n");
870 fprintf(f, "</DATAOBJ>\n");
871 }
872
873
874 static int edid_to_file(const char *to_file, enum output_format out_fmt)
875 {
876 FILE *out;
877
878 if (!strcmp(to_file, "-")) {
879 to_file = "stdout";
880 out = stdout;
881 } else if ((out = fopen(to_file, "w")) == NULL) {
882 perror(to_file);
883 return -1;
884 }
885 if (out_fmt == OUT_FMT_DEFAULT)
886 out_fmt = out == stdout ? OUT_FMT_HEX : OUT_FMT_RAW;
887
636888 switch (out_fmt) {
637889 default:
638890 case OUT_FMT_HEX:
639 hexdumpedid(f, edid, size);
891 hexdumpedid(out, edid, state.edid_size);
640892 break;
641893 case OUT_FMT_RAW:
642 fwrite(edid, size, 1, f);
894 fwrite(edid, state.edid_size, 1, out);
643895 break;
644896 case OUT_FMT_CARRAY:
645 carraydumpedid(f, edid, size);
646 break;
647 }
648 }
649
650 static int edid_from_file(const char *from_file, const char *to_file,
651 enum output_format out_fmt)
652 {
653 FILE *out = NULL;
897 carraydumpedid(out, edid, state.edid_size);
898 break;
899 case OUT_FMT_XML:
900 xmldumpedid(out, edid, state.edid_size);
901 break;
902 }
903
904 if (out != stdout)
905 fclose(out);
906 return 0;
907 }
908
909 static int edid_from_file(const char *from_file, FILE *error)
910 {
911 #ifdef O_BINARY
912 // Windows compatibility
913 int flags = O_RDONLY | O_BINARY;
914 #else
915 int flags = O_RDONLY;
916 #endif
654917 int fd;
655918
656 if (!from_file || !strcmp(from_file, "-")) {
919 if (!strcmp(from_file, "-")) {
657920 from_file = "stdin";
658921 fd = 0;
659 } else if ((fd = open(from_file, O_RDONLY)) == -1) {
922 } else if ((fd = open(from_file, flags)) == -1) {
660923 perror(from_file);
661924 return -1;
662925 }
663 if (to_file) {
664 if (!strcmp(to_file, "-")) {
665 to_file = "stdout";
666 out = stdout;
667 } else if ((out = fopen(to_file, "w")) == NULL) {
668 perror(to_file);
669 return -1;
670 }
671 if (out_fmt == OUT_FMT_DEFAULT)
672 out_fmt = out == stdout ? OUT_FMT_HEX : OUT_FMT_RAW;
673 }
674
675 if (!extract_edid(fd)) {
676 fprintf(stderr, "EDID extract of '%s' failed\n", from_file);
926
927 odd_hex_digits = false;
928 if (!extract_edid(fd, error)) {
929 fprintf(error, "EDID extract of '%s' failed: ", from_file);
930 if (odd_hex_digits)
931 fprintf(error, "odd number of hexadecimal digits.\n");
932 else
933 fprintf(error, "unknown format.\n");
934 return -1;
935 }
936 if (state.edid_size % EDID_PAGE_SIZE) {
937 fprintf(error, "EDID length %u is not a multiple of %u.\n",
938 state.edid_size, EDID_PAGE_SIZE);
677939 return -1;
678940 }
679941 state.num_blocks = state.edid_size / EDID_PAGE_SIZE;
681943 close(fd);
682944
683945 if (memcmp(edid, "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00", 8)) {
684 fprintf(stderr, "No EDID header found in '%s'\n", from_file);
946 fprintf(error, "No EDID header found in '%s'.\n", from_file);
685947 return -1;
686948 }
687
688 if (out) {
689 write_edid(out, edid, state.edid_size, out_fmt);
690 if (out != stdout)
691 fclose(out);
692 return 0;
693 }
694
695949 return 0;
696950 }
697951
702956 char buf[10];
703957
704958 switch (block) {
705 case 0x00: return "Base Block";
959 case 0x00: return "Base EDID";
706960 case 0x02: return "CTA-861 Extension Block";
707 case 0x10: return "VTB Extension Block";
961 case 0x10: return "Video Timing Extension Block";
962 case 0x20: return "EDID 2.0 Extension Block";
708963 case 0x40: return "Display Information Extension Block";
709964 case 0x50: return "Localized String Extension Block";
965 case 0x60: return "Microdisplay Interface Extension Block";
710966 case 0x70: return "DisplayID Extension Block";
711967 case 0xf0: return "Block Map Extension Block";
712968 case 0xff: return "Manufacturer-Specific Extension Block";
718974
719975 void edid_state::parse_block_map(const unsigned char *x)
720976 {
721 static bool saw_block_1;
722977 unsigned last_valid_block_tag = 0;
723978 bool fail_once = false;
724979 unsigned offset = 1;
725980 unsigned i;
726981
727 printf("%s\n", block.c_str());
728982 if (block_nr == 1)
729 saw_block_1 = true;
730 else if (!saw_block_1)
731 fail("No EDID Block Map Extension found in block 1\n");
983 block_map.saw_block_1 = true;
984 else if (!block_map.saw_block_1)
985 fail("No EDID Block Map Extension found in block 1.\n");
986 else if (block_nr == 128)
987 block_map.saw_block_128 = true;
732988
733989 if (block_nr > 1)
734990 offset = 128;
739995 if (x[i]) {
740996 last_valid_block_tag++;
741997 if (i != last_valid_block_tag && !fail_once) {
742 fail("Valid block tags are not consecutive\n");
998 fail("Valid block tags are not consecutive.\n");
743999 fail_once = true;
7441000 }
745 printf(" Block %3u: %s\n", block, block_name(block).c_str());
746 if (block >= num_blocks && !fail_once) {
747 fail("Invalid block number %u\n", block);
1001 printf(" Block %3u: %s\n", block, block_name(x[i]).c_str());
1002 if (block >= num_blocks) {
1003 if (!fail_once)
1004 fail("Invalid block number %u.\n", block);
7481005 fail_once = true;
1006 } else if (x[i] != edid[block * EDID_PAGE_SIZE]) {
1007 fail("Block %u tag mismatch: expected 0x%02x, but got 0x%02x.\n",
1008 block, edid[block * EDID_PAGE_SIZE], x[i]);
7491009 }
1010 } else if (block < num_blocks) {
1011 fail("Block %u tag mismatch: expected 0x%02x, but got 0x00.\n",
1012 block, edid[block * EDID_PAGE_SIZE]);
7501013 }
7511014 }
7521015 }
7551018 {
7561019 switch (x[0]) {
7571020 case 0x02:
1021 has_cta = true;
7581022 preparse_cta_block(x);
7591023 break;
7601024 case 0x70:
1025 has_dispid = true;
7611026 preparse_displayid_block(x);
7621027 break;
7631028 }
7691034 data_block.clear();
7701035
7711036 printf("\n");
1037 if (block_nr && x[0] == 0)
1038 block = "Unknown EDID Extension Block 0x00";
1039 printf("Block %u, %s:\n", block_nr, block.c_str());
7721040
7731041 switch (x[0]) {
7741042 case 0x02:
7781046 parse_vtb_ext_block(x);
7791047 break;
7801048 case 0x20:
781 printf("%s\n", block.c_str());
782 fail("Deprecated extension block, do not use\n");
1049 fail("Deprecated extension block for EDID 2.0, do not use.\n");
7831050 break;
7841051 case 0x40:
7851052 parse_di_ext_block(x);
7931060 case 0xf0:
7941061 parse_block_map(x);
7951062 if (block_nr != 1 && block_nr != 128)
796 fail("Must be used in block 1 and 128\n");
1063 fail("Must be used in block 1 and 128.\n");
7971064 break;
7981065 default:
799 printf("%s\n", block.c_str());
8001066 hex_block(" ", x, EDID_PAGE_SIZE);
801 fail("Unknown Extension Block\n");
1067 fail("Unknown Extension Block.\n");
8021068 break;
8031069 }
8041070
8081074
8091075 int edid_state::parse_edid()
8101076 {
1077 hide_serial_numbers = options[OptHideSerialNumbers];
1078
1079 for (unsigned i = 1; i < num_blocks; i++)
1080 preparse_extension(edid + i * EDID_PAGE_SIZE);
1081
1082 if (options[OptPhysicalAddress]) {
1083 printf("%x.%x.%x.%x\n",
1084 (cta.preparsed_phys_addr >> 12) & 0xf,
1085 (cta.preparsed_phys_addr >> 8) & 0xf,
1086 (cta.preparsed_phys_addr >> 4) & 0xf,
1087 cta.preparsed_phys_addr & 0xf);
1088 return 0;
1089 }
1090
8111091 if (!options[OptSkipHexDump]) {
8121092 printf("edid-decode (hex):\n\n");
8131093 for (unsigned i = 0; i < num_blocks; i++) {
8171097 printf("----------------\n\n");
8181098 }
8191099
820 if (options[OptExtract])
821 dump_breakdown(edid);
822
8231100 block = block_name(0x00);
1101 printf("Block %u, %s:\n", block_nr, block.c_str());
8241102 parse_base_block(edid);
825
826 for (unsigned i = 1; i < num_blocks; i++)
827 preparse_extension(edid + i * EDID_PAGE_SIZE);
8281103
8291104 for (unsigned i = 1; i < num_blocks; i++) {
8301105 block_nr++;
8341109
8351110 block = "";
8361111 block_nr = EDID_MAX_BLOCKS;
837 if (uses_gtf && !supports_gtf)
838 fail("GTF timings are used, but the EDID does not signal GTF support\n");
839 if (uses_cvt && !supports_cvt)
840 fail("CVT timings are used, but the EDID does not signal CVT support\n");
841 if (has_display_range_descriptor &&
842 (min_vert_freq_hz < min_display_vert_freq_hz ||
843 max_vert_freq_hz > max_display_vert_freq_hz ||
844 min_hor_freq_hz / 1000 < min_display_hor_freq_hz / 1000 ||
845 max_hor_freq_hz / 1000 > max_display_hor_freq_hz / 1000 ||
846 max_pixclk_khz > max_display_pixclk_khz)) {
847 /*
848 * EDID 1.4 states (in an Errata) that explicitly defined
849 * timings supersede the monitor range definition.
850 */
851 char buf[512];
852 snprintf(buf, sizeof(buf),
853 "One or more of the timings is out of range of the Monitor Ranges:\n"
854 " Vertical Freq: %u - %u Hz (Monitor: %u - %u Hz)\n"
855 " Horizontal Freq: %.3f - %.3f kHz (Monitor: %.3f - %.3f kHz)\n"
856 " Maximum Clock: %.3f MHz (Monitor: %.3f MHz)\n",
857 min_vert_freq_hz, max_vert_freq_hz,
858 min_display_vert_freq_hz, max_display_vert_freq_hz,
859 min_hor_freq_hz / 1000.0, max_hor_freq_hz / 1000.0,
860 min_display_hor_freq_hz / 1000.0, max_display_hor_freq_hz / 1000.0,
861 max_pixclk_khz / 1000.0, max_display_pixclk_khz / 1000.0);
862
863 if (edid_minor < 4) {
864 fail("%s", buf);
865 } else {
866 warn("%s", buf);
867 }
1112
1113 if (has_cta)
1114 cta_resolve_svrs();
1115
1116 if (options[OptPreferredTimings] && base.preferred_timing.is_valid()) {
1117 printf("\n----------------\n");
1118 printf("\nPreferred Video Timing if only Block 0 is parsed:\n");
1119 print_timings(" ", base.preferred_timing, true);
1120 }
1121
1122 if (options[OptNativeTimings] &&
1123 base.preferred_timing.is_valid() && base.preferred_is_also_native) {
1124 printf("\n----------------\n");
1125 printf("\nNative Video Timing if only Block 0 is parsed:\n");
1126 print_timings(" ", base.preferred_timing, true);
1127 }
1128
1129 if (options[OptPreferredTimings] && !cta.preferred_timings.empty()) {
1130 printf("\n----------------\n");
1131 printf("\nPreferred Video Timing%s if Block 0 and CTA-861 Blocks are parsed:\n",
1132 cta.preferred_timings.size() > 1 ? "s" : "");
1133 for (vec_timings_ext::iterator iter = cta.preferred_timings.begin();
1134 iter != cta.preferred_timings.end(); ++iter)
1135 print_timings(" ", *iter, true);
1136 }
1137
1138 if (options[OptNativeTimings] && !cta.native_timings.empty()) {
1139 printf("\n----------------\n");
1140 printf("\nNative Video Timing%s if Block 0 and CTA-861 Blocks are parsed:\n",
1141 cta.native_timings.size() > 1 ? "s" : "");
1142 for (vec_timings_ext::iterator iter = cta.native_timings.begin();
1143 iter != cta.native_timings.end(); ++iter)
1144 print_timings(" ", *iter, true);
1145 }
1146
1147 if (options[OptPreferredTimings] && !dispid.preferred_timings.empty()) {
1148 printf("\n----------------\n");
1149 printf("\nPreferred Video Timing%s if Block 0 and DisplayID Blocks are parsed:\n",
1150 dispid.preferred_timings.size() > 1 ? "s" : "");
1151 for (vec_timings_ext::iterator iter = dispid.preferred_timings.begin();
1152 iter != dispid.preferred_timings.end(); ++iter)
1153 print_timings(" ", *iter, true);
8681154 }
8691155
8701156 if (!options[OptCheck] && !options[OptCheckInline])
8711157 return 0;
8721158
1159 check_base_block();
1160 if (has_cta)
1161 check_cta_blocks();
1162 if (has_dispid)
1163 check_displayid_blocks();
1164
8731165 printf("\n----------------\n");
8741166
875 if (!options[OptSkipSHA]) {
876 #ifdef SHA
877 #define STR(x) #x
878 #define STRING(x) STR(x)
879 printf("\nedid-decode SHA: %s\n", STRING(SHA));
880 #else
881 printf("\nedid-decode SHA: not available\n");
882 #endif
1167 if (!options[OptSkipSHA] && strlen(STRING(SHA))) {
1168 printf("\nedid-decode SHA: %s %s\n", STRING(SHA), STRING(DATE));
8831169 }
8841170
8851171 if (options[OptCheck]) {
9281214 out_fmt = OUT_FMT_RAW;
9291215 } else if (!strcmp(optarg, "carray")) {
9301216 out_fmt = OUT_FMT_CARRAY;
1217 } else if (!strcmp(optarg, "xml")) {
1218 out_fmt = OUT_FMT_XML;
9311219 } else {
9321220 usage();
9331221 exit(1);
9341222 }
9351223 break;
9361224 case ':':
937 fprintf(stderr, "Option '%s' requires a value\n",
1225 fprintf(stderr, "Option '%s' requires a value.\n",
9381226 argv[optind]);
9391227 usage();
9401228 return -1;
9411229 case '?':
942 fprintf(stderr, "Unknown argument '%s'\n",
1230 fprintf(stderr, "Unknown argument '%s'.\n",
9431231 argv[optind]);
9441232 usage();
9451233 return -1;
9461234 }
9471235 }
1236 if (optind == argc && options[OptVersion]) {
1237 if (strlen(STRING(SHA)))
1238 printf("edid-decode SHA: %s %s\n", STRING(SHA), STRING(DATE));
1239 else
1240 printf("edid-decode SHA: not available\n");
1241 return 0;
1242 }
1243
9481244 if (optind == argc)
949 ret = edid_from_file(NULL, NULL, out_fmt);
950 else if (optind == argc - 1)
951 ret = edid_from_file(argv[optind], NULL, out_fmt);
1245 ret = edid_from_file("-", stdout);
9521246 else
953 return edid_from_file(argv[optind], argv[optind + 1], out_fmt);
1247 ret = edid_from_file(argv[optind], argv[optind + 1] ? stderr : stdout);
1248
1249 if (ret && options[OptPhysicalAddress]) {
1250 printf("f.f.f.f\n");
1251 return 0;
1252 }
1253 if (optind < argc - 1)
1254 return ret ? ret : edid_to_file(argv[optind + 1], out_fmt);
1255
9541256 return ret ? ret : state.parse_edid();
9551257 }
1258
1259 #ifdef __EMSCRIPTEN__
1260 /*
1261 * The surrounding JavaScript implementation will call this function
1262 * each time it wants to decode an EDID. So this should reset all the
1263 * state and start over.
1264 */
1265 extern "C" int parse_edid(const char *input)
1266 {
1267 for (unsigned i = 0; i < EDID_MAX_BLOCKS + 1; i++) {
1268 s_msgs[i][0].clear();
1269 s_msgs[i][1].clear();
1270 }
1271 options[OptCheck] = 1;
1272 options[OptPreferredTimings] = 1;
1273 options[OptNativeTimings] = 1;
1274 state = edid_state();
1275 int ret = edid_from_file(input, stderr);
1276 return ret ? ret : state.parse_edid();
1277 }
1278 #endif
00 // SPDX-License-Identifier: MIT
11 /*
22 * Copyright 2006-2012 Red Hat, Inc.
3 * Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
44 *
55 * Author: Adam Jackson <ajax@nwnk.net>
66 * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl>
1111
1212 #include <string>
1313 #include <vector>
14 #include <string.h>
1415
1516 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
1617 #define min(a, b) ((a) < (b) ? (a) : (b))
1819
1920 #define EDID_PAGE_SIZE 128U
2021 #define EDID_MAX_BLOCKS 256U
22
23 #define RB_FLAG (1U << 7)
2124
2225 // Video Timings
2326 // If interlaced is true, then the vertical blanking
3033 unsigned hact, vact;
3134 unsigned hratio, vratio;
3235 unsigned pixclk_khz;
33 unsigned rb; // 1 if CVT with reduced blanking, 2 if CVT with reduced blanking v2
36 // 0: no reduced blanking
37 // 1: reduced blanking version 1
38 // 2: reduced blanking version 2
39 // 3: reduced blanking version 3 with a horizontal blank of 80
40 // 3 | RB_FLAG: reduced blanking version 3 with a horizontal blank of 160
41 unsigned rb;
3442 bool interlaced;
43 // The horizontal frontporch may be negative in GTF calculations,
44 // so use int instead of unsigned for hfp. Example: 292x176@76.
45 int hfp;
46 unsigned hsync;
3547 // The backporch may be negative in buggy detailed timings.
3648 // So use int instead of unsigned for hbp and vbp.
37 unsigned hfp, hsync;
3849 int hbp;
3950 bool pos_pol_hsync;
51 // For interlaced formats the vertical front porch of the Even Field
52 // is actually a half-line longer.
4053 unsigned vfp, vsync;
54 // For interlaced formats the vertical back porch of the Odd Field
55 // is actually a half-line longer.
4156 int vbp;
4257 bool pos_pol_vsync;
4358 unsigned hborder, vborder;
4459 bool even_vtotal; // special for VIC 39
4560 bool no_pol_vsync; // digital composite signals have no vsync polarity
4661 unsigned hsize_mm, vsize_mm;
62 bool ycbcr420; // YCbCr 4:2:0 encoding
4763 };
64
65 struct timings_ext {
66 timings_ext()
67 {
68 memset(&t, 0, sizeof(t));
69 }
70 timings_ext(unsigned svr, const std::string &_type)
71 {
72 memset(&t, 0, sizeof(t));
73 t.hact = svr;
74 type = _type;
75 }
76 timings_ext(const timings &_t, const std::string &_type, const std::string &_flags)
77 {
78 t = _t;
79 type = _type;
80 flags = _flags;
81 }
82
83 bool is_valid() const { return t.hact; }
84 bool has_svr() const { return t.hact && !t.vact; }
85 unsigned svr() const { return t.hact; }
86 timings t;
87 std::string type;
88 std::string flags;
89 };
90
91 typedef std::vector<timings_ext> vec_timings_ext;
4892
4993 struct edid_state {
5094 edid_state()
5195 {
96 // Global state
97 edid_size = num_blocks = block_nr = 0;
98 max_hor_freq_hz = max_vert_freq_hz = max_pixclk_khz = 0;
5299 min_hor_freq_hz = 0xffffff;
53100 min_vert_freq_hz = 0xffffffff;
101 warnings = failures = 0;
102 has_cta = has_dispid = false;
103 hide_serial_numbers = false;
104
105 // Base block state
106 base.edid_minor = 0;
107 base.has_name_descriptor = base.has_display_range_descriptor =
108 base.has_serial_number = base.has_serial_string =
109 base.supports_continuous_freq = base.supports_gtf =
110 base.supports_cvt = base.uses_gtf = base.uses_cvt =
111 base.has_640x480p60_est_timing = base.has_spwg =
112 base.seen_non_detailed_descriptor =
113 base.preferred_is_also_native = false;
114 base.detailed_block_cnt = base.dtd_cnt = 0;
115
116 base.min_display_hor_freq_hz = base.max_display_hor_freq_hz =
117 base.min_display_vert_freq_hz = base.max_display_vert_freq_hz =
118 base.max_display_pixclk_khz = base.max_display_width_mm =
119 base.max_display_height_mm = 0;
120
121 // CTA-861 block state
122 cta.has_vic_1 = cta.first_svd_might_be_preferred =
123 cta.has_hdmi = cta.has_vcdb = cta.has_vfpdb = false;
124 cta.last_block_was_hdmi_vsdb = cta.have_hf_vsdb = cta.have_hf_scdb = false;
125 cta.first_block = cta.first_svd = true;
126 cta.supported_hdmi_vic_codes = cta.supported_hdmi_vic_vsb_codes = 0;
127 memset(cta.vics, 0, sizeof(cta.vics));
128 memset(cta.preparsed_has_vic, 0, sizeof(cta.preparsed_has_vic));
129 cta.preparsed_phys_addr = 0xffff;
130 cta.preparse_total_dtds = 0;
131 cta.preparse_total_vtdbs = 0;
132 cta.preparse_has_t8vtdb = false;
133
134 // DisplayID block state
135 dispid.version = 0;
136 dispid.preparse_color_ids = dispid.preparse_xfer_ids = 0;
137 dispid.preparse_displayid_blocks = 0;
138 dispid.is_base_block = true;
139 dispid.is_display = dispid.has_product_identification =
140 dispid.has_display_parameters = dispid.has_type_1_7 =
141 dispid.has_display_interface_features = false;
142
143 // Block Map block state
144 block_map.saw_block_1 = false;
145 block_map.saw_block_128 = false;
54146 }
55
56 // Base block state
57 unsigned edid_minor;
58 bool has_name_descriptor;
59 bool has_display_range_descriptor;
60 bool has_serial_number;
61 bool has_serial_string;
62 bool supports_continuous_freq;
63 bool supports_gtf;
64 bool supports_cvt;
65 bool uses_gtf;
66 bool uses_cvt;
67 bool has_spwg;
68 int timing_descr_cnt;
69
70 unsigned min_display_hor_freq_hz;
71 unsigned max_display_hor_freq_hz;
72 unsigned min_display_vert_freq_hz;
73 unsigned max_display_vert_freq_hz;
74 unsigned max_display_pixclk_khz;
75 unsigned max_display_width_mm;
76 unsigned max_display_height_mm;
77
78 // CTA-861 block state
79 bool has_640x480p60_est_timing;
80 bool has_cta861_vic_1;
81 unsigned supported_hdmi_vic_codes;
82 unsigned supported_hdmi_vic_vsb_codes;
83 bool preparsed_has_vic[2][256];
84 std::vector<unsigned char> preparsed_svds[2];
85
86 // DisplayID block state
87 unsigned short preparse_color_ids;
88 unsigned short preparse_xfer_ids;
89147
90148 // Global state
91149 unsigned edid_size;
93151 unsigned block_nr;
94152 std::string block;
95153 std::string data_block;
154 bool has_cta;
155 bool has_dispid;
156 bool hide_serial_numbers;
96157
97158 unsigned min_hor_freq_hz;
98159 unsigned max_hor_freq_hz;
99 unsigned min_vert_freq_hz;
100 unsigned max_vert_freq_hz;
160 double min_vert_freq_hz;
161 double max_vert_freq_hz;
101162 unsigned max_pixclk_khz;
102163
103164 unsigned warnings;
104165 unsigned failures;
105166
106 void print_timings(const char *prefix, const struct timings *t,
107 const char *suffix);
108 bool print_detailed_timings(const char *prefix, const struct timings &t, const char *flags);
167 // Base block state
168 struct {
169 unsigned edid_minor;
170 bool has_name_descriptor;
171 bool has_display_range_descriptor;
172 bool has_serial_number;
173 bool has_serial_string;
174 bool supports_continuous_freq;
175 bool supports_gtf;
176 bool supports_cvt;
177 bool uses_gtf;
178 bool uses_cvt;
179 bool has_spwg;
180 unsigned detailed_block_cnt;
181 unsigned dtd_cnt;
182 bool seen_non_detailed_descriptor;
183 bool has_640x480p60_est_timing;
184 bool preferred_is_also_native;
185 timings_ext preferred_timing;
186
187 unsigned min_display_hor_freq_hz;
188 unsigned max_display_hor_freq_hz;
189 unsigned min_display_vert_freq_hz;
190 unsigned max_display_vert_freq_hz;
191 unsigned max_display_pixclk_khz;
192 unsigned max_display_width_mm;
193 unsigned max_display_height_mm;
194 } base;
195
196 // CTA-861 block state
197 struct {
198 unsigned preparse_total_dtds;
199 vec_timings_ext vec_dtds;
200 unsigned preparse_total_vtdbs;
201 vec_timings_ext vec_vtdbs;
202 vec_timings_ext preferred_timings;
203 bool preparse_has_t8vtdb;
204 timings_ext t8vtdb;
205 vec_timings_ext native_timings;
206 bool has_vic_1;
207 bool first_svd_might_be_preferred;
208 unsigned char byte3;
209 bool has_hdmi;
210 bool has_vcdb;
211 bool has_vfpdb;
212 unsigned short preparsed_phys_addr;
213 bool last_block_was_hdmi_vsdb;
214 bool have_hf_vsdb, have_hf_scdb;
215 bool first_block;
216 bool first_svd;
217 unsigned supported_hdmi_vic_codes;
218 unsigned supported_hdmi_vic_vsb_codes;
219 unsigned short vics[256][2];
220 bool preparsed_has_vic[2][256];
221 std::vector<unsigned char> preparsed_svds[2];
222 } cta;
223
224 // DisplayID block state
225 struct {
226 unsigned char version;
227 unsigned short preparse_color_ids;
228 unsigned short preparse_xfer_ids;
229 unsigned preparse_displayid_blocks;
230 bool is_base_block;
231 bool is_display;
232 bool has_product_identification;
233 bool has_display_parameters;
234 bool has_type_1_7;
235 bool has_display_interface_features;
236 vec_timings_ext preferred_timings;
237 } dispid;
238
239 // Block Map block state
240 struct {
241 bool saw_block_1;
242 bool saw_block_128;
243 } block_map;
244
245 std::string dtd_type(unsigned dtd);
246 std::string dtd_type() { return dtd_type(base.dtd_cnt); }
247 bool print_timings(const char *prefix, const struct timings *t,
248 const char *type, const char *flags = "",
249 bool detailed = false);
250 bool print_timings(const char *prefix, const struct timings_ext &t,
251 bool detailed = false)
252 {
253 return print_timings(prefix, &t.t, t.type.c_str(), t.flags.c_str(), detailed);
254 };
255 bool match_timings(const timings &t1, const timings &t2);
109256 void edid_gtf_mode(unsigned refresh, struct timings &t);
110257 void edid_cvt_mode(unsigned refresh, struct timings &t);
258 timings calc_cvt_mode(unsigned refresh, unsigned hact, unsigned vact, unsigned rb);
111259 void detailed_cvt_descriptor(const char *prefix, const unsigned char *x, bool first);
112260 void print_standard_timing(const char *prefix, unsigned char b1, unsigned char b2,
113261 bool gtf_only = false, unsigned vrefresh_offset = 60);
114262 void detailed_display_range_limits(const unsigned char *x);
115263 void detailed_epi(const unsigned char *x);
116 void detailed_timings(const char *prefix, const unsigned char *x);
264 void detailed_timings(const char *prefix, const unsigned char *x,
265 bool base_or_cta = true);
117266 void detailed_block(const unsigned char *x);
118267 void parse_base_block(const unsigned char *x);
119
120 void print_vic_index(const char *prefix, unsigned idx, const char *suffix);
121 void cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420);
268 void check_base_block();
269
270 void print_vic_index(const char *prefix, unsigned idx, const char *suffix, bool ycbcr420 = false);
271 void cta_vcdb(const unsigned char *x, unsigned length);
272 void cta_svd(const unsigned char *x, unsigned n, bool for_ycbcr420);
122273 void cta_y420cmdb(const unsigned char *x, unsigned length);
123274 void cta_vfpdb(const unsigned char *x, unsigned length);
124275 void cta_hdmi_block(const unsigned char *x, unsigned length);
276 void cta_displayid_type_7(const unsigned char *x, unsigned length);
277 void cta_displayid_type_8(const unsigned char *x, unsigned length);
278 void cta_displayid_type_10(const unsigned char *x, unsigned length);
279 void cta_ext_block(const unsigned char *x, unsigned length);
125280 void cta_block(const unsigned char *x);
126281 void preparse_cta_block(const unsigned char *x);
127282 void parse_cta_block(const unsigned char *x);
283 void cta_resolve_svr(vec_timings_ext::iterator iter);
284 void cta_resolve_svrs();
285 void check_cta_blocks();
128286
129287 void parse_digital_interface(const unsigned char *x);
130288 void parse_display_device(const unsigned char *x);
132290 void parse_display_xfer(const unsigned char *x);
133291 void parse_di_ext_block(const unsigned char *x);
134292
293 void check_displayid_datablock_revision(unsigned char hdr,
294 unsigned char valid_flags = 0,
295 unsigned char rev = 0);
296 void parse_displayid_product_id(const unsigned char *x);
297 std::string product_type(unsigned char x, bool heading);
298 void parse_displayid_interface_features(const unsigned char *x);
299 void parse_displayid_parameters(const unsigned char *x);
300 void parse_displayid_parameters_v2(const unsigned char *x);
301 void parse_displayid_display_intf(const unsigned char *x);
135302 void parse_displayid_color_characteristics(const unsigned char *x);
136303 void parse_displayid_transfer_characteristics(const unsigned char *x);
137304 void parse_displayid_stereo_display_intf(const unsigned char *x);
138 void parse_displayid_type_1_7_timing(const unsigned char *x, bool type7);
305 void parse_displayid_type_1_7_timing(const unsigned char *x,
306 bool type7, unsigned block_rev, bool is_cta = false);
139307 void parse_displayid_type_2_timing(const unsigned char *x);
140308 void parse_displayid_type_3_timing(const unsigned char *x);
141 void parse_displayid_type_4_8_timing(unsigned char type, unsigned short id);
309 void parse_displayid_type_4_8_timing(unsigned char type, unsigned short id, bool is_cta = false);
310 void parse_displayid_video_timing_range_limits(const unsigned char *x);
311 void parse_displayid_string(const unsigned char *x);
312 void parse_displayid_display_device(const unsigned char *x);
313 void parse_displayid_intf_power_sequencing(const unsigned char *x);
142314 void parse_displayid_type_5_timing(const unsigned char *x);
315 void parse_displayid_tiled_display_topology(const unsigned char *x, bool is_v2);
143316 void parse_displayid_type_6_timing(const unsigned char *x);
144317 void parse_displayid_type_9_timing(const unsigned char *x);
318 void parse_displayid_dynamic_video_timings_range_limits(const unsigned char *x);
319 void parse_displayid_ContainerID(const unsigned char *x);
320 void parse_displayid_type_10_timing(const unsigned char *x, bool is_cta = false);
145321 void preparse_displayid_block(const unsigned char *x);
146322 void parse_displayid_block(const unsigned char *x);
323 void parse_displayid_vesa(const unsigned char *x);
324 void parse_displayid_cta_data_block(const unsigned char *x);
325 void check_displayid_blocks();
147326
148327 void parse_vtb_ext_block(const unsigned char *x);
149328
329 void parse_string_table(const unsigned char *x);
150330 void parse_ls_ext_block(const unsigned char *x);
151331
152332 void parse_block_map(const unsigned char *x);
156336 int parse_edid();
157337 };
158338
339 static inline void add_str(std::string &s, const std::string &add)
340 {
341 if (s.empty())
342 s = add;
343 else if (!add.empty())
344 s = s + ", " + add;
345 }
346
159347 void msg(bool is_warn, const char *fmt, ...);
160348
349 #ifdef _WIN32
350
351 #define warn(fmt, ...) msg(true, fmt, __VA_ARGS__)
352 #define warn_once(fmt, ...) \
353 do { \
354 static bool shown_warn; \
355 if (!shown_warn) { \
356 shown_warn = true; \
357 msg(true, fmt, __VA_ARGS__); \
358 } \
359 } while (0)
360 #define fail(fmt, ...) msg(false, fmt, __VA_ARGS__)
361
362 #else
363
161364 #define warn(fmt, args...) msg(true, fmt, ##args)
365 #define warn_once(fmt, args...) \
366 do { \
367 static bool shown_warn; \
368 if (!shown_warn) { \
369 shown_warn = true; \
370 msg(true, fmt, ##args); \
371 } \
372 } while (0)
162373 #define fail(fmt, args...) msg(false, fmt, ##args)
374
375 #endif
163376
164377 void do_checksum(const char *prefix, const unsigned char *x, size_t len);
165378 std::string utohex(unsigned char x);
379 std::string ouitohex(unsigned oui);
166380 bool memchk(const unsigned char *x, unsigned len, unsigned char v = 0);
167381 void hex_block(const char *prefix, const unsigned char *x, unsigned length,
168382 bool show_ascii = true, unsigned step = 16);
169383 std::string block_name(unsigned char block);
170 void print_timings(edid_state &state, const char *prefix, const struct timings *t, const char *suffix);
171384 void calc_ratio(struct timings *t);
385 const char *oui_name(unsigned oui, bool reverse = false);
172386
173387 const struct timings *find_dmt_id(unsigned char dmt_id);
174388 const struct timings *find_vic_id(unsigned char vic);
175389 const struct timings *find_hdmi_vic_id(unsigned char hdmi_vic);
390 unsigned char hdmi_vic_to_vic(unsigned char hdmi_vic);
176391 char *extract_string(const unsigned char *x, unsigned len);
177392
178393 #endif
00 // SPDX-License-Identifier: MIT
11 /*
22 * Copyright 2006-2012 Red Hat, Inc.
3 * Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
44 *
55 * Author: Adam Jackson <ajax@nwnk.net>
66 * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl>
88
99 #include <stdio.h>
1010 #include <stdlib.h>
11 #include <string.h>
1211 #include <math.h>
12 #include <time.h>
1313
1414 #include "edid-decode.h"
1515
2323 name[3] = 0;
2424
2525 if (!isupper(name[0]) || !isupper(name[1]) || !isupper(name[2]))
26 fail("Manufacturer name field contains garbage\n");
26 fail("Manufacturer name field contains garbage.\n");
2727
2828 return name;
2929 }
247247 static const struct {
248248 unsigned dmt_id;
249249 struct timings t;
250 const char *std_name;
250 const char *type;
251251 } established_timings12[] = {
252252 /* 0x23 bit 7 - 0 */
253253 { 0x00, { 720, 400, 9, 5, 28320, 0, false,
341341 return NULL;
342342 }
343343
344 static const struct timings *find_std_id(unsigned short std_id)
344 static const struct timings *find_std_id(unsigned short std_id, unsigned char &dmt_id)
345345 {
346346 unsigned i;
347347
348348 for (i = 0; i < ARRAY_SIZE(dmt_timings); i++)
349 if (dmt_timings[i].std_id == std_id)
349 if (dmt_timings[i].std_id == std_id) {
350 dmt_id = dmt_timings[i].dmt_id;
350351 return &dmt_timings[i].t;
352 }
351353 return NULL;
352354 }
353355
515517 * [H FRONT PORCH (PIXELS)] = ([H BLANK (PIXELS)]/2)-[H SYNC (PIXELS)]
516518 */
517519 t.hfp = (h_blank / 2.0) - t.hsync;
518 t.hbp = h_blank - t.hfp - t.hsync;
520 /* 19. Find the number of pixels in the horizontal back porch period:
521 *
522 * [H BACK PORCH (PIXELS)] = [H FRONT PORCH (PIXELS)]+[H SYNC (PIXELS)]
523 */
524 t.hbp = t.hfp + t.hsync;
519525 t.pos_pol_hsync = false;
520526 t.pos_pol_vsync = true;
521527 t.interlaced = false;
522 t.rb = false;
528 t.rb = 0;
523529 }
524530
525531 /*
526532 * Copied from xserver/hw/xfree86/modes/xf86cvt.c
527 *
528 * TODO: add support for reduced blanking v2 and interlacing
529533 */
530534 void edid_state::edid_cvt_mode(unsigned refresh, struct timings &t)
531535 {
568572 VSync = 7;
569573 else /* Custom */
570574 VSync = 10;
571 t.vsync = VSync;
572575
573576 if (!t.rb) { /* simplified GTF calculation */
574577 /* 4) Minimum time of vertical sync + back porch interval (µs)
636639 VSyncStart = VDisplayRnd + CVT_MIN_V_PORCH;
637640 VSyncEnd = VSyncStart + VSync;
638641
639 /* 15/13. Find pixel clock frequency (kHz for xf86) */
642 /* 15/13. Find pixel clock frequency (kHz) */
640643 Clock = ((double)HTotal / HPeriod) * 1000.0;
641644 Clock -= Clock % CVT_CLOCK_STEP;
642645 }
648651 #define CVT_RB_H_SYNC 32.0
649652
650653 /* Fixed number of clocks for horizontal blanking */
651 #define CVT_RB_H_BLANK 160.0
654 #define CVT_RB1_H_BLANK 160.0 // RB1 & RB3 with RB_FLAG set
655 #define CVT_RB2_H_BLANK 80.0 // RB2 & RB3 with RB_FLAG cleared
652656
653657 /* Fixed number of lines for vertical front porch - default 3 */
654 #define CVT_RB_VFPORCH 3
658 #define CVT_RB1_V_FPORCH 3
659 #define CVT_RB2_V_FPORCH 1
660 #define CVT_RB3_V_FIELD_RATE_PPM_ADJ 350.0
661 #define CVT_RB2_CLOCK_STEP 1
655662
656663 int VBILines;
664 double h_blank = (t.rb & ~RB_FLAG) == 1 ? CVT_RB1_H_BLANK : CVT_RB2_H_BLANK;
665 int v_fporch = t.rb == 1 ? CVT_RB1_V_FPORCH : CVT_RB2_V_FPORCH;
666 unsigned clock_step = t.rb == 1 ? CVT_CLOCK_STEP : CVT_RB2_CLOCK_STEP;
667
668 if (t.rb == 3)
669 VFieldRate += VFieldRate * (CVT_RB3_V_FIELD_RATE_PPM_ADJ / 1000000.0);
657670
658671 /* 8. Estimate Horizontal period. */
659672 HPeriod = ((double) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) / VDisplayRnd;
663676 VBILines++;
664677
665678 /* 10. Check if vertical blanking is sufficient */
666 if (VBILines < (CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH))
667 VBILines = CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH;
679 if (VBILines < (v_fporch + VSync + CVT_MIN_V_BPORCH))
680 VBILines = v_fporch + VSync + CVT_MIN_V_BPORCH;
668681
669682 /* 11. Find total number of lines in vertical field */
670683 VTotal = VDisplayRnd + VBILines;
671684
672685 /* 12. Find total number of pixels in a line */
673 HTotal = HDisplay + CVT_RB_H_BLANK;
686 HTotal = HDisplay + h_blank;
674687
675688 /* Fill in HSync values */
676 HSyncEnd = HDisplay + CVT_RB_H_BLANK / 2;
689 HSyncEnd = HDisplay + h_blank / 2;
677690 HSyncStart = HSyncEnd - CVT_RB_H_SYNC;
678691
679692 /* Fill in VSync values */
680 VSyncStart = VDisplay + CVT_RB_VFPORCH;
693 VSyncStart = VDisplay + v_fporch;
681694 VSyncEnd = VSyncStart + VSync;
682695
683 /* 15/13. Find pixel clock frequency (kHz for xf86) */
684 Clock = ((double)VFieldRate * VTotal * HTotal) / 1000.0;
685 Clock -= Clock % CVT_CLOCK_STEP;
696 /* 15/13. Find pixel clock frequency (kHz) */
697 double clk_khz = ((double)VFieldRate * VTotal * HTotal) / 1000.0;
698 if (t.rb < 3)
699 Clock = clock_step * floor(clk_khz / clock_step);
700 else
701 Clock = clock_step * ceil(clk_khz / clock_step);
686702 }
687703 t.pixclk_khz = Clock;
688704
697713 t.interlaced = false;
698714 }
699715
716 timings edid_state::calc_cvt_mode(unsigned refresh, unsigned hact, unsigned vact, unsigned rb)
717 {
718 timings t = {};
719
720 t.hact = hact;
721 t.vact = vact;
722 t.rb = rb;
723 calc_ratio(&t);
724 edid_cvt_mode(refresh, t);
725 return t;
726 }
727
700728 void edid_state::detailed_cvt_descriptor(const char *prefix, const unsigned char *x, bool first)
701729 {
702730 static const unsigned char empty[3] = { 0, 0, 0 };
706734 if (!first && !memcmp(x, empty, 3))
707735 return;
708736
709 uses_cvt = true;
737 base.uses_cvt = true;
710738 cvt_t.vact = x[0];
711739 if (!cvt_t.vact)
712 fail("CVT byte 0 is 0, which is a reserved value\n");
740 fail("CVT byte 0 is 0, which is a reserved value.\n");
713741 cvt_t.vact |= (x[1] & 0xf0) << 4;
714742 cvt_t.vact++;
715743 cvt_t.vact *= 2;
736764 cvt_t.hact = 8 * (((cvt_t.vact * cvt_t.hratio) / cvt_t.vratio) / 8);
737765
738766 if (x[1] & 0x03)
739 fail("Reserved bits of CVT byte 1 are non-zero\n");
767 fail("Reserved bits of CVT byte 1 are non-zero.\n");
740768 if (x[2] & 0x80)
741 fail("Reserved bit of CVT byte 2 is non-zero\n");
769 fail("Reserved bit of CVT byte 2 is non-zero.\n");
742770 if (!(x[2] & 0x1f))
743 fail("CVT byte 2 does not support any vertical rates\n");
771 fail("CVT byte 2 does not support any vertical rates.\n");
744772 preferred = (x[2] & 0x60) >> 5;
745773 if (preferred == 1 && (x[2] & 0x01))
746774 preferred = 4;
747775 if (!(x[2] & (1 << (4 - preferred))))
748 fail("The preferred CVT Vertical Rate is not supported\n");
749
750 static const char *s_pref = "CVT, preferred vertical rate";
776 fail("The preferred CVT Vertical Rate is not supported.\n");
777
778 static const char *s_pref = "preferred vertical rate";
751779
752780 if (x[2] & 0x10) {
753781 edid_cvt_mode(50, cvt_t);
754 print_timings(prefix, &cvt_t, preferred == 0 ? s_pref : "CVT");
782 print_timings(prefix, &cvt_t, "CVT", preferred == 0 ? s_pref : "");
755783 }
756784 if (x[2] & 0x08) {
757785 edid_cvt_mode(60, cvt_t);
758 print_timings(prefix, &cvt_t, preferred == 1 ? s_pref : "CVT");
786 print_timings(prefix, &cvt_t, "CVT", preferred == 1 ? s_pref : "");
759787 }
760788 if (x[2] & 0x04) {
761789 edid_cvt_mode(75, cvt_t);
762 print_timings(prefix, &cvt_t, preferred == 2 ? s_pref : "CVT");
790 print_timings(prefix, &cvt_t, "CVT", preferred == 2 ? s_pref : "");
763791 }
764792 if (x[2] & 0x02) {
765793 edid_cvt_mode(85, cvt_t);
766 print_timings(prefix, &cvt_t, preferred == 3 ? s_pref : "CVT");
794 print_timings(prefix, &cvt_t, "CVT", preferred == 3 ? s_pref : "");
767795 }
768796 if (x[2] & 0x01) {
769 cvt_t.rb = true;
797 cvt_t.rb = 1;
770798 edid_cvt_mode(60, cvt_t);
771 print_timings(prefix, &cvt_t, preferred == 4 ? s_pref : "CVT");
799 print_timings(prefix, &cvt_t, "CVT", preferred == 4 ? s_pref : "");
772800 }
773801 }
774802
788816 if (x[i] == 0x0a) {
789817 seen_newline = 1;
790818 if (!i)
791 fail("Empty string\n");
819 fail("Empty string.\n");
792820 else if (s[i - 1] == 0x20)
793 fail("One or more trailing spaces\n");
821 fail("One or more trailing spaces.\n");
794822 } else if (x[i] == 0x20) {
795823 s[i] = x[i];
796824 } else {
797 fail("Non-printable character\n");
825 fail("Non-printable character.\n");
798826 return s;
799827 }
800828 } else if (x[i] != 0x20) {
801 fail("Non-space after newline\n");
829 fail("Non-space after newline.\n");
802830 return s;
803831 }
804832 }
805833 /* Does the string end with a space? */
806834 if (!seen_newline && s[len - 1] == 0x20)
807 fail("One or more trailing spaces\n");
835 fail("One or more trailing spaces.\n");
808836
809837 return s;
810838 }
816844 struct timings formula = {};
817845 unsigned hratio, vratio;
818846 unsigned hact, vact, refresh;
847 unsigned char dmt_id = 0;
819848
820849 if (b1 <= 0x01) {
821850 if (b1 != 0x01 || b2 != 0x01)
822 fail("Use 0x0101 as the invalid Standard Timings code, not 0x%02x%02x\n", b1, b2);
851 fail("Use 0x0101 as the invalid Standard Timings code, not 0x%02x%02x.\n", b1, b2);
823852 return;
824853 }
825854
826 if (b1 == 0) {
827 fail("Non-conformant standard timing (0 horiz)\n");
828 return;
829 }
830
831 t = find_std_id((b1 << 8) | b2);
855 t = find_std_id((b1 << 8) | b2, dmt_id);
832856 if (t) {
833 print_timings(prefix, t, "DMT");
857 char type[16];
858 sprintf(type, "DMT 0x%02x", dmt_id);
859 print_timings(prefix, t, type);
834860 return;
835861 }
836862 hact = (b1 + 31) * 8;
837863 switch ((b2 >> 6) & 0x3) {
838864 case 0x00:
839 if (gtf_only || edid_minor >= 3) {
865 if (gtf_only || base.edid_minor >= 3) {
840866 hratio = 16;
841867 vratio = 10;
842868 } else {
866892 formula.hratio = hratio;
867893 formula.vratio = vratio;
868894
869 if (!gtf_only && edid_minor >= 4) {
870 uses_cvt = true;
895 if (!gtf_only && base.edid_minor >= 4) {
896 base.uses_cvt = true;
871897 edid_cvt_mode(refresh, formula);
872 print_timings(prefix, &formula, "EDID 1.4 source: CVT");
898 print_timings(prefix, &formula, "CVT ", "EDID 1.4 source");
873899 /*
874900 * A EDID 1.3 source will assume GTF, so both GTF and CVT
875901 * have to be supported.
876902 */
877 uses_gtf = true;
903 base.uses_gtf = true;
878904 edid_gtf_mode(refresh, formula);
879 print_timings(prefix, &formula, "EDID 1.3 source: GTF");
880 } else if (gtf_only || edid_minor >= 2) {
881 uses_gtf = true;
905 print_timings(prefix, &formula, "GTF ", "EDID 1.3 source");
906 } else if (gtf_only || base.edid_minor >= 2) {
907 base.uses_gtf = true;
882908 edid_gtf_mode(refresh, formula);
883 print_timings(prefix, &formula, "GTF");
909 print_timings(prefix, &formula, "GTF ");
884910 } else {
885 printf("%s%5ux%-5u %3u.00 Hz %3u:%-3u\n",
911 printf("%sUnknown : %5ux%-5u %3u.000 Hz %3u:%u\n",
886912 prefix, hact, vact, refresh, hratio, vratio);
887913 min_vert_freq_hz = min(min_vert_freq_hz, refresh);
888914 max_vert_freq_hz = max(max_vert_freq_hz, refresh);
898924 std::string range_class;
899925
900926 data_block = "Display Range Limits";
901 printf("%s\n", data_block.c_str());
902 has_display_range_descriptor = 1;
903 /*
904 * XXX todo: implement feature flags, vtd blocks
905 * XXX check: ranges are well-formed; block termination if no vtd
906 */
907 if (edid_minor >= 4) {
927 printf(" %s:\n", data_block.c_str());
928 base.has_display_range_descriptor = 1;
929
930 if (base.edid_minor >= 4) {
908931 if (x[4] & 0x02) {
909932 v_max_offset = 255;
910933 if (x[4] & 0x01) {
925948 switch (x[10]) {
926949 case 0x00: /* default gtf */
927950 range_class = "GTF";
928 if (edid_minor >= 4 && !supports_continuous_freq)
929 fail("GTF can't be combined with non-continuous frequencies\n");
930 supports_gtf = true;
951 if (base.edid_minor >= 4 && !base.supports_continuous_freq)
952 fail("GTF can't be combined with non-continuous frequencies.\n");
953 base.supports_gtf = true;
931954 break;
932955 case 0x01: /* range limits only */
933956 range_class = "Bare Limits";
934 if (edid_minor < 4)
935 fail("'%s' is not allowed for EDID < 1.4\n", range_class.c_str());
957 if (base.edid_minor < 4)
958 fail("'%s' is not allowed for EDID < 1.4.\n", range_class.c_str());
936959 break;
937960 case 0x02: /* secondary gtf curve */
938961 range_class = "Secondary GTF";
939 if (edid_minor >= 4 && !supports_continuous_freq)
940 fail("GTF can't be combined with non-continuous frequencies\n");
941 supports_gtf = true;
962 if (base.edid_minor >= 4 && !base.supports_continuous_freq)
963 fail("GTF can't be combined with non-continuous frequencies.\n");
964 base.supports_gtf = true;
942965 has_sec_gtf = true;
943966 break;
944967 case 0x04: /* cvt */
945968 range_class = "CVT";
946969 is_cvt = 1;
947 if (edid_minor < 4)
948 fail("'%s' is not allowed for EDID < 1.4\n", range_class.c_str());
949 else if (!supports_continuous_freq)
950 fail("CVT can't be combined with non-continuous frequencies\n");
951 if (edid_minor >= 4) {
970 if (base.edid_minor < 4)
971 fail("'%s' is not allowed for EDID < 1.4.\n", range_class.c_str());
972 else if (!base.supports_continuous_freq)
973 fail("CVT can't be combined with non-continuous frequencies.\n");
974 if (base.edid_minor >= 4) {
952975 /* GTF is implied if CVT is signaled */
953 supports_gtf = true;
954 supports_cvt = true;
976 base.supports_gtf = true;
977 base.supports_cvt = true;
955978 }
956979 break;
957980 default: /* invalid */
958 fail("Unknown range class (0x%02x)\n", x[10]);
981 fail("Unknown range class (0x%02x).\n", x[10]);
959982 range_class = std::string("Unknown (") + utohex(x[10]) + ")";
960983 break;
961984 }
962985
963986 if (x[5] + v_min_offset > x[6] + v_max_offset)
964 fail("Min vertical rate > max vertical rate\n");
965 min_display_vert_freq_hz = x[5] + v_min_offset;
966 max_display_vert_freq_hz = x[6] + v_max_offset;
987 fail("Min vertical rate > max vertical rate.\n");
988 base.min_display_vert_freq_hz = x[5] + v_min_offset;
989 base.max_display_vert_freq_hz = x[6] + v_max_offset;
967990 if (x[7] + h_min_offset > x[8] + h_max_offset)
968 fail("Min horizontal freq > max horizontal freq\n");
969 min_display_hor_freq_hz = (x[7] + h_min_offset) * 1000;
970 max_display_hor_freq_hz = (x[8] + h_max_offset) * 1000;
971 printf(" Monitor ranges (%s): %d-%d Hz V, %d-%d kHz H",
991 fail("Min horizontal freq > max horizontal freq.\n");
992 base.min_display_hor_freq_hz = (x[7] + h_min_offset) * 1000;
993 base.max_display_hor_freq_hz = (x[8] + h_max_offset) * 1000;
994 printf(" Monitor ranges (%s): %d-%d Hz V, %d-%d kHz H",
972995 range_class.c_str(),
973996 x[5] + v_min_offset, x[6] + v_max_offset,
974997 x[7] + h_min_offset, x[8] + h_max_offset);
998
999 // For EDID 1.3 the horizontal frequency maxes out at 255 kHz.
1000 // So to avoid false range-check warnings due to this limitation,
1001 // just double the max_display_hor_freq_hz in this case.
1002 if (base.edid_minor < 4 && x[8] == 0xff)
1003 base.max_display_hor_freq_hz *= 2;
1004
1005 // For EDID 1.3 the vertical frequency maxes out at 255 Hz.
1006 // So to avoid false range-check warnings due to this limitation,
1007 // just double the max_display_vert_freq_hz in this case.
1008 if (base.edid_minor < 4 && x[6] == 0xff)
1009 base.max_display_vert_freq_hz *= 2;
1010
9751011 if (x[9]) {
976 max_display_pixclk_khz = x[9] * 10000;
1012 base.max_display_pixclk_khz = x[9] * 10000;
9771013 printf(", max dotclock %d MHz\n", x[9] * 10);
9781014 } else {
979 if (edid_minor >= 4)
980 fail("EDID 1.4 block does not set max dotclock\n");
1015 if (base.edid_minor >= 4)
1016 fail("EDID 1.4 block does not set max dotclock.\n");
9811017 printf("\n");
9821018 }
9831019
9841020 if (has_sec_gtf) {
9851021 if (x[11])
986 fail("Byte 11 is 0x%02x instead of 0x00\n", x[11]);
987 printf(" GTF Secondary Curve Block\n");
988 printf(" Start frequency: %u kHz\n", x[12] * 2);
989 printf(" C: %f\n", x[13] / 2.0);
1022 fail("Byte 11 is 0x%02x instead of 0x00.\n", x[11]);
1023 printf(" GTF Secondary Curve Block:\n");
1024 printf(" Start frequency: %u kHz\n", x[12] * 2);
1025 printf(" C: %f\n", x[13] / 2.0);
9901026 if (x[13] > 127)
991 fail("Byte 13 is > 127\n");
992 printf(" M: %u\n", (x[15] << 8) | x[14]);
993 printf(" K: %u\n", x[16]);
994 printf(" J: %f\n", x[17] / 2.0);
1027 fail("Byte 13 is > 127.\n");
1028 printf(" M: %u\n", (x[15] << 8) | x[14]);
1029 printf(" K: %u\n", x[16]);
1030 printf(" J: %f\n", x[17] / 2.0);
9951031 if (x[17] > 127)
996 fail("Byte 17 is > 127\n");
1032 fail("Byte 17 is > 127.\n");
9971033 } else if (is_cvt) {
9981034 int max_h_pixels = 0;
9991035
1000 printf(" CVT version %d.%d\n", (x[11] & 0xf0) >> 4, x[11] & 0x0f);
1036 printf(" CVT version %d.%d\n", (x[11] & 0xf0) >> 4, x[11] & 0x0f);
10011037
10021038 if (x[12] & 0xfc) {
10031039 unsigned raw_offset = (x[12] & 0xfc) >> 2;
10041040
1005 printf(" Real max dotclock: %.2f MHz\n",
1041 printf(" Real max dotclock: %.2f MHz\n",
10061042 (x[9] * 10) - (raw_offset * 0.25));
10071043 if (raw_offset >= 40)
1008 warn("CVT block corrects dotclock by more than 9.75 MHz\n");
1044 warn("CVT block corrects dotclock by more than 9.75 MHz.\n");
10091045 }
10101046
10111047 max_h_pixels = x[12] & 0x03;
10131049 max_h_pixels |= x[13];
10141050 max_h_pixels *= 8;
10151051 if (max_h_pixels)
1016 printf(" Max active pixels per line: %d\n", max_h_pixels);
1017
1018 printf(" Supported aspect ratios: %s %s %s %s %s\n",
1019 x[14] & 0x80 ? "4:3" : "",
1020 x[14] & 0x40 ? "16:9" : "",
1021 x[14] & 0x20 ? "16:10" : "",
1022 x[14] & 0x10 ? "5:4" : "",
1023 x[14] & 0x08 ? "15:9" : "");
1052 printf(" Max active pixels per line: %d\n", max_h_pixels);
1053
1054 printf(" Supported aspect ratios:%s%s%s%s%s\n",
1055 x[14] & 0x80 ? " 4:3" : "",
1056 x[14] & 0x40 ? " 16:9" : "",
1057 x[14] & 0x20 ? " 16:10" : "",
1058 x[14] & 0x10 ? " 5:4" : "",
1059 x[14] & 0x08 ? " 15:9" : "");
10241060 if (x[14] & 0x07)
1025 fail("Reserved bits of byte 14 are non-zero\n");
1026
1027 printf(" Preferred aspect ratio: ");
1061 fail("Reserved bits of byte 14 are non-zero.\n");
1062
1063 printf(" Preferred aspect ratio: ");
10281064 switch ((x[15] & 0xe0) >> 5) {
10291065 case 0x00:
10301066 printf("4:3");
10431079 break;
10441080 default:
10451081 printf("Unknown (0x%02x)", (x[15] & 0xe0) >> 5);
1046 fail("Invalid preferred aspect ratio 0x%02x\n",
1082 fail("Invalid preferred aspect ratio 0x%02x.\n",
10471083 (x[15] & 0xe0) >> 5);
10481084 break;
10491085 }
10501086 printf("\n");
10511087
10521088 if (x[15] & 0x08)
1053 printf(" Supports CVT standard blanking\n");
1089 printf(" Supports CVT standard blanking\n");
10541090 if (x[15] & 0x10)
1055 printf(" Supports CVT reduced blanking\n");
1091 printf(" Supports CVT reduced blanking\n");
10561092
10571093 if (x[15] & 0x07)
1058 fail("Reserved bits of byte 15 are non-zero\n");
1094 fail("Reserved bits of byte 15 are non-zero.\n");
10591095
10601096 if (x[16] & 0xf0) {
1061 printf(" Supported display scaling:\n");
1097 printf(" Supported display scaling:\n");
10621098 if (x[16] & 0x80)
1063 printf(" Horizontal shrink\n");
1099 printf(" Horizontal shrink\n");
10641100 if (x[16] & 0x40)
1065 printf(" Horizontal stretch\n");
1101 printf(" Horizontal stretch\n");
10661102 if (x[16] & 0x20)
1067 printf(" Vertical shrink\n");
1103 printf(" Vertical shrink\n");
10681104 if (x[16] & 0x10)
1069 printf(" Vertical stretch\n");
1105 printf(" Vertical stretch\n");
10701106 }
10711107
10721108 if (x[16] & 0x0f)
1073 fail("Reserved bits of byte 16 are non-zero\n");
1109 fail("Reserved bits of byte 16 are non-zero.\n");
10741110
10751111 if (x[17])
1076 printf(" Preferred vertical refresh: %d Hz\n", x[17]);
1112 printf(" Preferred vertical refresh: %d Hz\n", x[17]);
10771113 else
1078 warn("CVT block does not set preferred refresh rate\n");
1114 warn("CVT block does not set preferred refresh rate.\n");
10791115 } else {
10801116 if (x[11] != 0x0a)
1081 fail("Byte 11 is 0x%02x instead of 0x0a\n", x[11]);
1117 fail("Byte 11 is 0x%02x instead of 0x0a.\n", x[11]);
10821118 for (unsigned i = 12; i <= 17; i++) {
10831119 if (x[i] != 0x20) {
1084 fail("Byte %u is 0x%02x instead of 0x20\n", i, x[i]);
1120 fail("Bytes 12-17 must be 0x20.\n");
10851121 break;
10861122 }
10871123 }
10911127 void edid_state::detailed_epi(const unsigned char *x)
10921128 {
10931129 data_block = "EPI Descriptor";
1094 printf("%s\n", data_block.c_str());
1130 printf(" %s:\n", data_block.c_str());
10951131
10961132 unsigned v = x[5] & 0x07;
10971133
1098 printf(" Bits per pixel: %u\n", 18 + v * 6);
1134 printf(" Bits per pixel: %u\n", 18 + v * 6);
10991135 if (v > 2)
1100 fail("Invalid bits per pixel\n");
1136 fail("Invalid bits per pixel.\n");
11011137 v = (x[5] & 0x18) >> 3;
1102 printf(" Pixels per clock: %u\n", 1 << v);
1138 printf(" Pixels per clock: %u\n", 1 << v);
11031139 if (v > 2)
1104 fail("Invalid pixels per clock\n");
1140 fail("Invalid pixels per clock.\n");
11051141 v = (x[5] & 0x60) >> 5;
1106 printf(" Data color mapping: %sconventional\n", v ? "non-" : "");
1142 printf(" Data color mapping: %sconventional\n", v ? "non-" : "");
11071143 if (v > 1)
1108 fail("Unknown data color mapping (0x%02x)\n", v);
1144 fail("Unknown data color mapping (0x%02x).\n", v);
11091145 if (x[5] & 0x80)
1110 fail("Non-zero reserved field in byte 5\n");
1146 fail("Non-zero reserved field in byte 5.\n");
11111147
11121148 v = x[6] & 0x0f;
1113 printf(" Interface type: ");
1149 printf(" Interface type: ");
11141150 switch (v) {
11151151 case 0x00: printf("LVDS TFT\n"); break;
11161152 case 0x01: printf("monoSTN 4/8 Bit\n"); break;
11201156 case 0x05: printf("TMDS\n"); break;
11211157 default:
11221158 printf("Unknown (0x%02x)\n", v);
1123 fail("Invalid interface type 0x%02x\n", v);
1159 fail("Invalid interface type 0x%02x.\n", v);
11241160 break;
11251161 }
1126 printf(" DE polarity: DE %s active\n",
1162 printf(" DE polarity: DE %s active\n",
11271163 (x[6] & 0x10) ? "low" : "high");
1128 printf(" FPSCLK polarity: FPSCLK %sinverted\n",
1164 printf(" FPSCLK polarity: FPSCLK %sinverted\n",
11291165 (x[6] & 0x20) ? "" : "not ");
11301166 if (x[6] & 0xc0)
1131 fail("Non-zero reserved field in byte 6\n");
1132
1133 printf(" Vertical display mode: %s\n",
1167 fail("Non-zero reserved field in byte 6.\n");
1168
1169 printf(" Vertical display mode: %s\n",
11341170 (x[7] & 0x01) ? "Up/Down reverse mode" : "normal");
1135 printf(" Horizontal display mode: %s\n",
1171 printf(" Horizontal display mode: %s\n",
11361172 (x[7] & 0x02) ? "Left/Right reverse mode" : "normal");
11371173 if (x[7] & 0xfc)
1138 fail("Non-zero reserved field in byte 7\n");
1174 fail("Non-zero reserved field in byte 7.\n");
11391175
11401176 v = x[8] & 0x0f;
1141 printf(" Total power on sequencing delay: ");
1177 printf(" Total power on sequencing delay: ");
11421178 if (v)
11431179 printf("%u ms\n", v * 10);
11441180 else
11451181 printf("VGA controller default\n");
11461182 v = (x[8] & 0xf0) >> 4;
1147 printf(" Total power off sequencing delay: ");
1183 printf(" Total power off sequencing delay: ");
11481184 if (v)
11491185 printf("%u ms\n", v * 10);
11501186 else
11511187 printf("VGA controller default\n");
11521188
11531189 v = x[9] & 0x0f;
1154 printf(" Contrast power on sequencing delay: ");
1190 printf(" Contrast power on sequencing delay: ");
11551191 if (v)
11561192 printf("%u ms\n", v * 10);
11571193 else
11581194 printf("VGA controller default\n");
11591195 v = (x[9] & 0xf0) >> 4;
1160 printf(" Contrast power off sequencing delay: ");
1196 printf(" Contrast power off sequencing delay: ");
11611197 if (v)
11621198 printf("%u ms\n", v * 10);
11631199 else
11661202 v = x[10] & 0x2f;
11671203 const char *s = (x[10] & 0x80) ? "" : " (ignored)";
11681204
1169 printf(" Backlight brightness control: %u steps%s\n", v, s);
1170 printf(" Backlight enable at boot: %s%s\n",
1205 printf(" Backlight brightness control: %u steps%s\n", v, s);
1206 printf(" Backlight enable at boot: %s%s\n",
11711207 (x[10] & 0x40) ? "off" : "on", s);
1172 printf(" Backlight control enable: %s\n",
1208 printf(" Backlight control enable: %s\n",
11731209 (x[10] & 0x80) ? "enabled" : "disabled");
11741210
11751211 v = x[11] & 0x2f;
11761212 s = (x[11] & 0x80) ? "" : " (ignored)";
11771213
1178 printf(" Contrast voltable control: %u steps%s\n", v, s);
1214 printf(" Contrast voltable control: %u steps%s\n", v, s);
11791215 if (x[11] & 0x40)
1180 fail("Non-zero reserved field in byte 11\n");
1181 printf(" Contrast control enable: %s\n",
1216 fail("Non-zero reserved field in byte 11.\n");
1217 printf(" Contrast control enable: %s\n",
11821218 (x[11] & 0x80) ? "enabled" : "disabled");
11831219
11841220 if (x[12] || x[13] || x[14] || x[15] || x[16])
1185 fail("Non-zero values in reserved bytes 12-16\n");
1186
1187 printf(" EPI Version: %u.%u\n", (x[17] & 0xf0) >> 4, x[17] & 0x0f);
1221 fail("Non-zero values in reserved bytes 12-16.\n");
1222
1223 printf(" EPI Version: %u.%u\n", (x[17] & 0xf0) >> 4, x[17] & 0x0f);
11881224 }
11891225
1190 static void add_str(std::string &s, const std::string &add)
1191 {
1192 if (s.empty())
1193 s = add;
1194 else
1195 s = s + ", " + add;
1196 }
1197
1198 void edid_state::detailed_timings(const char *prefix, const unsigned char *x)
1226 void edid_state::detailed_timings(const char *prefix, const unsigned char *x,
1227 bool base_or_cta)
11991228 {
12001229 struct timings t = {};
12011230 unsigned hbl, vbl;
12021231 std::string s_sync, s_flags;
12031232
1233 // Only count DTDs in base block 0 or CTA-861 extension blocks
1234 if (base_or_cta)
1235 base.dtd_cnt++;
1236 data_block = "Detailed Timing Descriptor #" + std::to_string(base.dtd_cnt);
12041237 t.pixclk_khz = (x[0] + (x[1] << 8)) * 10;
12051238 if (t.pixclk_khz < 10000) {
12061239 printf("%sDetailed mode: ", prefix);
12071240 hex_block("", x, 18, true, 18);
12081241 if (!t.pixclk_khz)
1209 fail("First two bytes are 0, invalid data\n");
1242 fail("First two bytes are 0, invalid data.\n");
12101243 else
1211 fail("Pixelclock < 10 MHz, assuming invalid data 0x%02x 0x%02x\n",
1244 fail("Pixelclock < 10 MHz, assuming invalid data 0x%02x 0x%02x.\n",
12121245 x[0], x[1]);
12131246 return;
12141247 }
12281261
12291262 unsigned char flags = x[17];
12301263
1231 if (has_spwg && timing_descr_cnt == 2)
1264 if (base.has_spwg && base.detailed_block_cnt == 2)
12321265 flags = *(x - 1);
12331266
12341267 switch ((flags & 0x18) >> 3) {
12671300 t.pos_pol_vsync = true;
12681301 s_sync = t.pos_pol_hsync ? "+hsync " : "-hsync ";
12691302 s_sync += t.pos_pol_vsync ? "+vsync " : "-vsync ";
1270 if (has_spwg && (flags & 0x01))
1303 if (base.has_spwg && (flags & 0x01))
12711304 s_flags = "DE timing only";
12721305 break;
12731306 }
12811314 if (t.hact == 1920 && t.vact == 1080 && t.pixclk_khz == 72000 &&
12821315 t.hfp == 32 && t.hsync == 168 && t.hbp == 184 && !t.hborder &&
12831316 t.vfp == 23 && t.vsync == 5 && t.vbp == 57 && !t.vborder &&
1284 !has_spwg && preparsed_has_vic[0][39] && (flags & 0x1e) == 0x1a)
1317 !base.has_spwg && cta.preparsed_has_vic[0][39] && (flags & 0x1e) == 0x1a)
12851318 t.even_vtotal = true;
12861319 }
12871320 switch (flags & 0x61) {
13101343 t.hsize_mm = x[12] + ((x[14] & 0xf0) << 4);
13111344 t.vsize_mm = x[13] + ((x[14] & 0x0f) << 8);
13121345
1313 bool ok = print_detailed_timings(prefix, t, s_flags.c_str());
1314
1315 if ((max_display_width_mm && !t.hsize_mm) ||
1316 (max_display_height_mm && !t.vsize_mm)) {
1317 fail("Mismatch of image size vs display size: image size is not set, but display size is\n");
1318 }
1319 if (has_spwg && timing_descr_cnt == 2)
1320 printf("SPWG Module Revision: %hhu\n", x[17]);
1346 calc_ratio(&t);
1347
1348 std::string s_type = base_or_cta ? dtd_type() : "DTD";
1349 bool ok = print_timings(prefix, &t, s_type.c_str(), s_flags.c_str(), true);
1350 timings_ext te(t, s_type, s_flags);
1351
1352 if (block_nr == 0 && base.dtd_cnt == 1) {
1353 te.type = "DTD 1";
1354 base.preferred_timing = te;
1355 cta.preferred_timings.push_back(te);
1356 cta.native_timings.push_back(te);
1357 }
1358 if (base_or_cta)
1359 cta.vec_dtds.push_back(te);
1360
1361 if ((base.max_display_width_mm && !t.hsize_mm) ||
1362 (base.max_display_height_mm && !t.vsize_mm)) {
1363 fail("Mismatch of image size vs display size: image size is not set, but display size is.\n");
1364 }
1365 if (base.has_spwg && base.detailed_block_cnt == 2)
1366 printf("%sSPWG Module Revision: %hhu\n", prefix, x[17]);
13211367 if (!ok) {
13221368 std::string s = prefix;
13231369
13291375 void edid_state::detailed_block(const unsigned char *x)
13301376 {
13311377 static const unsigned char zero_descr[18] = { 0 };
1332 static int seen_non_detailed_descriptor;
13331378 unsigned cnt;
13341379 unsigned i;
13351380
1336 timing_descr_cnt++;
1381 base.detailed_block_cnt++;
13371382 if (x[0] || x[1]) {
1338 data_block = "Detailed Timings #" + std::to_string(timing_descr_cnt);
1339 detailed_timings("", x);
1340 if (seen_non_detailed_descriptor)
1341 fail("Invalid detailed timing descriptor ordering\n");
1383 detailed_timings(" ", x);
1384 if (base.seen_non_detailed_descriptor)
1385 fail("Invalid detailed timing descriptor ordering.\n");
13421386 return;
13431387 }
13441388
1345 data_block = "Display Descriptor #" + std::to_string(timing_descr_cnt);
1389 data_block = "Display Descriptor #" + std::to_string(base.detailed_block_cnt);
13461390 /* Monitor descriptor block, not detailed timing descriptor. */
13471391 if (x[2] != 0) {
13481392 /* 1.3, 3.10.3 */
1349 fail("Monitor descriptor block has byte 2 nonzero (0x%02x)\n", x[2]);
1350 }
1351 if ((edid_minor < 4 || x[3] != 0xfd) && x[4] != 0x00) {
1393 fail("Monitor descriptor block has byte 2 nonzero (0x%02x).\n", x[2]);
1394 }
1395 if ((base.edid_minor < 4 || x[3] != 0xfd) && x[4] != 0x00) {
13521396 /* 1.3, 3.10.3 */
1353 fail("Monitor descriptor block has byte 4 nonzero (0x%02x)\n", x[4]);
1354 }
1355
1356 seen_non_detailed_descriptor = 1;
1357 if (edid_minor == 0)
1358 fail("Has descriptor blocks other than detailed timings\n");
1397 fail("Monitor descriptor block has byte 4 nonzero (0x%02x).\n", x[4]);
1398 }
1399
1400 base.seen_non_detailed_descriptor = true;
1401 if (base.edid_minor == 0)
1402 fail("Has descriptor blocks other than detailed timings.\n");
13591403
13601404 if (!memcmp(x, zero_descr, sizeof(zero_descr))) {
13611405 data_block = "Empty Descriptor";
1362 printf("%s\n", data_block.c_str());
1363 fail("Use Dummy Descriptor instead of all zeroes\n");
1406 printf(" %s\n", data_block.c_str());
1407 fail("Use Dummy Descriptor instead of all zeroes.\n");
13641408 return;
13651409 }
13661410
13701414 return;
13711415 case 0x10:
13721416 data_block = "Dummy Descriptor";
1373 printf("%s\n", data_block.c_str());
1417 printf(" %s:\n", data_block.c_str());
13741418 for (i = 5; i < 18; i++) {
13751419 if (x[i]) {
1376 fail("Dummy block filled with garbage\n");
1420 fail("Dummy block filled with garbage.\n");
13771421 break;
13781422 }
13791423 }
13801424 return;
13811425 case 0xf7:
13821426 data_block = "Established timings III";
1383 printf("%s\n", data_block.c_str());
1427 printf(" %s:\n", data_block.c_str());
13841428 for (i = 0; i < 44; i++)
1385 if (x[6 + i / 8] & (1 << (7 - i % 8)))
1386 print_timings(" ", find_dmt_id(established_timings3_dmt_ids[i]), "DMT");
1429 if (x[6 + i / 8] & (1 << (7 - i % 8))) {
1430 unsigned char dmt_id = established_timings3_dmt_ids[i];
1431 char type[16];
1432
1433 sprintf(type, "DMT 0x%02x", dmt_id);
1434 print_timings(" ", find_dmt_id(dmt_id), type);
1435 }
13871436 return;
13881437 case 0xf8:
13891438 data_block = "CVT 3 Byte Timing Codes";
1390 printf("%s\n", data_block.c_str());
1439 printf(" %s:\n", data_block.c_str());
13911440 if (x[5] != 0x01) {
1392 fail("Invalid version number %u\n", x[5]);
1441 fail("Invalid version number %u.\n", x[5]);
13931442 return;
13941443 }
13951444 for (i = 0; i < 4; i++)
1396 detailed_cvt_descriptor(" ", x + 6 + (i * 3), !i);
1445 detailed_cvt_descriptor(" ", x + 6 + (i * 3), !i);
13971446 return;
13981447 case 0xf9:
13991448 data_block = "Display Color Management Data";
1400 printf("%s\n", data_block.c_str());
1401 printf(" Version: %d\n", x[5]);
1402 printf(" Red a3: %.2f\n", (short)(x[6] | (x[7] << 8)) / 100.0);
1403 printf(" Red a2: %.2f\n", (short)(x[8] | (x[9] << 8)) / 100.0);
1404 printf(" Green a3: %.2f\n", (short)(x[10] | (x[11] << 8)) / 100.0);
1405 printf(" Green a2: %.2f\n", (short)(x[12] | (x[13] << 8)) / 100.0);
1406 printf(" Blue a3: %.2f\n", (short)(x[14] | (x[15] << 8)) / 100.0);
1407 printf(" Blue a2: %.2f\n", (short)(x[16] | (x[17] << 8)) / 100.0);
1449 printf(" %s:\n", data_block.c_str());
1450 printf(" Version : %d\n", x[5]);
1451 printf(" Red a3 : %.2f\n", (short)(x[6] | (x[7] << 8)) / 100.0);
1452 printf(" Red a2 : %.2f\n", (short)(x[8] | (x[9] << 8)) / 100.0);
1453 printf(" Green a3: %.2f\n", (short)(x[10] | (x[11] << 8)) / 100.0);
1454 printf(" Green a2: %.2f\n", (short)(x[12] | (x[13] << 8)) / 100.0);
1455 printf(" Blue a3 : %.2f\n", (short)(x[14] | (x[15] << 8)) / 100.0);
1456 printf(" Blue a2 : %.2f\n", (short)(x[16] | (x[17] << 8)) / 100.0);
14081457 return;
14091458 case 0xfa:
14101459 data_block = "Standard Timing Identifications";
1411 printf("%s\n", data_block.c_str());
1460 printf(" %s:\n", data_block.c_str());
14121461 for (cnt = i = 0; i < 6; i++) {
14131462 if (x[5 + i * 2] != 0x01 || x[5 + i * 2 + 1] != 0x01)
14141463 cnt++;
1415 print_standard_timing(" ", x[5 + i * 2], x[5 + i * 2 + 1]);
1464 print_standard_timing(" ", x[5 + i * 2], x[5 + i * 2 + 1]);
14161465 }
14171466 if (!cnt)
1418 warn("%s block without any timings\n", data_block.c_str());
1467 warn("%s block without any timings.\n", data_block.c_str());
14191468 return;
14201469 case 0xfb: {
14211470 unsigned w_x, w_y;
14221471 unsigned gamma;
14231472
14241473 data_block = "Color Point Data";
1425 printf("%s\n", data_block.c_str());
1474 printf(" %s:\n", data_block.c_str());
14261475 w_x = (x[7] << 2) | ((x[6] >> 2) & 3);
14271476 w_y = (x[8] << 2) | (x[6] & 3);
14281477 gamma = x[9];
1429 printf(" Index: %u White: 0.%04u, 0.%04u", x[5],
1478 printf(" Index: %u White: 0.%04u, 0.%04u", x[5],
14301479 (w_x * 10000) / 1024, (w_y * 10000) / 1024);
14311480 if (gamma == 0xff)
14321481 printf(" Gamma: is defined in an extension block");
14381487 w_x = (x[12] << 2) | ((x[11] >> 2) & 3);
14391488 w_y = (x[13] << 2) | (x[11] & 3);
14401489 gamma = x[14];
1441 printf(" Index: %u White: 0.%04u, 0.%04u", x[10],
1490 printf(" Index: %u White: 0.%04u, 0.%04u", x[10],
14421491 (w_x * 10000) / 1024, (w_y * 10000) / 1024);
14431492 if (gamma == 0xff)
14441493 printf(" Gamma: is defined in an extension block");
14491498 }
14501499 case 0xfc:
14511500 data_block = "Display Product Name";
1452 has_name_descriptor = 1;
1453 printf("%s: %s\n", data_block.c_str(), extract_string(x + 5, 13));
1501 base.has_name_descriptor = 1;
1502 printf(" %s: '%s'\n", data_block.c_str(), extract_string(x + 5, 13));
14541503 return;
14551504 case 0xfd:
14561505 detailed_display_range_limits(x);
14571506 return;
14581507 case 0xfe:
1459 if (!has_spwg || timing_descr_cnt < 3) {
1508 if (!base.has_spwg || base.detailed_block_cnt < 3) {
14601509 data_block = "Alphanumeric Data String";
1461 printf("%s: %s\n", data_block.c_str(),
1510 printf(" %s: '%s'\n", data_block.c_str(),
14621511 extract_string(x + 5, 13));
14631512 return;
14641513 }
1465 if (timing_descr_cnt == 3) {
1514 if (base.detailed_block_cnt == 3) {
14661515 char buf[6] = { 0 };
14671516
14681517 data_block = "SPWG Descriptor #3";
1518 printf(" %s:\n", data_block.c_str());
14691519 memcpy(buf, x + 5, 5);
14701520 if (strlen(buf) != 5)
1471 fail("Invalid PC Maker P/N length\n");
1472 printf("SPWG PC Maker P/N: %s\n", buf);
1473 printf("SPWG LCD Supplier EEDID Revision: %hhu\n", x[10]);
1474 printf("SPWG Manufacturer P/N: %s\n", extract_string(x + 11, 7));
1521 fail("Invalid PC Maker P/N length.\n");
1522 printf(" SPWG PC Maker P/N: '%s'\n", buf);
1523 printf(" SPWG LCD Supplier EEDID Revision: %hhu\n", x[10]);
1524 printf(" SPWG Manufacturer P/N: '%s'\n", extract_string(x + 11, 7));
14751525 } else {
14761526 data_block = "SPWG Descriptor #4";
1477 printf("SMBUS Values: 0x%02hhx 0x%02hhx 0x%02hhx 0x%02hhx"
1527 printf(" %s:\n", data_block.c_str());
1528 printf(" SMBUS Values: 0x%02hhx 0x%02hhx 0x%02hhx 0x%02hhx"
14781529 " 0x%02hhx 0x%02hhx 0x%02hhx 0x%02hhx\n",
14791530 x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12]);
1480 printf("LVDS Channels: %hhu\n", x[13]);
1481 printf("Panel Self Test %sPresent\n", x[14] ? "" : "Not ");
1531 printf(" LVDS Channels: %hhu\n", x[13]);
1532 printf(" Panel Self Test %sPresent\n", x[14] ? "" : "Not ");
14821533 if (x[15] != 0x0a || x[16] != 0x20 || x[17] != 0x20)
1483 fail("Invalid trailing data\n");
1534 fail("Invalid trailing data.\n");
14841535 }
14851536 return;
1486 case 0xff:
1537 case 0xff: {
14871538 data_block = "Display Product Serial Number";
1488 printf("%s: %s\n", data_block.c_str(),
1489 extract_string(x + 5, 13));
1490 has_serial_string = 1;
1539 char *sn = extract_string(x + 5, 13);
1540 if (hide_serial_numbers)
1541 printf(" %s: ...\n", data_block.c_str());
1542 else
1543 printf(" %s: '%s'\n", data_block.c_str(), sn);
1544 base.has_serial_string = 1;
14911545 return;
1546 }
14921547 default:
1493 printf("%s Display Descriptor (0x%02hhx):",
1548 printf(" %s Display Descriptor (0x%02hhx):",
14941549 x[3] <= 0x0f ? "Manufacturer-Specified" : "Unknown", x[3]);
14951550 hex_block(" ", x + 2, 16);
14961551 if (x[3] > 0x0f)
1497 fail("Unknown Type 0x%02hhx\n", x[3]);
1552 fail("Unknown Type 0x%02hhx.\n", x[3]);
14981553 return;
14991554 }
15001555 }
15051560 struct tm *ptm;
15061561 int analog, i;
15071562 unsigned col_x, col_y;
1508 int has_preferred_timing = 0;
1563 bool has_preferred_timing = false;
15091564
15101565 data_block = "EDID Structure Version & Revision";
1511 printf("EDID version: %hhu.%hhu\n", x[0x12], x[0x13]);
1566 printf(" %s: %hhu.%hhu\n", data_block.c_str(), x[0x12], x[0x13]);
15121567 if (x[0x12] == 1) {
1513 edid_minor = x[0x13];
1514 if (edid_minor > 4)
1515 warn("Unknown EDID minor version %u, assuming 1.4 conformance\n", edid_minor);
1516 if (edid_minor < 3)
1517 warn("EDID 1.%u is deprecated, do not use\n", edid_minor);
1568 base.edid_minor = x[0x13];
1569 if (base.edid_minor > 4)
1570 warn("Unknown EDID minor version %u, assuming 1.4 conformance.\n", base.edid_minor);
1571 if (base.edid_minor < 3)
1572 warn("EDID 1.%u is deprecated, do not use.\n", base.edid_minor);
15181573 } else {
1519 fail("Unknown EDID major version\n");
1574 fail("Unknown EDID major version.\n");
15201575 }
15211576
15221577 data_block = "Vendor & Product Identification";
1523 printf("Manufacturer: %s Model %u Serial Number %u\n",
1578 printf(" %s:\n", data_block.c_str());
1579 printf(" Manufacturer: %s\n Model: %u\n",
15241580 manufacturer_name(x + 0x08),
1525 (unsigned short)(x[0x0a] + (x[0x0b] << 8)),
1526 (unsigned)(x[0x0c] + (x[0x0d] << 8) +
1527 (x[0x0e] << 16) + (x[0x0f] << 24)));
1528 has_serial_number = x[0x0c] || x[0x0d] || x[0x0e] || x[0x0f];
1529 /* XXX need manufacturer ID table */
1581 (unsigned short)(x[0x0a] + (x[0x0b] << 8)));
1582 base.has_serial_number = x[0x0c] || x[0x0d] || x[0x0e] || x[0x0f];
1583 if (base.has_serial_number) {
1584 if (hide_serial_numbers)
1585 printf(" Serial Number: ...\n");
1586 else
1587 printf(" Serial Number: %u\n",
1588 (unsigned)(x[0x0c] + (x[0x0d] << 8) +
1589 (x[0x0e] << 16) + (x[0x0f] << 24)));
1590 }
15301591
15311592 time(&the_time);
15321593 ptm = localtime(&the_time);
15351596 int year = 1990 + x[0x11];
15361597
15371598 if (week) {
1538 if (edid_minor <= 3 && week == 0xff)
1539 fail("EDID 1.3 does not support week 0xff\n");
1599 if (base.edid_minor <= 3 && week == 0xff)
1600 fail("EDID 1.3 does not support week 0xff.\n");
15401601 // The max week is 53 in EDID 1.3 and 54 in EDID 1.4.
15411602 // No idea why there is a difference.
1542 if (edid_minor <= 3 && week == 54)
1543 fail("EDID 1.3 does not support week 54\n");
1603 if (base.edid_minor <= 3 && week == 54)
1604 fail("EDID 1.3 does not support week 54.\n");
15441605 if (week != 0xff && week > 54)
1545 fail("Invalid week %u of manufacture\n", week);
1606 fail("Invalid week %u of manufacture.\n", week);
15461607 if (week != 0xff)
1547 printf("Made in week %hhu of %d\n", week, year);
1608 printf(" Made in: week %hhu of %d\n", week, year);
15481609 }
15491610 if (week == 0xff)
1550 printf("Model year %d\n", year);
1611 printf(" Model year: %d\n", year);
15511612 else if (!week)
1552 printf("Made in year %d\n", year);
1613 printf(" Made in: %d\n", year);
15531614 if (year - 1 > ptm->tm_year + 1900)
1554 fail("The year %d is more than one year in the future\n", year);
1615 fail("The year %d is more than one year in the future.\n", year);
15551616
15561617 /* display section */
15571618
15581619 data_block = "Basic Display Parameters & Features";
1620 printf(" %s:\n", data_block.c_str());
15591621 if (x[0x14] & 0x80) {
15601622 analog = 0;
1561 printf("Digital display\n");
1562 if (edid_minor >= 4) {
1623 printf(" Digital display\n");
1624 if (base.edid_minor >= 4) {
15631625 if ((x[0x14] & 0x70) == 0x00)
1564 printf("Color depth is undefined\n");
1626 printf(" Color depth is undefined\n");
15651627 else if ((x[0x14] & 0x70) == 0x70)
1566 fail("Color Bit Depth set to reserved value\n");
1628 fail("Color Bit Depth set to reserved value.\n");
15671629 else
1568 printf("%u bits per primary color channel\n",
1630 printf(" Bits per primary color channel: %u\n",
15691631 ((x[0x14] & 0x70) >> 3) + 4);
15701632
1633 printf(" ");
15711634 switch (x[0x14] & 0x0f) {
15721635 case 0x00: printf("Digital interface is not defined\n"); break;
15731636 case 0x01: printf("DVI interface\n"); break;
15761639 case 0x04: printf("MDDI interface\n"); break;
15771640 case 0x05: printf("DisplayPort interface\n"); break;
15781641 default:
1579 printf("Unknown (0x%02x) interface\n", x[0x14] & 0x0f);
1580 fail("Digital Video Interface Standard set to reserved value 0x%02x\n", x[0x14] & 0x0f);
1642 printf("Unknown interface: 0x%02x\n", x[0x14] & 0x0f);
1643 fail("Digital Video Interface Standard set to reserved value 0x%02x.\n", x[0x14] & 0x0f);
15811644 break;
15821645 }
1583 } else if (edid_minor >= 2) {
1646 } else if (base.edid_minor >= 2) {
15841647 if (x[0x14] & 0x01) {
1585 printf("DFP 1.x compatible TMDS\n");
1648 printf(" DFP 1.x compatible TMDS\n");
15861649 }
15871650 if (x[0x14] & 0x7e)
1588 fail("Digital Video Interface Standard set to reserved value 0x%02x\n", x[0x14] & 0x7e);
1651 fail("Digital Video Interface Standard set to reserved value 0x%02x.\n", x[0x14] & 0x7e);
15891652 } else if (x[0x14] & 0x7f) {
1590 fail("Digital Video Interface Standard set to reserved value 0x%02x\n", x[0x14] & 0x7f);
1653 fail("Digital Video Interface Standard set to reserved value 0x%02x.\n", x[0x14] & 0x7f);
15911654 }
15921655 } else {
15931656 unsigned voltage = (x[0x14] & 0x60) >> 5;
15941657 unsigned sync = (x[0x14] & 0x0f);
15951658
15961659 analog = 1;
1597 printf("Analog display, Input voltage level: %s V\n",
1660 printf(" Analog display\n");
1661 printf(" Input voltage level: %s V\n",
15981662 voltage == 3 ? "0.7/0.7" :
15991663 voltage == 2 ? "1.0/0.4" :
16001664 voltage == 1 ? "0.714/0.286" :
16011665 "0.7/0.3");
16021666
1603 if (edid_minor >= 4) {
1604 if (x[0x14] & 0x10)
1605 printf("Blank-to-black setup/pedestal\n");
1606 else
1607 printf("Blank level equals black level\n");
1608 } else if (x[0x14] & 0x10) {
1609 /*
1610 * XXX this is just the X text. 1.3 says "if set, display expects
1611 * a blank-to-black setup or pedestal per appropriate Signal
1612 * Level Standard". Whatever _that_ means.
1613 */
1614 printf("Configurable signal levels\n");
1615 }
1616
1617 printf("Sync: %s%s%s%s\n", sync & 0x08 ? "Separate " : "",
1618 sync & 0x04 ? "Composite " : "",
1619 sync & 0x02 ? "SyncOnGreen " : "",
1620 sync & 0x01 ? "Serration " : "");
1667 if (x[0x14] & 0x10)
1668 printf(" Blank-to-black setup/pedestal\n");
1669 else
1670 printf(" Blank level equals black level\n");
1671
1672 if (sync)
1673 printf(" Sync:%s%s%s%s\n",
1674 sync & 0x08 ? " Separate" : "",
1675 sync & 0x04 ? " Composite" : "",
1676 sync & 0x02 ? " SyncOnGreen" : "",
1677 sync & 0x01 ? " Serration" : "");
16211678 }
16221679
16231680 if (x[0x15] && x[0x16]) {
1624 printf("Maximum image size: %u cm x %u cm\n", x[0x15], x[0x16]);
1625 max_display_width_mm = x[0x15] * 10;
1626 max_display_height_mm = x[0x16] * 10;
1627 if ((max_display_height_mm && !max_display_width_mm) ||
1628 (max_display_width_mm && !max_display_height_mm))
1629 fail("Invalid maximum image size (%u cm x %u cm)\n",
1630 max_display_width_mm, max_display_height_mm);
1631 else if (max_display_width_mm < 100 || max_display_height_mm < 100)
1632 warn("Dubious maximum image size (%ux%u is smaller than 10x10 cm)\n",
1633 max_display_width_mm, max_display_height_mm);
1634 }
1635 else if (edid_minor >= 4 && (x[0x15] || x[0x16])) {
1681 printf(" Maximum image size: %u cm x %u cm\n", x[0x15], x[0x16]);
1682 base.max_display_width_mm = x[0x15] * 10;
1683 base.max_display_height_mm = x[0x16] * 10;
1684 if (x[0x15] < 10 || x[0x16] < 10)
1685 warn("Dubious maximum image size (%ux%u is smaller than 10x10 cm).\n",
1686 x[0x15], x[0x16]);
1687 }
1688 else if (base.edid_minor >= 4 && (x[0x15] || x[0x16])) {
16361689 if (x[0x15])
1637 printf("Aspect ratio is %f (landscape)\n", 100.0/(x[0x16] + 99));
1690 printf(" Aspect ratio: %.2f (landscape)\n", (x[0x15] + 99) / 100.0);
16381691 else
1639 printf("Aspect ratio is %f (portrait)\n", 100.0/(x[0x15] + 99));
1692 printf(" Aspect ratio: %.2f (portrait)\n", 100.0 / (x[0x16] + 99));
16401693 } else {
16411694 /* Either or both can be zero for 1.3 and before */
1642 printf("Image size is variable\n");
1643 }
1644
1645 if (x[0x17] == 0xff) {
1646 if (edid_minor >= 4)
1647 printf("Gamma is defined in an extension block\n");
1648 else
1649 /* XXX Technically 1.3 doesn't say this... */
1650 printf("Gamma: 1.0\n");
1651 } else printf("Gamma: %.2f\n", ((x[0x17] + 100.0) / 100.0));
1695 printf(" Image size is variable\n");
1696 }
1697
1698 if (x[0x17] == 0xff)
1699 printf(" Gamma is defined in an extension block\n");
1700 else
1701 printf(" Gamma: %.2f\n", ((x[0x17] + 100.0) / 100.0));
16521702
16531703 if (x[0x18] & 0xe0) {
1654 printf("DPMS levels:");
1704 printf(" DPMS levels:");
16551705 if (x[0x18] & 0x80) printf(" Standby");
16561706 if (x[0x18] & 0x40) printf(" Suspend");
16571707 if (x[0x18] & 0x20) printf(" Off");
16581708 printf("\n");
16591709 }
16601710
1661 if (analog || edid_minor < 4) {
1711 if (analog || base.edid_minor < 4) {
1712 printf(" ");
16621713 switch (x[0x18] & 0x18) {
16631714 case 0x00: printf("Monochrome or grayscale display\n"); break;
16641715 case 0x08: printf("RGB color display\n"); break;
16661717 case 0x18: printf("Undefined display color type\n");
16671718 }
16681719 } else {
1669 printf("Supported color formats: RGB 4:4:4");
1720 printf(" Supported color formats: RGB 4:4:4");
16701721 if (x[0x18] & 0x08)
16711722 printf(", YCrCb 4:4:4");
16721723 if (x[0x18] & 0x10)
16851736 static const unsigned char srgb_chromaticity[10] = {
16861737 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26, 0x0f, 0x50, 0x54
16871738 };
1688 printf("Default (sRGB) color space is primary color space\n");
1739 printf(" Default (sRGB) color space is primary color space\n");
16891740 if (memcmp(x + 0x19, srgb_chromaticity, sizeof(srgb_chromaticity)))
1690 fail("sRGB is signaled, but the chromaticities do not match\n");
1691 }
1692 if (x[0x18] & 0x02) {
1693 if (edid_minor >= 4)
1694 printf("First detailed timing includes the native pixel format and preferred refresh rate\n");
1695 else
1696 printf("First detailed timing is preferred timing\n");
1697 has_preferred_timing = 1;
1698 } else if (edid_minor >= 4) {
1741 fail("sRGB is signaled, but the chromaticities do not match.\n");
1742 }
1743 if (base.edid_minor >= 4) {
16991744 /* 1.4 always has a preferred timing and this bit means something else. */
1700 has_preferred_timing = 1;
1745 has_preferred_timing = true;
1746 base.preferred_is_also_native = x[0x18] & 0x02;
1747 printf(" First detailed timing %s the native pixel format and preferred refresh rate\n",
1748 base.preferred_is_also_native ? "includes" : "does not include");
1749 } else {
1750 if (x[0x18] & 0x02) {
1751 printf(" First detailed timing is the preferred timing\n");
1752 has_preferred_timing = true;
1753 // 1.3 recommends that the preferred timing corresponds to the
1754 // native timing, but it is not a requirement.
1755 // That said, we continue with the assumption that it actually
1756 // is the native timing.
1757 base.preferred_is_also_native = true;
1758 } else if (base.edid_minor == 3) {
1759 fail("EDID 1.3 requires that the first detailed timing is the preferred timing.\n");
1760 }
17011761 }
17021762
17031763 if (x[0x18] & 0x01) {
1704 if (edid_minor >= 4) {
1705 supports_continuous_freq = true;
1706 printf("Display is continuous frequency\n");
1764 if (base.edid_minor >= 4) {
1765 base.supports_continuous_freq = true;
1766 printf(" Display is continuous frequency\n");
17071767 } else {
1708 printf("Supports GTF timings within operating range\n");
1709 supports_gtf = true;
1768 printf(" Supports GTF timings within operating range\n");
1769 base.supports_gtf = true;
17101770 }
17111771 }
17121772
17131773 data_block = "Color Characteristics";
1714 printf("%s\n", data_block.c_str());
1774 printf(" %s:\n", data_block.c_str());
17151775 col_x = (x[0x1b] << 2) | (x[0x19] >> 6);
17161776 col_y = (x[0x1c] << 2) | ((x[0x19] >> 4) & 3);
1717 printf(" Red: 0.%04u, 0.%04u\n",
1777 printf(" Red : 0.%04u, 0.%04u\n",
17181778 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
17191779 col_x = (x[0x1d] << 2) | ((x[0x19] >> 2) & 3);
17201780 col_y = (x[0x1e] << 2) | (x[0x19] & 3);
1721 printf(" Green: 0.%04u, 0.%04u\n",
1781 printf(" Green: 0.%04u, 0.%04u\n",
17221782 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
17231783 col_x = (x[0x1f] << 2) | (x[0x1a] >> 6);
17241784 col_y = (x[0x20] << 2) | ((x[0x1a] >> 4) & 3);
1725 printf(" Blue: 0.%04u, 0.%04u\n",
1785 printf(" Blue : 0.%04u, 0.%04u\n",
17261786 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
17271787 col_x = (x[0x21] << 2) | ((x[0x1a] >> 2) & 3);
17281788 col_y = (x[0x22] << 2) | (x[0x1a] & 3);
1729 printf(" White: 0.%04u, 0.%04u\n",
1789 printf(" White: 0.%04u, 0.%04u\n",
17301790 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
17311791
17321792 data_block = "Established Timings I & II";
17331793 if (x[0x23] || x[0x24] || x[0x25]) {
1734 printf("%s\n", data_block.c_str());
1794 printf(" %s:\n", data_block.c_str());
17351795 for (i = 0; i < 17; i++) {
17361796 if (x[0x23 + i / 8] & (1 << (7 - i % 8))) {
1797 unsigned char dmt_id = established_timings12[i].dmt_id;
17371798 const struct timings *t;
1738 const char *suffix = "DMT";
1739
1740 if (established_timings12[i].dmt_id) {
1741 t = find_dmt_id(established_timings12[i].dmt_id);
1799 char type[16];
1800
1801 if (dmt_id) {
1802 sprintf(type, "DMT 0x%02x", dmt_id);
1803 t = find_dmt_id(dmt_id);
17421804 } else {
17431805 t = &established_timings12[i].t;
1744 suffix = established_timings12[i].std_name;
1806 sprintf(type, "%-8s", established_timings12[i].type);
17451807 }
1746 print_timings(" ", t, suffix);
1808 print_timings(" ", t, type);
17471809 }
17481810 }
17491811 } else {
1750 printf("%s: none\n", data_block.c_str());
1751 }
1752 has_640x480p60_est_timing = x[0x23] & 0x20;
1812 printf(" %s: none\n", data_block.c_str());
1813 }
1814 base.has_640x480p60_est_timing = x[0x23] & 0x20;
17531815
17541816 data_block = "Standard Timings";
17551817 bool found = false;
17561818 for (i = 0; i < 8; i++) {
17571819 if (x[0x26 + i * 2] != 0x01 || x[0x26 + i * 2 + 1] != 0x01) {
17581820 found = true;
1821 break;
17591822 }
17601823 }
17611824 if (found) {
1762 printf("%s\n", data_block.c_str());
1825 printf(" %s:\n", data_block.c_str());
17631826 for (i = 0; i < 8; i++)
1764 print_standard_timing(" ", x[0x26 + i * 2], x[0x26 + i * 2 + 1]);
1827 print_standard_timing(" ", x[0x26 + i * 2], x[0x26 + i * 2 + 1]);
17651828 } else {
1766 printf("%s: none\n", data_block.c_str());
1829 printf(" %s: none\n", data_block.c_str());
17671830 }
17681831
17691832 /* 18 byte descriptors */
17701833 if (has_preferred_timing && !x[0x36] && !x[0x37])
1771 fail("Missing preferred timing\n");
1834 fail("Missing preferred timing.\n");
17721835
17731836 /* Look for SPWG Noteboook Panel EDID data blocks */
17741837 if ((x[0x36] || x[0x37]) &&
17761839 !x[0x5a] && !x[0x5b] && x[0x5d] == 0xfe &&
17771840 !x[0x6c] && !x[0x6d] && x[0x6f] == 0xfe &&
17781841 (x[0x79] == 1 || x[0x79] == 2) && x[0x7a] <= 1)
1779 has_spwg = true;
1780
1842 base.has_spwg = true;
1843
1844 for (unsigned i = 0; i < (base.has_spwg ? 2 : 4); i++)
1845 if (x[0x36 + i * 18] || x[0x37 + i * 18])
1846 cta.preparse_total_dtds++;
1847
1848 data_block = "Detailed Timing Descriptors";
1849 printf(" %s:\n", data_block.c_str());
17811850 detailed_block(x + 0x36);
17821851 detailed_block(x + 0x48);
17831852 detailed_block(x + 0x5a);
17841853 detailed_block(x + 0x6c);
1785 has_spwg = false;
1786
1854 base.has_spwg = false;
1855 if (!base.preferred_is_also_native) {
1856 cta.native_timings.clear();
1857 base.preferred_timing = timings_ext();
1858 }
1859
1860 data_block = block;
17871861 if (x[0x7e])
1788 printf("Has %u extension block%s\n", x[0x7e], x[0x7e] > 1 ? "s" : "");
1862 printf(" Extension blocks: %u\n", x[0x7e]);
1863 if (x[0x7e] + 1U != num_blocks)
1864 fail("EDID specified %u extension block(s), but found %u extension block(s).\n",
1865 x[0x7e], num_blocks - 1);
17891866
17901867 block = block_name(0x00);
17911868 data_block.clear();
17921869 do_checksum("", x, EDID_PAGE_SIZE);
1793 if (edid_minor >= 3) {
1794 if (!has_name_descriptor)
1795 fail("Missing Display Product Name\n");
1796 if ((edid_minor == 3 || supports_continuous_freq) &&
1797 !has_display_range_descriptor)
1798 fail("Missing Display Range Limits Descriptor\n");
1870 if (base.edid_minor >= 3) {
1871 if (!base.has_name_descriptor)
1872 fail("Missing Display Product Name.\n");
1873 if ((base.edid_minor == 3 || base.supports_continuous_freq) &&
1874 !base.has_display_range_descriptor)
1875 fail("Missing Display Range Limits Descriptor.\n");
17991876 }
18001877 }
1878
1879 void edid_state::check_base_block()
1880 {
1881 data_block = "Base EDID";
1882 if (base.uses_gtf && !base.supports_gtf)
1883 fail("GTF timings are used, but the EDID does not signal GTF support.\n");
1884 if (base.uses_cvt && !base.supports_cvt)
1885 fail("CVT timings are used, but the EDID does not signal CVT support.\n");
1886 /*
1887 * Allow for regular rounding of vertical and horizontal frequencies.
1888 * The spec says that the pixelclock shall be rounded up, so there is
1889 * no need to take rounding into account.
1890 */
1891 if (base.has_display_range_descriptor &&
1892 (min_vert_freq_hz + 0.5 < base.min_display_vert_freq_hz ||
1893 (max_vert_freq_hz >= base.max_display_vert_freq_hz + 0.5 && base.max_display_vert_freq_hz) ||
1894 min_hor_freq_hz + 500 < base.min_display_hor_freq_hz ||
1895 (max_hor_freq_hz >= base.max_display_hor_freq_hz + 500 && base.max_display_hor_freq_hz) ||
1896 (max_pixclk_khz > base.max_display_pixclk_khz && base.max_display_pixclk_khz))) {
1897 /*
1898 * Check if it is really out of range, or if it could be a rounding error.
1899 * The EDID spec is not very clear about rounding.
1900 */
1901 bool out_of_range =
1902 min_vert_freq_hz + 1.0 <= base.min_display_vert_freq_hz ||
1903 (max_vert_freq_hz >= base.max_display_vert_freq_hz + 1.0 && base.max_display_vert_freq_hz) ||
1904 min_hor_freq_hz + 1000 <= base.min_display_hor_freq_hz ||
1905 (max_hor_freq_hz >= base.max_display_hor_freq_hz + 1000 && base.max_display_hor_freq_hz) ||
1906 (max_pixclk_khz >= base.max_display_pixclk_khz + 10000 && base.max_display_pixclk_khz);
1907
1908 std::string err("Some timings are out of range of the Monitor Ranges:\n");
1909 char buf[512];
1910
1911 if (min_vert_freq_hz + 0.5 < base.min_display_vert_freq_hz ||
1912 (max_vert_freq_hz >= base.max_display_vert_freq_hz + 0.5 && base.max_display_vert_freq_hz)) {
1913 sprintf(buf, " Vertical Freq: %.3f - %.3f Hz (Monitor: %u.000 - %u.000 Hz)\n",
1914 min_vert_freq_hz, max_vert_freq_hz,
1915 base.min_display_vert_freq_hz, base.max_display_vert_freq_hz);
1916 err += buf;
1917 }
1918
1919 if (min_hor_freq_hz + 500 < base.min_display_hor_freq_hz ||
1920 (max_hor_freq_hz >= base.max_display_hor_freq_hz + 500 && base.max_display_hor_freq_hz)) {
1921 sprintf(buf, " Horizontal Freq: %.3f - %.3f kHz (Monitor: %.3f - %.3f kHz)\n",
1922 min_hor_freq_hz / 1000.0, max_hor_freq_hz / 1000.0,
1923 base.min_display_hor_freq_hz / 1000.0, base.max_display_hor_freq_hz / 1000.0);
1924 err += buf;
1925 }
1926
1927 if (max_pixclk_khz >= base.max_display_pixclk_khz && base.max_display_pixclk_khz) {
1928 sprintf(buf, " Maximum Clock: %.3f MHz (Monitor: %.3f MHz)\n",
1929 max_pixclk_khz / 1000.0, base.max_display_pixclk_khz / 1000.0);
1930 err += buf;
1931 }
1932
1933 if (!out_of_range)
1934 err += " Could be due to a Monitor Range off-by-one rounding issue\n";
1935
1936 /*
1937 * EDID 1.4 states (in an Errata) that explicitly defined
1938 * timings supersede the monitor range definition.
1939 */
1940 msg(!out_of_range || base.edid_minor >= 4, "%s", err.c_str());
1941 }
1942 if (base.edid_minor == 3 && num_blocks > 2 && !block_map.saw_block_1)
1943 fail("EDID 1.3 requires a Block Map Extension in Block 1 if there are more than 2 blocks in the EDID.\n");
1944 if (base.edid_minor == 3 && num_blocks > 128 && !block_map.saw_block_128)
1945 fail("EDID 1.3 requires a Block Map Extension in Block 128 if there are more than 128 blocks in the EDID.\n");
1946 if (block_map.saw_block_128 && num_blocks > 255)
1947 fail("If there is a Block Map Extension in Block 128 then the maximum number of blocks is 255.\n");
1948 }
00 // SPDX-License-Identifier: MIT
11 /*
22 * Copyright 2006-2012 Red Hat, Inc.
3 * Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
44 *
55 * Author: Adam Jackson <ajax@nwnk.net>
66 * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl>
77 */
88
99 #include <stdio.h>
10 #include <string.h>
1110 #include <math.h>
1211
1312 #include "edid-decode.h"
190189
191190 static const unsigned char edid_hdmi_mode_map[] = { 95, 94, 93, 98 };
192191
192 unsigned char hdmi_vic_to_vic(unsigned char hdmi_vic)
193 {
194 if (hdmi_vic > 0 && hdmi_vic <= ARRAY_SIZE(edid_hdmi_mode_map))
195 return edid_hdmi_mode_map[hdmi_vic - 1];
196 return 0;
197 }
198
193199 const struct timings *find_vic_id(unsigned char vic)
194200 {
195201 if (vic > 0 && vic <= ARRAY_SIZE(edid_cta_modes1))
208214
209215 static std::string audio_ext_format(unsigned char x)
210216 {
217 if (x >= 1 && x <= 3)
218 fail("Obsolete Audio Ext Format 0x%02x.\n", x);
211219 switch (x) {
220 case 1: return "HE AAC (Obsolete)";
221 case 2: return "HE AAC v2 (Obsolete)";
222 case 3: return "MPEG Surround (Obsolete)";
212223 case 4: return "MPEG-4 HE AAC";
213224 case 5: return "MPEG-4 HE AAC v2";
214225 case 6: return "MPEG-4 AAC LC";
220231 case 13: return "L-PCM 3D Audio";
221232 default: break;
222233 }
223 fail("Unknown Audio Ext Format 0x%02x\n", x);
234 fail("Unknown Audio Ext Format 0x%02x.\n", x);
224235 return std::string("Unknown Audio Ext Format (") + utohex(x) + ")";
225236 }
226237
232243 case 3: return "MPEG 1 (Layers 1 & 2)";
233244 case 4: return "MPEG 1 Layer 3 (MP3)";
234245 case 5: return "MPEG2 (multichannel)";
235 case 6: return "AAC";
246 case 6: return "AAC LC";
236247 case 7: return "DTS";
237248 case 8: return "ATRAC";
238249 case 9: return "One Bit Audio";
239 case 10: return "Dolby Digital+";
250 case 10: return "Enhanced AC-3 (DD+)";
240251 case 11: return "DTS-HD";
241252 case 12: return "MAT (MLP)";
242253 case 13: return "DST";
243254 case 14: return "WMA Pro";
244255 default: break;
245256 }
246 fail("Unknown Audio Format 0x%02x\n", x);
257 fail("Unknown Audio Format 0x%02x.\n", x);
247258 return std::string("Unknown Audio Format (") + utohex(x) + ")";
248259 }
249260
258269 case 5: return "Level 5";
259270 default: break;
260271 }
261 fail("Unknown MPEG-H 3D Audio Level 0x%02x\n", x);
272 fail("Unknown MPEG-H 3D Audio Level 0x%02x.\n", x);
262273 return std::string("Unknown MPEG-H 3D Audio Level (") + utohex(x) + ")";
263274 }
264275
265276 static void cta_audio_block(const unsigned char *x, unsigned length)
266277 {
267 unsigned i, format, ext_format = 0;
278 unsigned i, format, ext_format;
268279
269280 if (length % 3) {
270 fail("Broken CTA audio block length %d\n", length);
281 fail("Broken CTA-861 audio block length %d.\n", length);
271282 return;
272283 }
273284
274285 for (i = 0; i < length; i += 3) {
275286 format = (x[i] & 0x78) >> 3;
276 ext_format = (x[i + 2] & 0xf8) >> 3;
277287 if (format == 0) {
278288 printf(" Reserved (0x00)\n");
279 fail("Audio Format Code 0x00 is reserved\n");
289 fail("Audio Format Code 0x00 is reserved.\n");
280290 continue;
281291 }
292 if (format != 15) {
293 ext_format = 0;
294 printf(" %s:\n", audio_format(format).c_str());
295 } else {
296 ext_format = (x[i + 2] & 0xf8) >> 3;
297 printf(" %s:\n", audio_ext_format(ext_format).c_str());
298 }
282299 if (format != 15)
283 printf(" %s, max channels %u\n", audio_format(format).c_str(),
284 (x[i] & 0x07)+1);
300 printf(" Max channels: %u\n", (x[i] & 0x07)+1);
285301 else if (ext_format == 11)
286 printf(" %s, MPEG-H 3D Audio Level: %s\n", audio_ext_format(ext_format).c_str(),
302 printf(" MPEG-H 3D Audio Level: %s\n",
287303 mpeg_h_3d_audio_level(x[i] & 0x07).c_str());
288304 else if (ext_format == 13)
289 printf(" %s, max channels %u\n", audio_ext_format(ext_format).c_str(),
305 printf(" Max channels: %u\n",
290306 (((x[i + 1] & 0x80) >> 3) | ((x[i] & 0x80) >> 4) |
291307 (x[i] & 0x07))+1);
292308 else
293 printf(" %s, max channels %u\n", audio_ext_format(ext_format).c_str(),
294 (x[i] & 0x07)+1);
309 printf(" Max channels: %u\n", (x[i] & 0x07)+1);
310
295311 printf(" Supported sample rates (kHz):%s%s%s%s%s%s%s\n",
296312 (x[i+1] & 0x40) ? " 192" : "",
297313 (x[i+1] & 0x20) ? " 176.4" : "",
310326 } else if (format == 10) {
311327 // As specified by the "Dolby Audio and Dolby Atmos over HDMI"
312328 // specification (v1.0).
313 if(x[i+2] & 1)
329 if (x[i+2] & 1)
314330 printf(" Supports Joint Object Coding\n");
315 if(x[i+2] & 2)
331 if (x[i+2] & 2)
316332 printf(" Supports Joint Object Coding with ACMOD28\n");
333 } else if (format == 12) {
334 if (x[i+2] & 1) {
335 printf(" Supports Dolby TrueHD, object audio PCM and channel-based PCM\n");
336 printf(" Hash calculation %srequired for object audio PCM or channel-based PCM\n",
337 (x[i+2] & 2) ? "not " : "");
338 } else {
339 printf(" Supports only Dolby TrueHD\n");
340 }
317341 } else if (format == 14) {
318342 printf(" Profile: %u\n", x[i+2] & 7);
343 } else if (format >= 9 && format <= 13) {
344 printf(" Audio Format Code dependent value: 0x%02x\n", x[i+2]);
319345 } else if (ext_format == 11 && (x[i+2] & 1)) {
320346 printf(" Supports MPEG-H 3D Audio Low Complexity Profile\n");
321347 } else if ((ext_format >= 4 && ext_format <= 6) ||
332358 }
333359 }
334360
335 void edid_state::cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420)
336 {
337 static unsigned short vics[256][2];
361 void edid_state::cta_svd(const unsigned char *x, unsigned n, bool for_ycbcr420)
362 {
338363 unsigned i;
339364
340365 for (i = 0; i < n; i++) {
358383 if (t) {
359384 switch (vic) {
360385 case 95:
361 supported_hdmi_vic_vsb_codes |= 1 << 0;
386 cta.supported_hdmi_vic_vsb_codes |= 1 << 0;
362387 break;
363388 case 94:
364 supported_hdmi_vic_vsb_codes |= 1 << 1;
389 cta.supported_hdmi_vic_vsb_codes |= 1 << 1;
365390 break;
366391 case 93:
367 supported_hdmi_vic_vsb_codes |= 1 << 2;
392 cta.supported_hdmi_vic_vsb_codes |= 1 << 2;
368393 break;
369394 case 98:
370 supported_hdmi_vic_vsb_codes |= 1 << 3;
395 cta.supported_hdmi_vic_vsb_codes |= 1 << 3;
371396 break;
372397 }
373 char suffix[16];
374
375 sprintf(suffix, "VIC %3u%s", vic, native ? ", native" : "");
376 print_timings(" ", t, suffix);
398 bool first_svd = cta.first_svd && !for_ycbcr420;
399 bool override_pref = first_svd && cta.first_svd_might_be_preferred;
400
401 char type[16];
402 sprintf(type, "VIC %3u", vic);
403 const char *flags = native ? "native" : "";
404
405 if (for_ycbcr420) {
406 struct timings tmp = *t;
407 tmp.ycbcr420 = true;
408 print_timings(" ", &tmp, type, flags);
409 } else {
410 print_timings(" ", t, type, flags);
411 }
412 if (override_pref) {
413 cta.preferred_timings.insert(cta.preferred_timings.begin(),
414 timings_ext(*t, type, flags));
415 warn("VIC %u is the preferred timing, overriding the first detailed timings. Is this intended?\n", vic);
416 } else if (first_svd) {
417 cta.preferred_timings.push_back(timings_ext(*t, type, flags));
418 }
419 if (first_svd) {
420 cta.first_svd = false;
421 cta.first_svd_might_be_preferred = false;
422 }
423 if (native)
424 cta.native_timings.push_back(timings_ext(*t, type, flags));
377425 } else {
378426 printf(" Unknown (VIC %3u)\n", vic);
379 fail("Unknown VIC %u\n", vic);
427 fail("Unknown VIC %u.\n", vic);
380428 }
381429
382430 if (vic == 1 && !for_ycbcr420)
383 has_cta861_vic_1 = 1;
384 if (++vics[vic][for_ycbcr420] == 2)
385 fail("Duplicate %sVIC %u\n", for_ycbcr420 ? "YCbCr 4:2:0 " : "", vic);
386 if (for_ycbcr420 && preparsed_has_vic[0][vic])
387 fail("YCbCr 4:2:0-only VIC %u is also a regular VIC\n", vic);
388 }
389 }
390
391 void edid_state::print_vic_index(const char *prefix, unsigned idx, const char *suffix)
431 cta.has_vic_1 = 1;
432 if (++cta.vics[vic][for_ycbcr420] == 2)
433 fail("Duplicate %sVIC %u.\n", for_ycbcr420 ? "YCbCr 4:2:0 " : "", vic);
434 if (for_ycbcr420 && cta.preparsed_has_vic[0][vic])
435 fail("YCbCr 4:2:0-only VIC %u is also a regular VIC.\n", vic);
436 }
437 }
438
439 void edid_state::print_vic_index(const char *prefix, unsigned idx, const char *suffix, bool ycbcr420)
392440 {
393441 if (!suffix)
394442 suffix = "";
395 if (idx < preparsed_svds[0].size()) {
396 unsigned char vic = preparsed_svds[0][idx];
443 if (idx < cta.preparsed_svds[0].size()) {
444 unsigned char vic = cta.preparsed_svds[0][idx];
397445 const struct timings *t = find_vic_id(vic);
398 char buf[256];
399
400 sprintf(buf, "VIC %3u%s%s", vic, *suffix ? ", " : "", suffix);
401
402 if (t)
403 print_timings(prefix, t, buf);
404 else
405 printf("%sUnknown (%s)\n", prefix, buf);
446 char buf[16];
447
448 sprintf(buf, "VIC %3u", vic);
449
450 if (t) {
451 struct timings tmp = *t;
452 tmp.ycbcr420 = ycbcr420;
453 print_timings(prefix, &tmp, buf, suffix);
454 } else {
455 printf("%sUnknown (%s%s%s)\n", prefix, buf,
456 *suffix ? ", " : "", suffix);
457 }
406458 } else {
407459 // Should not happen!
408460 printf("%sSVD Index %u is out of range", prefix, idx + 1);
424476
425477 if (memchk(x, length)) {
426478 printf(" Empty Capability Map\n");
427 fail("Empty Capability Map\n");
479 fail("Empty Capability Map.\n");
428480 return;
429481 }
430482
436488 if (!(v & (1 << j)))
437489 continue;
438490
439 print_vic_index(" ", i * 8 + j, "");
491 print_vic_index(" ", i * 8 + j, "", true);
440492 max_idx = i * 8 + j;
441 if (max_idx < preparsed_svds[0].size()) {
442 unsigned vic = preparsed_svds[0][max_idx];
443 if (preparsed_has_vic[1][vic])
444 fail("VIC %u is also a YCbCr 4:2:0-only VIC\n", vic);
445 }
446 }
447 }
448 if (max_idx >= preparsed_svds[0].size())
449 fail("Max index %u > %u (#SVDs)\n",
450 max_idx + 1, preparsed_svds[0].size());
493 if (max_idx < cta.preparsed_svds[0].size()) {
494 unsigned vic = cta.preparsed_svds[0][max_idx];
495 if (cta.preparsed_has_vic[1][vic])
496 fail("VIC %u is also a YCbCr 4:2:0-only VIC.\n", vic);
497 }
498 }
499 }
500 if (max_idx >= cta.preparsed_svds[0].size())
501 fail("Max index %u > %u (#SVDs).\n",
502 max_idx + 1, cta.preparsed_svds[0].size());
451503 }
452504
453505 void edid_state::cta_vfpdb(const unsigned char *x, unsigned length)
454506 {
455507 unsigned i;
456508
509 if (length == 0) {
510 fail("Empty Data Block with length %u.\n", length);
511 return;
512 }
513 cta.preferred_timings.clear();
457514 for (i = 0; i < length; i++) {
458515 unsigned char svr = x[i];
516 char suffix[16];
459517
460518 if ((svr > 0 && svr < 128) || (svr > 192 && svr < 254)) {
461 char suffix[16];
462519 const struct timings *t;
463520 unsigned char vic = svr;
464521
467524 t = find_vic_id(vic);
468525 if (t) {
469526 print_timings(" ", t, suffix);
527 cta.preferred_timings.push_back(timings_ext(*t, suffix, ""));
470528 } else {
471 printf(" Unknown (VIC %3u)\n", vic);
472 fail("Unknown VIC %u\n", vic);
473 }
474
475 } else if (svr > 128 && svr < 145) {
476 printf(" DTD number %02u\n", svr - 128);
529 printf(" %s: Unknown\n", suffix);
530 fail("Unknown VIC %u.\n", vic);
531 }
532
533 } else if (svr >= 129 && svr <= 144) {
534 sprintf(suffix, "DTD %3u", svr - 128);
535 if (svr >= cta.preparse_total_dtds + 129) {
536 printf(" %s: Invalid\n", suffix);
537 fail("Invalid DTD %u.\n", svr - 128);
538 } else {
539 printf(" %s\n", suffix);
540 cta.preferred_timings.push_back(timings_ext(svr, suffix));
541 }
542 } else if (svr >= 145 && svr <= 160) {
543 sprintf(suffix, "VTDB %3u", svr - 144);
544 if (svr >= cta.preparse_total_vtdbs + 145) {
545 printf(" %s: Invalid\n", suffix);
546 fail("Invalid VTDB %u.\n", svr - 144);
547 } else {
548 printf(" %s\n", suffix);
549 cta.preferred_timings.push_back(timings_ext(svr, suffix));
550 }
551 } else if (svr == 254) {
552 sprintf(suffix, "T8VTDB");
553 if (!cta.preparse_has_t8vtdb) {
554 printf(" %s: Invalid\n", suffix);
555 fail("Invalid T8VTDB.\n");
556 } else {
557 printf(" %s\n", suffix);
558 cta.preferred_timings.push_back(timings_ext(svr, suffix));
559 }
477560 }
478561 }
479562 }
491574 {
492575 unsigned len_vic, len_3d;
493576
494 printf(" (HDMI)\n");
495 printf(" Source physical address %u.%u.%u.%u\n", x[3] >> 4, x[3] & 0x0f,
577 if (length < 4) {
578 fail("Empty Data Block with length %u.\n", length);
579 return;
580 }
581 printf(" Source physical address: %u.%u.%u.%u\n", x[3] >> 4, x[3] & 0x0f,
496582 x[4] >> 4, x[4] & 0x0f);
497583
498584 if (length < 6)
517603
518604 printf(" Maximum TMDS clock: %u MHz\n", x[6] * 5);
519605 if (x[6] * 5 > 340)
520 fail("HDMI VSDB Max TMDS rate is > 340\n");
606 fail("HDMI VSDB Max TMDS rate is > 340.\n");
521607
522608 if (length < 8)
523609 return;
575661 break;
576662 case 0x18:
577663 printf(" Base EDID image size is in units of 5 cm\n");
578 max_display_width_mm *= 5;
579 max_display_height_mm *= 5;
664 base.max_display_width_mm *= 5;
665 base.max_display_height_mm *= 5;
580666 printf(" Recalculated image size: %u cm x %u cm\n",
581 max_display_width_mm / 10, max_display_height_mm / 10);
667 base.max_display_width_mm / 10, base.max_display_height_mm / 10);
582668 break;
583669 }
584670 b++;
596682
597683 if (vic && vic <= ARRAY_SIZE(edid_hdmi_mode_map)) {
598684 std::string suffix = "HDMI VIC " + std::to_string(vic);
599 supported_hdmi_vic_codes |= 1 << (vic - 1);
685 cta.supported_hdmi_vic_codes |= 1 << (vic - 1);
600686 t = find_vic_id(edid_hdmi_mode_map[vic - 1]);
601687 print_timings(" ", t, suffix.c_str());
602688 } else {
603689 printf(" Unknown (HDMI VIC %u)\n", vic);
604 fail("Unknown HDMI VIC %u\n", vic);
690 fail("Unknown HDMI VIC %u.\n", vic);
605691 }
606692 }
607693
608694 b += len_vic;
609695 }
610696
611 if (len_3d) {
612 if (formats) {
613 /* 3D_Structure_ALL_15..8 */
614 if (x[b] & 0x80)
615 printf(" 3D: Side-by-side (half, quincunx)\n");
616 if (x[b] & 0x01)
617 printf(" 3D: Side-by-side (half, horizontal)\n");
618 /* 3D_Structure_ALL_7..0 */
697 if (!len_3d)
698 return;
699
700 if (formats) {
701 /* 3D_Structure_ALL_15..8 */
702 if (x[b] & 0x80)
703 printf(" 3D: Side-by-side (half, quincunx)\n");
704 if (x[b] & 0x01)
705 printf(" 3D: Side-by-side (half, horizontal)\n");
706 /* 3D_Structure_ALL_7..0 */
707 b++;
708 if (x[b] & 0x40)
709 printf(" 3D: Top-and-bottom\n");
710 if (x[b] & 0x20)
711 printf(" 3D: L + depth + gfx + gfx-depth\n");
712 if (x[b] & 0x10)
713 printf(" 3D: L + depth\n");
714 if (x[b] & 0x08)
715 printf(" 3D: Side-by-side (full)\n");
716 if (x[b] & 0x04)
717 printf(" 3D: Line-alternative\n");
718 if (x[b] & 0x02)
719 printf(" 3D: Field-alternative\n");
720 if (x[b] & 0x01)
721 printf(" 3D: Frame-packing\n");
722 b++;
723 len_3d -= 2;
724 }
725
726 if (mask) {
727 int max_idx = -1;
728 unsigned i;
729
730 printf(" 3D VIC indices that support these capabilities:\n");
731 /* worst bit ordering ever */
732 for (i = 0; i < 8; i++)
733 if (x[b + 1] & (1 << i)) {
734 print_vic_index(" ", i, "");
735 max_idx = i;
736 }
737 for (i = 0; i < 8; i++)
738 if (x[b] & (1 << i)) {
739 print_vic_index(" ", i + 8, "");
740 max_idx = i + 8;
741 }
742 b += 2;
743 len_3d -= 2;
744 if (max_idx >= (int)cta.preparsed_svds[0].size())
745 fail("HDMI 3D VIC indices max index %d > %u (#SVDs).\n",
746 max_idx + 1, cta.preparsed_svds[0].size());
747 }
748
749 /*
750 * list of nibbles:
751 * 2D_VIC_Order_X
752 * 3D_Structure_X
753 * (optionally: 3D_Detail_X and reserved)
754 */
755 if (!len_3d)
756 return;
757
758 unsigned end = b + len_3d;
759 int max_idx = -1;
760
761 printf(" 3D VIC indices with specific capabilities:\n");
762 while (b < end) {
763 unsigned char idx = x[b] >> 4;
764 std::string s;
765
766 if (idx > max_idx)
767 max_idx = idx;
768 switch (x[b] & 0x0f) {
769 case 0: s = "frame packing"; break;
770 case 1: s = "field alternative"; break;
771 case 2: s = "line alternative"; break;
772 case 3: s = "side-by-side (full)"; break;
773 case 4: s = "L + depth"; break;
774 case 5: s = "L + depth + gfx + gfx-depth"; break;
775 case 6: s = "top-and-bottom"; break;
776 case 8:
777 s = "side-by-side";
778 switch (x[b + 1] >> 4) {
779 case 0x00: s += ", any subsampling"; break;
780 case 0x01: s += ", horizontal"; break;
781 case 0x02: case 0x03: case 0x04: case 0x05:
782 s += ", not in use";
783 fail("not-in-use 3D_Detail_X value 0x%02x.\n",
784 x[b + 1] >> 4);
785 break;
786 case 0x06: s += ", all quincunx combinations"; break;
787 case 0x07: s += ", quincunx odd/left, odd/right"; break;
788 case 0x08: s += ", quincunx odd/left, even/right"; break;
789 case 0x09: s += ", quincunx even/left, odd/right"; break;
790 case 0x0a: s += ", quincunx even/left, even/right"; break;
791 default:
792 s += ", reserved";
793 fail("reserved 3D_Detail_X value 0x%02x.\n",
794 x[b + 1] >> 4);
795 break;
796 }
797 break;
798 default:
799 s = "unknown (";
800 s += utohex(x[b] & 0x0f) + ")";
801 fail("Unknown 3D_Structure_X value 0x%02x.\n", x[b] & 0x0f);
802 break;
803 }
804 print_vic_index(" ", idx, s.c_str());
805 if ((x[b] & 0x0f) >= 8)
619806 b++;
620 if (x[b] & 0x40)
621 printf(" 3D: Top-and-bottom\n");
622 if (x[b] & 0x20)
623 printf(" 3D: L + depth + gfx + gfx-depth\n");
624 if (x[b] & 0x10)
625 printf(" 3D: L + depth\n");
626 if (x[b] & 0x08)
627 printf(" 3D: Side-by-side (full)\n");
628 if (x[b] & 0x04)
629 printf(" 3D: Line-alternative\n");
630 if (x[b] & 0x02)
631 printf(" 3D: Field-alternative\n");
632 if (x[b] & 0x01)
633 printf(" 3D: Frame-packing\n");
634 b++;
635 len_3d -= 2;
636 }
637
638 if (mask) {
639 int max_idx = -1;
640 unsigned i;
641
642 printf(" 3D VIC indices that support these capabilities:\n");
643 /* worst bit ordering ever */
644 for (i = 0; i < 8; i++)
645 if (x[b + 1] & (1 << i)) {
646 print_vic_index(" ", i, "");
647 max_idx = i;
648 }
649 for (i = 0; i < 8; i++)
650 if (x[b] & (1 << i)) {
651 print_vic_index(" ", i + 8, "");
652 max_idx = i + 8;
653 }
654 b += 2;
655 len_3d -= 2;
656 if (max_idx >= (int)preparsed_svds[0].size())
657 fail("HDMI 3D VIC indices max index %d > %u (#SVDs)\n",
658 max_idx + 1, preparsed_svds[0].size());
659 }
660
661 /*
662 * list of nibbles:
663 * 2D_VIC_Order_X
664 * 3D_Structure_X
665 * (optionally: 3D_Detail_X and reserved)
666 */
667 if (len_3d > 0) {
668 unsigned end = b + len_3d;
669 int max_idx = -1;
670
671 printf(" 3D VIC indices with specific capabilities:\n");
672 while (b < end) {
673 unsigned char idx = x[b] >> 4;
674 std::string s;
675
676 if (idx > max_idx)
677 max_idx = idx;
678 switch (x[b] & 0x0f) {
679 case 0: s = "frame packing"; break;
680 case 1: s = "field alternative"; break;
681 case 2: s = "line alternative"; break;
682 case 3: s = "side-by-side (full)"; break;
683 case 4: s = "L + depth"; break;
684 case 5: s = "L + depth + gfx + gfx-depth"; break;
685 case 6: s = "top-and-bottom"; break;
686 case 8:
687 s = "side-by-side";
688 switch (x[b + 1] >> 4) {
689 case 0x00: break;
690 case 0x01: s += ", horizontal"; break;
691 case 0x02: case 0x03: case 0x04: case 0x05:
692 s += ", not in use";
693 fail("not-in-use 3D_Detail_X value 0x%02x\n",
694 x[b + 1] >> 4);
695 break;
696 case 0x06: s += ", all quincunx combinations"; break;
697 case 0x07: s += ", quincunx odd/left, odd/right"; break;
698 case 0x08: s += ", quincunx odd/left, even/right"; break;
699 case 0x09: s += ", quincunx even/left, odd/right"; break;
700 case 0x0a: s += ", quincunx even/left, even/right"; break;
701 default:
702 s += ", reserved";
703 fail("reserved 3D_Detail_X value 0x%02x\n",
704 x[b + 1] >> 4);
705 break;
706 }
707 break;
708 default:
709 s = "unknown (";
710 s += utohex(x[b] & 0x0f) + ")";
711 fail("Unknown 3D_Structure_X value 0x%02x\n", x[b] & 0x0f);
712 break;
713 }
714 print_vic_index(" ", idx, s.c_str());
715 if ((x[b] & 0x0f) >= 8)
716 b++;
717 b++;
718 }
719 if (max_idx >= (int)preparsed_svds[0].size())
720 fail("HDMI 2D VIC indices max index %d > %u (#SVDs)\n",
721 max_idx + 1, preparsed_svds[0].size());
722 }
723 }
807 b++;
808 }
809 if (max_idx >= (int)cta.preparsed_svds[0].size())
810 fail("HDMI 2D VIC indices max index %d > %u (#SVDs).\n",
811 max_idx + 1, cta.preparsed_svds[0].size());
724812 }
725813
726814 static const char *max_frl_rates[] = {
748836 {
749837 printf(" EDID Extension Block Count: %u\n", x[0]);
750838 if (length != 1 || x[0] == 0)
751 fail("Block is too long or reports a 0 block count\n");
839 fail("Block is too long or reports a 0 block count.\n");
752840 }
753841
754842 static void cta_hf_scdb(const unsigned char *x, unsigned length)
758846 printf(" Version: %u\n", x[0]);
759847 if (rate) {
760848 printf(" Maximum TMDS Character Rate: %u MHz\n", rate);
761 if ((rate && rate <= 340) || rate > 600)
762 fail("Max TMDS rate is > 0 and <= 340 or > 600\n");
849 if (rate <= 340 || rate > 600)
850 fail("Max TMDS rate is > 0 and <= 340 or > 600.\n");
763851 }
764852 if (x[2] & 0x80)
765853 printf(" SCDC Present\n");
783871 printf("%s\n", max_frl_rates[max_frl_rate]);
784872 } else {
785873 printf("Unknown (0x%02x)\n", max_frl_rate);
786 fail("Unknown Max Fixed Rate Link (0x%02x)\n", max_frl_rate);
874 fail("Unknown Max Fixed Rate Link (0x%02x).\n", max_frl_rate);
787875 }
788876 if (max_frl_rate == 1 && rate < 300)
789 fail("Max Fixed Rate Link is 1, but Max TMDS rate < 300\n");
877 fail("Max Fixed Rate Link is 1, but Max TMDS rate < 300.\n");
790878 else if (max_frl_rate >= 2 && rate < 600)
791 fail("Max Fixed Rate Link is >= 2, but Max TMDS rate < 600\n");
879 fail("Max Fixed Rate Link is >= 2, but Max TMDS rate < 600.\n");
792880 }
793881 if (x[3] & 0x08)
794882 printf(" Supports UHD VIC\n");
799887 if (x[3] & 0x01)
800888 printf(" Supports 10-bits/component Deep Color 4:2:0 Pixel Encoding\n");
801889
802 if (length <= 7)
890 if (length <= 4)
803891 return;
804892
805893 if (x[4] & 0x20)
815903 if (x[4] & 0x01)
816904 printf(" Supports a FAPA in blanking after first active video line\n");
817905
818 if (length <= 8)
819 return;
820
821 printf(" VRRmin: %d Hz\n", x[8] & 0x3f);
822 printf(" VRRmax: %d Hz\n", (x[8] & 0xc0) << 2 | x[9]);
823
824 if (length <= 10)
906 if (length <= 5)
907 return;
908
909 printf(" VRRmin: %d Hz\n", x[5] & 0x3f);
910 printf(" VRRmax: %d Hz\n", (x[5] & 0xc0) << 2 | x[6]);
911
912 if (length <= 7)
825913 return;
826914
827915 if (x[7] & 0x80)
844932 printf("%s\n", dsc_max_slices[max_slices]);
845933 } else {
846934 printf("Unknown (0x%02x)\n", max_slices);
847 fail("Unknown DSC Max Slices (0x%02x)\n", max_slices);
935 fail("Unknown DSC Max Slices (0x%02x).\n", max_slices);
848936 }
849937 }
850938 if (x[8] & 0xf0) {
855943 printf("%s\n", max_frl_rates[max_frl_rate]);
856944 } else {
857945 printf("Unknown (0x%02x)\n", max_frl_rate);
858 fail("Unknown DSC Max Fixed Rate Link (0x%02x)\n", max_frl_rate);
946 fail("Unknown DSC Max Fixed Rate Link (0x%02x).\n", max_frl_rate);
859947 }
860948 }
861949 if (x[9] & 0x3f)
866954 static void cta_hdr10plus(const unsigned char *x, unsigned length)
867955 {
868956 printf(" Application Version: %u", x[0]);
869 hex_block(" ", x + 1, length - 1);
957 if (length > 1)
958 hex_block(" ", x + 1, length - 1);
959 else
960 printf("\n");
961 }
962
963 static void cta_dolby_video(const unsigned char *x, unsigned length)
964 {
965 unsigned char version = (x[0] >> 5) & 0x07;
966
967 printf(" Version: %u (%u bytes)\n", version, length + 5);
968 if (x[0] & 0x01)
969 printf(" Supports YUV422 12 bit\n");
970
971 if (version == 0) {
972 if (x[0] & 0x02)
973 printf(" Supports 2160p60\n");
974 if (x[0] & 0x04)
975 printf(" Supports global dimming\n");
976 unsigned char dm_version = x[16];
977 printf(" DM Version: %u.%u\n", dm_version >> 4, dm_version & 0xf);
978 printf(" Target Min PQ: %u\n", (x[14] << 4) | (x[13] >> 4));
979 printf(" Target Max PQ: %u\n", (x[15] << 4) | (x[13] & 0xf));
980 printf(" Rx, Ry: %.8f, %.8f\n",
981 ((x[1] >> 4) | (x[2] << 4)) / 4096.0,
982 ((x[1] & 0xf) | (x[3] << 4)) / 4096.0);
983 printf(" Gx, Gy: %.8f, %.8f\n",
984 ((x[4] >> 4) | (x[5] << 4)) / 4096.0,
985 ((x[4] & 0xf) | (x[6] << 4)) / 4096.0);
986 printf(" Bx, By: %.8f, %.8f\n",
987 ((x[7] >> 4) | (x[8] << 4)) / 4096.0,
988 ((x[7] & 0xf) | (x[9] << 4)) / 4096.0);
989 printf(" Wx, Wy: %.8f, %.8f\n",
990 ((x[10] >> 4) | (x[11] << 4)) / 4096.0,
991 ((x[10] & 0xf) | (x[12] << 4)) / 4096.0);
992 return;
993 }
994
995 if (version == 1) {
996 if (x[0] & 0x02)
997 printf(" Supports 2160p60\n");
998 if (x[1] & 0x01)
999 printf(" Supports global dimming\n");
1000 unsigned char dm_version = (x[0] >> 2) & 0x07;
1001 printf(" DM Version: %u.x\n", dm_version + 2);
1002 printf(" Colorimetry: %s\n", (x[2] & 0x01) ? "P3-D65" : "ITU-R BT.709");
1003 printf(" Low Latency: %s\n", (x[3] & 0x01) ? "Standard + Low Latency" : "Only Standard");
1004 printf(" Target Max Luminance: %u cd/m^2\n", 100 + (x[1] >> 1) * 50);
1005 double lm = (x[2] >> 1) / 127.0;
1006 printf(" Target Min Luminance: %.8f cd/m^2\n", lm * lm);
1007 if (length == 10) {
1008 printf(" Rx, Ry: %.8f, %.8f\n", x[4] / 256.0, x[5] / 256.0);
1009 printf(" Gx, Gy: %.8f, %.8f\n", x[6] / 256.0, x[7] / 256.0);
1010 printf(" Bx, By: %.8f, %.8f\n", x[8] / 256.0, x[9] / 256.0);
1011 } else {
1012 double xmin = 0.625;
1013 double xstep = (0.74609375 - xmin) / 31.0;
1014 double ymin = 0.25;
1015 double ystep = (0.37109375 - ymin) / 31.0;
1016
1017 printf(" Unique Rx, Ry: %.8f, %.8f\n",
1018 xmin + xstep * (x[6] >> 3),
1019 ymin + ystep * (((x[6] & 0x7) << 2) | (x[4] & 0x01) | ((x[5] & 0x01) << 1)));
1020 xstep = 0.49609375 / 127.0;
1021 ymin = 0.5;
1022 ystep = (0.99609375 - ymin) / 127.0;
1023 printf(" Unique Gx, Gy: %.8f, %.8f\n",
1024 xstep * (x[4] >> 1), ymin + ystep * (x[5] >> 1));
1025 xmin = 0.125;
1026 xstep = (0.15234375 - xmin) / 7.0;
1027 ymin = 0.03125;
1028 ystep = (0.05859375 - ymin) / 7.0;
1029 printf(" Unique Bx, By: %.8f, %.8f\n",
1030 xmin + xstep * (x[3] >> 5),
1031 ymin + ystep * ((x[3] >> 2) & 0x07));
1032 }
1033 return;
1034 }
1035
1036 if (version == 2) {
1037 if (x[0] & 0x02)
1038 printf(" Supports Backlight Control\n");
1039 if (x[1] & 0x04)
1040 printf(" Supports global dimming\n");
1041 unsigned char dm_version = (x[0] >> 2) & 0x07;
1042 printf(" DM Version: %u.x\n", dm_version + 2);
1043 printf(" Backlt Min Luma: %u cd/m^2\n", 25 + (x[1] & 0x03) * 25);
1044 printf(" Interface: ");
1045 switch (x[2] & 0x03) {
1046 case 0: printf("Low-Latency\n"); break;
1047 case 1: printf("Low-Latency + Low-Latency-HDMI\n"); break;
1048 case 2: printf("Standard + Low-Latency\n"); break;
1049 case 3: printf("Standard + Low-Latency + Low-Latency-HDMI\n"); break;
1050 }
1051 printf(" Supports 10b 12b 444: ");
1052 switch ((x[3] & 0x01) << 1 | (x[4] & 0x01)) {
1053 case 0: printf("Not supported\n"); break;
1054 case 1: printf("10 bit\n"); break;
1055 case 2: printf("12 bit\n"); break;
1056 case 3: printf("Reserved\n"); break;
1057 }
1058 printf(" Target Min PQ v2: %u\n", 20 * (x[1] >> 3));
1059 printf(" Target Max PQ v2: %u\n", 2055 + 65 * (x[2] >> 3));
1060
1061 double xmin = 0.625;
1062 double xstep = (0.74609375 - xmin) / 31.0;
1063 double ymin = 0.25;
1064 double ystep = (0.37109375 - ymin) / 31.0;
1065
1066 printf(" Unique Rx, Ry: %.8f, %.8f\n",
1067 xmin + xstep * (x[5] >> 3),
1068 ymin + ystep * (x[6] >> 3));
1069 xstep = 0.49609375 / 127.0;
1070 ymin = 0.5;
1071 ystep = (0.99609375 - ymin) / 127.0;
1072 printf(" Unique Gx, Gy: %.8f, %.8f\n",
1073 xstep * (x[3] >> 1), ymin + ystep * (x[4] >> 1));
1074 xmin = 0.125;
1075 xstep = (0.15234375 - xmin) / 7.0;
1076 ymin = 0.03125;
1077 ystep = (0.05859375 - ymin) / 7.0;
1078 printf(" Unique Bx, By: %.8f, %.8f\n",
1079 xmin + xstep * (x[5] & 0x07),
1080 ymin + ystep * (x[6] & 0x07));
1081 }
1082 }
1083
1084 static void cta_dolby_audio(const unsigned char *x, unsigned length)
1085 {
1086 unsigned char version = 1 + (x[0] & 0x07);
1087
1088 printf(" Version: %u (%u bytes)\n", version, length + 5);
1089 if (x[0] & 0x80)
1090 printf(" Headphone playback only\n");
1091 if (x[0] & 0x40)
1092 printf(" Height speaker zone present\n");
1093 if (x[0] & 0x20)
1094 printf(" Surround speaker zone present\n");
1095 if (x[0] & 0x10)
1096 printf(" Center speaker zone present\n");
1097 if (x[1] & 0x01)
1098 printf(" Supports Dolby MAT PCM decoding at 48 kHz only, does not support TrueHD\n");
8701099 }
8711100
8721101 static const char *speaker_map[] = {
8981127 unsigned sad;
8991128 unsigned i;
9001129
901 if (length < 3)
902 return;
1130 if (length < 3) {
1131 fail("Empty Data Block with length %u.\n", length);
1132 return;
1133 }
9031134
9041135 sad = ((x[2] << 16) | (x[1] << 8) | x[0]);
905
906 printf(" Speaker map:\n");
9071136
9081137 for (i = 0; i < ARRAY_SIZE(speaker_map); i++) {
9091138 if ((sad >> i) & 1)
910 printf(" %s\n", speaker_map[i]);
911 }
1139 printf(" %s\n", speaker_map[i]);
1140 }
1141 }
1142
1143 static void cta_vesa_dtcdb(const unsigned char *x, unsigned length)
1144 {
1145 if (length != 7 && length != 15 && length != 31) {
1146 fail("Invalid length %u.\n", length);
1147 return;
1148 }
1149
1150 switch (x[0] >> 6) {
1151 case 0: printf(" White"); break;
1152 case 1: printf(" Red"); break;
1153 case 2: printf(" Green"); break;
1154 case 3: printf(" Blue"); break;
1155 }
1156 unsigned v = x[0] & 0x3f;
1157 printf(" transfer characteristics: %u", v);
1158 for (unsigned i = 1; i < length; i++)
1159 printf(" %u", v += x[i]);
1160 printf(" 1023\n");
1161 }
1162
1163 static void cta_vesa_vdddb(const unsigned char *x, unsigned length)
1164 {
1165 if (length != 30) {
1166 fail("Invalid length %u.\n", length);
1167 return;
1168 }
1169
1170 printf(" Interface Type: ");
1171 unsigned char v = x[0];
1172 switch (v >> 4) {
1173 case 0: printf("Analog (");
1174 switch (v & 0xf) {
1175 case 0: printf("15HD/VGA"); break;
1176 case 1: printf("VESA NAVI-V (15HD)"); break;
1177 case 2: printf("VESA NAVI-D"); break;
1178 default: printf("Reserved"); break;
1179 }
1180 printf(")\n");
1181 break;
1182 case 1: printf("LVDS %u lanes", v & 0xf); break;
1183 case 2: printf("RSDS %u lanes", v & 0xf); break;
1184 case 3: printf("DVI-D %u channels", v & 0xf); break;
1185 case 4: printf("DVI-I analog"); break;
1186 case 5: printf("DVI-I digital %u channels", v & 0xf); break;
1187 case 6: printf("HDMI-A"); break;
1188 case 7: printf("HDMI-B"); break;
1189 case 8: printf("MDDI %u channels", v & 0xf); break;
1190 case 9: printf("DisplayPort %u channels", v & 0xf); break;
1191 case 10: printf("IEEE-1394"); break;
1192 case 11: printf("M1 analog"); break;
1193 case 12: printf("M1 digital %u channels", v & 0xf); break;
1194 default: printf("Reserved"); break;
1195 }
1196 printf("\n");
1197
1198 printf(" Interface Standard Version: %u.%u\n", x[1] >> 4, x[1] & 0xf);
1199 printf(" Content Protection Support: ");
1200 switch (x[2]) {
1201 case 0: printf("None\n"); break;
1202 case 1: printf("HDCP\n"); break;
1203 case 2: printf("DTCP\n"); break;
1204 case 3: printf("DPCP\n"); break;
1205 default: printf("Reserved\n"); break;
1206 }
1207
1208 printf(" Minimum Clock Frequency: %u MHz\n", x[3] >> 2);
1209 printf(" Maximum Clock Frequency: %u MHz\n", ((x[3] & 0x03) << 8) | x[4]);
1210 printf(" Device Native Pixel Format: %ux%u\n",
1211 x[5] | (x[6] << 8), x[7] | (x[8] << 8));
1212 printf(" Aspect Ratio: %.2f\n", (100 + x[9]) / 100.0);
1213 v = x[0x0a];
1214 printf(" Default Orientation: ");
1215 switch ((v & 0xc0) >> 6) {
1216 case 0x00: printf("Landscape\n"); break;
1217 case 0x01: printf("Portrait\n"); break;
1218 case 0x02: printf("Not Fixed\n"); break;
1219 case 0x03: printf("Undefined\n"); break;
1220 }
1221 printf(" Rotation Capability: ");
1222 switch ((v & 0x30) >> 4) {
1223 case 0x00: printf("None\n"); break;
1224 case 0x01: printf("Can rotate 90 degrees clockwise\n"); break;
1225 case 0x02: printf("Can rotate 90 degrees counterclockwise\n"); break;
1226 case 0x03: printf("Can rotate 90 degrees in either direction)\n"); break;
1227 }
1228 printf(" Zero Pixel Location: ");
1229 switch ((v & 0x0c) >> 2) {
1230 case 0x00: printf("Upper Left\n"); break;
1231 case 0x01: printf("Upper Right\n"); break;
1232 case 0x02: printf("Lower Left\n"); break;
1233 case 0x03: printf("Lower Right\n"); break;
1234 }
1235 printf(" Scan Direction: ");
1236 switch (v & 0x03) {
1237 case 0x00: printf("Not defined\n"); break;
1238 case 0x01: printf("Fast Scan is on the Major (Long) Axis and Slow Scan is on the Minor Axis\n"); break;
1239 case 0x02: printf("Fast Scan is on the Minor (Short) Axis and Slow Scan is on the Major Axis\n"); break;
1240 case 0x03: printf("Reserved\n");
1241 fail("Scan Direction used the reserved value 0x03.\n");
1242 break;
1243 }
1244 printf(" Subpixel Information: ");
1245 switch (x[0x0b]) {
1246 case 0x00: printf("Not defined\n"); break;
1247 case 0x01: printf("RGB vertical stripes\n"); break;
1248 case 0x02: printf("RGB horizontal stripes\n"); break;
1249 case 0x03: printf("Vertical stripes using primary order\n"); break;
1250 case 0x04: printf("Horizontal stripes using primary order\n"); break;
1251 case 0x05: printf("Quad sub-pixels, red at top left\n"); break;
1252 case 0x06: printf("Quad sub-pixels, red at bottom left\n"); break;
1253 case 0x07: printf("Delta (triad) RGB sub-pixels\n"); break;
1254 case 0x08: printf("Mosaic\n"); break;
1255 case 0x09: printf("Quad sub-pixels, RGB + 1 additional color\n"); break;
1256 case 0x0a: printf("Five sub-pixels, RGB + 2 additional colors\n"); break;
1257 case 0x0b: printf("Six sub-pixels, RGB + 3 additional colors\n"); break;
1258 case 0x0c: printf("Clairvoyante, Inc. PenTile Matrix (tm) layout\n"); break;
1259 default: printf("Reserved\n"); break;
1260 }
1261 printf(" Horizontal and vertical dot/pixel pitch: %.2f x %.2f mm\n",
1262 (double)(x[0x0c]) / 100.0, (double)(x[0x0d]) / 100.0);
1263 v = x[0x0e];
1264 printf(" Dithering: ");
1265 switch (v >> 6) {
1266 case 0: printf("None\n"); break;
1267 case 1: printf("Spatial\n"); break;
1268 case 2: printf("Temporal\n"); break;
1269 case 3: printf("Spatial and Temporal\n"); break;
1270 }
1271 printf(" Direct Drive: %s\n", (v & 0x20) ? "Yes" : "No");
1272 printf(" Overdrive %srecommended\n", (v & 0x10) ? "not " : "");
1273 printf(" Deinterlacing: %s\n", (v & 0x08) ? "Yes" : "No");
1274
1275 v = x[0x0f];
1276 printf(" Audio Support: %s\n", (v & 0x80) ? "Yes" : "No");
1277 printf(" Separate Audio Inputs Provided: %s\n", (v & 0x40) ? "Yes" : "No");
1278 printf(" Audio Input Override: %s\n", (v & 0x20) ? "Yes" : "No");
1279 v = x[0x10];
1280 if (v)
1281 printf(" Audio Delay: %s%u ms\n", (v & 0x80) ? "" : "-", (v & 0x7f) * 2);
1282 else
1283 printf(" Audio Delay: no information provided\n");
1284 v = x[0x11];
1285 printf(" Frame Rate/Mode Conversion: ");
1286 switch (v >> 6) {
1287 case 0: printf("None\n"); break;
1288 case 1: printf("Single Buffering\n"); break;
1289 case 2: printf("Double Buffering\n"); break;
1290 case 3: printf("Advanced Frame Rate Conversion\n"); break;
1291 }
1292 if (v & 0x3f)
1293 printf(" Frame Rate Range: %u fps +/- %u fps\n",
1294 x[0x12], v & 0x3f);
1295 else
1296 printf(" Nominal Frame Rate: %u fps\n", x[0x12]);
1297 printf(" Color Bit Depth: %u @ interface, %u @ display\n",
1298 (x[0x13] >> 4) + 1, (x[0x13] & 0xf) + 1);
1299 v = x[0x15] & 3;
1300 if (v) {
1301 printf(" Additional Primary Chromaticities:\n");
1302 unsigned col_x = (x[0x16] << 2) | (x[0x14] >> 6);
1303 unsigned col_y = (x[0x17] << 2) | ((x[0x14] >> 4) & 3);
1304 printf(" Primary 4: 0.%04u, 0.%04u\n",
1305 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
1306 if (v > 1) {
1307 col_x = (x[0x18] << 2) | ((x[0x14] >> 2) & 3);
1308 col_y = (x[0x19] << 2) | (x[0x14] & 3);
1309 printf(" Primary 5: 0.%04u, 0.%04u\n",
1310 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
1311 if (v > 2) {
1312 col_x = (x[0x1a] << 2) | (x[0x15] >> 6);
1313 col_y = (x[0x1b] << 2) | ((x[0x15] >> 4) & 3);
1314 printf(" Primary 6: 0.%04u, 0.%04u\n",
1315 (col_x * 10000) / 1024, (col_y * 10000) / 1024);
1316 }
1317 }
1318 }
1319
1320 v = x[0x1c];
1321 printf(" Response Time %s: %u ms\n",
1322 (v & 0x80) ? "White -> Black" : "Black -> White", v & 0x7f);
1323 v = x[0x1d];
1324 printf(" Overscan: %u%% x %u%%\n", v >> 4, v & 0xf);
9121325 }
9131326
9141327 static double decode_uchar_as_double(unsigned char x)
9231336 unsigned spm = ((x[3] << 16) | (x[2] << 8) | x[1]);
9241337 unsigned i;
9251338
926 if (length < 4)
927 return;
1339 if (length < 4) {
1340 fail("Empty Data Block with length %u.\n", length);
1341 return;
1342 }
9281343
9291344 if (x[0] & 0x40)
9301345 printf(" Speaker count: %u\n", (x[0] & 0x1f) + 1);
9341349 if ((spm >> i) & 1)
9351350 printf(" %s\n", speaker_map[i]);
9361351 }
1352 if ((x[0] & 0xa0) == 0x80)
1353 fail("'Display' flag set, but not the 'SLD' flag.\n");
9371354 if ((x[0] & 0x20) && length >= 7) {
9381355 printf(" Xmax: %u dm\n", x[4]);
9391356 printf(" Ymax: %u dm\n", x[5]);
9791396
9801397 static void cta_sldb(const unsigned char *x, unsigned length)
9811398 {
1399 if (length < 2) {
1400 fail("Empty Data Block with length %u.\n", length);
1401 return;
1402 }
9821403 while (length >= 2) {
9831404 printf(" Channel: %u (%sactive)\n", x[0] & 0x1f,
9841405 (x[0] & 0x20) ? "" : "not ");
9971418 }
9981419 }
9991420
1000 static void cta_vcdb(const unsigned char *x, unsigned length)
1421 void edid_state::cta_vcdb(const unsigned char *x, unsigned length)
10011422 {
10021423 unsigned char d = x[0];
10031424
1425 cta.has_vcdb = true;
1426 if (length < 1) {
1427 fail("Empty Data Block with length %u.\n", length);
1428 return;
1429 }
10041430 printf(" YCbCr quantization: %s\n",
10051431 (d & 0x80) ? "Selectable (via AVI YQ)" : "No Data");
10061432 printf(" RGB quantization: %s\n",
10331459 case 3: printf("Supports both over- and underscan\n"); break;
10341460 }
10351461 printf(" IT scan behavior: ");
1036 switch ((d >> 6) & 0x03) {
1462 switch ((d >> 2) & 0x03) {
10371463 case 0: printf("IT video formats not supported\n"); break;
1038 case 1: printf("Always Overscanned\n"); break;
1039 case 2: printf("Always Underscanned\n"); break;
1464 case 1:
1465 printf("Always Overscanned\n");
1466 // See Table 52 of CTA-861-G for a description of Byte 3
1467 if (cta.byte3 & 0x80)
1468 fail("IT video formats are always overscanned, but bit 7 of Byte 3 of the CTA-861 Extension header is set to underscanned.\n");
1469 break;
1470 case 2:
1471 printf("Always Underscanned\n");
1472 // See Table 52 of CTA-861-G for a description of Byte 3
1473 if (!(cta.byte3 & 0x80))
1474 fail("IT video formats are always underscanned, but bit 7 of Byte 3 of the CTA-861 Extension header is set to overscanned.\n");
1475 break;
10401476 case 3: printf("Supports both over- and underscan\n"); break;
10411477 }
1478 if (((d >> 2) & 0x03) < 2)
1479 warn("IT scan behavior is expected to support underscanned.\n");
10421480 printf(" CE scan behavior: ");
10431481 switch (d & 0x03) {
10441482 case 0: printf("CE video formats not supported\n"); break;
10461484 case 2: printf("Always Underscanned\n"); break;
10471485 case 3: printf("Supports both over- and underscan\n"); break;
10481486 }
1487 if ((d & 0x03) == 0)
1488 warn("'CE video formats not supported' makes no sense.\n");
10491489 }
10501490
10511491 static const char *colorimetry_map[] = {
10631503 {
10641504 unsigned i;
10651505
1066 if (length >= 2) {
1067 for (i = 0; i < ARRAY_SIZE(colorimetry_map); i++) {
1068 if (x[0] & (1 << i))
1069 printf(" %s\n", colorimetry_map[i]);
1070 }
1071 if (x[1] & 0x80)
1072 printf(" DCI-P3\n");
1073 if (x[1] & 0x40)
1074 printf(" ICtCp\n");
1075 }
1506 if (length < 2) {
1507 fail("Empty Data Block with length %u.\n", length);
1508 return;
1509 }
1510 for (i = 0; i < ARRAY_SIZE(colorimetry_map); i++) {
1511 if (x[0] & (1 << i))
1512 printf(" %s\n", colorimetry_map[i]);
1513 }
1514 if (x[1] & 0x80)
1515 printf(" DCI-P3\n");
1516 if (x[1] & 0x40)
1517 printf(" ICtCp\n");
10761518 }
10771519
10781520 static const char *eotf_map[] = {
10861528 {
10871529 unsigned i;
10881530
1089 if (length >= 2) {
1090 printf(" Electro optical transfer functions:\n");
1091 for (i = 0; i < 6; i++) {
1092 if (x[0] & (1 << i)) {
1093 if (i < ARRAY_SIZE(eotf_map)) {
1094 printf(" %s\n", eotf_map[i]);
1095 } else {
1096 printf(" Unknown (%u)\n", i);
1097 fail("Unknown EOTF (%u)\n", i);
1098 }
1099 }
1100 }
1101 printf(" Supported static metadata descriptors:\n");
1102 for (i = 0; i < 8; i++) {
1103 if (x[1] & (1 << i))
1104 printf(" Static metadata type %u\n", i + 1);
1105 }
1531 if (length < 2) {
1532 fail("Empty Data Block with length %u.\n", length);
1533 return;
1534 }
1535 printf(" Electro optical transfer functions:\n");
1536 for (i = 0; i < 6; i++) {
1537 if (x[0] & (1 << i)) {
1538 if (i < ARRAY_SIZE(eotf_map)) {
1539 printf(" %s\n", eotf_map[i]);
1540 } else {
1541 printf(" Unknown (%u)\n", i);
1542 fail("Unknown EOTF (%u).\n", i);
1543 }
1544 }
1545 }
1546 printf(" Supported static metadata descriptors:\n");
1547 for (i = 0; i < 8; i++) {
1548 if (x[1] & (1 << i))
1549 printf(" Static metadata type %u\n", i + 1);
11061550 }
11071551
11081552 if (length >= 3)
11201564
11211565 static void cta_hdr_dyn_metadata_block(const unsigned char *x, unsigned length)
11221566 {
1567 if (length < 3) {
1568 fail("Empty Data Block with length %u.\n", length);
1569 return;
1570 }
11231571 while (length >= 3) {
11241572 unsigned type_len = x[0];
11251573 unsigned type = x[1] | (x[2] << 8);
11291577 printf(" HDR Dynamic Metadata Type %u\n", type);
11301578 switch (type) {
11311579 case 1:
1132 case 2:
11331580 case 4:
11341581 if (type_len > 2)
11351582 printf(" Version: %u\n", x[3] & 0xf);
11361583 break;
1584 case 2:
1585 if (type_len > 2) {
1586 unsigned version = x[3] & 0xf;
1587 printf(" Version: %u\n", version);
1588 if (version >= 1) {
1589 if (x[3] & 0x10) printf(" Supports SL-HDR1 (ETSI TS 103 433-1)\n");
1590 if (x[3] & 0x20) printf(" Supports SL-HDR2 (ETSI TS 103 433-2)\n");
1591 if (x[3] & 0x40) printf(" Supports SL-HDR3 (ETSI TS 103 433-3)\n");
1592 }
1593 }
1594 break;
11371595 default:
11381596 break;
11391597 }
11461604 {
11471605 unsigned len_hdr = x[0] >> 5;
11481606
1149 if (length < 2)
1150 return;
1607 if (length < 2) {
1608 fail("Empty Data Block with length %u.\n", length);
1609 return;
1610 }
11511611 printf(" VSIFs: %u\n", x[1]);
11521612 if (length < len_hdr + 2)
11531613 return;
11571617 int payload_len = x[0] >> 5;
11581618
11591619 if ((x[0] & 0x1f) == 1 && length >= 4) {
1160 printf(" InfoFrame Type Code %u IEEE OUI: 0x%02x%02x%02x\n",
1161 x[0] & 0x1f, x[3], x[2], x[1]);
1620 unsigned oui = (x[3] << 16) | (x[2] << 8) | x[1];
1621
1622 printf(" InfoFrame Type Code %u, OUI %s\n",
1623 x[0] & 0x1f, ouitohex(oui).c_str());
11621624 x += 4;
11631625 length -= 4;
11641626 } else {
11711633 }
11721634 }
11731635
1636 void edid_state::cta_displayid_type_7(const unsigned char *x, unsigned length)
1637 {
1638 check_displayid_datablock_revision(x[0], 0x00, 2);
1639
1640 if (length < 21U + ((x[0] & 0x70) >> 4)) {
1641 fail("Empty Data Block with length %u.\n", length);
1642 return;
1643 }
1644 parse_displayid_type_1_7_timing(x + 1, true, 2, true);
1645 }
1646
1647 void edid_state::cta_displayid_type_8(const unsigned char *x, unsigned length)
1648 {
1649 check_displayid_datablock_revision(x[0], 0xe8, 1);
1650 if (length < ((x[0] & 0x08) ? 3 : 2)) {
1651 fail("Empty Data Block with length %u.\n", length);
1652 return;
1653 }
1654
1655 unsigned sz = (x[0] & 0x08) ? 2 : 1;
1656 unsigned type = x[0] >> 6;
1657
1658 if (type) {
1659 fail("Only code type 0 is supported.\n");
1660 return;
1661 }
1662
1663 if (x[0] & 0x20)
1664 printf(" Also supports YCbCr 4:2:0\n");
1665
1666 x++;
1667 length--;
1668 for (unsigned i = 0; i < length / sz; i++) {
1669 unsigned id = x[i * sz];
1670
1671 if (sz == 2)
1672 id |= x[i * sz + 1] << 8;
1673 parse_displayid_type_4_8_timing(type, id, true);
1674 }
1675 }
1676
1677 void edid_state::cta_displayid_type_10(const unsigned char *x, unsigned length)
1678 {
1679 check_displayid_datablock_revision(x[0], 0x70);
1680 if (length < 7U + ((x[0] & 0x70) >> 4)) {
1681 fail("Empty Data Block with length %u.\n", length);
1682 return;
1683 }
1684
1685 unsigned sz = 6U + ((x[0] & 0x70) >> 4);
1686 x++;
1687 length--;
1688 for (unsigned i = 0; i < length / sz; i++)
1689 parse_displayid_type_10_timing(x + i * sz, true);
1690 }
1691
11741692 static void cta_hdmi_audio_block(const unsigned char *x, unsigned length)
11751693 {
11761694 unsigned num_descs;
11771695
1178 if (length < 2)
1179 return;
1696 if (length < 2) {
1697 fail("Empty Data Block with length %u.\n", length);
1698 return;
1699 }
11801700 if (x[0] & 3)
11811701 printf(" Max Stream Count: %u\n", (x[0] & 3) + 1);
11821702 if (x[0] & 4)
12351755 }
12361756 }
12371757
1238 static const char *oui_name(unsigned oui)
1239 {
1240 switch (oui) {
1241 case 0x00001a: return "AMD";
1242 case 0x00044b: return "NVIDIA";
1243 case 0x000c6e: return "ASUS";
1244 case 0x0010fa: return "Apple";
1245 case 0x0014b9: return "MSTAR";
1246 case 0x00d046: return "Dolby";
1247 case 0x00e047: return "InFocus";
1248 case 0xca125c: return "Microsoft";
1249 default: return NULL;
1250 }
1758 void edid_state::cta_ext_block(const unsigned char *x, unsigned length)
1759 {
1760 const char *name;
1761 unsigned oui;
1762 bool reverse = false;
1763 bool audio_block = false;
1764
1765 switch (x[0]) {
1766 case 0x00: data_block = "Video Capability Data Block"; break;
1767 case 0x01: data_block.clear(); break;
1768 case 0x02: data_block = "VESA Video Display Device Data Block"; break;
1769 case 0x03: data_block = "VESA Video Timing Block Extension"; break;
1770 case 0x04: data_block = "Reserved for HDMI Video Data Block"; break;
1771 case 0x05: data_block = "Colorimetry Data Block"; break;
1772 case 0x06: data_block = "HDR Static Metadata Data Block"; break;
1773 case 0x07: data_block = "HDR Dynamic Metadata Data Block"; break;
1774
1775 case 0x0d: data_block = "Video Format Preference Data Block"; break;
1776 case 0x0e: data_block = "YCbCr 4:2:0 Video Data Block"; break;
1777 case 0x0f: data_block = "YCbCr 4:2:0 Capability Map Data Block"; break;
1778 case 0x10: data_block = "Reserved for CTA-861 Miscellaneous Audio Fields"; break;
1779 case 0x11: data_block.clear(); audio_block = true; break;
1780 case 0x12: data_block = "HDMI Audio Data Block"; audio_block = true; break;
1781 case 0x13: data_block = "Room Configuration Data Block"; audio_block = true; break;
1782 case 0x14: data_block = "Speaker Location Data Block"; audio_block = true; break;
1783
1784 case 0x20: data_block = "InfoFrame Data Block"; break;
1785
1786 case 0x34: data_block = "DisplayID Type VII Video Timing Data Block"; break;
1787 case 0x35: data_block = "DisplayID Type VIII Video Timing Data Block"; break;
1788 case 0x42: data_block = "DisplayID Type X Video Timing Data Block"; break;
1789
1790 case 0x78: data_block = "HDMI Forum EDID Extension Override Data Block"; break;
1791 case 0x79: data_block = "HDMI Forum Sink Capability Data Block"; break;
1792 default:
1793 if (x[0] <= 12)
1794 printf(" Unknown CTA-861 Video-Related");
1795 else if (x[0] <= 31)
1796 printf(" Unknown CTA-861 Audio-Related");
1797 else if (x[0] >= 120 && x[0] <= 127)
1798 printf(" Unknown CTA-861 HDMI-Related");
1799 else
1800 printf(" Unknown CTA-861");
1801 printf(" Data Block (extended tag 0x%02x, length %u)\n", x[0], length);
1802 hex_block(" ", x + 1, length);
1803 data_block.clear();
1804 warn("Unknown Extended CTA-861 Data Block 0x%02x.\n", x[0]);
1805 return;
1806 }
1807
1808 // See Table 52 of CTA-861-G for a description of Byte 3
1809 if (audio_block && !(cta.byte3 & 0x40))
1810 fail("audio information is present, but bit 6 of Byte 3 of the CTA-861 Extension header indicates no Basic Audio support.\n");
1811
1812 if (data_block.length())
1813 printf(" %s:\n", data_block.c_str());
1814
1815 switch (x[0]) {
1816 case 0x00: cta_vcdb(x + 1, length); return;
1817 case 0x01:
1818 if (length < 3) {
1819 data_block = std::string("Vendor-Specific Video Data Block");
1820 fail("Invalid length %u < 3.\n", length);
1821 return;
1822 }
1823 oui = (x[3] << 16) + (x[2] << 8) + x[1];
1824 name = oui_name(oui);
1825 if (!name) {
1826 name = oui_name(oui, true);
1827 if (name)
1828 reverse = true;
1829 }
1830 if (!name) {
1831 printf(" Vendor-Specific Video Data Block, OUI %s:\n",
1832 ouitohex(oui).c_str());
1833 hex_block(" ", x + 4, length - 3);
1834 data_block.clear();
1835 warn("Unknown Extended Vendor-Specific Video Data Block, OUI %s.\n",
1836 ouitohex(oui).c_str());
1837 return;
1838 }
1839 data_block = std::string("Vendor-Specific Video Data Block (") + name + ")";
1840 if (reverse)
1841 fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order\n").c_str());
1842 printf(" %s, OUI %s:\n", data_block.c_str(), ouitohex(oui).c_str());
1843 if (oui == 0x90848b)
1844 cta_hdr10plus(x + 4, length - 3);
1845 else if (oui == 0x00d046)
1846 cta_dolby_video(x + 4, length - 3);
1847 else
1848 hex_block(" ", x + 4, length - 3);
1849 return;
1850 case 0x02: cta_vesa_vdddb(x + 1, length); return;
1851 case 0x05: cta_colorimetry_block(x + 1, length); return;
1852 case 0x06: cta_hdr_static_metadata_block(x + 1, length); return;
1853 case 0x07: cta_hdr_dyn_metadata_block(x + 1, length); return;
1854 case 0x0d: cta_vfpdb(x + 1, length); return;
1855 case 0x0e: cta_svd(x + 1, length, true); return;
1856 case 0x0f: cta_y420cmdb(x + 1, length); return;
1857 case 0x11:
1858 if (length < 3) {
1859 data_block = std::string("Vendor-Specific Audio Data Block");
1860 fail("Invalid length %u < 3.\n", length);
1861 return;
1862 }
1863 oui = (x[3] << 16) + (x[2] << 8) + x[1];
1864 name = oui_name(oui);
1865 if (!name) {
1866 name = oui_name(oui, true);
1867 if (name)
1868 reverse = true;
1869 }
1870 if (!name) {
1871 printf(" Vendor-Specific Audio Data Block, OUI %s:\n",
1872 ouitohex(oui).c_str());
1873 hex_block(" ", x + 4, length - 3);
1874 data_block.clear();
1875 warn("Unknown Extended Vendor-Specific Audio Data Block, OUI %s.\n",
1876 ouitohex(oui).c_str());
1877 return;
1878 }
1879 data_block = std::string("Vendor-Specific Audio Data Block (") + name + ")";
1880 if (reverse)
1881 fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order\n").c_str());
1882 printf(" %s, OUI %s:\n", data_block.c_str(), ouitohex(oui).c_str());
1883 if (oui == 0x00d046)
1884 cta_dolby_audio(x + 4, length - 3);
1885 else
1886 hex_block(" ", x + 4, length - 3);
1887 return;
1888 case 0x12: cta_hdmi_audio_block(x + 1, length); return;
1889 case 0x13: cta_rcdb(x + 1, length); return;
1890 case 0x14: cta_sldb(x + 1, length); return;
1891 case 0x20: cta_ifdb(x + 1, length); return;
1892 case 0x34: cta_displayid_type_7(x + 1, length); return;
1893 case 0x35: cta_displayid_type_8(x + 1, length); return;
1894 case 0x42: cta_displayid_type_10(x + 1, length); return;
1895 case 0x78:
1896 cta_hf_eeodb(x + 1, length);
1897 // This must be the first CTA-861 block
1898 if (!cta.first_block)
1899 fail("Block starts at a wrong offset.\n");
1900 return;
1901 case 0x79:
1902 if (!cta.last_block_was_hdmi_vsdb)
1903 fail("HDMI Forum SCDB did not immediately follow the HDMI VSDB.\n");
1904 if (cta.have_hf_scdb || cta.have_hf_vsdb)
1905 fail("Duplicate HDMI Forum VSDB/SCDB.\n");
1906 if (length < 2) {
1907 data_block = std::string("HDMI Forum SCDB");
1908 fail("Invalid length %u < 2.\n", length);
1909 return;
1910 }
1911 if (x[1] || x[2])
1912 printf(" Non-zero SCDB reserved fields!\n");
1913 cta_hf_scdb(x + 3, length - 2);
1914 cta.have_hf_scdb = 1;
1915 return;
1916 }
1917
1918 hex_block(" ", x + 1, length);
12511919 }
12521920
12531921 void edid_state::cta_block(const unsigned char *x)
12541922 {
1255 static int last_block_was_hdmi_vsdb;
1256 static int have_hf_vsdb, have_hf_scdb;
1257 static int first_block = 1;
12581923 unsigned length = x[0] & 0x1f;
12591924 const char *name;
12601925 unsigned oui;
1926 bool reverse = false;
1927 bool audio_block = false;
12611928
12621929 switch ((x[0] & 0xe0) >> 5) {
12631930 case 0x01:
12641931 data_block = "Audio Data Block";
1265 printf(" %s\n", data_block.c_str());
1932 printf(" %s:\n", data_block.c_str());
12661933 cta_audio_block(x + 1, length);
1934 audio_block = true;
12671935 break;
12681936 case 0x02:
12691937 data_block = "Video Data Block";
1270 printf(" %s\n", data_block.c_str());
1271 cta_svd(x + 1, length, 0);
1938 printf(" %s:\n", data_block.c_str());
1939 cta_svd(x + 1, length, false);
12721940 break;
12731941 case 0x03:
12741942 oui = (x[3] << 16) + (x[2] << 8) + x[1];
1275 printf(" Vendor-Specific Data Block, OUI 0x%06x", oui);
12761943 name = oui_name(oui);
1277 if (oui == 0x000c03) {
1278 data_block = "Vendor-Specific Data Block (HDMI)";
1279 cta_hdmi_block(x + 1, length);
1280 last_block_was_hdmi_vsdb = 1;
1281 first_block = 0;
1282 if (edid_minor != 3)
1283 fail("The HDMI Specification uses EDID 1.3, not 1.%u\n", edid_minor);
1284 return;
1285 }
1286 if (oui == 0xc45dd8) {
1287 data_block = "Vendor-Specific Data Block (HDMI Forum)";
1288 if (!last_block_was_hdmi_vsdb)
1289 fail("HDMI Forum VSDB did not immediately follow the HDMI VSDB\n");
1290 if (have_hf_scdb || have_hf_vsdb)
1291 fail("Duplicate HDMI Forum VSDB/SCDB\n");
1292 printf(" (HDMI Forum)\n");
1293 cta_hf_scdb(x + 4, length - 3);
1294 have_hf_vsdb = 1;
1295 } else if (name) {
1296 data_block = std::string("Vendor-Specific Data Block (") + name + ")";
1297 printf(" (%s)\n", name);
1298 hex_block(" ", x + 4, length - 3);
1299 } else {
1300 printf("\n");
1944 if (!name) {
1945 name = oui_name(oui, true);
1946 if (name)
1947 reverse = true;
1948 }
1949 if (!name) {
1950 printf(" Vendor-Specific Data Block, OUI %s:\n", ouitohex(oui).c_str());
13011951 hex_block(" ", x + 4, length - 3);
13021952 data_block.clear();
1303 warn("Unknown Vendor-Specific Data Block, OUI 0x%06x\n", oui);
1304 }
1953 warn("Unknown Vendor-Specific Data Block, OUI %s.\n",
1954 ouitohex(oui).c_str());
1955 return;
1956 }
1957 data_block = std::string("Vendor-Specific Data Block (") + name + ")";
1958 if (reverse)
1959 fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order\n").c_str());
1960 printf(" %s, OUI %s:\n", data_block.c_str(), ouitohex(oui).c_str());
1961 if (oui == 0x000c03) {
1962 cta_hdmi_block(x + 1, length);
1963 cta.last_block_was_hdmi_vsdb = 1;
1964 cta.first_block = 0;
1965 // The HDMI OUI is present, so this EDID represents an HDMI
1966 // interface. And HDMI interfaces must use EDID version 1.3
1967 // according to the HDMI Specification, so check for this.
1968 if (base.edid_minor != 3)
1969 fail("The HDMI Specification requires EDID 1.3 instead of 1.%u.\n",
1970 base.edid_minor);
1971 return;
1972 }
1973 if (oui == 0xc45dd8) {
1974 if (!cta.last_block_was_hdmi_vsdb)
1975 fail("HDMI Forum VSDB did not immediately follow the HDMI VSDB.\n");
1976 if (cta.have_hf_scdb || cta.have_hf_vsdb)
1977 fail("Duplicate HDMI Forum VSDB/SCDB.\n");
1978 cta_hf_scdb(x + 4, length - 3);
1979 cta.have_hf_vsdb = 1;
1980 break;
1981 }
1982 hex_block(" ", x + 4, length - 3);
13051983 break;
13061984 case 0x04:
13071985 data_block = "Speaker Allocation Data Block";
1308 printf(" %s\n", data_block.c_str());
1986 printf(" %s:\n", data_block.c_str());
13091987 cta_sadb(x + 1, length);
1988 audio_block = true;
13101989 break;
13111990 case 0x05:
1312 printf(" VESA DTC Data Block\n");
1313 hex_block(" ", x + 1, length);
1991 data_block = "VESA Display Transfer Characteristics Data Block";
1992 printf(" %s:\n", data_block.c_str());
1993 cta_vesa_dtcdb(x + 1, length);
13141994 break;
13151995 case 0x07:
1316 printf(" Extended tag: ");
1317 switch (x[1]) {
1318 case 0x00:
1319 data_block = "Video Capability Data Block";
1320 printf("%s\n", data_block.c_str());
1321 cta_vcdb(x + 2, length - 1);
1322 break;
1323 case 0x01:
1324 oui = (x[4] << 16) + (x[3] << 8) + x[2];
1325 printf("Vendor-Specific Video Data Block, OUI 0x%06x", oui);
1326 name = oui_name(oui);
1327 if (oui == 0x90848b) {
1328 data_block = "Vendor-Specific Video Data Block (HDR10+)";
1329 printf(" (HDR10+)\n");
1330 cta_hdr10plus(x + 5, length - 4);
1331 } else if (name) {
1332 data_block = std::string("Vendor-Specific Data Block (") + name + ")";
1333 printf(" (%s)\n", name);
1334 hex_block(" ", x + 5, length - 4);
1335 } else {
1336 printf("\n");
1337 hex_block(" ", x + 5, length - 4);
1338 data_block.clear();
1339 warn("Unknown Extended Vendor-Specific Data Block, OUI 0x%06x\n", oui);
1340 }
1341 break;
1342 case 0x02:
1343 printf("VESA Video Display Device Data Block\n");
1344 hex_block(" ", x + 2, length - 1);
1345 break;
1346 case 0x03:
1347 printf("VESA Video Timing Block Extension\n");
1348 hex_block(" ", x + 2, length - 1);
1349 break;
1350 case 0x04:
1351 printf("Reserved for HDMI Video Data Block\n");
1352 hex_block(" ", x + 2, length - 1);
1353 break;
1354 case 0x05:
1355 data_block = "Colorimetry Data Block";
1356 printf("%s\n", data_block.c_str());
1357 cta_colorimetry_block(x + 2, length - 1);
1358 break;
1359 case 0x06:
1360 data_block = "HDR Static Metadata Data Block";
1361 printf("%s\n", data_block.c_str());
1362 cta_hdr_static_metadata_block(x + 2, length - 1);
1363 break;
1364 case 0x07:
1365 data_block = "HDR Dynamic Metadata Data Block";
1366 printf("%s\n", data_block.c_str());
1367 cta_hdr_dyn_metadata_block(x + 2, length - 1);
1368 break;
1369 case 0x0d:
1370 data_block = "Video Format Preference Data Block";
1371 printf("%s\n", data_block.c_str());
1372 cta_vfpdb(x + 2, length - 1);
1373 break;
1374 case 0x0e:
1375 data_block = "YCbCr 4:2:0 Video Data Block";
1376 printf("%s\n", data_block.c_str());
1377 cta_svd(x + 2, length - 1, 1);
1378 break;
1379 case 0x0f:
1380 data_block = "YCbCr 4:2:0 Capability Map Data Block";
1381 printf("%s\n", data_block.c_str());
1382 cta_y420cmdb(x + 2, length - 1);
1383 break;
1384 case 0x10:
1385 printf("Reserved for CTA Miscellaneous Audio Fields\n");
1386 hex_block(" ", x + 2, length - 1);
1387 break;
1388 case 0x11:
1389 printf("Vendor-Specific Audio Data Block\n");
1390 hex_block(" ", x + 2, length - 1);
1391 break;
1392 case 0x12:
1393 data_block = "HDMI Audio Data Block";
1394 printf("%s\n", data_block.c_str());
1395 cta_hdmi_audio_block(x + 2, length - 1);
1396 break;
1397 case 0x13:
1398 data_block = "Room Configuration Data Block";
1399 printf("%s\n", data_block.c_str());
1400 cta_rcdb(x + 2, length - 1);
1401 break;
1402 case 0x14:
1403 data_block = "Speaker Location Data Block";
1404 printf("%s\n", data_block.c_str());
1405 cta_sldb(x + 2, length - 1);
1406 break;
1407 case 0x20:
1408 printf("InfoFrame Data Block\n");
1409 cta_ifdb(x + 2, length - 1);
1410 break;
1411 case 0x78:
1412 data_block = "HDMI Forum EDID Extension Override Data Block";
1413 printf("%s\n", data_block.c_str());
1414 cta_hf_eeodb(x + 2, length - 1);
1415 // This must be the first CTA block
1416 if (!first_block)
1417 fail("Block starts at a wrong offset\n");
1418 break;
1419 case 0x79:
1420 data_block = "HDMI Forum Sink Capability Data Block";
1421 printf("%s\n", data_block.c_str());
1422 if (!last_block_was_hdmi_vsdb)
1423 fail("HDMI Forum SCDB did not immediately follow the HDMI VSDB\n");
1424 if (have_hf_scdb || have_hf_vsdb)
1425 fail("Duplicate HDMI Forum VSDB/SCDB\n");
1426 if (x[2] || x[3])
1427 printf(" Non-zero SCDB reserved fields!\n");
1428 cta_hf_scdb(x + 4, length - 3);
1429 have_hf_scdb = 1;
1430 break;
1431 default:
1432 if (x[1] <= 12)
1433 printf("Unknown CTA Video-Related");
1434 else if (x[1] <= 31)
1435 printf("Unknown CTA Audio-Related");
1436 else if (x[1] >= 120 && x[1] <= 127)
1437 printf("Unknown CTA HDMI-Related");
1438 else
1439 printf("Unknown CTA");
1440 printf(" Data Block (extended tag 0x%02x, length %u)\n", x[1], length - 1);
1441 hex_block(" ", x + 2, length - 1);
1442 data_block.clear();
1443 warn("Unknown Extended CTA Data Block 0x%02x\n", x[1]);
1444 break;
1445 }
1996 cta_ext_block(x + 1, length - 1);
14461997 break;
14471998 default: {
14481999 unsigned tag = (*x & 0xe0) >> 5;
14492000 unsigned length = *x & 0x1f;
1450 printf(" Unknown CTA tag 0x%02x, length %u\n", tag, length);
2001
2002 printf(" Unknown CTA-861 tag 0x%02x, length %u\n", tag, length);
14512003 hex_block(" ", x + 1, length);
14522004 data_block.clear();
1453 warn("Unknown CTA Data Block %u\n", tag);
2005 warn("Unknown CTA-861 Data Block %u.\n", tag);
14542006 break;
14552007 }
14562008 }
1457 first_block = 0;
1458 last_block_was_hdmi_vsdb = 0;
2009
2010 // See Table 52 of CTA-861-G for a description of Byte 3
2011 if (audio_block && !(cta.byte3 & 0x40))
2012 fail("audio information is present, but bit 6 of Byte 3 of the CTA-861 Extension header indicates no Basic Audio support.\n");
2013 cta.first_block = 0;
2014 cta.last_block_was_hdmi_vsdb = 0;
14592015 }
14602016
14612017 void edid_state::preparse_cta_block(const unsigned char *x)
14632019 unsigned version = x[1];
14642020 unsigned offset = x[2];
14652021
2022 if (offset >= 4) {
2023 const unsigned char *detailed;
2024
2025 for (detailed = x + offset; detailed + 17 < x + 127; detailed += 18) {
2026 if (memchk(detailed, 18))
2027 break;
2028 if (detailed[0] || detailed[1])
2029 cta.preparse_total_dtds++;
2030 }
2031 }
2032
14662033 if (version < 3)
14672034 return;
14682035
14692036 for (unsigned i = 4; i < offset; i += (x[i] & 0x1f) + 1) {
14702037 bool for_ycbcr420 = false;
2038 unsigned oui;
14712039
14722040 switch ((x[i] & 0xe0) >> 5) {
2041 case 0x03:
2042 oui = (x[i + 3] << 16) + (x[i + 2] << 8) + x[i + 1];
2043 if (oui == 0x000c03) {
2044 cta.has_hdmi = true;
2045 cta.preparsed_phys_addr = (x[i + 4] << 8) | x[i + 5];
2046 }
2047 break;
14732048 case 0x07:
2049 if (x[i + 1] == 0x0d)
2050 cta.has_vfpdb = true;
2051 if (x[i + 1] == 0x22)
2052 cta.preparse_total_vtdbs++;
2053 if (x[i + 1] == 0x23)
2054 cta.preparse_has_t8vtdb = true;
2055 if (x[i + 1] == 0x32)
2056 cta.preparse_total_vtdbs +=
2057 ((x[i] & 0x1f) - 2) / (6 + ((x[i + 2] & 0x70) >> 4));
14742058 if (x[i + 1] != 0x0e)
14752059 continue;
14762060 for_ycbcr420 = true;
14812065
14822066 if ((vic & 0x7f) <= 64)
14832067 vic &= 0x7f;
1484 preparsed_svds[for_ycbcr420].push_back(vic);
1485 preparsed_has_vic[for_ycbcr420][vic] = true;
2068 cta.preparsed_svds[for_ycbcr420].push_back(vic);
2069 cta.preparsed_has_vic[for_ycbcr420][vic] = true;
14862070 }
14872071 break;
14882072 }
14952079 unsigned offset = x[2];
14962080 const unsigned char *detailed;
14972081
1498 printf("%s Revision %u\n", block.c_str(), version);
2082 // See Table 52 of CTA-861-G for a description of Byte 3
2083
2084 printf(" Revision: %u\n", version);
2085 if (version == 0)
2086 fail("Invalid CTA-861 Extension revision 0.\n");
2087 if (version == 2)
2088 fail("Deprecated CTA-861 Extension revision 2.\n");
2089 if (cta.has_hdmi && version != 3)
2090 fail("The HDMI Specification requires CTA Extension revision 3.\n");
2091 if (version > 3)
2092 warn("Unknown CTA-861 Extension revision %u.\n", version);
14992093
15002094 if (version >= 1) do {
15012095 if (version == 1 && x[3] != 0)
1502 fail("Non-zero byte 3\n");
2096 fail("Non-zero byte 3.\n");
15032097
15042098 if (offset < 4)
15052099 break;
15062100
1507 if (version < 3) {
1508 printf("%u 8-byte timing descriptors\n", (offset - 4) / 8);
1509 if (offset - 4 > 0) {
1510 /* do stuff */
1511 }
1512 }
1513
1514 if (version >= 2) {
2101 if (version < 3 && ((offset - 4) / 8)) {
2102 printf(" 8-byte timing descriptors: %u\n", (offset - 4) / 8);
2103 fail("8-byte descriptors were never used.\n");
2104 }
2105
2106 if (version >= 2) {
15152107 if (x[3] & 0x80)
1516 printf("Underscans PC formats by default\n");
2108 printf(" Underscans IT Video Formats by default\n");
2109 else
2110 warn("IT Video Formats are overscanned by default, but normally this should be underscanned.\n");
15172111 if (x[3] & 0x40)
1518 printf("Basic audio support\n");
2112 printf(" Basic audio support\n");
15192113 if (x[3] & 0x20)
1520 printf("Supports YCbCr 4:4:4\n");
2114 printf(" Supports YCbCr 4:4:4\n");
15212115 if (x[3] & 0x10)
1522 printf("Supports YCbCr 4:2:2\n");
1523 printf("%u native detailed modes\n", x[3] & 0x0f);
1524 }
1525 if (version == 3) {
2116 printf(" Supports YCbCr 4:2:2\n");
2117 // Disable this test: this fails a lot of EDIDs, and there are
2118 // also some corner cases where you only want to receive 4:4:4
2119 // and refuse a fallback to 4:2:2.
2120 // if ((x[3] & 0x30) && (x[3] & 0x30) != 0x30)
2121 // msg(!cta.has_hdmi, "If YCbCr support is indicated, then both 4:2:2 and 4:4:4 %s be supported.\n",
2122 // cta.has_hdmi ? "shall" : "should");
2123 printf(" Native detailed modes: %u\n", x[3] & 0x0f);
2124 if (cta.first_block)
2125 cta.byte3 = x[3];
2126 else if (x[3] != cta.byte3)
2127 fail("Byte 3 must be the same for all CTA-861 Extension Blocks.\n");
2128 if (cta.first_block) {
2129 unsigned native_dtds = x[3] & 0x0f;
2130
2131 cta.native_timings.clear();
2132 if (!native_dtds && !cta.has_vfpdb) {
2133 cta.first_svd_might_be_preferred = true;
2134 } else if (native_dtds > cta.preparse_total_dtds) {
2135 fail("There are more Native DTDs (%u) than DTDs (%u).\n",
2136 native_dtds, cta.preparse_total_dtds);
2137 }
2138 if (native_dtds > cta.preparse_total_dtds)
2139 native_dtds = cta.preparse_total_dtds;
2140 for (unsigned i = 0; i < native_dtds; i++) {
2141 char type[16];
2142
2143 sprintf(type, "DTD %3u", i + 1);
2144 cta.native_timings.push_back(timings_ext(i + 129, type));
2145 }
2146 if (cta.has_hdmi && block_nr != (block_map.saw_block_1 ? 2 : 1))
2147 fail("The HDMI Specification requires that the first Extension Block (that is not a Block Map) is an CTA-861 Extension Block.\n");
2148 }
2149 }
2150 if (version >= 3) {
15262151 unsigned i;
15272152
1528 printf("%u bytes of CTA data blocks\n", offset - 4);
15292153 for (i = 4; i < offset; i += (x[i] & 0x1f) + 1)
15302154 cta_block(x + i);
1531 }
1532
1533 unsigned cnt;
1534 for (detailed = x + offset, cnt = 1; detailed + 18 < x + 127; detailed += 18, cnt++) {
2155
2156 data_block.clear();
2157 if (i != offset)
2158 fail("Offset is %u, but should be %u.\n", offset, i);
2159 }
2160
2161 data_block = "Detailed Timing Descriptors";
2162 base.seen_non_detailed_descriptor = false;
2163 bool first = true;
2164 for (detailed = x + offset; detailed + 17 < x + 127; detailed += 18) {
15352165 if (memchk(detailed, 18))
15362166 break;
1537 data_block = "Detailed Timings #" + std::to_string(cnt);
1538 detailed_timings("", detailed);
1539 }
1540 if (!memchk(detailed, x + 0x7f - detailed)) {
2167 if (first) {
2168 first = false;
2169 printf(" %s:\n", data_block.c_str());
2170 }
2171 detailed_block(detailed);
2172 }
2173 if (!memchk(detailed, x + 127 - detailed)) {
15412174 data_block = "Padding";
1542 fail("CTA-861 padding contains non-zero bytes\n");
2175 fail("CTA-861 padding contains non-zero bytes.\n");
15432176 }
15442177 } while (0);
15452178
15462179 data_block.clear();
1547 if (has_serial_number && has_serial_string)
1548 fail("Both the serial number and the serial string are set\n");
1549 if (!has_cta861_vic_1 && !has_640x480p60_est_timing)
2180 if (base.has_serial_number && base.has_serial_string)
2181 warn("Display Product Serial Number is set, so the Serial Number in the Base EDID should be 0.\n");
2182 if (!cta.has_vic_1 && !base.has_640x480p60_est_timing)
15502183 fail("Required 640x480p60 timings are missing in the established timings"
1551 " and the SVD list (VIC 1)\n");
1552 if ((supported_hdmi_vic_vsb_codes & supported_hdmi_vic_codes) !=
1553 supported_hdmi_vic_codes)
1554 fail("HDMI VIC Codes must have their CTA-861 VIC equivalents in the VSB\n");
1555 }
2184 " and the SVD list (VIC 1).\n");
2185 if ((cta.supported_hdmi_vic_vsb_codes & cta.supported_hdmi_vic_codes) !=
2186 cta.supported_hdmi_vic_codes)
2187 fail("HDMI VIC Codes must have their CTA-861 VIC equivalents in the VSB.\n");
2188 if (!cta.has_vcdb)
2189 warn("Missing VCDB, needed for Set Selectable RGB Quantization to avoid interop issues.\n");
2190 }
2191
2192 void edid_state::cta_resolve_svr(vec_timings_ext::iterator iter)
2193 {
2194 if (iter->svr() == 254) {
2195 iter->flags = cta.t8vtdb.flags;
2196 iter->t = cta.t8vtdb.t;
2197 } else if (iter->svr() <= 144) {
2198 iter->flags = cta.vec_dtds[iter->svr() - 129].flags;
2199 iter->t = cta.vec_dtds[iter->svr() - 129].t;
2200 } else {
2201 iter->flags = cta.vec_vtdbs[iter->svr() - 145].flags;
2202 iter->t = cta.vec_vtdbs[iter->svr() - 145].t;
2203 }
2204 }
2205
2206 void edid_state::cta_resolve_svrs()
2207 {
2208 for (vec_timings_ext::iterator iter = cta.preferred_timings.begin();
2209 iter != cta.preferred_timings.end(); ++iter) {
2210 if (iter->has_svr())
2211 cta_resolve_svr(iter);
2212 }
2213
2214 for (vec_timings_ext::iterator iter = cta.native_timings.begin();
2215 iter != cta.native_timings.end(); ++iter) {
2216 if (iter->has_svr())
2217 cta_resolve_svr(iter);
2218 }
2219 }
2220
2221 void edid_state::check_cta_blocks()
2222 {
2223 unsigned max_pref_prog_hact = 0;
2224 unsigned max_pref_prog_vact = 0;
2225 unsigned max_pref_ilace_hact = 0;
2226 unsigned max_pref_ilace_vact = 0;
2227
2228 data_block = "CTA-861";
2229 for (vec_timings_ext::iterator iter = cta.preferred_timings.begin();
2230 iter != cta.preferred_timings.end(); ++iter) {
2231 if (iter->t.interlaced &&
2232 (iter->t.vact > max_pref_ilace_vact ||
2233 (iter->t.vact == max_pref_ilace_vact && iter->t.hact >= max_pref_ilace_hact))) {
2234 max_pref_ilace_hact = iter->t.hact;
2235 max_pref_ilace_vact = iter->t.vact;
2236 }
2237 if (!iter->t.interlaced &&
2238 (iter->t.vact > max_pref_prog_vact ||
2239 (iter->t.vact == max_pref_prog_vact && iter->t.hact >= max_pref_prog_hact))) {
2240 max_pref_prog_hact = iter->t.hact;
2241 max_pref_prog_vact = iter->t.vact;
2242 }
2243 }
2244
2245 unsigned native_prog = 0;
2246 unsigned native_prog_hact = 0;
2247 unsigned native_prog_vact = 0;
2248 bool native_prog_mixed_resolutions = false;
2249 unsigned native_ilace = 0;
2250 unsigned native_ilace_hact = 0;
2251 unsigned native_ilace_vact = 0;
2252 bool native_ilace_mixed_resolutions = false;
2253
2254 for (vec_timings_ext::iterator iter = cta.native_timings.begin();
2255 iter != cta.native_timings.end(); ++iter) {
2256 if (iter->t.interlaced) {
2257 native_ilace++;
2258 if (!native_ilace_hact) {
2259 native_ilace_hact = iter->t.hact;
2260 native_ilace_vact = iter->t.vact;
2261 } else if (native_ilace_hact != iter->t.hact ||
2262 native_ilace_vact != iter->t.vact) {
2263 native_ilace_mixed_resolutions = true;
2264 }
2265 } else {
2266 native_prog++;
2267 if (!native_prog_hact) {
2268 native_prog_hact = iter->t.hact;
2269 native_prog_vact = iter->t.vact;
2270 } else if (native_prog_hact != iter->t.hact ||
2271 native_prog_vact != iter->t.vact) {
2272 native_prog_mixed_resolutions = true;
2273 }
2274 }
2275 }
2276
2277 if (native_prog_mixed_resolutions)
2278 fail("Native progressive timings are a mix of several resolutions.\n");
2279 if (native_ilace_mixed_resolutions)
2280 fail("Native interlaced timings are a mix of several resolutions.\n");
2281 if (native_ilace && !native_prog)
2282 fail("A native interlaced timing is present, but not a native progressive timing.\n");
2283 if (!native_prog_mixed_resolutions && native_prog > 1)
2284 warn("Multiple native progressive timings are defined.\n");
2285 if (!native_ilace_mixed_resolutions && native_ilace > 1)
2286 warn("Multiple native interlaced timings are defined.\n");
2287
2288 if (!native_prog_mixed_resolutions && native_prog_vact &&
2289 (max_pref_prog_vact > native_prog_vact ||
2290 (max_pref_prog_vact == native_prog_vact && max_pref_prog_hact > native_prog_hact)))
2291 warn("Native progressive resolution of %ux%u is smaller than the max preferred progressive resolution %ux%u.\n",
2292 native_prog_hact, native_prog_vact,
2293 max_pref_prog_hact, max_pref_prog_vact);
2294 if (!native_ilace_mixed_resolutions && native_ilace_vact &&
2295 (max_pref_ilace_vact > native_ilace_vact ||
2296 (max_pref_ilace_vact == native_ilace_vact && max_pref_ilace_hact > native_ilace_hact)))
2297 warn("Native interlaced resolution of %ux%u is smaller than the max preferred interlaced resolution %ux%u.\n",
2298 native_ilace_hact, native_ilace_vact,
2299 max_pref_ilace_hact, max_pref_ilace_vact);
2300 }
00 // SPDX-License-Identifier: MIT
11 /*
2 * Copyright 2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
2 * Copyright 2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
33 *
44 * Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
55 */
99 void edid_state::parse_digital_interface(const unsigned char *x)
1010 {
1111 data_block = "Digital Interface";
12 printf("%s\n", data_block.c_str());
13
14 printf(" Supported Digital Interface: ");
12 printf(" %s:\n", data_block.c_str());
13
14 printf(" Supported Digital Interface: ");
1515 unsigned short v = x[2];
1616 switch (v) {
1717 case 0x00:
1818 printf("Analog Video Input\n");
1919 if (!memchk(x + 2, 12))
20 fail("Bytes 0x02-0x0d should be 0\n");
20 fail("Bytes 0x02-0x0d should be 0.\n");
2121 return;
2222 case 0x01: printf("DVI\n"); break;
2323 case 0x02: printf("DVI Single Link\n"); break;
3131 case 0x0a: printf("Open LDI - Consumer Electronics\n"); break;
3232 default:
3333 printf("Unknown (0x%02x)\n", v);
34 fail("Unknown Digital Interface 0x%02x\n", v);
34 fail("Unknown Digital Interface 0x%02x.\n", v);
3535 break;
3636 }
3737
3838 switch ((x[3]) >> 6) {
3939 case 0x00:
4040 if (!memchk(x + 3, 4))
41 fail("Bytes 0x03-0x06 should be 0\n");
41 fail("Bytes 0x03-0x06 should be 0.\n");
4242 break;
4343 case 0x01:
44 printf(" Version %u.%u Release %u.%u\n", x[3] & 0x3f, x[4], x[5], x[6]);
44 printf(" Version: %u.%u\n Release: %u.%u\n", x[3] & 0x3f, x[4], x[5], x[6]);
4545 if (x[4] > 99)
46 fail("Version number > 99\n");
46 fail("Version number > 99.\n");
4747 if (x[6] > 99)
48 fail("Release number > 99\n");
48 fail("Release number > 99.\n");
4949 break;
5050 case 0x02:
5151 if (x[3] & 0x3f)
52 fail("Bits 5-0 of byte 0x03 should be 0\n");
52 fail("Bits 5-0 of byte 0x03 should be 0.\n");
5353 if (x[5] || x[6])
54 fail("Bytes 0x05-0x06 should be 0\n");
55 printf(" Letter Designation: %c\n", x[4]);
54 fail("Bytes 0x05-0x06 should be 0.\n");
55 printf(" Letter Designation: %c\n", x[4]);
5656 break;
5757 case 0x03:
5858 if (x[3] & 0x3f)
59 fail("Bits 5-0 of byte 0x03 should be 0\n");
60 printf(" Date Code: Year %u Week %u Day %u\n", 1990 + x[4], x[5], x[6]);
59 fail("Bits 5-0 of byte 0x03 should be 0.\n");
60 printf(" Date Code: Year %u Week %u Day %u\n", 1990 + x[4], x[5], x[6]);
6161 if (!x[5] || x[5] > 12)
62 fail("Bad month number\n");
62 fail("Bad month number.\n");
6363 if (!x[6] || x[6] > 31)
64 fail("Bad day number\n");
64 fail("Bad day number.\n");
6565 break;
6666 }
6767
6868 v = x[7];
69 printf(" Data Enable Signal Usage %sAvailable\n",
69 printf(" Data Enable Signal Usage %sAvailable\n",
7070 (v & 0x80) ? "" : "Not ");
7171 if (v & 0x80)
72 printf(" Data Enable Signal %s\n",
73 (v & 0x40) ? "Low" : "High");
72 printf(" Data Enable Signal %s\n",
73 (v & 0x40) ? "High" : "Low");
7474 else if (v & 0x40)
75 fail("Bit 6 of byte 0x07 should be 0\n");
76 printf(" Edge of Shift Clock: ");
75 fail("Bit 6 of byte 0x07 should be 0.\n");
76 printf(" Edge of Shift Clock: ");
7777 switch ((v >> 4) & 0x03) {
7878 case 0: printf("Not specified\n"); break;
7979 case 1: printf("Use rising edge of shift clock\n"); break;
8080 case 2: printf("Use falling edge of shift clock\n"); break;
8181 case 3: printf("Use both edges of shift clock\n"); break;
8282 }
83 printf(" HDCP is %ssupported\n", (v & 0x08) ? "" : "not ");
84 printf(" Digital Receivers do %ssupport Double Clocking of Input Data\n",
85 (v & 0x04) ? "" : "not ");
86 printf(" Packetized Digital Video is %ssupported\n", (v & 0x02) ? "" : "not ");
83 printf(" HDCP is %ssupported\n", (v & 0x08) ? "" : "not ");
84 printf(" Digital Receivers %ssupport Double Clocking of Input Data\n",
85 (v & 0x04) ? "" : "do not ");
86 printf(" Packetized Digital Video is %ssupported\n", (v & 0x02) ? "" : "not ");
8787 if (v & 0x01)
88 fail("Bit 0 of byte 0x07 should be 0\n");
88 fail("Bit 0 of byte 0x07 should be 0.\n");
8989
9090 v = x[8];
91 printf(" Data Formats: ");
91 printf(" Data Formats: ");
9292 switch (v) {
9393 case 0x15: printf("8-Bit Over 8-Bit RGB\n"); break;
9494 case 0x19: printf("12-Bit Over 12-Bit RGB\n"); break;
9797 case 0x49: printf("48-Bit MSB-Aligned RGB (Dual Link - High Color)\n"); break;
9898 default:
9999 printf("Unknown (0x%02x)\n", v);
100 fail("Unknown Data Format 0x%02x\n", v);
100 fail("Unknown Data Format 0x%02x.\n", v);
101101 break;
102102 }
103103 if (x[2] == 0x03 && v != 0x48)
104 fail("Data Format should be 0x48, not 0x%02x\n", v);
104 fail("Data Format should be 0x48, not 0x%02x.\n", v);
105105 if (x[2] == 0x04 && v != 0x49)
106 fail("Data Format should be 0x49, not 0x%02x\n", v);
106 fail("Data Format should be 0x49, not 0x%02x.\n", v);
107107
108108 v = x[9];
109109 if (v) {
110 printf(" Minimum Pixel Clock Frequency Per Link: %u MHz\n", v);
110 printf(" Minimum Pixel Clock Frequency Per Link: %u MHz\n", v);
111111 if (v == 0xff)
112 fail("Invalid Min-PCF 0x%02x\n", v);
112 fail("Invalid Min-PCF 0x%02x.\n", v);
113113 }
114114
115115 v = x[10] | (x[11] << 8);
116116 if (v) {
117 printf(" Maximum Pixel Clock Frequency Per Link: %u MHz\n", v);
117 printf(" Maximum Pixel Clock Frequency Per Link: %u MHz\n", v);
118118 if (v == 0xffff)
119 fail("Invalid Max-PCF 0x%04x\n", v);
119 fail("Invalid Max-PCF 0x%04x.\n", v);
120120 }
121121
122122 v = x[12] | (x[13] << 8);
123123 if (v == 0xffff)
124 printf(" Crossover Frequency: None - Single Link\n");
124 printf(" Crossover Frequency: None - Single Link\n");
125125 else if (v)
126 printf(" Crossover Frequency: %u MHz\n", v);
126 printf(" Crossover Frequency: %u MHz\n", v);
127127 }
128128
129129 void edid_state::parse_display_device(const unsigned char *x)
130130 {
131131 data_block = "Display Device";
132 printf("%s\n", data_block.c_str());
133
134 printf(" Sub-Pixel Layout: ");
132 printf(" %s:\n", data_block.c_str());
133
134 printf(" Sub-Pixel Layout: ");
135135 unsigned char v = x[0x0e];
136136 switch (v) {
137137 case 0x00: printf("Not defined\n"); break;
141141 case 0x04: printf("Quad Pixel - G at bottom right & top left\n"); break;
142142 default:
143143 printf("Unknown (0x%02x)\n", v);
144 fail("Unknown Sub-Pixel Layout 0x%02x\n", v);
145 break;
146 }
147 printf(" Sub-Pixel Configuration: ");
144 fail("Unknown Sub-Pixel Layout 0x%02x.\n", v);
145 break;
146 }
147 printf(" Sub-Pixel Configuration: ");
148148 v = x[0x0f];
149149 switch (v) {
150150 case 0x00: printf("Not defined\n"); break;
154154 case 0x04: printf("Quad Pixel\n"); break;
155155 default:
156156 printf("Unknown (0x%02x)\n", v);
157 fail("Unknown Sub-Pixel Configuration 0x%02x\n", v);
158 break;
159 }
160 printf(" Sub-Pixel Shape: ");
157 fail("Unknown Sub-Pixel Configuration 0x%02x.\n", v);
158 break;
159 }
160 printf(" Sub-Pixel Shape: ");
161161 v = x[0x10];
162162 switch (v) {
163163 case 0x00: printf("Not defined\n"); break;
168168 case 0x05: printf("Elliptical\n"); break;
169169 default:
170170 printf("Unknown (0x%02x)\n", v);
171 fail("Unknown Sub-Pixel Shape 0x%02x\n", v);
171 fail("Unknown Sub-Pixel Shape 0x%02x.\n", v);
172172 break;
173173 }
174174 if (x[0x11])
175 printf(" Horizontal Dot/Pixel Pitch: %.2f mm\n",
175 printf(" Horizontal Dot/Pixel Pitch: %.2f mm\n",
176176 x[0x11] / 100.0);
177177 if (x[0x12])
178 printf(" Vertical Dot/Pixel Pitch: %.2f mm\n",
178 printf(" Vertical Dot/Pixel Pitch: %.2f mm\n",
179179 x[0x12] / 100.0);
180180 v = x[0x13];
181 printf(" Display Device %s a Fixed Pixel Format\n",
181 printf(" Display Device %s a Fixed Pixel Format\n",
182182 (v & 0x80) ? "has" : "does not have");
183 printf(" View Direction: ");
183 printf(" View Direction: ");
184184 switch ((v & 0x60) >> 5) {
185185 case 0x00: printf("Not specified\n"); break;
186186 case 0x01: printf("Direct\n"); break;
187187 case 0x02: printf("Reflected\n"); break;
188188 case 0x03: printf("Direct & Reflected\n"); break;
189189 }
190 printf(" Display Device uses %stransparent background\n",
190 printf(" Display Device uses %stransparent background\n",
191191 (v & 0x10) ? "" : "non-");
192 printf(" Physical Implementation: ");
192 printf(" Physical Implementation: ");
193193 switch ((v & 0x0c) >> 2) {
194194 case 0x00: printf("Not specified\n"); break;
195195 case 0x01: printf("Large Image device for group viewing\n"); break;
196196 case 0x02: printf("Desktop or personal display\n"); break;
197197 case 0x03: printf("Eyepiece type personal display\n"); break;
198198 }
199 printf(" Monitor/display does %ssupport DDC/CI\n",
199 printf(" Monitor/display does %ssupport DDC/CI\n",
200200 (v & 0x02) ? "" : "not ");
201201 if (v & 0x01)
202 fail("Bit 0 of byte 0x13 should be 0\n");
202 fail("Bit 0 of byte 0x13 should be 0.\n");
203203 }
204204
205205 void edid_state::parse_display_caps(const unsigned char *x)
206206 {
207207 data_block = "Display Capabities & Feature Support Set";
208 printf("%s\n", data_block.c_str());
208 printf(" %s:\n", data_block.c_str());
209209
210210 unsigned short v = x[0x14];
211211
212 printf(" Legacy Modes: %s VGA/DOS Legacy Timing Modes are supported\n",
212 printf(" Legacy Modes: %s VGA/DOS Legacy Timing Modes are supported\n",
213213 (v & 0x80) ? "All" : "Not all");
214 printf(" Stereo Video: ");
214 printf(" Stereo Video: ");
215215 switch ((v & 0x70) >> 4) {
216216 case 0x00: printf("No direct stereo\n"); break;
217217 case 0x01: printf("Field seq. stereo via stereo sync signal\n"); break;
219219 case 0x03: printf("auto-stereoscopic, line interleave\n"); break;
220220 default:
221221 printf("Unknown (0x%02x)\n", (v & 0x70) >> 4);
222 fail("Unknown Stereo Video 0x%02x\n", (v & 0x70) >> 4);
223 break;
224 }
225 printf(" Scaler On Board: %s\n", (v & 0x08) ? "Yes" : "No");
226 printf(" Image Centering: %s\n", (v & 0x04) ? "Yes" : "No");
227 printf(" Conditional Update: %s\n", (v & 0x02) ? "Yes" : "No");
228 printf(" Interlaced Video: %s\n", (v & 0x01) ? "Yes" : "No");
222 fail("Unknown Stereo Video 0x%02x.\n", (v & 0x70) >> 4);
223 break;
224 }
225 printf(" Scaler On Board: %s\n", (v & 0x08) ? "Yes" : "No");
226 printf(" Image Centering: %s\n", (v & 0x04) ? "Yes" : "No");
227 printf(" Conditional Update: %s\n", (v & 0x02) ? "Yes" : "No");
228 printf(" Interlaced Video: %s\n", (v & 0x01) ? "Yes" : "No");
229229
230230 v = x[0x15];
231 printf(" Frame Lock: %s\n", (v & 0x80) ? "Yes" : "No");
232 printf(" Frame Rate Conversion: ");
231 printf(" Frame Lock: %s\n", (v & 0x80) ? "Yes" : "No");
232 printf(" Frame Rate Conversion: ");
233233 switch ((v & 0x60) >> 5) {
234234 case 0x00: printf("Not supported\n"); break;
235235 case 0x01: printf("Vertical is converted to a single frequency\n"); break;
237237 case 0x03: printf("Both Vertical & Horizontal are converted to single frequencies\n"); break;
238238 }
239239 if (v & 0x1f)
240 fail("Bits 4-0 of byte 0x15 should be 0\n");
240 fail("Bits 4-0 of byte 0x15 should be 0.\n");
241241 v = x[0x16] | (x[0x17] << 8);
242 printf(" Vertical Frequency: ");
242 printf(" Vertical Frequency: ");
243243 if (!v) {
244244 printf("Not available\n");
245245 } else if (v == 0xffff) {
246246 printf("Reserved\n");
247 fail("Vertical Frequency uses 0xffff (reserved value)\n");
247 fail("Vertical Frequency uses 0xffff (reserved value).\n");
248248 } else {
249249 printf("%.2f kHz\n", v / 100.0);
250250 }
251251 v = x[0x18] | (x[0x19] << 8);
252 printf(" Horizontal Frequency: ");
252 printf(" Horizontal Frequency: ");
253253 if (!v) {
254254 printf("Not available\n");
255255 } else if (v == 0xffff) {
256256 printf("Reserved\n");
257 fail("Horizontal Frequency uses 0xffff (reserved value)\n");
257 fail("Horizontal Frequency uses 0xffff (reserved value).\n");
258258 } else {
259259 printf("%.2f kHz\n", v / 100.0);
260260 }
261261
262262 v = x[0x1a];
263 printf(" Display/Scan Orientation Definition Type: ");
263 printf(" Display/Scan Orientation Definition Type: ");
264264 switch ((v & 0xc0) >> 6) {
265265 case 0x00: printf("Not defined\n"); break;
266266 case 0x01: printf("Fixed Orientation\n"); break;
267267 case 0x02: printf("Pivots: Default Orientation\n"); break;
268268 case 0x03: printf("Pivots: Current Orientation (requires multiple EDID Extension Tables)\n"); break;
269269 }
270 printf(" Screen Orientation: %s\n",
270 printf(" Screen Orientation: %s\n",
271271 (v & 0x20) ? "Portrait" : "Landscape");
272 printf(" Zero Pixel Location: ");
272 printf(" Zero Pixel Location: ");
273273 switch ((v & 0x18) >> 3) {
274274 case 0x00: printf("Upper Left\n"); break;
275275 case 0x01: printf("Upper Right\n"); break;
276276 case 0x02: printf("Lower Left\n"); break;
277277 case 0x03: printf("Lower Right\n"); break;
278278 }
279 printf(" Scan Direction: ");
279 printf(" Scan Direction: ");
280280 switch ((v & 0x06) >> 1) {
281281 case 0x00: printf("Not defined\n"); break;
282282 case 0x01: printf("Fast Scan is on the Major (Long) Axis and Slow Scan is on the Minor Axis\n"); break;
283283 case 0x02: printf("Fast Scan is on the Minor (Short) Axis and Slow Scan is on the Major Axis\n"); break;
284284 case 0x03:
285285 printf("Reserved\n");
286 fail("Scan Direction used the reserved value 0x03\n");
287 break;
288 }
289 printf(" Standalone Projector: %s\n",
286 fail("Scan Direction used the reserved value 0x03.\n");
287 break;
288 }
289 printf(" Standalone Projector: %s\n",
290290 (v & 0x01) ? "Yes" : "No");
291291
292292 v = x[0x1b];
293 printf(" Default Color/Luminance Decoding: ");
293 printf(" Default Color/Luminance Decoding: ");
294294 switch (v) {
295295 case 0x00: printf("Not defined\n"); break;
296296 case 0x01: printf("BGR\n"); break;
309309 case 0x0e: printf("Monochrome\n"); break;
310310 default:
311311 printf("Unknown (0x%02x)\n", v);
312 fail("Unknown Default Color/Luminance Decoding 0x%02x\n", v);
312 fail("Unknown Default Color/Luminance Decoding 0x%02x.\n", v);
313313 break;
314314 }
315315 v = x[0x1c];
316 printf(" Preferred Color/Luminance Decoder: ");
316 printf(" Preferred Color/Luminance Decoder: ");
317317 switch (v) {
318318 case 0x00: printf("Uses Default Decoding\n"); break;
319319 case 0x01: printf("BGR\n"); break;
322322 case 0x04: printf("Monochrome\n"); break;
323323 default:
324324 printf("Unknown (0x%02x)\n", v);
325 fail("Unknown Preferred Color/Luminance Decoding 0x%02x\n", v);
325 fail("Unknown Preferred Color/Luminance Decoding 0x%02x.\n", v);
326326 break;
327327 }
328328 v = x[0x1d];
329329 if (v && (x[0x1e] & 0xfc)) {
330 printf(" Color/Luminance Decoding Capabilities:\n");
331 printf(" BGR: %s\n", (v & 0x80) ? "Yes" : "No");
332 printf(" Y/C (S-Video) NTSC: %s\n", (v & 0x40) ? "Yes" : "No");
333 printf(" Y/C (S-Video) PAL: %s\n", (v & 0x20) ? "Yes" : "No");
334 printf(" Y/C (S-Video) SECAM: %s\n", (v & 0x10) ? "Yes" : "No");
335 printf(" YCrCb 4:4:4 per SMPTE 293M & 294M: %s\n", (v & 0x08) ? "Yes" : "No");
336 printf(" YCrCb 4:2:2 per SMPTE 293M & 294M: %s\n", (v & 0x04) ? "Yes" : "No");
337 printf(" YCrCb 4:2:0 per SMPTE 293M & 294M: %s\n", (v & 0x02) ? "Yes" : "No");
338 printf(" YCrCb per SMPTE 260M (Legacy HDTV): %s\n", (v & 0x01) ? "Yes" : "No");
330 printf(" Color/Luminance Decoding Capabilities:\n");
331 printf(" BGR: %s\n", (v & 0x80) ? "Yes" : "No");
332 printf(" Y/C (S-Video) NTSC: %s\n", (v & 0x40) ? "Yes" : "No");
333 printf(" Y/C (S-Video) PAL: %s\n", (v & 0x20) ? "Yes" : "No");
334 printf(" Y/C (S-Video) SECAM: %s\n", (v & 0x10) ? "Yes" : "No");
335 printf(" YCrCb 4:4:4 per SMPTE 293M & 294M: %s\n", (v & 0x08) ? "Yes" : "No");
336 printf(" YCrCb 4:2:2 per SMPTE 293M & 294M: %s\n", (v & 0x04) ? "Yes" : "No");
337 printf(" YCrCb 4:2:0 per SMPTE 293M & 294M: %s\n", (v & 0x02) ? "Yes" : "No");
338 printf(" YCrCb per SMPTE 260M (Legacy HDTV): %s\n", (v & 0x01) ? "Yes" : "No");
339339 v = x[0x1e];
340 printf(" YPbPr per SMPTE 240M (Legacy HDTV): %s\n", (v & 0x80) ? "Yes" : "No");
341 printf(" YCrCb per SMPTE 274M (Modern HDTV): %s\n", (v & 0x40) ? "Yes" : "No");
342 printf(" YPbPr per SMPTE 274M (Modern HDTV): %s\n", (v & 0x20) ? "Yes" : "No");
343 printf(" Y B-Y R-Y BetaCam (Sony): %s\n", (v & 0x10) ? "Yes" : "No");
344 printf(" Y B-Y R-Y M-2 (Matsushita): %s\n", (v & 0x08) ? "Yes" : "No");
345 printf(" Monochrome: %s\n", (v & 0x04) ? "Yes" : "No");
346 } else {
347 printf(" Color/Luminance Decoding Capabilities: None\n");
340 printf(" YPbPr per SMPTE 240M (Legacy HDTV): %s\n", (v & 0x80) ? "Yes" : "No");
341 printf(" YCrCb per SMPTE 274M (Modern HDTV): %s\n", (v & 0x40) ? "Yes" : "No");
342 printf(" YPbPr per SMPTE 274M (Modern HDTV): %s\n", (v & 0x20) ? "Yes" : "No");
343 printf(" Y B-Y R-Y BetaCam (Sony): %s\n", (v & 0x10) ? "Yes" : "No");
344 printf(" Y B-Y R-Y M-2 (Matsushita): %s\n", (v & 0x08) ? "Yes" : "No");
345 printf(" Monochrome: %s\n", (v & 0x04) ? "Yes" : "No");
346 } else {
347 printf(" Color/Luminance Decoding Capabilities: None\n");
348348 }
349349 if (v & 0x03)
350 fail("Bits 1-0 of byte 0x1e should be 0\n");
350 fail("Bits 1-0 of byte 0x1e should be 0.\n");
351351
352352 v = x[0x1f];
353 printf(" Dithering: %s\n", (v & 0x80) ? "Yes" : "No");
353 printf(" Dithering: %s\n", (v & 0x80) ? "Yes" : "No");
354354 if (v & 0x7f)
355 fail("Bits 6-0 of byte 0x1f should be 0\n");
355 fail("Bits 6-0 of byte 0x1f should be 0.\n");
356356 v = x[0x20];
357 printf(" Supported Color Bit-Depth of Sub-Channel 0 (Blue): ");
358 if (!v) {
359 printf("No Information\n");
360 } else if (v <= 16) {
361 printf("%u\n", v);
362 } else {
363 printf("Reserved (0x%02x)\n", v);
364 fail("Supported Color Bit-Depth of Sub-Channel Blue value is 0x%02x\n", v);
357 printf(" Supported Color Bit-Depth of Sub-Channel 0 (Blue): ");
358 if (!v) {
359 printf("No Information\n");
360 } else if (v <= 16) {
361 printf("%u\n", v);
362 } else {
363 printf("Reserved (0x%02x)\n", v);
364 fail("Supported Color Bit-Depth of Sub-Channel Blue value is 0x%02x.\n", v);
365365 }
366366 v = x[0x21];
367 printf(" Supported Color Bit-Depth of Sub-Channel 1 (Green): ");
368 if (!v) {
369 printf("No Information\n");
370 } else if (v <= 16) {
371 printf("%u\n", v);
372 } else {
373 printf("Reserved (0x%02x)\n", v);
374 fail("Supported Color Bit-Depth of Sub-Channel Green value is 0x%02x\n", v);
367 printf(" Supported Color Bit-Depth of Sub-Channel 1 (Green): ");
368 if (!v) {
369 printf("No Information\n");
370 } else if (v <= 16) {
371 printf("%u\n", v);
372 } else {
373 printf("Reserved (0x%02x)\n", v);
374 fail("Supported Color Bit-Depth of Sub-Channel Green value is 0x%02x.\n", v);
375375 }
376376 v = x[0x22];
377 printf(" Supported Color Bit-Depth of Sub-Channel 2 (Red): ");
378 if (!v) {
379 printf("No Information\n");
380 } else if (v <= 16) {
381 printf("%u\n", v);
382 } else {
383 printf("Reserved (0x%02x)\n", v);
384 fail("Supported Color Bit-Depth of Sub-Channel Red value is 0x%02x\n", v);
377 printf(" Supported Color Bit-Depth of Sub-Channel 2 (Red): ");
378 if (!v) {
379 printf("No Information\n");
380 } else if (v <= 16) {
381 printf("%u\n", v);
382 } else {
383 printf("Reserved (0x%02x)\n", v);
384 fail("Supported Color Bit-Depth of Sub-Channel Red value is 0x%02x.\n", v);
385385 }
386386 v = x[0x23];
387 printf(" Supported Color Bit-Depth of Sub-Channel 0 (Cb/Pb): ");
388 if (!v) {
389 printf("No Information\n");
390 } else if (v <= 16) {
391 printf("%u\n", v);
392 } else {
393 printf("Reserved (0x%02x)\n", v);
394 fail("Supported Color Bit-Depth of Sub-Channel Cb/Pb value is 0x%02x\n", v);
387 printf(" Supported Color Bit-Depth of Sub-Channel 0 (Cb/Pb): ");
388 if (!v) {
389 printf("No Information\n");
390 } else if (v <= 16) {
391 printf("%u\n", v);
392 } else {
393 printf("Reserved (0x%02x)\n", v);
394 fail("Supported Color Bit-Depth of Sub-Channel Cb/Pb value is 0x%02x.\n", v);
395395 }
396396 v = x[0x24];
397 printf(" Supported Color Bit-Depth of Sub-Channel 1 (Y): ");
398 if (!v) {
399 printf("No Information\n");
400 } else if (v <= 16) {
401 printf("%u\n", v);
402 } else {
403 printf("Reserved (0x%02x)\n", v);
404 fail("Supported Color Bit-Depth of Sub-Channel Y value is 0x%02x\n", v);
397 printf(" Supported Color Bit-Depth of Sub-Channel 1 (Y): ");
398 if (!v) {
399 printf("No Information\n");
400 } else if (v <= 16) {
401 printf("%u\n", v);
402 } else {
403 printf("Reserved (0x%02x)\n", v);
404 fail("Supported Color Bit-Depth of Sub-Channel Y value is 0x%02x.\n", v);
405405 }
406406 v = x[0x25];
407 printf(" Supported Color Bit-Depth of Sub-Channel 2 (Cr/Pr): ");
408 if (!v) {
409 printf("No Information\n");
410 } else if (v <= 16) {
411 printf("%u\n", v);
412 } else {
413 printf("Reserved (0x%02x)\n", v);
414 fail("Supported Color Bit-Depth of Sub-Channel Cr/Pr value is 0x%02x\n", v);
407 printf(" Supported Color Bit-Depth of Sub-Channel 2 (Cr/Pr): ");
408 if (!v) {
409 printf("No Information\n");
410 } else if (v <= 16) {
411 printf("%u\n", v);
412 } else {
413 printf("Reserved (0x%02x)\n", v);
414 fail("Supported Color Bit-Depth of Sub-Channel Cr/Pr value is 0x%02x.\n", v);
415415 }
416416
417417 v = x[0x26];
418 printf(" Aspect Ratio Conversion Modes: ");
419 if (!v) {
420 printf("None\n");
421 } else {
422 printf(" Full Mode: %s\n", (v & 0x80) ? "Yes" : "No");
423 printf(" Zoom Mode: %s\n", (v & 0x40) ? "Yes" : "No");
424 printf(" Squeeze (Side Bars/Letterbox) Mode: %s\n", (v & 0x20) ? "Yes" : "No");
425 printf(" Variable (Expand/Shrink) Mode: %s\n", (v & 0x10) ? "Yes" : "No");
418 printf(" Aspect Ratio Conversion Modes:");
419 if (!v) {
420 printf(" None\n");
421 } else {
422 printf("\n");
423 printf(" Full Mode: %s\n", (v & 0x80) ? "Yes" : "No");
424 printf(" Zoom Mode: %s\n", (v & 0x40) ? "Yes" : "No");
425 printf(" Squeeze (Side Bars/Letterbox) Mode: %s\n", (v & 0x20) ? "Yes" : "No");
426 printf(" Variable (Expand/Shrink) Mode: %s\n", (v & 0x10) ? "Yes" : "No");
426427 }
427428 if (v & 0x0f)
428 fail("Bits 3-0 of byte 0x26 should be 0\n");
429 fail("Bits 3-0 of byte 0x26 should be 0.\n");
429430 }
430431
431432 void edid_state::parse_display_xfer(const unsigned char *x)
432433 {
433434 data_block = "Display Transfer Characteristics - Gamma";
434 printf("%s\n", data_block.c_str());
435 printf(" %s:\n", data_block.c_str());
435436
436437 unsigned char v = x[0x51];
437438 unsigned num_entries = v & 0x3f;
438439
439440 switch ((v & 0xc0) >> 6) {
440441 case 0x00:
441 printf(" No Display Transfer Characteristics\n");
442 printf(" No Display Transfer Characteristics\n");
442443 if (!memchk(x + 0x51, 46))
443 fail("Bytes 0x51-0x7e should be 0\n");
444 fail("Bytes 0x51-0x7e should be 0.\n");
444445 return;
445446 case 0x03:
446 fail("Bits 7-6 of byte 0x51 cannot be 0x03\n");
447 fail("Bits 7-6 of byte 0x51 cannot be 0x03.\n");
447448 return;
448449 default:
449450 break;
451452
452453 if (((v & 0xc0) >> 6) == 0x01) {
453454 if (!num_entries || num_entries > 45)
454 fail("White Curve with %u entries\n", num_entries);
455 fail("White Curve with %u entries.\n", num_entries);
455456 if (num_entries > 45)
456457 num_entries = 45;
457458 if (!memchk(x + 0x52 + num_entries, 45 - num_entries))
458 fail("Bytes 0x%02x-0x7e should be 0\n", 0x52 + num_entries);
459 printf(" White Curve (%u entries):\n", num_entries);
460 hex_block(" ", x + 0x52, num_entries, false, 15);
459 fail("Bytes 0x%02x-0x7e should be 0.\n", 0x52 + num_entries);
460 printf(" White Curve (%u entries):\n", num_entries);
461 hex_block(" ", x + 0x52, num_entries, false, 15);
461462 } else {
462463 if (!num_entries || num_entries > 15)
463 fail("Sub-Channel Curve with %u entries\n", num_entries);
464 fail("Sub-Channel Curve with %u entries.\n", num_entries);
464465 if (num_entries > 15)
465466 num_entries = 15;
466 printf(" Sub-Channel 0 (Blue) Curve with %u entries:\n", num_entries);
467 hex_block(" ", x + 0x52, num_entries, false);
467 printf(" Sub-Channel 0 (Blue) Curve with %u entries:\n", num_entries);
468 hex_block(" ", x + 0x52, num_entries, false);
468469 if (!memchk(x + 0x52 + num_entries, 15 - num_entries))
469 fail("Bytes 0x%02x-0x7e should be 0\n", 0x52 + num_entries);
470 printf(" Sub-Channel 1 (Green) Curve with %u entries:\n", num_entries);
471 hex_block(" ", x + 0x52 + 15, num_entries, false);
470 fail("Bytes 0x%02x-0x7e should be 0.\n", 0x52 + num_entries);
471 printf(" Sub-Channel 1 (Green) Curve with %u entries:\n", num_entries);
472 hex_block(" ", x + 0x52 + 15, num_entries, false);
472473 if (!memchk(x + 0x52 + 15 + num_entries, 15 - num_entries))
473 fail("Bytes 0x%02x-0x7e should be 0\n", 0x52 + 15 + num_entries);
474 printf(" Sub-Channel 2 (Red) Curve with %u entries:\n", num_entries);
475 hex_block(" ", x + 0x52 + 30, num_entries, false);
474 fail("Bytes 0x%02x-0x7e should be 0.\n", 0x52 + 15 + num_entries);
475 printf(" Sub-Channel 2 (Red) Curve with %u entries:\n", num_entries);
476 hex_block(" ", x + 0x52 + 30, num_entries, false);
476477 if (!memchk(x + 0x52 + 30 + num_entries, 15 - num_entries))
477 fail("Bytes 0x%02x-0x7e should be 0\n", 0x52 + 30 + num_entries);
478 fail("Bytes 0x%02x-0x7e should be 0.\n", 0x52 + 30 + num_entries);
478479 }
479480 }
480481
481482 void edid_state::parse_di_ext_block(const unsigned char *x)
482483 {
483 printf("%s Version %u\n", block.c_str(), x[1]);
484 printf(" Version: %u\n", x[1]);
484485 if (!x[1])
485 fail("Invalid version 0\n");
486 fail("Invalid version 0.\n");
486487
487488 parse_digital_interface(x);
488489 parse_display_device(x);
489490 parse_display_caps(x);
490491 if (!memchk(x + 0x27, 16))
491 fail("Bytes 0x27-0x36 should be 0\n");
492 fail("Bytes 0x27-0x36 should be 0.\n");
492493 if (!memchk(x + 0x37, 17))
493 fail("Bytes 0x37-0x47 should be 0\n");
494 fail("Bytes 0x37-0x47 should be 0.\n");
494495 if (!memchk(x + 0x48, 9))
495 fail("Bytes 0x48-0x50 should be 0\n");
496 fail("Bytes 0x48-0x50 should be 0.\n");
496497 parse_display_xfer(x);
497498 }
00 // SPDX-License-Identifier: MIT
11 /*
22 * Copyright 2006-2012 Red Hat, Inc.
3 * Copyright 2018-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright 2018-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
44 *
55 * Author: Adam Jackson <ajax@nwnk.net>
66 * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl>
77 */
88
9 #include <string.h>
109 #include <math.h>
1110
1211 #include "edid-decode.h"
4039 printf("\n");
4140 }
4241
43 static void check_displayid_datablock_revision(const unsigned char *x)
44 {
45 unsigned char revisionflags = x[1];
46
47 if (revisionflags)
48 warn("Unexpected revision and flags (0x%02x != 0)\n", revisionflags);
42 void edid_state::check_displayid_datablock_revision(unsigned char hdr,
43 unsigned char valid_flags,
44 unsigned char rev)
45 {
46 unsigned char revision = hdr & 7;
47 unsigned char flags = hdr & ~7 & ~valid_flags;
48
49 if (revision != rev)
50 warn("Unexpected revision (%u != %u).\n", revision, rev);
51 if (flags)
52 warn("Unexpected flags (0x%02x).\n", flags);
4953 }
5054
5155 static bool check_displayid_datablock_length(const unsigned char *x,
5660 unsigned char len = x[2];
5761
5862 if (expectedlenmin == expectedlenmax && len != expectedlenmax)
59 fail("DisplayID payload length is different than expected (%d != %d)\n", len, expectedlenmax);
63 fail("DisplayID payload length is different than expected (%d != %d).\n", len, expectedlenmax);
6064 else if (len > expectedlenmax)
61 fail("DisplayID payload length is greater than expected (%d > %d)\n", len, expectedlenmax);
65 fail("DisplayID payload length is greater than expected (%d > %d).\n", len, expectedlenmax);
6266 else if (len < expectedlenmin)
63 fail("DisplayID payload length is less than expected (%d < %d)\n", len, expectedlenmin);
67 fail("DisplayID payload length is less than expected (%d < %d).\n", len, expectedlenmin);
6468 else
6569 return true;
6670
7175
7276 // tag 0x00 and 0x20
7377
74 static void parse_displayid_product_id(const unsigned char *x, bool is_v2)
75 {
76 check_displayid_datablock_revision(x);
77
78 if (is_v2)
79 printf(" Vendor IEEE OUI: %02X-%02X-%02X\n", x[3], x[4], x[5]);
80 else
78 void edid_state::parse_displayid_product_id(const unsigned char *x)
79 {
80 check_displayid_datablock_revision(x[1]);
81
82 dispid.has_product_identification = true;
83 if (dispid.version >= 0x20) {
84 unsigned oui = (x[3] << 16) | (x[4] << 8) | x[5];
85 printf(" Vendor OUI %s\n", ouitohex(oui).c_str());
86 } else {
8187 printf(" Vendor ID: %c%c%c\n", x[3], x[4], x[5]);
88 }
8289 printf(" Product Code: %u\n", x[6] | (x[7] << 8));
8390 unsigned sn = x[8] | (x[9] << 8) | (x[10] << 16) | (x[11] << 24);
84 if (sn)
85 printf(" Serial Number: %u\n", sn);
91 if (sn) {
92 if (hide_serial_numbers)
93 printf(" Serial Number: ...\n");
94 else
95 printf(" Serial Number: %u\n", sn);
96 }
8697 unsigned week = x[12];
8798 unsigned year = 2000 + x[13];
8899 printf(" %s: %u",
124135 }
125136 }
126137
127 static void parse_displayid_parameters(const unsigned char *x)
128 {
129 check_displayid_datablock_revision(x);
138 void edid_state::parse_displayid_parameters(const unsigned char *x)
139 {
140 check_displayid_datablock_revision(x[1]);
130141
131142 if (!check_displayid_datablock_length(x, 12, 12))
132143 return;
133144
145 dispid.has_display_parameters = true;
134146 printf(" Image size: %.1f mm x %.1f mm\n",
135147 ((x[4] << 8) + x[3]) / 10.0,
136148 ((x[6] << 8) + x[5]) / 10.0);
167179
168180 void edid_state::parse_displayid_color_characteristics(const unsigned char *x)
169181 {
170 check_displayid_datablock_revision(x);
182 check_displayid_datablock_revision(x[1], 0xf8, 1);
171183
172184 unsigned cie_year = (x[1] & 0x80) ? 1976 : 1931;
173185 unsigned xfer_id = (x[1] >> 3) & 0x0f;
180192 printf(" Uses %u CIE (x, y) coordinates\n", cie_year);
181193 if (xfer_id) {
182194 printf(" Associated with Transfer Characteristics Data Block with Identifier %u\n", xfer_id);
183 if (!(preparse_xfer_ids & (1 << xfer_id)))
184 fail("Missing Transfer Characteristics Data Block with Identifier %u\n", xfer_id);
195 if (!(dispid.preparse_xfer_ids & (1 << xfer_id)))
196 fail("Missing Transfer Characteristics Data Block with Identifier %u.\n", xfer_id);
185197 }
186198 if (!num_primaries) {
187199 printf(" Uses color space %s\n",
208220
209221 // tag 0x03 and 0x22
210222
211 void edid_state::parse_displayid_type_1_7_timing(const unsigned char *x, bool type7)
223 void edid_state::parse_displayid_type_1_7_timing(const unsigned char *x,
224 bool type7, unsigned block_rev, bool is_cta)
212225 {
213226 struct timings t = {};
214227 unsigned hbl, vbl;
215228 std::string s("aspect ");
216229
230 dispid.has_type_1_7 = true;
217231 t.pixclk_khz = (type7 ? 1 : 10) * (1 + (x[0] + (x[1] << 8) + (x[2] << 16)));
218232 switch (x[3] & 0xf) {
219233 case 0:
257271 break;
258272 default:
259273 s += "undefined";
260 fail("Unknown aspect 0x%02x\n", x[3] & 0xf);
274 if ((x[3] & 0xf) > (dispid.version <= 0x12 ? 7 : 8))
275 fail("Unknown aspect 0x%02x.\n", x[3] & 0xf);
261276 break;
262277 }
263278 switch ((x[3] >> 5) & 0x3) {
272287 break;
273288 case 3:
274289 s += ", reserved";
275 fail("Reserved stereo 0x03\n");
276 break;
277 }
290 fail("Reserved stereo 0x03.\n");
291 break;
292 }
293 if (block_rev >= 2 && (x[3] & 0x80))
294 s += ", YCbCr 4:2:0";
278295
279296 t.hact = 1 + (x[4] | (x[5] << 8));
280297 hbl = 1 + (x[6] | (x[7] << 8));
297314 t.vsync /= 2;
298315 t.vbp /= 2;
299316 }
300 if (x[3] & 0x80)
317 if (block_rev < 2 && (x[3] & 0x80)) {
301318 s += ", preferred";
302
303 print_detailed_timings(" ", t, s.c_str());
319 dispid.preferred_timings.push_back(timings_ext(t, "DTD", s));
320 }
321
322 print_timings(" ", &t, "DTD", s.c_str(), true);
323 if (is_cta) {
324 timings_ext te(t, "DTD", s);
325 cta.vec_vtdbs.push_back(te);
326
327 // Only use a T7VTDB if is cannot be expressed by a
328 // DTD or a T10VTDB.
329 if (t.hact <= 4095 && t.vact <= 4095 &&
330 t.pixclk_khz <= 655360 && !(x[3] & 0xe0)) {
331 fail("This T7VTDB can be represented as an 18-byte DTD.\n");
332 return;
333 }
334 unsigned htot = t.hact + t.hfp + t.hsync + t.hbp;
335 unsigned vtot = t.vact + t.vfp + t.vsync + t.vbp;
336 unsigned refresh = (t.pixclk_khz * 1000ULL) / (htot * vtot);
337
338 for (unsigned rb = 0; rb <= 3; rb++) {
339 timings cvt_t = calc_cvt_mode(refresh, t.hact, t.vact, rb);
340 if (match_timings(t, cvt_t)) {
341 fail("This T7VTDB can be represented as a T10VTDB.\n");
342 return;
343 }
344 }
345 timings cvt_t = calc_cvt_mode(refresh, t.hact, t.vact, 3 | RB_FLAG);
346 if (match_timings(t, cvt_t))
347 fail("This T7VTDB can be represented as a T10VTDB.\n");
348 }
304349 }
305350
306351 // tag 0x04
350395 break;
351396 case 3:
352397 s += ", reserved";
353 fail("Reserved stereo 0x03\n");
354 break;
355 }
356 if (x[3] & 0x80)
398 fail("Reserved stereo 0x03.\n");
399 break;
400 }
401 if (x[3] & 0x80) {
357402 s += ", preferred";
358
359 print_detailed_timings(" ", t, s.c_str());
403 dispid.preferred_timings.push_back(timings_ext(t, "DTD", s));
404 }
405
406 print_timings(" ", &t, "DTD", s.c_str(), true);
360407 }
361408
362409 // tag 0x05
408455 break;
409456 default:
410457 s += "undefined";
411 fail("Unknown aspect 0x%02x\n", x[3] & 0xf);
458 if ((x[3] & 0xf) > (dispid.version <= 0x12 ? 7 : 8))
459 fail("Unknown aspect 0x%02x.\n", x[3] & 0xf);
412460 break;
413461 }
414462
418466
419467 edid_cvt_mode(1 + (x[2] & 0x7f), t);
420468
421 if (x[0] & 0x80)
469 if (x[0] & 0x80) {
422470 s += ", preferred";
423
424 print_detailed_timings(" ", t, s.c_str());
471 dispid.preferred_timings.push_back(timings_ext(t, "CVT", s));
472 }
473
474 print_timings(" ", &t, "CVT", s.c_str());
425475 }
426476
427477 // tag 0x06 and 0x23
428478
429 void edid_state::parse_displayid_type_4_8_timing(unsigned char type, unsigned short id)
479 void edid_state::parse_displayid_type_4_8_timing(unsigned char type, unsigned short id, bool is_cta)
430480 {
431481 const struct timings *t = NULL;
432 char suffix[16];
482 char type_name[16];
433483
434484 switch (type) {
435 case 0: t = find_dmt_id(id); strcpy(suffix, "DMT"); break;
436 case 1: t = find_vic_id(id); sprintf(suffix, "VIC %3u", id); break;
437 case 2: t = find_hdmi_vic_id(id); sprintf(suffix, "HDMI VIC %u", id); break;
485 case 0: t = find_dmt_id(id); sprintf(type_name, "DMT 0x%02x", id); break;
486 case 1: t = find_vic_id(id); sprintf(type_name, "VIC %3u", id); break;
487 case 2: t = find_hdmi_vic_id(id); sprintf(type_name, "HDMI VIC %u", id); break;
438488 default: break;
439489 }
440490 if (t)
441 print_timings(" ", t, suffix);
491 print_timings(" ", t, type_name);
492 if (t && is_cta && !cta.t8vtdb.is_valid()) {
493 timings_ext te(*t, type_name, "");
494 cta.t8vtdb = te;
495 }
442496 }
443497
444498 // tag 0x09
445499
446 static void parse_displayid_video_timing_range_limits(const unsigned char *x)
447 {
448 check_displayid_datablock_revision(x);
500 void edid_state::parse_displayid_video_timing_range_limits(const unsigned char *x)
501 {
502 check_displayid_datablock_revision(x[1]);
449503
450504 if (!check_displayid_datablock_length(x, 15, 15))
451505 return;
468522
469523 // tag 0x0a and 0x0b
470524
471 static void parse_displayid_string(const unsigned char *x)
472 {
473 check_displayid_datablock_revision(x);
525 void edid_state::parse_displayid_string(const unsigned char *x)
526 {
527 check_displayid_datablock_revision(x[1]);
474528 if (check_displayid_datablock_length(x))
475 printf(" %s\n", extract_string(x + 3, x[2]));
529 printf(" Text: '%s'\n", extract_string(x + 3, x[2]));
476530 }
477531
478532 // tag 0x0c
479533
480 static void parse_displayid_display_device(const unsigned char *x)
481 {
482 check_displayid_datablock_revision(x);
534 void edid_state::parse_displayid_display_device(const unsigned char *x)
535 {
536 check_displayid_datablock_revision(x[1]);
483537
484538 if (!check_displayid_datablock_length(x, 13, 13))
485539 return;
567621 case 0x01: printf("Fast Scan is on the Major (Long) Axis and Slow Scan is on the Minor Axis\n"); break;
568622 case 0x02: printf("Fast Scan is on the Minor (Short) Axis and Slow Scan is on the Major Axis\n"); break;
569623 case 0x03: printf("Reserved\n");
570 fail("Scan Direction used the reserved value 0x03\n");
624 fail("Scan Direction used the reserved value 0x03.\n");
571625 break;
572626 }
573627 printf(" Sub-pixel layout/configuration/shape: ");
597651
598652 // tag 0x0d
599653
600 static void parse_displayid_intf_power_sequencing(const unsigned char *x)
601 {
602 check_displayid_datablock_revision(x);
654 void edid_state::parse_displayid_intf_power_sequencing(const unsigned char *x)
655 {
656 check_displayid_datablock_revision(x[1]);
603657
604658 if (!check_displayid_datablock_length(x, 6, 6))
605659 return;
616670
617671 void edid_state::parse_displayid_transfer_characteristics(const unsigned char *x)
618672 {
619 check_displayid_datablock_revision(x);
673 check_displayid_datablock_revision(x[1], 0xf0, 1);
620674
621675 unsigned xfer_id = x[1] >> 4;
622676 bool first_is_white = x[3] & 0x80;
624678
625679 if (xfer_id) {
626680 printf(" Transfer Characteristics Data Block Identifier: %u\n", xfer_id);
627 if (!(preparse_color_ids & (1 << xfer_id)))
628 fail("Missing Color Characteristics Data Block using Identifier %u\n", xfer_id);
681 if (!(dispid.preparse_color_ids & (1 << xfer_id)))
682 fail("Missing Color Characteristics Data Block using Identifier %u.\n", xfer_id);
629683 }
630684 if (first_is_white)
631685 printf(" The first curve is the 'white' transfer characteristic\n");
659713
660714 // tag 0x0f
661715
662 static void parse_displayid_display_intf(const unsigned char *x)
663 {
664 check_displayid_datablock_revision(x);
716 void edid_state::parse_displayid_display_intf(const unsigned char *x)
717 {
718 check_displayid_datablock_revision(x[1]);
665719
666720 if (!check_displayid_datablock_length(x, 10, 10))
667721 return;
668722
723 dispid.has_display_interface_features = true;
669724 printf(" Interface Type: ");
670725 switch (x[3] >> 4) {
671726 case 0x00:
744799
745800 void edid_state::parse_displayid_stereo_display_intf(const unsigned char *x)
746801 {
747 check_displayid_datablock_revision(x);
802 check_displayid_datablock_revision(x[1], 0xc0, 1);
748803
749804 switch (x[1] >> 6) {
750805 case 0x00: printf(" Timings that explicitly report 3D capability\n"); break;
809864 while (1U + (x[0] & 0x1f) <= len) {
810865 unsigned num_codes = x[0] & 0x1f;
811866 unsigned type = x[0] >> 6;
812 char suffix[16];
867 char type_name[16];
813868
814869 for (unsigned i = 1; i <= num_codes; i++) {
815870 switch (type) {
816871 case 0x00:
817 strcpy(suffix, "DMT");
818 print_timings(" ", find_dmt_id(x[i]), suffix);
872 sprintf(type_name, "DMT 0x%02x", x[i]);
873 print_timings(" ", find_dmt_id(x[i]), type_name);
819874 break;
820875 case 0x01:
821 sprintf(suffix, "VIC %3u", x[i]);
822 print_timings(" ", find_vic_id(x[i]), suffix);
876 sprintf(type_name, "VIC %3u", x[i]);
877 print_timings(" ", find_vic_id(x[i]), type_name);
823878 break;
824879 case 0x02:
825 sprintf(suffix, "HDMI VIC %u", x[i]);
826 print_timings(" ", find_hdmi_vic_id(x[i]), suffix);
880 sprintf(type_name, "HDMI VIC %u", x[i]);
881 print_timings(" ", find_hdmi_vic_id(x[i]), type_name);
827882 break;
828883 }
829884 }
856911 break;
857912 case 3:
858913 s += ", reserved";
859 fail("Reserved stereo 0x03\n");
914 fail("Reserved stereo 0x03.\n");
860915 break;
861916 }
862917 if (x[0] & 0x10)
863918 s += ", refresh rate * (1000/1001) supported";
864 if (x[0] & 0x80)
919
920 t.rb = 2;
921 if ((x[0] & 0x03) == 1)
922 warn("Unexpected use of 'custom reduced blanking'.\n");
923 else if ((x[0] & 0x03) > 1)
924 fail("Invalid Timing Formula.\n");
925
926 edid_cvt_mode(1 + x[6], t);
927
928 if (x[0] & 0x80) {
865929 s += ", preferred";
866
867 switch (x[0] & 0x03) {
868 case 0: t.rb = 2; break;
869 case 1: t.rb = 1; break;
870 default: break;
871 }
872
873 edid_cvt_mode(1 + x[6], t);
874
875 print_detailed_timings(" ", t, s.c_str());
930 dispid.preferred_timings.push_back(timings_ext(t, "CVT", s));
931 }
932
933 print_timings(" ", &t, "CVT", s.c_str());
876934 }
877935
878936 // tag 0x12 and 0x28
879937
880 static void parse_displayid_tiled_display_topology(const unsigned char *x, bool is_v2)
881 {
882 check_displayid_datablock_revision(x);
938 void edid_state::parse_displayid_tiled_display_topology(const unsigned char *x, bool is_v2)
939 {
940 check_displayid_datablock_revision(x[1]);
883941
884942 if (!check_displayid_datablock_length(x, 22, 22))
885943 return;
909967 default: printf("Reserved\n"); break;
910968 }
911969 if (caps & 0x80)
970 printf(" Tiled display consists of a single physical display enclosure\n");
971 else
912972 printf(" Tiled display consists of multiple physical display enclosures\n");
913 else
914 printf(" Tiled display consists of a single physical display enclosure\n");
915973 printf(" Num horizontal tiles: %u Num vertical tiles: %u\n",
916974 num_h_tile + 1, num_v_tile + 1);
917975 printf(" Tile location: %u, %u\n", tile_h_location, tile_v_location);
927985 printf(" Left bevel size: %.1f pixels\n",
928986 pix_mult * x[15] / 10.0);
929987 } else {
930 fail("No bevel information, but the pixel multiplier is non-zero\n");
988 fail("No bevel information, but the pixel multiplier is non-zero.\n");
931989 }
932990 printf(" Tile resolution: %ux%u\n", tile_width + 1, tile_height + 1);
933991 } else if (pix_mult) {
934 fail("No bevel information, but the pixel multiplier is non-zero\n");
992 fail("No bevel information, but the pixel multiplier is non-zero.\n");
935993 }
936994 if (is_v2)
937995 printf(" Tiled Display Manufacturer/Vendor ID: %02X-%02X-%02X\n",
941999 x[0x10], x[0x11], x[0x12]);
9421000 printf(" Tiled Display Product ID Code: %u\n",
9431001 x[0x13] | (x[0x14] << 8));
944 printf(" Tiled Display Serial Number: %u\n",
945 x[0x15] | (x[0x16] << 8) | (x[0x17] << 16)| (x[0x18] << 24));
1002 if (hide_serial_numbers)
1003 printf(" Tiled Display Serial Number: ...\n");
1004 else
1005 printf(" Tiled Display Serial Number: %u\n",
1006 x[0x15] | (x[0x16] << 8) | (x[0x17] << 16)| (x[0x18] << 24));
9461007 }
9471008
9481009 // tag 0x13
9961057 break;
9971058 case 3:
9981059 s += ", reserved";
999 fail("Reserved stereo 0x03\n");
1000 break;
1001 }
1002
1003 if (x[2] & 0x80)
1060 fail("Reserved stereo 0x03.\n");
1061 break;
1062 }
1063
1064 if (x[2] & 0x80) {
10041065 s += ", preferred";
1005
1006 print_detailed_timings(" ", t, s.c_str());
1066 dispid.preferred_timings.push_back(timings_ext(t, "DTD", s));
1067 }
1068
1069 print_timings(" ", &t, "DTD", s.c_str(), true);
10071070 }
10081071
10091072 static std::string ieee7542d(unsigned short fp)
10201083
10211084 // tag 0x21
10221085
1023 static void parse_displayid_parameters_v2(const unsigned char *x)
1024 {
1025 check_displayid_datablock_revision(x);
1086 void edid_state::parse_displayid_parameters_v2(const unsigned char *x)
1087 {
1088 check_displayid_datablock_revision(x[1]);
10261089
10271090 if (!check_displayid_datablock_length(x, 29, 29))
10281091 return;
10301093 unsigned hor_size = (x[4] << 8) + x[3];
10311094 unsigned vert_size = (x[6] << 8) + x[5];
10321095
1096 dispid.has_display_parameters = true;
10331097 if (x[1] & 0x80)
10341098 printf(" Image size: %u mm x %u mm\n",
10351099 hor_size, vert_size);
11191183 break;
11201184 case 3:
11211185 s += ", reserved";
1122 fail("Reserved stereo 0x03\n");
1186 fail("Reserved stereo 0x03.\n");
11231187 break;
11241188 }
11251189 if (x[0] & 0x10)
11331197
11341198 edid_cvt_mode(1 + x[5], t);
11351199
1136 print_detailed_timings(" ", t, s.c_str());
1200 print_timings(" ", &t, "CVT", s.c_str());
11371201 }
11381202
11391203 // tag 0x25
11401204
1141 static void parse_displayid_dynamic_video_timings_range_limits(const unsigned char *x)
1142 {
1143 check_displayid_datablock_revision(x);
1205 void edid_state::parse_displayid_dynamic_video_timings_range_limits(const unsigned char *x)
1206 {
1207 check_displayid_datablock_revision(x[1], 0, (x[1] & 7) == 1);
11441208
11451209 if (!check_displayid_datablock_length(x, 9, 9))
11461210 return;
11501214 printf(" Maximum Pixel Clock: %u kHz\n",
11511215 1 + (x[6] | (x[7] << 8) | (x[8] << 16)));
11521216 printf(" Minimum Vertical Refresh Rate: %u Hz\n", x[9]);
1153 printf(" Maximum Vertical Refresh Rate: %u Hz\n", x[10]);
1217 if (x[1] & 7)
1218 printf(" Maximum Vertical Refresh Rate: %u Hz\n", x[10] + ((x[11] & 3) << 8));
1219 else
1220 printf(" Maximum Vertical Refresh Rate: %u Hz\n", x[10]);
11541221 printf(" Seamless Dynamic Video Timing Support: %s\n",
11551222 (x[11] & 0x80) ? "Yes" : "No");
11561223 }
11941261 "Custom"
11951262 };
11961263
1197 static void parse_displayid_interface_features(const unsigned char *x)
1198 {
1199 check_displayid_datablock_revision(x);
1264 void edid_state::parse_displayid_interface_features(const unsigned char *x)
1265 {
1266 check_displayid_datablock_revision(x[1]);
12001267
12011268 if (!check_displayid_datablock_length(x, 9))
12021269 return;
12031270
1271 dispid.has_display_interface_features = true;
12041272 unsigned len = x[2];
12051273 if (len > 0) print_flags(" Supported bpc for RGB encoding", x[3], bpc444);
12061274 if (len > 1) print_flags(" Supported bpc for YCbCr 4:4:4 encoding", x[4], bpc444);
12521320
12531321 // tag 0x29
12541322
1255 static void parse_displayid_ContainerID(const unsigned char *x)
1256 {
1257 check_displayid_datablock_revision(x);
1323 void edid_state::parse_displayid_ContainerID(const unsigned char *x)
1324 {
1325 check_displayid_datablock_revision(x[1]);
12581326
12591327 if (check_displayid_datablock_length(x, 16, 16)) {
12601328 x += 3;
12671335 }
12681336 }
12691337
1338 // tag 0x32
1339
1340 void edid_state::parse_displayid_type_10_timing(const unsigned char *x, bool is_cta)
1341 {
1342 struct timings t = {};
1343 std::string s("aspect ");
1344
1345 t.hact = 1 + (x[1] | (x[2] << 8));
1346 t.vact = 1 + (x[3] | (x[4] << 8));
1347 calc_ratio(&t);
1348 s += std::to_string(t.hratio) + ":" + std::to_string(t.vratio);
1349
1350 switch ((x[0] >> 5) & 0x3) {
1351 case 0:
1352 s += ", no 3D stereo";
1353 break;
1354 case 1:
1355 s += ", 3D stereo";
1356 break;
1357 case 2:
1358 s += ", 3D stereo depends on user action";
1359 break;
1360 case 3:
1361 s += ", reserved";
1362 fail("Reserved stereo 0x03.\n");
1363 break;
1364 }
1365
1366 switch (x[0] & 0x07) {
1367 case 1: t.rb = 1; break;
1368 case 2: t.rb = 2; break;
1369 case 3: t.rb = 3; break;
1370 default: break;
1371 }
1372
1373 if (x[0] & 0x10) {
1374 if (t.rb == 2) {
1375 s += ", refresh rate * (1000/1001) supported";
1376 } else if (t.rb == 3) {
1377 s += ", hblank is 160 pixels";
1378 t.rb |= RB_FLAG;
1379 } else {
1380 fail("VR_HB must be 0.\n");
1381 }
1382 }
1383 if (x[0] & 0x80)
1384 s += ", YCbCr 4:2:0";
1385
1386 edid_cvt_mode(1 + x[5], t);
1387
1388 print_timings(" ", &t, "CVT", s.c_str());
1389 if (is_cta) {
1390 timings_ext te(t, "CVT", s);
1391 cta.vec_vtdbs.push_back(te);
1392 }
1393 }
1394
1395 // tag 0x7e, OUI 3A-02-92 (VESA)
1396
1397 void edid_state::parse_displayid_vesa(const unsigned char *x)
1398 {
1399 check_displayid_datablock_revision(x[1]);
1400
1401 if (!check_displayid_datablock_length(x, 5, 7))
1402 return;
1403
1404 unsigned len = x[2];
1405 x += 6;
1406 printf(" Data Structure Type: ");
1407 switch (x[0] & 0x07) {
1408 case 0x00: printf("eDP\n"); break;
1409 case 0x01: printf("DP\n"); break;
1410 default: printf("Reserved\n"); break;
1411 }
1412 printf(" Default Colorspace and EOTF Handling: %s\n",
1413 (x[0] & 0x80) ? "Native as specified in the Display Parameters DB" : "sRGB");
1414 printf(" Number of Pixels in Hor Pix Cnt Overlapping an Adjacent Panel: %u\n",
1415 x[1] & 0xf);
1416 printf(" Multi-SST Operation: ");
1417 switch ((x[1] >> 5) & 0x03) {
1418 case 0x00: printf("Not Supported\n"); break;
1419 case 0x01: printf("Two Streams (number of links shall be 2 or 4)\n"); break;
1420 case 0x02: printf("Four Streams (number of links shall be 4)\n"); break;
1421 case 0x03: printf("Reserved\n"); break;
1422 }
1423 if (len >= 7) {
1424 double bpp = (x[2] & 0x3f) + (x[3] & 0x0f) / 16.0;
1425 printf(" Pass through timing's target DSC bits per pixel: %.4f\n", bpp);
1426 }
1427 }
1428
1429 // tag 0x81
1430
1431 void edid_state::parse_displayid_cta_data_block(const unsigned char *x)
1432 {
1433 check_displayid_datablock_revision(x[1]);
1434
1435 unsigned len = x[2];
1436 unsigned i;
1437
1438 if (len > 248) {
1439 fail("Length is > 248.\n");
1440 len = 248;
1441 }
1442 x += 3;
1443
1444 for (i = 0; i < len; i += (x[i] & 0x1f) + 1)
1445 cta_block(x + i);
1446
1447 if (i != len)
1448 fail("Length is %u instead of %u.\n", len, i);
1449 }
1450
12701451 // DisplayID main
12711452
1272 static std::string product_type(unsigned version, unsigned char x, bool heading)
1453 std::string edid_state::product_type(unsigned char x, bool heading)
12731454 {
12741455 std::string headingstr;
12751456
1276 if (version < 0x20) {
1457 if (dispid.version < 0x20) {
12771458 headingstr = "Display Product Type";
12781459 if (heading) return headingstr;
1460 dispid.is_display = x == 2 || x == 3 || x == 4 || x == 6;
12791461 switch (x) {
12801462 case 0: return "Extension Section";
12811463 case 1: return "Test Structure; test equipment only";
12891471 } else {
12901472 headingstr = "Display Product Primary Use Case";
12911473 if (heading) return headingstr;
1474 dispid.is_display = x >= 2 && x <= 8;
12921475 switch (x) {
12931476 case 0: return "Same primary use case as the base section";
12941477 case 1: return "Test Structure; test equipment only";
13021485 default: break;
13031486 }
13041487 }
1305 fail("Unknown %s 0x%02x\n", headingstr.c_str(), x);
1488 fail("Unknown %s 0x%02x.\n", headingstr.c_str(), x);
13061489 return std::string("Unknown " + headingstr + " (") + utohex(x) + ")";
13071490 }
13081491
13151498
13161499 unsigned offset = 5;
13171500
1501 dispid.preparse_displayid_blocks++;
13181502 while (length > 0) {
13191503 unsigned tag = x[offset];
1504 unsigned len = x[offset + 2];
13201505
13211506 switch (tag) {
13221507 case 0x02:
1323 preparse_color_ids |= 1 << ((x[offset + 1] >> 3) & 0x0f);
1508 dispid.preparse_color_ids |= 1 << ((x[offset + 1] >> 3) & 0x0f);
13241509 break;
13251510 case 0x0e:
1326 preparse_xfer_ids |= 1 << ((x[offset + 1] >> 4) & 0x0f);
1511 dispid.preparse_xfer_ids |= 1 << ((x[offset + 1] >> 4) & 0x0f);
13271512 break;
13281513 default:
13291514 break;
13311516
13321517 if (length < 3)
13331518 break;
1334
1335 unsigned len = x[offset + 2];
13361519
13371520 if (length < len + 3)
13381521 break;
13531536 unsigned ext_count = x[4];
13541537 unsigned i;
13551538
1356 printf("%s Version %u.%u Length %u Extension Count %u\n",
1357 block.c_str(), version >> 4, version & 0xf,
1358 length, ext_count);
1359
1360 if (ext_count > 0)
1361 warn("Non-0 DisplayID extension count %d\n", ext_count);
1362
1363 printf("%s: %s\n", product_type(version, prod_type, true).c_str(),
1364 product_type(version, prod_type, false).c_str());
1539 printf(" Version: %u.%u\n Extension Count: %u\n",
1540 version >> 4, version & 0xf, ext_count);
1541
1542 if (dispid.is_base_block) {
1543 dispid.version = version;
1544 printf(" %s: %s\n", product_type(prod_type, true).c_str(),
1545 product_type(prod_type, false).c_str());
1546 if (!prod_type)
1547 fail("DisplayID Base Block has no product type.\n");
1548 if (ext_count != dispid.preparse_displayid_blocks - 1)
1549 fail("Expected %u DisplayID Extension Block%s, but got %u.\n",
1550 ext_count,
1551 ext_count > 1 ? "s" : "",
1552 dispid.preparse_displayid_blocks - 1);
1553 } else {
1554 if (prod_type)
1555 fail("Product Type should be 0 in extension block.\n");
1556 if (ext_count)
1557 fail("Extension Count should be 0 in extension block.\n");
1558 if (version != dispid.version)
1559 fail("Got version %u.%u, expected %u.%u.\n",
1560 version >> 4, version & 0xf,
1561 dispid.version >> 4, dispid.version & 0xf);
1562 }
13651563
13661564 if (length > 121) {
1367 fail("DisplayID length %d is greater than 121\n", length);
1565 fail("DisplayID length %d is greater than 121.\n", length);
13681566 length = 121;
13691567 }
13701568
13711569 unsigned offset = 5;
1570 bool first_data_block = true;
13721571 while (length > 0) {
13731572 unsigned tag = x[offset];
1573 unsigned oui = 0;
13741574
13751575 switch (tag) {
1376 // DisplayID 1.3:
1576 // DisplayID 1.3:
13771577 case 0x00: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
13781578 case 0x01: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
13791579 case 0x02: data_block = "Color Characteristics Data Block"; break;
13821582 case 0x05: data_block = "Video Timing Modes Type 3 - Short Timings Data Block"; break;
13831583 case 0x06: data_block = "Video Timing Modes Type 4 - DMT Timings Data Block"; break;
13841584 case 0x07: data_block = "Supported Timing Modes Type 1 - VESA DMT Timings Data Block"; break;
1385 case 0x08: data_block = "Supported Timing Modes Type 2 - CTA Timings Data Block"; break;
1585 case 0x08: data_block = "Supported Timing Modes Type 2 - CTA-861 Timings Data Block"; break;
13861586 case 0x09: data_block = "Video Timing Range Data Block"; break;
13871587 case 0x0a: data_block = "Product Serial Number Data Block"; break;
13881588 case 0x0b: data_block = "GP ASCII String Data Block"; break;
13941594 case 0x11: data_block = "Video Timing Modes Type 5 - Short Timings Data Block"; break;
13951595 case 0x12: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
13961596 case 0x13: data_block = "Video Timing Modes Type 6 - Detailed Timings Data Block"; break;
1397 // 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
1398 // DisplayID 2.0
1597 // 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
1598 // DisplayID 2.0
13991599 case 0x20: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
14001600 case 0x21: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
14011601 case 0x22: data_block = "Video Timing Modes Type 7 - Detailed Timings Data Block"; break;
14061606 case 0x27: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
14071607 case 0x28: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
14081608 case 0x29: data_block = "ContainerID Data Block"; break;
1409 // 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
1609 case 0x32: data_block = "Video Timing Modes Type 10 - Formula-based Timings Data Block"; break;
1610 // 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
14101611 case 0x7e: // DisplayID 2.0
1411 case 0x7f: data_block = "Vendor-specific Data Block (" + utohex(tag) + ")"; break; // DisplayID 1.3
1412 // 0x7f .. 0x80 RESERVED
1413 case 0x81: data_block = "CTA DisplayID Data Block (" + utohex(tag) + ")"; break;
1414 // 0x82 .. 0xff RESERVED
1612 case 0x7f: // DisplayID 1.3
1613 if ((tag == 0x7e && version >= 0x20) ||
1614 (tag == 0x7f && version < 0x20)) {
1615 oui = (x[offset + 3] << 16) + (x[offset + 4] << 8) + x[offset + 5];
1616 const char *name = oui_name(oui);
1617 bool reversed = false;
1618
1619 if (!name) {
1620 name = oui_name(oui, true);
1621 if (name)
1622 reversed = true;
1623 }
1624 if (name)
1625 data_block = std::string("Vendor-Specific Data Block (") + name + ")";
1626 else
1627 data_block = "Vendor-Specific Data Block, OUI " + ouitohex(oui);
1628 if (reversed)
1629 fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order.\n").c_str());
1630 } else {
1631 data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")";
1632 }
1633 break;
1634 // 0x80 RESERVED
1635 case 0x81: data_block = "CTA-861 DisplayID Data Block (" + utohex(tag) + ")"; break;
1636 // 0x82 .. 0xff RESERVED
14151637 default: data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")"; break;
14161638 }
1639
1640 if (version >= 0x20 && (tag < 0x20 || tag == 0x7f))
1641 fail("Use of DisplayID v1.x tag for DisplayID v%u.%u.\n",
1642 version >> 4, version & 0xf);
1643 if (version < 0x20 && tag >= 0x20 && tag <= 0x7e)
1644 fail("Use of DisplayID v2.0 tag for DisplayID v%u.%u.\n",
1645 version >> 4, version & 0xf);
14171646
14181647 if (length < 3) {
14191648 // report a problem when the remaining bytes are not 0.
14201649 if (tag || x[offset + 1]) {
1421 fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0\n", length);
1650 fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0.\n", length);
14221651 }
14231652 break;
14241653 }
14251654
1655 unsigned block_rev = x[offset + 1] & 0x07;
14261656 unsigned len = x[offset + 2];
14271657
14281658 if (length < len + 3) {
1429 fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d)\n", len + 3, length);
1659 fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d).\n", len + 3, length);
14301660 break;
14311661 }
14321662
14331663 if (!tag && !len) {
14341664 // A Product Identification Data Block with no payload bytes is not valid - assume this is the end.
14351665 if (!memchk(x + offset, length)) {
1436 fail("Non-0 filler bytes in the DisplayID block\n");
1666 fail("Non-0 filler bytes in the DisplayID block.\n");
14371667 }
14381668 break;
14391669 }
14401670
1441 printf(" %s\n", data_block.c_str());
1671 printf(" %s:\n", data_block.c_str());
14421672
14431673 switch (tag) {
1444 case 0x00: parse_displayid_product_id(x + offset, false); break;
1674 case 0x00: parse_displayid_product_id(x + offset); break;
14451675 case 0x01: parse_displayid_parameters(x + offset); break;
14461676 case 0x02: parse_displayid_color_characteristics(x + offset); break;
14471677 case 0x03:
1678 check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
14481679 for (i = 0; i < len / 20; i++)
1449 parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false);
1680 parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false, block_rev);
14501681 break;
14511682 case 0x04:
1683 check_displayid_datablock_revision(x[offset + 1]);
14521684 for (i = 0; i < len / 11; i++)
14531685 parse_displayid_type_2_timing(&x[offset + 3 + (i * 11)]);
14541686 break;
14551687 case 0x05:
1688 check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
14561689 for (i = 0; i < len / 3; i++)
14571690 parse_displayid_type_3_timing(&x[offset + 3 + (i * 3)]);
14581691 break;
14591692 case 0x06:
1693 check_displayid_datablock_revision(x[offset + 1], 0xc0, 1);
14601694 for (i = 0; i < len; i++)
14611695 parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6, x[offset + 3 + i]);
14621696 break;
14631697 case 0x07:
1698 check_displayid_datablock_revision(x[offset + 1]);
14641699 for (i = 0; i < min(len, 10) * 8; i++)
14651700 if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
1466 print_timings(" ", find_dmt_id(i + 1), "DMT");
1701 char type[16];
1702 sprintf(type, "DMT 0x%02x", i + 1);
1703 print_timings(" ", find_dmt_id(i + 1), type);
14671704 }
14681705 break;
14691706 case 0x08:
1707 check_displayid_datablock_revision(x[offset + 1]);
14701708 for (i = 0; i < min(len, 8) * 8; i++)
14711709 if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
1472 char suffix[16];
1473 sprintf(suffix, "VIC %3u", i + 1);
1474 print_timings(" ", find_vic_id(i + 1), suffix);
1710 char type[16];
1711 sprintf(type, "VIC %3u", i + 1);
1712 print_timings(" ", find_vic_id(i + 1), type);
14751713 }
14761714 break;
14771715 case 0x09: parse_displayid_video_timing_range_limits(x + offset); break;
14831721 case 0x0f: parse_displayid_display_intf(x + offset); break;
14841722 case 0x10: parse_displayid_stereo_display_intf(x + offset); break;
14851723 case 0x11:
1724 check_displayid_datablock_revision(x[offset + 1]);
14861725 for (i = 0; i < len / 7; i++)
14871726 parse_displayid_type_5_timing(&x[offset + 3 + (i * 7)]);
14881727 break;
14891728 case 0x12: parse_displayid_tiled_display_topology(x + offset, false); break;
14901729 case 0x13:
1730 check_displayid_datablock_revision(x[offset + 1]);
14911731 for (i = 0; i < len; i += (x[offset + 3 + i + 2] & 0x40) ? 17 : 14)
14921732 parse_displayid_type_6_timing(&x[offset + 3 + i]);
14931733 break;
1494 case 0x20: parse_displayid_product_id(x + offset, true); break;
1734 case 0x20: parse_displayid_product_id(x + offset); break;
14951735 case 0x21: parse_displayid_parameters_v2(x + offset); break;
1496 case 0x22:
1497 for (i = 0; i < len / 20; i++)
1498 parse_displayid_type_1_7_timing(&x[offset + 3 + i * 20], true);
1736 case 0x22: {
1737 unsigned sz = 20;
1738
1739 if (block_rev >= 2)
1740 check_displayid_datablock_revision(x[offset + 1], 0x08, 2);
1741 else if (block_rev == 1)
1742 check_displayid_datablock_revision(x[offset + 1], 0x08, 1);
1743 else
1744 check_displayid_datablock_revision(x[offset + 1]);
1745 sz += (x[offset + 1] & 0x70) >> 4;
1746 if (block_rev >= 1 && (x[offset + 1] & 0x08))
1747 printf(" These timings support DSC pass-through\n");
1748 for (i = 0; i < len / sz; i++)
1749 parse_displayid_type_1_7_timing(&x[offset + 3 + i * sz], true, block_rev);
14991750 break;
1751 }
15001752 case 0x23:
1753 if (block_rev)
1754 check_displayid_datablock_revision(x[offset + 1], 0xe8, 1);
1755 else
1756 check_displayid_datablock_revision(x[offset + 1], 0xc8);
15011757 if (x[offset + 1] & 0x08) {
15021758 for (i = 0; i < len / 2; i++)
15031759 parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
15101766 }
15111767 break;
15121768 case 0x24:
1769 check_displayid_datablock_revision(x[offset + 1]);
15131770 for (i = 0; i < len / 6; i++)
15141771 parse_displayid_type_9_timing(&x[offset + 3 + i * 6]);
15151772 break;
15181775 case 0x27: parse_displayid_stereo_display_intf(x + offset); break;
15191776 case 0x28: parse_displayid_tiled_display_topology(x + offset, true); break;
15201777 case 0x29: parse_displayid_ContainerID(x + offset); break;
1778 case 0x32: {
1779 unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4);
1780
1781 check_displayid_datablock_revision(x[offset + 1], 0x10);
1782 for (i = 0; i < len / sz; i++)
1783 parse_displayid_type_10_timing(&x[offset + 3 + i * sz]);
1784 break;
1785 }
1786 case 0x81: parse_displayid_cta_data_block(x + offset); break;
1787 case 0x7e:
1788 if (oui == 0x3a0292) {
1789 parse_displayid_vesa(x + offset);
1790 break;
1791 }
1792 // fall-through
15211793 default: hex_block(" ", x + offset + 3, len); break;
15221794 }
1795
1796 if ((tag == 0x00 || tag == 0x20) &&
1797 (!dispid.is_base_block || !first_data_block))
1798 fail("%s is required to be the first DisplayID Data Block.\n",
1799 data_block.c_str());
15231800 length -= len + 3;
15241801 offset += len + 3;
1802 first_data_block = false;
15251803 }
15261804
15271805 /*
15341812
15351813 if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
15361814 data_block = "Padding";
1537 fail("DisplayID padding contains non-zero bytes\n");
1538 }
1539 }
1815 fail("DisplayID padding contains non-zero bytes.\n");
1816 }
1817 dispid.is_base_block = false;
1818 }
1819
1820 void edid_state::check_displayid_blocks()
1821 {
1822 data_block = "DisplayID";
1823 if (!dispid.has_product_identification)
1824 fail("Missing DisplayID Product Identification Data Block.\n");
1825 if (dispid.is_display && !dispid.has_display_parameters)
1826 fail("Missing DisplayID Display Parameters Data Block.\n");
1827 if (dispid.is_display && !dispid.has_display_interface_features)
1828 fail("Missing DisplayID Display Interface Features Data Block.\n");
1829 if (dispid.is_display && !dispid.has_type_1_7)
1830 fail("Missing DisplayID Type %s Detailed Timing Data Block.\n",
1831 dispid.version >= 0x20 ? "VII" : "I");
1832 if (dispid.preferred_timings.empty())
1833 fail("DisplayID expects at least one preferred timing.\n");
1834 }
00 // SPDX-License-Identifier: MIT
11 /*
2 * Copyright 2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
2 * Copyright 2019-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
33 *
44 * Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
55 */
1414 hex_block("", x + 1, *x, true, *x);
1515 }
1616
17 static void parse_string_table(const unsigned char *x)
17 void edid_state::parse_string_table(const unsigned char *x)
1818 {
1919 printf(" UTF Type: ");
2020 switch (x[0] & 7) {
2323 case 2: printf("UTF 32BE\n"); break;
2424 default:
2525 printf("Unknown (0x%02x)\n", x[0] & 7);
26 fail("Unknown UTF Type (0x%02x)\n", x[0] & 7);
26 fail("Unknown UTF Type (0x%02x).\n", x[0] & 7);
2727 break;
2828 }
2929 printf(" Country Code ID (ISO 3166-3): %u\n", ((x[1] & 0x3f) << 8) | x[2]);
3838 if (name[0] == '@') name[0] = ' ';
3939 if (name[1] == '@') name[1] = ' ';
4040 if (name[2] == '@') name[2] = ' ';
41 printf(" Language ID: %s\n", name);
41 printf(" Language ID: '%s'\n", name);
4242 }
4343 x += 5;
4444 parse_string("Manufacturer Name", x);
4545 x += x[0] + 1;
4646 parse_string("Model Name", x);
4747 x += x[0] + 1;
48 parse_string("Serial Number", x);
48 if (hide_serial_numbers)
49 printf(" Serial Number: ...\n");
50 else
51 parse_string("Serial Number", x);
4952 }
5053
5154 void edid_state::parse_ls_ext_block(const unsigned char *x)
5255 {
5356 const unsigned char *orig = x;
5457
55 printf("%s Version %u.%u Unicode Version %u.%u.%u\n",
56 block.c_str(), x[1], x[2], (x[3] >> 4), x[3] & 0x0f, x[4]);
58 printf(" Version: %u.%u\n Unicode Version: %u.%u.%u\n",
59 x[1], x[2], (x[3] >> 4), x[3] & 0x0f, x[4]);
5760 x += 5;
5861
5962 while (x[0] && x + x[0] < orig + 127) {
6265 }
6366 if (!memchk(x, orig + 127 - x)) {
6467 data_block.clear();
65 fail("Non-zero values in unused space\n");
68 fail("Non-zero values in unused space.\n");
6669 }
6770 }
00 // SPDX-License-Identifier: MIT
11 /*
2 * Copyright 2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
2 * Copyright 2019-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
33 *
44 * Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
55 */
88
99 void edid_state::parse_vtb_ext_block(const unsigned char *x)
1010 {
11 printf("%s Version %u\n", block.c_str(), x[1]);
11 printf(" Version: %u\n", x[1]);
1212 if (x[1] != 1)
13 fail("Invalid version %u\n", x[1]);
13 fail("Invalid version %u.\n", x[1]);
1414
15 unsigned num_dtb = x[2];
15 unsigned num_dtd = x[2];
1616 unsigned num_cvt = x[3];
1717 unsigned num_st = x[4];
1818
1919 x += 5;
20 for (unsigned i = 0; i < num_dtb; i++, x += 18)
21 detailed_timings(" ", x);
22 for (unsigned i = 0; i < num_cvt; i++, x += 3)
23 detailed_cvt_descriptor(" ", x, false);
24 for (unsigned i = 0; i < num_st; i++, x += 2) {
25 if ((x[1] & 0x3f) >= 60)
26 print_standard_timing(" ", x[0], x[1] - 60, true);
27 else
28 print_standard_timing(" ", x[0], x[1], true, 0);
20 if (num_dtd) {
21 printf(" Detailed Timing Descriptors:\n");
22 for (unsigned i = 0; i < num_dtd; i++, x += 18)
23 detailed_timings(" ", x, false);
24 }
25 if (num_cvt) {
26 printf(" Coordinated Video Timings:\n");
27 for (unsigned i = 0; i < num_cvt; i++, x += 3)
28 detailed_cvt_descriptor(" ", x, false);
29 }
30 if (num_st) {
31 printf(" Standard Timings:\n");
32 for (unsigned i = 0; i < num_st; i++, x += 2) {
33 if ((x[1] & 0x3f) >= 60)
34 print_standard_timing(" ", x[0], x[1] - 60, true);
35 else
36 print_standard_timing(" ", x[0], x[1], true, 0);
37 }
2938 }
3039 }
0 edid-decode (hex):
1
2 00 ff ff ff ff ff ff 00 31 d8 34 12 00 00 00 00
3 22 1a 01 04 a2 60 36 78 1f ee 91 a3 54 4c 99 26
4 0f 50 54 ff ff 80 31 59 45 59 81 80 81 40 90 40
5 95 00 a9 40 b3 00 08 e8 00 30 f2 70 5a 80 b0 58
6 8a 00 c0 1c 32 00 00 1e 00 00 00 fd 00 18 58 0f
7 87 3c 04 12 01 e0 f8 38 f0 3c 00 00 00 fc 00 30
8 31 32 33 34 35 36 37 38 39 30 31 32 00 00 00 f7
9 00 0a ff ff ff ff ff f0 00 00 00 00 00 00 ff d7
10
11 02 03 24 f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21
12 20 05 14 02 11 01 23 09 07 07 e2 00 ea e6 0d 61
13 81 82 6a 84 4d d0 00 a0 f0 70 3e 80 30 20 35 00
14 c0 1c 32 00 00 1e 1a 36 80 a0 70 38 1f 40 30 20
15 35 00 c0 1c 32 00 00 1a 1a 1d 00 80 51 d0 1c 20
16 40 80 35 00 c0 1c 32 00 00 1c 00 00 00 00 00 00
17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7
19
20 70 20 5f 02 fd 20 00 10 00 00 00 01 00 01 00 00
21 00 00 00 04 54 65 73 74 21 00 1d 80 3e 28 23 00
22 0f 70 08 00 3c 8a 54 cc 84 99 68 42 0f 00 45 54
23 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 80 ff
24 0e 2f 02 27 81 57 00 6f 08 59 00 47 80 09 00 24
25 00 06 12 7f 07 37 04 3b 26 00 09 02 02 01 01 00
26 e0 07 00 00 3b 00 00 00 00 00 00 00 00 00 00 00
27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
28
29 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
37
38 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
46
47 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
55
56 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
64
65 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
73
74 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
82
83 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
91
92 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
93 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
94 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
95 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
99 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
100
101 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
108 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
109
110 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
117 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
118
119 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
126 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
127
128 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
135 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
136
137 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
144 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
145
146 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
153 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
154
155 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
161 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
162 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
163
164 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
171 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
172
173 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
179 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
181
182 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
189 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
190
191 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
197 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
198 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
199
200 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
207 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
208
209 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
215 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
216 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
217
218 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
224 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
225 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
226
227 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
233 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
234 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
235
236 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
242 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
243 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
244
245 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
251 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
252 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
253
254 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
262
263 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
269 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
271
272 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
278 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
279 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
280
281 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
287 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
288 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
289
290 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
296 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
297 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
298
299 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
305 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
306 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
307
308 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
309 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
311 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
312 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
313 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
314 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
315 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
316
317 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
318 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
319 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
324 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
325
326 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
329 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
331 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
332 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
333 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
334
335 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
336 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
337 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
338 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
339 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
341 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
342 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
343
344 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
345 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
347 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
348 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
349 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
351 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
352
353 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
354 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
355 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
356 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
357 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
358 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
359 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
361
362 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
363 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
364 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
365 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
366 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
367 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
368 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
369 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
370
371 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
372 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
373 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
374 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
375 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
376 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
377 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
378 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
379
380 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
381 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
382 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
383 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
384 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
385 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
387 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
388
389 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
395 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
396 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
397
398 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
399 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
401 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
402 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
403 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
404 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
405 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
406
407 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
408 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
409 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
411 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
412 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
413 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
415
416 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
417 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
418 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
419 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
421 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
422 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
423 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
424
425 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
426 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
427 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
428 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
429 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
431 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
432 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
433
434 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
435 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
437 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
438 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
439 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
441 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
442
443 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
444 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
445 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
447 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
449 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
451
452 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
453 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
454 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
455 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
457 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
458 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
459 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
460
461 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
467 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
468 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
469
470 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
471 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
472 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
473 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
474 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
475 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
477 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
478
479 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
481 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
482 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
483 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
484 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
485 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
486 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
487
488 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
492 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
493 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
494 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
495 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
496
497 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
498 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
499 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
501 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
502 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
503 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
504 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
505
506 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
507 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
508 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
509 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
511 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
512 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
513 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
514
515 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
516 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
517 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
518 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
519 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
521 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
522 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
523
524 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
525 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
526 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
527 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
528 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
529 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
531 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
532
533 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
535 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
536 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
537 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
538 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
539 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
541
542 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
544 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
545 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
546 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
547 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
548 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
549 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
550
551 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
552 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
558 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
559
560 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
562 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
563 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
564 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
566 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
567 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
568
569 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
571 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
572 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
573 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
574 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
576 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
577
578 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
579 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
581 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
582 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
583 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
584 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
585 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
586
587 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
588 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
589 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
591 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
592 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
593 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
594 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
595
596 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
598 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
599 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
601 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
602 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
603 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
604
605 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
606 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
607 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
608 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
609 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
611 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
612 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
613
614 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
615 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
616 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
617 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
618 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
619 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
621 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
622
623 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
629 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
631
632 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
639 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
640
641 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
648 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
649
650 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
657 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
658
659 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
666 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
667
668 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
675 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
676
677 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
684 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
685
686 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
693 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
694
695 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
696 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
699 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
701 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
702 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
703
704 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
705 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
706 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
707 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
711 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
712
713 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
714 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
715 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
716 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
717 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
721
722 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
723 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
724 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
725 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
726 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
727 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
729 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
730
731 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
732 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
733 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
734 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
735 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
736 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
737 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
739
740 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
741 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
742 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
743 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
744 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
745 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
746 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
747 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
748
749 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
751 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
752 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
753 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
755 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
756 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
757
758 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
765 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
766
767 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
768 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
769 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
770 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
771 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
772 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
773 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
774 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
775
776 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
777 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
778 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
779 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
781 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
782 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
783 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
784
785 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
786 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
787 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
788 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
789 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
791 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
792 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
793
794 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
795 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
796 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
797 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
798 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
799 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
801 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
802
803 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
804 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
805 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
807 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
808 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
809 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
811
812 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
813 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
814 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
815 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
816 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
817 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
818 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
819 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
820
821 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
822 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
823 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
824 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
825 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
826 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
827 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
828 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
829
830 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
831 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
832 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
833 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
834 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
835 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
836 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
837 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
838
839 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
841 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
842 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
843 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
844 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
845 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
846 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
847
848 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
849 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
851 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
852 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
855 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
856
857 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
863 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
864 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
865
866 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
867 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
868 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
869 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
871 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
872 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
873 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
874
875 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
876 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
877 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
879 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
881 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
882 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
883
884 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
885 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
887 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
888 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
889 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
890 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
891 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
892
893 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
894 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
895 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
896 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
897 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
899 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
901
902 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
903 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
905 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
906 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
907 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
908 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
909 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
910
911 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
912 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
913 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
914 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
915 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
917 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
918 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
919
920 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
927 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
928
929 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
936 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
937
938 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
945 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
946
947 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
954 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
955
956 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
963 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
964
965 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
972 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
973
974 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
981 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
982
983 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
991
992 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
995 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
996 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
997 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
998 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
999 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1000
1001 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1003 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1005 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1006 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1007 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1008 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1009
1010 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1012 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1014 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1015 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1016 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1017 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1018
1019 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1021 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1022 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1023 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1025 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1026 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1027
1028 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1029 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1031 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1032 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1033 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1034 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1035 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1036
1037 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1038 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1039 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1041 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1042 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1043 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1045
1046 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1047 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1048 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1051 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1052 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1053 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1054
1055 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1056 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1057 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1058 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1059 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1062 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1063
1064 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1067 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1068 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1069 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1071 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1072
1073 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1075 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1076 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1077 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1078 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1079 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1081
1082 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1083 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1084 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1085 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1086 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1087 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1088 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1089 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1090
1091 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1092 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1093 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1095 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1096 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1097 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1098 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1099
1100 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1101 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1108
1109 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1117
1118 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1119 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1126
1127 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1135
1136 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1144
1145 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1146 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1153
1154 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1155 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1161 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1162
1163 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1164 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1171
1172 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1173 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1179 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1180
1181 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1182 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1189
1190 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1191 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1197 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1198
1199 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1207
1208 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1215 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1216
1217 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1218 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1224 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1225
1226 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1227 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1233 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1234
1235 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1236 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1242 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1243
1244 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1245 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1251 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1252
1253 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1254 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1261
1262 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1263 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1269 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1270
1271 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1272 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1278 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1279
1280 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1281 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1287 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1288
1289 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1296 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1297
1298 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1299 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1305 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1306
1307 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1308 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1309 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1311 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1312 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1313 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1314 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1315
1316 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1317 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1318 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1319 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1324
1325 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1326 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1329 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1331 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1332 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1333
1334 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1335 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1336 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1337 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1338 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1339 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1341 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1342
1343 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1344 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1345 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1346 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1347 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1348 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1349 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1351
1352 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1353 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1354 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1355 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1356 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1357 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1358 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1359 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1360
1361 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1362 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1363 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1364 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1365 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1366 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1367 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1368 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1369
1370 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1371 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1372 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1373 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1374 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1375 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1376 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1377 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1378
1379 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1381 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1382 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1383 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1384 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1385 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1387
1388 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1389 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1395 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1396
1397 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1398 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1399 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1401 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1402 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1403 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1404 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1405
1406 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1407 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1408 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1409 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1411 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1412 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1413 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1414
1415 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1416 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1417 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1418 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1419 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1421 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1422 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1423
1424 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1425 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1426 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1427 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1428 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1429 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1431 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1432
1433 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1434 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1435 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1437 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1438 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1439 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1441
1442 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1443 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1444 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1445 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1447 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1449 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1450
1451 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1452 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1453 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1454 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1455 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1457 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1458 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1459
1460 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1461 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1467 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1468
1469 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1471 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1472 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1473 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1474 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1475 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1477
1478 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1479 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1481 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1482 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1483 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1484 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1485 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1486
1487 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1488 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1492 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1493 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1494 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1495
1496 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1497 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1498 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1499 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1501 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1502 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1503 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1504
1505 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1506 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1507 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1508 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1509 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1511 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1512 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1513
1514 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1515 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1516 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1517 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1518 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1519 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1521 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1522
1523 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1524 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1525 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1526 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1527 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1528 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1529 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1531
1532 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1533 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1535 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1536 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1537 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1538 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1539 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1540
1541 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1542 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1544 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1545 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1546 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1547 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1548 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1549
1550 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1551 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1552 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1558
1559 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1562 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1563 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1564 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1566 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1567
1568 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1569 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1571 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1572 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1573 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1574 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1576
1577 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1579 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1581 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1582 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1583 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1584 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1585
1586 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1587 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1588 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1589 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1591 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1592 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1593 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1594
1595 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1596 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1598 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1599 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1601 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1602 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1603
1604 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1605 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1606 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1607 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1608 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1609 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1611 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1612
1613 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1614 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1615 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1616 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1617 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1618 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1619 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1621
1622 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1623 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1629 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1630
1631 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1632 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1639
1640 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1641 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1648
1649 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1650 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1657
1658 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1659 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1666
1667 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1668 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1675
1676 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1677 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1684
1685 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1686 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1693
1694 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1695 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1696 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1699 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1701 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1702
1703 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1704 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1705 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1706 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1707 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1711
1712 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1713 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1714 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1715 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1716 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1717 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1720
1721 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1722 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1723 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1724 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1725 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1726 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1727 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1729
1730 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1731 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1732 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1733 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1734 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1735 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1736 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1737 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1738
1739 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1741 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1742 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1743 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1744 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1745 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1746 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1747
1748 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1749 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1751 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1752 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1753 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1755 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1756
1757 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1758 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1765
1766 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1767 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1768 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1769 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1770 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1771 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1772 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1773 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1774
1775 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1776 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1777 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1778 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1779 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1781 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1782 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1783
1784 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1785 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1786 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1787 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1788 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1789 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1791 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1792
1793 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1794 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1795 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1796 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1797 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1798 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1799 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1801
1802 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1803 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1804 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1805 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1807 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1808 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1809 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1810
1811 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1812 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1813 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1814 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1815 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1816 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1817 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1818 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1819
1820 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1821 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1822 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1823 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1824 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1825 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1826 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1827 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1828
1829 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1831 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1832 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1833 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1834 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1835 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1836 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1837
1838 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1839 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1841 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1842 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1843 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1844 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1845 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1846
1847 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1848 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1849 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1851 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1852 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1855
1856 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1857 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1863 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1864
1865 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1866 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1867 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1868 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1869 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1871 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1872 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1873
1874 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1875 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1876 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1877 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1879 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1881 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1882
1883 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1884 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1885 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1887 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1888 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1889 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1890 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1891
1892 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1893 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1894 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1895 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1896 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1897 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1899 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1900
1901 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1902 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1903 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1905 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1906 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1907 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1908 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1909
1910 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1911 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1912 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1913 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1914 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1915 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1917 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1918
1919 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1927
1928 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1929 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1936
1937 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1938 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1945
1946 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1947 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1954
1955 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1956 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1963
1964 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1965 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1972
1973 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1974 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1981
1982 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1983 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1990
1991 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1992 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1995 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1996 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1997 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1998 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1999
2000 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2003 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2005 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2006 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2007 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2008
2009 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2012 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2014 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2015 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2016 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2017
2018 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2019 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2021 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2022 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2023 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2025 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2026
2027 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2028 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2029 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2031 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2032 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2033 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2034 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2035
2036 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2038 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2039 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2041 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2042 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2043 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2044
2045 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2046 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2047 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2048 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2051 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2052 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2053
2054 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2055 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2056 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2057 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2058 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2059 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2062
2063 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2067 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2068 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2069 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2071
2072 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2073 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2075 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2076 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2077 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2078 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2079 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2080
2081 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2082 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2083 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2084 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2085 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2086 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2087 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2088 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2089
2090 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2091 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2092 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2093 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2095 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2096 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2097 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2098
2099 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2101 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2107
2108 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2109 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2116
2117 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2118 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2119 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2125
2126 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2127 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2134
2135 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2136 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2143
2144 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2145 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2146 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2152
2153 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2154 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2155 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2161
2162 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2163 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2164 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2170
2171 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2172 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2173 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2179
2180 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2181 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2182 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2188
2189 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2191 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2197
2198 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2199 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2206
2207 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2208 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2215
2216 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2217 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2218 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2224
2225 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2226 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2227 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2233
2234 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2235 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2236 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2242
2243 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2244 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2245 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2251
2252 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2253 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2254 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2260
2261 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2262 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2263 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2269
2270 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2271 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2272 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2278
2279 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2281 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2287
2288 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2289 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2296
2297 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2298 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2299 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
0 This test directory contains some special test EDIDs:
1
2 Three test files to check the edid-decode file parser:
3
4 quantumdata.test: an EDID as generated by the QuantumData (nowadays
5 Teledyne LeCroy) software.
6
7 xorg.test: an EDID as logged by xorg in /var/log/Xorg.0.log.
8
9 xrandr.test: an EDID as reported by 'xrandr --props'.
10
11
12 Five hand-crafted EDIDs to test rarely seen EDID extensions or data blocks:
13
14 cta-vesa.test: has VESA Display Transfer Characteristics Data Block and
15 VESA Video Display Device Data Block in the CTA-861 block.
16
17 ls-ext.test: has a Localized String Extension Block.
18
19 blockmap-128.test: has a single Block Map extension and a total of
20 128 blocks.
21
22 blockmap-255.test: has two Block Map extensions and a total of
23 255 blocks (the maximum possible EDID size when the second
24 Block Map is used).
25
26 256-blocks.test: has the maximum number of 256 blocks.
27
28
29 Examples of old EDID versions:
30
31 edid-1.X.test: EDIDs with version 1.0, 1.1 and 1.2.
32
33
34 Test EDIDs from several standards:
35
36 cta-annex-a.test
37 cta-annex-d.test
38 vesa-edid-1.1.test
39 vesa-edid-1.3.test
40 vesa-edid-1.4-1.test
41 vesa-edid-1.4-2.test
42 vesa-edid-1.4-3.test
0 edid-decode (hex):
1
2 00 ff ff ff ff ff ff 00 31 d8 34 12 00 00 00 00
3 22 1a 01 04 a2 60 36 78 1f ee 91 a3 54 4c 99 26
4 0f 50 54 ff ff 80 31 59 45 59 81 80 81 40 90 40
5 95 00 a9 40 b3 00 08 e8 00 30 f2 70 5a 80 b0 58
6 8a 00 c0 1c 32 00 00 1e 00 00 00 fd 00 18 58 0f
7 87 3c 04 12 01 e0 f8 38 f0 3c 00 00 00 fc 00 30
8 31 32 33 34 35 36 37 38 39 30 31 32 00 00 00 f7
9 00 0a ff ff ff ff ff f0 00 00 00 00 00 00 7f 57
10
11 f0 02 70 70 70 70 70 70 70 70 70 70 70 70 70 70
12 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
13 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
14 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
15 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
16 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
17 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
18 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 5e
19
20 02 03 24 f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21
21 20 05 14 02 11 01 23 09 07 07 e2 00 ea e6 0d 61
22 81 82 6a 84 4d d0 00 a0 f0 70 3e 80 30 20 35 00
23 c0 1c 32 00 00 1e 1a 36 80 a0 70 38 1f 40 30 20
24 35 00 c0 1c 32 00 00 1a 1a 1d 00 80 51 d0 1c 20
25 40 80 35 00 c0 1c 32 00 00 1c 00 00 00 00 00 00
26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7
28
29 70 20 5f 02 7c 20 00 10 00 00 00 01 00 01 00 00
30 00 00 00 04 54 65 73 74 21 00 1d 80 3e 28 23 00
31 0f 70 08 00 3c 8a 54 cc 84 99 68 42 0f 00 45 54
32 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 80 ff
33 0e 2f 02 27 81 57 00 6f 08 59 00 47 80 09 00 24
34 00 06 12 7f 07 37 04 3b 26 00 09 02 02 01 01 00
35 e0 07 00 00 bc 00 00 00 00 00 00 00 00 00 00 00
36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
37
38 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
46
47 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
55
56 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
64
65 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
73
74 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
82
83 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
91
92 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
93 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
94 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
95 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
99 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
100
101 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
108 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
109
110 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
117 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
118
119 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
126 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
127
128 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
135 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
136
137 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
144 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
145
146 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
153 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
154
155 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
161 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
162 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
163
164 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
171 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
172
173 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
179 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
181
182 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
189 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
190
191 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
197 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
198 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
199
200 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
207 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
208
209 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
215 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
216 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
217
218 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
224 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
225 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
226
227 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
233 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
234 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
235
236 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
242 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
243 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
244
245 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
251 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
252 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
253
254 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
262
263 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
269 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
271
272 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
278 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
279 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
280
281 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
287 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
288 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
289
290 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
296 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
297 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
298
299 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
305 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
306 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
307
308 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
309 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
311 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
312 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
313 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
314 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
315 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
316
317 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
318 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
319 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
324 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
325
326 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
329 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
331 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
332 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
333 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
334
335 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
336 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
337 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
338 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
339 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
341 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
342 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
343
344 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
345 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
347 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
348 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
349 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
351 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
352
353 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
354 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
355 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
356 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
357 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
358 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
359 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
361
362 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
363 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
364 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
365 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
366 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
367 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
368 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
369 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
370
371 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
372 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
373 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
374 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
375 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
376 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
377 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
378 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
379
380 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
381 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
382 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
383 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
384 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
385 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
387 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
388
389 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
395 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
396 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
397
398 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
399 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
401 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
402 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
403 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
404 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
405 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
406
407 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
408 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
409 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
411 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
412 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
413 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
415
416 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
417 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
418 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
419 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
421 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
422 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
423 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
424
425 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
426 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
427 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
428 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
429 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
431 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
432 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
433
434 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
435 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
437 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
438 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
439 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
441 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
442
443 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
444 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
445 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
447 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
449 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
451
452 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
453 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
454 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
455 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
457 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
458 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
459 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
460
461 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
467 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
468 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
469
470 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
471 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
472 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
473 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
474 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
475 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
477 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
478
479 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
481 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
482 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
483 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
484 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
485 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
486 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
487
488 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
492 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
493 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
494 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
495 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
496
497 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
498 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
499 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
501 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
502 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
503 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
504 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
505
506 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
507 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
508 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
509 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
511 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
512 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
513 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
514
515 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
516 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
517 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
518 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
519 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
521 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
522 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
523
524 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
525 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
526 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
527 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
528 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
529 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
531 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
532
533 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
535 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
536 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
537 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
538 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
539 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
541
542 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
544 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
545 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
546 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
547 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
548 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
549 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
550
551 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
552 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
558 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
559
560 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
562 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
563 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
564 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
566 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
567 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
568
569 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
571 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
572 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
573 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
574 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
576 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
577
578 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
579 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
581 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
582 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
583 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
584 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
585 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
586
587 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
588 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
589 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
591 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
592 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
593 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
594 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
595
596 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
598 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
599 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
601 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
602 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
603 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
604
605 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
606 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
607 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
608 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
609 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
611 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
612 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
613
614 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
615 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
616 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
617 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
618 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
619 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
621 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
622
623 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
629 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
631
632 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
639 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
640
641 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
648 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
649
650 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
657 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
658
659 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
666 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
667
668 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
675 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
676
677 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
684 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
685
686 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
693 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
694
695 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
696 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
699 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
701 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
702 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
703
704 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
705 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
706 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
707 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
711 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
712
713 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
714 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
715 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
716 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
717 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
721
722 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
723 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
724 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
725 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
726 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
727 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
729 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
730
731 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
732 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
733 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
734 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
735 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
736 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
737 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
739
740 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
741 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
742 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
743 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
744 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
745 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
746 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
747 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
748
749 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
751 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
752 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
753 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
755 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
756 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
757
758 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
765 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
766
767 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
768 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
769 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
770 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
771 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
772 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
773 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
774 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
775
776 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
777 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
778 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
779 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
781 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
782 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
783 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
784
785 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
786 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
787 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
788 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
789 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
791 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
792 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
793
794 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
795 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
796 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
797 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
798 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
799 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
801 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
802
803 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
804 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
805 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
807 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
808 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
809 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
811
812 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
813 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
814 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
815 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
816 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
817 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
818 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
819 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
820
821 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
822 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
823 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
824 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
825 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
826 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
827 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
828 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
829
830 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
831 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
832 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
833 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
834 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
835 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
836 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
837 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
838
839 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
841 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
842 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
843 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
844 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
845 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
846 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
847
848 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
849 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
851 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
852 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
855 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
856
857 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
863 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
864 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
865
866 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
867 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
868 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
869 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
871 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
872 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
873 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
874
875 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
876 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
877 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
879 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
881 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
882 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
883
884 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
885 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
887 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
888 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
889 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
890 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
891 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
892
893 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
894 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
895 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
896 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
897 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
899 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
901
902 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
903 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
905 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
906 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
907 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
908 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
909 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
910
911 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
912 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
913 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
914 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
915 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
917 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
918 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
919
920 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
927 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
928
929 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
936 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
937
938 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
945 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
946
947 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
954 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
955
956 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
963 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
964
965 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
972 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
973
974 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
981 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
982
983 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
991
992 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
995 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
996 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
997 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
998 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
999 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1000
1001 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1003 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1005 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1006 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1007 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1008 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1009
1010 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1012 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1014 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1015 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1016 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1017 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1018
1019 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1021 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1022 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1023 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1025 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1026 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1027
1028 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1029 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1031 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1032 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1033 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1034 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1035 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1036
1037 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1038 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1039 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1041 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1042 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1043 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1045
1046 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1047 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1048 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1051 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1052 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1053 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1054
1055 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1056 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1057 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1058 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1059 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1062 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1063
1064 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1067 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1068 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1069 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1071 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1072
1073 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1075 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1076 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1077 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1078 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1079 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1081
1082 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1083 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1084 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1085 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1086 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1087 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1088 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1089 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1090
1091 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1092 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1093 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1095 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1096 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1097 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1098 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1099
1100 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1101 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1108
1109 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1117
1118 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1119 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1126
1127 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1135
1136 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1144
1145 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1146 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
0 edid-decode (hex):
1
2 00 ff ff ff ff ff ff 00 31 d8 34 12 00 00 00 00
3 22 1a 01 04 a2 60 36 78 1f ee 91 a3 54 4c 99 26
4 0f 50 54 ff ff 80 31 59 45 59 81 80 81 40 90 40
5 95 00 a9 40 b3 00 08 e8 00 30 f2 70 5a 80 b0 58
6 8a 00 c0 1c 32 00 00 1e 00 00 00 fd 00 18 58 0f
7 87 3c 04 12 01 e0 f8 38 f0 3c 00 00 00 fc 00 30
8 31 32 33 34 35 36 37 38 39 30 31 32 00 00 00 f7
9 00 0a ff ff ff ff ff f0 00 00 00 00 00 00 fe d8
10
11 f0 02 70 70 70 70 70 70 70 70 70 70 70 70 70 70
12 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
13 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
14 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
15 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
16 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
17 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
18 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 5e
19
20 02 03 24 f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21
21 20 05 14 02 11 01 23 09 07 07 e2 00 ea e6 0d 61
22 81 82 6a 84 4d d0 00 a0 f0 70 3e 80 30 20 35 00
23 c0 1c 32 00 00 1e 1a 36 80 a0 70 38 1f 40 30 20
24 35 00 c0 1c 32 00 00 1a 1a 1d 00 80 51 d0 1c 20
25 40 80 35 00 c0 1c 32 00 00 1c 00 00 00 00 00 00
26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7
28
29 70 20 5f 02 fa 20 00 10 00 00 00 01 00 01 00 00
30 00 00 00 04 54 65 73 74 21 00 1d 80 3e 28 23 00
31 0f 70 08 00 3c 8a 54 cc 84 99 68 42 0f 00 45 54
32 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 80 ff
33 0e 2f 02 27 81 57 00 6f 08 59 00 47 80 09 00 24
34 00 06 12 7f 07 37 04 3b 26 00 09 02 02 01 01 00
35 e0 07 00 00 3e 00 00 00 00 00 00 00 00 00 00 00
36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
37
38 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
46
47 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
55
56 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
64
65 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
73
74 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
82
83 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
91
92 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
93 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
94 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
95 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
99 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
100
101 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
108 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
109
110 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
117 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
118
119 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
126 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
127
128 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
135 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
136
137 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
144 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
145
146 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
153 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
154
155 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
161 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
162 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
163
164 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
171 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
172
173 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
179 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
181
182 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
189 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
190
191 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
197 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
198 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
199
200 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
207 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
208
209 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
215 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
216 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
217
218 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
224 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
225 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
226
227 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
233 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
234 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
235
236 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
242 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
243 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
244
245 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
251 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
252 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
253
254 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
262
263 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
269 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
271
272 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
278 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
279 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
280
281 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
287 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
288 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
289
290 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
296 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
297 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
298
299 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
305 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
306 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
307
308 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
309 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
311 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
312 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
313 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
314 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
315 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
316
317 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
318 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
319 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
324 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
325
326 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
329 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
331 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
332 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
333 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
334
335 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
336 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
337 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
338 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
339 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
341 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
342 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
343
344 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
345 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
347 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
348 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
349 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
351 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
352
353 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
354 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
355 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
356 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
357 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
358 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
359 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
361
362 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
363 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
364 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
365 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
366 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
367 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
368 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
369 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
370
371 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
372 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
373 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
374 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
375 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
376 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
377 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
378 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
379
380 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
381 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
382 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
383 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
384 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
385 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
387 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
388
389 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
395 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
396 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
397
398 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
399 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
401 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
402 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
403 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
404 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
405 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
406
407 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
408 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
409 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
411 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
412 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
413 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
415
416 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
417 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
418 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
419 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
421 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
422 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
423 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
424
425 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
426 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
427 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
428 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
429 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
431 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
432 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
433
434 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
435 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
437 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
438 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
439 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
441 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
442
443 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
444 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
445 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
447 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
449 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
451
452 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
453 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
454 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
455 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
457 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
458 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
459 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
460
461 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
467 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
468 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
469
470 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
471 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
472 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
473 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
474 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
475 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
477 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
478
479 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
481 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
482 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
483 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
484 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
485 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
486 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
487
488 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
492 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
493 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
494 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
495 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
496
497 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
498 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
499 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
501 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
502 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
503 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
504 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
505
506 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
507 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
508 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
509 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
511 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
512 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
513 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
514
515 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
516 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
517 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
518 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
519 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
521 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
522 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
523
524 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
525 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
526 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
527 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
528 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
529 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
531 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
532
533 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
535 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
536 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
537 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
538 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
539 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
541
542 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
544 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
545 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
546 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
547 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
548 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
549 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
550
551 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
552 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
558 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
559
560 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
562 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
563 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
564 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
566 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
567 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
568
569 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
571 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
572 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
573 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
574 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
576 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
577
578 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
579 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
581 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
582 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
583 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
584 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
585 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
586
587 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
588 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
589 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
591 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
592 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
593 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
594 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
595
596 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
598 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
599 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
601 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
602 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
603 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
604
605 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
606 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
607 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
608 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
609 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
611 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
612 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
613
614 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
615 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
616 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
617 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
618 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
619 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
621 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
622
623 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
629 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
631
632 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
639 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
640
641 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
648 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
649
650 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
657 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
658
659 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
666 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
667
668 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
675 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
676
677 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
684 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
685
686 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
693 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
694
695 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
696 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
699 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
701 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
702 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
703
704 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
705 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
706 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
707 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
711 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
712
713 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
714 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
715 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
716 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
717 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
721
722 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
723 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
724 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
725 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
726 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
727 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
729 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
730
731 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
732 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
733 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
734 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
735 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
736 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
737 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
739
740 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
741 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
742 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
743 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
744 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
745 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
746 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
747 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
748
749 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
751 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
752 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
753 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
755 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
756 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
757
758 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
765 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
766
767 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
768 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
769 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
770 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
771 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
772 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
773 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
774 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
775
776 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
777 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
778 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
779 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
781 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
782 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
783 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
784
785 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
786 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
787 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
788 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
789 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
791 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
792 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
793
794 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
795 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
796 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
797 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
798 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
799 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
801 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
802
803 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
804 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
805 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
807 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
808 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
809 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
811
812 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
813 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
814 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
815 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
816 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
817 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
818 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
819 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
820
821 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
822 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
823 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
824 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
825 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
826 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
827 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
828 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
829
830 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
831 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
832 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
833 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
834 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
835 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
836 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
837 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
838
839 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
841 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
842 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
843 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
844 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
845 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
846 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
847
848 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
849 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
851 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
852 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
855 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
856
857 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
863 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
864 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
865
866 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
867 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
868 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
869 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
871 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
872 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
873 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
874
875 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
876 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
877 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
879 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
881 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
882 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
883
884 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
885 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
887 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
888 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
889 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
890 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
891 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
892
893 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
894 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
895 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
896 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
897 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
899 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
901
902 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
903 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
905 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
906 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
907 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
908 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
909 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
910
911 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
912 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
913 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
914 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
915 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
917 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
918 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
919
920 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
927 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
928
929 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
936 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
937
938 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
945 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
946
947 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
954 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
955
956 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
963 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
964
965 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
972 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
973
974 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
981 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
982
983 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
991
992 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
995 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
996 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
997 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
998 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
999 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1000
1001 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1003 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1005 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1006 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1007 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1008 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1009
1010 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1012 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1014 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1015 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1016 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1017 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1018
1019 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1021 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1022 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1023 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1025 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1026 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1027
1028 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1029 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1031 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1032 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1033 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1034 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1035 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1036
1037 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1038 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1039 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1041 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1042 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1043 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1045
1046 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1047 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1048 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1051 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1052 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1053 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1054
1055 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1056 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1057 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1058 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1059 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1062 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1063
1064 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1067 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1068 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1069 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1071 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1072
1073 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1075 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1076 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1077 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1078 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1079 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1081
1082 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1083 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1084 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1085 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1086 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1087 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1088 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1089 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1090
1091 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1092 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1093 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1095 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1096 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1097 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1098 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1099
1100 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1101 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1107 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1108
1109 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1116 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1117
1118 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1119 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1125 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1126
1127 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1135
1136 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1143 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1144
1145 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1146 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1152 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1153
1154 f0 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1155 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1156 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1157 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1158 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1159 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1160 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
1161 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 f0
1162
1163 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1164 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1171
1172 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1173 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1179 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1180
1181 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1182 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1189
1190 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1191 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1197 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1198
1199 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1207
1208 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1215 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1216
1217 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1218 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1224 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1225
1226 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1227 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1233 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1234
1235 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1236 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1242 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1243
1244 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1245 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1251 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1252
1253 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1254 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1261
1262 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1263 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1269 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1270
1271 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1272 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1278 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1279
1280 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1281 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1287 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1288
1289 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1296 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1297
1298 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1299 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1301 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1302 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1303 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1304 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1305 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1306
1307 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1308 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1309 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1311 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1312 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1313 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1314 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1315
1316 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1317 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1318 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1319 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1324
1325 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1326 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1329 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1331 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1332 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1333
1334 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1335 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1336 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1337 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1338 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1339 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1341 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1342
1343 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1344 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1345 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1346 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1347 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1348 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1349 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1351
1352 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1353 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1354 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1355 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1356 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1357 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1358 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1359 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1360
1361 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1362 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1363 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1364 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1365 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1366 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1367 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1368 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1369
1370 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1371 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1372 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1373 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1374 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1375 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1376 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1377 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1378
1379 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1381 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1382 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1383 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1384 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1385 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1387
1388 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1389 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1395 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1396
1397 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1398 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1399 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1401 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1402 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1403 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1404 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1405
1406 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1407 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1408 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1409 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1411 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1412 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1413 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1414
1415 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1416 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1417 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1418 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1419 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1421 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1422 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1423
1424 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1425 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1426 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1427 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1428 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1429 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1431 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1432
1433 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1434 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1435 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1437 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1438 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1439 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1441
1442 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1443 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1444 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1445 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1447 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1449 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1450
1451 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1452 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1453 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1454 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1455 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1457 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1458 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1459
1460 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1461 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1467 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1468
1469 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1471 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1472 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1473 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1474 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1475 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1477
1478 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1479 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1481 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1482 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1483 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1484 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1485 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1486
1487 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1488 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1492 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1493 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1494 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1495
1496 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1497 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1498 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1499 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1501 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1502 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1503 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1504
1505 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1506 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1507 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1508 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1509 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1511 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1512 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1513
1514 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1515 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1516 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1517 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1518 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1519 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1521 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1522
1523 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1524 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1525 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1526 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1527 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1528 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1529 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1531
1532 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1533 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1535 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1536 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1537 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1538 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1539 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1540
1541 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1542 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1544 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1545 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1546 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1547 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1548 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1549
1550 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1551 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1552 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1558
1559 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1562 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1563 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1564 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1566 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1567
1568 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1569 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1571 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1572 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1573 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1574 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1576
1577 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1579 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1581 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1582 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1583 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1584 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1585
1586 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1587 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1588 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1589 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1591 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1592 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1593 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1594
1595 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1596 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1598 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1599 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1601 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1602 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1603
1604 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1605 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1606 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1607 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1608 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1609 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1611 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1612
1613 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1614 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1615 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1616 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1617 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1618 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1619 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1621
1622 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1623 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1629 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1630
1631 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1632 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1633 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1639
1640 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1641 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1648
1649 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1650 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1657
1658 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1659 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1666
1667 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1668 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1675
1676 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1677 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1684
1685 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1686 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1693
1694 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1695 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1696 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1699 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1701 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1702
1703 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1704 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1705 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1706 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1707 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1711
1712 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1713 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1714 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1715 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1716 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1717 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1719 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1720
1721 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1722 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1723 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1724 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1725 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1726 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1727 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1729
1730 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1731 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1732 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1733 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1734 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1735 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1736 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1737 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1738
1739 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1741 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1742 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1743 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1744 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1745 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1746 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1747
1748 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1749 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1751 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1752 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1753 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1755 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1756
1757 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1758 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1765
1766 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1767 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1768 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1769 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1770 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1771 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1772 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1773 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1774
1775 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1776 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1777 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1778 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1779 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1781 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1782 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1783
1784 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1785 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1786 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1787 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1788 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1789 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1791 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1792
1793 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1794 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1795 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1796 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1797 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1798 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1799 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1801
1802 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1803 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1804 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1805 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1807 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1808 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1809 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1810
1811 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1812 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1813 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1814 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1815 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1816 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1817 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1818 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1819
1820 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1821 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1822 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1823 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1824 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1825 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1826 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1827 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1828
1829 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1831 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1832 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1833 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1834 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1835 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1836 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1837
1838 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1839 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1841 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1842 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1843 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1844 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1845 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1846
1847 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1848 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1849 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1851 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1852 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1855
1856 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1857 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1863 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1864
1865 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1866 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1867 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1868 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1869 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1871 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1872 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1873
1874 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1875 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1876 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1877 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1879 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1881 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1882
1883 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1884 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1885 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1887 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1888 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1889 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1890 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1891
1892 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1893 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1894 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1895 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1896 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1897 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1899 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1900
1901 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1902 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1903 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1905 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1906 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1907 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1908 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1909
1910 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1911 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1912 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1913 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1914 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1915 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1917 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1918
1919 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1927
1928 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1929 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1936
1937 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1938 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1945
1946 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1947 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1954
1955 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1956 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1963
1964 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1965 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1972
1973 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1974 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1981
1982 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1983 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1990
1991 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
1992 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1995 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1996 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1997 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1998 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
1999
2000 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2003 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2005 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2006 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2007 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2008
2009 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2011 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2012 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2014 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2015 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2016 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2017
2018 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2019 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2021 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2022 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2023 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2025 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2026
2027 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2028 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2029 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2031 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2032 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2033 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2034 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2035
2036 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2038 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2039 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2041 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2042 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2043 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2044
2045 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2046 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2047 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2048 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2051 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2052 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2053
2054 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2055 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2056 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2057 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2058 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2059 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2062
2063 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2067 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2068 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2069 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2071
2072 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2073 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2075 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2076 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2077 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2078 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2079 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2080
2081 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2082 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2083 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2084 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2085 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2086 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2087 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2088 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2089
2090 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2091 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2092 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2093 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2095 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2096 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2097 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2098
2099 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2101 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2102 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2103 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2104 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2105 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2107
2108 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2109 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2111 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2112 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2113 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2114 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2115 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2116
2117 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2118 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2119 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2122 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2123 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2124 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2125
2126 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2127 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2129 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2131 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2132 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2134
2135 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2136 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2141 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2142 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2143
2144 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2145 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2146 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2147 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2148 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2149 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2151 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2152
2153 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2154 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2155 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2156 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2157 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2158 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2159 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2161
2162 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2163 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2164 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2165 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2166 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2167 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2168 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2169 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2170
2171 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2172 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2173 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2174 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2175 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2176 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2177 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2178 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2179
2180 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2181 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2182 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2183 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2185 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2186 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2187 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2188
2189 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2191 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2192 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2193 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2194 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2195 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2196 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2197
2198 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2199 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2203 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2204 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2205 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2206
2207 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2208 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2213 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2214 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2215
2216 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2217 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2218 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2219 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2221 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2222 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2223 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2224
2225 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2226 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2227 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2228 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2229 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2231 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2232 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2233
2234 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2235 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2236 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2237 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2238 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2239 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2241 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2242
2243 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2244 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2245 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2246 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2247 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2248 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2249 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2251
2252 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2253 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2254 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2260
2261 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2262 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2263 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2264 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2265 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2266 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2267 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2268 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2269
2270 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2271 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2272 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2273 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2274 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2275 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2276 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2277 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2278
2279 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2281 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2282 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2283 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2284 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2285 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2286 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
2287
2288 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00
2289 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2291 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2292 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2293 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2294 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90
0 00 ff ff ff ff ff ff 00 0c a1 00 00 00 00 00 00
1 00 0c 01 03 80 50 2d 78 0a 0d c9 a0 57 47 98 27
2 12 48 4c 20 00 00 01 01 01 01 01 01 01 01 01 01
3 01 01 01 01 01 01 01 1d 80 18 71 1c 16 20 58 2c
4 25 00 20 c2 31 00 00 9e 8c 0a d0 8a 20 e0 2d 10
5 10 3e 96 00 58 c2 21 00 00 18 00 00 00 fc 00 4d
6 59 20 48 44 54 56 0a 20 20 20 20 20 00 00 00 fd
7 00 3b 3d 0f 2e 08 00 0a 20 20 20 20 20 20 01 c3
8
9 02 01 04 00 01 1d 00 72 51 d0 1e 20 6e 28 55 00
10 20 c2 31 00 00 1e 8c 0a a0 14 51 f0 16 00 26 7c
11 43 00 58 c2 21 00 00 98 00 00 00 01 00 52 45 56
12 31 2e 30 30 0a 00 00 00 00 00 00 00 00 ff 00 39
13 39 46 43 35 30 30 30 31 0a 20 20 20 00 00 00 00
14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84
0 00 ff ff ff ff ff ff 00 0c a1 00 00 00 00 00 00
1 00 0f 01 03 80 50 2d 78 0a 0d c9 a0 57 47 98 27
2 12 48 4c 20 00 00 01 01 01 01 01 01 01 01 01 01
3 01 01 01 01 01 01 01 1d 80 18 71 1c 16 20 58 2c
4 25 00 20 c2 31 00 00 9e 8c 0a d0 8a 20 e0 2d 10
5 10 3e 96 00 58 c2 21 00 00 18 00 00 00 fc 00 4d
6 59 20 48 44 54 56 0a 20 20 20 20 20 00 00 00 fd
7 00 3b 3d 0f 2e 08 00 0a 20 20 20 20 20 20 01 c0
8
9 02 03 1a 71 47 85 02 03 04 06 07 01 23 09 07 07
10 83 01 00 00 65 03 0c 00 10 00 01 1d 00 72 51 d0
11 1e 20 6e 28 55 00 20 c2 31 00 00 1e 8c 0a a0 14
12 51 f0 16 00 26 7c 43 00 58 c2 21 00 00 98 8c 0a
13 d0 8a 20 e0 2d 10 10 3e 96 00 20 c2 31 00 00 18
14 8c 0a a0 14 51 f0 16 00 26 7c 43 00 20 c2 31 00
15 00 98 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a
0 00 ff ff ff ff ff ff 00 31 d8 34 12 00 00 00 00
1 22 1a 01 03 80 60 36 78 1e ee 91 a3 54 4c 99 26
2 0f 50 54 2f cf 00 31 59 45 59 81 80 81 40 90 40
3 95 00 a9 40 b3 00 08 e8 00 30 f2 70 5a 80 b0 58
4 8a 00 c0 1c 32 00 00 1e 00 00 00 fd 00 18 55 18
5 87 3c 00 0a 20 20 20 20 20 20 00 00 00 fc 00 68
6 64 6d 69 2d 34 6b 2d 36 30 30 0a 20 00 00 00 10
7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 1d
8
9 02 03 3d f0 41 61 23 09 07 07 e2 00 ea af 06 1b
10 2c 34 3f 3c 60 43 4b 6c 44 82 4d 3b 42 ff 02 92
11 11 03 00 00 00 0a 40 06 3c 11 0a 18 18 d0 80 83
12 8f 3c 77 41 02 25 4a 7e 77 00 00 8c 57 4d d0 00
13 a0 f0 70 3e 80 30 20 35 00 c0 8c 32 00 00 1e 00
14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78
0 00 ff ff ff ff ff ff 00 34 38 c2 0b f1 01 00 00
1 0f 0a 01 00 28 20 18 32 e8 7e 4e 9e 57 45 98 24
2 10 47 4f a4 42 01 31 59 45 59 61 59 71 4f 81 80
3 01 01 01 01 01 01 f9 15 20 f8 30 58 1f 20 20 40
4 13 00 40 f0 10 00 00 1e a4 1a 20 10 31 58 24 20
5 2f 55 33 00 40 f0 10 00 00 1e 30 2a 00 98 51 00
6 2a 40 30 70 13 00 40 f0 10 00 00 1e ea 24 00 60
7 41 00 28 30 30 60 13 00 40 f0 10 00 00 1e 00 fb
0 00 ff ff ff ff ff ff 00 34 ac 81 43 f9 14 00 00
1 16 0a 01 01 0c 1f 17 a3 e8 67 a8 a0 56 47 99 26
2 11 48 4c ff ef 80 31 59 45 59 61 59 71 4f 81 59
3 81 99 a9 45 a9 4a 1a 4f 40 30 62 b0 32 40 40 c0
4 13 00 38 ea 10 00 00 1e 00 00 00 fd 00 32 82 1e
5 60 16 00 0a 20 20 20 20 20 20 00 00 00 fc 00 4e
6 46 4e 39 37 30 35 0a 20 20 20 20 20 00 00 00 ff
7 00 30 30 35 31 30 35 33 36 39 0a 20 20 20 00 6f
0 00 ff ff ff ff ff ff 00 4c a3 46 36 00 00 00 00
1 00 12 01 02 80 21 15 78 0a 87 f5 94 57 4f 8c 27
2 27 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
3 01 01 01 01 01 01 e0 2e 90 c4 60 1a 0f 40 18 58
4 13 00 4b cf 10 00 00 19 00 00 00 0f 00 00 00 00
5 00 00 00 00 00 3c d2 02 64 00 00 00 00 fe 00 53
6 41 4d 53 55 4e 47 0a 20 20 20 20 20 00 00 00 fe
7 00 4c 54 4e 31 35 34 50 33 2d 4c 30 34 0a 00 e0
0 00 ff ff ff ff ff ff 00 31 d8 34 12 00 00 00 00
1 22 1a 01 03 80 60 36 78 0f ee 91 a3 54 4c 99 26
2 0f 50 54 2f cf 00 31 59 45 59 81 80 81 40 90 40
3 95 00 a9 40 b3 00 08 e8 00 30 f2 70 5a 80 b0 58
4 8a 00 c0 1c 32 00 00 1e 00 00 00 fd 00 18 55 18
5 87 3c 00 0a 20 20 20 20 20 20 00 00 00 fc 00 68
6 64 6d 69 2d 34 6b 2d 36 30 30 0a 20 00 00 00 10
7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 2b
8
9 02 03 3f f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21
10 20 05 14 02 11 01 23 09 07 07 83 01 00 00 6d 03
11 0c 00 10 00 00 3c 21 00 60 01 02 03 67 d8 5d c4
12 01 78 00 00 e2 00 ea e3 05 00 00 e3 06 01 00 4d
13 d0 00 a0 f0 70 3e 80 30 20 35 00 c0 1c 32 00 00
14 1e 1a 36 80 a0 70 38 1f 40 30 20 35 00 c0 1c 32
15 00 00 1a 1a 1d 00 80 51 d0 1c 20 40 80 35 00 c0
16 1c 32 00 00 1c 00 00 00 00 00 00 00 00 00 00 63
17
18 50 01 00 30 00 22 00 02 10 39 84 09 46 61 62 72
19 69 6b 61 6e 74 05 4d 6f 64 65 6c 0b 53 65 72 69
20 65 6e 75 6d 6d 65 72 00 00 00 00 00 00 00 00 00
21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 66
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <DATAOBJ>
2 <HEADER TYPE="DID" VERSION="1.0"/>
3 <DATA>
4 <BLOCK0>00FFFFFFFFFFFF0031D8341200000000221A0103806036780FEE91A3544C99260F50542FCF00315945598180814090409500A940B30008E80030F2705A80B0588A00C01C3200001E000000FD00185518873C000A202020202020000000FC0068646D692D346B2D3630300A20000000100000000000000000000000000000012C</BLOCK0>
5 <BLOCK1>02033FF05161605F5E5D101F0413222120051402110123090707830100006D030C001000003C21006001020367D85DC401780000E200EAE3050000E30601004DD000A0F0703E8030203500C01C3200001E1A3680A070381F4030203500C01C3200001A1A1D008051D01C2040803500C01C3200001C0000000000000000000063</BLOCK1>
6 </DATA>
7 </DATAOBJ>
0 00 ff ff ff ff ff ff 00 24 4d 8e 19 00 00 00 00
1 0a 05 01 01 08 28 1e b4 c8 00 b2 a0 57 49 9b 26
2 10 48 4f a4 cf 7c 31 4a a9 40 a9 4a a9 4f 81 80
3 01 01 01 01 01 01 10 0b d0 b4 20 5e 63 10 12 6c
4 62 08 fa b8 00 00 00 1a 00 00 00 ff 00 33 30 39
5 41 42 43 30 30 30 32 35 0a 20 00 00 00 fe 00 54
6 48 49 53 20 49 53 20 41 0a 20 20 20 00 00 00 fe
7 00 54 45 53 54 2c 20 54 48 45 20 45 4e 44 00 8f
0 00 ff ff ff ff ff ff 00 10 ac ab 50 00 00 00 00
1 2a 09 01 03 0e 26 1d 96 ef ee 91 a3 54 4c 99 26
2 0f 50 54 a5 43 00 a9 4f a9 59 71 59 61 59 45 59
3 31 59 c2 8f 01 01 86 3d 00 c0 51 00 30 40 40 a0
4 13 00 7c 22 11 00 00 1e 00 00 00 ff 00 35 35 33
5 34 37 42 4f 4e 5a 48 34 37 0a 00 00 00 fc 00 44
6 45 4c 4c 20 55 52 31 31 31 0a 20 20 00 00 00 fd
7 00 30 a0 1e 79 1c 02 00 28 50 10 0e 80 46 00 8d
8
0 00 ff ff ff ff ff ff 00 04 43 06 f2 01 00 00 00
1 01 11 01 04 0f 2b 20 78 2b 9c 68 a0 57 4a 9b 26
2 12 48 4c ff ff 80 a9 59 a9 4f a9 4a a9 45 81 99
3 81 80 61 59 45 59 48 3f 40 30 62 b0 32 40 40 c0
4 13 00 ab 40 11 00 00 1e 00 00 00 fd 00 32 5a 1e
5 6e 17 04 11 00 c8 90 00 50 3c 00 00 00 f7 00 0a
6 f7 0f 03 87 c0 00 00 00 00 00 00 00 00 00 00 fc
7 00 41 42 43 20 4c 43 44 32 31 0a 20 20 20 00 9a
0 00 ff ff ff ff ff ff 00 04 43 07 f2 01 00 00 00
1 ff 11 01 04 a2 4f 00 78 1e ee 91 a3 54 4c 99 26
2 0f 50 54 20 00 00 01 01 01 01 01 01 01 01 01 01
3 01 01 01 01 01 01 02 3a 80 18 71 38 2d 40 58 2c
4 04 05 0f 48 42 00 00 1e 01 1d 80 18 71 1c 16 20
5 58 2c 25 00 0f 48 42 00 00 9e 01 1d 00 72 51 d0
6 1e 20 6e 28 55 00 0f 48 42 00 00 1e 00 00 00 fc
7 00 41 42 43 20 4c 43 44 34 37 77 0a 20 20 01 cb
8
9 02 03 1a 72 47 90 85 04 03 02 07 06 23 09 07 07
10 83 01 00 00 65 03 0c 00 10 00 8e 0a d0 8a 20 e0
11 2d 10 10 3e 96 00 1f 09 00 00 00 18 8e 0a d0 8a
12 20 e0 2d 10 10 3e 96 00 04 03 00 00 00 18 8e 0a
13 a0 14 51 f0 16 00 26 7c 43 00 1f 09 00 00 00 98
14 8e 0a a0 14 51 f0 16 00 26 7c 43 00 04 03 00 00
15 00 98 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c7
0 00 ff ff ff ff ff ff 00 04 43 08 f2 01 00 00 00
1 10 11 01 04 a2 79 44 78 1e ee 91 a3 54 4c 99 26
2 0f 50 54 ff ef 80 81 99 81 80 81 59 81 40 61 59
3 4b c0 45 59 31 59 66 21 50 b0 51 00 1b 30 40 70
4 36 00 be ab 42 00 00 1e 01 1d 00 72 51 d0 1e 20
5 6e 28 55 00 be ab 42 00 00 1e 00 00 00 f7 00 0a
6 f7 0f 03 87 c0 00 00 00 00 00 00 00 00 00 00 fc
7 00 41 42 43 20 50 4c 41 35 35 0a 20 20 20 01 0a
8
9 02 03 19 f0 46 05 04 03 02 07 06 23 09 07 07 83
10 01 00 00 65 03 0c 00 10 00 01 1d 80 18 71 1c 16
11 20 58 2c 25 00 0f 48 42 00 00 9e 01 1d 00 72 51
12 d0 1e 20 6e 28 55 00 0f 48 42 00 00 1e 8c 0a d0
13 8a 20 e0 2d 10 10 3e 96 00 b9 88 21 00 00 18 8e
14 0a a0 14 51 f0 16 00 26 7c 43 00 b9 88 21 00 00
15 98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58
0 [ 4.295] (--) Log file renamed from "/var/log/Xorg.pid-762.log" to "/var/log/Xorg.0.log"
1 [ 4.296]
2 X.Org X Server 1.20.4
3 X Protocol Version 11, Revision 0
4 [ 4.296] Build Operating System: Linux 4.9.0-8-amd64 x86_64 Debian
5 [ 4.296] Current Operating System: Linux octomore 5.4.0-rc8-octomore #23 SMP PREEMPT Sat Nov 23 16:00:49 CET 2019 x86_64
6 [ 4.296] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-rc8-octomore root=UUID=e227131b-ee41-479a-a25e-bce91b18a6ed ro
7 [ 4.296] Build Date: 05 March 2019 08:11:12PM
8 [ 4.296] xorg-server 2:1.20.4-1 (https://www.debian.org/support)
9 [ 4.296] Current version of pixman: 0.36.0
10 [ 4.296] Before reporting problems, check http://wiki.x.org
11 to make sure that you have the latest version.
12 [ 4.296] Markers: (--) probed, (**) from config file, (==) default setting,
13 (++) from command line, (!!) notice, (II) informational,
14 (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
15 [ 4.296] (==) Log file: "/var/log/Xorg.0.log", Time: Tue Nov 26 16:25:38 2019
16 [ 4.297] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
17 [ 4.298] (==) No Layout section. Using the first Screen section.
18 [ 4.298] (==) No screen section available. Using defaults.
19 [ 4.298] (**) |-->Screen "Default Screen Section" (0)
20 [ 4.298] (**) | |-->Monitor "<default monitor>"
21 [ 4.298] (==) No monitor specified for screen "Default Screen Section".
22 Using a default monitor configuration.
23 [ 4.298] (==) Automatically adding devices
24 [ 4.298] (==) Automatically enabling devices
25 [ 4.298] (==) Automatically adding GPU devices
26 [ 4.298] (==) Max clients allowed: 256, resource mask: 0x1fffff
27 [ 4.299] (WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
28 [ 4.299] Entry deleted from font path.
29 [ 4.301] (==) FontPath set to:
30 /usr/share/fonts/X11/misc,
31 /usr/share/fonts/X11/100dpi/:unscaled,
32 /usr/share/fonts/X11/75dpi/:unscaled,
33 /usr/share/fonts/X11/Type1,
34 /usr/share/fonts/X11/100dpi,
35 /usr/share/fonts/X11/75dpi,
36 built-ins
37 [ 4.301] (==) ModulePath set to "/usr/lib/xorg/modules"
38 [ 4.301] (II) The server relies on udev to provide the list of input devices.
39 If no devices become available, reconfigure udev or disable AutoAddDevices.
40 [ 4.301] (II) Loader magic: 0x55a9db113e20
41 [ 4.301] (II) Module ABI versions:
42 [ 4.301] X.Org ANSI C Emulation: 0.4
43 [ 4.301] X.Org Video Driver: 24.0
44 [ 4.301] X.Org XInput driver : 24.1
45 [ 4.301] X.Org Server Extension : 10.0
46 [ 4.301] (++) using VT number 7
47
48 [ 4.301] (II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
49 [ 4.302] (II) xfree86: Adding drm device (/dev/dri/card1)
50 [ 4.316] (II) xfree86: Adding drm device (/dev/dri/card0)
51 [ 4.318] (--) PCI:*(0@0:2:0) 8086:5917:17aa:225c rev 7, Mem @ 0x2ffa000000/16777216, 0x2fa0000000/268435456, I/O @ 0x0000e000/64, BIOS @ 0x????????/131072
52 [ 4.318] (II) LoadModule: "glx"
53 [ 4.319] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
54 [ 4.325] (II) Module glx: vendor="X.Org Foundation"
55 [ 4.325] compiled for 1.20.4, module version = 1.0.0
56 [ 4.325] ABI class: X.Org Server Extension, version 10.0
57 [ 4.325] (==) Matched modesetting as autoconfigured driver 0
58 [ 4.325] (==) Matched fbdev as autoconfigured driver 1
59 [ 4.325] (==) Matched vesa as autoconfigured driver 2
60 [ 4.325] (==) Assigned the driver to the xf86ConfigLayout
61 [ 4.325] (II) LoadModule: "modesetting"
62 [ 4.325] (II) Loading /usr/lib/xorg/modules/drivers/modesetting_drv.so
63 [ 4.326] (II) Module modesetting: vendor="X.Org Foundation"
64 [ 4.326] compiled for 1.20.4, module version = 1.20.4
65 [ 4.326] Module class: X.Org Video Driver
66 [ 4.326] ABI class: X.Org Video Driver, version 24.0
67 [ 4.326] (II) LoadModule: "fbdev"
68 [ 4.326] (II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
69 [ 4.327] (II) Module fbdev: vendor="X.Org Foundation"
70 [ 4.327] compiled for 1.20.0, module version = 0.5.0
71 [ 4.327] Module class: X.Org Video Driver
72 [ 4.327] ABI class: X.Org Video Driver, version 24.0
73 [ 4.327] (II) LoadModule: "vesa"
74 [ 4.327] (II) Loading /usr/lib/xorg/modules/drivers/vesa_drv.so
75 [ 4.327] (II) Module vesa: vendor="X.Org Foundation"
76 [ 4.327] compiled for 1.20.4, module version = 2.4.0
77 [ 4.327] Module class: X.Org Video Driver
78 [ 4.327] ABI class: X.Org Video Driver, version 24.0
79 [ 4.327] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
80 [ 4.327] (II) FBDEV: driver for framebuffer: fbdev
81 [ 4.327] (II) VESA: driver for VESA chipsets: vesa
82 [ 4.350] (II) modeset(0): using drv /dev/dri/card1
83 [ 4.350] (WW) Falling back to old probe method for fbdev
84 [ 4.350] (II) Loading sub module "fbdevhw"
85 [ 4.350] (II) LoadModule: "fbdevhw"
86 [ 4.350] (II) Loading /usr/lib/xorg/modules/libfbdevhw.so
87 [ 4.350] (II) Module fbdevhw: vendor="X.Org Foundation"
88 [ 4.350] compiled for 1.20.4, module version = 0.0.2
89 [ 4.350] ABI class: X.Org Video Driver, version 24.0
90 [ 4.350] (II) modeset(0): Creating default Display subsection in Screen section
91 "Default Screen Section" for depth/fbbpp 24/32
92 [ 4.350] (==) modeset(0): Depth 24, (==) framebuffer bpp 32
93 [ 4.350] (==) modeset(0): RGB weight 888
94 [ 4.350] (==) modeset(0): Default visual is TrueColor
95 [ 4.350] (II) Loading sub module "glamoregl"
96 [ 4.350] (II) LoadModule: "glamoregl"
97 [ 4.350] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
98 [ 4.356] (II) Module glamoregl: vendor="X.Org Foundation"
99 [ 4.356] compiled for 1.20.4, module version = 1.0.1
100 [ 4.356] ABI class: X.Org ANSI C Emulation, version 0.4
101 [ 4.395] (II) modeset(0): glamor X acceleration enabled on Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2)
102 [ 4.395] (II) modeset(0): glamor initialized
103 [ 4.396] (II) modeset(0): Output eDP-1 has no monitor section
104 [ 4.396] (II) modeset(0): Output DP-1 has no monitor section
105 [ 4.404] (II) modeset(0): Output HDMI-1 has no monitor section
106 [ 4.404] (II) modeset(0): Output DP-2 has no monitor section
107 [ 4.513] (II) modeset(0): Output HDMI-2 has no monitor section
108 [ 4.514] (II) modeset(0): EDID for output eDP-1
109 [ 4.514] (II) modeset(0): Manufacturer: AUO Model: 313d Serial#: 0
110 [ 4.514] (II) modeset(0): Year: 2016 Week: 0
111 [ 4.514] (II) modeset(0): EDID Version: 1.4
112 [ 4.514] (II) modeset(0): Digital Display Input
113 [ 4.514] (II) modeset(0): 8 bits per channel
114 [ 4.514] (II) modeset(0): Digital interface is DisplayPort
115 [ 4.514] (II) modeset(0): Max Image Size [cm]: horiz.: 31 vert.: 17
116 [ 4.514] (II) modeset(0): Gamma: 2.20
117 [ 4.514] (II) modeset(0): No DPMS capabilities specified
118 [ 4.514] (II) modeset(0): Supported color encodings: RGB 4:4:4
119 [ 4.514] (II) modeset(0): First detailed timing is preferred mode
120 [ 4.514] (II) modeset(0): Preferred mode is native pixel format and refresh rate
121 [ 4.514] (II) modeset(0): redX: 0.631 redY: 0.336 greenX: 0.323 greenY: 0.614
122 [ 4.514] (II) modeset(0): blueX: 0.156 blueY: 0.040 whiteX: 0.313 whiteY: 0.329
123 [ 4.514] (II) modeset(0): Manufacturer's mask: 0
124 [ 4.514] (II) modeset(0): Supported detailed timing:
125 [ 4.514] (II) modeset(0): clock: 141.0 MHz Image Size: 309 x 174 mm
126 [ 4.514] (II) modeset(0): h_active: 1920 h_sync: 1936 h_sync_end 1952 h_blank_end 2104 h_border: 0
127 [ 4.514] (II) modeset(0): v_active: 1080 v_sync: 1083 v_sync_end 1097 v_blanking: 1116 v_border: 0
128 [ 4.514] (II) modeset(0): Unknown vendor-specific block f
129 [ 4.514] (II) modeset(0): AUO
130 [ 4.514] (II) modeset(0): B140HAN03.1
131 [ 4.514] (II) modeset(0): EDID (in hex):
132 [ 4.514] (II) modeset(0): 00ffffffffffff0006af3d3100000000
133 [ 4.514] (II) modeset(0): 001a0104a51f1178028d15a156529d28
134 [ 4.514] (II) modeset(0): 0a505400000001010101010101010101
135 [ 4.514] (II) modeset(0): 010101010101143780b8703824401010
136 [ 4.514] (II) modeset(0): 3e0035ae100000180000000f00000000
137 [ 4.514] (II) modeset(0): 00000000000000000020000000fe0041
138 [ 4.514] (II) modeset(0): 554f0a202020202020202020000000fe
139 [ 4.514] (II) modeset(0): 004231343048414e30332e31200a003b
140 [ 4.514] (II) modeset(0): Printing probed modes for output eDP-1
141 [ 4.514] (II) modeset(0): Modeline "1920x1080"x60.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
142 [ 4.514] (II) modeset(0): Modeline "1920x1080"x120.0 356.38 1920 2080 2288 2656 1080 1081 1084 1118 doublescan -hsync +vsync (134.2 kHz d)
143 [ 4.514] (II) modeset(0): Modeline "1920x1080"x119.9 266.50 1920 1944 1960 2000 1080 1081 1084 1111 doublescan +hsync -vsync (133.2 kHz d)
144 [ 4.514] (II) modeset(0): Modeline "1920x1080"x60.0 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync (67.2 kHz d)
145 [ 4.514] (II) modeset(0): Modeline "1920x1080"x59.9 138.50 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync (66.6 kHz d)
146 [ 4.514] (II) modeset(0): Modeline "1680x1050"x60.0 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync (65.3 kHz d)
147 [ 4.514] (II) modeset(0): Modeline "1680x1050"x59.9 119.00 1680 1728 1760 1840 1050 1053 1059 1080 +hsync -vsync (64.7 kHz d)
148 [ 4.514] (II) modeset(0): Modeline "1600x1024"x60.2 103.12 1600 1600 1656 1664 1024 1024 1029 1030 +hsync +vsync (62.0 kHz d)
149 [ 4.514] (II) modeset(0): Modeline "1400x1050"x60.0 122.00 1400 1488 1640 1880 1050 1052 1064 1082 +hsync +vsync (64.9 kHz d)
150 [ 4.514] (II) modeset(0): Modeline "1600x900"x120.0 246.00 1600 1728 1900 2200 900 901 904 932 doublescan -hsync +vsync (111.8 kHz d)
151 [ 4.514] (II) modeset(0): Modeline "1600x900"x119.9 186.50 1600 1624 1640 1680 900 901 904 926 doublescan +hsync -vsync (111.0 kHz d)
152 [ 4.514] (II) modeset(0): Modeline "1600x900"x59.9 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync (56.0 kHz d)
153 [ 4.514] (II) modeset(0): Modeline "1600x900"x59.8 97.50 1600 1648 1680 1760 900 903 908 926 +hsync -vsync (55.4 kHz d)
154 [ 4.514] (II) modeset(0): Modeline "1280x1024"x60.0 108.00 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync (64.0 kHz d)
155 [ 4.514] (II) modeset(0): Modeline "1440x900"x59.9 106.50 1440 1520 1672 1904 900 903 909 934 -hsync +vsync (55.9 kHz d)
156 [ 4.514] (II) modeset(0): Modeline "1400x900"x60.0 103.50 1400 1480 1624 1848 900 903 913 934 -hsync +vsync (56.0 kHz d)
157 [ 4.514] (II) modeset(0): Modeline "1400x900"x59.9 86.50 1400 1448 1480 1560 900 903 913 926 +hsync -vsync (55.4 kHz d)
158 [ 4.514] (II) modeset(0): Modeline "1280x960"x60.0 108.00 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync (60.0 kHz d)
159 [ 4.514] (II) modeset(0): Modeline "1440x810"x120.0 198.12 1440 1548 1704 1968 810 811 814 839 doublescan -hsync +vsync (100.7 kHz d)
160 [ 4.514] (II) modeset(0): Modeline "1440x810"x119.9 151.88 1440 1464 1480 1520 810 811 814 833 doublescan +hsync -vsync (99.9 kHz d)
161 [ 4.514] (II) modeset(0): Modeline "1368x768"x59.9 85.25 1368 1440 1576 1784 768 771 781 798 -hsync +vsync (47.8 kHz d)
162 [ 4.514] (II) modeset(0): Modeline "1368x768"x59.9 72.25 1368 1416 1448 1528 768 771 781 790 +hsync -vsync (47.3 kHz d)
163 [ 4.514] (II) modeset(0): Modeline "1360x768"x59.8 84.75 1360 1432 1568 1776 768 771 781 798 -hsync +vsync (47.7 kHz d)
164 [ 4.514] (II) modeset(0): Modeline "1360x768"x60.0 72.00 1360 1408 1440 1520 768 771 781 790 +hsync -vsync (47.4 kHz d)
165 [ 4.514] (II) modeset(0): Modeline "1280x800"x120.0 174.25 1280 1380 1516 1752 800 801 804 829 doublescan -hsync +vsync (99.5 kHz d)
166 [ 4.514] (II) modeset(0): Modeline "1280x800"x119.9 134.25 1280 1304 1320 1360 800 801 804 823 doublescan +hsync -vsync (98.7 kHz d)
167 [ 4.514] (II) modeset(0): Modeline "1280x800"x59.8 83.50 1280 1352 1480 1680 800 803 809 831 -hsync +vsync (49.7 kHz d)
168 [ 4.514] (II) modeset(0): Modeline "1280x800"x59.9 71.00 1280 1328 1360 1440 800 803 809 823 +hsync -vsync (49.3 kHz d)
169 [ 4.514] (II) modeset(0): Modeline "1152x864"x60.0 81.62 1152 1216 1336 1520 864 865 868 895 -hsync +vsync (53.7 kHz d)
170 [ 4.514] (II) modeset(0): Modeline "1280x720"x120.0 156.12 1280 1376 1512 1744 720 721 724 746 doublescan -hsync +vsync (89.5 kHz d)
171 [ 4.514] (II) modeset(0): Modeline "1280x720"x120.0 120.75 1280 1304 1320 1360 720 721 724 740 doublescan +hsync -vsync (88.8 kHz d)
172 [ 4.514] (II) modeset(0): Modeline "1280x720"x59.9 74.50 1280 1344 1472 1664 720 723 728 748 -hsync +vsync (44.8 kHz d)
173 [ 4.514] (II) modeset(0): Modeline "1280x720"x59.7 63.75 1280 1328 1360 1440 720 723 728 741 +hsync -vsync (44.3 kHz d)
174 [ 4.514] (II) modeset(0): Modeline "1024x768"x120.1 133.47 1024 1100 1212 1400 768 768 770 794 doublescan -hsync +vsync (95.3 kHz d)
175 [ 4.514] (II) modeset(0): Modeline "1024x768"x60.0 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync (48.4 kHz d)
176 [ 4.514] (II) modeset(0): Modeline "960x720"x120.0 117.00 960 1024 1128 1300 720 720 722 750 doublescan -hsync +vsync (90.0 kHz d)
177 [ 4.514] (II) modeset(0): Modeline "928x696"x120.1 109.15 928 976 1088 1264 696 696 698 719 doublescan -hsync +vsync (86.4 kHz d)
178 [ 4.514] (II) modeset(0): Modeline "896x672"x120.0 102.40 896 960 1060 1224 672 672 674 697 doublescan -hsync +vsync (83.7 kHz d)
179 [ 4.514] (II) modeset(0): Modeline "1024x576"x119.9 98.50 1024 1092 1200 1376 576 577 580 597 doublescan -hsync +vsync (71.6 kHz d)
180 [ 4.514] (II) modeset(0): Modeline "1024x576"x119.9 78.38 1024 1048 1064 1104 576 577 580 592 doublescan +hsync -vsync (71.0 kHz d)
181 [ 4.514] (II) modeset(0): Modeline "1024x576"x59.9 46.50 1024 1064 1160 1296 576 579 584 599 -hsync +vsync (35.9 kHz d)
182 [ 4.514] (II) modeset(0): Modeline "1024x576"x59.8 42.00 1024 1072 1104 1184 576 579 584 593 +hsync -vsync (35.5 kHz d)
183 [ 4.514] (II) modeset(0): Modeline "960x600"x119.9 96.62 960 1028 1128 1296 600 601 604 622 doublescan -hsync +vsync (74.6 kHz d)
184 [ 4.514] (II) modeset(0): Modeline "960x600"x120.0 77.00 960 984 1000 1040 600 601 604 617 doublescan +hsync -vsync (74.0 kHz d)
185 [ 4.514] (II) modeset(0): Modeline "960x540"x119.9 86.50 960 1024 1124 1288 540 541 544 560 doublescan -hsync +vsync (67.2 kHz d)
186 [ 4.514] (II) modeset(0): Modeline "960x540"x120.0 69.25 960 984 1000 1040 540 541 544 555 doublescan +hsync -vsync (66.6 kHz d)
187 [ 4.514] (II) modeset(0): Modeline "960x540"x59.6 40.75 960 992 1088 1216 540 543 548 562 -hsync +vsync (33.5 kHz d)
188 [ 4.514] (II) modeset(0): Modeline "960x540"x59.8 37.25 960 1008 1040 1120 540 543 548 556 +hsync -vsync (33.3 kHz d)
189 [ 4.514] (II) modeset(0): Modeline "800x600"x120.0 81.00 800 832 928 1080 600 600 602 625 doublescan +hsync +vsync (75.0 kHz d)
190 [ 4.514] (II) modeset(0): Modeline "800x600"x60.3 40.00 800 840 968 1056 600 601 605 628 +hsync +vsync (37.9 kHz d)
191 [ 4.514] (II) modeset(0): Modeline "800x600"x56.2 36.00 800 824 896 1024 600 601 603 625 +hsync +vsync (35.2 kHz d)
192 [ 4.514] (II) modeset(0): Modeline "840x525"x120.0 73.12 840 892 980 1120 525 526 529 544 doublescan -hsync +vsync (65.3 kHz d)
193 [ 4.514] (II) modeset(0): Modeline "840x525"x119.8 59.50 840 864 880 920 525 526 529 540 doublescan +hsync -vsync (64.7 kHz d)
194 [ 4.514] (II) modeset(0): Modeline "864x486"x59.9 32.50 864 888 968 1072 486 489 494 506 -hsync +vsync (30.3 kHz d)
195 [ 4.514] (II) modeset(0): Modeline "864x486"x59.6 30.50 864 912 944 1024 486 489 494 500 +hsync -vsync (29.8 kHz d)
196 [ 4.514] (II) modeset(0): Modeline "800x512"x120.3 51.56 800 800 828 832 512 512 514 515 doublescan +hsync +vsync (62.0 kHz d)
197 [ 4.514] (II) modeset(0): Modeline "700x525"x120.0 61.00 700 744 820 940 525 526 532 541 doublescan +hsync +vsync (64.9 kHz d)
198 [ 4.514] (II) modeset(0): Modeline "800x450"x119.9 59.12 800 848 928 1056 450 451 454 467 doublescan -hsync +vsync (56.0 kHz d)
199 [ 4.514] (II) modeset(0): Modeline "800x450"x119.6 48.75 800 824 840 880 450 451 454 463 doublescan +hsync -vsync (55.4 kHz d)
200 [ 4.514] (II) modeset(0): Modeline "640x512"x120.0 54.00 640 664 720 844 512 512 514 533 doublescan +hsync +vsync (64.0 kHz d)
201 [ 4.514] (II) modeset(0): Modeline "720x450"x119.8 53.25 720 760 836 952 450 451 454 467 doublescan -hsync +vsync (55.9 kHz d)
202 [ 4.514] (II) modeset(0): Modeline "700x450"x119.9 51.75 700 740 812 924 450 451 456 467 doublescan -hsync +vsync (56.0 kHz d)
203 [ 4.514] (II) modeset(0): Modeline "700x450"x119.8 43.25 700 724 740 780 450 451 456 463 doublescan +hsync -vsync (55.4 kHz d)
204 [ 4.514] (II) modeset(0): Modeline "640x480"x120.0 54.00 640 688 744 900 480 480 482 500 doublescan +hsync +vsync (60.0 kHz d)
205 [ 4.514] (II) modeset(0): Modeline "640x480"x59.9 25.18 640 656 752 800 480 490 492 525 -hsync -vsync (31.5 kHz d)
206 [ 4.514] (II) modeset(0): Modeline "720x405"x59.5 22.50 720 744 808 896 405 408 413 422 -hsync +vsync (25.1 kHz d)
207 [ 4.514] (II) modeset(0): Modeline "720x405"x59.0 21.75 720 768 800 880 405 408 413 419 +hsync -vsync (24.7 kHz d)
208 [ 4.514] (II) modeset(0): Modeline "684x384"x119.8 42.62 684 720 788 892 384 385 390 399 doublescan -hsync +vsync (47.8 kHz d)
209 [ 4.514] (II) modeset(0): Modeline "684x384"x119.7 36.12 684 708 724 764 384 385 390 395 doublescan +hsync -vsync (47.3 kHz d)
210 [ 4.514] (II) modeset(0): Modeline "680x384"x119.6 42.38 680 716 784 888 384 385 390 399 doublescan -hsync +vsync (47.7 kHz d)
211 [ 4.514] (II) modeset(0): Modeline "680x384"x119.9 36.00 680 704 720 760 384 385 390 395 doublescan +hsync -vsync (47.4 kHz d)
212 [ 4.514] (II) modeset(0): Modeline "640x400"x119.8 41.75 640 676 740 840 400 401 404 415 doublescan -hsync +vsync (49.7 kHz d)
213 [ 4.514] (II) modeset(0): Modeline "640x400"x120.0 35.50 640 664 680 720 400 401 404 411 doublescan +hsync -vsync (49.3 kHz d)
214 [ 4.514] (II) modeset(0): Modeline "576x432"x120.1 40.81 576 608 668 760 432 432 434 447 doublescan -hsync +vsync (53.7 kHz d)
215 [ 4.514] (II) modeset(0): Modeline "640x360"x119.7 37.25 640 672 736 832 360 361 364 374 doublescan -hsync +vsync (44.8 kHz d)
216 [ 4.514] (II) modeset(0): Modeline "640x360"x119.7 31.88 640 664 680 720 360 361 364 370 doublescan +hsync -vsync (44.3 kHz d)
217 [ 4.514] (II) modeset(0): Modeline "640x360"x59.8 18.00 640 664 720 800 360 363 368 376 -hsync +vsync (22.5 kHz d)
218 [ 4.514] (II) modeset(0): Modeline "640x360"x59.3 17.75 640 688 720 800 360 363 368 374 +hsync -vsync (22.2 kHz d)
219 [ 4.514] (II) modeset(0): Modeline "512x384"x120.0 32.50 512 524 592 672 384 385 388 403 doublescan -hsync -vsync (48.4 kHz d)
220 [ 4.514] (II) modeset(0): Modeline "512x288"x120.0 23.25 512 532 580 648 288 289 292 299 doublescan -hsync +vsync (35.9 kHz d)
221 [ 4.514] (II) modeset(0): Modeline "512x288"x119.8 21.00 512 536 552 592 288 289 292 296 doublescan +hsync -vsync (35.5 kHz d)
222 [ 4.514] (II) modeset(0): Modeline "480x270"x119.3 20.38 480 496 544 608 270 271 274 281 doublescan -hsync +vsync (33.5 kHz d)
223 [ 4.514] (II) modeset(0): Modeline "480x270"x119.6 18.62 480 504 520 560 270 271 274 278 doublescan +hsync -vsync (33.3 kHz d)
224 [ 4.514] (II) modeset(0): Modeline "400x300"x120.6 20.00 400 420 484 528 300 300 302 314 doublescan +hsync +vsync (37.9 kHz d)
225 [ 4.515] (II) modeset(0): Modeline "400x300"x112.7 18.00 400 412 448 512 300 300 301 312 doublescan +hsync +vsync (35.2 kHz d)
226 [ 4.515] (II) modeset(0): Modeline "432x243"x119.8 16.25 432 444 484 536 243 244 247 253 doublescan -hsync +vsync (30.3 kHz d)
227 [ 4.515] (II) modeset(0): Modeline "432x243"x119.1 15.25 432 456 472 512 243 244 247 250 doublescan +hsync -vsync (29.8 kHz d)
228 [ 4.515] (II) modeset(0): Modeline "320x240"x120.1 12.59 320 328 376 400 240 245 246 262 doublescan -hsync -vsync (31.5 kHz d)
229 [ 4.515] (II) modeset(0): Modeline "360x202"x119.0 11.25 360 372 404 448 202 204 206 211 doublescan -hsync +vsync (25.1 kHz d)
230 [ 4.515] (II) modeset(0): Modeline "360x202"x118.3 10.88 360 384 400 440 202 204 206 209 doublescan +hsync -vsync (24.7 kHz d)
231 [ 4.515] (II) modeset(0): Modeline "320x180"x119.7 9.00 320 332 360 400 180 181 184 188 doublescan -hsync +vsync (22.5 kHz d)
232 [ 4.515] (II) modeset(0): Modeline "320x180"x118.6 8.88 320 344 360 400 180 181 184 187 doublescan +hsync -vsync (22.2 kHz d)
233 [ 4.515] (II) modeset(0): EDID for output DP-1
234 [ 4.531] (II) modeset(0): EDID for output HDMI-1
235 [ 4.531] (II) modeset(0): EDID for output DP-2
236 [ 4.640] (II) modeset(0): EDID for output HDMI-2
237 [ 4.640] (II) modeset(0): Output eDP-1 connected
238 [ 4.640] (II) modeset(0): Output DP-1 disconnected
239 [ 4.640] (II) modeset(0): Output HDMI-1 disconnected
240 [ 4.640] (II) modeset(0): Output DP-2 disconnected
241 [ 4.640] (II) modeset(0): Output HDMI-2 disconnected
242 [ 4.640] (II) modeset(0): Using exact sizes for initial modes
243 [ 4.640] (II) modeset(0): Output eDP-1 using initial mode 1920x1080 +0+0
244 [ 4.641] (==) modeset(0): Using gamma correction (1.0, 1.0, 1.0)
245 [ 4.641] (==) modeset(0): DPI set to (96, 96)
246 [ 4.641] (II) Loading sub module "fb"
247 [ 4.641] (II) LoadModule: "fb"
248 [ 4.641] (II) Loading /usr/lib/xorg/modules/libfb.so
249 [ 4.642] (II) Module fb: vendor="X.Org Foundation"
250 [ 4.642] compiled for 1.20.4, module version = 1.0.0
251 [ 4.642] ABI class: X.Org ANSI C Emulation, version 0.4
252 [ 4.642] (II) UnloadModule: "fbdev"
253 [ 4.642] (II) Unloading fbdev
254 [ 4.642] (II) UnloadSubModule: "fbdevhw"
255 [ 4.642] (II) Unloading fbdevhw
256 [ 4.642] (II) UnloadModule: "vesa"
257 [ 4.642] (II) Unloading vesa
258 [ 4.651] (==) modeset(0): Backing store enabled
259 [ 4.651] (==) modeset(0): Silken mouse enabled
260 [ 4.716] (II) modeset(0): Initializing kms color map for depth 24, 8 bpc.
261 [ 4.716] (==) modeset(0): DPMS enabled
262 [ 4.717] (II) modeset(0): [DRI2] Setup complete
263 [ 4.717] (II) modeset(0): [DRI2] DRI driver: i965
264 [ 4.717] (II) modeset(0): [DRI2] VDPAU driver: i965
265 [ 4.717] (II) Initializing extension Generic Event Extension
266 [ 4.717] (II) Initializing extension SHAPE
267 [ 4.717] (II) Initializing extension MIT-SHM
268 [ 4.717] (II) Initializing extension XInputExtension
269 [ 4.718] (II) Initializing extension XTEST
270 [ 4.718] (II) Initializing extension BIG-REQUESTS
271 [ 4.718] (II) Initializing extension SYNC
272 [ 4.718] (II) Initializing extension XKEYBOARD
273 [ 4.718] (II) Initializing extension XC-MISC
274 [ 4.718] (II) Initializing extension SECURITY
275 [ 4.718] (II) Initializing extension XFIXES
276 [ 4.718] (II) Initializing extension RENDER
277 [ 4.718] (II) Initializing extension RANDR
278 [ 4.719] (II) Initializing extension COMPOSITE
279 [ 4.719] (II) Initializing extension DAMAGE
280 [ 4.719] (II) Initializing extension MIT-SCREEN-SAVER
281 [ 4.719] (II) Initializing extension DOUBLE-BUFFER
282 [ 4.719] (II) Initializing extension RECORD
283 [ 4.719] (II) Initializing extension DPMS
284 [ 4.719] (II) Initializing extension Present
285 [ 4.719] (II) Initializing extension DRI3
286 [ 4.719] (II) Initializing extension X-Resource
287 [ 4.719] (II) Initializing extension XVideo
288 [ 4.720] (II) Initializing extension XVideo-MotionCompensation
289 [ 4.720] (II) Initializing extension SELinux
290 [ 4.720] (II) SELinux: Disabled on system
291 [ 4.720] (II) Initializing extension GLX
292 [ 4.724] (II) AIGLX: Loaded and initialized i965
293 [ 4.724] (II) GLX: Initialized DRI2 GL provider for screen 0
294 [ 4.724] (II) Initializing extension XFree86-VidModeExtension
295 [ 4.724] (II) Initializing extension XFree86-DGA
296 [ 4.724] (II) Initializing extension XFree86-DRI
297 [ 4.724] (II) Initializing extension DRI2
298 [ 4.733] (II) modeset(0): Damage tracking initialized
299 [ 4.733] (II) modeset(0): Setting screen physical size to 508 x 285
300 [ 4.771] (II) config/udev: Adding input device Power Button (/dev/input/event2)
301 [ 4.771] (**) Power Button: Applying InputClass "libinput keyboard catchall"
302 [ 4.771] (II) LoadModule: "libinput"
303 [ 4.771] (II) Loading /usr/lib/xorg/modules/input/libinput_drv.so
304 [ 4.774] (II) Module libinput: vendor="X.Org Foundation"
305 [ 4.774] compiled for 1.20.4, module version = 0.29.0
306 [ 4.774] Module class: X.Org XInput Driver
307 [ 4.774] ABI class: X.Org XInput driver, version 24.1
308 [ 4.774] (II) Using input driver 'libinput' for 'Power Button'
309 [ 4.774] (**) Power Button: always reports core events
310 [ 4.774] (**) Option "Device" "/dev/input/event2"
311 [ 4.774] (**) Option "_source" "server/udev"
312 [ 4.776] (II) event2 - Power Button: is tagged by udev as: Keyboard
313 [ 4.776] (II) event2 - Power Button: device is a keyboard
314 [ 4.776] (II) event2 - Power Button: device removed
315 [ 4.796] (**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2/event2"
316 [ 4.796] (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6)
317 [ 4.796] (**) Option "xkb_model" "pc105"
318 [ 4.796] (**) Option "xkb_layout" "us"
319 [ 4.796] (II) event2 - Power Button: is tagged by udev as: Keyboard
320 [ 4.796] (II) event2 - Power Button: device is a keyboard
321 [ 4.797] (II) config/udev: Adding input device Video Bus (/dev/input/event5)
322 [ 4.797] (**) Video Bus: Applying InputClass "libinput keyboard catchall"
323 [ 4.797] (II) Using input driver 'libinput' for 'Video Bus'
324 [ 4.797] (**) Video Bus: always reports core events
325 [ 4.797] (**) Option "Device" "/dev/input/event5"
326 [ 4.797] (**) Option "_source" "server/udev"
327 [ 4.797] (II) event5 - Video Bus: is tagged by udev as: Keyboard
328 [ 4.797] (II) event5 - Video Bus: device is a keyboard
329 [ 4.797] (II) event5 - Video Bus: device removed
330 [ 4.819] (**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input7/event5"
331 [ 4.819] (II) XINPUT: Adding extended input device "Video Bus" (type: KEYBOARD, id 7)
332 [ 4.819] (**) Option "xkb_model" "pc105"
333 [ 4.819] (**) Option "xkb_layout" "us"
334 [ 4.819] (II) event5 - Video Bus: is tagged by udev as: Keyboard
335 [ 4.819] (II) event5 - Video Bus: device is a keyboard
336 [ 4.819] (II) config/udev: Adding input device Lid Switch (/dev/input/event1)
337 [ 4.819] (II) No input driver specified, ignoring this device.
338 [ 4.819] (II) This device may have been added with another device file.
339 [ 4.820] (II) config/udev: Adding input device Sleep Button (/dev/input/event0)
340 [ 4.820] (**) Sleep Button: Applying InputClass "libinput keyboard catchall"
341 [ 4.820] (II) Using input driver 'libinput' for 'Sleep Button'
342 [ 4.820] (**) Sleep Button: always reports core events
343 [ 4.820] (**) Option "Device" "/dev/input/event0"
344 [ 4.820] (**) Option "_source" "server/udev"
345 [ 4.820] (II) event0 - Sleep Button: is tagged by udev as: Keyboard
346 [ 4.820] (II) event0 - Sleep Button: device is a keyboard
347 [ 4.820] (II) event0 - Sleep Button: device removed
348 [ 4.834] (**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0/event0"
349 [ 4.834] (II) XINPUT: Adding extended input device "Sleep Button" (type: KEYBOARD, id 8)
350 [ 4.834] (**) Option "xkb_model" "pc105"
351 [ 4.834] (**) Option "xkb_layout" "us"
352 [ 4.834] (II) event0 - Sleep Button: is tagged by udev as: Keyboard
353 [ 4.834] (II) event0 - Sleep Button: device is a keyboard
354 [ 4.835] (II) config/udev: Adding input device serio3 (/dev/input/event19)
355 [ 4.835] (**) serio3: Applying InputClass "libinput keyboard catchall"
356 [ 4.835] (II) Using input driver 'libinput' for 'serio3'
357 [ 4.835] (**) serio3: always reports core events
358 [ 4.835] (**) Option "Device" "/dev/input/event19"
359 [ 4.835] (**) Option "_source" "server/udev"
360 [ 4.836] (II) event19 - serio3: is tagged by udev as: Keyboard
361 [ 4.836] (II) event19 - serio3: device is a keyboard
362 [ 4.836] (II) event19 - serio3: device removed
363 [ 4.847] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio3/rc/rc0/input21/event19"
364 [ 4.847] (II) XINPUT: Adding extended input device "serio3" (type: KEYBOARD, id 9)
365 [ 4.847] (**) Option "xkb_model" "pc105"
366 [ 4.847] (**) Option "xkb_layout" "us"
367 [ 4.848] (II) event19 - serio3: is tagged by udev as: Keyboard
368 [ 4.848] (II) event19 - serio3: device is a keyboard
369 [ 4.848] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
370 [ 4.848] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
371 [ 4.848] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
372 [ 4.848] (**) Pulse-Eight CEC Adapter: always reports core events
373 [ 4.848] (**) Option "Device" "/dev/input/event6"
374 [ 4.848] (**) Option "_source" "server/udev"
375 [ 4.900] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
376 [ 4.900] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
377 [ 4.900] (II) event6 - Pulse-Eight CEC Adapter: device removed
378 [ 4.915] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0001/input/input8/event6"
379 [ 4.915] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 10)
380 [ 4.915] (**) Option "AccelerationScheme" "none"
381 [ 4.915] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
382 [ 4.915] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
383 [ 4.915] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
384 [ 4.967] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
385 [ 4.967] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
386 [ 4.968] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
387 [ 4.968] (II) No input driver specified, ignoring this device.
388 [ 4.968] (II) This device may have been added with another device file.
389 [ 4.968] (II) config/udev: Adding input device Integrated IR Camera: Integrate (/dev/input/event17)
390 [ 4.968] (**) Integrated IR Camera: Integrate: Applying InputClass "libinput keyboard catchall"
391 [ 4.968] (II) Using input driver 'libinput' for 'Integrated IR Camera: Integrate'
392 [ 4.968] (**) Integrated IR Camera: Integrate: always reports core events
393 [ 4.968] (**) Option "Device" "/dev/input/event17"
394 [ 4.968] (**) Option "_source" "server/udev"
395 [ 4.969] (II) event17 - Integrated IR Camera: Integrate: is tagged by udev as: Keyboard
396 [ 4.969] (II) event17 - Integrated IR Camera: Integrate: device is a keyboard
397 [ 4.969] (II) event17 - Integrated IR Camera: Integrate: device removed
398 [ 4.985] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/input/input19/event17"
399 [ 4.985] (II) XINPUT: Adding extended input device "Integrated IR Camera: Integrate" (type: KEYBOARD, id 11)
400 [ 4.985] (**) Option "xkb_model" "pc105"
401 [ 4.985] (**) Option "xkb_layout" "us"
402 [ 4.985] (II) event17 - Integrated IR Camera: Integrate: is tagged by udev as: Keyboard
403 [ 4.985] (II) event17 - Integrated IR Camera: Integrate: device is a keyboard
404 [ 4.986] (II) config/udev: Adding input device Integrated Camera: Integrated C (/dev/input/event18)
405 [ 4.986] (**) Integrated Camera: Integrated C: Applying InputClass "libinput keyboard catchall"
406 [ 4.986] (II) Using input driver 'libinput' for 'Integrated Camera: Integrated C'
407 [ 4.986] (**) Integrated Camera: Integrated C: always reports core events
408 [ 4.986] (**) Option "Device" "/dev/input/event18"
409 [ 4.986] (**) Option "_source" "server/udev"
410 [ 4.986] (II) event18 - Integrated Camera: Integrated C: is tagged by udev as: Keyboard
411 [ 4.987] (II) event18 - Integrated Camera: Integrated C: device is a keyboard
412 [ 4.987] (II) event18 - Integrated Camera: Integrated C: device removed
413 [ 5.005] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/input/input20/event18"
414 [ 5.005] (II) XINPUT: Adding extended input device "Integrated Camera: Integrated C" (type: KEYBOARD, id 12)
415 [ 5.005] (**) Option "xkb_model" "pc105"
416 [ 5.005] (**) Option "xkb_layout" "us"
417 [ 5.005] (II) event18 - Integrated Camera: Integrated C: is tagged by udev as: Keyboard
418 [ 5.005] (II) event18 - Integrated Camera: Integrated C: device is a keyboard
419 [ 5.006] (II) config/udev: Adding input device HDA Intel PCH Mic (/dev/input/event8)
420 [ 5.006] (II) No input driver specified, ignoring this device.
421 [ 5.006] (II) This device may have been added with another device file.
422 [ 5.006] (II) config/udev: Adding input device HDA Intel PCH Headphone (/dev/input/event9)
423 [ 5.006] (II) No input driver specified, ignoring this device.
424 [ 5.006] (II) This device may have been added with another device file.
425 [ 5.006] (II) config/udev: Adding input device HDA Intel PCH HDMI/DP,pcm=3 (/dev/input/event10)
426 [ 5.006] (II) No input driver specified, ignoring this device.
427 [ 5.006] (II) This device may have been added with another device file.
428 [ 5.006] (II) config/udev: Adding input device HDA Intel PCH HDMI/DP,pcm=7 (/dev/input/event11)
429 [ 5.006] (II) No input driver specified, ignoring this device.
430 [ 5.006] (II) This device may have been added with another device file.
431 [ 5.006] (II) config/udev: Adding input device HDA Intel PCH HDMI/DP,pcm=8 (/dev/input/event12)
432 [ 5.006] (II) No input driver specified, ignoring this device.
433 [ 5.006] (II) This device may have been added with another device file.
434 [ 5.007] (II) config/udev: Adding input device HDA Intel PCH HDMI/DP,pcm=9 (/dev/input/event13)
435 [ 5.007] (II) No input driver specified, ignoring this device.
436 [ 5.007] (II) This device may have been added with another device file.
437 [ 5.007] (II) config/udev: Adding input device HDA Intel PCH HDMI/DP,pcm=10 (/dev/input/event14)
438 [ 5.007] (II) No input driver specified, ignoring this device.
439 [ 5.007] (II) This device may have been added with another device file.
440 [ 5.007] (II) config/udev: Adding input device HDA Digital PCBeep (/dev/input/event7)
441 [ 5.007] (II) No input driver specified, ignoring this device.
442 [ 5.007] (II) This device may have been added with another device file.
443 [ 5.007] (II) config/udev: Adding input device AT Translated Set 2 keyboard (/dev/input/event4)
444 [ 5.007] (**) AT Translated Set 2 keyboard: Applying InputClass "libinput keyboard catchall"
445 [ 5.007] (II) Using input driver 'libinput' for 'AT Translated Set 2 keyboard'
446 [ 5.007] (**) AT Translated Set 2 keyboard: always reports core events
447 [ 5.007] (**) Option "Device" "/dev/input/event4"
448 [ 5.007] (**) Option "_source" "server/udev"
449 [ 5.008] (II) event4 - AT Translated Set 2 keyboard: is tagged by udev as: Keyboard
450 [ 5.008] (II) event4 - AT Translated Set 2 keyboard: device is a keyboard
451 [ 5.008] (II) event4 - AT Translated Set 2 keyboard: device removed
452 [ 5.017] (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio0/input/input3/event4"
453 [ 5.017] (II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD, id 13)
454 [ 5.017] (**) Option "xkb_model" "pc105"
455 [ 5.017] (**) Option "xkb_layout" "us"
456 [ 5.017] (II) event4 - AT Translated Set 2 keyboard: is tagged by udev as: Keyboard
457 [ 5.017] (II) event4 - AT Translated Set 2 keyboard: device is a keyboard
458 [ 5.018] (II) config/udev: Adding input device PC Speaker (/dev/input/event3)
459 [ 5.018] (II) No input driver specified, ignoring this device.
460 [ 5.018] (II) This device may have been added with another device file.
461 [ 5.018] (II) config/udev: Adding input device Synaptics TM3289-021 (/dev/input/event15)
462 [ 5.018] (**) Synaptics TM3289-021: Applying InputClass "libinput touchpad catchall"
463 [ 5.018] (II) Using input driver 'libinput' for 'Synaptics TM3289-021'
464 [ 5.018] (**) Synaptics TM3289-021: always reports core events
465 [ 5.018] (**) Option "Device" "/dev/input/event15"
466 [ 5.018] (**) Option "_source" "server/udev"
467 [ 5.019] (II) event15 - Synaptics TM3289-021: is tagged by udev as: Touchpad
468 [ 5.019] (II) event15 - Synaptics TM3289-021: device is a touchpad
469 [ 5.019] (II) event15 - Synaptics TM3289-021: device removed
470 [ 5.037] (**) Option "config_info" "udev:/sys/devices/rmi4-00/input/input12/event15"
471 [ 5.037] (II) XINPUT: Adding extended input device "Synaptics TM3289-021" (type: TOUCHPAD, id 14)
472 [ 5.037] (**) Option "AccelerationScheme" "none"
473 [ 5.037] (**) Synaptics TM3289-021: (accel) selected scheme none/0
474 [ 5.037] (**) Synaptics TM3289-021: (accel) acceleration factor: 2.000
475 [ 5.037] (**) Synaptics TM3289-021: (accel) acceleration threshold: 4
476 [ 5.038] (II) event15 - Synaptics TM3289-021: is tagged by udev as: Touchpad
477 [ 5.038] (II) event15 - Synaptics TM3289-021: device is a touchpad
478 [ 5.039] (II) config/udev: Adding input device Synaptics TM3289-021 (/dev/input/mouse1)
479 [ 5.039] (II) No input driver specified, ignoring this device.
480 [ 5.039] (II) This device may have been added with another device file.
481 [ 5.039] (II) config/udev: Adding input device TPPS/2 Elan TrackPoint (/dev/input/event16)
482 [ 5.039] (**) TPPS/2 Elan TrackPoint: Applying InputClass "libinput pointer catchall"
483 [ 5.039] (II) Using input driver 'libinput' for 'TPPS/2 Elan TrackPoint'
484 [ 5.039] (**) TPPS/2 Elan TrackPoint: always reports core events
485 [ 5.039] (**) Option "Device" "/dev/input/event16"
486 [ 5.039] (**) Option "_source" "server/udev"
487 [ 5.040] (II) event16 - TPPS/2 Elan TrackPoint: is tagged by udev as: Mouse Pointingstick
488 [ 5.040] (II) event16 - TPPS/2 Elan TrackPoint: trackpoint multiplier is 0.40
489 [ 5.040] (II) event16 - TPPS/2 Elan TrackPoint: device is a pointer
490 [ 5.040] (II) event16 - TPPS/2 Elan TrackPoint: device removed
491 [ 5.062] (**) Option "config_info" "udev:/sys/devices/rmi4-00/rmi4-00.fn03/serio2/input/input18/event16"
492 [ 5.062] (II) XINPUT: Adding extended input device "TPPS/2 Elan TrackPoint" (type: MOUSE, id 15)
493 [ 5.062] (**) Option "AccelerationScheme" "none"
494 [ 5.062] (**) TPPS/2 Elan TrackPoint: (accel) selected scheme none/0
495 [ 5.062] (**) TPPS/2 Elan TrackPoint: (accel) acceleration factor: 2.000
496 [ 5.062] (**) TPPS/2 Elan TrackPoint: (accel) acceleration threshold: 4
497 [ 5.062] (II) event16 - TPPS/2 Elan TrackPoint: is tagged by udev as: Mouse Pointingstick
498 [ 5.062] (II) event16 - TPPS/2 Elan TrackPoint: trackpoint multiplier is 0.40
499 [ 5.063] (II) event16 - TPPS/2 Elan TrackPoint: device is a pointer
500 [ 5.063] (II) config/udev: Adding input device TPPS/2 Elan TrackPoint (/dev/input/mouse2)
501 [ 5.063] (II) No input driver specified, ignoring this device.
502 [ 5.063] (II) This device may have been added with another device file.
503 [ 5.132] (EE) Failed to open authorization file "/var/run/sddm/{f25a154d-0c5d-47a7-b540-6fc92b41d2f3}": No such file or directory
504 [ 12.176] (II) modeset(0): EDID vendor "AUO", prod id 12605
505 [ 12.176] (II) modeset(0): Printing DDC gathered Modelines:
506 [ 12.176] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
507 [ 12.669] (II) modeset(0): EDID vendor "AUO", prod id 12605
508 [ 12.670] (II) modeset(0): Printing DDC gathered Modelines:
509 [ 12.670] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
510 [ 148.238] (II) modeset(0): EDID vendor "AUO", prod id 12605
511 [ 148.238] (II) modeset(0): Printing DDC gathered Modelines:
512 [ 148.238] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
513 [ 148.829] (--) modeset(0): HDMI max TMDS frequency 150000KHz
514 [ 149.714] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
515 [ 219.576] (II) config/udev: removing device serio3
516 [ 219.577] (II) event19 - serio3: device removed
517 [ 219.591] (II) UnloadModule: "libinput"
518 [ 219.591] (II) config/udev: removing device Pulse-Eight CEC Adapter
519 [ 219.591] (II) event6 - Pulse-Eight CEC Adapter: device removed
520 [ 219.605] (II) UnloadModule: "libinput"
521 [ 222.688] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
522 [ 222.688] (II) No input driver specified, ignoring this device.
523 [ 222.688] (II) This device may have been added with another device file.
524 [ 222.770] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
525 [ 222.771] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
526 [ 222.771] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
527 [ 222.771] (**) Pulse-Eight CEC Adapter: always reports core events
528 [ 222.771] (**) Option "Device" "/dev/input/event6"
529 [ 222.771] (**) Option "_source" "server/udev"
530 [ 222.824] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
531 [ 222.824] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
532 [ 222.824] (II) event6 - Pulse-Eight CEC Adapter: device removed
533 [ 222.854] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0002/input/input22/event6"
534 [ 222.854] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
535 [ 222.854] (**) Option "AccelerationScheme" "none"
536 [ 222.854] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
537 [ 222.854] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
538 [ 222.854] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
539 [ 222.910] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
540 [ 222.910] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
541 [ 222.913] (II) config/udev: Adding input device serio4 (/dev/input/event19)
542 [ 222.913] (**) serio4: Applying InputClass "libinput keyboard catchall"
543 [ 222.913] (II) Using input driver 'libinput' for 'serio4'
544 [ 222.913] (**) serio4: always reports core events
545 [ 222.913] (**) Option "Device" "/dev/input/event19"
546 [ 222.913] (**) Option "_source" "server/udev"
547 [ 222.917] (II) event19 - serio4: is tagged by udev as: Keyboard
548 [ 222.918] (II) event19 - serio4: device is a keyboard
549 [ 222.918] (II) event19 - serio4: device removed
550 [ 222.933] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio4/rc/rc0/input23/event19"
551 [ 222.933] (II) XINPUT: Adding extended input device "serio4" (type: KEYBOARD, id 10)
552 [ 222.933] (**) Option "xkb_model" "pc105"
553 [ 222.933] (**) Option "xkb_layout" "us"
554 [ 222.933] (WW) Option "xkb_variant" requires a string value
555 [ 222.933] (WW) Option "xkb_options" requires a string value
556 [ 222.938] (II) event19 - serio4: is tagged by udev as: Keyboard
557 [ 222.938] (II) event19 - serio4: device is a keyboard
558 [ 268.794] (II) modeset(0): EDID vendor "AUO", prod id 12605
559 [ 268.794] (II) modeset(0): Printing DDC gathered Modelines:
560 [ 268.794] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
561 [ 269.884] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
562 [ 272.592] (II) modeset(0): EDID vendor "AUO", prod id 12605
563 [ 272.592] (II) modeset(0): Printing DDC gathered Modelines:
564 [ 272.592] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
565 [ 272.927] (--) modeset(0): HDMI max TMDS frequency 150000KHz
566 [ 273.756] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
567 [ 282.930] (II) modeset(0): EDID vendor "AUO", prod id 12605
568 [ 282.930] (II) modeset(0): Printing DDC gathered Modelines:
569 [ 282.930] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
570 [ 283.262] (--) modeset(0): HDMI max TMDS frequency 150000KHz
571 [ 307.150] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
572 [ 309.524] (II) modeset(0): EDID vendor "AUO", prod id 12605
573 [ 309.524] (II) modeset(0): Printing DDC gathered Modelines:
574 [ 309.524] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
575 [ 309.860] (--) modeset(0): HDMI max TMDS frequency 150000KHz
576 [ 310.742] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
577 [ 325.273] (II) modeset(0): EDID vendor "AUO", prod id 12605
578 [ 325.273] (II) modeset(0): Printing DDC gathered Modelines:
579 [ 325.273] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
580 [ 325.607] (--) modeset(0): HDMI max TMDS frequency 150000KHz
581 [ 361.491] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
582 [ 364.630] (II) modeset(0): EDID vendor "AUO", prod id 12605
583 [ 364.630] (II) modeset(0): Printing DDC gathered Modelines:
584 [ 364.630] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
585 [ 364.965] (--) modeset(0): HDMI max TMDS frequency 150000KHz
586 [ 365.793] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
587 [ 740.130] (II) config/udev: removing device serio4
588 [ 740.130] (II) event19 - serio4: device removed
589 [ 740.144] (II) UnloadModule: "libinput"
590 [ 740.149] (II) config/udev: removing device Pulse-Eight CEC Adapter
591 [ 740.149] (II) event6 - Pulse-Eight CEC Adapter: device removed
592 [ 740.160] (II) UnloadModule: "libinput"
593 [ 767.809] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
594 [ 767.809] (II) No input driver specified, ignoring this device.
595 [ 767.809] (II) This device may have been added with another device file.
596 [ 767.889] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
597 [ 767.889] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
598 [ 767.889] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
599 [ 767.889] (**) Pulse-Eight CEC Adapter: always reports core events
600 [ 767.889] (**) Option "Device" "/dev/input/event6"
601 [ 767.889] (**) Option "_source" "server/udev"
602 [ 767.945] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
603 [ 767.945] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
604 [ 767.946] (II) event6 - Pulse-Eight CEC Adapter: device removed
605 [ 767.973] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0003/input/input24/event6"
606 [ 767.973] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
607 [ 767.974] (**) Option "AccelerationScheme" "none"
608 [ 767.975] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
609 [ 767.975] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
610 [ 767.975] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
611 [ 768.030] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
612 [ 768.030] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
613 [ 768.033] (II) config/udev: Adding input device serio5 (/dev/input/event19)
614 [ 768.033] (**) serio5: Applying InputClass "libinput keyboard catchall"
615 [ 768.033] (II) Using input driver 'libinput' for 'serio5'
616 [ 768.033] (**) serio5: always reports core events
617 [ 768.033] (**) Option "Device" "/dev/input/event19"
618 [ 768.033] (**) Option "_source" "server/udev"
619 [ 768.037] (II) event19 - serio5: is tagged by udev as: Keyboard
620 [ 768.038] (II) event19 - serio5: device is a keyboard
621 [ 768.039] (II) event19 - serio5: device removed
622 [ 768.049] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio5/rc/rc0/input25/event19"
623 [ 768.049] (II) XINPUT: Adding extended input device "serio5" (type: KEYBOARD, id 10)
624 [ 768.049] (**) Option "xkb_model" "pc105"
625 [ 768.049] (**) Option "xkb_layout" "us"
626 [ 768.049] (WW) Option "xkb_variant" requires a string value
627 [ 768.049] (WW) Option "xkb_options" requires a string value
628 [ 768.054] (II) event19 - serio5: is tagged by udev as: Keyboard
629 [ 768.054] (II) event19 - serio5: device is a keyboard
630 [ 854.957] (II) modeset(0): EDID vendor "AUO", prod id 12605
631 [ 854.957] (II) modeset(0): Printing DDC gathered Modelines:
632 [ 854.957] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
633 [ 856.045] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
634 [ 1518.312] (II) config/udev: removing device serio5
635 [ 1518.312] (II) event19 - serio5: device removed
636 [ 1518.328] (II) UnloadModule: "libinput"
637 [ 1518.331] (II) config/udev: removing device Pulse-Eight CEC Adapter
638 [ 1518.331] (II) event6 - Pulse-Eight CEC Adapter: device removed
639 [ 1518.343] (II) UnloadModule: "libinput"
640 [ 1524.043] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
641 [ 1524.043] (II) No input driver specified, ignoring this device.
642 [ 1524.043] (II) This device may have been added with another device file.
643 [ 1524.122] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
644 [ 1524.122] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
645 [ 1524.122] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
646 [ 1524.122] (**) Pulse-Eight CEC Adapter: always reports core events
647 [ 1524.122] (**) Option "Device" "/dev/input/event6"
648 [ 1524.122] (**) Option "_source" "server/udev"
649 [ 1524.175] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
650 [ 1524.175] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
651 [ 1524.176] (II) event6 - Pulse-Eight CEC Adapter: device removed
652 [ 1524.208] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0004/input/input26/event6"
653 [ 1524.208] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
654 [ 1524.209] (**) Option "AccelerationScheme" "none"
655 [ 1524.210] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
656 [ 1524.210] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
657 [ 1524.210] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
658 [ 1524.265] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
659 [ 1524.265] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
660 [ 1524.268] (II) config/udev: Adding input device serio6 (/dev/input/event19)
661 [ 1524.268] (**) serio6: Applying InputClass "libinput keyboard catchall"
662 [ 1524.268] (II) Using input driver 'libinput' for 'serio6'
663 [ 1524.268] (**) serio6: always reports core events
664 [ 1524.268] (**) Option "Device" "/dev/input/event19"
665 [ 1524.268] (**) Option "_source" "server/udev"
666 [ 1524.273] (II) event19 - serio6: is tagged by udev as: Keyboard
667 [ 1524.273] (II) event19 - serio6: device is a keyboard
668 [ 1524.274] (II) event19 - serio6: device removed
669 [ 1524.292] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio6/rc/rc0/input27/event19"
670 [ 1524.292] (II) XINPUT: Adding extended input device "serio6" (type: KEYBOARD, id 10)
671 [ 1524.292] (**) Option "xkb_model" "pc105"
672 [ 1524.292] (**) Option "xkb_layout" "us"
673 [ 1524.292] (WW) Option "xkb_variant" requires a string value
674 [ 1524.292] (WW) Option "xkb_options" requires a string value
675 [ 1524.297] (II) event19 - serio6: is tagged by udev as: Keyboard
676 [ 1524.297] (II) event19 - serio6: device is a keyboard
677 [ 1536.974] (II) modeset(0): EDID vendor "AUO", prod id 12605
678 [ 1536.974] (II) modeset(0): Printing DDC gathered Modelines:
679 [ 1536.974] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
680 [ 1537.311] (--) modeset(0): HDMI max TMDS frequency 150000KHz
681 [ 1538.189] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
682 [ 15936.823] (II) modeset(0): EDID vendor "AUO", prod id 12605
683 [ 15936.823] (II) modeset(0): Printing DDC gathered Modelines:
684 [ 15936.823] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
685 [ 15937.913] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
686 [ 67070.083] (II) config/udev: removing device serio6
687 [ 67070.083] (II) event19 - serio6: device removed
688 [ 67070.090] (II) UnloadModule: "libinput"
689 [ 67070.100] (II) config/udev: removing device Pulse-Eight CEC Adapter
690 [ 67070.100] (II) event6 - Pulse-Eight CEC Adapter: device removed
691 [ 67070.116] (II) UnloadModule: "libinput"
692 [ 67074.730] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
693 [ 67074.730] (II) No input driver specified, ignoring this device.
694 [ 67074.730] (II) This device may have been added with another device file.
695 [ 67074.811] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
696 [ 67074.811] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
697 [ 67074.811] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
698 [ 67074.811] (**) Pulse-Eight CEC Adapter: always reports core events
699 [ 67074.811] (**) Option "Device" "/dev/input/event6"
700 [ 67074.811] (**) Option "_source" "server/udev"
701 [ 67074.867] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
702 [ 67074.867] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
703 [ 67074.868] (II) event6 - Pulse-Eight CEC Adapter: device removed
704 [ 67074.890] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0005/input/input28/event6"
705 [ 67074.890] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
706 [ 67074.891] (**) Option "AccelerationScheme" "none"
707 [ 67074.892] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
708 [ 67074.892] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
709 [ 67074.892] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
710 [ 67074.947] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
711 [ 67074.948] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
712 [ 67095.126] (II) config/udev: removing device Pulse-Eight CEC Adapter
713 [ 67095.126] (II) event6 - Pulse-Eight CEC Adapter: device removed
714 [ 67095.138] (II) UnloadModule: "libinput"
715 [ 67100.773] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
716 [ 67100.773] (II) No input driver specified, ignoring this device.
717 [ 67100.773] (II) This device may have been added with another device file.
718 [ 67100.854] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
719 [ 67100.854] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
720 [ 67100.854] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
721 [ 67100.854] (**) Pulse-Eight CEC Adapter: always reports core events
722 [ 67100.854] (**) Option "Device" "/dev/input/event6"
723 [ 67100.854] (**) Option "_source" "server/udev"
724 [ 67100.907] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
725 [ 67100.907] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
726 [ 67100.907] (II) event6 - Pulse-Eight CEC Adapter: device removed
727 [ 67100.926] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0006/input/input30/event6"
728 [ 67100.926] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
729 [ 67100.926] (**) Option "AccelerationScheme" "none"
730 [ 67100.927] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
731 [ 67100.927] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
732 [ 67100.927] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
733 [ 67100.982] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
734 [ 67100.982] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
735 [ 67100.985] (II) config/udev: Adding input device serio8 (/dev/input/event19)
736 [ 67100.985] (**) serio8: Applying InputClass "libinput keyboard catchall"
737 [ 67100.985] (II) Using input driver 'libinput' for 'serio8'
738 [ 67100.985] (**) serio8: always reports core events
739 [ 67100.985] (**) Option "Device" "/dev/input/event19"
740 [ 67100.985] (**) Option "_source" "server/udev"
741 [ 67100.990] (II) event19 - serio8: is tagged by udev as: Keyboard
742 [ 67100.990] (II) event19 - serio8: device is a keyboard
743 [ 67100.991] (II) event19 - serio8: device removed
744 [ 67101.001] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio8/rc/rc0/input31/event19"
745 [ 67101.001] (II) XINPUT: Adding extended input device "serio8" (type: KEYBOARD, id 10)
746 [ 67101.001] (**) Option "xkb_model" "pc105"
747 [ 67101.001] (**) Option "xkb_layout" "us"
748 [ 67101.001] (WW) Option "xkb_variant" requires a string value
749 [ 67101.001] (WW) Option "xkb_options" requires a string value
750 [ 67101.006] (II) event19 - serio8: is tagged by udev as: Keyboard
751 [ 67101.006] (II) event19 - serio8: device is a keyboard
752 [ 67127.966] (II) modeset(0): EDID vendor "AUO", prod id 12605
753 [ 67127.966] (II) modeset(0): Printing DDC gathered Modelines:
754 [ 67127.966] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
755 [ 67128.302] (--) modeset(0): HDMI max TMDS frequency 150000KHz
756 [ 67129.177] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
757 [ 67359.952] (II) config/udev: removing device Integrated Camera: Integrated C
758 [ 67359.952] (II) event18 - Integrated Camera: Integrated C: device removed
759 [ 67359.965] (II) UnloadModule: "libinput"
760 [ 67360.066] (II) config/udev: removing device Integrated IR Camera: Integrate
761 [ 67360.066] (II) event17 - Integrated IR Camera: Integrate: device removed
762 [ 67360.078] (II) UnloadModule: "libinput"
763 [ 67360.125] (II) config/udev: removing device serio8
764 [ 67360.125] (II) event19 - serio8: device removed
765 [ 67360.140] (II) UnloadModule: "libinput"
766 [ 67374.717] (II) config/udev: removing device Pulse-Eight CEC Adapter
767 [ 67374.717] (II) event6 - Pulse-Eight CEC Adapter: device removed
768 [ 67374.729] (II) UnloadModule: "libinput"
769 [ 67379.434] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
770 [ 67379.434] (II) No input driver specified, ignoring this device.
771 [ 67379.434] (II) This device may have been added with another device file.
772 [ 67379.514] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
773 [ 67379.514] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
774 [ 67379.515] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
775 [ 67379.515] (**) Pulse-Eight CEC Adapter: always reports core events
776 [ 67379.515] (**) Option "Device" "/dev/input/event6"
777 [ 67379.515] (**) Option "_source" "server/udev"
778 [ 67379.568] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
779 [ 67379.569] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
780 [ 67379.569] (II) event6 - Pulse-Eight CEC Adapter: device removed
781 [ 67379.590] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0007/input/input32/event6"
782 [ 67379.590] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
783 [ 67379.590] (**) Option "AccelerationScheme" "none"
784 [ 67379.591] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
785 [ 67379.591] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
786 [ 67379.591] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
787 [ 67379.646] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
788 [ 67379.646] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
789 [ 67379.649] (II) config/udev: Adding input device serio9 (/dev/input/event17)
790 [ 67379.649] (**) serio9: Applying InputClass "libinput keyboard catchall"
791 [ 67379.649] (II) Using input driver 'libinput' for 'serio9'
792 [ 67379.649] (**) serio9: always reports core events
793 [ 67379.649] (**) Option "Device" "/dev/input/event17"
794 [ 67379.649] (**) Option "_source" "server/udev"
795 [ 67379.654] (II) event17 - serio9: is tagged by udev as: Keyboard
796 [ 67379.654] (II) event17 - serio9: device is a keyboard
797 [ 67379.655] (II) event17 - serio9: device removed
798 [ 67379.672] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio9/rc/rc0/input33/event17"
799 [ 67379.672] (II) XINPUT: Adding extended input device "serio9" (type: KEYBOARD, id 10)
800 [ 67379.672] (**) Option "xkb_model" "pc105"
801 [ 67379.672] (**) Option "xkb_layout" "us"
802 [ 67379.672] (WW) Option "xkb_variant" requires a string value
803 [ 67379.672] (WW) Option "xkb_options" requires a string value
804 [ 67379.677] (II) event17 - serio9: is tagged by udev as: Keyboard
805 [ 67379.677] (II) event17 - serio9: device is a keyboard
806 [ 67466.307] (II) config/udev: removing device serio9
807 [ 67466.307] (II) event17 - serio9: device removed
808 [ 67466.313] (II) UnloadModule: "libinput"
809 [ 67466.323] (II) config/udev: removing device Pulse-Eight CEC Adapter
810 [ 67466.323] (II) event6 - Pulse-Eight CEC Adapter: device removed
811 [ 67466.335] (II) UnloadModule: "libinput"
812 [ 67489.814] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
813 [ 67489.814] (II) No input driver specified, ignoring this device.
814 [ 67489.814] (II) This device may have been added with another device file.
815 [ 67489.894] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
816 [ 67489.895] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
817 [ 67489.895] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
818 [ 67489.895] (**) Pulse-Eight CEC Adapter: always reports core events
819 [ 67489.895] (**) Option "Device" "/dev/input/event6"
820 [ 67489.895] (**) Option "_source" "server/udev"
821 [ 67489.950] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
822 [ 67489.950] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
823 [ 67489.951] (II) event6 - Pulse-Eight CEC Adapter: device removed
824 [ 67489.974] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0008/input/input34/event6"
825 [ 67489.974] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
826 [ 67489.975] (**) Option "AccelerationScheme" "none"
827 [ 67489.976] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
828 [ 67489.976] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
829 [ 67489.976] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
830 [ 67490.031] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
831 [ 67490.031] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
832 [ 67490.034] (II) config/udev: Adding input device serio10 (/dev/input/event17)
833 [ 67490.034] (**) serio10: Applying InputClass "libinput keyboard catchall"
834 [ 67490.034] (II) Using input driver 'libinput' for 'serio10'
835 [ 67490.034] (**) serio10: always reports core events
836 [ 67490.034] (**) Option "Device" "/dev/input/event17"
837 [ 67490.034] (**) Option "_source" "server/udev"
838 [ 67490.039] (II) event17 - serio10: is tagged by udev as: Keyboard
839 [ 67490.039] (II) event17 - serio10: device is a keyboard
840 [ 67490.040] (II) event17 - serio10: device removed
841 [ 67490.051] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio10/rc/rc0/input35/event17"
842 [ 67490.051] (II) XINPUT: Adding extended input device "serio10" (type: KEYBOARD, id 10)
843 [ 67490.051] (**) Option "xkb_model" "pc105"
844 [ 67490.051] (**) Option "xkb_layout" "us"
845 [ 67490.051] (WW) Option "xkb_variant" requires a string value
846 [ 67490.051] (WW) Option "xkb_options" requires a string value
847 [ 67490.056] (II) event17 - serio10: is tagged by udev as: Keyboard
848 [ 67490.056] (II) event17 - serio10: device is a keyboard
849 [ 67517.542] (II) modeset(0): EDID vendor "AUO", prod id 12605
850 [ 67517.542] (II) modeset(0): Printing DDC gathered Modelines:
851 [ 67517.542] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
852 [ 67518.681] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
853 [ 74816.397] (II) config/udev: removing device serio10
854 [ 74816.398] (II) event17 - serio10: device removed
855 [ 74816.415] (II) UnloadModule: "libinput"
856 [ 74816.420] (II) config/udev: removing device Pulse-Eight CEC Adapter
857 [ 74816.420] (II) event6 - Pulse-Eight CEC Adapter: device removed
858 [ 74816.432] (II) UnloadModule: "libinput"
859 [ 74820.247] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
860 [ 74820.247] (II) No input driver specified, ignoring this device.
861 [ 74820.247] (II) This device may have been added with another device file.
862 [ 74820.328] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
863 [ 74820.328] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
864 [ 74820.328] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
865 [ 74820.328] (**) Pulse-Eight CEC Adapter: always reports core events
866 [ 74820.328] (**) Option "Device" "/dev/input/event6"
867 [ 74820.328] (**) Option "_source" "server/udev"
868 [ 74820.384] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
869 [ 74820.385] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
870 [ 74820.386] (II) event6 - Pulse-Eight CEC Adapter: device removed
871 [ 74820.408] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0009/input/input36/event6"
872 [ 74820.408] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
873 [ 74820.408] (**) Option "AccelerationScheme" "none"
874 [ 74820.409] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
875 [ 74820.409] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
876 [ 74820.409] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
877 [ 74820.462] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
878 [ 74820.463] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
879 [ 74820.465] (II) config/udev: Adding input device serio11 (/dev/input/event17)
880 [ 74820.465] (**) serio11: Applying InputClass "libinput keyboard catchall"
881 [ 74820.465] (II) Using input driver 'libinput' for 'serio11'
882 [ 74820.465] (**) serio11: always reports core events
883 [ 74820.465] (**) Option "Device" "/dev/input/event17"
884 [ 74820.465] (**) Option "_source" "server/udev"
885 [ 74820.468] (II) event17 - serio11: is tagged by udev as: Keyboard
886 [ 74820.468] (II) event17 - serio11: device is a keyboard
887 [ 74820.469] (II) event17 - serio11: device removed
888 [ 74820.484] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio11/rc/rc0/input37/event17"
889 [ 74820.484] (II) XINPUT: Adding extended input device "serio11" (type: KEYBOARD, id 10)
890 [ 74820.484] (**) Option "xkb_model" "pc105"
891 [ 74820.484] (**) Option "xkb_layout" "us"
892 [ 74820.484] (WW) Option "xkb_variant" requires a string value
893 [ 74820.484] (WW) Option "xkb_options" requires a string value
894 [ 74820.489] (II) event17 - serio11: is tagged by udev as: Keyboard
895 [ 74820.489] (II) event17 - serio11: device is a keyboard
896 [ 74844.099] (II) modeset(0): EDID vendor "AUO", prod id 12605
897 [ 74844.099] (II) modeset(0): Printing DDC gathered Modelines:
898 [ 74844.099] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
899 [ 74844.434] (--) modeset(0): HDMI max TMDS frequency 150000KHz
900 [ 74845.241] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
901 [ 75427.645] (II) modeset(0): EDID vendor "AUO", prod id 12605
902 [ 75427.645] (II) modeset(0): Printing DDC gathered Modelines:
903 [ 75427.645] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
904 [ 75428.764] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
905 [ 75434.846] (II) modeset(0): EDID vendor "AUO", prod id 12605
906 [ 75434.846] (II) modeset(0): Printing DDC gathered Modelines:
907 [ 75434.846] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
908 [ 75435.181] (--) modeset(0): HDMI max TMDS frequency 150000KHz
909 [ 75436.047] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
910 [ 75439.476] (II) modeset(0): EDID vendor "AUO", prod id 12605
911 [ 75439.476] (II) modeset(0): Printing DDC gathered Modelines:
912 [ 75439.476] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
913 [ 75439.809] (--) modeset(0): HDMI max TMDS frequency 150000KHz
914 [ 75480.334] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
915 [ 75486.077] (II) modeset(0): EDID vendor "AUO", prod id 12605
916 [ 75486.077] (II) modeset(0): Printing DDC gathered Modelines:
917 [ 75486.077] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
918 [ 75486.414] (--) modeset(0): HDMI max TMDS frequency 150000KHz
919 [ 75487.224] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
920 [ 76141.668] (II) modeset(0): EDID vendor "AUO", prod id 12605
921 [ 76141.668] (II) modeset(0): Printing DDC gathered Modelines:
922 [ 76141.668] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
923 [ 76142.772] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
924 [ 76145.989] (II) modeset(0): EDID vendor "AUO", prod id 12605
925 [ 76145.989] (II) modeset(0): Printing DDC gathered Modelines:
926 [ 76145.989] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
927 [ 76146.324] (--) modeset(0): HDMI max TMDS frequency 150000KHz
928 [ 76147.204] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
929 [ 76181.810] (II) modeset(0): EDID vendor "AUO", prod id 12605
930 [ 76181.811] (II) modeset(0): Printing DDC gathered Modelines:
931 [ 76181.811] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
932 [ 76182.899] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
933 [ 76195.390] (II) modeset(0): EDID vendor "AUO", prod id 12605
934 [ 76195.390] (II) modeset(0): Printing DDC gathered Modelines:
935 [ 76195.390] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
936 [ 76195.726] (--) modeset(0): HDMI max TMDS frequency 150000KHz
937 [ 76196.600] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
938 [ 76204.061] (II) modeset(0): EDID vendor "AUO", prod id 12605
939 [ 76204.061] (II) modeset(0): Printing DDC gathered Modelines:
940 [ 76204.061] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
941 [ 76205.167] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
942 [ 76213.216] (II) modeset(0): EDID vendor "AUO", prod id 12605
943 [ 76213.216] (II) modeset(0): Printing DDC gathered Modelines:
944 [ 76213.216] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
945 [ 76213.552] (--) modeset(0): HDMI max TMDS frequency 150000KHz
946 [ 76214.382] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
947 [ 76221.922] (II) modeset(0): EDID vendor "AUO", prod id 12605
948 [ 76221.922] (II) modeset(0): Printing DDC gathered Modelines:
949 [ 76221.922] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
950 [ 76222.989] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
951 [ 76231.080] (II) modeset(0): EDID vendor "AUO", prod id 12605
952 [ 76231.080] (II) modeset(0): Printing DDC gathered Modelines:
953 [ 76231.080] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
954 [ 76231.415] (--) modeset(0): HDMI max TMDS frequency 150000KHz
955 [ 76232.234] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
956 [ 76242.944] (II) modeset(0): EDID vendor "AUO", prod id 12605
957 [ 76242.944] (II) modeset(0): Printing DDC gathered Modelines:
958 [ 76242.944] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
959 [ 76244.041] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
960 [ 76252.117] (II) modeset(0): EDID vendor "AUO", prod id 12605
961 [ 76252.117] (II) modeset(0): Printing DDC gathered Modelines:
962 [ 76252.117] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
963 [ 76252.453] (--) modeset(0): HDMI max TMDS frequency 150000KHz
964 [ 76253.267] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
965 [ 76259.170] (II) modeset(0): EDID vendor "AUO", prod id 12605
966 [ 76259.170] (II) modeset(0): Printing DDC gathered Modelines:
967 [ 76259.170] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
968 [ 76260.333] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
969 [ 76268.331] (II) modeset(0): EDID vendor "AUO", prod id 12605
970 [ 76268.331] (II) modeset(0): Printing DDC gathered Modelines:
971 [ 76268.331] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
972 [ 76268.666] (--) modeset(0): HDMI max TMDS frequency 150000KHz
973 [ 76269.545] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
974 [ 76275.429] (II) modeset(0): EDID vendor "AUO", prod id 12605
975 [ 76275.429] (II) modeset(0): Printing DDC gathered Modelines:
976 [ 76275.429] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
977 [ 76276.517] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
978 [ 76284.585] (II) modeset(0): EDID vendor "AUO", prod id 12605
979 [ 76284.585] (II) modeset(0): Printing DDC gathered Modelines:
980 [ 76284.585] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
981 [ 76284.921] (--) modeset(0): HDMI max TMDS frequency 150000KHz
982 [ 76285.767] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
983 [ 76362.635] (II) modeset(0): EDID vendor "AUO", prod id 12605
984 [ 76362.635] (II) modeset(0): Printing DDC gathered Modelines:
985 [ 76362.635] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
986 [ 76363.754] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
987 [ 76777.916] (II) config/udev: removing device serio11
988 [ 76777.916] (II) event17 - serio11: device removed
989 [ 76777.926] (II) UnloadModule: "libinput"
990 [ 76777.928] (II) config/udev: removing device Pulse-Eight CEC Adapter
991 [ 76777.929] (II) event6 - Pulse-Eight CEC Adapter: device removed
992 [ 76777.944] (II) UnloadModule: "libinput"
993 [ 76791.743] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
994 [ 76791.743] (II) No input driver specified, ignoring this device.
995 [ 76791.743] (II) This device may have been added with another device file.
996 [ 76791.824] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
997 [ 76791.824] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
998 [ 76791.824] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
999 [ 76791.824] (**) Pulse-Eight CEC Adapter: always reports core events
1000 [ 76791.824] (**) Option "Device" "/dev/input/event6"
1001 [ 76791.824] (**) Option "_source" "server/udev"
1002 [ 76791.880] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1003 [ 76791.880] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1004 [ 76791.881] (II) event6 - Pulse-Eight CEC Adapter: device removed
1005 [ 76791.904] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.000A/input/input38/event6"
1006 [ 76791.904] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
1007 [ 76791.905] (**) Option "AccelerationScheme" "none"
1008 [ 76791.906] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
1009 [ 76791.906] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
1010 [ 76791.906] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
1011 [ 76791.961] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1012 [ 76791.961] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1013 [ 76791.964] (II) config/udev: Adding input device serio12 (/dev/input/event17)
1014 [ 76791.964] (**) serio12: Applying InputClass "libinput keyboard catchall"
1015 [ 76791.964] (II) Using input driver 'libinput' for 'serio12'
1016 [ 76791.964] (**) serio12: always reports core events
1017 [ 76791.964] (**) Option "Device" "/dev/input/event17"
1018 [ 76791.964] (**) Option "_source" "server/udev"
1019 [ 76791.969] (II) event17 - serio12: is tagged by udev as: Keyboard
1020 [ 76791.969] (II) event17 - serio12: device is a keyboard
1021 [ 76791.970] (II) event17 - serio12: device removed
1022 [ 76791.988] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio12/rc/rc0/input39/event17"
1023 [ 76791.988] (II) XINPUT: Adding extended input device "serio12" (type: KEYBOARD, id 10)
1024 [ 76791.988] (**) Option "xkb_model" "pc105"
1025 [ 76791.988] (**) Option "xkb_layout" "us"
1026 [ 76791.988] (WW) Option "xkb_variant" requires a string value
1027 [ 76791.988] (WW) Option "xkb_options" requires a string value
1028 [ 76791.993] (II) event17 - serio12: is tagged by udev as: Keyboard
1029 [ 76791.993] (II) event17 - serio12: device is a keyboard
1030 [ 76823.321] (II) modeset(0): EDID vendor "AUO", prod id 12605
1031 [ 76823.321] (II) modeset(0): Printing DDC gathered Modelines:
1032 [ 76823.321] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1033 [ 76823.656] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1034 [ 76824.514] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1035 [ 76830.683] (II) modeset(0): EDID vendor "AUO", prod id 12605
1036 [ 76830.683] (II) modeset(0): Printing DDC gathered Modelines:
1037 [ 76830.683] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1038 [ 76831.804] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1039 [ 77846.982] (II) config/udev: removing device serio12
1040 [ 77846.982] (II) event17 - serio12: device removed
1041 [ 77846.997] (II) UnloadModule: "libinput"
1042 [ 77849.045] (II) config/udev: removing device Pulse-Eight CEC Adapter
1043 [ 77849.045] (II) event6 - Pulse-Eight CEC Adapter: device removed
1044 [ 77849.066] (II) UnloadModule: "libinput"
1045 [ 77854.150] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
1046 [ 77854.150] (II) No input driver specified, ignoring this device.
1047 [ 77854.150] (II) This device may have been added with another device file.
1048 [ 77854.231] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
1049 [ 77854.231] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
1050 [ 77854.231] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
1051 [ 77854.231] (**) Pulse-Eight CEC Adapter: always reports core events
1052 [ 77854.231] (**) Option "Device" "/dev/input/event6"
1053 [ 77854.231] (**) Option "_source" "server/udev"
1054 [ 77854.286] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1055 [ 77854.286] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1056 [ 77854.287] (II) event6 - Pulse-Eight CEC Adapter: device removed
1057 [ 77854.308] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.000B/input/input40/event6"
1058 [ 77854.308] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
1059 [ 77854.309] (**) Option "AccelerationScheme" "none"
1060 [ 77854.309] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
1061 [ 77854.309] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
1062 [ 77854.309] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
1063 [ 77854.362] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1064 [ 77854.362] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1065 [ 77854.364] (II) config/udev: Adding input device serio13 (/dev/input/event17)
1066 [ 77854.364] (**) serio13: Applying InputClass "libinput keyboard catchall"
1067 [ 77854.364] (II) Using input driver 'libinput' for 'serio13'
1068 [ 77854.364] (**) serio13: always reports core events
1069 [ 77854.364] (**) Option "Device" "/dev/input/event17"
1070 [ 77854.364] (**) Option "_source" "server/udev"
1071 [ 77854.366] (II) event17 - serio13: is tagged by udev as: Keyboard
1072 [ 77854.366] (II) event17 - serio13: device is a keyboard
1073 [ 77854.366] (II) event17 - serio13: device removed
1074 [ 77854.375] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio13/rc/rc0/input41/event17"
1075 [ 77854.375] (II) XINPUT: Adding extended input device "serio13" (type: KEYBOARD, id 10)
1076 [ 77854.375] (**) Option "xkb_model" "pc105"
1077 [ 77854.375] (**) Option "xkb_layout" "us"
1078 [ 77854.375] (WW) Option "xkb_variant" requires a string value
1079 [ 77854.375] (WW) Option "xkb_options" requires a string value
1080 [ 77854.377] (II) event17 - serio13: is tagged by udev as: Keyboard
1081 [ 77854.378] (II) event17 - serio13: device is a keyboard
1082 [ 77875.697] (II) modeset(0): EDID vendor "AUO", prod id 12605
1083 [ 77875.697] (II) modeset(0): Printing DDC gathered Modelines:
1084 [ 77875.697] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1085 [ 77876.295] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1086 [ 77877.173] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1087 [ 77883.094] (II) modeset(0): EDID vendor "AUO", prod id 12605
1088 [ 77883.094] (II) modeset(0): Printing DDC gathered Modelines:
1089 [ 77883.094] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1090 [ 77884.250] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1091 [ 77892.255] (II) modeset(0): EDID vendor "AUO", prod id 12605
1092 [ 77892.255] (II) modeset(0): Printing DDC gathered Modelines:
1093 [ 77892.255] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1094 [ 77892.589] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1095 [ 77893.419] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1096 [ 77899.589] (II) modeset(0): EDID vendor "AUO", prod id 12605
1097 [ 77899.589] (II) modeset(0): Printing DDC gathered Modelines:
1098 [ 77899.589] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1099 [ 77900.717] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1100 [ 77963.554] (II) config/udev: removing device serio13
1101 [ 77963.554] (II) event17 - serio13: device removed
1102 [ 77963.565] (II) UnloadModule: "libinput"
1103 [ 77970.162] (II) config/udev: removing device Pulse-Eight CEC Adapter
1104 [ 77970.162] (II) event6 - Pulse-Eight CEC Adapter: device removed
1105 [ 77970.174] (II) UnloadModule: "libinput"
1106 [ 77973.982] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
1107 [ 77973.982] (II) No input driver specified, ignoring this device.
1108 [ 77973.982] (II) This device may have been added with another device file.
1109 [ 77974.061] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
1110 [ 77974.061] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
1111 [ 77974.061] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
1112 [ 77974.061] (**) Pulse-Eight CEC Adapter: always reports core events
1113 [ 77974.061] (**) Option "Device" "/dev/input/event6"
1114 [ 77974.061] (**) Option "_source" "server/udev"
1115 [ 77974.116] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1116 [ 77974.116] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1117 [ 77974.117] (II) event6 - Pulse-Eight CEC Adapter: device removed
1118 [ 77974.134] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.000C/input/input42/event6"
1119 [ 77974.134] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
1120 [ 77974.135] (**) Option "AccelerationScheme" "none"
1121 [ 77974.136] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
1122 [ 77974.136] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
1123 [ 77974.136] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
1124 [ 77974.191] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1125 [ 77974.191] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1126 [ 77974.194] (II) config/udev: Adding input device serio14 (/dev/input/event17)
1127 [ 77974.194] (**) serio14: Applying InputClass "libinput keyboard catchall"
1128 [ 77974.194] (II) Using input driver 'libinput' for 'serio14'
1129 [ 77974.194] (**) serio14: always reports core events
1130 [ 77974.194] (**) Option "Device" "/dev/input/event17"
1131 [ 77974.194] (**) Option "_source" "server/udev"
1132 [ 77974.199] (II) event17 - serio14: is tagged by udev as: Keyboard
1133 [ 77974.199] (II) event17 - serio14: device is a keyboard
1134 [ 77974.200] (II) event17 - serio14: device removed
1135 [ 77974.211] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio14/rc/rc0/input43/event17"
1136 [ 77974.211] (II) XINPUT: Adding extended input device "serio14" (type: KEYBOARD, id 10)
1137 [ 77974.211] (**) Option "xkb_model" "pc105"
1138 [ 77974.211] (**) Option "xkb_layout" "us"
1139 [ 77974.211] (WW) Option "xkb_variant" requires a string value
1140 [ 77974.211] (WW) Option "xkb_options" requires a string value
1141 [ 77974.216] (II) event17 - serio14: is tagged by udev as: Keyboard
1142 [ 77974.216] (II) event17 - serio14: device is a keyboard
1143 [ 77993.113] (II) modeset(0): EDID vendor "AUO", prod id 12605
1144 [ 77993.113] (II) modeset(0): Printing DDC gathered Modelines:
1145 [ 77993.113] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1146 [ 77993.450] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1147 [ 77994.265] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1148 [ 78084.447] (II) modeset(0): EDID vendor "AUO", prod id 12605
1149 [ 78084.447] (II) modeset(0): Printing DDC gathered Modelines:
1150 [ 78084.447] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1151 [ 78085.516] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1152 [ 78098.033] (II) modeset(0): EDID vendor "AUO", prod id 12605
1153 [ 78098.033] (II) modeset(0): Printing DDC gathered Modelines:
1154 [ 78098.033] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1155 [ 78098.368] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1156 [ 78099.229] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1157 [ 78192.777] (II) config/udev: removing device serio14
1158 [ 78192.777] (II) event17 - serio14: device removed
1159 [ 78192.794] (II) UnloadModule: "libinput"
1160 [ 78197.693] (II) config/udev: removing device Pulse-Eight CEC Adapter
1161 [ 78197.718] (II) event6 - Pulse-Eight CEC Adapter: device removed
1162 [ 78197.739] (II) UnloadModule: "libinput"
1163 [ 78201.274] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/mouse0)
1164 [ 78201.274] (II) No input driver specified, ignoring this device.
1165 [ 78201.274] (II) This device may have been added with another device file.
1166 [ 78201.354] (II) config/udev: Adding input device Pulse-Eight CEC Adapter (/dev/input/event6)
1167 [ 78201.354] (**) Pulse-Eight CEC Adapter: Applying InputClass "libinput pointer catchall"
1168 [ 78201.354] (II) Using input driver 'libinput' for 'Pulse-Eight CEC Adapter'
1169 [ 78201.354] (**) Pulse-Eight CEC Adapter: always reports core events
1170 [ 78201.354] (**) Option "Device" "/dev/input/event6"
1171 [ 78201.354] (**) Option "_source" "server/udev"
1172 [ 78201.410] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1173 [ 78201.410] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1174 [ 78201.411] (II) event6 - Pulse-Eight CEC Adapter: device removed
1175 [ 78201.437] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.000D/input/input44/event6"
1176 [ 78201.437] (II) XINPUT: Adding extended input device "Pulse-Eight CEC Adapter" (type: MOUSE, id 9)
1177 [ 78201.438] (**) Option "AccelerationScheme" "none"
1178 [ 78201.439] (**) Pulse-Eight CEC Adapter: (accel) selected scheme none/0
1179 [ 78201.439] (**) Pulse-Eight CEC Adapter: (accel) acceleration factor: 2.000
1180 [ 78201.439] (**) Pulse-Eight CEC Adapter: (accel) acceleration threshold: 4
1181 [ 78201.494] (II) event6 - Pulse-Eight CEC Adapter: is tagged by udev as: Mouse
1182 [ 78201.494] (II) event6 - Pulse-Eight CEC Adapter: device is a pointer
1183 [ 78201.497] (II) config/udev: Adding input device serio15 (/dev/input/event17)
1184 [ 78201.497] (**) serio15: Applying InputClass "libinput keyboard catchall"
1185 [ 78201.497] (II) Using input driver 'libinput' for 'serio15'
1186 [ 78201.497] (**) serio15: always reports core events
1187 [ 78201.497] (**) Option "Device" "/dev/input/event17"
1188 [ 78201.497] (**) Option "_source" "server/udev"
1189 [ 78201.502] (II) event17 - serio15: is tagged by udev as: Keyboard
1190 [ 78201.502] (II) event17 - serio15: device is a keyboard
1191 [ 78201.503] (II) event17 - serio15: device removed
1192 [ 78201.517] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/tty/ttyACM0/serio15/rc/rc0/input45/event17"
1193 [ 78201.517] (II) XINPUT: Adding extended input device "serio15" (type: KEYBOARD, id 10)
1194 [ 78201.517] (**) Option "xkb_model" "pc105"
1195 [ 78201.517] (**) Option "xkb_layout" "us"
1196 [ 78201.517] (WW) Option "xkb_variant" requires a string value
1197 [ 78201.517] (WW) Option "xkb_options" requires a string value
1198 [ 78201.522] (II) event17 - serio15: is tagged by udev as: Keyboard
1199 [ 78201.522] (II) event17 - serio15: device is a keyboard
1200 [ 78213.346] (II) modeset(0): EDID vendor "AUO", prod id 12605
1201 [ 78213.346] (II) modeset(0): Printing DDC gathered Modelines:
1202 [ 78213.346] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1203 [ 78214.434] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1204 [ 78226.951] (II) modeset(0): EDID vendor "AUO", prod id 12605
1205 [ 78226.951] (II) modeset(0): Printing DDC gathered Modelines:
1206 [ 78226.951] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1207 [ 78227.287] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1208 [ 78228.166] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1209 [ 78277.188] (II) modeset(0): EDID vendor "AUO", prod id 12605
1210 [ 78277.188] (II) modeset(0): Printing DDC gathered Modelines:
1211 [ 78277.188] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1212 [ 78278.321] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1213 [ 78286.362] (II) modeset(0): EDID vendor "AUO", prod id 12605
1214 [ 78286.362] (II) modeset(0): Printing DDC gathered Modelines:
1215 [ 78286.362] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1216 [ 78286.697] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1217 [ 78287.575] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1218 [ 78295.348] (II) modeset(0): EDID vendor "AUO", prod id 12605
1219 [ 78295.348] (II) modeset(0): Printing DDC gathered Modelines:
1220 [ 78295.348] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1221 [ 78296.435] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1222 [ 78304.505] (II) modeset(0): EDID vendor "AUO", prod id 12605
1223 [ 78304.505] (II) modeset(0): Printing DDC gathered Modelines:
1224 [ 78304.505] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1225 [ 78304.840] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1226 [ 78305.700] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1227 [ 78352.203] (II) modeset(0): EDID vendor "AUO", prod id 12605
1228 [ 78352.203] (II) modeset(0): Printing DDC gathered Modelines:
1229 [ 78352.203] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1230 [ 78353.314] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1231 [ 78361.371] (II) modeset(0): EDID vendor "AUO", prod id 12605
1232 [ 78361.371] (II) modeset(0): Printing DDC gathered Modelines:
1233 [ 78361.371] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1234 [ 78361.706] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1235 [ 78362.580] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1236 [ 78368.424] (II) modeset(0): EDID vendor "AUO", prod id 12605
1237 [ 78368.424] (II) modeset(0): Printing DDC gathered Modelines:
1238 [ 78368.424] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1239 [ 78369.512] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1240 [ 78377.605] (II) modeset(0): EDID vendor "AUO", prod id 12605
1241 [ 78377.605] (II) modeset(0): Printing DDC gathered Modelines:
1242 [ 78377.605] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1243 [ 78377.941] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1244 [ 78378.771] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1245 [ 78384.669] (II) modeset(0): EDID vendor "AUO", prod id 12605
1246 [ 78384.669] (II) modeset(0): Printing DDC gathered Modelines:
1247 [ 78384.669] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1248 [ 78385.788] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1249 [ 78394.096] (II) modeset(0): EDID vendor "AUO", prod id 12605
1250 [ 78394.096] (II) modeset(0): Printing DDC gathered Modelines:
1251 [ 78394.096] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1252 [ 78394.690] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1253 [ 78395.570] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1254 [ 78444.790] (II) modeset(0): EDID vendor "AUO", prod id 12605
1255 [ 78444.790] (II) modeset(0): Printing DDC gathered Modelines:
1256 [ 78444.790] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1257 [ 78445.880] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1258 [ 78453.945] (II) modeset(0): EDID vendor "AUO", prod id 12605
1259 [ 78453.945] (II) modeset(0): Printing DDC gathered Modelines:
1260 [ 78453.945] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1261 [ 78454.281] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1262 [ 78455.157] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1263 [ 78464.542] (II) modeset(0): EDID vendor "AUO", prod id 12605
1264 [ 78464.542] (II) modeset(0): Printing DDC gathered Modelines:
1265 [ 78464.542] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1266 [ 78465.678] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1267 [ 78473.963] (II) modeset(0): EDID vendor "AUO", prod id 12605
1268 [ 78473.963] (II) modeset(0): Printing DDC gathered Modelines:
1269 [ 78473.963] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1270 [ 78474.299] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1271 [ 78475.176] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1272 [ 78525.923] (II) modeset(0): EDID vendor "AUO", prod id 12605
1273 [ 78525.923] (II) modeset(0): Printing DDC gathered Modelines:
1274 [ 78525.923] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1275 [ 78527.030] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1276 [ 78535.100] (II) modeset(0): EDID vendor "AUO", prod id 12605
1277 [ 78535.100] (II) modeset(0): Printing DDC gathered Modelines:
1278 [ 78535.100] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1279 [ 78535.436] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1280 [ 78536.241] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1281 [ 78548.356] (II) modeset(0): EDID vendor "AUO", prod id 12605
1282 [ 78548.356] (II) modeset(0): Printing DDC gathered Modelines:
1283 [ 78548.356] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1284 [ 78549.443] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1285 [ 78561.941] (II) modeset(0): EDID vendor "AUO", prod id 12605
1286 [ 78561.941] (II) modeset(0): Printing DDC gathered Modelines:
1287 [ 78561.941] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1288 [ 78562.276] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1289 [ 78563.155] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1290 [ 78574.565] (II) modeset(0): EDID vendor "AUO", prod id 12605
1291 [ 78574.565] (II) modeset(0): Printing DDC gathered Modelines:
1292 [ 78574.565] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1293 [ 78575.706] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1294 [ 78588.167] (II) modeset(0): EDID vendor "AUO", prod id 12605
1295 [ 78588.167] (II) modeset(0): Printing DDC gathered Modelines:
1296 [ 78588.167] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1297 [ 78588.503] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1298 [ 78589.308] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1299 [ 78641.884] (II) modeset(0): EDID vendor "AUO", prod id 12605
1300 [ 78641.884] (II) modeset(0): Printing DDC gathered Modelines:
1301 [ 78641.884] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1302 [ 78642.953] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1303 [ 78655.433] (II) modeset(0): EDID vendor "AUO", prod id 12605
1304 [ 78655.433] (II) modeset(0): Printing DDC gathered Modelines:
1305 [ 78655.433] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1306 [ 78655.768] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1307 [ 78656.628] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1308 [ 78706.340] (II) modeset(0): EDID vendor "AUO", prod id 12605
1309 [ 78706.340] (II) modeset(0): Printing DDC gathered Modelines:
1310 [ 78706.340] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1311 [ 78707.427] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1312 [ 78720.183] (II) modeset(0): EDID vendor "AUO", prod id 12605
1313 [ 78720.183] (II) modeset(0): Printing DDC gathered Modelines:
1314 [ 78720.183] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1315 [ 78720.776] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1316 [ 78721.633] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1317 [ 78733.986] (II) modeset(0): EDID vendor "AUO", prod id 12605
1318 [ 78733.986] (II) modeset(0): Printing DDC gathered Modelines:
1319 [ 78733.986] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1320 [ 78735.098] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1321 [ 78747.830] (II) modeset(0): EDID vendor "AUO", prod id 12605
1322 [ 78747.830] (II) modeset(0): Printing DDC gathered Modelines:
1323 [ 78747.830] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1324 [ 78748.166] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1325 [ 78749.028] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1326 [ 78765.426] (II) modeset(0): EDID vendor "AUO", prod id 12605
1327 [ 78765.426] (II) modeset(0): Printing DDC gathered Modelines:
1328 [ 78765.426] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1329 [ 78766.517] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1330 [ 78779.033] (II) modeset(0): EDID vendor "AUO", prod id 12605
1331 [ 78779.033] (II) modeset(0): Printing DDC gathered Modelines:
1332 [ 78779.033] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1333 [ 78779.370] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1334 [ 78780.241] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1335 [ 78833.447] (II) modeset(0): EDID vendor "AUO", prod id 12605
1336 [ 78833.447] (II) modeset(0): Printing DDC gathered Modelines:
1337 [ 78833.447] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1338 [ 78834.517] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1339 [ 78851.444] (II) modeset(0): EDID vendor "AUO", prod id 12605
1340 [ 78851.444] (II) modeset(0): Printing DDC gathered Modelines:
1341 [ 78851.444] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1342 [ 78851.780] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1343 [ 78852.640] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1344 [ 78869.513] (II) modeset(0): EDID vendor "AUO", prod id 12605
1345 [ 78869.513] (II) modeset(0): Printing DDC gathered Modelines:
1346 [ 78869.513] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1347 [ 78870.652] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1348 [ 78887.543] (II) modeset(0): EDID vendor "AUO", prod id 12605
1349 [ 78887.543] (II) modeset(0): Printing DDC gathered Modelines:
1350 [ 78887.543] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1351 [ 78887.879] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1352 [ 78888.739] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1353 [ 78936.478] (II) modeset(0): EDID vendor "AUO", prod id 12605
1354 [ 78936.478] (II) modeset(0): Printing DDC gathered Modelines:
1355 [ 78936.478] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1356 [ 78937.596] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1357 [ 78954.489] (II) modeset(0): EDID vendor "AUO", prod id 12605
1358 [ 78954.489] (II) modeset(0): Printing DDC gathered Modelines:
1359 [ 78954.489] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1360 [ 78954.825] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1361 [ 78955.684] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1362 [ 79147.422] (II) modeset(0): EDID vendor "AUO", prod id 12605
1363 [ 79147.422] (II) modeset(0): Printing DDC gathered Modelines:
1364 [ 79147.422] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1365 [ 79148.512] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1366 [ 79161.002] (II) modeset(0): EDID vendor "AUO", prod id 12605
1367 [ 79161.002] (II) modeset(0): Printing DDC gathered Modelines:
1368 [ 79161.002] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1369 [ 79161.337] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1370 [ 79162.216] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1371 [ 79168.120] (II) modeset(0): EDID vendor "AUO", prod id 12605
1372 [ 79168.120] (II) modeset(0): Printing DDC gathered Modelines:
1373 [ 79168.120] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1374 [ 79169.249] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1375 [ 79177.275] (II) modeset(0): EDID vendor "AUO", prod id 12605
1376 [ 79177.275] (II) modeset(0): Printing DDC gathered Modelines:
1377 [ 79177.275] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1378 [ 79177.610] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1379 [ 79178.427] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1380 [ 79184.695] (II) modeset(0): EDID vendor "AUO", prod id 12605
1381 [ 79184.695] (II) modeset(0): Printing DDC gathered Modelines:
1382 [ 79184.695] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1383 [ 79185.827] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1384 [ 79193.869] (II) modeset(0): EDID vendor "AUO", prod id 12605
1385 [ 79193.869] (II) modeset(0): Printing DDC gathered Modelines:
1386 [ 79193.869] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1387 [ 79194.207] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1388 [ 79195.068] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1389 [ 79205.712] (II) modeset(0): EDID vendor "AUO", prod id 12605
1390 [ 79205.712] (II) modeset(0): Printing DDC gathered Modelines:
1391 [ 79205.712] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1392 [ 79206.827] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1393 [ 79214.870] (II) modeset(0): EDID vendor "AUO", prod id 12605
1394 [ 79214.870] (II) modeset(0): Printing DDC gathered Modelines:
1395 [ 79214.870] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1396 [ 79215.205] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1397 [ 79216.064] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1398 [ 79227.200] (II) modeset(0): EDID vendor "AUO", prod id 12605
1399 [ 79227.200] (II) modeset(0): Printing DDC gathered Modelines:
1400 [ 79227.200] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1401 [ 79228.316] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1402 [ 79236.354] (II) modeset(0): EDID vendor "AUO", prod id 12605
1403 [ 79236.354] (II) modeset(0): Printing DDC gathered Modelines:
1404 [ 79236.354] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1405 [ 79236.689] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1406 [ 79237.562] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1407 [ 79248.981] (II) modeset(0): EDID vendor "AUO", prod id 12605
1408 [ 79248.981] (II) modeset(0): Printing DDC gathered Modelines:
1409 [ 79248.981] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1410 [ 79250.115] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1411 [ 79258.142] (II) modeset(0): EDID vendor "AUO", prod id 12605
1412 [ 79258.142] (II) modeset(0): Printing DDC gathered Modelines:
1413 [ 79258.142] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1414 [ 79258.476] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1415 [ 79259.281] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1416 [ 79308.283] (II) modeset(0): EDID vendor "AUO", prod id 12605
1417 [ 79308.283] (II) modeset(0): Printing DDC gathered Modelines:
1418 [ 79308.283] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1419 [ 79309.351] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1420 [ 79317.457] (II) modeset(0): EDID vendor "AUO", prod id 12605
1421 [ 79317.457] (II) modeset(0): Printing DDC gathered Modelines:
1422 [ 79317.457] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1423 [ 79317.793] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1424 [ 79318.659] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1425 [ 79326.944] (II) modeset(0): EDID vendor "AUO", prod id 12605
1426 [ 79326.944] (II) modeset(0): Printing DDC gathered Modelines:
1427 [ 79326.944] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1428 [ 79328.034] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1429 [ 79336.108] (II) modeset(0): EDID vendor "AUO", prod id 12605
1430 [ 79336.108] (II) modeset(0): Printing DDC gathered Modelines:
1431 [ 79336.108] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1432 [ 79336.444] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1433 [ 79337.271] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1434 [ 79386.976] (II) modeset(0): EDID vendor "AUO", prod id 12605
1435 [ 79386.976] (II) modeset(0): Printing DDC gathered Modelines:
1436 [ 79386.976] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1437 [ 79388.115] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1438 [ 79396.138] (II) modeset(0): EDID vendor "AUO", prod id 12605
1439 [ 79396.138] (II) modeset(0): Printing DDC gathered Modelines:
1440 [ 79396.138] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1441 [ 79396.473] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1442 [ 79397.282] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1443 [ 79449.733] (II) modeset(0): EDID vendor "AUO", prod id 12605
1444 [ 79449.733] (II) modeset(0): Printing DDC gathered Modelines:
1445 [ 79449.733] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1446 [ 79450.827] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1447 [ 79459.162] (II) modeset(0): EDID vendor "AUO", prod id 12605
1448 [ 79459.162] (II) modeset(0): Printing DDC gathered Modelines:
1449 [ 79459.162] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1450 [ 79459.497] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1451 [ 79460.316] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1452 [ 79510.506] (II) modeset(0): EDID vendor "AUO", prod id 12605
1453 [ 79510.506] (II) modeset(0): Printing DDC gathered Modelines:
1454 [ 79510.506] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1455 [ 79511.646] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1456 [ 79524.086] (II) modeset(0): EDID vendor "AUO", prod id 12605
1457 [ 79524.086] (II) modeset(0): Printing DDC gathered Modelines:
1458 [ 79524.086] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1459 [ 79524.421] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1460 [ 79525.239] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1461 [ 79573.820] (II) modeset(0): EDID vendor "AUO", prod id 12605
1462 [ 79573.820] (II) modeset(0): Printing DDC gathered Modelines:
1463 [ 79573.821] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1464 [ 79574.909] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1465 [ 79587.400] (II) modeset(0): EDID vendor "AUO", prod id 12605
1466 [ 79587.400] (II) modeset(0): Printing DDC gathered Modelines:
1467 [ 79587.400] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1468 [ 79587.736] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1469 [ 79588.617] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1470 [ 79637.896] (II) modeset(0): EDID vendor "AUO", prod id 12605
1471 [ 79637.896] (II) modeset(0): Printing DDC gathered Modelines:
1472 [ 79637.896] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1473 [ 79638.965] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1474 [ 79651.477] (II) modeset(0): EDID vendor "AUO", prod id 12605
1475 [ 79651.477] (II) modeset(0): Printing DDC gathered Modelines:
1476 [ 79651.477] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1477 [ 79651.812] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1478 [ 79652.666] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1479 [ 79703.092] (II) modeset(0): EDID vendor "AUO", prod id 12605
1480 [ 79703.092] (II) modeset(0): Printing DDC gathered Modelines:
1481 [ 79703.092] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1482 [ 79704.249] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1483 [ 79716.657] (II) modeset(0): EDID vendor "AUO", prod id 12605
1484 [ 79716.657] (II) modeset(0): Printing DDC gathered Modelines:
1485 [ 79716.657] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1486 [ 79717.250] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1487 [ 79718.115] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1488 [ 79766.974] (II) modeset(0): EDID vendor "AUO", prod id 12605
1489 [ 79766.974] (II) modeset(0): Printing DDC gathered Modelines:
1490 [ 79766.974] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1491 [ 79768.115] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1492 [ 79780.576] (II) modeset(0): EDID vendor "AUO", prod id 12605
1493 [ 79780.576] (II) modeset(0): Printing DDC gathered Modelines:
1494 [ 79780.576] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1495 [ 79780.912] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1496 [ 79781.743] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1497 [ 79796.010] (II) modeset(0): EDID vendor "AUO", prod id 12605
1498 [ 79796.010] (II) modeset(0): Printing DDC gathered Modelines:
1499 [ 79796.010] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1500 [ 79797.131] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1501 [ 79814.279] (II) modeset(0): EDID vendor "AUO", prod id 12605
1502 [ 79814.279] (II) modeset(0): Printing DDC gathered Modelines:
1503 [ 79814.279] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1504 [ 79814.614] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1505 [ 79815.428] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1506 [ 79834.672] (II) modeset(0): EDID vendor "AUO", prod id 12605
1507 [ 79834.672] (II) modeset(0): Printing DDC gathered Modelines:
1508 [ 79834.672] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1509 [ 79835.791] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1510 [ 79852.685] (II) modeset(0): EDID vendor "AUO", prod id 12605
1511 [ 79852.685] (II) modeset(0): Printing DDC gathered Modelines:
1512 [ 79852.685] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1513 [ 79853.021] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1514 [ 79853.830] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1515 [ 79901.975] (II) modeset(0): EDID vendor "AUO", prod id 12605
1516 [ 79901.975] (II) modeset(0): Printing DDC gathered Modelines:
1517 [ 79901.975] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1518 [ 79903.099] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1519 [ 79920.246] (II) modeset(0): EDID vendor "AUO", prod id 12605
1520 [ 79920.246] (II) modeset(0): Printing DDC gathered Modelines:
1521 [ 79920.246] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1522 [ 79920.581] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1523 [ 79921.409] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1524 [ 79928.145] (II) modeset(0): EDID vendor "AUO", prod id 12605
1525 [ 79928.145] (II) modeset(0): Printing DDC gathered Modelines:
1526 [ 79928.145] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1527 [ 79929.287] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1528 [ 79955.264] (II) modeset(0): EDID vendor "AUO", prod id 12605
1529 [ 79955.264] (II) modeset(0): Printing DDC gathered Modelines:
1530 [ 79955.264] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1531 [ 79955.599] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1532 [ 79956.425] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1533 [ 79964.166] (II) modeset(0): EDID vendor "AUO", prod id 12605
1534 [ 79964.166] (II) modeset(0): Printing DDC gathered Modelines:
1535 [ 79964.166] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1536 [ 79965.303] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1537 [244829.768] (II) modeset(0): EDID vendor "AUO", prod id 12605
1538 [244829.768] (II) modeset(0): Printing DDC gathered Modelines:
1539 [244829.768] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1540 [244854.926] (II) modeset(0): EDID vendor "AUO", prod id 12605
1541 [244854.926] (II) modeset(0): Printing DDC gathered Modelines:
1542 [244854.926] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1543 [244862.679] (II) modeset(0): EDID vendor "AUO", prod id 12605
1544 [244862.679] (II) modeset(0): Printing DDC gathered Modelines:
1545 [244862.679] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1546 [251356.090] (EE) event15 - Synaptics TM3289-021: kernel bug: Touch jump detected and discarded.
1547 See https://wayland.freedesktop.org/libinput/doc/1.14.3/touchpad-jumping-cursors.html for details
1548 [251356.764] (EE) event15 - Synaptics TM3289-021: kernel bug: Touch jump detected and discarded.
1549 See https://wayland.freedesktop.org/libinput/doc/1.14.3/touchpad-jumping-cursors.html for details
1550 [251381.276] (EE) event15 - Synaptics TM3289-021: kernel bug: Touch jump detected and discarded.
1551 See https://wayland.freedesktop.org/libinput/doc/1.14.3/touchpad-jumping-cursors.html for details
1552 [251381.334] (EE) event15 - Synaptics TM3289-021: kernel bug: Touch jump detected and discarded.
1553 See https://wayland.freedesktop.org/libinput/doc/1.14.3/touchpad-jumping-cursors.html for details
1554 [256669.045] (EE) event15 - Synaptics TM3289-021: kernel bug: Touch jump detected and discarded.
1555 See https://wayland.freedesktop.org/libinput/doc/1.14.3/touchpad-jumping-cursors.html for details
1556 [259363.543] (II) modeset(0): EDID vendor "AUO", prod id 12605
1557 [259363.543] (II) modeset(0): Printing DDC gathered Modelines:
1558 [259363.543] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1559 [259363.878] (--) modeset(0): HDMI max TMDS frequency 300000KHz
1560 [259368.816] (II) modeset(0): Allocate new frame buffer 5760x2160 stride
1561 [259466.484] (II) modeset(0): EDID vendor "AUO", prod id 12605
1562 [259466.484] (II) modeset(0): Printing DDC gathered Modelines:
1563 [259466.484] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1564 [259467.567] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
1565 [259508.601] (II) modeset(0): EDID vendor "AUO", prod id 12605
1566 [259508.601] (II) modeset(0): Printing DDC gathered Modelines:
1567 [259508.601] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1568 [259508.936] (--) modeset(0): HDMI max TMDS frequency 150000KHz
1569 [259509.763] (II) modeset(0): Allocate new frame buffer 3840x1080 stride
1570 [273910.770] (II) modeset(0): EDID vendor "AUO", prod id 12605
1571 [273910.770] (II) modeset(0): Printing DDC gathered Modelines:
1572 [273910.770] (II) modeset(0): Modeline "1920x1080"x0.0 141.00 1920 1936 1952 2104 1080 1083 1097 1116 -hsync -vsync (67.0 kHz eP)
1573 [273911.866] (II) modeset(0): Allocate new frame buffer 1920x1080 stride
0 Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 16384 x 16384
1 DVI-I-0 disconnected (normal left inverted right x axis y axis)
2 Identifier: 0x1be
3 Timestamp: 99649
4 Subpixel: unknown
5 Clones:
6 CRTCs: 0 1 2 3
7 Transform: 1.000000 0.000000 0.000000
8 0.000000 1.000000 0.000000
9 0.000000 0.000000 1.000000
10 filter:
11 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
12 BorderDimensions: 4
13 supported: 4
14 Border: 0 0 0 0
15 range: (0, 65535)
16 SignalFormat: VGA
17 supported: VGA
18 ConnectorType: DVI-I
19 ConnectorNumber: 0
20 _ConnectorLocation: 0
21 non-desktop: 0
22 supported: 0, 1
23 DVI-I-1 disconnected (normal left inverted right x axis y axis)
24 Identifier: 0x1bf
25 Timestamp: 99649
26 Subpixel: unknown
27 Clones:
28 CRTCs: 0 1 2 3
29 Transform: 1.000000 0.000000 0.000000
30 0.000000 1.000000 0.000000
31 0.000000 0.000000 1.000000
32 filter:
33 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
34 BorderDimensions: 4
35 supported: 4
36 Border: 0 0 0 0
37 range: (0, 65535)
38 SignalFormat: TMDS
39 supported: TMDS
40 ConnectorType: DVI-I
41 ConnectorNumber: 0
42 _ConnectorLocation: 0
43 non-desktop: 0
44 supported: 0, 1
45 DP-0 disconnected (normal left inverted right x axis y axis)
46 Identifier: 0x1c0
47 Timestamp: 99649
48 Subpixel: unknown
49 Clones:
50 CRTCs: 0 1 2 3
51 Transform: 1.000000 0.000000 0.000000
52 0.000000 1.000000 0.000000
53 0.000000 0.000000 1.000000
54 filter:
55 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
56 BorderDimensions: 4
57 supported: 4
58 Border: 0 0 0 0
59 range: (0, 65535)
60 SignalFormat: DisplayPort
61 supported: DisplayPort
62 ConnectorType: DisplayPort
63 ConnectorNumber: 1
64 _ConnectorLocation: 1
65 non-desktop: 0
66 supported: 0, 1
67 DP-1 disconnected (normal left inverted right x axis y axis)
68 Identifier: 0x1c1
69 Timestamp: 99649
70 Subpixel: unknown
71 Clones:
72 CRTCs: 0 1 2 3
73 Transform: 1.000000 0.000000 0.000000
74 0.000000 1.000000 0.000000
75 0.000000 0.000000 1.000000
76 filter:
77 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
78 BorderDimensions: 4
79 supported: 4
80 Border: 0 0 0 0
81 range: (0, 65535)
82 SignalFormat: TMDS
83 supported: TMDS
84 ConnectorType: DisplayPort
85 ConnectorNumber: 1
86 _ConnectorLocation: 1
87 non-desktop: 0
88 supported: 0, 1
89 HDMI-0 connected primary 3840x2160+0+0 (0x1c3) normal (normal left inverted right x axis y axis) 1872mm x 1053mm
90 Identifier: 0x1c2
91 Timestamp: 99649
92 Subpixel: unknown
93 Gamma: 1.0:1.0:1.0
94 Brightness: 1.0
95 Clones:
96 CRTC: 0
97 CRTCs: 0 1 2 3
98 Transform: 1.000000 0.000000 0.000000
99 0.000000 1.000000 0.000000
100 0.000000 0.000000 1.000000
101 filter:
102 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
103 EDID:
104 00ffffffffffff004c2d010c01060001
105 2a18010380693b780a23ada4544d9926
106 0f474abdef80714f81c0810081809500
107 a9c0b300010108e80030f2705a80b058
108 8a00501d7400001e023a801871382d40
109 582c4500501d7400001e000000fd0018
110 4b0f873c000a202020202020000000fc
111 0053414d53554e470a20202020200156
112 020358f15761101f041305142021225d
113 5e5f6065666263640716031229090707
114 1507503d04c083010000e2000fe305c0
115 0076030c001000b83c21d08801020304
116 01403fff5060809067d85dc401788003
117 e3060501e30f01e0011d80d0721c1620
118 102c2580501d7400009e662156aa5100
119 1e30468f3300501d7400001e000000a6
120 BorderDimensions: 4
121 supported: 4
122 Border: 0 0 0 0
123 range: (0, 65535)
124 SignalFormat: TMDS
125 supported: TMDS
126 ConnectorType: HDMI
127 ConnectorNumber: 2
128 _ConnectorLocation: 2
129 non-desktop: 0
130 supported: 0, 1
131 3840x2160 (0x1c3) 594.000MHz +HSync +VSync *current +preferred
132 h: width 3840 start 4016 end 4104 total 4400 skew 0 clock 135.00KHz
133 v: height 2160 start 2168 end 2178 total 2250 clock 60.00Hz
134 4096x2160 (0x1c4) 593.410MHz +HSync +VSync
135 h: width 4096 start 4184 end 4272 total 4400 skew 0 clock 134.87KHz
136 v: height 2160 start 2168 end 2178 total 2250 clock 59.94Hz
137 4096x2160 (0x1c5) 594.000MHz +HSync +VSync
138 h: width 4096 start 5064 end 5152 total 5280 skew 0 clock 112.50KHz
139 v: height 2160 start 2168 end 2178 total 2250 clock 50.00Hz
140 4096x2160 (0x1c6) 296.700MHz +HSync +VSync
141 h: width 4096 start 4184 end 4272 total 4400 skew 0 clock 67.43KHz
142 v: height 2160 start 2168 end 2178 total 2250 clock 29.97Hz
143 4096x2160 (0x1c7) 297.000MHz +HSync +VSync
144 h: width 4096 start 5064 end 5152 total 5280 skew 0 clock 56.25KHz
145 v: height 2160 start 2168 end 2178 total 2250 clock 25.00Hz
146 4096x2160 (0x1c8) 297.000MHz +HSync +VSync
147 h: width 4096 start 5116 end 5204 total 5500 skew 0 clock 54.00KHz
148 v: height 2160 start 2168 end 2178 total 2250 clock 24.00Hz
149 4096x2160 (0x1c9) 296.750MHz +HSync +VSync
150 h: width 4096 start 5116 end 5204 total 5500 skew 0 clock 53.95KHz
151 v: height 2160 start 2168 end 2178 total 2250 clock 23.98Hz
152 3840x2160 (0x1ca) 593.410MHz +HSync +VSync
153 h: width 3840 start 4016 end 4104 total 4400 skew 0 clock 134.87KHz
154 v: height 2160 start 2168 end 2178 total 2250 clock 59.94Hz
155 3840x2160 (0x1cb) 594.000MHz +HSync +VSync
156 h: width 3840 start 4896 end 4984 total 5280 skew 0 clock 112.50KHz
157 v: height 2160 start 2168 end 2178 total 2250 clock 50.00Hz
158 3840x2160 (0x1cc) 296.700MHz +HSync +VSync
159 h: width 3840 start 4016 end 4104 total 4400 skew 0 clock 67.43KHz
160 v: height 2160 start 2168 end 2178 total 2250 clock 29.97Hz
161 3840x2160 (0x1cd) 297.000MHz +HSync +VSync
162 h: width 3840 start 4896 end 4984 total 5280 skew 0 clock 56.25KHz
163 v: height 2160 start 2168 end 2178 total 2250 clock 25.00Hz
164 3840x2160 (0x1ce) 296.750MHz +HSync +VSync
165 h: width 3840 start 5116 end 5204 total 5500 skew 0 clock 53.95KHz
166 v: height 2160 start 2168 end 2178 total 2250 clock 23.98Hz
167 1920x1080 (0x1cf) 148.500MHz +HSync +VSync
168 h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 67.50KHz
169 v: height 1080 start 1084 end 1089 total 1125 clock 60.00Hz
170 1920x1080 (0x1d0) 148.350MHz +HSync +VSync
171 h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 67.43KHz
172 v: height 1080 start 1084 end 1089 total 1125 clock 59.94Hz
173 1920x1080 (0x1d1) 148.500MHz +HSync +VSync
174 h: width 1920 start 2448 end 2492 total 2640 skew 0 clock 56.25KHz
175 v: height 1080 start 1084 end 1089 total 1125 clock 50.00Hz
176 1920x1080 (0x1d2) 74.180MHz +HSync +VSync
177 h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 33.72KHz
178 v: height 1080 start 1084 end 1089 total 1125 clock 29.97Hz
179 1920x1080 (0x1d3) 74.250MHz +HSync +VSync
180 h: width 1920 start 2448 end 2492 total 2640 skew 0 clock 28.12KHz
181 v: height 1080 start 1084 end 1089 total 1125 clock 25.00Hz
182 1920x1080 (0x1d4) 74.180MHz +HSync +VSync
183 h: width 1920 start 2558 end 2602 total 2750 skew 0 clock 26.97KHz
184 v: height 1080 start 1084 end 1089 total 1125 clock 23.98Hz
185 1920x1080 (0x1d5) 74.180MHz +HSync +VSync Interlace
186 h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 33.72KHz
187 v: height 1080 start 1084 end 1094 total 1124 clock 60.00Hz
188 1920x1080 (0x1d6) 74.250MHz +HSync +VSync Interlace
189 h: width 1920 start 2448 end 2492 total 2640 skew 0 clock 28.12KHz
190 v: height 1080 start 1084 end 1094 total 1124 clock 50.04Hz
191 1680x1050 (0x1d7) 146.250MHz -HSync +VSync
192 h: width 1680 start 1784 end 1960 total 2240 skew 0 clock 65.29KHz
193 v: height 1050 start 1053 end 1059 total 1089 clock 59.95Hz
194 1600x900 (0x1d8) 108.000MHz +HSync +VSync
195 h: width 1600 start 1624 end 1704 total 1800 skew 0 clock 60.00KHz
196 v: height 900 start 901 end 904 total 1000 clock 60.00Hz
197 1440x900 (0x1d9) 106.500MHz -HSync +VSync
198 h: width 1440 start 1520 end 1672 total 1904 skew 0 clock 55.93KHz
199 v: height 900 start 903 end 909 total 934 clock 59.89Hz
200 1366x768 (0x1da) 85.500MHz +HSync +VSync
201 h: width 1366 start 1436 end 1579 total 1792 skew 0 clock 47.71KHz
202 v: height 768 start 771 end 774 total 798 clock 59.79Hz
203 1280x1024 (0x1db) 135.000MHz +HSync +VSync
204 h: width 1280 start 1296 end 1440 total 1688 skew 0 clock 79.98KHz
205 v: height 1024 start 1025 end 1028 total 1066 clock 75.02Hz
206 1280x1024 (0x1dc) 108.000MHz +HSync +VSync
207 h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98KHz
208 v: height 1024 start 1025 end 1028 total 1066 clock 60.02Hz
209 1280x800 (0x1dd) 83.500MHz -HSync +VSync
210 h: width 1280 start 1352 end 1480 total 1680 skew 0 clock 49.70KHz
211 v: height 800 start 803 end 809 total 831 clock 59.81Hz
212 1280x720 (0x1de) 74.250MHz +HSync +VSync
213 h: width 1280 start 1390 end 1430 total 1650 skew 0 clock 45.00KHz
214 v: height 720 start 725 end 730 total 750 clock 60.00Hz
215 1280x720 (0x1df) 74.180MHz +HSync +VSync
216 h: width 1280 start 1390 end 1430 total 1650 skew 0 clock 44.96KHz
217 v: height 720 start 725 end 730 total 750 clock 59.94Hz
218 1280x720 (0x1e0) 74.250MHz +HSync +VSync
219 h: width 1280 start 1720 end 1760 total 1980 skew 0 clock 37.50KHz
220 v: height 720 start 725 end 730 total 750 clock 50.00Hz
221 1152x864 (0x1e1) 108.000MHz +HSync +VSync
222 h: width 1152 start 1216 end 1344 total 1600 skew 0 clock 67.50KHz
223 v: height 864 start 865 end 868 total 900 clock 75.00Hz
224 1024x768 (0x1e2) 78.750MHz +HSync +VSync
225 h: width 1024 start 1040 end 1136 total 1312 skew 0 clock 60.02KHz
226 v: height 768 start 769 end 772 total 800 clock 75.03Hz
227 1024x768 (0x1e3) 75.000MHz -HSync -VSync
228 h: width 1024 start 1048 end 1184 total 1328 skew 0 clock 56.48KHz
229 v: height 768 start 771 end 777 total 806 clock 70.07Hz
230 1024x768 (0x1e4) 65.000MHz -HSync -VSync
231 h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
232 v: height 768 start 771 end 777 total 806 clock 60.00Hz
233 800x600 (0x1e5) 49.500MHz +HSync +VSync
234 h: width 800 start 816 end 896 total 1056 skew 0 clock 46.88KHz
235 v: height 600 start 601 end 604 total 625 clock 75.00Hz
236 800x600 (0x1e6) 50.000MHz +HSync +VSync
237 h: width 800 start 856 end 976 total 1040 skew 0 clock 48.08KHz
238 v: height 600 start 637 end 643 total 666 clock 72.19Hz
239 800x600 (0x1e7) 40.000MHz +HSync +VSync
240 h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
241 v: height 600 start 601 end 605 total 628 clock 60.32Hz
242 720x576 (0x1e8) 27.000MHz -HSync -VSync
243 h: width 720 start 732 end 796 total 864 skew 0 clock 31.25KHz
244 v: height 576 start 581 end 586 total 625 clock 50.00Hz
245 720x480 (0x1e9) 27.000MHz -HSync -VSync
246 h: width 720 start 736 end 798 total 858 skew 0 clock 31.47KHz
247 v: height 480 start 489 end 495 total 525 clock 59.94Hz
248 640x480 (0x1ea) 31.500MHz -HSync -VSync
249 h: width 640 start 656 end 720 total 840 skew 0 clock 37.50KHz
250 v: height 480 start 481 end 484 total 500 clock 75.00Hz
251 640x480 (0x1eb) 31.500MHz -HSync -VSync
252 h: width 640 start 656 end 696 total 832 skew 0 clock 37.86KHz
253 v: height 480 start 481 end 484 total 520 clock 72.81Hz
254 640x480 (0x1ec) 25.175MHz -HSync -VSync
255 h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
256 v: height 480 start 490 end 492 total 525 clock 59.94Hz
257 DVI-D-0 disconnected (normal left inverted right x axis y axis)
258 Identifier: 0x1ed
259 Timestamp: 99649
260 Subpixel: unknown
261 Clones:
262 CRTCs: 0 1 2 3
263 Transform: 1.000000 0.000000 0.000000
264 0.000000 1.000000 0.000000
265 0.000000 0.000000 1.000000
266 filter:
267 CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0
268 BorderDimensions: 4
269 supported: 4
270 Border: 0 0 0 0
271 range: (0, 65535)
272 SignalFormat: TMDS
273 supported: TMDS
274 ConnectorType: DVI-D
275 ConnectorNumber: 3
276 _ConnectorLocation: 3
277 non-desktop: 0
278 supported: 0, 1
0 
1 Microsoft Visual Studio Solution File, Format Version 12.00
2 # Visual Studio Version 16
3 VisualStudioVersion = 16.0.30011.22
4 MinimumVisualStudioVersion = 10.0.40219.1
5 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "edid-decode", "edid-decode.vcxproj", "{245F601B-02E4-43DF-B64C-B49088673764}"
6 EndProject
7 Global
8 GlobalSection(SolutionConfigurationPlatforms) = preSolution
9 Debug|x64 = Debug|x64
10 Release|x64 = Release|x64
11 EndGlobalSection
12 GlobalSection(ProjectConfigurationPlatforms) = postSolution
13 {245F601B-02E4-43DF-B64C-B49088673764}.Debug|x64.ActiveCfg = Debug|x64
14 {245F601B-02E4-43DF-B64C-B49088673764}.Debug|x64.Build.0 = Debug|x64
15 {245F601B-02E4-43DF-B64C-B49088673764}.Release|x64.ActiveCfg = Release|x64
16 {245F601B-02E4-43DF-B64C-B49088673764}.Release|x64.Build.0 = Release|x64
17 EndGlobalSection
18 GlobalSection(SolutionProperties) = preSolution
19 HideSolutionNode = FALSE
20 EndGlobalSection
21 GlobalSection(ExtensibilityGlobals) = postSolution
22 SolutionGuid = {DDBA565E-4EC9-46DF-88E0-12F489BB3FCF}
23 EndGlobalSection
24 EndGlobal
0 <?xml version="1.0" encoding="utf-8"?>
1 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2 <ItemGroup Label="ProjectConfigurations">
3 <ProjectConfiguration Include="Debug|x64">
4 <Configuration>Debug</Configuration>
5 <Platform>x64</Platform>
6 </ProjectConfiguration>
7 <ProjectConfiguration Include="Release|x64">
8 <Configuration>Release</Configuration>
9 <Platform>x64</Platform>
10 </ProjectConfiguration>
11 </ItemGroup>
12 <PropertyGroup Label="Globals">
13 <VCProjectVersion>16.0</VCProjectVersion>
14 <ProjectGuid>{245F601B-02E4-43DF-B64C-B49088673764}</ProjectGuid>
15 <Keyword>Win32Proj</Keyword>
16 <RootNamespace>ediddecode</RootNamespace>
17 <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
18 </PropertyGroup>
19 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
20 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
21 <ConfigurationType>Application</ConfigurationType>
22 <UseDebugLibraries>true</UseDebugLibraries>
23 <PlatformToolset>v142</PlatformToolset>
24 <CharacterSet>Unicode</CharacterSet>
25 </PropertyGroup>
26 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
27 <ConfigurationType>Application</ConfigurationType>
28 <UseDebugLibraries>false</UseDebugLibraries>
29 <PlatformToolset>v142</PlatformToolset>
30 <WholeProgramOptimization>true</WholeProgramOptimization>
31 <CharacterSet>Unicode</CharacterSet>
32 </PropertyGroup>
33 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
34 <ImportGroup Label="ExtensionSettings">
35 </ImportGroup>
36 <ImportGroup Label="Shared">
37 </ImportGroup>
38 <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
39 <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
40 </ImportGroup>
41 <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
42 <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
43 </ImportGroup>
44 <PropertyGroup Label="UserMacros" />
45 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
46 <LinkIncremental>true</LinkIncremental>
47 </PropertyGroup>
48 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
49 <LinkIncremental>false</LinkIncremental>
50 </PropertyGroup>
51 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
52 <ClCompile>
53 <PrecompiledHeader>
54 </PrecompiledHeader>
55 <WarningLevel>Level3</WarningLevel>
56 <SDLCheck>true</SDLCheck>
57 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
58 <ConformanceMode>true</ConformanceMode>
59 <AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
60 <DisableSpecificWarnings>4244; 4018; 4267; 4996; 26451; 6385; 6001</DisableSpecificWarnings>
61 </ClCompile>
62 <Link>
63 <SubSystem>Console</SubSystem>
64 <GenerateDebugInformation>true</GenerateDebugInformation>
65 </Link>
66 <PostBuildEvent>
67 <Command>
68 </Command>
69 </PostBuildEvent>
70 <PostBuildEvent>
71 <Message>
72 </Message>
73 </PostBuildEvent>
74 </ItemDefinitionGroup>
75 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
76 <ClCompile>
77 <PrecompiledHeader>
78 </PrecompiledHeader>
79 <WarningLevel>Level3</WarningLevel>
80 <FunctionLevelLinking>true</FunctionLevelLinking>
81 <IntrinsicFunctions>true</IntrinsicFunctions>
82 <SDLCheck>true</SDLCheck>
83 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
84 <ConformanceMode>true</ConformanceMode>
85 <AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
86 <DisableSpecificWarnings>4244; 4018; 4267; 4996; 26451; 6385; 6001</DisableSpecificWarnings>
87 </ClCompile>
88 <Link>
89 <SubSystem>Console</SubSystem>
90 <EnableCOMDATFolding>true</EnableCOMDATFolding>
91 <OptimizeReferences>true</OptimizeReferences>
92 <GenerateDebugInformation>true</GenerateDebugInformation>
93 </Link>
94 </ItemDefinitionGroup>
95 <ItemGroup>
96 <ClCompile Include="getopt.c" />
97 <ClCompile Include="..\edid-decode.cpp" />
98 <ClCompile Include="..\parse-base-block.cpp" />
99 <ClCompile Include="..\parse-cta-block.cpp" />
100 <ClCompile Include="..\parse-di-ext-block.cpp" />
101 <ClCompile Include="..\parse-displayid-block.cpp" />
102 <ClCompile Include="..\parse-ls-ext-block.cpp" />
103 <ClCompile Include="..\parse-vtb-ext-block.cpp" />
104 </ItemGroup>
105 <ItemGroup>
106 <ClInclude Include="getopt.h" />
107 <ClInclude Include="unistd.h" />
108 <ClInclude Include="..\edid-decode.h" />
109 </ItemGroup>
110 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
111 <ImportGroup Label="ExtensionTargets">
112 </ImportGroup>
113 </Project>
0 <?xml version="1.0" encoding="utf-8"?>
1 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2 <ItemGroup>
3 <Filter Include="windows-unix">
4 <UniqueIdentifier>{757b13a8-3e1d-43af-acf1-d03963acb2e6}</UniqueIdentifier>
5 </Filter>
6 <Filter Include="edid-decode">
7 <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
8 <Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
9 </Filter>
10 </ItemGroup>
11 <ItemGroup>
12 <ClCompile Include="..\parse-base-block.cpp">
13 <Filter>edid-decode</Filter>
14 </ClCompile>
15 <ClCompile Include="..\parse-cta-block.cpp">
16 <Filter>edid-decode</Filter>
17 </ClCompile>
18 <ClCompile Include="..\parse-di-ext-block.cpp">
19 <Filter>edid-decode</Filter>
20 </ClCompile>
21 <ClCompile Include="..\parse-displayid-block.cpp">
22 <Filter>edid-decode</Filter>
23 </ClCompile>
24 <ClCompile Include="..\parse-ls-ext-block.cpp">
25 <Filter>edid-decode</Filter>
26 </ClCompile>
27 <ClCompile Include="..\parse-vtb-ext-block.cpp">
28 <Filter>edid-decode</Filter>
29 </ClCompile>
30 <ClCompile Include="getopt.c">
31 <Filter>windows-unix</Filter>
32 </ClCompile>
33 <ClCompile Include="..\edid-decode.cpp">
34 <Filter>edid-decode</Filter>
35 </ClCompile>
36 </ItemGroup>
37 <ItemGroup>
38 <ClInclude Include="..\edid-decode.h">
39 <Filter>edid-decode</Filter>
40 </ClInclude>
41 <ClInclude Include="getopt.h">
42 <Filter>windows-unix</Filter>
43 </ClInclude>
44 <ClInclude Include="unistd.h">
45 <Filter>windows-unix</Filter>
46 </ClInclude>
47 </ItemGroup>
48 </Project>
0 /**
1 * @file getopt.c
2 * @copy 2012 MinGW.org project
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23
24 /*
25 * Implementation of the `getopt', `getopt_long' and `getopt_long_only'
26 * APIs, for inclusion in the MinGW runtime library.
27 */
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <stdarg.h>
32 #include <getopt.h>
33
34 /* Identify how to get the calling program name, for use in messages...
35 */
36 #ifdef __CYGWIN__
37 /*
38 * CYGWIN uses this DLL reference...
39 */
40 # define PROGNAME __progname
41 extern char __declspec(dllimport) *__progname;
42 #else
43 /*
44 * ...while elsewhere, we simply use the first argument passed.
45 */
46 # define PROGNAME *argv
47 # define __inline__ __inline
48 #endif
49
50 /* Initialise the public variables. */
51
52 int optind = 1; /* index for first non-option arg */
53 int opterr = 1; /* enable built-in error messages */
54
55 char *optarg = NULL; /* pointer to current option argument */
56
57 #define CHAR char /* argument type selector */
58
59 #define getopt_switchar '-' /* option prefix character in argv */
60 #define getopt_pluschar '+' /* prefix for POSIX mode in optstring */
61 #define getopt_takes_argument ':' /* marker for optarg in optstring */
62 #define getopt_arg_assign '=' /* longopt argument field separator */
63 #define getopt_unknown '?' /* return code for unmatched option */
64 #define getopt_ordered 1 /* return code for ordered non-option */
65
66 #define getopt_all_done -1 /* return code to indicate completion */
67
68 enum
69 { /* All `getopt' API functions are implemented via calls to the
70 * common static function `getopt_parse()'; these `mode' selectors
71 * determine the behaviour of `getopt_parse()', to deliver the
72 * appropriate result in each case.
73 */
74 getopt_mode_standard = 0, /* getopt() */
75 getopt_mode_long, /* getopt_long() */
76 getopt_mode_long_only /* getopt_long_only() */
77 };
78
79 enum
80 { /* When attempting to match a command line argument to a long form option,
81 * these indicate the status of the match.
82 */
83 getopt_no_match = 0, /* no successful match */
84 getopt_abbreviated_match, /* argument is an abbreviation for an option */
85 getopt_exact_match /* argument matches the full option name */
86 };
87
88 int optopt = getopt_unknown; /* return value for option being evaluated */
89
90 /* Some BSD applications expect to be able to reinitialise `getopt' parsing
91 * by setting a global variable called `optreset'. We provide an obfuscated
92 * API, which allows applications to emulate this brain damage; however, any
93 * use of this is non-portable, and is strongly discouraged.
94 */
95 #define optreset __mingw_optreset
96 int optreset = 0;
97
98 static __inline__
99 int getopt_missing_arg( const CHAR *optstring )
100 {
101 /* Helper function to determine the appropriate return value,
102 * for the case where a required option argument is missing.
103 */
104 if( (*optstring == getopt_pluschar) || (*optstring == getopt_switchar) )
105 ++optstring;
106 return (*optstring == getopt_takes_argument)
107 ? getopt_takes_argument
108 : getopt_unknown;
109 }
110
111 /* `complain' macro facilitates the generation of simple built-in
112 * error messages, displayed on various fault conditions, provided
113 * `opterr' is non-zero.
114 */
115 #define complain( MSG, ARG ) if( opterr ) \
116 fprintf( stderr, "%s: "MSG"\n", PROGNAME, ARG )
117
118 static __inline__
119 int getopt_argerror( int mode, char *fmt, CHAR *prog, struct option *opt, int retval )
120 {
121 /* Helper function, to generate more complex built-in error
122 * messages, for invalid arguments to long form options ...
123 */
124 if( opterr )
125 {
126 /* ... but, displayed only if `opterr' is non-zero.
127 */
128 char flag[] = "--";
129 if( mode != getopt_mode_long )
130 /*
131 * only display one hyphen, for implicit long form options,
132 * improperly resolved by `getopt_long_only()'.
133 */
134 flag[1] = 0;
135 /*
136 * always preface the program name ...
137 */
138 fprintf( stderr, "%s: ", prog );
139 /*
140 * to the appropriate, option specific message.
141 */
142 fprintf( stderr, fmt, flag, opt->name );
143 }
144 /* Whether displaying the message, or not, always set `optopt'
145 * to identify the faulty option ...
146 */
147 optopt = opt->val;
148 /*
149 * and return the `invalid option' indicator.
150 */
151 return retval;
152 }
153
154 /* `getopt_conventions' establish behavioural options, to control
155 * the operation of `getopt_parse()', e.g. to select between POSIX
156 * and GNU style argument parsing behaviour.
157 */
158 #define getopt_set_conventions 0x1000
159 #define getopt_posixly_correct 0x0010
160
161 static __inline__
162 int getopt_conventions( int flags )
163 {
164 static int conventions = 0;
165
166 if( (conventions == 0) && ((flags & getopt_set_conventions) == 0) )
167 {
168 /* default conventions have not yet been established;
169 * initialise them now!
170 */
171 conventions = getopt_set_conventions;
172 if( (flags == getopt_pluschar) || (getenv( "POSIXLY_CORRECT" ) != NULL) )
173 conventions |= getopt_posixly_correct;
174 }
175
176 else if( flags & getopt_set_conventions )
177 /*
178 * default conventions may have already been established,
179 * but this is a specific request to augment them.
180 */
181 conventions |= flags;
182
183 /* in any event, return the currently established conventions.
184 */
185 return conventions;
186 }
187
188 static __inline__
189 int is_switchar( CHAR flag )
190 {
191 /* A simple helper function, used to identify the switch character
192 * introducing an optional command line argument.
193 */
194 return flag == getopt_switchar;
195 }
196
197 static __inline__
198 const CHAR *getopt_match( CHAR lookup, const CHAR *opt_string )
199 {
200 /* Helper function, used to identify short form options.
201 */
202 if( (*opt_string == getopt_pluschar) || (*opt_string == getopt_switchar) )
203 ++opt_string;
204 if( *opt_string == getopt_takes_argument )
205 ++opt_string;
206 do if( lookup == *opt_string ) return opt_string;
207 while( *++opt_string );
208 return NULL;
209 }
210
211 static __inline__
212 int getopt_match_long( const CHAR *nextchar, const CHAR *optname )
213 {
214 /* Helper function, used to identify potential matches for
215 * long form options.
216 */
217 CHAR matchchar;
218 while( (matchchar = *nextchar++) && (matchchar == *optname) )
219 /*
220 * skip over initial substring which DOES match.
221 */
222 ++optname;
223
224 if( matchchar )
225 {
226 /* did NOT match the entire argument to an initial substring
227 * of a defined option name ...
228 */
229 if( matchchar != getopt_arg_assign )
230 /*
231 * ... and didn't stop at an `=' internal field separator,
232 * so this is NOT a possible match.
233 */
234 return getopt_no_match;
235
236 /* DID stop at an `=' internal field separator,
237 * so this IS a possible match, and what follows is an
238 * argument to the possibly matched option.
239 */
240 optarg = (char *)(nextchar);
241 }
242 return *optname
243 /*
244 * if we DIDN'T match the ENTIRE text of the option name,
245 * then it's a possible abbreviated match ...
246 */
247 ? getopt_abbreviated_match
248 /*
249 * but if we DID match the entire option name,
250 * then it's a DEFINITE EXACT match.
251 */
252 : getopt_exact_match;
253 }
254
255 static __inline__
256 int getopt_resolved( int mode, int argc, CHAR *const *argv, int *argind,
257 struct option *opt, int index, int *retindex, const CHAR *optstring )
258 {
259 /* Helper function to establish appropriate return conditions,
260 * on resolution of a long form option.
261 */
262 if( retindex != NULL )
263 *retindex = index;
264
265 /* On return, `optind' should normally refer to the argument, if any,
266 * which follows the current one; it is convenient to set this, before
267 * checking for the presence of any `optarg'.
268 */
269 optind = *argind + 1;
270
271 if( optarg && (opt[index].has_arg == no_argument) )
272 /*
273 * it is an error for the user to specify an option specific argument
274 * with an option which doesn't expect one!
275 */
276 return getopt_argerror( mode, "option `%s%s' doesn't accept an argument\n",
277 PROGNAME, opt + index, getopt_unknown );
278
279 else if( (optarg == NULL) && (opt[index].has_arg == required_argument) )
280 {
281 /* similarly, it is an error if no argument is specified
282 * with an option which requires one ...
283 */
284 if( optind < argc )
285 /*
286 * ... except that the requirement may be satisfied from
287 * the following command line argument, if any ...
288 */
289 optarg = argv[*argind = optind++];
290
291 else
292 /* so fail this case, only if no such argument exists!
293 */
294 return getopt_argerror( mode, "option `%s%s' requires an argument\n",
295 PROGNAME, opt + index, getopt_missing_arg( optstring ) );
296 }
297
298 /* when the caller has provided a return buffer ...
299 */
300 if( opt[index].flag != NULL )
301 {
302 /* ... then we place the proper return value there,
303 * and return a status code of zero ...
304 */
305 *(opt[index].flag) = opt[index].val;
306 return 0;
307 }
308 /* ... otherwise, the return value becomes the status code.
309 */
310 return opt[index].val;
311 }
312
313 static __inline__
314 int getopt_verify( const CHAR *nextchar, const CHAR *optstring )
315 {
316 /* Helper function, called by getopt_parse() when invoked
317 * by getopt_long_only(), to verify when an unmatched or an
318 * ambiguously matched long form option string is valid as
319 * a short form option specification.
320 */
321 if( ! (nextchar && *nextchar && optstring && *optstring) )
322 /*
323 * There are no characters to be matched, or there are no
324 * valid short form option characters to which they can be
325 * matched, so this can never be valid.
326 */
327 return 0;
328
329 while( *nextchar )
330 {
331 /* For each command line character in turn ...
332 */
333 const CHAR *test;
334 if( (test = getopt_match( *nextchar++, optstring )) == NULL )
335 /*
336 * ... there is no short form option to match the current
337 * candidate, so the entire argument fails.
338 */
339 return 0;
340
341 if( test[1] == getopt_takes_argument )
342 /*
343 * The current candidate is valid, and it matches an option
344 * which takes an argument, so this command line argument is
345 * a valid short form option specification; accept it.
346 */
347 return 1;
348 }
349 /* If we get to here, then every character in the command line
350 * argument was valid as a short form option; accept it.
351 */
352 return 1;
353 }
354
355 static
356 #define getopt_std_args int argc, CHAR *const argv[], const CHAR *optstring
357 int getopt_parse( int mode, getopt_std_args, ... )
358 {
359 /* Common core implementation for ALL `getopt' functions.
360 */
361 static int argind = 0;
362 static int optbase = 0;
363 static const CHAR *nextchar = NULL;
364 static int optmark = 0;
365
366 if( (optreset |= (optind < 1)) || (optind < optbase) )
367 {
368 /* POSIX does not prescribe any definitive mechanism for restarting
369 * a `getopt' scan, but some applications may require such capability.
370 * We will support it, by allowing the caller to adjust the value of
371 * `optind' downwards, (nominally setting it to zero). Since POSIX
372 * wants `optind' to have an initial value of one, but we want all
373 * of our internal place holders to be initialised to zero, when we
374 * are called for the first time, we will handle such a reset by
375 * adjusting all of the internal place holders to one less than
376 * the adjusted `optind' value, (but never to less than zero).
377 */
378 if( optreset )
379 {
380 /* User has explicitly requested reinitialisation...
381 * We need to reset `optind' to it's normal initial value of 1,
382 * to avoid a potential infinitely recursive loop; by doing this
383 * up front, we also ensure that the remaining place holders
384 * will be correctly reinitialised to no less than zero.
385 */
386 optind = 1;
387
388 /* We also need to clear the `optreset' request...
389 */
390 optreset = 0;
391 }
392
393 /* Now, we may safely reinitialise the internal place holders, to
394 * one less than `optind', without fear of making them negative.
395 */
396 optmark = optbase = argind = optind - 1;
397 nextchar = NULL;
398 }
399
400 /* From a POSIX perspective, the following is `undefined behaviour';
401 * we implement it thus, for compatibility with GNU and BSD getopt.
402 */
403 else if( optind > (argind + 1) )
404 {
405 /* Some applications expect to be able to manipulate `optind',
406 * causing `getopt' to skip over one or more elements of `argv';
407 * POSIX doesn't require us to support this brain-damaged concept;
408 * (indeed, POSIX defines no particular behaviour, in the event of
409 * such usage, so it must be considered a bug for an application
410 * to rely on any particular outcome); nonetheless, Mac-OS-X and
411 * BSD actually provide *documented* support for this capability,
412 * so we ensure that our internal place holders keep track of
413 * external `optind' increments; (`argind' must lag by one).
414 */
415 argind = optind - 1;
416
417 /* When `optind' is misused, in this fashion, we also abandon any
418 * residual text in the argument we had been parsing; this is done
419 * without any further processing of such abandoned text, assuming
420 * that the caller is equipped to handle it appropriately.
421 */
422 nextchar = NULL;
423 }
424
425 if( nextchar && *nextchar )
426 {
427 /* we are parsing a standard, or short format, option argument ...
428 */
429 const CHAR *optchar;
430 if( (optchar = getopt_match( optopt = *nextchar++, optstring )) != NULL )
431 {
432 /* we have identified it as valid ...
433 */
434 if( optchar[1] == getopt_takes_argument )
435 {
436 /* and determined that it requires an associated argument ...
437 */
438 if( ! *(optarg = (char *)(nextchar)) )
439 {
440 /* the argument is NOT attached ...
441 */
442 if( optchar[2] == getopt_takes_argument )
443 /*
444 * but this GNU extension marks it as optional,
445 * so we don't provide one on this occasion.
446 */
447 optarg = NULL;
448
449 /* otherwise this option takes a mandatory argument,
450 * so, provided there is one available ...
451 */
452 else if( (argc - argind) > 1 )
453 /*
454 * we take the following command line argument,
455 * as the appropriate option argument.
456 */
457 optarg = argv[++argind];
458
459 /* but if no further argument is available,
460 * then there is nothing we can do, except for
461 * issuing the requisite diagnostic message.
462 */
463 else
464 {
465 complain( "option requires an argument -- %c", optopt );
466 return getopt_missing_arg( optstring );
467 }
468 }
469 optind = argind + 1;
470 nextchar = NULL;
471 }
472 else
473 optarg = NULL;
474 optind = (nextchar && *nextchar) ? argind : argind + 1;
475 return optopt;
476 }
477 /* if we didn't find a valid match for the specified option character,
478 * then we fall through to here, so take appropriate diagnostic action.
479 */
480 if( mode == getopt_mode_long_only )
481 {
482 complain( "unrecognised option `-%s'", --nextchar );
483 nextchar = NULL;
484 optopt = 0;
485 }
486 else
487 complain( "invalid option -- %c", optopt );
488 optind = (nextchar && *nextchar) ? argind : argind + 1;
489 return getopt_unknown;
490 }
491
492 if( optmark > optbase )
493 {
494 /* This can happen, in GNU parsing mode ONLY, when we have
495 * skipped over non-option arguments, and found a subsequent
496 * option argument; in this case we permute the arguments.
497 */
498 int index;
499 /*
500 * `optspan' specifies the number of contiguous arguments
501 * which are spanned by the current option, and so must be
502 * moved together during permutation.
503 */
504 int optspan = argind - optmark + 1;
505 /*
506 * we use `this_arg' to store these temporarily.
507 */
508 CHAR **this_arg = (CHAR **)malloc(optspan * sizeof(CHAR *));
509 if( this_arg == NULL )
510 return getopt_unknown;
511 /*
512 * we cannot manipulate `argv' directly, since the `getopt'
513 * API prototypes it as `read-only'; this cast to `arglist'
514 * allows us to work around that restriction.
515 */
516 CHAR **arglist = (char **)(argv);
517
518 /* save temporary copies of the arguments which are associated
519 * with the current option ...
520 */
521 for( index = 0; index < optspan; ++index )
522 this_arg[index] = arglist[optmark + index];
523
524 /* move all preceding non-option arguments to the right,
525 * overwriting these saved arguments, while making space
526 * to replace them in their permuted location.
527 */
528 for( --optmark; optmark >= optbase; --optmark )
529 arglist[optmark + optspan] = arglist[optmark];
530
531 /* restore the temporarily saved option arguments to
532 * their permuted location.
533 */
534 for( index = 0; index < optspan; ++index )
535 arglist[optbase + index] = this_arg[index];
536
537 free(this_arg);
538
539 /* adjust `optbase', to account for the relocated option.
540 */
541 optbase += optspan;
542 }
543
544 else
545 /* no permutation occurred ...
546 * simply adjust `optbase' for all options parsed so far.
547 */
548 optbase = argind + 1;
549
550 /* enter main parsing loop ...
551 */
552 while( argc > ++argind )
553 {
554 /* inspect each argument in turn, identifying possible options ...
555 */
556 if( is_switchar( *(nextchar = argv[optmark = argind]) ) && *++nextchar )
557 {
558 /* we've found a candidate option argument ... */
559
560 if( is_switchar( *nextchar ) )
561 {
562 /* it's a double hyphen argument ... */
563
564 const CHAR *refchar = nextchar;
565 if( *++refchar )
566 {
567 /* and it looks like a long format option ...
568 * `getopt_long' mode must be active to accept it as such,
569 * `getopt_long_only' also qualifies, but we must downgrade
570 * it to force explicit handling as a long format option.
571 */
572 if( mode >= getopt_mode_long )
573 {
574 nextchar = refchar;
575 mode = getopt_mode_long;
576 }
577 }
578 else
579 {
580 /* this is an explicit `--' end of options marker, so wrap up now!
581 */
582 if( optmark > optbase )
583 {
584 /* permuting the argument list as necessary ...
585 * (note use of `this_arg' and `arglist', as above).
586 */
587 CHAR *this_arg = argv[optmark];
588 CHAR **arglist = (CHAR **)(argv);
589
590 /* move all preceding non-option arguments to the right ...
591 */
592 do arglist[optmark] = arglist[optmark - 1];
593 while( optmark-- > optbase );
594
595 /* reinstate the `--' marker, in its permuted location.
596 */
597 arglist[optbase] = this_arg;
598 }
599 /* ... before finally bumping `optbase' past the `--' marker,
600 * and returning the `all done' completion indicator.
601 */
602 optind = ++optbase;
603 return getopt_all_done;
604 }
605 }
606 else if( mode < getopt_mode_long_only )
607 {
608 /* it's not an explicit long option, and `getopt_long_only' isn't active,
609 * so we must explicitly try to match it as a short option.
610 */
611 mode = getopt_mode_standard;
612 }
613
614 if( mode >= getopt_mode_long )
615 {
616 /* the current argument is a long form option, (either explicitly,
617 * introduced by a double hyphen, or implicitly because we were called
618 * by `getopt_long_only'); this is where we parse it.
619 */
620 int lookup;
621 int matched = -1;
622
623 /* we need to fetch the `extra' function arguments, which are
624 * specified for the `getopt_long' APIs.
625 */
626 va_list refptr;
627 va_start( refptr, optstring );
628 struct option *longopts = va_arg( refptr, struct option * );
629 int *optindex = va_arg( refptr, int * );
630 va_end( refptr );
631
632 /* ensuring that `optarg' does not inherit any junk, from parsing
633 * preceding arguments ...
634 */
635 optarg = NULL;
636 for( lookup = 0; longopts && longopts[lookup].name; ++lookup )
637 {
638 /* scan the list of defined long form options ...
639 */
640 switch( getopt_match_long( nextchar, longopts[lookup].name ) )
641 {
642 /* looking for possible matches for the current argument.
643 */
644 case getopt_exact_match:
645 /*
646 * when an exact match is found,
647 * return it immediately, setting `nextchar' to NULL,
648 * to ensure we don't mistakenly try to match any
649 * subsequent characters as short form options.
650 */
651 nextchar = NULL;
652 return getopt_resolved( mode, argc, argv, &argind,
653 longopts, lookup, optindex, optstring );
654
655 case getopt_abbreviated_match:
656 /*
657 * but, for a partial (initial substring) match ...
658 */
659 if( matched >= 0 )
660 {
661 /* if this is not the first, then we have an ambiguity ...
662 */
663 if( (mode == getopt_mode_long_only)
664 /*
665 * However, in the case of getopt_long_only(), if
666 * the entire ambiguously matched string represents
667 * a valid short option specification, then we may
668 * proceed to interpret it as such.
669 */
670 && getopt_verify( nextchar, optstring ) )
671 return getopt_parse( mode, argc, argv, optstring );
672
673 /* If we get to here, then the ambiguously matched
674 * partial long option isn't valid for short option
675 * evaluation; reset parser context to resume with
676 * the following command line argument, diagnose
677 * ambiguity, and bail out.
678 */
679 optopt = 0;
680 nextchar = NULL;
681 optind = argind + 1;
682 complain( "option `%s' is ambiguous", argv[argind] );
683 return getopt_unknown;
684 }
685 /* otherwise just note that we've found a possible match ...
686 */
687 matched = lookup;
688 }
689 }
690 if( matched >= 0 )
691 {
692 /* if we get to here, then we found exactly one partial match,
693 * so return it, as for an exact match.
694 */
695 nextchar = NULL;
696 return getopt_resolved( mode, argc, argv, &argind,
697 longopts, matched, optindex, optstring );
698 }
699 /* if here, then we had what SHOULD have been a long form option,
700 * but it is unmatched ...
701 */
702 if( (mode < getopt_mode_long_only)
703 /*
704 * ... although paradoxically, `mode == getopt_mode_long_only'
705 * allows us to still try to match it as a short form option.
706 */
707 || (getopt_verify( nextchar, optstring ) == 0) )
708 {
709 /* When it cannot be matched, reset the parsing context to
710 * resume from the next argument, diagnose the failed match,
711 * and bail out.
712 */
713 optopt = 0;
714 nextchar = NULL;
715 optind = argind + 1;
716 complain( "unrecognised option `%s'", argv[argind] );
717 return getopt_unknown;
718 }
719 }
720 /* fall through to handle standard short form options...
721 * when the option argument format is neither explictly identified
722 * as long, nor implicitly matched as such, and the argument isn't
723 * just a bare hyphen, (which isn't an option), then we make one
724 * recursive call to explicitly interpret it as short format.
725 */
726 if( *nextchar )
727 return getopt_parse( mode, argc, argv, optstring );
728 }
729 /* if we get to here, then we've parsed a non-option argument ...
730 * in GNU compatibility mode, we step over it, so we can permute
731 * any subsequent option arguments, but ...
732 */
733 if( *optstring == getopt_switchar )
734 {
735 /* if `optstring' begins with a `-' character, this special
736 * GNU specific behaviour requires us to return the non-option
737 * arguments in strict order, as pseudo-arguments to a special
738 * option, with return value defined as `getopt_ordered'.
739 */
740 nextchar = NULL;
741 optind = argind + 1;
742 optarg = argv[argind];
743 return getopt_ordered;
744 }
745 if( getopt_conventions( *optstring ) & getopt_posixly_correct )
746 /*
747 * otherwise ...
748 * for POSIXLY_CORRECT behaviour, or if `optstring' begins with
749 * a `+' character, then we break out of the parsing loop, so that
750 * the scan ends at the current argument, with no permutation.
751 */
752 break;
753 }
754 /* fall through when all arguments have been evaluated,
755 */
756 optind = optbase;
757 return getopt_all_done;
758 }
759
760 /* All three public API entry points are trivially defined,
761 * in terms of the internal `getopt_parse' function.
762 */
763 int getopt( getopt_std_args )
764 {
765 return getopt_parse( getopt_mode_standard, argc, argv, optstring );
766 }
767
768 int getopt_long( getopt_std_args, const struct option *opts, int *index )
769 {
770 return getopt_parse( getopt_mode_long, argc, argv, optstring, opts, index );
771 }
772
773 int getopt_long_only( getopt_std_args, const struct option *opts, int *index )
774 {
775 return getopt_parse( getopt_mode_long_only, argc, argv, optstring, opts, index );
776 }
777
778 #ifdef __weak_alias
779 /*
780 * These Microsnot style uglified aliases are provided for compatibility
781 * with the previous MinGW implementation of the getopt API.
782 */
783 __weak_alias( getopt, _getopt )
784 __weak_alias( getopt_long, _getopt_long )
785 __weak_alias( getopt_long_only, _getopt_long_only )
786 #endif
0 /**
1 * @file getopt.h
2 * @copy 2012 MinGW.org project
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23 #ifndef _GETOPT_H
24 #define _GETOPT_H
25
26 /*
27 * Defines constants and function prototypes required to implement
28 * the `getopt', `getopt_long' and `getopt_long_only' APIs.
29 */
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 extern int optind; /* index of first non-option in argv */
36 extern int optopt; /* single option character, as parsed */
37 extern int opterr; /* flag to enable built-in diagnostics... */
38 /* (user may set to zero, to suppress) */
39
40 extern char *optarg; /* pointer to argument of current option */
41
42 extern int getopt( int, char * const [], const char * );
43
44 #ifdef _BSD_SOURCE
45 /*
46 * BSD adds the non-standard `optreset' feature, for reinitialisation
47 * of `getopt' parsing. We support this feature, for applications which
48 * proclaim their BSD heritage, before including this header; however,
49 * to maintain portability, developers are advised to avoid it.
50 */
51 # define optreset __mingw_optreset
52
53 extern int optreset;
54 #endif
55 #ifdef __cplusplus
56 }
57 #endif
58 /*
59 * POSIX requires the `getopt' API to be specified in `unistd.h';
60 * thus, `unistd.h' includes this header. However, we do not want
61 * to expose the `getopt_long' or `getopt_long_only' APIs, when
62 * included in this manner. Thus, close the standard __GETOPT_H__
63 * declarations block, and open an additional __GETOPT_LONG_H__
64 * specific block, only when *not* __UNISTD_H_SOURCED__, in which
65 * to declare the extended API.
66 */
67 #endif /* !defined(__GETOPT_H__) */
68 #if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__)
69 #define __GETOPT_LONG_H__
70
71 #ifdef __cplusplus
72 extern "C" {
73 #endif
74
75 struct option /* specification for a long form option... */
76 {
77 const char *name; /* option name, without leading hyphens */
78 int has_arg; /* does it take an argument? */
79 int *flag; /* where to save its status, or NULL */
80 int val; /* its associated status value */
81 };
82
83 enum /* permitted values for its `has_arg' field... */
84 {
85 no_argument = 0, /* option never takes an argument */
86 required_argument, /* option always requires an argument */
87 optional_argument /* option may take an argument */
88 };
89
90 extern int getopt_long( int, char * const [], const char *, const struct option *, int * );
91 extern int getopt_long_only( int, char * const [], const char *, const struct option *, int * );
92 /*
93 * Previous MinGW implementation had...
94 */
95 #ifndef HAVE_DECL_GETOPT
96 /*
97 * ...for the long form API only; keep this for compatibility.
98 */
99 # define HAVE_DECL_GETOPT 1
100 #endif
101
102 #ifdef __cplusplus
103 }
104 #endif
105
106 #endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */
0 #ifndef _UNISTD_H
1 #define _UNISTD_H 1
2
3 #include <stdlib.h>
4 #include <io.h>
5 #include <getopt.h>
6
7 #define ssize_t int
8
9 #endif /* unistd.h */