... | ... | ||
---|---|---|---|
12 | 12 | ||
13 | Regards, | 13 | Regards, |
14 | Benjamin | 14 | Benjamin |
15 | 15 | ||
16 | --- | 16 | --- |
17 | Changes in v5: | ||
18 | - Include missing proprety.h header | ||
19 | - Move link_freq to device structure | ||
20 | - Update get_vblank_limits() prototype | ||
21 | - Add BUILD_BUG_ON() in vd55g1_update_patgen() | ||
22 | - Drop hdl->error check | ||
23 | - Use device_property*() instead of of_property*() | ||
24 | - Drop OF requirement | ||
25 | - Improve runtime pm usage | ||
26 | - Various syntax fixes | ||
27 | - Link to v4: https://lore.kernel.org/r/20250402-b4-vd55g1-v4-0-84b1f54c670c@foss.st.com | ||
28 | |||
29 | Changes in v4: | ||
30 | - Fix data-lanes syntax in binding | ||
31 | - Link to v3: https://lore.kernel.org/r/20250402-b4-vd55g1-v3-0-393985404759@foss.st.com | ||
32 | |||
33 | Changes in v3: | ||
34 | - Add maxItems to data-lanes in binding | ||
35 | - Drop redondant 'binding' in binding commit message | ||
36 | - Link to v2: https://lore.kernel.org/r/20250401-b4-vd55g1-v2-0-0c8ab8a48c55@foss.st.com | ||
37 | |||
17 | Changes in v2: | 38 | Changes in v2: |
18 | - Fix device tree binding mistakes | 39 | - Fix device tree binding mistakes |
19 | - Drop linux media git from MAINTAINERS file | 40 | - Drop linux media git from MAINTAINERS file |
20 | - Fix coding style mistakes | 41 | - Fix coding style mistakes |
21 | - Drop vd55g1_err_probe wrapper | 42 | - Drop vd55g1_err_probe wrapper |
22 | - Fix 32bits build | 43 | - Fix 32bits build |
23 | - Fix config symbol help paragraph being too short for checkpatch | 44 | - Fix config symbol help paragraph being too short for checkpatch |
24 | - Link to v1: https://lore.kernel.org/r/20250328-b4-vd55g1-v1-0-8d16b4a79f29@foss.st.com | 45 | - Link to v1: https://lore.kernel.org/r/20250328-b4-vd55g1-v1-0-8d16b4a79f29@foss.st.com |
25 | 46 | ||
26 | --- | 47 | --- |
27 | Benjamin Mugnier (2): | 48 | Benjamin Mugnier (2): |
28 | media: dt-bindings: Add ST VD55G1 camera sensor binding | 49 | media: dt-bindings: Add ST VD55G1 camera sensor |
29 | media: i2c: Add driver for ST VD55G1 camera sensor | 50 | media: i2c: Add driver for ST VD55G1 camera sensor |
30 | 51 | ||
31 | .../devicetree/bindings/media/i2c/st,vd55g1.yaml | 132 ++ | 52 | .../devicetree/bindings/media/i2c/st,vd55g1.yaml | 132 ++ |
32 | MAINTAINERS | 9 + | 53 | MAINTAINERS | 9 + |
33 | drivers/media/i2c/Kconfig | 11 + | 54 | drivers/media/i2c/Kconfig | 11 + |
34 | drivers/media/i2c/Makefile | 1 + | 55 | drivers/media/i2c/Makefile | 1 + |
35 | drivers/media/i2c/vd55g1.c | 1993 ++++++++++++++++++++ | 56 | drivers/media/i2c/vd55g1.c | 2005 ++++++++++++++++++++ |
36 | 5 files changed, 2146 insertions(+) | 57 | 5 files changed, 2158 insertions(+) |
37 | --- | 58 | --- |
38 | base-commit: b2c4bf0c102084e77ed1b12090d77a76469a6814 | 59 | base-commit: b2c4bf0c102084e77ed1b12090d77a76469a6814 |
39 | change-id: 20250225-b4-vd55g1-bdb90dbe39b3 | 60 | change-id: 20250225-b4-vd55g1-bdb90dbe39b3 |
40 | 61 | ||
41 | Best regards, | 62 | Best regards, |
42 | -- | 63 | -- |
43 | Benjamin Mugnier <benjamin.mugnier@foss.st.com> | 64 | Benjamin Mugnier <benjamin.mugnier@foss.st.com> | diff view generated by jsdifflib |
1 | Also update MAINTAINERS file accordingly. | 1 | Also update MAINTAINERS file accordingly. |
---|---|---|---|
2 | 2 | ||
3 | Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> | ||
3 | Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com> | 4 | Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com> |
4 | --- | 5 | --- |
5 | .../devicetree/bindings/media/i2c/st,vd55g1.yaml | 132 +++++++++++++++++++++ | 6 | .../devicetree/bindings/media/i2c/st,vd55g1.yaml | 132 +++++++++++++++++++++ |
6 | MAINTAINERS | 7 ++ | 7 | MAINTAINERS | 7 ++ |
7 | 2 files changed, 139 insertions(+) | 8 | 2 files changed, 139 insertions(+) |
... | ... | ||
81 | + unevaluatedProperties: false | 82 | + unevaluatedProperties: false |
82 | + | 83 | + |
83 | + properties: | 84 | + properties: |
84 | + data-lanes: | 85 | + data-lanes: |
85 | + items: | 86 | + items: |
86 | + const: 1 | 87 | + - const: 1 |
87 | + | 88 | + |
88 | + link-frequencies: | 89 | + link-frequencies: |
89 | + maxItems: 1 | 90 | + maxItems: 1 |
90 | + items: | 91 | + items: |
91 | + minimum: 125000000 | 92 | + minimum: 125000000 |
... | ... | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
13 | Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com> | 13 | Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com> |
14 | --- | 14 | --- |
15 | MAINTAINERS | 2 + | 15 | MAINTAINERS | 2 + |
16 | drivers/media/i2c/Kconfig | 11 + | 16 | drivers/media/i2c/Kconfig | 11 + |
17 | drivers/media/i2c/Makefile | 1 + | 17 | drivers/media/i2c/Makefile | 1 + |
18 | drivers/media/i2c/vd55g1.c | 1993 ++++++++++++++++++++++++++++++++++++++++++++ | 18 | drivers/media/i2c/vd55g1.c | 2005 ++++++++++++++++++++++++++++++++++++++++++++ |
19 | 4 files changed, 2007 insertions(+) | 19 | 4 files changed, 2019 insertions(+) |
20 | 20 | ||
21 | diff --git a/MAINTAINERS b/MAINTAINERS | 21 | diff --git a/MAINTAINERS b/MAINTAINERS |
22 | index XXXXXXX..XXXXXXX 100644 | 22 | index XXXXXXX..XXXXXXX 100644 |
23 | --- a/MAINTAINERS | 23 | --- a/MAINTAINERS |
24 | +++ b/MAINTAINERS | 24 | +++ b/MAINTAINERS |
... | ... | ||
47 | camera sensor. | 47 | camera sensor. |
48 | 48 | ||
49 | +config VIDEO_VD55G1 | 49 | +config VIDEO_VD55G1 |
50 | + tristate "ST VD55G1 sensor support" | 50 | + tristate "ST VD55G1 sensor support" |
51 | + select V4L2_CCI_I2C | 51 | + select V4L2_CCI_I2C |
52 | + depends on OF && GPIOLIB | 52 | + depends on GPIOLIB |
53 | + help | 53 | + help |
54 | + This is a Video4Linux2 sensor driver for the ST VD55G1 | 54 | + This is a Video4Linux2 sensor driver for the ST VD55G1 |
55 | + camera sensor. | 55 | + camera sensor. |
56 | + | 56 | + |
57 | + To compile this driver as a module, choose M here: the | 57 | + To compile this driver as a module, choose M here: the |
... | ... | ||
90 | +#include <linux/gpio/consumer.h> | 90 | +#include <linux/gpio/consumer.h> |
91 | +#include <linux/i2c.h> | 91 | +#include <linux/i2c.h> |
92 | +#include <linux/iopoll.h> | 92 | +#include <linux/iopoll.h> |
93 | +#include <linux/module.h> | 93 | +#include <linux/module.h> |
94 | +#include <linux/pm_runtime.h> | 94 | +#include <linux/pm_runtime.h> |
95 | +#include <linux/property.h> | ||
95 | +#include <linux/regmap.h> | 96 | +#include <linux/regmap.h> |
96 | +#include <linux/regulator/consumer.h> | 97 | +#include <linux/regulator/consumer.h> |
97 | +#include <linux/unaligned.h> | 98 | +#include <linux/unaligned.h> |
98 | +#include <linux/units.h> | 99 | +#include <linux/units.h> |
99 | + | 100 | + |
... | ... | ||
141 | +#define VD55G1_REG_APPLIED_ANALOG_GAIN CCI_REG16_LE(0x00ea) | 142 | +#define VD55G1_REG_APPLIED_ANALOG_GAIN CCI_REG16_LE(0x00ea) |
142 | +#define VD55G1_REG_APPLIED_DIGITAL_GAIN CCI_REG16_LE(0x00ec) | 143 | +#define VD55G1_REG_APPLIED_DIGITAL_GAIN CCI_REG16_LE(0x00ec) |
143 | +#define VD55G1_REG_AE_FORCE_COLDSTART CCI_REG16_LE(0x0308) | 144 | +#define VD55G1_REG_AE_FORCE_COLDSTART CCI_REG16_LE(0x0308) |
144 | +#define VD55G1_REG_AE_COLDSTART_EXP_TIME CCI_REG32_LE(0x0374) | 145 | +#define VD55G1_REG_AE_COLDSTART_EXP_TIME CCI_REG32_LE(0x0374) |
145 | +#define VD55G1_REG_READOUT_CTRL CCI_REG8(0x052e) | 146 | +#define VD55G1_REG_READOUT_CTRL CCI_REG8(0x052e) |
146 | +#define VD55G1_REG_DARKCAL_CTRL CCI_REG8(0x032a) | ||
147 | +#define VD55G1_DARKCAL_BYPASS 0 | ||
148 | +#define VD55G1_DARKCAL_AUTO 1 | ||
149 | +#define VD55G1_REG_DUSTER_CTRL CCI_REG8(0x03ea) | 147 | +#define VD55G1_REG_DUSTER_CTRL CCI_REG8(0x03ea) |
150 | +#define VD55G1_DUSTER_ENABLE BIT(0) | 148 | +#define VD55G1_DUSTER_ENABLE BIT(0) |
151 | +#define VD55G1_DUSTER_DISABLE 0 | 149 | +#define VD55G1_DUSTER_DISABLE 0 |
152 | +#define VD55G1_DUSTER_DYN_ENABLE BIT(1) | 150 | +#define VD55G1_DUSTER_DYN_ENABLE BIT(1) |
153 | +#define VD55G1_DUSTER_RING_ENABLE BIT(4) | 151 | +#define VD55G1_DUSTER_RING_ENABLE BIT(4) |
... | ... | ||
204 | +#define VD55G1_CTX_OFFSET 0x50 | 202 | +#define VD55G1_CTX_OFFSET 0x50 |
205 | +#define VD55G1_FWPATCH_REVISION_MAJOR 2 | 203 | +#define VD55G1_FWPATCH_REVISION_MAJOR 2 |
206 | +#define VD55G1_FWPATCH_REVISION_MINOR 9 | 204 | +#define VD55G1_FWPATCH_REVISION_MINOR 9 |
207 | + | 205 | + |
208 | +static const u8 patch_array[] = { | 206 | +static const u8 patch_array[] = { |
209 | +0x44, 0x03, 0x09, 0x02, 0xe6, 0x01, 0x42, 0x00, 0xea, 0x01, 0x42, 0x00, 0xf0, | 207 | + 0x44, 0x03, 0x09, 0x02, 0xe6, 0x01, 0x42, 0x00, 0xea, 0x01, 0x42, 0x00, |
210 | +0x01, 0x42, 0x00, 0xe6, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 208 | + 0xf0, 0x01, 0x42, 0x00, 0xe6, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, |
211 | +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 209 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
212 | +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 210 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
213 | +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 211 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
214 | +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 212 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
215 | +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, | 213 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
216 | +0xfa, 0x68, 0x40, 0x00, 0xe8, 0x09, 0xbe, 0x4c, 0x08, 0x00, 0xf2, 0x93, 0xdd, | 214 | + 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0xfa, 0x68, 0x40, 0x00, 0xe8, |
217 | +0x1c, 0x00, 0xc0, 0xe2, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x00, 0xfa, 0x6b, | 215 | + 0x09, 0xbe, 0x4c, 0x08, 0x00, 0xf2, 0x93, 0xdd, 0x1c, 0x00, 0xc0, 0xe2, |
218 | +0x80, 0x98, 0x7f, 0xfc, 0xef, 0x11, 0xc1, 0x0f, 0x82, 0x69, 0xbe, 0x0f, 0xac, | 216 | + 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x00, 0xfa, 0x6b, 0x80, 0x98, 0x7f, |
219 | +0x58, 0x40, 0x00, 0xe8, 0x0c, 0x0c, 0x00, 0xf2, 0x93, 0xdd, 0x1c, 0x00, 0x40, | 217 | + 0xfc, 0xef, 0x11, 0xc1, 0x0f, 0x82, 0x69, 0xbe, 0x0f, 0xac, 0x58, 0x40, |
220 | +0xe3, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x84, 0xfa, 0x46, 0x0e, 0xe8, 0xe0, | 218 | + 0x00, 0xe8, 0x0c, 0x0c, 0x00, 0xf2, 0x93, 0xdd, 0x1c, 0x00, 0x40, 0xe3, |
221 | +0x08, 0xde, 0x4a, 0x40, 0x84, 0xe0, 0xa5, 0x86, 0xa8, 0x7d, 0xfc, 0xef, 0x6b, | 219 | + 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x84, 0xfa, 0x46, 0x0e, 0xe8, 0xe0, |
222 | +0x80, 0x01, 0xbf, 0x28, 0x77, 0x0c, 0xef, 0x0b, 0x0e, 0x21, 0x78, 0x06, 0xc0, | 220 | + 0x08, 0xde, 0x4a, 0x40, 0x84, 0xe0, 0xa5, 0x86, 0xa8, 0x7d, 0xfc, 0xef, |
223 | +0x0b, 0xa5, 0xb5, 0x84, 0x06, 0x42, 0x98, 0xe1, 0x01, 0x81, 0x01, 0x42, 0x38, | 221 | + 0x6b, 0x80, 0x01, 0xbf, 0x28, 0x77, 0x0c, 0xef, 0x0b, 0x0e, 0x21, 0x78, |
224 | +0xe0, 0x0c, 0xc4, 0x0e, 0x84, 0x46, 0x02, 0x84, 0xe0, 0x0c, 0x84, 0x11, 0x81, | 222 | + 0x06, 0xc0, 0x0b, 0xa5, 0xb5, 0x84, 0x06, 0x42, 0x98, 0xe1, 0x01, 0x81, |
225 | +0x21, 0x81, 0x31, 0x81, 0x41, 0x81, 0x51, 0x81, 0xc1, 0x81, 0x05, 0x83, 0x0c, | 223 | + 0x01, 0x42, 0x38, 0xe0, 0x0c, 0xc4, 0x0e, 0x84, 0x46, 0x02, 0x84, 0xe0, |
226 | +0x0c, 0x84, 0xf2, 0x93, 0xdd, 0x06, 0x40, 0x98, 0xe1, 0xc8, 0x80, 0x58, 0x82, | 224 | + 0x0c, 0x84, 0x11, 0x81, 0x21, 0x81, 0x31, 0x81, 0x41, 0x81, 0x51, 0x81, |
227 | +0x48, 0xc0, 0x38, 0xc2, 0x29, 0x00, 0x10, 0xe0, 0x19, 0x00, 0x14, 0xe0, 0x09, | 225 | + 0xc1, 0x81, 0x05, 0x83, 0x0c, 0x0c, 0x84, 0xf2, 0x93, 0xdd, 0x06, 0x40, |
228 | +0x00, 0x38, 0xe0, 0x5f, 0xb8, 0x5f, 0xa8, 0x5f, 0xa6, 0x5f, 0xa4, 0x5f, 0xa2, | 226 | + 0x98, 0xe1, 0xc8, 0x80, 0x58, 0x82, 0x48, 0xc0, 0x38, 0xc2, 0x29, 0x00, |
229 | +0x5f, 0xa0, 0x56, 0x41, 0x98, 0xe1, 0x18, 0x82, 0x28, 0x80, 0x38, 0xc0, 0x5f, | 227 | + 0x10, 0xe0, 0x19, 0x00, 0x14, 0xe0, 0x09, 0x00, 0x38, 0xe0, 0x5f, 0xb8, |
230 | +0xa2, 0x19, 0x00, 0x20, 0xf8, 0x5f, 0xa4, 0x28, 0xc2, 0x5f, 0xa6, 0x39, 0x00, | 228 | + 0x5f, 0xa8, 0x5f, 0xa6, 0x5f, 0xa4, 0x5f, 0xa2, 0x5f, 0xa0, 0x56, 0x41, |
231 | +0x10, 0xe0, 0x5f, 0xa2, 0x19, 0x00, 0x14, 0xe0, 0x5f, 0xa4, 0x29, 0x00, 0x18, | 229 | + 0x98, 0xe1, 0x18, 0x82, 0x28, 0x80, 0x38, 0xc0, 0x5f, 0xa2, 0x19, 0x00, |
232 | +0xe0, 0x5f, 0xa6, 0x39, 0x00, 0x40, 0xe0, 0x5f, 0xa2, 0x19, 0x00, 0x44, 0xe0, | 230 | + 0x20, 0xf8, 0x5f, 0xa4, 0x28, 0xc2, 0x5f, 0xa6, 0x39, 0x00, 0x10, 0xe0, |
233 | +0x5f, 0xa4, 0x29, 0x00, 0x1c, 0xe0, 0x5f, 0xa6, 0x39, 0x00, 0x38, 0xe0, 0x5f, | 231 | + 0x5f, 0xa2, 0x19, 0x00, 0x14, 0xe0, 0x5f, 0xa4, 0x29, 0x00, 0x18, 0xe0, |
234 | +0xa2, 0x19, 0x00, 0x20, 0xe0, 0x5f, 0xa4, 0x29, 0x00, 0x24, 0xe0, 0x5f, 0xa6, | 232 | + 0x5f, 0xa6, 0x39, 0x00, 0x40, 0xe0, 0x5f, 0xa2, 0x19, 0x00, 0x44, 0xe0, |
235 | +0x39, 0x00, 0x28, 0xe0, 0x5f, 0xa2, 0x19, 0x00, 0x2c, 0xe0, 0x5f, 0xa4, 0x29, | 233 | + 0x5f, 0xa4, 0x29, 0x00, 0x1c, 0xe0, 0x5f, 0xa6, 0x39, 0x00, 0x38, 0xe0, |
236 | +0x00, 0x30, 0xe0, 0x5f, 0xa6, 0x09, 0x00, 0x34, 0xe0, 0x5f, 0xa2, 0x5f, 0xa4, | 234 | + 0x5f, 0xa2, 0x19, 0x00, 0x20, 0xe0, 0x5f, 0xa4, 0x29, 0x00, 0x24, 0xe0, |
237 | +0x5f, 0xa0, 0x4a, 0x0a, 0xfc, 0xfb, 0xe5, 0x82, 0x08, 0xde, 0x4a, 0x40, 0x88, | 235 | + 0x5f, 0xa6, 0x39, 0x00, 0x28, 0xe0, 0x5f, 0xa2, 0x19, 0x00, 0x2c, 0xe0, |
238 | +0xe0, 0xf6, 0x40, 0x00, 0xe0, 0x01, 0x4e, 0x99, 0x78, 0x0a, 0xc0, 0x85, 0x80, | 236 | + 0x5f, 0xa4, 0x29, 0x00, 0x30, 0xe0, 0x5f, 0xa6, 0x09, 0x00, 0x34, 0xe0, |
239 | +0x98, 0x40, 0x00, 0xe8, 0x35, 0x81, 0xa8, 0x40, 0x00, 0xe8, 0x0b, 0x8c, 0x0c, | 237 | + 0x5f, 0xa2, 0x5f, 0xa4, 0x5f, 0xa0, 0x4a, 0x0a, 0xfc, 0xfb, 0xe5, 0x82, |
240 | +0x0c, 0x84, 0xf2, 0xd5, 0xed, 0x83, 0xc1, 0x13, 0xc5, 0x93, 0xdd, 0xc3, 0xc1, | 238 | + 0x08, 0xde, 0x4a, 0x40, 0x88, 0xe0, 0xf6, 0x40, 0x00, 0xe0, 0x01, 0x4e, |
241 | +0x83, 0xc1, 0x13, 0xc3, 0x93, 0xdd, 0xc3, 0xc1, 0x4c, 0x04, 0x04, 0xfa, 0xc6, | 239 | + 0x99, 0x78, 0x0a, 0xc0, 0x85, 0x80, 0x98, 0x40, 0x00, 0xe8, 0x35, 0x81, |
242 | +0x0f, 0x94, 0xe0, 0x19, 0x0e, 0xc9, 0x65, 0x01, 0xc0, 0x28, 0xde, 0x0a, 0x42, | 240 | + 0xa8, 0x40, 0x00, 0xe8, 0x0b, 0x8c, 0x0c, 0x0c, 0x84, 0xf2, 0xd5, 0xed, |
243 | +0x80, 0xe0, 0x24, 0x02, 0x00, 0xfc, 0x16, 0xde, 0xa5, 0x8a, 0x19, 0x00, 0xb8, | 241 | + 0x83, 0xc1, 0x13, 0xc5, 0x93, 0xdd, 0xc3, 0xc1, 0x83, 0xc1, 0x13, 0xc3, |
244 | +0xe0, 0x10, 0x02, 0x0c, 0xec, 0x1d, 0xe6, 0x14, 0x02, 0x88, 0x80, 0x4e, 0x04, | 242 | + 0x93, 0xdd, 0xc3, 0xc1, 0x4c, 0x04, 0x04, 0xfa, 0xc6, 0x0f, 0x94, 0xe0, |
245 | +0x01, 0x00, 0x10, 0x80, 0x25, 0x02, 0x08, 0x9c, 0x86, 0x02, 0x00, 0x80, 0x08, | 243 | + 0x19, 0x0e, 0xc9, 0x65, 0x01, 0xc0, 0x28, 0xde, 0x0a, 0x42, 0x80, 0xe0, |
246 | +0x44, 0x00, 0x98, 0x55, 0x81, 0x11, 0x85, 0x45, 0x81, 0x11, 0x89, 0x25, 0x81, | 244 | + 0x24, 0x02, 0x00, 0xfc, 0x16, 0xde, 0xa5, 0x8a, 0x19, 0x00, 0xb8, 0xe0, |
247 | +0x11, 0x83, 0x2b, 0x00, 0x24, 0xe0, 0x64, 0xc2, 0x0b, 0x84, 0x08, 0x51, 0x00, | 245 | + 0x10, 0x02, 0x0c, 0xec, 0x1d, 0xe6, 0x14, 0x02, 0x88, 0x80, 0x4e, 0x04, |
248 | +0xef, 0x2b, 0x80, 0x01, 0x83, 0x1b, 0x8c, 0x38, 0x7d, 0x5c, 0xef, 0x18, 0xde, | 246 | + 0x01, 0x00, 0x10, 0x80, 0x25, 0x02, 0x08, 0x9c, 0x86, 0x02, 0x00, 0x80, |
249 | +0x0b, 0xa1, 0x25, 0x82, 0x0b, 0x0e, 0x88, 0xf9, 0x0a, 0x00, 0x00, 0xe8, 0x10, | 247 | + 0x08, 0x44, 0x00, 0x98, 0x55, 0x81, 0x11, 0x85, 0x45, 0x81, 0x11, 0x89, |
250 | +0x42, 0x04, 0x9c, 0x11, 0x4e, 0x0c, 0x80, 0x10, 0x40, 0x04, 0xf0, 0x4e, 0x05, | 248 | + 0x25, 0x81, 0x11, 0x83, 0x2b, 0x00, 0x24, 0xe0, 0x64, 0xc2, 0x0b, 0x84, |
251 | +0x01, 0x60, 0x10, 0xc0, 0x06, 0x88, 0x10, 0x40, 0xf8, 0xf3, 0x06, 0xde, 0x4c, | 249 | + 0x08, 0x51, 0x00, 0xef, 0x2b, 0x80, 0x01, 0x83, 0x1b, 0x8c, 0x38, 0x7d, |
252 | +0x0c, 0x04, 0xf2, 0x93, 0xdd, 0x0c, 0x04, 0x1c, 0xfe, 0xf6, 0x0f, 0x94, 0xe0, | 250 | + 0x5c, 0xef, 0x18, 0xde, 0x0b, 0xa1, 0x25, 0x82, 0x0b, 0x0e, 0x88, 0xf9, |
253 | +0x38, 0x9c, 0x46, 0x51, 0xfc, 0xe0, 0x46, 0x49, 0x38, 0xe2, 0x30, 0x46, 0xf8, | 251 | + 0x0a, 0x00, 0x00, 0xe8, 0x10, 0x42, 0x04, 0x9c, 0x11, 0x4e, 0x0c, 0x80, |
254 | +0xf3, 0x36, 0x9c, 0xc6, 0x46, 0x0c, 0xe1, 0x34, 0x8c, 0x94, 0xa0, 0x4e, 0xa0, | 252 | + 0x10, 0x40, 0x04, 0xf0, 0x4e, 0x05, 0x01, 0x60, 0x10, 0xc0, 0x06, 0x88, |
255 | +0x39, 0x06, 0x80, 0xe0, 0x4a, 0x46, 0x94, 0xe0, 0x05, 0x8c, 0x6a, 0x40, 0x80, | 253 | + 0x10, 0x40, 0xf8, 0xf3, 0x06, 0xde, 0x4c, 0x0c, 0x04, 0xf2, 0x93, 0xdd, |
256 | +0xe0, 0x2c, 0x0c, 0x00, 0xe2, 0x0b, 0x8c, 0xb8, 0x7c, 0x5c, 0xef, 0x0b, 0x8c, | 254 | + 0x0c, 0x04, 0x1c, 0xfe, 0xf6, 0x0f, 0x94, 0xe0, 0x38, 0x9c, 0x46, 0x51, |
257 | +0x9e, 0xa0, 0xf8, 0x40, 0x60, 0xef, 0x0b, 0xa1, 0x5a, 0x40, 0x80, 0xe0, 0x65, | 255 | + 0xfc, 0xe0, 0x46, 0x49, 0x38, 0xe2, 0x30, 0x46, 0xf8, 0xf3, 0x36, 0x9c, |
258 | +0x88, 0x28, 0x02, 0x01, 0x40, 0x00, 0x80, 0x2a, 0x42, 0x9c, 0xe1, 0x28, 0x49, | 256 | + 0xc6, 0x46, 0x0c, 0xe1, 0x34, 0x8c, 0x94, 0xa0, 0x4e, 0xa0, 0x39, 0x06, |
259 | +0x60, 0xef, 0x96, 0x4d, 0x9c, 0xe1, 0x01, 0x81, 0x06, 0x98, 0xd5, 0x81, 0x09, | 257 | + 0x80, 0xe0, 0x4a, 0x46, 0x94, 0xe0, 0x05, 0x8c, 0x6a, 0x40, 0x80, 0xe0, |
260 | +0x0e, 0xa1, 0x64, 0x01, 0xc0, 0x4a, 0x40, 0x88, 0xe0, 0x85, 0x80, 0xb8, 0x77, | 258 | + 0x2c, 0x0c, 0x00, 0xe2, 0x0b, 0x8c, 0xb8, 0x7c, 0x5c, 0xef, 0x0b, 0x8c, |
261 | +0xfc, 0xef, 0x35, 0x81, 0xc8, 0x77, 0xfc, 0xef, 0x08, 0x98, 0x4a, 0x00, 0xfc, | 259 | + 0x9e, 0xa0, 0xf8, 0x40, 0x60, 0xef, 0x0b, 0xa1, 0x5a, 0x40, 0x80, 0xe0, |
262 | +0xfb, 0x55, 0xfc, 0xe8, 0x4a, 0x60, 0xef, 0x1a, 0x44, 0x9c, 0xe1, 0x35, 0x81, | 260 | + 0x65, 0x88, 0x28, 0x02, 0x01, 0x40, 0x00, 0x80, 0x2a, 0x42, 0x9c, 0xe1, |
263 | +0x1a, 0x4e, 0x9c, 0xe9, 0x1c, 0x00, 0x00, 0xe2, 0x0c, 0x0c, 0x1c, 0xf6, 0x93, | 261 | + 0x28, 0x49, 0x60, 0xef, 0x96, 0x4d, 0x9c, 0xe1, 0x01, 0x81, 0x06, 0x98, |
264 | +0xdd, 0x0d, 0xc3, 0x1a, 0x41, 0x08, 0xe4, 0x0a, 0x40, 0x84, 0xe1, 0x0c, 0x00, | 262 | + 0xd5, 0x81, 0x09, 0x0e, 0xa1, 0x64, 0x01, 0xc0, 0x4a, 0x40, 0x88, 0xe0, |
265 | +0x00, 0xe2, 0x93, 0xdd, 0x4c, 0x04, 0x1c, 0xfa, 0x86, 0x52, 0xec, 0xe1, 0x08, | 263 | + 0x85, 0x80, 0xb8, 0x77, 0xfc, 0xef, 0x35, 0x81, 0xc8, 0x77, 0xfc, 0xef, |
266 | +0xa6, 0x65, 0x12, 0x24, 0xf8, 0x0e, 0x02, 0x99, 0x7a, 0x00, 0xc0, 0x00, 0x40, | 264 | + 0x08, 0x98, 0x4a, 0x00, 0xfc, 0xfb, 0x55, 0xfc, 0xe8, 0x4a, 0x60, 0xef, |
267 | +0xa0, 0xf3, 0x06, 0xa6, 0x0b, 0x8c, 0x08, 0x49, 0x00, 0xef, 0x85, 0x12, 0x28, | 265 | + 0x1a, 0x44, 0x9c, 0xe1, 0x35, 0x81, 0x1a, 0x4e, 0x9c, 0xe9, 0x1c, 0x00, |
268 | +0xf8, 0x02, 0x02, 0xfc, 0xed, 0xf6, 0x47, 0xfd, 0x6f, 0xe0, 0xff, 0x04, 0xe2, | 266 | + 0x00, 0xe2, 0x0c, 0x0c, 0x1c, 0xf6, 0x93, 0xdd, 0x0d, 0xc3, 0x1a, 0x41, |
269 | +0x14, 0x04, 0xc0, 0xe0, 0x0f, 0x86, 0x2f, 0xa0, 0x0b, 0x8c, 0x2e, 0xe2, 0x08, | 267 | + 0x08, 0xe4, 0x0a, 0x40, 0x84, 0xe1, 0x0c, 0x00, 0x00, 0xe2, 0x93, 0xdd, |
270 | +0x48, 0x00, 0xef, 0x86, 0x02, 0x84, 0xfe, 0x0e, 0x05, 0x09, 0x7d, 0x00, 0xc0, | 268 | + 0x4c, 0x04, 0x1c, 0xfa, 0x86, 0x52, 0xec, 0xe1, 0x08, 0xa6, 0x65, 0x12, |
271 | +0x05, 0x52, 0x08, 0xf8, 0x18, 0x7d, 0xfc, 0xef, 0x4a, 0x40, 0x80, 0xe0, 0x09, | 269 | + 0x24, 0xf8, 0x0e, 0x02, 0x99, 0x7a, 0x00, 0xc0, 0x00, 0x40, 0xa0, 0xf3, |
272 | +0x12, 0x04, 0xc0, 0x65, 0x12, 0x20, 0xf8, 0x00, 0x40, 0x40, 0xdc, 0x01, 0x52, | 270 | + 0x06, 0xa6, 0x0b, 0x8c, 0x08, 0x49, 0x00, 0xef, 0x85, 0x12, 0x28, 0xf8, |
273 | +0x04, 0xc0, 0x0e, 0x00, 0x41, 0x78, 0xf5, 0xc5, 0x6d, 0xc0, 0xb5, 0x82, 0x05, | 271 | + 0x02, 0x02, 0xfc, 0xed, 0xf6, 0x47, 0xfd, 0x6f, 0xe0, 0xff, 0x04, 0xe2, |
274 | +0x10, 0x10, 0xe0, 0x11, 0xf1, 0x0f, 0x82, 0x05, 0x50, 0x10, 0xe0, 0x05, 0x10, | 272 | + 0x14, 0x04, 0xc0, 0xe0, 0x0f, 0x86, 0x2f, 0xa0, 0x0b, 0x8c, 0x2e, 0xe2, |
275 | +0x10, 0xe0, 0xfe, 0x02, 0xf0, 0xff, 0x0f, 0x82, 0x85, 0x83, 0x15, 0x10, 0x10, | 273 | + 0x08, 0x48, 0x00, 0xef, 0x86, 0x02, 0x84, 0xfe, 0x0e, 0x05, 0x09, 0x7d, |
276 | +0xe0, 0x16, 0x00, 0x91, 0x6e, 0x69, 0xcd, 0x21, 0xf1, 0x6d, 0xc1, 0x01, 0x83, | 274 | + 0x00, 0xc0, 0x05, 0x52, 0x08, 0xf8, 0x18, 0x7d, 0xfc, 0xef, 0x4a, 0x40, |
277 | +0x2f, 0x82, 0x26, 0x00, 0x00, 0x80, 0x2f, 0xa0, 0x25, 0x50, 0x10, 0xe0, 0x05, | 275 | + 0x80, 0xe0, 0x09, 0x12, 0x04, 0xc0, 0x65, 0x12, 0x20, 0xf8, 0x00, 0x40, |
278 | +0x10, 0x10, 0xe0, 0x11, 0xa1, 0xfe, 0x04, 0xf0, 0xff, 0x06, 0x42, 0x00, 0x80, | 276 | + 0x40, 0xdc, 0x01, 0x52, 0x04, 0xc0, 0x0e, 0x00, 0x41, 0x78, 0xf5, 0xc5, |
279 | +0x0f, 0x84, 0x0f, 0xa2, 0x05, 0x50, 0x10, 0xe0, 0x16, 0x00, 0x91, 0x6e, 0x69, | 277 | + 0x6d, 0xc0, 0xb5, 0x82, 0x05, 0x10, 0x10, 0xe0, 0x11, 0xf1, 0x0f, 0x82, |
280 | +0xcd, 0x6d, 0xc1, 0x71, 0x8d, 0x16, 0x00, 0x79, 0x61, 0x2d, 0xcb, 0x86, 0x0e, | 278 | + 0x05, 0x50, 0x10, 0xe0, 0x05, 0x10, 0x10, 0xe0, 0xfe, 0x02, 0xf0, 0xff, |
281 | +0x00, 0x80, 0x6d, 0xc1, 0x56, 0x0e, 0x00, 0xc0, 0x0b, 0x8c, 0x1b, 0x8e, 0x71, | 279 | + 0x0f, 0x82, 0x85, 0x83, 0x15, 0x10, 0x10, 0xe0, 0x16, 0x00, 0x91, 0x6e, |
282 | +0x52, 0x0c, 0xf8, 0x08, 0x43, 0x00, 0xef, 0x05, 0x52, 0x14, 0xf8, 0x15, 0x10, | 280 | + 0x69, 0xcd, 0x21, 0xf1, 0x6d, 0xc1, 0x01, 0x83, 0x2f, 0x82, 0x26, 0x00, |
283 | +0x28, 0xe0, 0x70, 0x04, 0x04, 0xec, 0x31, 0xe1, 0x29, 0x9e, 0x1f, 0x86, 0x1f, | 281 | + 0x00, 0x80, 0x2f, 0xa0, 0x25, 0x50, 0x10, 0xe0, 0x05, 0x10, 0x10, 0xe0, |
284 | +0xa4, 0x15, 0x50, 0x28, 0xe0, 0x86, 0x42, 0x3c, 0xe0, 0x0e, 0x04, 0x9d, 0x64, | 282 | + 0x11, 0xa1, 0xfe, 0x04, 0xf0, 0xff, 0x06, 0x42, 0x00, 0x80, 0x0f, 0x84, |
285 | +0x9b, 0xc2, 0x05, 0x52, 0x1c, 0xf8, 0x78, 0xa6, 0x48, 0x77, 0xfc, 0xef, 0x4a, | 283 | + 0x0f, 0xa2, 0x05, 0x50, 0x10, 0xe0, 0x16, 0x00, 0x91, 0x6e, 0x69, 0xcd, |
286 | +0x40, 0x80, 0xe0, 0x70, 0x4e, 0x10, 0xdc, 0x1e, 0x00, 0x81, 0x70, 0xeb, 0xcb, | 284 | + 0x6d, 0xc1, 0x71, 0x8d, 0x16, 0x00, 0x79, 0x61, 0x2d, 0xcb, 0x86, 0x0e, |
287 | +0x70, 0x4e, 0xec, 0x93, 0x6d, 0xc1, 0x11, 0x85, 0x36, 0x02, 0x00, 0x80, 0x76, | 285 | + 0x00, 0x80, 0x6d, 0xc1, 0x56, 0x0e, 0x00, 0xc0, 0x0b, 0x8c, 0x1b, 0x8e, |
288 | +0xa6, 0x11, 0x52, 0x10, 0xf8, 0x05, 0x10, 0x40, 0xe0, 0xfe, 0x47, 0x0c, 0xff, | 286 | + 0x71, 0x52, 0x0c, 0xf8, 0x08, 0x43, 0x00, 0xef, 0x05, 0x52, 0x14, 0xf8, |
289 | +0x14, 0x04, 0xa0, 0xe0, 0x0f, 0x86, 0x0f, 0xa4, 0x05, 0x50, 0x40, 0xe0, 0x05, | 287 | + 0x15, 0x10, 0x28, 0xe0, 0x70, 0x04, 0x04, 0xec, 0x31, 0xe1, 0x29, 0x9e, |
290 | +0x10, 0x28, 0xe0, 0xfe, 0x47, 0xfd, 0x7f, 0xe3, 0xff, 0x14, 0x04, 0xd0, 0xe0, | 288 | + 0x1f, 0x86, 0x1f, 0xa4, 0x15, 0x50, 0x28, 0xe0, 0x86, 0x42, 0x3c, 0xe0, |
291 | +0x0f, 0x86, 0x2f, 0xa0, 0x20, 0x00, 0x01, 0x6c, 0x00, 0xd0, 0x05, 0x50, 0x28, | 289 | + 0x0e, 0x04, 0x9d, 0x64, 0x9b, 0xc2, 0x05, 0x52, 0x1c, 0xf8, 0x78, 0xa6, |
292 | +0xe0, 0x0b, 0x8c, 0xf8, 0x7e, 0xfc, 0xee, 0x0e, 0x03, 0x59, 0x78, 0xf5, 0xc5, | 290 | + 0x48, 0x77, 0xfc, 0xef, 0x4a, 0x40, 0x80, 0xe0, 0x70, 0x4e, 0x10, 0xdc, |
293 | +0x0d, 0xc2, 0x05, 0x52, 0x0c, 0xf8, 0x08, 0xa6, 0x46, 0x42, 0xb4, 0xe0, 0x18, | 291 | + 0x1e, 0x00, 0x81, 0x70, 0xeb, 0xcb, 0x70, 0x4e, 0xec, 0x93, 0x6d, 0xc1, |
294 | +0x84, 0x00, 0x40, 0xf4, 0x93, 0x00, 0x40, 0x08, 0xdc, 0x1b, 0xa1, 0x06, 0xa6, | 292 | + 0x11, 0x85, 0x36, 0x02, 0x00, 0x80, 0x76, 0xa6, 0x11, 0x52, 0x10, 0xf8, |
295 | +0x05, 0x10, 0x40, 0x80, 0x04, 0x00, 0x50, 0x9c, 0x65, 0x8a, 0x05, 0x10, 0x44, | 293 | + 0x05, 0x10, 0x40, 0xe0, 0xfe, 0x47, 0x0c, 0xff, 0x14, 0x04, 0xa0, 0xe0, |
296 | +0xe0, 0xf6, 0x43, 0xfd, 0x6f, 0x00, 0xf8, 0x0f, 0x82, 0x06, 0x02, 0x01, 0x60, | 294 | + 0x0f, 0x86, 0x0f, 0xa4, 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x28, 0xe0, |
297 | +0x1e, 0xc0, 0x0f, 0xa2, 0x05, 0x50, 0x44, 0xe0, 0x05, 0x10, 0x44, 0xe0, 0x0e, | 295 | + 0xfe, 0x47, 0xfd, 0x7f, 0xe3, 0xff, 0x14, 0x04, 0xd0, 0xe0, 0x0f, 0x86, |
298 | +0x02, 0x00, 0xf8, 0x0f, 0x82, 0x09, 0xf6, 0x05, 0x50, 0x44, 0xe0, 0x05, 0x10, | 296 | + 0x2f, 0xa0, 0x20, 0x00, 0x01, 0x6c, 0x00, 0xd0, 0x05, 0x50, 0x28, 0xe0, |
299 | +0x40, 0xe0, 0x04, 0x00, 0x54, 0xfc, 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, | 297 | + 0x0b, 0x8c, 0xf8, 0x7e, 0xfc, 0xee, 0x0e, 0x03, 0x59, 0x78, 0xf5, 0xc5, |
300 | +0xe0, 0x04, 0x00, 0xcc, 0xfc, 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, 0xe0, | 298 | + 0x0d, 0xc2, 0x05, 0x52, 0x0c, 0xf8, 0x08, 0xa6, 0x46, 0x42, 0xb4, 0xe0, |
301 | +0x04, 0x00, 0x4c, 0xfc, 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, 0xe0, 0x04, | 299 | + 0x18, 0x84, 0x00, 0x40, 0xf4, 0x93, 0x00, 0x40, 0x08, 0xdc, 0x1b, 0xa1, |
302 | +0x00, 0xd0, 0xfc, 0x05, 0x50, 0x40, 0xe0, 0x4c, 0x0c, 0x1c, 0xf2, 0x93, 0xdd, | 300 | + 0x06, 0xa6, 0x05, 0x10, 0x40, 0x80, 0x04, 0x00, 0x50, 0x9c, 0x65, 0x8a, |
303 | +0xc3, 0xc1, 0xc6, 0x40, 0xfc, 0xe0, 0x04, 0x80, 0xc6, 0x44, 0x0c, 0xe1, 0x15, | 301 | + 0x05, 0x10, 0x44, 0xe0, 0xf6, 0x43, 0xfd, 0x6f, 0x00, 0xf8, 0x0f, 0x82, |
304 | +0x04, 0x0c, 0xf8, 0x0a, 0x80, 0x06, 0x07, 0x04, 0xe0, 0x03, 0x42, 0x48, 0xe1, | 302 | + 0x06, 0x02, 0x01, 0x60, 0x1e, 0xc0, 0x0f, 0xa2, 0x05, 0x50, 0x44, 0xe0, |
305 | +0x46, 0x02, 0x40, 0xe2, 0x08, 0xc6, 0x44, 0x88, 0x06, 0x46, 0x0e, 0xe0, 0x86, | 303 | + 0x05, 0x10, 0x44, 0xe0, 0x0e, 0x02, 0x00, 0xf8, 0x0f, 0x82, 0x09, 0xf6, |
306 | +0x01, 0x84, 0xe0, 0x33, 0x80, 0x39, 0x06, 0xd8, 0xef, 0x0a, 0x46, 0x80, 0xe0, | 304 | + 0x05, 0x50, 0x44, 0xe0, 0x05, 0x10, 0x40, 0xe0, 0x04, 0x00, 0x54, 0xfc, |
307 | +0x31, 0xbf, 0x06, 0x06, 0x00, 0xc0, 0x31, 0x48, 0x60, 0xe0, 0x34, 0x88, 0x49, | 305 | + 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, 0xe0, 0x04, 0x00, 0xcc, 0xfc, |
308 | +0x06, 0x40, 0xe1, 0x40, 0x48, 0x7c, 0xf3, 0x41, 0x46, 0x40, 0xe1, 0x24, 0x8a, | 306 | + 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, 0xe0, 0x04, 0x00, 0x4c, 0xfc, |
309 | +0x39, 0x04, 0x10, 0xe0, 0x39, 0xc2, 0x31, 0x44, 0x10, 0xe0, 0x14, 0xc4, 0x1b, | 307 | + 0x05, 0x50, 0x40, 0xe0, 0x05, 0x10, 0x40, 0xe0, 0x04, 0x00, 0xd0, 0xfc, |
310 | +0xa5, 0x11, 0x83, 0x11, 0x40, 0x25, 0x6a, 0x01, 0xc0, 0x08, 0x5c, 0x00, 0xda, | 308 | + 0x05, 0x50, 0x40, 0xe0, 0x4c, 0x0c, 0x1c, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, |
311 | +0x15, 0x00, 0xcc, 0xe0, 0x25, 0x00, 0xf8, 0xe0, 0x1b, 0x85, 0x08, 0x5c, 0x00, | 309 | + 0xc6, 0x40, 0xfc, 0xe0, 0x04, 0x80, 0xc6, 0x44, 0x0c, 0xe1, 0x15, 0x04, |
312 | +0x9a, 0x4e, 0x03, 0x01, 0x60, 0x10, 0xc0, 0x29, 0x00, 0x1c, 0xe4, 0x18, 0x84, | 310 | + 0x0c, 0xf8, 0x0a, 0x80, 0x06, 0x07, 0x04, 0xe0, 0x03, 0x42, 0x48, 0xe1, |
313 | +0x20, 0x44, 0xf8, 0xf3, 0x2f, 0xa2, 0x21, 0x40, 0x1c, 0xe4, 0x93, 0xdd, 0x0c, | 311 | + 0x46, 0x02, 0x40, 0xe2, 0x08, 0xc6, 0x44, 0x88, 0x06, 0x46, 0x0e, 0xe0, |
314 | +0x00, 0x80, 0xfa, 0x15, 0x00, 0x3c, 0xe0, 0x21, 0x81, 0x31, 0x85, 0x21, 0x42, | 312 | + 0x86, 0x01, 0x84, 0xe0, 0x33, 0x80, 0x39, 0x06, 0xd8, 0xef, 0x0a, 0x46, |
315 | +0x60, 0xe0, 0x15, 0x00, 0x44, 0xe0, 0x31, 0x42, 0x40, 0xe1, 0x15, 0x00, 0x34, | 313 | + 0x80, 0xe0, 0x31, 0xbf, 0x06, 0x06, 0x00, 0xc0, 0x31, 0x48, 0x60, 0xe0, |
316 | +0xe0, 0x21, 0x42, 0x20, 0xe0, 0x15, 0x00, 0x34, 0xe0, 0xd6, 0x04, 0x10, 0xe0, | 314 | + 0x34, 0x88, 0x49, 0x06, 0x40, 0xe1, 0x40, 0x48, 0x7c, 0xf3, 0x41, 0x46, |
317 | +0x23, 0x42, 0x30, 0xe0, 0x15, 0x00, 0x34, 0xe0, 0x86, 0x44, 0x04, 0xe0, 0x23, | 315 | + 0x40, 0xe1, 0x24, 0x8a, 0x39, 0x04, 0x10, 0xe0, 0x39, 0xc2, 0x31, 0x44, |
318 | +0x42, 0x38, 0xe0, 0x05, 0x00, 0x30, 0xe0, 0xc6, 0x02, 0x08, 0xe0, 0x13, 0x40, | 316 | + 0x10, 0xe0, 0x14, 0xc4, 0x1b, 0xa5, 0x11, 0x83, 0x11, 0x40, 0x25, 0x6a, |
319 | +0x10, 0xe3, 0xe8, 0x56, 0x40, 0xef, 0x06, 0x40, 0x0c, 0xe1, 0x04, 0x80, 0x06, | 317 | + 0x01, 0xc0, 0x08, 0x5c, 0x00, 0xda, 0x15, 0x00, 0xcc, 0xe0, 0x25, 0x00, |
320 | +0x02, 0x94, 0xe0, 0x2b, 0x02, 0xc4, 0xea, 0x3b, 0x00, 0x78, 0xe2, 0x20, 0x44, | 318 | + 0xf8, 0xe0, 0x1b, 0x85, 0x08, 0x5c, 0x00, 0x9a, 0x4e, 0x03, 0x01, 0x60, |
321 | +0xfd, 0x73, 0x07, 0xc0, 0x30, 0x46, 0x01, 0x70, 0xf8, 0xc0, 0x3f, 0xa4, 0x33, | 319 | + 0x10, 0xc0, 0x29, 0x00, 0x1c, 0xe4, 0x18, 0x84, 0x20, 0x44, 0xf8, 0xf3, |
322 | +0x40, 0x78, 0xe2, 0x0a, 0x84, 0x0c, 0x08, 0x80, 0xf2, 0xf8, 0x3b, 0x3c, 0xff, | 320 | + 0x2f, 0xa2, 0x21, 0x40, 0x1c, 0xe4, 0x93, 0xdd, 0x0c, 0x00, 0x80, 0xfa, |
323 | +0xc3, 0xc1, 0x06, 0x40, 0x0c, 0xe1, 0x04, 0x80, 0x1b, 0x00, 0x40, 0xe4, 0x19, | 321 | + 0x15, 0x00, 0x3c, 0xe0, 0x21, 0x81, 0x31, 0x85, 0x21, 0x42, 0x60, 0xe0, |
324 | +0xc2, 0x13, 0x40, 0x40, 0xe4, 0x1b, 0x00, 0x40, 0xe4, 0x19, 0xc4, 0x13, 0x40, | 322 | + 0x15, 0x00, 0x44, 0xe0, 0x31, 0x42, 0x40, 0xe1, 0x15, 0x00, 0x34, 0xe0, |
325 | +0x40, 0xe4, 0x93, 0xdd, 0xc6, 0x43, 0xec, 0xe0, 0x46, 0x41, 0xfc, 0xe0, 0x24, | 323 | + 0x21, 0x42, 0x20, 0xe0, 0x15, 0x00, 0x34, 0xe0, 0xd6, 0x04, 0x10, 0xe0, |
326 | +0x84, 0x04, 0x80, 0x31, 0x81, 0x4a, 0x44, 0x80, 0xe0, 0x86, 0x44, 0x0c, 0xe1, | 324 | + 0x23, 0x42, 0x30, 0xe0, 0x15, 0x00, 0x34, 0xe0, 0x86, 0x44, 0x04, 0xe0, |
327 | +0x09, 0x00, 0x6c, 0xe0, 0xc4, 0x8a, 0x8e, 0x47, 0xfc, 0x9f, 0x01, 0x42, 0x51, | 325 | + 0x23, 0x42, 0x38, 0xe0, 0x05, 0x00, 0x30, 0xe0, 0xc6, 0x02, 0x08, 0xe0, |
328 | +0x78, 0x0c, 0xc0, 0x31, 0x58, 0x90, 0xe0, 0x34, 0x8a, 0x41, 0xbf, 0x06, 0x08, | 326 | + 0x13, 0x40, 0x10, 0xe3, 0xe8, 0x56, 0x40, 0xef, 0x06, 0x40, 0x0c, 0xe1, |
329 | +0x00, 0xc0, 0x41, 0x46, 0xa0, 0xe0, 0x34, 0x8a, 0x51, 0x81, 0xf6, 0x0b, 0x00, | 327 | + 0x04, 0x80, 0x06, 0x02, 0x94, 0xe0, 0x2b, 0x02, 0xc4, 0xea, 0x3b, 0x00, |
330 | +0xc0, 0x51, 0x46, 0xd0, 0xe0, 0x34, 0x8a, 0x01, 0xbf, 0x51, 0x46, 0xe0, 0xe0, | 328 | + 0x78, 0xe2, 0x20, 0x44, 0xfd, 0x73, 0x07, 0xc0, 0x30, 0x46, 0x01, 0x70, |
331 | +0x44, 0x84, 0x0a, 0x48, 0x84, 0xe0, 0x75, 0x86, 0x54, 0xca, 0x49, 0x88, 0x44, | 329 | + 0xf8, 0xc0, 0x3f, 0xa4, 0x33, 0x40, 0x78, 0xe2, 0x0a, 0x84, 0x0c, 0x08, |
332 | +0x06, 0x88, 0xe1, 0x36, 0x94, 0x4a, 0x46, 0x80, 0xe0, 0x34, 0xca, 0x47, 0xc6, | 330 | + 0x80, 0xf2, 0xf8, 0x3b, 0x3c, 0xff, 0xc3, 0xc1, 0x06, 0x40, 0x0c, 0xe1, |
333 | +0x11, 0x8d, 0x41, 0x46, 0xd0, 0xe0, 0x34, 0x88, 0x76, 0x02, 0x00, 0xc0, 0x06, | 331 | + 0x04, 0x80, 0x1b, 0x00, 0x40, 0xe4, 0x19, 0xc2, 0x13, 0x40, 0x40, 0xe4, |
334 | +0x00, 0x00, 0xc0, 0x16, 0x8c, 0x14, 0x88, 0x01, 0x42, 0xc0, 0xe1, 0x01, 0x42, | 332 | + 0x1b, 0x00, 0x40, 0xe4, 0x19, 0xc4, 0x13, 0x40, 0x40, 0xe4, 0x93, 0xdd, |
335 | +0xe0, 0xe1, 0x01, 0x42, 0xf0, 0xe1, 0x93, 0xdd, 0x34, 0xca, 0x41, 0x85, 0x46, | 333 | + 0xc6, 0x43, 0xec, 0xe0, 0x46, 0x41, 0xfc, 0xe0, 0x24, 0x84, 0x04, 0x80, |
336 | +0x8c, 0x34, 0xca, 0x06, 0x48, 0x00, 0xe0, 0x41, 0x46, 0xd0, 0xe0, 0x34, 0x88, | 334 | + 0x31, 0x81, 0x4a, 0x44, 0x80, 0xe0, 0x86, 0x44, 0x0c, 0xe1, 0x09, 0x00, |
337 | +0x41, 0x83, 0x46, 0x8c, 0x34, 0x88, 0x01, 0x46, 0xc0, 0xe1, 0x01, 0x46, 0xe0, | 335 | + 0x6c, 0xe0, 0xc4, 0x8a, 0x8e, 0x47, 0xfc, 0x9f, 0x01, 0x42, 0x51, 0x78, |
338 | +0xe1, 0x01, 0x46, 0xf0, 0xe1, 0x09, 0x02, 0x20, 0xe0, 0x14, 0xca, 0x03, 0x42, | 336 | + 0x0c, 0xc0, 0x31, 0x58, 0x90, 0xe0, 0x34, 0x8a, 0x41, 0xbf, 0x06, 0x08, |
339 | +0x58, 0xe0, 0x93, 0xdd, 0xc3, 0xc1, 0x4c, 0x04, 0x04, 0xfa, 0x46, 0x4e, 0x08, | 337 | + 0x00, 0xc0, 0x41, 0x46, 0xa0, 0xe0, 0x34, 0x8a, 0x51, 0x81, 0xf6, 0x0b, |
340 | +0xe1, 0x06, 0x4c, 0x0c, 0xe1, 0x0a, 0x9e, 0x14, 0x98, 0x05, 0x42, 0x44, 0xe0, | 338 | + 0x00, 0xc0, 0x51, 0x46, 0xd0, 0xe0, 0x34, 0x8a, 0x01, 0xbf, 0x51, 0x46, |
341 | +0x10, 0x00, 0xe1, 0x65, 0x03, 0xc0, 0x78, 0x41, 0x00, 0xe8, 0x08, 0x9c, 0x0b, | 339 | + 0xe0, 0xe0, 0x44, 0x84, 0x0a, 0x48, 0x84, 0xe0, 0x75, 0x86, 0x54, 0xca, |
342 | +0xa1, 0x04, 0x98, 0x06, 0x02, 0x10, 0x80, 0x13, 0x40, 0xf8, 0x86, 0x65, 0x82, | 340 | + 0x49, 0x88, 0x44, 0x06, 0x88, 0xe1, 0x36, 0x94, 0x4a, 0x46, 0x80, 0xe0, |
343 | +0x00, 0x00, 0xe1, 0x65, 0x03, 0xc0, 0xa8, 0x40, 0x00, 0xe8, 0x14, 0x98, 0x04, | 341 | + 0x34, 0xca, 0x47, 0xc6, 0x11, 0x8d, 0x41, 0x46, 0xd0, 0xe0, 0x34, 0x88, |
344 | +0x00, 0xa0, 0xfc, 0x03, 0x42, 0x00, 0xe7, 0x4c, 0x0c, 0x04, 0xf2, 0x93, 0xdd, | 342 | + 0x76, 0x02, 0x00, 0xc0, 0x06, 0x00, 0x00, 0xc0, 0x16, 0x8c, 0x14, 0x88, |
345 | +0x0a, 0x80, 0x93, 0xdd, 0x0c, 0x04, 0x00, 0xfa, 0x06, 0x02, 0xec, 0xe1, 0x64, | 343 | + 0x01, 0x42, 0xc0, 0xe1, 0x01, 0x42, 0xe0, 0xe1, 0x01, 0x42, 0xf0, 0xe1, |
346 | +0x84, 0x15, 0x0c, 0x2c, 0xe0, 0x14, 0x02, 0xa0, 0xfc, 0x15, 0x4c, 0x2c, 0xe0, | 344 | + 0x93, 0xdd, 0x34, 0xca, 0x41, 0x85, 0x46, 0x8c, 0x34, 0xca, 0x06, 0x48, |
347 | +0xd8, 0x40, 0x00, 0xe8, 0x14, 0xd8, 0x09, 0x82, 0x14, 0x02, 0x00, 0xfc, 0x1f, | 345 | + 0x00, 0xe0, 0x41, 0x46, 0xd0, 0xe0, 0x34, 0x88, 0x41, 0x83, 0x46, 0x8c, |
348 | +0xa0, 0x1e, 0xd8, 0x01, 0x85, 0x0c, 0x0c, 0x00, 0xf2, 0xe8, 0x32, 0x2c, 0xff, | 346 | + 0x34, 0x88, 0x01, 0x46, 0xc0, 0xe1, 0x01, 0x46, 0xe0, 0xe1, 0x01, 0x46, |
349 | +0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x00, 0xfa, 0x6b, 0x80, 0xf6, 0x01, 0x94, | 347 | + 0xf0, 0xe1, 0x09, 0x02, 0x20, 0xe0, 0x14, 0xca, 0x03, 0x42, 0x58, 0xe0, |
350 | +0xe0, 0x08, 0x80, 0x4a, 0x40, 0x80, 0xe0, 0x45, 0x86, 0x06, 0x40, 0x0c, 0xe1, | 348 | + 0x93, 0xdd, 0xc3, 0xc1, 0x4c, 0x04, 0x04, 0xfa, 0x46, 0x4e, 0x08, 0xe1, |
351 | +0x04, 0x80, 0xc6, 0x02, 0x40, 0xe2, 0x09, 0x00, 0xd0, 0xe0, 0x14, 0x84, 0x1b, | 349 | + 0x06, 0x4c, 0x0c, 0xe1, 0x0a, 0x9e, 0x14, 0x98, 0x05, 0x42, 0x44, 0xe0, |
352 | +0xa5, 0x15, 0x84, 0x07, 0xc5, 0x09, 0x82, 0x18, 0x41, 0x00, 0xe8, 0x46, 0x43, | 350 | + 0x10, 0x00, 0xe1, 0x65, 0x03, 0xc0, 0x78, 0x41, 0x00, 0xe8, 0x08, 0x9c, |
353 | +0xfc, 0xe0, 0x14, 0x84, 0x19, 0x02, 0xd8, 0xe0, 0x19, 0x82, 0x0b, 0x83, 0x16, | 351 | + 0x0b, 0xa1, 0x04, 0x98, 0x06, 0x02, 0x10, 0x80, 0x13, 0x40, 0xf8, 0x86, |
354 | +0x00, 0x00, 0xc0, 0x01, 0x4c, 0x00, 0xc0, 0x0c, 0x0c, 0x00, 0xf2, 0x93, 0xdd, | 352 | + 0x65, 0x82, 0x00, 0x00, 0xe1, 0x65, 0x03, 0xc0, 0xa8, 0x40, 0x00, 0xe8, |
355 | +0xc3, 0xc1, 0x4a, 0x00, 0x00, 0xe0, 0x0c, 0x00, 0x00, 0xe2, 0x93, 0xdd, 0xc3, | 353 | + 0x14, 0x98, 0x04, 0x00, 0xa0, 0xfc, 0x03, 0x42, 0x00, 0xe7, 0x4c, 0x0c, |
356 | +0xc1, 0x46, 0x40, 0x84, 0xe0, 0x11, 0xaf, 0x13, 0x40, 0x6c, 0xec, 0x11, 0xb3, | 354 | + 0x04, 0xf2, 0x93, 0xdd, 0x0a, 0x80, 0x93, 0xdd, 0x0c, 0x04, 0x00, 0xfa, |
357 | +0x13, 0x40, 0x70, 0xec, 0xc6, 0x43, 0xf0, 0xe0, 0x13, 0x40, 0xdc, 0xec, 0xc6, | 355 | + 0x06, 0x02, 0xec, 0xe1, 0x64, 0x84, 0x15, 0x0c, 0x2c, 0xe0, 0x14, 0x02, |
358 | +0x02, 0x24, 0xe0, 0x1c, 0x80, 0x93, 0xdd, 0x4c, 0x00, 0x00, 0xfa, 0xc8, 0x60, | 356 | + 0xa0, 0xfc, 0x15, 0x4c, 0x2c, 0xe0, 0xd8, 0x40, 0x00, 0xe8, 0x14, 0xd8, |
359 | +0x7c, 0xef, 0xe8, 0x61, 0x7c, 0xef, 0x28, 0x7e, 0x80, 0xef, 0xc6, 0x40, 0x98, | 357 | + 0x09, 0x82, 0x14, 0x02, 0x00, 0xfc, 0x1f, 0xa0, 0x1e, 0xd8, 0x01, 0x85, |
360 | +0xe1, 0x11, 0x83, 0x16, 0x80, 0x46, 0x01, 0x10, 0xe1, 0x11, 0x81, 0x16, 0x80, | 358 | + 0x0c, 0x0c, 0x00, 0xf2, 0xe8, 0x32, 0x2c, 0xff, 0x93, 0xdd, 0xc3, 0xc1, |
361 | +0x4c, 0x08, 0x00, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x0c, 0xfa, 0x6b, | 359 | + 0x0c, 0x04, 0x00, 0xfa, 0x6b, 0x80, 0xf6, 0x01, 0x94, 0xe0, 0x08, 0x80, |
362 | +0x80, 0x04, 0x98, 0x7b, 0x82, 0x56, 0x42, 0xb4, 0xe0, 0x88, 0x84, 0x05, 0x00, | 360 | + 0x4a, 0x40, 0x80, 0xe0, 0x45, 0x86, 0x06, 0x40, 0x0c, 0xe1, 0x04, 0x80, |
363 | +0x10, 0xe0, 0x09, 0x86, 0x0b, 0xa5, 0x46, 0x02, 0x00, 0x80, 0x06, 0x05, 0x00, | 361 | + 0xc6, 0x02, 0x40, 0xe2, 0x09, 0x00, 0xd0, 0xe0, 0x14, 0x84, 0x1b, 0xa5, |
364 | +0x80, 0x25, 0x82, 0x0b, 0xa3, 0xa5, 0x80, 0x0b, 0xa1, 0x06, 0x00, 0xf4, 0xef, | 362 | + 0x15, 0x84, 0x07, 0xc5, 0x09, 0x82, 0x18, 0x41, 0x00, 0xe8, 0x46, 0x43, |
365 | +0xd5, 0x84, 0x11, 0x85, 0x21, 0x91, 0x0b, 0x8e, 0x88, 0x74, 0x10, 0xef, 0x0b, | 363 | + 0xfc, 0xe0, 0x14, 0x84, 0x19, 0x02, 0xd8, 0xe0, 0x19, 0x82, 0x0b, 0x83, |
366 | +0xa1, 0xf5, 0x82, 0x0a, 0x9e, 0x1a, 0x9c, 0x24, 0x98, 0x07, 0xe0, 0x0f, 0xa2, | 364 | + 0x16, 0x00, 0x00, 0xc0, 0x01, 0x4c, 0x00, 0xc0, 0x0c, 0x0c, 0x00, 0xf2, |
367 | +0x0e, 0xca, 0x0a, 0xde, 0x1a, 0xdc, 0x24, 0x98, 0x03, 0xb0, 0x07, 0xe0, 0x0f, | 365 | + 0x93, 0xdd, 0xc3, 0xc1, 0x4a, 0x00, 0x00, 0xe0, 0x0c, 0x00, 0x00, 0xe2, |
368 | +0xa2, 0x0e, 0xc8, 0x01, 0x81, 0x0c, 0x0c, 0x0c, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, | 366 | + 0x93, 0xdd, 0xc3, 0xc1, 0x46, 0x40, 0x84, 0xe0, 0x11, 0xaf, 0x13, 0x40, |
369 | +0x0c, 0x04, 0x7c, 0xfa, 0x46, 0x42, 0x9c, 0xe0, 0x0b, 0x02, 0x04, 0xe3, 0xf0, | 367 | + 0x6c, 0xec, 0x11, 0xb3, 0x13, 0x40, 0x70, 0xec, 0xc6, 0x43, 0xf0, 0xe0, |
370 | +0x1e, 0x30, 0xec, 0x0b, 0xa3, 0x35, 0x96, 0x8e, 0x01, 0x01, 0x60, 0x10, 0xc0, | 368 | + 0x13, 0x40, 0xdc, 0xec, 0xc6, 0x02, 0x24, 0xe0, 0x1c, 0x80, 0x93, 0xdd, |
371 | +0x0e, 0xfc, 0xc6, 0x05, 0xd0, 0xe1, 0x0b, 0x82, 0x31, 0x81, 0x10, 0x16, 0x00, | 369 | + 0x4c, 0x00, 0x00, 0xfa, 0xc8, 0x60, 0x7c, 0xef, 0xe8, 0x61, 0x7c, 0xef, |
372 | +0xe5, 0x20, 0x10, 0x20, 0xe7, 0x0e, 0xbe, 0xb5, 0x85, 0x94, 0xfc, 0xa4, 0xbe, | 370 | + 0x28, 0x7e, 0x80, 0xef, 0xc6, 0x40, 0x98, 0xe1, 0x11, 0x83, 0x16, 0x80, |
373 | +0x82, 0x4c, 0x9c, 0xf0, 0x05, 0x0c, 0x40, 0xe0, 0x11, 0x89, 0x93, 0x8e, 0xa3, | 371 | + 0x46, 0x01, 0x10, 0xe1, 0x11, 0x81, 0x16, 0x80, 0x4c, 0x08, 0x00, 0xf2, |
374 | +0x8e, 0x58, 0x44, 0x00, 0xe8, 0x15, 0x0c, 0xc0, 0xf8, 0x04, 0x0c, 0x80, 0xfb, | 372 | + 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x0c, 0xfa, 0x6b, 0x80, 0x04, 0x98, |
375 | +0x0c, 0xed, 0x0b, 0x82, 0x1b, 0x8c, 0x48, 0x44, 0x00, 0xe8, 0x15, 0x10, 0x1c, | 373 | + 0x7b, 0x82, 0x56, 0x42, 0xb4, 0xe0, 0x88, 0x84, 0x05, 0x00, 0x10, 0xe0, |
376 | +0xfc, 0x0e, 0xa8, 0x0b, 0x82, 0x1b, 0x8c, 0xd8, 0x43, 0x00, 0xe8, 0x71, 0x88, | 374 | + 0x09, 0x86, 0x0b, 0xa5, 0x46, 0x02, 0x00, 0x80, 0x06, 0x05, 0x00, 0x80, |
377 | +0x0e, 0xa4, 0x0a, 0x0e, 0x40, 0xe0, 0x35, 0xf8, 0x04, 0xbe, 0x14, 0xbc, 0x81, | 375 | + 0x25, 0x82, 0x0b, 0xa3, 0xa5, 0x80, 0x0b, 0xa1, 0x06, 0x00, 0xf4, 0xef, |
378 | +0xa0, 0x03, 0x8e, 0x0e, 0xbe, 0x04, 0xfc, 0x11, 0x82, 0x3b, 0x82, 0x03, 0x8e, | 376 | + 0xd5, 0x84, 0x11, 0x85, 0x21, 0x91, 0x0b, 0x8e, 0x88, 0x74, 0x10, 0xef, |
379 | +0x0e, 0xfc, 0x3b, 0xa9, 0x06, 0x0e, 0x00, 0xc0, 0x35, 0x5e, 0x00, 0xc0, 0xd5, | 377 | + 0x0b, 0xa1, 0xf5, 0x82, 0x0a, 0x9e, 0x1a, 0x9c, 0x24, 0x98, 0x07, 0xe0, |
380 | +0xfa, 0xc6, 0x01, 0xd0, 0xe1, 0x7b, 0x80, 0x04, 0x9e, 0x11, 0x91, 0x98, 0x41, | 378 | + 0x0f, 0xa2, 0x0e, 0xca, 0x0a, 0xde, 0x1a, 0xdc, 0x24, 0x98, 0x03, 0xb0, |
381 | +0x00, 0xe8, 0x24, 0x9c, 0x46, 0x42, 0x9c, 0xe0, 0x6b, 0x82, 0x03, 0x4c, 0xc4, | 379 | + 0x07, 0xe0, 0x0f, 0xa2, 0x0e, 0xc8, 0x01, 0x81, 0x0c, 0x0c, 0x0c, 0xf2, |
382 | +0xe0, 0x11, 0x91, 0x0b, 0x84, 0xf8, 0x40, 0x00, 0xe8, 0x19, 0x0e, 0x20, 0xe5, | 380 | + 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x7c, 0xfa, 0x46, 0x42, 0x9c, 0xe0, |
383 | +0x03, 0x4c, 0xc0, 0xe0, 0x0b, 0x82, 0x08, 0x72, 0xfc, 0xef, 0x01, 0x4c, 0x24, | 381 | + 0x0b, 0x02, 0x04, 0xe3, 0xf0, 0x1e, 0x30, 0xec, 0x0b, 0xa3, 0x35, 0x96, |
384 | +0xf9, 0xf1, 0x98, 0x0c, 0x0c, 0x7c, 0xf2, 0x93, 0xdd, 0x4c, 0x00, 0x00, 0xfa, | 382 | + 0x8e, 0x01, 0x01, 0x60, 0x10, 0xc0, 0x0e, 0xfc, 0xc6, 0x05, 0xd0, 0xe1, |
385 | +0x48, 0x65, 0x2c, 0xef, 0x4c, 0x08, 0x00, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, | 383 | + 0x0b, 0x82, 0x31, 0x81, 0x10, 0x16, 0x00, 0xe5, 0x20, 0x10, 0x20, 0xe7, |
386 | +0x04, 0x00, 0xfa, 0x6b, 0x82, 0x78, 0x6e, 0xfc, 0xee, 0x46, 0x42, 0xec, 0xe0, | 384 | + 0x0e, 0xbe, 0xb5, 0x85, 0x94, 0xfc, 0xa4, 0xbe, 0x82, 0x4c, 0x9c, 0xf0, |
387 | +0x24, 0x84, 0x24, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x83, 0xf5, 0x82, 0x24, | 385 | + 0x05, 0x0c, 0x40, 0xe0, 0x11, 0x89, 0x93, 0x8e, 0xa3, 0x8e, 0x58, 0x44, |
388 | +0x02, 0xa0, 0xe1, 0x14, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x85, 0x15, 0x82, | 386 | + 0x00, 0xe8, 0x15, 0x0c, 0xc0, 0xf8, 0x04, 0x0c, 0x80, 0xfb, 0x0c, 0xed, |
389 | +0x27, 0xe1, 0x24, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x89, 0x86, 0x02, 0x00, | 387 | + 0x0b, 0x82, 0x1b, 0x8c, 0x48, 0x44, 0x00, 0xe8, 0x15, 0x10, 0x1c, 0xfc, |
390 | +0x80, 0x0c, 0x0c, 0x00, 0xf2, 0x18, 0x17, 0xfc, 0xfe, 0xc3, 0xc1, 0x0c, 0x04, | 388 | + 0x0e, 0xa8, 0x0b, 0x82, 0x1b, 0x8c, 0xd8, 0x43, 0x00, 0xe8, 0x71, 0x88, |
391 | +0x00, 0xfa, 0x06, 0x41, 0x8c, 0xe0, 0x1b, 0x00, 0xec, 0xe4, 0x1b, 0xa3, 0x75, | 389 | + 0x0e, 0xa4, 0x0a, 0x0e, 0x40, 0xe0, 0x35, 0xf8, 0x04, 0xbe, 0x14, 0xbc, |
392 | +0x84, 0x11, 0x81, 0x8e, 0x05, 0x01, 0x60, 0x10, 0xc0, 0x00, 0x06, 0xc0, 0xe5, | 390 | + 0x81, 0xa0, 0x03, 0x8e, 0x0e, 0xbe, 0x04, 0xfc, 0x11, 0x82, 0x3b, 0x82, |
393 | +0x95, 0x81, 0x44, 0x88, 0x1d, 0xee, 0x75, 0x80, 0x4e, 0xc1, 0x25, 0x81, 0x4e, | 391 | + 0x03, 0x8e, 0x0e, 0xfc, 0x3b, 0xa9, 0x06, 0x0e, 0x00, 0xc0, 0x35, 0x5e, |
394 | +0xcd, 0x21, 0x88, 0x11, 0x82, 0x0a, 0x02, 0x40, 0xe0, 0xd5, 0xfc, 0x56, 0x00, | 392 | + 0x00, 0xc0, 0xd5, 0xfa, 0xc6, 0x01, 0xd0, 0xe1, 0x7b, 0x80, 0x04, 0x9e, |
395 | +0x00, 0xe1, 0x18, 0x80, 0x1b, 0xa1, 0xc5, 0x84, 0x08, 0x82, 0x4a, 0x00, 0xfc, | 393 | + 0x11, 0x91, 0x98, 0x41, 0x00, 0xe8, 0x24, 0x9c, 0x46, 0x42, 0x9c, 0xe0, |
396 | +0xfb, 0x45, 0x84, 0x86, 0x4d, 0x84, 0xe1, 0x04, 0x98, 0x05, 0x00, 0x10, 0xe0, | 394 | + 0x6b, 0x82, 0x03, 0x4c, 0xc4, 0xe0, 0x11, 0x91, 0x0b, 0x84, 0xf8, 0x40, |
397 | +0x4a, 0x40, 0x80, 0xe0, 0x45, 0x82, 0x11, 0x81, 0x0b, 0x8c, 0x58, 0x76, 0x28, | 395 | + 0x00, 0xe8, 0x19, 0x0e, 0x20, 0xe5, 0x03, 0x4c, 0xc0, 0xe0, 0x0b, 0x82, |
398 | +0xef, 0x0b, 0x8c, 0x0c, 0x0c, 0x00, 0xf2, 0x88, 0x35, 0x28, 0xff, 0x0c, 0x0c, | 396 | + 0x08, 0x72, 0xfc, 0xef, 0x01, 0x4c, 0x24, 0xf9, 0xf1, 0x98, 0x0c, 0x0c, |
399 | +0x00, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, 0x46, 0x41, 0xfc, 0xe0, 0x04, 0x80, 0x09, | 397 | + 0x7c, 0xf2, 0x93, 0xdd, 0x4c, 0x00, 0x00, 0xfa, 0x48, 0x65, 0x2c, 0xef, |
400 | +0x00, 0x80, 0xe0, 0x09, 0x9e, 0x0b, 0xa3, 0x75, 0x82, 0x46, 0x41, 0x80, 0xe1, | 398 | + 0x4c, 0x08, 0x00, 0xf2, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x00, 0xfa, |
401 | +0x04, 0x80, 0xc6, 0x42, 0x8c, 0xe0, 0x04, 0xc2, 0x00, 0x40, 0x00, 0xf2, 0x07, | 399 | + 0x6b, 0x82, 0x78, 0x6e, 0xfc, 0xee, 0x46, 0x42, 0xec, 0xe0, 0x24, 0x84, |
402 | +0xcf, 0x06, 0x84, 0x06, 0x40, 0x84, 0xe0, 0x15, 0x00, 0x28, 0xe5, 0x1c, 0xc2, | 400 | + 0x24, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x83, 0xf5, 0x82, 0x24, 0x02, |
403 | +0x93, 0xdd, 0x0b, 0xa1, 0xc6, 0x00, 0xa0, 0xe1, 0x15, 0x00, 0x04, 0xf8, 0x05, | 401 | + 0xa0, 0xe1, 0x14, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x85, 0x15, 0x82, |
404 | +0x84, 0x21, 0x8b, 0x2c, 0x84, 0x14, 0x80, 0x2c, 0x84, 0x14, 0x82, 0x2c, 0x84, | 402 | + 0x27, 0xe1, 0x24, 0x02, 0x80, 0xfa, 0x1d, 0xcc, 0x11, 0x89, 0x86, 0x02, |
405 | +0x15, 0x00, 0x10, 0xe0, 0x21, 0xa1, 0x21, 0x42, 0x10, 0xe0, 0x05, 0x00, 0x14, | 403 | + 0x00, 0x80, 0x0c, 0x0c, 0x00, 0xf2, 0x18, 0x17, 0xfc, 0xfe, 0xc3, 0xc1, |
406 | +0xe0, 0x01, 0x88, 0x75, 0x83, 0x21, 0x85, 0x2c, 0x84, 0x14, 0x80, 0x06, 0x46, | 404 | + 0x0c, 0x04, 0x00, 0xfa, 0x06, 0x41, 0x8c, 0xe0, 0x1b, 0x00, 0xec, 0xe4, |
407 | +0x00, 0xe0, 0x2c, 0x84, 0x14, 0x82, 0x2c, 0x84, 0x14, 0xc0, 0x21, 0xa1, 0x21, | 405 | + 0x1b, 0xa3, 0x75, 0x84, 0x11, 0x81, 0x8e, 0x05, 0x01, 0x60, 0x10, 0xc0, |
408 | +0x42, 0x20, 0xe0, 0x14, 0xc2, 0x31, 0x42, 0x20, 0xe0, 0x15, 0x00, 0x10, 0xe0, | 406 | + 0x00, 0x06, 0xc0, 0xe5, 0x95, 0x81, 0x44, 0x88, 0x1d, 0xee, 0x75, 0x80, |
409 | +0x21, 0x42, 0x20, 0xe0, 0x05, 0x00, 0x14, 0xe0, 0x01, 0x90, 0x06, 0x42, 0x00, | 407 | + 0x4e, 0xc1, 0x25, 0x81, 0x4e, 0xcd, 0x21, 0x88, 0x11, 0x82, 0x0a, 0x02, |
410 | +0xe0, 0x16, 0x80, 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x7c, 0xfa, 0x4a, 0x40, | 408 | + 0x40, 0xe0, 0xd5, 0xfc, 0x56, 0x00, 0x00, 0xe1, 0x18, 0x80, 0x1b, 0xa1, |
411 | +0x80, 0xe0, 0xf0, 0x1e, 0x30, 0xec, 0xe5, 0x82, 0xa6, 0x40, 0x00, 0xe1, 0x1a, | 409 | + 0xc5, 0x84, 0x08, 0x82, 0x4a, 0x00, 0xfc, 0xfb, 0x45, 0x84, 0x86, 0x4d, |
412 | +0x80, 0x2a, 0xc0, 0x3a, 0xc2, 0x13, 0x40, 0x10, 0xe0, 0x1a, 0x82, 0x23, 0x40, | 410 | + 0x84, 0xe1, 0x04, 0x98, 0x05, 0x00, 0x10, 0xe0, 0x4a, 0x40, 0x80, 0xe0, |
413 | +0x18, 0xe0, 0x33, 0x40, 0x1c, 0xe0, 0x13, 0x40, 0x14, 0xe0, 0xf8, 0x61, 0x68, | 411 | + 0x45, 0x82, 0x11, 0x81, 0x0b, 0x8c, 0x58, 0x76, 0x28, 0xef, 0x0b, 0x8c, |
414 | +0xef, 0xc6, 0x13, 0x00, 0xe1, 0x15, 0x12, 0x28, 0xf8, 0x0b, 0x02, 0x2c, 0xe0, | 412 | + 0x0c, 0x0c, 0x00, 0xf2, 0x88, 0x35, 0x28, 0xff, 0x0c, 0x0c, 0x00, 0xf2, |
415 | +0x1b, 0x02, 0x24, 0xe0, 0x8a, 0x00, 0xa5, 0x64, 0x03, 0xc0, 0x35, 0x82, 0x0a, | 413 | + 0x93, 0xdd, 0xc3, 0xc1, 0x46, 0x41, 0xfc, 0xe0, 0x04, 0x80, 0x09, 0x00, |
416 | +0x4e, 0x9c, 0xe1, 0x1a, 0x03, 0x11, 0x6f, 0x02, 0xc0, 0xe8, 0x13, 0x01, 0x20, | 414 | + 0x80, 0xe0, 0x09, 0x9e, 0x0b, 0xa3, 0x75, 0x82, 0x46, 0x41, 0x80, 0xe1, |
417 | +0x00, 0xc0, 0x1f, 0xa0, 0x5a, 0x42, 0x80, 0xe0, 0x0a, 0x4e, 0x9c, 0xe1, 0x68, | 415 | + 0x04, 0x80, 0xc6, 0x42, 0x8c, 0xe0, 0x04, 0xc2, 0x00, 0x40, 0x00, 0xf2, |
418 | +0x13, 0x00, 0xa0, 0x09, 0x12, 0x78, 0xf8, 0xa1, 0x81, 0xf0, 0x02, 0x10, 0xe4, | 416 | + 0x07, 0xcf, 0x06, 0x84, 0x06, 0x40, 0x84, 0xe0, 0x15, 0x00, 0x28, 0xe5, |
419 | +0x07, 0xc4, 0x0c, 0xfc, 0xf0, 0x00, 0x20, 0xe4, 0xa6, 0x91, 0xa8, 0x53, 0x74, | 417 | + 0x1c, 0xc2, 0x93, 0xdd, 0x0b, 0xa1, 0xc6, 0x00, 0xa0, 0xe1, 0x15, 0x00, |
420 | +0xef, 0x05, 0x12, 0x30, 0xf8, 0x25, 0x12, 0x28, 0xf8, 0x61, 0x87, 0x09, 0x00, | 418 | + 0x04, 0xf8, 0x05, 0x84, 0x21, 0x8b, 0x2c, 0x84, 0x14, 0x80, 0x2c, 0x84, |
421 | +0x48, 0xe0, 0x81, 0x85, 0x09, 0x86, 0x0b, 0xa7, 0x26, 0x0c, 0x00, 0xc0, 0x0b, | 419 | + 0x14, 0x82, 0x2c, 0x84, 0x15, 0x00, 0x10, 0xe0, 0x21, 0xa1, 0x21, 0x42, |
422 | +0xa1, 0x0b, 0x04, 0x28, 0xe0, 0x16, 0x0c, 0x00, 0x80, 0x03, 0x52, 0x04, 0xf8, | 420 | + 0x10, 0xe0, 0x05, 0x00, 0x14, 0xe0, 0x01, 0x88, 0x75, 0x83, 0x21, 0x85, |
423 | +0x0b, 0x04, 0x20, 0xe0, 0x0c, 0xa6, 0x1b, 0x04, 0x2c, 0xe0, 0x3b, 0x04, 0x28, | 421 | + 0x2c, 0x84, 0x14, 0x80, 0x06, 0x46, 0x00, 0xe0, 0x2c, 0x84, 0x14, 0x82, |
424 | +0xe0, 0x4b, 0x04, 0x20, 0xe0, 0x13, 0x86, 0x3b, 0x04, 0x24, 0xe0, 0x10, 0x0a, | 422 | + 0x2c, 0x84, 0x14, 0xc0, 0x21, 0xa1, 0x21, 0x42, 0x20, 0xe0, 0x14, 0xc2, |
425 | +0x04, 0xec, 0x1a, 0xfc, 0x33, 0x88, 0x30, 0x06, 0x04, 0xec, 0x12, 0x4e, 0x94, | 423 | + 0x31, 0x42, 0x20, 0xe0, 0x15, 0x00, 0x10, 0xe0, 0x21, 0x42, 0x20, 0xe0, |
426 | +0xf0, 0x32, 0x48, 0x84, 0xf0, 0x4c, 0xe4, 0x7c, 0xa4, 0xcb, 0x04, 0x28, 0xe0, | 424 | + 0x05, 0x00, 0x14, 0xe0, 0x01, 0x90, 0x06, 0x42, 0x00, 0xe0, 0x16, 0x80, |
427 | +0x14, 0x08, 0x84, 0xe1, 0xcd, 0xc9, 0xc2, 0x58, 0x90, 0x91, 0x42, 0x4e, 0x94, | 425 | + 0x93, 0xdd, 0xc3, 0xc1, 0x0c, 0x04, 0x7c, 0xfa, 0x4a, 0x40, 0x80, 0xe0, |
428 | +0x90, 0xc3, 0x52, 0x04, 0x98, 0x73, 0x52, 0x00, 0x80, 0x5b, 0x04, 0x20, 0xe0, | 426 | + 0xf0, 0x1e, 0x30, 0xec, 0xe5, 0x82, 0xa6, 0x40, 0x00, 0xe1, 0x1a, 0x80, |
429 | +0x5d, 0xc9, 0x52, 0x40, 0x90, 0x91, 0x42, 0x48, 0x8c, 0x90, 0x03, 0x52, 0x04, | 427 | + 0x2a, 0xc0, 0x3a, 0xc2, 0x13, 0x40, 0x10, 0xe0, 0x1a, 0x82, 0x23, 0x40, |
430 | +0x80, 0x43, 0x52, 0x08, 0x80, 0x3b, 0x04, 0x2c, 0xe0, 0x49, 0x04, 0xb8, 0xe0, | 428 | + 0x18, 0xe0, 0x33, 0x40, 0x1c, 0xe0, 0x13, 0x40, 0x14, 0xe0, 0xf8, 0x61, |
431 | +0x33, 0x52, 0x1c, 0xf8, 0x2b, 0x04, 0x24, 0xe0, 0x4b, 0xab, 0x23, 0x52, 0x18, | 429 | + 0x68, 0xef, 0xc6, 0x13, 0x00, 0xe1, 0x15, 0x12, 0x28, 0xf8, 0x0b, 0x02, |
432 | +0xf8, 0x65, 0x8a, 0x4b, 0xa9, 0xe5, 0x90, 0x4b, 0xa7, 0x22, 0x44, 0x84, 0xd0, | 430 | + 0x2c, 0xe0, 0x1b, 0x02, 0x24, 0xe0, 0x8a, 0x00, 0xa5, 0x64, 0x03, 0xc0, |
433 | +0x32, 0x46, 0x84, 0xd0, 0x33, 0x52, 0x1c, 0xd8, 0x23, 0x52, 0x18, 0xd8, 0x95, | 431 | + 0x35, 0x82, 0x0a, 0x4e, 0x9c, 0xe1, 0x1a, 0x03, 0x11, 0x6f, 0x02, 0xc0, |
434 | +0x96, 0x20, 0x44, 0xf9, 0x73, 0xff, 0xc0, 0x27, 0xc3, 0x23, 0x82, 0x23, 0x52, | 432 | + 0xe8, 0x13, 0x01, 0x20, 0x00, 0xc0, 0x1f, 0xa0, 0x5a, 0x42, 0x80, 0xe0, |
435 | +0x18, 0xf8, 0x24, 0x02, 0x80, 0xfb, 0x04, 0x00, 0x80, 0xfb, 0x2b, 0x8c, 0x58, | 433 | + 0x0a, 0x4e, 0x9c, 0xe1, 0x68, 0x13, 0x00, 0xa0, 0x09, 0x12, 0x78, 0xf8, |
436 | +0x52, 0x74, 0xef, 0x1b, 0x12, 0x1c, 0xf8, 0x2a, 0xfc, 0x0c, 0xe4, 0x17, 0xc3, | 434 | + 0xa1, 0x81, 0xf0, 0x02, 0x10, 0xe4, 0x07, 0xc4, 0x0c, 0xfc, 0xf0, 0x00, |
437 | +0x13, 0x84, 0x13, 0x52, 0x1c, 0xf8, 0x0b, 0x12, 0x04, 0xf8, 0x14, 0x02, 0x80, | 435 | + 0x20, 0xe4, 0xa6, 0x91, 0xa8, 0x53, 0x74, 0xef, 0x05, 0x12, 0x30, 0xf8, |
438 | +0xfb, 0x2b, 0x8c, 0x68, 0x51, 0x74, 0xef, 0xc5, 0x87, 0x20, 0x44, 0xe1, 0x73, | 436 | + 0x25, 0x12, 0x28, 0xf8, 0x61, 0x87, 0x09, 0x00, 0x48, 0xe0, 0x81, 0x85, |
439 | +0xff, 0xc0, 0x27, 0xc7, 0x23, 0x82, 0x23, 0x52, 0x18, 0xf8, 0x24, 0x02, 0x80, | 437 | + 0x09, 0x86, 0x0b, 0xa7, 0x26, 0x0c, 0x00, 0xc0, 0x0b, 0xa1, 0x0b, 0x04, |
440 | +0xfb, 0x04, 0x00, 0x80, 0xfb, 0x2b, 0x8c, 0x78, 0x57, 0x74, 0xef, 0x1b, 0x12, | 438 | + 0x28, 0xe0, 0x16, 0x0c, 0x00, 0x80, 0x03, 0x52, 0x04, 0xf8, 0x0b, 0x04, |
441 | +0x1c, 0xf8, 0x2a, 0xfc, 0x0c, 0xe4, 0x17, 0xc7, 0x13, 0x84, 0x13, 0x52, 0x1c, | 439 | + 0x20, 0xe0, 0x0c, 0xa6, 0x1b, 0x04, 0x2c, 0xe0, 0x3b, 0x04, 0x28, 0xe0, |
442 | +0xf8, 0x0b, 0x12, 0x04, 0xf8, 0x14, 0x02, 0x80, 0xfb, 0x2b, 0x8c, 0x88, 0x56, | 440 | + 0x4b, 0x04, 0x20, 0xe0, 0x13, 0x86, 0x3b, 0x04, 0x24, 0xe0, 0x10, 0x0a, |
443 | +0x74, 0xef, 0xe5, 0x83, 0x20, 0x44, 0xf1, 0x73, 0xff, 0xc0, 0x27, 0xc5, 0x23, | 441 | + 0x04, 0xec, 0x1a, 0xfc, 0x33, 0x88, 0x30, 0x06, 0x04, 0xec, 0x12, 0x4e, |
444 | +0x82, 0x23, 0x52, 0x18, 0xf8, 0x24, 0x02, 0x80, 0xfb, 0x04, 0x00, 0x80, 0xfb, | 442 | + 0x94, 0xf0, 0x32, 0x48, 0x84, 0xf0, 0x4c, 0xe4, 0x7c, 0xa4, 0xcb, 0x04, |
445 | +0x2b, 0x8c, 0x18, 0x52, 0x74, 0xef, 0x1b, 0x12, 0x1c, 0xf8, 0x2a, 0xfc, 0x0c, | 443 | + 0x28, 0xe0, 0x14, 0x08, 0x84, 0xe1, 0xcd, 0xc9, 0xc2, 0x58, 0x90, 0x91, |
446 | +0xe4, 0x17, 0xc5, 0x13, 0x84, 0x13, 0x52, 0x1c, 0xf8, 0x0b, 0x12, 0x04, 0xf8, | 444 | + 0x42, 0x4e, 0x94, 0x90, 0xc3, 0x52, 0x04, 0x98, 0x73, 0x52, 0x00, 0x80, |
447 | +0x14, 0x02, 0x80, 0xfb, 0x2b, 0x8c, 0x28, 0x51, 0x74, 0xef, 0x7b, 0x80, 0x7c, | 445 | + 0x5b, 0x04, 0x20, 0xe0, 0x5d, 0xc9, 0x52, 0x40, 0x90, 0x91, 0x42, 0x48, |
448 | +0xa4, 0x08, 0x91, 0xa3, 0x52, 0x1c, 0xe0, 0xa3, 0x52, 0x24, 0xe0, 0x0b, 0xa1, | 446 | + 0x8c, 0x90, 0x03, 0x52, 0x04, 0x80, 0x43, 0x52, 0x08, 0x80, 0x3b, 0x04, |
449 | +0x83, 0x52, 0x1c, 0x80, 0x83, 0x52, 0x24, 0x80, 0x89, 0x12, 0x78, 0xf8, 0xf6, | 447 | + 0x2c, 0xe0, 0x49, 0x04, 0xb8, 0xe0, 0x33, 0x52, 0x1c, 0xf8, 0x2b, 0x04, |
450 | +0x57, 0xfc, 0xef, 0x6b, 0x12, 0x1c, 0xf8, 0xab, 0x12, 0x18, 0xf8, 0xd6, 0x57, | 448 | + 0x24, 0xe0, 0x4b, 0xab, 0x23, 0x52, 0x18, 0xf8, 0x65, 0x8a, 0x4b, 0xa9, |
451 | +0xfc, 0x8f, 0x8b, 0xa3, 0xa0, 0x40, 0x00, 0x9c, 0xa5, 0x86, 0x64, 0x00, 0x80, | 449 | + 0xe5, 0x90, 0x4b, 0xa7, 0x22, 0x44, 0x84, 0xd0, 0x32, 0x46, 0x84, 0xd0, |
452 | +0xfb, 0x1b, 0x90, 0xf8, 0x7d, 0xf8, 0xee, 0x6b, 0x80, 0xa4, 0x00, 0x80, 0xfb, | 450 | + 0x33, 0x52, 0x1c, 0xd8, 0x23, 0x52, 0x18, 0xd8, 0x95, 0x96, 0x20, 0x44, |
453 | +0x1b, 0x90, 0x98, 0x7d, 0xf8, 0xee, 0x15, 0x12, 0x28, 0xf8, 0x19, 0x02, 0xb8, | 451 | + 0xf9, 0x73, 0xff, 0xc0, 0x27, 0xc3, 0x23, 0x82, 0x23, 0x52, 0x18, 0xf8, |
454 | +0xe0, 0x1b, 0xad, 0x95, 0x82, 0x1a, 0xa6, 0xa0, 0x44, 0xf9, 0x73, 0xff, 0xc0, | 452 | + 0x24, 0x02, 0x80, 0xfb, 0x04, 0x00, 0x80, 0xfb, 0x2b, 0x8c, 0x58, 0x52, |
455 | +0x27, 0xc3, 0x13, 0x94, 0x10, 0x02, 0x08, 0xec, 0x1c, 0xe4, 0x23, 0x52, 0x18, | 453 | + 0x74, 0xef, 0x1b, 0x12, 0x1c, 0xf8, 0x2a, 0xfc, 0x0c, 0xe4, 0x17, 0xc3, |
456 | +0xf8, 0x1b, 0x12, 0x04, 0xf8, 0x03, 0x96, 0x03, 0x52, 0x28, 0xe0, 0x1c, 0xe6, | 454 | + 0x13, 0x84, 0x13, 0x52, 0x1c, 0xf8, 0x0b, 0x12, 0x04, 0xf8, 0x14, 0x02, |
457 | +0x0a, 0xa6, 0x1a, 0xe4, 0x63, 0x96, 0x63, 0x52, 0x20, 0xe0, 0x73, 0x52, 0x10, | 455 | + 0x80, 0xfb, 0x2b, 0x8c, 0x68, 0x51, 0x74, 0xef, 0xc5, 0x87, 0x20, 0x44, |
458 | +0xe0, 0x03, 0x52, 0x14, 0xe0, 0x13, 0x52, 0x18, 0xe0, 0x98, 0x52, 0x74, 0xef, | 456 | + 0xe1, 0x73, 0xff, 0xc0, 0x27, 0xc7, 0x23, 0x82, 0x23, 0x52, 0x18, 0xf8, |
459 | +0x09, 0x12, 0x8c, 0xe0, 0x0b, 0xa1, 0x01, 0x81, 0x01, 0x52, 0x90, 0xe0, 0x65, | 457 | + 0x24, 0x02, 0x80, 0xfb, 0x04, 0x00, 0x80, 0xfb, 0x2b, 0x8c, 0x78, 0x57, |
460 | +0x82, 0x05, 0x12, 0x30, 0xf8, 0x09, 0x00, 0xa8, 0xe0, 0x0a, 0x00, 0x0c, 0xf8, | 458 | + 0x74, 0xef, 0x1b, 0x12, 0x1c, 0xf8, 0x2a, 0xfc, 0x0c, 0xe4, 0x17, 0xc7, |
461 | +0x16, 0x00, 0x00, 0xc0, 0x01, 0x52, 0x90, 0xc0, 0x46, 0x41, 0x84, 0xe0, 0x0a, | 459 | + 0x13, 0x84, 0x13, 0x52, 0x1c, 0xf8, 0x0b, 0x12, 0x04, 0xf8, 0x14, 0x02, |
462 | +0x80, 0x0a, 0x4e, 0x9c, 0xe9, 0x1a, 0x00, 0x08, 0xe0, 0x38, 0x01, 0x01, 0x20, | 460 | + 0x80, 0xfb, 0x2b, 0x8c, 0x88, 0x56, 0x74, 0xef, 0xe5, 0x83, 0x20, 0x44, |
463 | +0x00, 0xc0, 0x0b, 0x12, 0x1c, 0xe0, 0x1b, 0x12, 0x24, 0xe0, 0x2b, 0x12, 0x28, | 461 | + 0xf1, 0x73, 0xff, 0xc0, 0x27, 0xc5, 0x23, 0x82, 0x23, 0x52, 0x18, 0xf8, |
464 | +0xe0, 0x03, 0x52, 0x2c, 0xe0, 0x0b, 0x12, 0x20, 0xe0, 0x13, 0x52, 0x34, 0xe0, | 462 | + 0x24, 0x02, 0x80, 0xfb, 0x04, 0x00, 0x80, 0xfb, 0x2b, 0x8c, 0x18, 0x52, |
465 | +0x23, 0x52, 0x38, 0xe0, 0x03, 0x52, 0x30, 0xe0, 0x0c, 0x00, 0x00, 0xe2, 0xf1, | 463 | + 0x74, 0xef, 0x1b, 0x12, 0x1c, 0xf8, 0x2a, 0xfc, 0x0c, 0xe4, 0x17, 0xc5, |
466 | +0x98, 0x0c, 0x0c, 0x7c, 0xf2, 0x93, 0xdd, 0x13, 0xa9, 0x00, 0x00, 0xa8, 0xc1, | 464 | + 0x13, 0x84, 0x13, 0x52, 0x1c, 0xf8, 0x0b, 0x12, 0x04, 0xf8, 0x14, 0x02, |
467 | +0x40, 0x00, 0x68, 0x04, 0xa0, 0xe0, 0x40, 0x6c, 0x40, 0x00, 0xe8, 0x34, 0xc8, | 465 | + 0x80, 0xfb, 0x2b, 0x8c, 0x28, 0x51, 0x74, 0xef, 0x7b, 0x80, 0x7c, 0xa4, |
468 | +0xe0, 0xfc, 0x91, 0x40, 0x00, 0x68, 0x1f, 0xb8, 0xe0, 0x30, 0x16, 0x41, 0x00, | 466 | + 0x08, 0x91, 0xa3, 0x52, 0x1c, 0xe0, 0xa3, 0x52, 0x24, 0xe0, 0x0b, 0xa1, |
469 | +0x28, 0x39, 0x74, 0xe0, 0xb0, 0x7e, 0x40, 0x00, 0xe8, 0x38, 0xc0, 0xe0, 0x30, | 467 | + 0x83, 0x52, 0x1c, 0x80, 0x83, 0x52, 0x24, 0x80, 0x89, 0x12, 0x78, 0xf8, |
470 | +0x04, 0x41, 0x00, 0x48, 0x1b, 0x80, 0xe0, 0x30, 0x2e, 0x40, 0x00, 0x88, 0x0c, | 468 | + 0xf6, 0x57, 0xfc, 0xef, 0x6b, 0x12, 0x1c, 0xf8, 0xab, 0x12, 0x18, 0xf8, |
471 | +0xec, 0xe0, 0x10, 0x9f, 0x40, 0x00, 0x88, 0x08, 0xb4, 0xe0, 0x10, 0x01, 0x41, | 469 | + 0xd6, 0x57, 0xfc, 0x8f, 0x8b, 0xa3, 0xa0, 0x40, 0x00, 0x9c, 0xa5, 0x86, |
472 | +0x00, 0x68, 0x01, 0x84, 0xe0, 0x54, 0xd6, 0x40, 0x00, 0xc8, 0x1a, 0x98, 0xe0, | 470 | + 0x64, 0x00, 0x80, 0xfb, 0x1b, 0x90, 0xf8, 0x7d, 0xf8, 0xee, 0x6b, 0x80, |
473 | +0xd0, 0xc8, 0x40, 0x00, 0x68, 0x08, 0xa0, 0xe0, 0x80, 0xdb, 0x40, 0x00, 0xe8, | 471 | + 0xa4, 0x00, 0x80, 0xfb, 0x1b, 0x90, 0x98, 0x7d, 0xf8, 0xee, 0x15, 0x12, |
474 | +0x35, 0x94, 0xe0, 0x74, 0xff, 0x40, 0x00, 0xa8, 0x11, 0x80, 0xe0, 0xf8, 0x89, | 472 | + 0x28, 0xf8, 0x19, 0x02, 0xb8, 0xe0, 0x1b, 0xad, 0x95, 0x82, 0x1a, 0xa6, |
475 | +0x40, 0x00, 0x88, 0x16, 0xbc, 0xe0, 0x00, 0x90, 0x40, 0x00, 0x08, 0x35, 0xb8, | 473 | + 0xa0, 0x44, 0xf9, 0x73, 0xff, 0xc0, 0x27, 0xc3, 0x13, 0x94, 0x10, 0x02, |
476 | +0xe0, 0x7c, 0x73, 0x40, 0x00, 0x88, 0x1b, 0xc8, 0xe0, 0xf4, 0xff, 0x40, 0x00, | 474 | + 0x08, 0xec, 0x1c, 0xe4, 0x23, 0x52, 0x18, 0xf8, 0x1b, 0x12, 0x04, 0xf8, |
477 | +0x68, 0x39, 0x80, 0xe0, 0xa4, 0xa4, 0x40, 0x00, 0xa8, 0x16, 0xb0, 0xe0, 0x50, | 475 | + 0x03, 0x96, 0x03, 0x52, 0x28, 0xe0, 0x1c, 0xe6, 0x0a, 0xa6, 0x1a, 0xe4, |
478 | +0xc9, 0x40, 0x00, 0x28, 0x3a, 0x98, 0xe0, 0x00, 0xb9, 0x00, 0x00, 0xb6, 0x85, | 476 | + 0x63, 0x96, 0x63, 0x52, 0x20, 0xe0, 0x73, 0x52, 0x10, 0xe0, 0x03, 0x52, |
479 | +0x00, 0x00, | 477 | + 0x14, 0xe0, 0x13, 0x52, 0x18, 0xe0, 0x98, 0x52, 0x74, 0xef, 0x09, 0x12, |
478 | + 0x8c, 0xe0, 0x0b, 0xa1, 0x01, 0x81, 0x01, 0x52, 0x90, 0xe0, 0x65, 0x82, | ||
479 | + 0x05, 0x12, 0x30, 0xf8, 0x09, 0x00, 0xa8, 0xe0, 0x0a, 0x00, 0x0c, 0xf8, | ||
480 | + 0x16, 0x00, 0x00, 0xc0, 0x01, 0x52, 0x90, 0xc0, 0x46, 0x41, 0x84, 0xe0, | ||
481 | + 0x0a, 0x80, 0x0a, 0x4e, 0x9c, 0xe9, 0x1a, 0x00, 0x08, 0xe0, 0x38, 0x01, | ||
482 | + 0x01, 0x20, 0x00, 0xc0, 0x0b, 0x12, 0x1c, 0xe0, 0x1b, 0x12, 0x24, 0xe0, | ||
483 | + 0x2b, 0x12, 0x28, 0xe0, 0x03, 0x52, 0x2c, 0xe0, 0x0b, 0x12, 0x20, 0xe0, | ||
484 | + 0x13, 0x52, 0x34, 0xe0, 0x23, 0x52, 0x38, 0xe0, 0x03, 0x52, 0x30, 0xe0, | ||
485 | + 0x0c, 0x00, 0x00, 0xe2, 0xf1, 0x98, 0x0c, 0x0c, 0x7c, 0xf2, 0x93, 0xdd, | ||
486 | + 0x13, 0xa9, 0x00, 0x00, 0xa8, 0xc1, 0x40, 0x00, 0x68, 0x04, 0xa0, 0xe0, | ||
487 | + 0x40, 0x6c, 0x40, 0x00, 0xe8, 0x34, 0xc8, 0xe0, 0xfc, 0x91, 0x40, 0x00, | ||
488 | + 0x68, 0x1f, 0xb8, 0xe0, 0x30, 0x16, 0x41, 0x00, 0x28, 0x39, 0x74, 0xe0, | ||
489 | + 0xb0, 0x7e, 0x40, 0x00, 0xe8, 0x38, 0xc0, 0xe0, 0x30, 0x04, 0x41, 0x00, | ||
490 | + 0x48, 0x1b, 0x80, 0xe0, 0x30, 0x2e, 0x40, 0x00, 0x88, 0x0c, 0xec, 0xe0, | ||
491 | + 0x10, 0x9f, 0x40, 0x00, 0x88, 0x08, 0xb4, 0xe0, 0x10, 0x01, 0x41, 0x00, | ||
492 | + 0x68, 0x01, 0x84, 0xe0, 0x54, 0xd6, 0x40, 0x00, 0xc8, 0x1a, 0x98, 0xe0, | ||
493 | + 0xd0, 0xc8, 0x40, 0x00, 0x68, 0x08, 0xa0, 0xe0, 0x80, 0xdb, 0x40, 0x00, | ||
494 | + 0xe8, 0x35, 0x94, 0xe0, 0x74, 0xff, 0x40, 0x00, 0xa8, 0x11, 0x80, 0xe0, | ||
495 | + 0xf8, 0x89, 0x40, 0x00, 0x88, 0x16, 0xbc, 0xe0, 0x00, 0x90, 0x40, 0x00, | ||
496 | + 0x08, 0x35, 0xb8, 0xe0, 0x7c, 0x73, 0x40, 0x00, 0x88, 0x1b, 0xc8, 0xe0, | ||
497 | + 0xf4, 0xff, 0x40, 0x00, 0x68, 0x39, 0x80, 0xe0, 0xa4, 0xa4, 0x40, 0x00, | ||
498 | + 0xa8, 0x16, 0xb0, 0xe0, 0x50, 0xc9, 0x40, 0x00, 0x28, 0x3a, 0x98, 0xe0, | ||
499 | + 0x00, 0xb9, 0x00, 0x00, 0xb6, 0x85, 0x00, 0x00, | ||
480 | +}; | 500 | +}; |
481 | + | 501 | + |
482 | +static const char * const vd55g1_tp_menu[] = { | 502 | +static const char * const vd55g1_tp_menu[] = { |
483 | + "Disabled", | 503 | + "Disabled", |
484 | + "Dgrey", | 504 | + "Dgrey", |
... | ... | ||
504 | +static const char * const vd55g1_supply_name[] = { | 524 | +static const char * const vd55g1_supply_name[] = { |
505 | + "vcore", | 525 | + "vcore", |
506 | + "vddio", | 526 | + "vddio", |
507 | + "vana", | 527 | + "vana", |
508 | +}; | 528 | +}; |
509 | + | ||
510 | +/* Will be filled on device tree parse */ | ||
511 | +static u64 link_freq[1]; | ||
512 | + | 529 | + |
513 | +enum vd55g1_hdr_mode { | 530 | +enum vd55g1_hdr_mode { |
514 | + VD55G1_NO_HDR, | 531 | + VD55G1_NO_HDR, |
515 | + VD55G1_HDR_SUB, | 532 | + VD55G1_HDR_SUB, |
516 | +}; | 533 | +}; |
... | ... | ||
599 | + u16 oif_ctrl; | 616 | + u16 oif_ctrl; |
600 | + enum vd55g1_gpio_mode gpios[VD55G1_NB_GPIOS]; | 617 | + enum vd55g1_gpio_mode gpios[VD55G1_NB_GPIOS]; |
601 | + unsigned long ext_leds_mask; | 618 | + unsigned long ext_leds_mask; |
602 | + int data_rate_in_mbps; | 619 | + int data_rate_in_mbps; |
603 | + u32 pixel_clock; | 620 | + u32 pixel_clock; |
621 | + u64 link_freq; | ||
604 | + struct v4l2_ctrl_handler ctrl_handler; | 622 | + struct v4l2_ctrl_handler ctrl_handler; |
605 | + struct v4l2_ctrl *pixel_rate_ctrl; | 623 | + struct v4l2_ctrl *pixel_rate_ctrl; |
606 | + struct v4l2_ctrl *vblank_ctrl; | 624 | + struct v4l2_ctrl *vblank_ctrl; |
607 | + struct v4l2_ctrl *hblank_ctrl; | 625 | + struct v4l2_ctrl *hblank_ctrl; |
608 | + struct { | 626 | + struct { |
... | ... | ||
628 | +} | 646 | +} |
629 | + | 647 | + |
630 | +static inline struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl) | 648 | +static inline struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl) |
631 | +{ | 649 | +{ |
632 | + return &container_of_const(ctrl->handler, struct vd55g1, | 650 | + return &container_of_const(ctrl->handler, struct vd55g1, |
633 | + ctrl_handler)->sd; | 651 | + ctrl_handler)->sd; |
634 | +} | 652 | +} |
635 | + | 653 | + |
636 | +static u8 get_bpp_by_code(struct vd55g1 *sensor, u32 code) | 654 | +static u8 get_bpp_by_code(struct vd55g1 *sensor, u32 code) |
637 | +{ | 655 | +{ |
638 | + struct i2c_client *client = sensor->i2c_client; | 656 | + struct i2c_client *client = sensor->i2c_client; |
... | ... | ||
709 | + const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); | 727 | + const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); |
710 | + | 728 | + |
711 | + return get_min_line_length(sensor) - crop->width; | 729 | + return get_min_line_length(sensor) - crop->width; |
712 | +} | 730 | +} |
713 | + | 731 | + |
714 | +static struct vblank_limits get_vblank_limits(struct vd55g1 *sensor) | 732 | +static void get_vblank_limits(struct vd55g1 *sensor, |
715 | +{ | 733 | + struct vblank_limits *limits) |
716 | + struct vblank_limits limits; | 734 | +{ |
717 | + struct v4l2_subdev_state *state = | 735 | + struct v4l2_subdev_state *state = |
718 | + v4l2_subdev_get_locked_active_state(&sensor->sd); | 736 | + v4l2_subdev_get_locked_active_state(&sensor->sd); |
719 | + const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); | 737 | + const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); |
720 | + | 738 | + |
721 | + limits.min = VD55G1_VBLANK_MIN; | 739 | + limits->min = VD55G1_VBLANK_MIN; |
722 | + limits.def = VD55G1_FRAME_LENGTH_DEF - crop->height; | 740 | + limits->def = VD55G1_FRAME_LENGTH_DEF - crop->height; |
723 | + limits.max = VD55G1_VBLANK_MAX - crop->height; | 741 | + limits->max = VD55G1_VBLANK_MAX - crop->height; |
724 | + | ||
725 | + return limits; | ||
726 | +} | 742 | +} |
727 | + | 743 | + |
728 | +#define vd55g1_read(sensor, reg, val, err) \ | 744 | +#define vd55g1_read(sensor, reg, val, err) \ |
729 | + cci_read((sensor)->regmap, reg, val, err) | 745 | + cci_read((sensor)->regmap, reg, val, err) |
730 | + | 746 | + |
731 | +#define vd55g1_write(sensor, reg, val, err) \ | 747 | +#define vd55g1_write(sensor, reg, val, err) \ |
732 | + cci_write((sensor)->regmap, reg, (u64)val, err) | 748 | + cci_write((sensor)->regmap, reg, val, err) |
733 | + | 749 | + |
734 | +static int vd55g1_write_array(struct vd55g1 *sensor, u32 reg, unsigned int len, | 750 | +static int vd55g1_write_array(struct vd55g1 *sensor, u32 reg, unsigned int len, |
735 | + const u8 *array, int *err) | 751 | + const u8 *array, int *err) |
736 | +{ | 752 | +{ |
737 | + unsigned int chunk_sz = 1024; | 753 | + unsigned int chunk_sz = 1024; |
... | ... | ||
786 | + return vd55g1_poll_reg(sensor, VD55G1_REG_SYSTEM_FSM, state, err); | 802 | + return vd55g1_poll_reg(sensor, VD55G1_REG_SYSTEM_FSM, state, err); |
787 | +} | 803 | +} |
788 | + | 804 | + |
789 | +static int vd55g1_get_regulators(struct vd55g1 *sensor) | 805 | +static int vd55g1_get_regulators(struct vd55g1 *sensor) |
790 | +{ | 806 | +{ |
791 | + int i; | 807 | + unsigned int i; |
792 | + | 808 | + |
793 | + for (i = 0; i < ARRAY_SIZE(vd55g1_supply_name); i++) | 809 | + for (i = 0; i < ARRAY_SIZE(vd55g1_supply_name); i++) |
794 | + sensor->supplies[i].supply = vd55g1_supply_name[i]; | 810 | + sensor->supplies[i].supply = vd55g1_supply_name[i]; |
795 | + | 811 | + |
796 | + return devm_regulator_bulk_get(&sensor->i2c_client->dev, | 812 | + return devm_regulator_bulk_get(&sensor->i2c_client->dev, |
... | ... | ||
800 | + | 816 | + |
801 | +static int vd55g1_prepare_clock_tree(struct vd55g1 *sensor) | 817 | +static int vd55g1_prepare_clock_tree(struct vd55g1 *sensor) |
802 | +{ | 818 | +{ |
803 | + struct i2c_client *client = sensor->i2c_client; | 819 | + struct i2c_client *client = sensor->i2c_client; |
804 | + /* Double data rate */ | 820 | + /* Double data rate */ |
805 | + u32 mipi_freq = link_freq[0] * 2; | 821 | + u32 mipi_freq = sensor->link_freq * 2; |
806 | + u32 sys_clk, mipi_div, pixel_div; | 822 | + u32 sys_clk, mipi_div, pixel_div; |
807 | + int ret = 0; | 823 | + int ret = 0; |
808 | + | 824 | + |
809 | + if (sensor->xclk_freq < 6 * HZ_PER_MHZ || | 825 | + if (sensor->xclk_freq < 6 * HZ_PER_MHZ || |
810 | + sensor->xclk_freq > 27 * HZ_PER_MHZ) { | 826 | + sensor->xclk_freq > 27 * HZ_PER_MHZ) { |
... | ... | ||
850 | + static const u8 index2val[] = { | 866 | + static const u8 index2val[] = { |
851 | + 0x0, 0x22, 0x28 | 867 | + 0x0, 0x22, 0x28 |
852 | + }; | 868 | + }; |
853 | + u32 pattern = index2val[patgen_index]; | 869 | + u32 pattern = index2val[patgen_index]; |
854 | + u32 reg = pattern << VD55G1_PATGEN_TYPE_SHIFT; | 870 | + u32 reg = pattern << VD55G1_PATGEN_TYPE_SHIFT; |
855 | + u8 darkcal = VD55G1_DARKCAL_AUTO; | ||
856 | + u8 duster = VD55G1_DUSTER_RING_ENABLE | VD55G1_DUSTER_DYN_ENABLE | | 871 | + u8 duster = VD55G1_DUSTER_RING_ENABLE | VD55G1_DUSTER_DYN_ENABLE | |
857 | + VD55G1_DUSTER_ENABLE; | 872 | + VD55G1_DUSTER_ENABLE; |
858 | + int ret = 0; | 873 | + int ret = 0; |
859 | + | 874 | + |
875 | + BUILD_BUG_ON(ARRAY_SIZE(index2val) != ARRAY_SIZE(vd55g1_tp_menu)); | ||
876 | + | ||
860 | + if (pattern != 0) { | 877 | + if (pattern != 0) { |
861 | + reg |= VD55G1_PATGEN_ENABLE; | 878 | + reg |= VD55G1_PATGEN_ENABLE; |
862 | + /* | 879 | + /* Take care of duster to not mess up the test pattern output */ |
863 | + * Take care of dark calibaration and duster to not mess up the | ||
864 | + * test pattern output. | ||
865 | + */ | ||
866 | + darkcal = VD55G1_DARKCAL_BYPASS; | ||
867 | + duster = VD55G1_DUSTER_DISABLE; | 880 | + duster = VD55G1_DUSTER_DISABLE; |
868 | + } | 881 | + } |
869 | + | 882 | + |
870 | + vd55g1_write(sensor, VD55G1_REG_DARKCAL_CTRL, darkcal, &ret); | ||
871 | + vd55g1_write(sensor, VD55G1_REG_DUSTER_CTRL, duster, &ret); | 883 | + vd55g1_write(sensor, VD55G1_REG_DUSTER_CTRL, duster, &ret); |
872 | + vd55g1_write(sensor, VD55G1_REG_PATGEN_CTRL, reg, &ret); | 884 | + vd55g1_write(sensor, VD55G1_REG_PATGEN_CTRL, reg, &ret); |
873 | + | 885 | + |
874 | + return ret; | 886 | + return ret; |
875 | +} | 887 | +} |
... | ... | ||
944 | +static int vd55g1_update_frame_length(struct vd55g1 *sensor, | 956 | +static int vd55g1_update_frame_length(struct vd55g1 *sensor, |
945 | + unsigned int frame_length) | 957 | + unsigned int frame_length) |
946 | +{ | 958 | +{ |
947 | + int ret = 0; | 959 | + int ret = 0; |
948 | + | 960 | + |
949 | + if (sensor->hdr_ctrl->val == VD55G1_HDR_SUB) { | 961 | + if (sensor->hdr_ctrl->val == VD55G1_HDR_SUB) |
950 | + vd55g1_write(sensor, VD55G1_REG_FRAME_LENGTH(1), frame_length, | 962 | + vd55g1_write(sensor, VD55G1_REG_FRAME_LENGTH(1), frame_length, |
951 | + &ret); | 963 | + &ret); |
952 | + } | ||
953 | + vd55g1_write(sensor, VD55G1_REG_FRAME_LENGTH(0), frame_length, &ret); | 964 | + vd55g1_write(sensor, VD55G1_REG_FRAME_LENGTH(0), frame_length, &ret); |
954 | + | 965 | + |
955 | + return ret; | 966 | + return ret; |
956 | +} | 967 | +} |
957 | + | 968 | + |
... | ... | ||
1226 | + dev_warn(&client->dev, "Can't disable stream"); | 1237 | + dev_warn(&client->dev, "Can't disable stream"); |
1227 | + | 1238 | + |
1228 | + vd55g1_lock_ctrls(sensor, false); | 1239 | + vd55g1_lock_ctrls(sensor, false); |
1229 | + | 1240 | + |
1230 | + pm_runtime_mark_last_busy(&client->dev); | 1241 | + pm_runtime_mark_last_busy(&client->dev); |
1231 | + __pm_runtime_put_autosuspend(&client->dev); | 1242 | + pm_runtime_put_autosuspend(&client->dev); |
1232 | + | 1243 | + |
1233 | + return ret; | 1244 | + return ret; |
1234 | +} | 1245 | +} |
1235 | + | 1246 | + |
1236 | +static int vd55g1_patch(struct vd55g1 *sensor) | 1247 | +static int vd55g1_patch(struct vd55g1 *sensor) |
... | ... | ||
1308 | + unsigned int frame_length = 0; | 1319 | + unsigned int frame_length = 0; |
1309 | + unsigned int expo_max; | 1320 | + unsigned int expo_max; |
1310 | + int ret; | 1321 | + int ret; |
1311 | + | 1322 | + |
1312 | + /* Reset vblank and frame length to default */ | 1323 | + /* Reset vblank and frame length to default */ |
1313 | + vblank = get_vblank_limits(sensor); | 1324 | + get_vblank_limits(sensor, &vblank); |
1314 | + ret = __v4l2_ctrl_modify_range(sensor->vblank_ctrl, vblank.min, | 1325 | + ret = __v4l2_ctrl_modify_range(sensor->vblank_ctrl, vblank.min, |
1315 | + vblank.max, 1, vblank.def); | 1326 | + vblank.max, 1, vblank.def); |
1316 | + if (ret) | 1327 | + if (ret) |
1317 | + return ret; | 1328 | + return ret; |
1318 | + | 1329 | + |
... | ... | ||
1383 | + struct v4l2_subdev_state *sd_state) | 1394 | + struct v4l2_subdev_state *sd_state) |
1384 | +{ | 1395 | +{ |
1385 | + unsigned int def_mode = VD55G1_DEFAULT_MODE; | 1396 | + unsigned int def_mode = VD55G1_DEFAULT_MODE; |
1386 | + struct vd55g1 *sensor = to_vd55g1(sd); | 1397 | + struct vd55g1 *sensor = to_vd55g1(sd); |
1387 | + struct v4l2_subdev_format fmt = { 0 }; | 1398 | + struct v4l2_subdev_format fmt = { 0 }; |
1388 | + struct v4l2_subdev_route routes[] = { 0 }; | 1399 | + struct v4l2_subdev_route routes[] = { |
1400 | + { .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE } | ||
1401 | + }; | ||
1389 | + struct v4l2_subdev_krouting routing = { | 1402 | + struct v4l2_subdev_krouting routing = { |
1390 | + .num_routes = ARRAY_SIZE(routes), | 1403 | + .num_routes = ARRAY_SIZE(routes), |
1391 | + .routes = routes, | 1404 | + .routes = routes, |
1392 | + }; | 1405 | + }; |
1393 | + int ret; | 1406 | + int ret; |
1394 | + | 1407 | + |
1395 | + /* Needed by v4l2_subdev_s_stream_helper(), even with 1 stream only */ | 1408 | + /* Needed by v4l2_subdev_s_stream_helper(), even with 1 stream only */ |
1396 | + routes[0].flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE; | ||
1397 | + ret = v4l2_subdev_set_routing(sd, sd_state, &routing); | 1409 | + ret = v4l2_subdev_set_routing(sd, sd_state, &routing); |
1398 | + if (ret) | 1410 | + if (ret) |
1399 | + return ret; | 1411 | + return ret; |
1400 | + | 1412 | + |
1401 | + vd55g1_update_img_pad_format(sensor, &vd55g1_supported_modes[def_mode], | 1413 | + vd55g1_update_img_pad_format(sensor, &vd55g1_supported_modes[def_mode], |
... | ... | ||
1604 | + sensor->patgen_ctrl = | 1616 | + sensor->patgen_ctrl = |
1605 | + v4l2_ctrl_new_std_menu_items(hdl, ops, V4L2_CID_TEST_PATTERN, | 1617 | + v4l2_ctrl_new_std_menu_items(hdl, ops, V4L2_CID_TEST_PATTERN, |
1606 | + ARRAY_SIZE(vd55g1_tp_menu) - 1, 0, | 1618 | + ARRAY_SIZE(vd55g1_tp_menu) - 1, 0, |
1607 | + 0, vd55g1_tp_menu); | 1619 | + 0, vd55g1_tp_menu); |
1608 | + ctrl = v4l2_ctrl_new_int_menu(hdl, ops, V4L2_CID_LINK_FREQ, | 1620 | + ctrl = v4l2_ctrl_new_int_menu(hdl, ops, V4L2_CID_LINK_FREQ, |
1609 | + ARRAY_SIZE(link_freq) - 1, 0, link_freq); | 1621 | + 0, 0, &sensor->link_freq); |
1610 | + if (ctrl) | 1622 | + if (ctrl) |
1611 | + ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; | 1623 | + ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; |
1612 | + sensor->pixel_rate_ctrl = v4l2_ctrl_new_std(hdl, ops, | 1624 | + sensor->pixel_rate_ctrl = v4l2_ctrl_new_std(hdl, ops, |
1613 | + V4L2_CID_PIXEL_RATE, 1, | 1625 | + V4L2_CID_PIXEL_RATE, 1, |
1614 | + INT_MAX, 1, | 1626 | + INT_MAX, 1, |
... | ... | ||
1631 | + hblank = get_hblank_min(sensor); | 1643 | + hblank = get_hblank_min(sensor); |
1632 | + sensor->hblank_ctrl = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_HBLANK, | 1644 | + sensor->hblank_ctrl = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_HBLANK, |
1633 | + hblank, hblank, 1, hblank); | 1645 | + hblank, hblank, 1, hblank); |
1634 | + if (sensor->hblank_ctrl) | 1646 | + if (sensor->hblank_ctrl) |
1635 | + sensor->hblank_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; | 1647 | + sensor->hblank_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; |
1636 | + vblank = get_vblank_limits(sensor); | 1648 | + get_vblank_limits(sensor, &vblank); |
1637 | + sensor->vblank_ctrl = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_VBLANK, | 1649 | + sensor->vblank_ctrl = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_VBLANK, |
1638 | + vblank.min, vblank.max, | 1650 | + vblank.min, vblank.max, |
1639 | + 1, vblank.def); | 1651 | + 1, vblank.def); |
1640 | + | 1652 | + |
1641 | + /* Additional controls based on device tree properties */ | 1653 | + /* Additional controls based on device tree properties */ |
... | ... | ||
1645 | + V4L2_CID_FLASH_LED_MODE, | 1657 | + V4L2_CID_FLASH_LED_MODE, |
1646 | + V4L2_FLASH_LED_MODE_FLASH, 0, | 1658 | + V4L2_FLASH_LED_MODE_FLASH, 0, |
1647 | + V4L2_FLASH_LED_MODE_NONE); | 1659 | + V4L2_FLASH_LED_MODE_NONE); |
1648 | + } | 1660 | + } |
1649 | + | 1661 | + |
1650 | + if (hdl->error) { | ||
1651 | + ret = hdl->error; | ||
1652 | + goto free_ctrls; | ||
1653 | + } | ||
1654 | + | ||
1655 | + ret = v4l2_fwnode_device_parse(&sensor->i2c_client->dev, &fwnode_props); | 1662 | + ret = v4l2_fwnode_device_parse(&sensor->i2c_client->dev, &fwnode_props); |
1656 | + if (ret) | 1663 | + if (ret) |
1657 | + goto free_ctrls; | 1664 | + goto free_ctrls; |
1658 | + | 1665 | + |
1659 | + ret = v4l2_ctrl_new_fwnode_properties(hdl, ops, &fwnode_props); | 1666 | + ret = v4l2_ctrl_new_fwnode_properties(hdl, ops, &fwnode_props); |
... | ... | ||
1815 | + if (ep.nr_of_link_frequencies != 1) { | 1822 | + if (ep.nr_of_link_frequencies != 1) { |
1816 | + dev_err(&client->dev, "Multiple link frequencies not supported\n"); | 1823 | + dev_err(&client->dev, "Multiple link frequencies not supported\n"); |
1817 | + ret = -EINVAL; | 1824 | + ret = -EINVAL; |
1818 | + goto done; | 1825 | + goto done; |
1819 | + } | 1826 | + } |
1820 | + link_freq[0] = ep.link_frequencies[0]; | 1827 | + sensor->link_freq = ep.link_frequencies[0]; |
1821 | + | 1828 | + |
1822 | +done: | 1829 | +done: |
1823 | + v4l2_fwnode_endpoint_free(&ep); | 1830 | + v4l2_fwnode_endpoint_free(&ep); |
1824 | + | 1831 | + |
1825 | + return ret; | 1832 | + return ret; |
1826 | +} | 1833 | +} |
1827 | + | 1834 | + |
1828 | +static int vd55g1_parse_dt_gpios_array(struct vd55g1 *sensor, | 1835 | +static int vd55g1_parse_dt_gpios_array(struct vd55g1 *sensor, |
1829 | + char *prop_name, u32 *array, int *nb) | 1836 | + char *prop_name, u32 *array, int *nb) |
1830 | +{ | 1837 | +{ |
1831 | + struct i2c_client *client = sensor->i2c_client; | 1838 | + struct i2c_client *client = sensor->i2c_client; |
1832 | + struct device_node *np = client->dev.of_node; | 1839 | + struct device *dev = &client->dev; |
1833 | + unsigned int i; | 1840 | + unsigned int i; |
1834 | + | 1841 | + int ret; |
1835 | + *nb = of_property_read_variable_u32_array(np, prop_name, array, 0, | 1842 | + |
1836 | + VD55G1_NB_GPIOS); | 1843 | + *nb = device_property_count_u32(dev, prop_name); |
1837 | + if (*nb == -EINVAL) { | 1844 | + if (*nb == -EINVAL) { |
1838 | + /* Property not found */ | 1845 | + /* Property not found */ |
1839 | + *nb = 0; | 1846 | + *nb = 0; |
1840 | + return 0; | 1847 | + return 0; |
1841 | + } else if (*nb < 0) { | 1848 | + } |
1849 | + | ||
1850 | + ret = device_property_read_u32_array(dev, prop_name, array, *nb); | ||
1851 | + if (ret) { | ||
1842 | + dev_err(&client->dev, "Failed to read %s prop\n", prop_name); | 1852 | + dev_err(&client->dev, "Failed to read %s prop\n", prop_name); |
1843 | + return *nb; | 1853 | + return ret; |
1844 | + } | 1854 | + } |
1845 | + | ||
1846 | + for (i = 0; i < *nb; i++) { | 1855 | + for (i = 0; i < *nb; i++) { |
1847 | + if (array[i] >= VD55G1_NB_GPIOS) { | 1856 | + if (array[i] >= VD55G1_NB_GPIOS) { |
1848 | + dev_err(&client->dev, "Invalid GPIO number %d\n", | 1857 | + dev_err(&client->dev, "Invalid GPIO number %d\n", |
1849 | + array[i]); | 1858 | + array[i]); |
1850 | + return -EINVAL; | 1859 | + return -EINVAL; |
... | ... | ||
2000 | + /* Detect if sensor is present and if its revision is supported */ | 2009 | + /* Detect if sensor is present and if its revision is supported */ |
2001 | + ret = vd55g1_power_on(dev); | 2010 | + ret = vd55g1_power_on(dev); |
2002 | + if (ret) | 2011 | + if (ret) |
2003 | + return ret; | 2012 | + return ret; |
2004 | + | 2013 | + |
2005 | + ret = vd55g1_subdev_init(sensor); | ||
2006 | + if (ret) { | ||
2007 | + dev_err(dev, "V4l2 init failed : %d", ret); | ||
2008 | + goto err_power_off; | ||
2009 | + } | ||
2010 | + | ||
2011 | + ret = v4l2_async_register_subdev(&sensor->sd); | ||
2012 | + if (ret) { | ||
2013 | + dev_err(dev, "async subdev register failed %d", ret); | ||
2014 | + goto err_subdev; | ||
2015 | + } | ||
2016 | + | ||
2017 | + /* Enable pm_runtime and power off the sensor */ | 2014 | + /* Enable pm_runtime and power off the sensor */ |
2018 | + pm_runtime_set_active(dev); | 2015 | + pm_runtime_set_active(dev); |
2019 | + pm_runtime_get_noresume(dev); | 2016 | + pm_runtime_get_noresume(dev); |
2020 | + pm_runtime_enable(dev); | 2017 | + pm_runtime_enable(dev); |
2021 | + pm_runtime_set_autosuspend_delay(dev, 4000); | 2018 | + pm_runtime_set_autosuspend_delay(dev, 4000); |
2022 | + pm_runtime_use_autosuspend(dev); | 2019 | + pm_runtime_use_autosuspend(dev); |
2023 | + pm_runtime_mark_last_busy(dev); | 2020 | + pm_runtime_mark_last_busy(dev); |
2024 | + | 2021 | + |
2022 | + ret = vd55g1_subdev_init(sensor); | ||
2023 | + if (ret) { | ||
2024 | + dev_err(dev, "V4l2 init failed : %d", ret); | ||
2025 | + goto err_power_off; | ||
2026 | + } | ||
2027 | + | ||
2028 | + ret = v4l2_async_register_subdev(&sensor->sd); | ||
2029 | + if (ret) { | ||
2030 | + dev_err(dev, "async subdev register failed %d", ret); | ||
2031 | + goto err_subdev; | ||
2032 | + } | ||
2033 | + | ||
2025 | + return 0; | 2034 | + return 0; |
2026 | + | 2035 | + |
2027 | +err_subdev: | 2036 | +err_subdev: |
2028 | + vd55g1_subdev_cleanup(sensor); | 2037 | + vd55g1_subdev_cleanup(sensor); |
2029 | +err_power_off: | 2038 | +err_power_off: |
2039 | + pm_runtime_disable(dev); | ||
2040 | + pm_runtime_put_noidle(dev); | ||
2030 | + vd55g1_power_off(dev); | 2041 | + vd55g1_power_off(dev); |
2031 | + | 2042 | + |
2032 | + return ret; | 2043 | + return ret; |
2033 | +} | 2044 | +} |
2034 | + | 2045 | + |
... | ... | ||
2041 | + | 2052 | + |
2042 | + pm_runtime_disable(&client->dev); | 2053 | + pm_runtime_disable(&client->dev); |
2043 | + if (!pm_runtime_status_suspended(&client->dev)) | 2054 | + if (!pm_runtime_status_suspended(&client->dev)) |
2044 | + vd55g1_power_off(&client->dev); | 2055 | + vd55g1_power_off(&client->dev); |
2045 | + pm_runtime_set_suspended(&client->dev); | 2056 | + pm_runtime_set_suspended(&client->dev); |
2057 | + pm_runtime_dont_use_autosuspend(&client->dev); | ||
2046 | +} | 2058 | +} |
2047 | + | 2059 | + |
2048 | +static const struct of_device_id vd55g1_dt_ids[] = { | 2060 | +static const struct of_device_id vd55g1_dt_ids[] = { |
2049 | + { .compatible = "st,vd55g1" }, | 2061 | + { .compatible = "st,vd55g1" }, |
2050 | + { /* sentinel */ } | 2062 | + { /* sentinel */ } |
... | ... | diff view generated by jsdifflib |