Last active
February 18, 2024 17:36
-
-
Save justinweiss/666513b32ce054948dc9a5186bb22fcb to your computer and use it in GitHub Desktop.
0001-iio-imu-Add-driver-for-Bosch-BMI260-IMU.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 3f6507504828019e2812df1d7930d782e2ddeb23 Mon Sep 17 00:00:00 2001 | |
From: Justin Weiss <[email protected]> | |
Date: Tue, 13 Feb 2024 21:28:09 -0800 | |
Subject: [PATCH] iio: imu: Add driver for Bosch BMI260 IMU | |
The ultra-low power BMI260 is an IMU consisting of a 16-bit tri-axial | |
gyroscope and a 16-bit tri-axial accelerometer combining precise | |
acceleration, angular rate measurement and intelligent on-chip | |
motion-triggered interrupt features. | |
The driver supports the BMI260 over I2C. It is based on the BMI160 | |
driver, and like that driver supports accelerometer and gyroscope | |
reading, as well as data ready interrupts. | |
--- | |
drivers/iio/imu/Kconfig | 1 + | |
drivers/iio/imu/Makefile | 1 + | |
drivers/iio/imu/bmi260/Kconfig | 21 + | |
drivers/iio/imu/bmi260/Makefile | 6 + | |
drivers/iio/imu/bmi260/bmi260.h | 38 + | |
drivers/iio/imu/bmi260/bmi260_core.c | 980 ++++++++++++++++++ | |
drivers/iio/imu/bmi260/bmi260_i2c.c | 76 ++ | |
drivers/iio/imu/bmi260/third_party/LICENSE | 32 + | |
.../imu/bmi260/third_party/bmi260_config.h | 693 +++++++++++++ | |
9 files changed, 1848 insertions(+) | |
create mode 100644 drivers/iio/imu/bmi260/Kconfig | |
create mode 100644 drivers/iio/imu/bmi260/Makefile | |
create mode 100644 drivers/iio/imu/bmi260/bmi260.h | |
create mode 100644 drivers/iio/imu/bmi260/bmi260_core.c | |
create mode 100644 drivers/iio/imu/bmi260/bmi260_i2c.c | |
create mode 100644 drivers/iio/imu/bmi260/third_party/LICENSE | |
create mode 100644 drivers/iio/imu/bmi260/third_party/bmi260_config.h | |
diff --git a/drivers/iio/imu/Kconfig b/drivers/iio/imu/Kconfig | |
index 52a155ff3250..1797f67c2a57 100644 | |
--- a/drivers/iio/imu/Kconfig | |
+++ b/drivers/iio/imu/Kconfig | |
@@ -53,6 +53,7 @@ config ADIS16480 | |
ADIS16485, ADIS16488 inertial sensors. | |
source "drivers/iio/imu/bmi160/Kconfig" | |
+source "drivers/iio/imu/bmi260/Kconfig" | |
source "drivers/iio/imu/bmi323/Kconfig" | |
source "drivers/iio/imu/bno055/Kconfig" | |
diff --git a/drivers/iio/imu/Makefile b/drivers/iio/imu/Makefile | |
index 7e2d7d5c3b7b..1d833ee7b9d7 100644 | |
--- a/drivers/iio/imu/Makefile | |
+++ b/drivers/iio/imu/Makefile | |
@@ -15,6 +15,7 @@ adis_lib-$(CONFIG_IIO_ADIS_LIB_BUFFER) += adis_buffer.o | |
obj-$(CONFIG_IIO_ADIS_LIB) += adis_lib.o | |
obj-y += bmi160/ | |
+obj-y += bmi260/ | |
obj-y += bmi323/ | |
obj-y += bno055/ | |
diff --git a/drivers/iio/imu/bmi260/Kconfig b/drivers/iio/imu/bmi260/Kconfig | |
new file mode 100644 | |
index 000000000000..5b4e56f28ead | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/Kconfig | |
@@ -0,0 +1,21 @@ | |
+# SPDX-License-Identifier: GPL-2.0-only | |
+# | |
+# BMI260 IMU driver | |
+# | |
+ | |
+config BMI260 | |
+ tristate | |
+ select IIO_BUFFER | |
+ select IIO_TRIGGERED_BUFFER | |
+ | |
+config BMI260_I2C | |
+ tristate "Bosch BMI260 I2C driver" | |
+ depends on I2C | |
+ select BMI260 | |
+ select REGMAP_I2C | |
+ help | |
+ If you say yes here you get support for BMI260 IMU on I2C with | |
+ accelerometer, gyroscope and external BMG260 magnetometer. | |
+ | |
+ This driver can also be built as a module. If so, the module will be | |
+ called bmi260_i2c. | |
diff --git a/drivers/iio/imu/bmi260/Makefile b/drivers/iio/imu/bmi260/Makefile | |
new file mode 100644 | |
index 000000000000..4cb94188e941 | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/Makefile | |
@@ -0,0 +1,6 @@ | |
+# SPDX-License-Identifier: GPL-2.0-only | |
+# | |
+# Makefile for Bosch BMI260 IMU | |
+# | |
+obj-$(CONFIG_BMI260) += bmi260_core.o | |
+obj-$(CONFIG_BMI260_I2C) += bmi260_i2c.o | |
diff --git a/drivers/iio/imu/bmi260/bmi260.h b/drivers/iio/imu/bmi260/bmi260.h | |
new file mode 100644 | |
index 000000000000..171d2759607a | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/bmi260.h | |
@@ -0,0 +1,38 @@ | |
+/* SPDX-License-Identifier: GPL-2.0 */ | |
+#ifndef BMI260_H_ | |
+#define BMI260_H_ | |
+ | |
+#include <linux/iio/iio.h> | |
+#include <linux/regulator/consumer.h> | |
+ | |
+enum bmi260_int_pin { | |
+ BMI260_PIN_INT1, | |
+ BMI260_PIN_INT2 | |
+}; | |
+ | |
+struct bmi260_data { | |
+ struct regmap *regmap; | |
+ struct iio_trigger *trig; | |
+ struct regulator_bulk_data supplies[2]; | |
+ struct iio_mount_matrix orientation; | |
+ enum bmi260_int_pin int_pin; | |
+ | |
+ /* | |
+ * Ensure natural alignment for timestamp if present. | |
+ * Max length needed: 2 * 3 channels + 4 bytes padding + 8 byte ts. | |
+ * If fewer channels are enabled, less space may be needed, as | |
+ * long as the timestamp is still aligned to 8 bytes. | |
+ */ | |
+ __le16 buf[12] __aligned(8); | |
+}; | |
+ | |
+extern const struct regmap_config bmi260_regmap_config; | |
+ | |
+int bmi260_core_probe(struct device *dev, struct regmap *regmap, | |
+ int irq, const char *name); | |
+ | |
+int bmi260_enable_irq(struct regmap *regmap, enum bmi260_int_pin pin, bool enable); | |
+ | |
+int bmi260_probe_trigger(struct iio_dev *indio_dev, int irq, u32 irq_type); | |
+ | |
+#endif /* BMI260_H_ */ | |
diff --git a/drivers/iio/imu/bmi260/bmi260_core.c b/drivers/iio/imu/bmi260/bmi260_core.c | |
new file mode 100644 | |
index 000000000000..8f346ff6de0a | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/bmi260_core.c | |
@@ -0,0 +1,980 @@ | |
+// SPDX-License-Identifier: GPL-2.0 | |
+/* | |
+ * IIO core driver for Bosch BMI260 6-Axis IMU. | |
+ * | |
+ * Copyright (C) 2023, Justin Weiss <[email protected]> | |
+ * | |
+ * This driver is also based on the BMI160 driver, which is: | |
+ * Copyright (c) 2016, Intel Corporation. | |
+ * Copyright (c) 2019, Martin Kelly. | |
+ */ | |
+#include <linux/module.h> | |
+#include <linux/regmap.h> | |
+#include <linux/delay.h> | |
+#include <linux/irq.h> | |
+#include <linux/property.h> | |
+#include <linux/regulator/consumer.h> | |
+#include <linux/acpi.h> | |
+ | |
+#include <linux/iio/iio.h> | |
+#include <linux/iio/triggered_buffer.h> | |
+#include <linux/iio/trigger_consumer.h> | |
+#include <linux/iio/buffer.h> | |
+#include <linux/iio/sysfs.h> | |
+#include <linux/iio/trigger.h> | |
+ | |
+#include "bmi260.h" | |
+#include "third_party/bmi260_config.h" | |
+ | |
+#define BMI260_REG_CHIP_ID 0x00 | |
+#define BMI260_CHIP_ID_VAL 0x27 /* 0x24 for BMI270 */ | |
+ | |
+#define BMI260_REG_PMU_STATUS 0x03 | |
+ | |
+/* X axis data low byte address, the rest can be obtained using axis offset */ | |
+#define BMI260_REG_DATA_AUX_XOUT_L 0x04 | |
+#define BMI260_REG_DATA_ACCEL_XOUT_L 0x0C | |
+#define BMI260_REG_DATA_GYRO_XOUT_L 0x12 | |
+ | |
+#define BMI260_REG_INTERNAL_STATUS 0x21 | |
+#define BMI260_STATUS_MESSAGE_MASK GENMASK(3, 0) | |
+ | |
+#define BMI260_REG_ACCEL_CONFIG 0x40 | |
+#define BMI260_ACCEL_CONFIG_ODR_MASK GENMASK(3, 0) | |
+#define BMI260_ACCEL_CONFIG_BWP_MASK GENMASK(6, 4) | |
+ | |
+#define BMI260_REG_ACCEL_RANGE 0x41 | |
+#define BMI260_ACCEL_RANGE_MASK GENMASK(1, 0) | |
+#define BMI260_ACCEL_RANGE_2G 0x00 | |
+#define BMI260_ACCEL_RANGE_4G 0x01 | |
+#define BMI260_ACCEL_RANGE_8G 0x02 | |
+#define BMI260_ACCEL_RANGE_16G 0x03 | |
+ | |
+#define BMI260_REG_GYRO_CONFIG 0x42 | |
+#define BMI260_GYRO_CONFIG_ODR_MASK GENMASK(3, 0) | |
+#define BMI260_GYRO_CONFIG_BWP_MASK GENMASK(5, 4) | |
+ | |
+#define BMI260_REG_GYRO_RANGE 0x43 | |
+#define BMI260_GYRO_RANGE_MASK GENMASK(2, 0) | |
+#define BMI260_GYRO_RANGE_2000DPS 0x00 | |
+#define BMI260_GYRO_RANGE_1000DPS 0x01 | |
+#define BMI260_GYRO_RANGE_500DPS 0x02 | |
+#define BMI260_GYRO_RANGE_250DPS 0x03 | |
+#define BMI260_GYRO_RANGE_125DPS 0x04 | |
+ | |
+#define BMI260_REG_INIT_CTRL 0x59 | |
+#define BMI260_REG_INIT_DATA 0x5E | |
+ | |
+#define BMI260_REG_PWR_CONF 0x7C | |
+#define BMI260_PWR_CONF_ADV_PWR_SAVE BIT(0) | |
+#define BMI260_PWR_CONF_FIFO_WAKE_UP BIT(1) | |
+#define BMI260_PWR_CONF_FUP_EN BIT(2) | |
+ | |
+#define BMI260_REG_PWR_CTRL 0x7D | |
+#define BMI260_PWR_CTRL_AUX_EN BIT(0) | |
+#define BMI260_PWR_CTRL_GYR_EN BIT(1) | |
+#define BMI260_PWR_CTRL_ACC_EN BIT(2) | |
+#define BMI260_PWR_CTRL_TEMP_EN BIT(3) | |
+ | |
+#define BMI260_REG_CMD 0x7E | |
+#define BMI260_CMD_SOFTRESET 0xB6 | |
+ | |
+#define BMI260_REG_FIFO_CONFIG_1 0x49 | |
+#define BMI260_FIFO_TAG_INT1_LEVEL BIT(0) | |
+#define BMI260_FIFO_TAG_INT2_LEVEL BIT(2) | |
+ | |
+#define BMI260_REG_INT1_IO_CTRL 0x53 | |
+#define BMI260_REG_INT2_IO_CTRL 0x54 | |
+#define BMI260_INT_IO_CTRL_MASK GENMASK(4, 1) | |
+#define BMI260_ACTIVE_HIGH BIT(1) | |
+#define BMI260_OPEN_DRAIN BIT(2) | |
+#define BMI260_OUTPUT_EN BIT(3) | |
+#define BMI260_INPUT_EN BIT(4) | |
+ | |
+#define BMI260_REG_INT_MAP_DATA 0x58 | |
+#define BMI260_INT1_MAP_DRDY_EN BIT(2) | |
+#define BMI260_INT2_MAP_DRDY_EN BIT(6) | |
+ | |
+#define BMI260_REG_DUMMY 0x7F | |
+ | |
+#define BMI260_NORMAL_WRITE_USLEEP 2 | |
+#define BMI260_SUSPENDED_WRITE_USLEEP 450 | |
+#define BMI260_SOFTRESET_USLEEP 2000 | |
+#define BMI260_INIT_USLEEP 22000 | |
+ | |
+#define BMI260_CHANNEL(_type, _axis, _index) { \ | |
+ .type = _type, \ | |
+ .modified = 1, \ | |
+ .channel2 = IIO_MOD_##_axis, \ | |
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ | |
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ | |
+ BIT(IIO_CHAN_INFO_SAMP_FREQ), \ | |
+ .scan_index = _index, \ | |
+ .scan_type = { \ | |
+ .sign = 's', \ | |
+ .realbits = 16, \ | |
+ .storagebits = 16, \ | |
+ .endianness = IIO_LE, \ | |
+ }, \ | |
+ .ext_info = bmi260_ext_info, \ | |
+} | |
+ | |
+/* scan indexes follow DATA register order */ | |
+enum bmi260_scan_axis { | |
+ BMI260_SCAN_AUX_X = 0, | |
+ BMI260_SCAN_AUX_Y, | |
+ BMI260_SCAN_AUX_Z, | |
+ BMI260_SCAN_AUX_R, | |
+ BMI260_SCAN_ACCEL_X, | |
+ BMI260_SCAN_ACCEL_Y, | |
+ BMI260_SCAN_ACCEL_Z, | |
+ BMI260_SCAN_GYRO_X, | |
+ BMI260_SCAN_GYRO_Y, | |
+ BMI260_SCAN_GYRO_Z, | |
+ BMI260_SCAN_TIMESTAMP, | |
+}; | |
+ | |
+enum bmi260_sensor_type { | |
+ BMI260_ACCEL = 0, | |
+ BMI260_GYRO, | |
+ BMI260_AUX, | |
+ BMI260_NUM_SENSORS /* must be last */ | |
+}; | |
+ | |
+const struct regmap_config bmi260_regmap_config = { | |
+ .reg_bits = 8, | |
+ .val_bits = 8, | |
+}; | |
+EXPORT_SYMBOL_NS(bmi260_regmap_config, IIO_BMI260); | |
+ | |
+struct bmi260_regs { | |
+ u8 data; /* LSB byte register for X-axis */ | |
+ u8 config; | |
+ u8 config_odr_mask; | |
+ u8 config_bwp_mask; | |
+ u8 range; | |
+}; | |
+ | |
+static struct bmi260_regs bmi260_regs[] = { | |
+ [BMI260_ACCEL] = { | |
+ .data = BMI260_REG_DATA_ACCEL_XOUT_L, | |
+ .config = BMI260_REG_ACCEL_CONFIG, | |
+ .config_odr_mask = BMI260_ACCEL_CONFIG_ODR_MASK, | |
+ .config_bwp_mask = BMI260_ACCEL_CONFIG_BWP_MASK, | |
+ .range = BMI260_REG_ACCEL_RANGE, | |
+ }, | |
+ [BMI260_GYRO] = { | |
+ .data = BMI260_REG_DATA_GYRO_XOUT_L, | |
+ .config = BMI260_REG_GYRO_CONFIG, | |
+ .config_odr_mask = BMI260_GYRO_CONFIG_ODR_MASK, | |
+ .config_bwp_mask = BMI260_GYRO_CONFIG_BWP_MASK, | |
+ .range = BMI260_REG_GYRO_RANGE, | |
+ }, | |
+}; | |
+ | |
+struct bmi260_scale { | |
+ u8 bits; | |
+ int uscale; | |
+}; | |
+ | |
+struct bmi260_odr { | |
+ u8 bits; | |
+ int odr; | |
+ int uodr; | |
+}; | |
+ | |
+static const struct bmi260_scale bmi260_accel_scale[] = { | |
+ { BMI260_ACCEL_RANGE_2G, 598}, | |
+ { BMI260_ACCEL_RANGE_4G, 1197}, | |
+ { BMI260_ACCEL_RANGE_8G, 2394}, | |
+ { BMI260_ACCEL_RANGE_16G, 4788}, | |
+}; | |
+ | |
+static const struct bmi260_scale bmi260_gyro_scale[] = { | |
+ { BMI260_GYRO_RANGE_2000DPS, 1065}, | |
+ { BMI260_GYRO_RANGE_1000DPS, 532}, | |
+ { BMI260_GYRO_RANGE_500DPS, 266}, | |
+ { BMI260_GYRO_RANGE_250DPS, 133}, | |
+ { BMI260_GYRO_RANGE_125DPS, 66}, | |
+}; | |
+ | |
+struct bmi260_scale_item { | |
+ const struct bmi260_scale *tbl; | |
+ int num; | |
+}; | |
+ | |
+static const struct bmi260_scale_item bmi260_scale_table[] = { | |
+ [BMI260_ACCEL] = { | |
+ .tbl = bmi260_accel_scale, | |
+ .num = ARRAY_SIZE(bmi260_accel_scale), | |
+ }, | |
+ [BMI260_GYRO] = { | |
+ .tbl = bmi260_gyro_scale, | |
+ .num = ARRAY_SIZE(bmi260_gyro_scale), | |
+ }, | |
+}; | |
+ | |
+static const struct bmi260_odr bmi260_accel_odr[] = { | |
+ {0x01, 0, 781250}, | |
+ {0x02, 1, 562500}, | |
+ {0x03, 3, 125000}, | |
+ {0x04, 6, 250000}, | |
+ {0x05, 12, 500000}, | |
+ {0x06, 25, 0}, | |
+ {0x07, 50, 0}, | |
+ {0x08, 100, 0}, | |
+ {0x09, 200, 0}, | |
+ {0x0A, 400, 0}, | |
+ {0x0B, 800, 0}, | |
+ {0x0C, 1600, 0}, | |
+}; | |
+ | |
+static const struct bmi260_odr bmi260_gyro_odr[] = { | |
+ {0x06, 25, 0}, | |
+ {0x07, 50, 0}, | |
+ {0x08, 100, 0}, | |
+ {0x09, 200, 0}, | |
+ {0x0A, 400, 0}, | |
+ {0x0B, 800, 0}, | |
+ {0x0C, 1600, 0}, | |
+ {0x0D, 3200, 0}, | |
+}; | |
+ | |
+struct bmi260_odr_item { | |
+ const struct bmi260_odr *tbl; | |
+ int num; | |
+}; | |
+ | |
+static const struct bmi260_odr_item bmi260_odr_table[] = { | |
+ [BMI260_ACCEL] = { | |
+ .tbl = bmi260_accel_odr, | |
+ .num = ARRAY_SIZE(bmi260_accel_odr), | |
+ }, | |
+ [BMI260_GYRO] = { | |
+ .tbl = bmi260_gyro_odr, | |
+ .num = ARRAY_SIZE(bmi260_gyro_odr), | |
+ }, | |
+}; | |
+ | |
+#ifdef CONFIG_ACPI | |
+/* | |
+ * Support for getting accelerometer information from ACPI nodes. | |
+ * Based off of the bmc150 implementation. | |
+ */ | |
+static bool bmi260_apply_acpi_orientation(struct device *dev, | |
+ struct iio_mount_matrix *orientation) | |
+{ | |
+ struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | |
+ struct iio_dev *indio_dev = dev_get_drvdata(dev); | |
+ struct acpi_device *adev = ACPI_COMPANION(dev); | |
+ char *name, *alt_name, *label, *str; | |
+ union acpi_object *obj, *elements; | |
+ acpi_status status; | |
+ int i, j, val[3]; | |
+ | |
+ if (!adev) | |
+ return false; | |
+ | |
+ alt_name = "ROMS"; | |
+ label = "accel-display"; | |
+ | |
+ if (acpi_has_method(adev->handle, alt_name)) { | |
+ name = alt_name; | |
+ indio_dev->label = label; | |
+ } else { | |
+ return false; | |
+ } | |
+ | |
+ status = acpi_evaluate_object(adev->handle, name, NULL, &buffer); | |
+ if (ACPI_FAILURE(status)) { | |
+ dev_warn(dev, "Failed to get ACPI mount matrix: %d\n", status); | |
+ return false; | |
+ } | |
+ | |
+ obj = buffer.pointer; | |
+ if (obj->type != ACPI_TYPE_PACKAGE || obj->package.count != 3) | |
+ goto unknown_format; | |
+ | |
+ elements = obj->package.elements; | |
+ for (i = 0; i < 3; i++) { | |
+ if (elements[i].type != ACPI_TYPE_STRING) | |
+ goto unknown_format; | |
+ | |
+ str = elements[i].string.pointer; | |
+ if (sscanf(str, "%d %d %d", &val[0], &val[1], &val[2]) != 3) | |
+ goto unknown_format; | |
+ | |
+ for (j = 0; j < 3; j++) { | |
+ switch (val[j]) { | |
+ case -1: str = "-1"; break; | |
+ case 0: str = "0"; break; | |
+ case 1: str = "1"; break; | |
+ default: goto unknown_format; | |
+ } | |
+ orientation->rotation[i * 3 + j] = str; | |
+ } | |
+ } | |
+ | |
+ kfree(buffer.pointer); | |
+ return true; | |
+ | |
+unknown_format: | |
+ dev_warn(dev, "Unknown ACPI mount matrix format, ignoring\n"); | |
+ kfree(buffer.pointer); | |
+ return false; | |
+} | |
+ | |
+#else | |
+static bool bmi260_apply_acpi_orientation(struct device *dev, | |
+ struct iio_mount_matrix *orientation) | |
+{ | |
+ return false; | |
+} | |
+#endif | |
+ | |
+static const struct iio_mount_matrix * | |
+bmi260_get_mount_matrix(const struct iio_dev *indio_dev, | |
+ const struct iio_chan_spec *chan) | |
+{ | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ | |
+ return &data->orientation; | |
+} | |
+ | |
+static const struct iio_chan_spec_ext_info bmi260_ext_info[] = { | |
+ IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bmi260_get_mount_matrix), | |
+ { } | |
+}; | |
+ | |
+static const struct iio_chan_spec bmi260_channels[] = { | |
+ BMI260_CHANNEL(IIO_ACCEL, X, BMI260_SCAN_ACCEL_X), | |
+ BMI260_CHANNEL(IIO_ACCEL, Y, BMI260_SCAN_ACCEL_Y), | |
+ BMI260_CHANNEL(IIO_ACCEL, Z, BMI260_SCAN_ACCEL_Z), | |
+ BMI260_CHANNEL(IIO_ANGL_VEL, X, BMI260_SCAN_GYRO_X), | |
+ BMI260_CHANNEL(IIO_ANGL_VEL, Y, BMI260_SCAN_GYRO_Y), | |
+ BMI260_CHANNEL(IIO_ANGL_VEL, Z, BMI260_SCAN_GYRO_Z), | |
+ IIO_CHAN_SOFT_TIMESTAMP(BMI260_SCAN_TIMESTAMP), | |
+}; | |
+ | |
+static enum bmi260_sensor_type bmi260_to_sensor(enum iio_chan_type iio_type) | |
+{ | |
+ switch (iio_type) { | |
+ case IIO_ACCEL: | |
+ return BMI260_ACCEL; | |
+ case IIO_ANGL_VEL: | |
+ return BMI260_GYRO; | |
+ default: | |
+ return -EINVAL; | |
+ } | |
+} | |
+ | |
+static | |
+int bmi260_set_scale(struct bmi260_data *data, enum bmi260_sensor_type t, | |
+ int uscale) | |
+{ | |
+ int i; | |
+ | |
+ for (i = 0; i < bmi260_scale_table[t].num; i++) | |
+ if (bmi260_scale_table[t].tbl[i].uscale == uscale) | |
+ break; | |
+ | |
+ if (i == bmi260_scale_table[t].num) | |
+ return -EINVAL; | |
+ | |
+ return regmap_write(data->regmap, bmi260_regs[t].range, | |
+ bmi260_scale_table[t].tbl[i].bits); | |
+} | |
+ | |
+static | |
+int bmi260_get_scale(struct bmi260_data *data, enum bmi260_sensor_type t, | |
+ int *uscale) | |
+{ | |
+ int i, ret, val; | |
+ | |
+ ret = regmap_read(data->regmap, bmi260_regs[t].range, &val); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ for (i = 0; i < bmi260_scale_table[t].num; i++) | |
+ if (bmi260_scale_table[t].tbl[i].bits == val) { | |
+ *uscale = bmi260_scale_table[t].tbl[i].uscale; | |
+ return 0; | |
+ } | |
+ | |
+ return -EINVAL; | |
+} | |
+ | |
+static int bmi260_get_data(struct bmi260_data *data, int chan_type, | |
+ int axis, int *val) | |
+{ | |
+ u8 reg; | |
+ int ret; | |
+ __le16 sample; | |
+ enum bmi260_sensor_type t = bmi260_to_sensor(chan_type); | |
+ | |
+ reg = bmi260_regs[t].data + (axis - IIO_MOD_X) * sizeof(sample); | |
+ | |
+ ret = regmap_bulk_read(data->regmap, reg, &sample, sizeof(sample)); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ *val = sign_extend32(le16_to_cpu(sample), 15); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static | |
+int bmi260_set_odr(struct bmi260_data *data, enum bmi260_sensor_type t, | |
+ int odr, int uodr) | |
+{ | |
+ int i; | |
+ | |
+ for (i = 0; i < bmi260_odr_table[t].num; i++) | |
+ if (bmi260_odr_table[t].tbl[i].odr == odr && | |
+ bmi260_odr_table[t].tbl[i].uodr == uodr) | |
+ break; | |
+ | |
+ if (i >= bmi260_odr_table[t].num) | |
+ return -EINVAL; | |
+ | |
+ return regmap_update_bits(data->regmap, | |
+ bmi260_regs[t].config, | |
+ bmi260_regs[t].config_odr_mask, | |
+ bmi260_odr_table[t].tbl[i].bits); | |
+} | |
+ | |
+static int bmi260_get_odr(struct bmi260_data *data, enum bmi260_sensor_type t, | |
+ int *odr, int *uodr) | |
+{ | |
+ int i, val, ret; | |
+ | |
+ ret = regmap_read(data->regmap, bmi260_regs[t].config, &val); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ val &= bmi260_regs[t].config_odr_mask; | |
+ | |
+ for (i = 0; i < bmi260_odr_table[t].num; i++) | |
+ if (val == bmi260_odr_table[t].tbl[i].bits) | |
+ break; | |
+ | |
+ if (i >= bmi260_odr_table[t].num) | |
+ return -EINVAL; | |
+ | |
+ *odr = bmi260_odr_table[t].tbl[i].odr; | |
+ *uodr = bmi260_odr_table[t].tbl[i].uodr; | |
+ | |
+ return 0; | |
+} | |
+ | |
+static irqreturn_t bmi260_trigger_handler(int irq, void *p) | |
+{ | |
+ struct iio_poll_func *pf = p; | |
+ struct iio_dev *indio_dev = pf->indio_dev; | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ int i, ret, j = 0, base = BMI260_REG_DATA_AUX_XOUT_L; | |
+ __le16 sample; | |
+ | |
+ for_each_set_bit(i, indio_dev->active_scan_mask, | |
+ indio_dev->masklength) { | |
+ ret = regmap_bulk_read(data->regmap, base + i * sizeof(sample), | |
+ &sample, sizeof(sample)); | |
+ if (ret) | |
+ goto done; | |
+ data->buf[j++] = sample; | |
+ } | |
+ | |
+ iio_push_to_buffers_with_timestamp(indio_dev, data->buf, pf->timestamp); | |
+done: | |
+ iio_trigger_notify_done(indio_dev->trig); | |
+ return IRQ_HANDLED; | |
+} | |
+ | |
+static int bmi260_read_raw(struct iio_dev *indio_dev, | |
+ struct iio_chan_spec const *chan, | |
+ int *val, int *val2, long mask) | |
+{ | |
+ int ret; | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ | |
+ switch (mask) { | |
+ case IIO_CHAN_INFO_RAW: | |
+ ret = bmi260_get_data(data, chan->type, chan->channel2, val); | |
+ if (ret) | |
+ return ret; | |
+ return IIO_VAL_INT; | |
+ case IIO_CHAN_INFO_SCALE: | |
+ *val = 0; | |
+ ret = bmi260_get_scale(data, | |
+ bmi260_to_sensor(chan->type), val2); | |
+ return ret ? ret : IIO_VAL_INT_PLUS_MICRO; | |
+ case IIO_CHAN_INFO_SAMP_FREQ: | |
+ ret = bmi260_get_odr(data, bmi260_to_sensor(chan->type), | |
+ val, val2); | |
+ return ret ? ret : IIO_VAL_INT_PLUS_MICRO; | |
+ default: | |
+ return -EINVAL; | |
+ } | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int bmi260_write_raw(struct iio_dev *indio_dev, | |
+ struct iio_chan_spec const *chan, | |
+ int val, int val2, long mask) | |
+{ | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ | |
+ switch (mask) { | |
+ case IIO_CHAN_INFO_SCALE: | |
+ return bmi260_set_scale(data, | |
+ bmi260_to_sensor(chan->type), val2); | |
+ case IIO_CHAN_INFO_SAMP_FREQ: | |
+ return bmi260_set_odr(data, bmi260_to_sensor(chan->type), | |
+ val, val2); | |
+ default: | |
+ return -EINVAL; | |
+ } | |
+ | |
+ return 0; | |
+} | |
+ | |
+static | |
+IIO_CONST_ATTR(in_accel_sampling_frequency_available, | |
+ "0.78125 1.5625 3.125 6.25 12.5 25 50 100 200 400 800 1600"); | |
+static | |
+IIO_CONST_ATTR(in_anglvel_sampling_frequency_available, | |
+ "25 50 100 200 400 800 1600 3200"); | |
+static | |
+IIO_CONST_ATTR(in_accel_scale_available, | |
+ "0.000598 0.001197 0.002394 0.004788"); | |
+static | |
+IIO_CONST_ATTR(in_anglvel_scale_available, | |
+ "0.001065 0.000532 0.000266 0.000133 0.000066"); | |
+ | |
+static struct attribute *bmi260_attrs[] = { | |
+ &iio_const_attr_in_accel_sampling_frequency_available.dev_attr.attr, | |
+ &iio_const_attr_in_anglvel_sampling_frequency_available.dev_attr.attr, | |
+ &iio_const_attr_in_accel_scale_available.dev_attr.attr, | |
+ &iio_const_attr_in_anglvel_scale_available.dev_attr.attr, | |
+ NULL, | |
+}; | |
+ | |
+static const struct attribute_group bmi260_attrs_group = { | |
+ .attrs = bmi260_attrs, | |
+}; | |
+ | |
+static const struct iio_info bmi260_info = { | |
+ .read_raw = bmi260_read_raw, | |
+ .write_raw = bmi260_write_raw, | |
+ .attrs = &bmi260_attrs_group, | |
+}; | |
+ | |
+static int bmi260_write_conf_reg(struct regmap *regmap, unsigned int reg, | |
+ unsigned int mask, unsigned int bits, | |
+ unsigned int write_usleep) | |
+{ | |
+ int ret; | |
+ unsigned int val; | |
+ | |
+ ret = regmap_read(regmap, reg, &val); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ val = (val & ~mask) | bits; | |
+ | |
+ ret = regmap_write(regmap, reg, val); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ /* | |
+ * We need to wait after writing before we can write again. See the | |
+ * datasheet, page 93. | |
+ */ | |
+ usleep_range(write_usleep, write_usleep + 1000); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int bmi260_config_pin(struct regmap *regmap, enum bmi260_int_pin pin, | |
+ bool level_triggered, u8 irq_mask, | |
+ unsigned long write_usleep) | |
+{ | |
+ int ret; | |
+ struct device *dev = regmap_get_device(regmap); | |
+ unsigned int ctrl_reg; | |
+ unsigned int drdy_val; | |
+ unsigned int level_val; | |
+ u8 int_out_ctrl_bits; | |
+ const char *pin_name; | |
+ | |
+ switch (pin) { | |
+ case BMI260_PIN_INT1: | |
+ ctrl_reg = BMI260_REG_INT1_IO_CTRL; | |
+ drdy_val = BMI260_INT1_MAP_DRDY_EN; | |
+ level_val = BMI260_FIFO_TAG_INT1_LEVEL; | |
+ break; | |
+ case BMI260_PIN_INT2: | |
+ ctrl_reg = BMI260_REG_INT2_IO_CTRL; | |
+ drdy_val = BMI260_INT2_MAP_DRDY_EN; | |
+ level_val = BMI260_FIFO_TAG_INT2_LEVEL; | |
+ break; | |
+ } | |
+ | |
+ /* | |
+ * Enable the requested pin with the right settings: | |
+ * - Push-pull/open-drain | |
+ * - Active low/high | |
+ */ | |
+ int_out_ctrl_bits = BMI260_OUTPUT_EN | BMI260_INPUT_EN; | |
+ int_out_ctrl_bits |= irq_mask; | |
+ | |
+ ret = bmi260_write_conf_reg(regmap, ctrl_reg, | |
+ BMI260_INT_IO_CTRL_MASK, int_out_ctrl_bits, | |
+ write_usleep); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ /* Set level/edge triggered */ | |
+ if (level_triggered) { | |
+ ret = bmi260_write_conf_reg(regmap, BMI260_REG_FIFO_CONFIG_1, | |
+ level_val, level_val, | |
+ write_usleep); | |
+ if (ret) | |
+ return ret; | |
+ } | |
+ | |
+ /* Map interrupts to the requested pin. */ | |
+ ret = bmi260_write_conf_reg(regmap, BMI260_REG_INT_MAP_DATA, | |
+ drdy_val, drdy_val, | |
+ write_usleep); | |
+ if (ret) { | |
+ switch (pin) { | |
+ case BMI260_PIN_INT1: | |
+ pin_name = "INT1"; | |
+ break; | |
+ case BMI260_PIN_INT2: | |
+ pin_name = "INT2"; | |
+ break; | |
+ } | |
+ dev_err(dev, "Failed to configure %s IRQ pin", pin_name); | |
+ } | |
+ | |
+ return ret; | |
+} | |
+ | |
+int bmi260_enable_irq(struct regmap *regmap, enum bmi260_int_pin pin, bool enable) | |
+{ | |
+ unsigned int enable_bit = 0; | |
+ unsigned int mask = 0; | |
+ | |
+ switch (pin) { | |
+ case BMI260_PIN_INT1: | |
+ mask = BMI260_INT1_MAP_DRDY_EN; | |
+ break; | |
+ case BMI260_PIN_INT2: | |
+ mask = BMI260_INT2_MAP_DRDY_EN; | |
+ break; | |
+ } | |
+ | |
+ if (enable) | |
+ enable_bit = mask; | |
+ | |
+ return bmi260_write_conf_reg(regmap, BMI260_REG_INT_MAP_DATA, | |
+ mask, enable_bit, | |
+ BMI260_NORMAL_WRITE_USLEEP); | |
+} | |
+EXPORT_SYMBOL_NS(bmi260_enable_irq, IIO_BMI260); | |
+ | |
+static int bmi260_get_irq(struct fwnode_handle *fwnode, enum bmi260_int_pin *pin) | |
+{ | |
+ int irq; | |
+ | |
+ /* Use INT1 if possible, otherwise fall back to INT2. */ | |
+ irq = fwnode_irq_get_byname(fwnode, "INT1"); | |
+ if (irq > 0) { | |
+ *pin = BMI260_PIN_INT1; | |
+ return irq; | |
+ } | |
+ | |
+ irq = fwnode_irq_get_byname(fwnode, "INT2"); | |
+ if (irq > 0) | |
+ *pin = BMI260_PIN_INT2; | |
+ | |
+ return irq; | |
+} | |
+ | |
+static int bmi260_config_device_irq(struct iio_dev *indio_dev, int irq_type, | |
+ enum bmi260_int_pin pin) | |
+{ | |
+ bool open_drain; | |
+ u8 irq_mask; | |
+ bool level_triggered = true; | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ struct device *dev = regmap_get_device(data->regmap); | |
+ | |
+ /* Edge-triggered, active-low is the default if we set all zeroes. */ | |
+ if (irq_type == IRQF_TRIGGER_RISING) { | |
+ irq_mask = BMI260_ACTIVE_HIGH; | |
+ level_triggered = false; | |
+ } else if (irq_type == IRQF_TRIGGER_FALLING) { | |
+ irq_mask = 0; | |
+ level_triggered = false; | |
+ } else if (irq_type == IRQF_TRIGGER_HIGH) { | |
+ irq_mask = BMI260_ACTIVE_HIGH; | |
+ } else if (irq_type == IRQF_TRIGGER_LOW) { | |
+ irq_mask = 0; | |
+ } else { | |
+ dev_err(&indio_dev->dev, | |
+ "Invalid interrupt type 0x%x specified\n", irq_type); | |
+ return -EINVAL; | |
+ } | |
+ | |
+ open_drain = device_property_read_bool(dev, "drive-open-drain"); | |
+ | |
+ if (open_drain) | |
+ irq_mask |= BMI260_OPEN_DRAIN; | |
+ | |
+ return bmi260_config_pin(data->regmap, pin, level_triggered, irq_mask, | |
+ BMI260_NORMAL_WRITE_USLEEP); | |
+} | |
+ | |
+static int bmi260_setup_irq(struct iio_dev *indio_dev, int irq, | |
+ enum bmi260_int_pin pin) | |
+{ | |
+ struct irq_data *desc; | |
+ u32 irq_type; | |
+ int ret; | |
+ | |
+ desc = irq_get_irq_data(irq); | |
+ if (!desc) { | |
+ dev_err(&indio_dev->dev, "Could not find IRQ %d\n", irq); | |
+ return -EINVAL; | |
+ } | |
+ | |
+ irq_type = irqd_get_trigger_type(desc); | |
+ | |
+ ret = bmi260_config_device_irq(indio_dev, irq_type, pin); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ return bmi260_probe_trigger(indio_dev, irq, irq_type); | |
+} | |
+ | |
+static int bmi260_chip_init(struct bmi260_data *data) | |
+{ | |
+ int ret; | |
+ unsigned int val; | |
+ struct device *dev = regmap_get_device(data->regmap); | |
+ | |
+ ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies); | |
+ if (ret) { | |
+ dev_err(dev, "Failed to enable regulators: %d\n", ret); | |
+ return ret; | |
+ } | |
+ | |
+ ret = regmap_write(data->regmap, BMI260_REG_CMD, BMI260_CMD_SOFTRESET); | |
+ if (ret) | |
+ goto disable_regulator; | |
+ | |
+ usleep_range(BMI260_SOFTRESET_USLEEP, BMI260_SOFTRESET_USLEEP + 1); | |
+ | |
+ ret = regmap_read(data->regmap, BMI260_REG_CHIP_ID, &val); | |
+ if (ret) { | |
+ dev_err(dev, "Error reading chip id\n"); | |
+ goto disable_regulator; | |
+ } | |
+ if (val != BMI260_CHIP_ID_VAL) { | |
+ dev_err(dev, "Wrong chip id, got %x expected %x\n", | |
+ val, BMI260_CHIP_ID_VAL); | |
+ ret = -ENODEV; | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ ret = bmi260_write_conf_reg(data->regmap, BMI260_REG_PWR_CONF, | |
+ BMI260_PWR_CONF_ADV_PWR_SAVE, false, | |
+ BMI260_SUSPENDED_WRITE_USLEEP); | |
+ if (ret) { | |
+ dev_err(dev, "Error disabling advanced power saving\n"); | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ /* Upload the config file */ | |
+ ret = regmap_write(data->regmap, BMI260_REG_INIT_CTRL, 0); | |
+ if (ret) { | |
+ dev_err(dev, "Error preparing for config upload\n"); | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ ret = regmap_raw_write(data->regmap, BMI260_REG_INIT_DATA, bmi260_config_file, ARRAY_SIZE(bmi260_config_file)); | |
+ if (ret) { | |
+ dev_err(dev, "Error uploading config\n"); | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ ret = regmap_write(data->regmap, BMI260_REG_INIT_CTRL, 1); | |
+ if (ret) { | |
+ dev_err(dev, "Error finalizing config upload\n"); | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ usleep_range(BMI260_INIT_USLEEP, BMI260_INIT_USLEEP + 1); | |
+ | |
+ ret = regmap_read(data->regmap, BMI260_REG_INTERNAL_STATUS, &val); | |
+ if (ret) { | |
+ dev_err(dev, "Error reading chip status\n"); | |
+ goto disable_regulator; | |
+ } | |
+ if ((val & BMI260_STATUS_MESSAGE_MASK) != 0x01) { | |
+ dev_err(dev, "Chip failed to init\n"); | |
+ ret = -ENODEV; | |
+ goto disable_regulator; | |
+ } | |
+ | |
+ /* Enable accel and gyro */ | |
+ ret = regmap_update_bits(data->regmap, BMI260_REG_PWR_CTRL, | |
+ BMI260_PWR_CTRL_ACC_EN | BMI260_PWR_CTRL_GYR_EN, | |
+ BMI260_PWR_CTRL_ACC_EN | BMI260_PWR_CTRL_GYR_EN); | |
+ if (ret) | |
+ goto disable_regulator; | |
+ | |
+ return 0; | |
+ | |
+disable_regulator: | |
+ regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies); | |
+ return ret; | |
+} | |
+ | |
+static int bmi260_data_rdy_trigger_set_state(struct iio_trigger *trig, | |
+ bool enable) | |
+{ | |
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ | |
+ return bmi260_enable_irq(data->regmap, data->int_pin, enable); | |
+} | |
+static const struct iio_trigger_ops bmi260_trigger_ops = { | |
+ .set_trigger_state = &bmi260_data_rdy_trigger_set_state, | |
+}; | |
+ | |
+int bmi260_probe_trigger(struct iio_dev *indio_dev, int irq, u32 irq_type) | |
+{ | |
+ struct bmi260_data *data = iio_priv(indio_dev); | |
+ int ret; | |
+ | |
+ data->trig = devm_iio_trigger_alloc(&indio_dev->dev, "%s-dev%d", | |
+ indio_dev->name, | |
+ iio_device_id(indio_dev)); | |
+ | |
+ if (data->trig == NULL) | |
+ return -ENOMEM; | |
+ | |
+ ret = devm_request_irq(&indio_dev->dev, irq, | |
+ &iio_trigger_generic_data_rdy_poll, | |
+ irq_type, "bmi260", data->trig); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ data->trig->dev.parent = regmap_get_device(data->regmap); | |
+ data->trig->ops = &bmi260_trigger_ops; | |
+ iio_trigger_set_drvdata(data->trig, indio_dev); | |
+ | |
+ ret = devm_iio_trigger_register(&indio_dev->dev, data->trig); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ indio_dev->trig = iio_trigger_get(data->trig); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static void bmi260_chip_uninit(void *data) | |
+{ | |
+ struct bmi260_data *bmi_data = data; | |
+ struct device *dev = regmap_get_device(bmi_data->regmap); | |
+ int ret; | |
+ | |
+ /* Disable accel and gyro */ | |
+ regmap_update_bits(bmi_data->regmap, BMI260_REG_PWR_CTRL, | |
+ BMI260_PWR_CTRL_ACC_EN | BMI260_PWR_CTRL_GYR_EN, | |
+ 0); | |
+ | |
+ ret = regulator_bulk_disable(ARRAY_SIZE(bmi_data->supplies), | |
+ bmi_data->supplies); | |
+ if (ret) | |
+ dev_err(dev, "Failed to disable regulators: %d\n", ret); | |
+} | |
+ | |
+int bmi260_core_probe(struct device *dev, struct regmap *regmap, | |
+ int irq, const char *name) | |
+{ | |
+ struct iio_dev *indio_dev; | |
+ struct bmi260_data *data; | |
+ enum bmi260_int_pin int_pin = BMI260_PIN_INT1; | |
+ int ret; | |
+ | |
+ indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); | |
+ if (!indio_dev) | |
+ return -ENOMEM; | |
+ | |
+ data = iio_priv(indio_dev); | |
+ dev_set_drvdata(dev, indio_dev); | |
+ data->regmap = regmap; | |
+ | |
+ data->supplies[0].supply = "vdd"; | |
+ data->supplies[1].supply = "vddio"; | |
+ ret = devm_regulator_bulk_get(dev, | |
+ ARRAY_SIZE(data->supplies), | |
+ data->supplies); | |
+ if (ret) { | |
+ dev_err(dev, "Failed to get regulators: %d\n", ret); | |
+ return ret; | |
+ } | |
+ | |
+ if (!bmi260_apply_acpi_orientation(dev, &data->orientation)) { | |
+ ret = iio_read_mount_matrix(dev, &data->orientation); | |
+ if (ret) | |
+ return ret; | |
+ } | |
+ | |
+ ret = bmi260_chip_init(data); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ ret = devm_add_action_or_reset(dev, bmi260_chip_uninit, data); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ indio_dev->channels = bmi260_channels; | |
+ indio_dev->num_channels = ARRAY_SIZE(bmi260_channels); | |
+ indio_dev->name = name; | |
+ indio_dev->modes = INDIO_DIRECT_MODE; | |
+ indio_dev->info = &bmi260_info; | |
+ | |
+ ret = devm_iio_triggered_buffer_setup(dev, indio_dev, | |
+ iio_pollfunc_store_time, | |
+ bmi260_trigger_handler, NULL); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ if (!irq) { | |
+ irq = bmi260_get_irq(dev_fwnode(dev), &int_pin); | |
+ } | |
+ | |
+ if (irq > 0) { | |
+ data->int_pin = int_pin; | |
+ ret = bmi260_setup_irq(indio_dev, irq, int_pin); | |
+ if (ret) | |
+ dev_err(&indio_dev->dev, "Failed to setup IRQ %d\n", | |
+ irq); | |
+ } else { | |
+ dev_info(&indio_dev->dev, "Not setting up IRQ trigger\n"); | |
+ } | |
+ | |
+ return devm_iio_device_register(dev, indio_dev); | |
+} | |
+EXPORT_SYMBOL_NS_GPL(bmi260_core_probe, IIO_BMI260); | |
+ | |
+MODULE_AUTHOR("Justin Weiss <[email protected]>"); | |
+MODULE_DESCRIPTION("Bosch BMI260 driver"); | |
+MODULE_LICENSE("GPL v2"); | |
diff --git a/drivers/iio/imu/bmi260/bmi260_i2c.c b/drivers/iio/imu/bmi260/bmi260_i2c.c | |
new file mode 100644 | |
index 000000000000..d57828af4bb6 | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/bmi260_i2c.c | |
@@ -0,0 +1,76 @@ | |
+// SPDX-License-Identifier: GPL-2.0 | |
+/* | |
+ * I2C driver for Bosch BMI260 IMU. | |
+ * | |
+ * Copyright (C) 2023, Justin Weiss | |
+ * | |
+ * This driver is also based on the BMI160 driver, which is: | |
+ * Copyright (c) 2016, Intel Corporation. | |
+ * Copyright (c) 2019, Martin Kelly. | |
+ */ | |
+#include <linux/i2c.h> | |
+#include <linux/mod_devicetable.h> | |
+#include <linux/module.h> | |
+#include <linux/regmap.h> | |
+#include <linux/version.h> | |
+ | |
+#include "bmi260.h" | |
+ | |
+static int bmi260_i2c_probe(struct i2c_client *client) | |
+{ | |
+ const struct i2c_device_id *id = i2c_client_get_device_id(client); | |
+ struct regmap *regmap; | |
+ const char *name; | |
+ | |
+ regmap = devm_regmap_init_i2c(client, &bmi260_regmap_config); | |
+ if (IS_ERR(regmap)) { | |
+ dev_err(&client->dev, "Failed to register i2c regmap: %pe\n", | |
+ regmap); | |
+ return PTR_ERR(regmap); | |
+ } | |
+ | |
+ if (id) | |
+ name = id->name; | |
+ else | |
+ name = dev_name(&client->dev); | |
+ | |
+ return bmi260_core_probe(&client->dev, regmap, client->irq, name); | |
+} | |
+ | |
+static const struct i2c_device_id bmi260_i2c_id[] = { | |
+ {"bmi260", 0}, | |
+ {} | |
+}; | |
+MODULE_DEVICE_TABLE(i2c, bmi260_i2c_id); | |
+ | |
+static const struct acpi_device_id bmi260_acpi_match[] = { | |
+ {"BOSC0260", 0}, | |
+ {"BMI0260", 0}, | |
+ {"BOSC0160", 0}, | |
+ {"BMI0160", 0}, | |
+ {"10EC5280", 0}, | |
+ { }, | |
+}; | |
+MODULE_DEVICE_TABLE(acpi, bmi260_acpi_match); | |
+ | |
+static const struct of_device_id bmi260_of_match[] = { | |
+ { .compatible = "bosch,bmi260" }, | |
+ { }, | |
+}; | |
+MODULE_DEVICE_TABLE(of, bmi260_of_match); | |
+ | |
+static struct i2c_driver bmi260_i2c_driver = { | |
+ .driver = { | |
+ .name = "bmi260_i2c", | |
+ .acpi_match_table = bmi260_acpi_match, | |
+ .of_match_table = bmi260_of_match, | |
+ }, | |
+ .probe = bmi260_i2c_probe, | |
+ .id_table = bmi260_i2c_id, | |
+}; | |
+module_i2c_driver(bmi260_i2c_driver); | |
+ | |
+MODULE_AUTHOR("Justin Weiss <[email protected]>"); | |
+MODULE_DESCRIPTION("BMI260 I2C driver"); | |
+MODULE_LICENSE("GPL v2"); | |
+MODULE_IMPORT_NS(IIO_BMI260); | |
diff --git a/drivers/iio/imu/bmi260/third_party/LICENSE b/drivers/iio/imu/bmi260/third_party/LICENSE | |
new file mode 100644 | |
index 000000000000..cfb347b17ee8 | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/third_party/LICENSE | |
@@ -0,0 +1,32 @@ | |
+/* | |
+ * Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved. | |
+ * | |
+ * BSD-3-Clause | |
+ * | |
+ * Redistribution and use in source and binary forms, with or without | |
+ * modification, are permitted provided that the following conditions are met: | |
+ * | |
+ * 1. Redistributions of source code must retain the above copyright | |
+ * notice, this list of conditions and the following disclaimer. | |
+ * | |
+ * 2. Redistributions in binary form must reproduce the above copyright | |
+ * notice, this list of conditions and the following disclaimer in the | |
+ * documentation and/or other materials provided with the distribution. | |
+ * | |
+ * 3. Neither the name of the copyright holder nor the names of its | |
+ * contributors may be used to endorse or promote products derived from | |
+ * this software without specific prior written permission. | |
+ * | |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | |
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | |
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | |
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
+ * POSSIBILITY OF SUCH DAMAGE. | |
+ */ | |
\ No newline at end of file | |
diff --git a/drivers/iio/imu/bmi260/third_party/bmi260_config.h b/drivers/iio/imu/bmi260/third_party/bmi260_config.h | |
new file mode 100644 | |
index 000000000000..1309c1bcd4cf | |
--- /dev/null | |
+++ b/drivers/iio/imu/bmi260/third_party/bmi260_config.h | |
@@ -0,0 +1,693 @@ | |
+// SPDX-License-Identifier: BSD-3-Clause | |
+/* | |
+ * Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved. | |
+ * | |
+ * Use of this source code is governed by a BSD-style license that can be | |
+ * found in the LICENSE file. | |
+ */ | |
+ | |
+const unsigned char bmi260_config_file[] = { | |
+ 0xc8, 0x2e, 0x00, 0x2e, 0x80, 0x2e, 0x63, 0xb3, 0xc8, 0x2e, 0x00, 0x2e, | |
+ 0x80, 0x2e, 0x15, 0x03, 0x80, 0x2e, 0xbb, 0xb4, 0x80, 0x2e, 0x91, 0x03, | |
+ 0xc8, 0x2e, 0x00, 0x2e, 0x80, 0x2e, 0xe7, 0xb3, 0x50, 0x30, 0x21, 0x2e, | |
+ 0x59, 0xf5, 0x10, 0x30, 0x21, 0x2e, 0x4a, 0xf1, 0x21, 0x2e, 0x6a, 0xf5, | |
+ 0x80, 0x2e, 0xe0, 0x01, 0x0d, 0x0d, 0x01, 0x00, 0x22, 0x00, 0x76, 0x00, | |
+ 0x00, 0x10, 0x00, 0x10, 0xc8, 0x00, 0x01, 0x1c, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0xfd, 0x2d, 0xe4, 0x78, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x00, 0x00, | |
+ 0x88, 0x00, 0x05, 0xe0, 0xaa, 0x38, 0x05, 0xe0, 0x90, 0x30, 0x86, 0x00, | |
+ 0x30, 0x0a, 0x80, 0x40, 0x10, 0x27, 0xe8, 0x73, 0x04, 0x30, 0x00, 0x02, | |
+ 0x00, 0x01, 0x00, 0x30, 0x10, 0x0b, 0x09, 0x08, 0xfa, 0x00, 0x96, 0x00, | |
+ 0x4b, 0x09, 0x11, 0x00, 0x11, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x07, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x01, | |
+ 0xe6, 0x78, 0x84, 0x00, 0x9c, 0x6c, 0x07, 0x00, 0x64, 0x75, 0xaa, 0x7e, | |
+ 0x5f, 0x05, 0xbe, 0x0a, 0x5f, 0x05, 0x96, 0xe8, 0xef, 0x41, 0x01, 0x00, | |
+ 0x0c, 0x00, 0x0c, 0x00, 0x4a, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x0c, 0x00, | |
+ 0xf0, 0x3c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, | |
+ 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xa1, 0x01, 0x8f, 0x01, | |
+ 0x9d, 0x01, 0x8b, 0x01, 0x00, 0x0c, 0xff, 0x0f, 0x00, 0x04, 0xc0, 0x00, | |
+ 0x5b, 0xf5, 0x74, 0x01, 0x1e, 0xf2, 0xfd, 0xf5, 0xfc, 0xf5, 0x6f, 0x01, | |
+ 0x77, 0x01, 0x80, 0x00, 0xa0, 0x00, 0x5f, 0xff, 0x00, 0x08, 0x00, 0xf8, | |
+ 0x7a, 0x01, 0x85, 0x01, 0x7f, 0x01, 0x84, 0x01, 0x4c, 0x04, 0xe8, 0x03, | |
+ 0xff, 0x7f, 0xb8, 0x7e, 0xe1, 0x7a, 0x81, 0x01, 0x7c, 0x01, 0x7e, 0x01, | |
+ 0xc8, 0x00, 0xcb, 0x00, 0xcb, 0x00, 0xd2, 0x00, 0x88, 0x01, 0x69, 0xf5, | |
+ 0xe0, 0x00, 0x3f, 0xff, 0x19, 0xf4, 0x58, 0xf5, 0x66, 0xf5, 0x64, 0xf5, | |
+ 0xc0, 0xf1, 0xba, 0xf1, 0xa0, 0x00, 0xa6, 0x01, 0xf7, 0x00, 0xf9, 0x00, | |
+ 0xb7, 0x01, 0xff, 0x3f, 0xff, 0xfb, 0x00, 0x38, 0x00, 0x30, 0xb8, 0x01, | |
+ 0xbf, 0x01, 0xc1, 0x01, 0xc7, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x95, 0x01, | |
+ 0x74, 0xf7, 0x00, 0x40, 0xff, 0x00, 0x00, 0x80, 0x7c, 0x0f, 0xeb, 0x00, | |
+ 0x7f, 0xff, 0xc2, 0xf5, 0x68, 0xf7, 0xb3, 0xf1, 0x76, 0x0f, 0x6a, 0x0f, | |
+ 0x70, 0x0f, 0x8f, 0x0f, 0x58, 0xf7, 0x5b, 0xf7, 0x92, 0x0f, 0x86, 0x00, | |
+ 0x81, 0x0f, 0x94, 0x0f, 0xc6, 0xf1, 0x8e, 0x0f, 0x6c, 0xf7, 0x00, 0xe0, | |
+ 0x00, 0xff, 0xd1, 0xf5, 0x96, 0x0f, 0x99, 0x0f, 0xff, 0x03, 0x00, 0xfc, | |
+ 0xf0, 0x3f, 0x8b, 0x00, 0x90, 0x00, 0x8f, 0x00, 0x95, 0x00, 0x92, 0x00, | |
+ 0x98, 0x00, 0x8d, 0x00, 0xa2, 0x00, 0xb9, 0x00, 0x2d, 0xf5, 0xca, 0xf5, | |
+ 0x75, 0x01, 0x20, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x1a, 0x24, 0x22, 0x00, 0x80, 0x2e, 0x00, 0xb0, 0x17, 0x52, 0x00, 0x2e, | |
+ 0x60, 0x40, 0x41, 0x40, 0x0d, 0xbc, 0x98, 0xbc, 0xc0, 0x2e, 0x01, 0x0a, | |
+ 0x0f, 0xb8, 0x19, 0x52, 0x53, 0x3c, 0x52, 0x40, 0x40, 0x40, 0x4b, 0x00, | |
+ 0x82, 0x16, 0x26, 0xb9, 0x01, 0xb8, 0x41, 0x40, 0x10, 0x08, 0x97, 0xb8, | |
+ 0x01, 0x08, 0xc0, 0x2e, 0x11, 0x30, 0x01, 0x08, 0x43, 0x86, 0x25, 0x40, | |
+ 0x04, 0x40, 0xd8, 0xbe, 0x2c, 0x0b, 0x22, 0x11, 0x54, 0x42, 0x03, 0x80, | |
+ 0x4b, 0x0e, 0xf6, 0x2f, 0xb8, 0x2e, 0x1b, 0x50, 0x10, 0x50, 0x1d, 0x52, | |
+ 0x05, 0x2e, 0xd5, 0x00, 0xfb, 0x7f, 0x00, 0x2e, 0x13, 0x40, 0x93, 0x42, | |
+ 0x41, 0x0e, 0xfb, 0x2f, 0x98, 0x2e, 0x0b, 0x03, 0x98, 0x2e, 0x87, 0xcf, | |
+ 0x01, 0x2e, 0x6e, 0x01, 0x00, 0xb2, 0xfb, 0x6f, 0x0b, 0x2f, 0x01, 0x2e, | |
+ 0x69, 0xf7, 0xb1, 0x3f, 0x01, 0x08, 0x01, 0x30, 0xf0, 0x5f, 0x23, 0x2e, | |
+ 0x6e, 0x01, 0x21, 0x2e, 0x69, 0xf7, 0x80, 0x2e, 0x29, 0x02, 0xf0, 0x5f, | |
+ 0xb8, 0x2e, 0x01, 0x2e, 0xc0, 0xf8, 0x03, 0x2e, 0xfc, 0xf5, 0x1f, 0x54, | |
+ 0x21, 0x56, 0x82, 0x08, 0x0b, 0x2e, 0x69, 0xf7, 0xcb, 0x0a, 0x23, 0x58, | |
+ 0x80, 0x90, 0xdd, 0xbe, 0x4c, 0x08, 0x5f, 0xb9, 0x59, 0x22, 0x80, 0x90, | |
+ 0x07, 0x2f, 0x03, 0x34, 0xc3, 0x08, 0xf2, 0x3a, 0x0a, 0x08, 0x02, 0x35, | |
+ 0xc0, 0x90, 0x4a, 0x0a, 0x48, 0x22, 0xc0, 0x2e, 0x23, 0x2e, 0xfc, 0xf5, | |
+ 0x03, 0x2e, 0x77, 0x01, 0x43, 0x40, 0xbf, 0xbc, 0x37, 0xbc, 0x30, 0x50, | |
+ 0x40, 0xb2, 0x0c, 0xb8, 0xe0, 0x7f, 0xfb, 0x7f, 0x01, 0x30, 0x23, 0x2f, | |
+ 0x01, 0x2e, 0x7c, 0x00, 0x00, 0xb2, 0x04, 0x2f, 0x04, 0x30, 0x98, 0x2e, | |
+ 0x7f, 0x02, 0x29, 0x2e, 0x7c, 0x00, 0x3b, 0xbc, 0xbc, 0xbc, 0x0f, 0xb8, | |
+ 0x9d, 0xb8, 0x23, 0x2e, 0x78, 0x01, 0xd0, 0x7f, 0x98, 0x2e, 0x77, 0xb1, | |
+ 0x10, 0x25, 0xd0, 0x6f, 0x00, 0x90, 0x06, 0x2f, 0xfb, 0x6f, 0xe0, 0x6f, | |
+ 0x22, 0x30, 0xd0, 0x5f, 0x4a, 0x08, 0x80, 0x2e, 0x95, 0xcf, 0xfb, 0x6f, | |
+ 0xe0, 0x6f, 0x12, 0x30, 0xd0, 0x5f, 0x4a, 0x08, 0x80, 0x2e, 0x95, 0xcf, | |
+ 0xe0, 0x6f, 0x98, 0x2e, 0x95, 0xcf, 0x11, 0x30, 0x23, 0x2e, 0x7c, 0x00, | |
+ 0xfb, 0x6f, 0xd0, 0x5f, 0xb8, 0x2e, 0x29, 0x50, 0x25, 0x52, 0x11, 0x42, | |
+ 0x00, 0x2e, 0x27, 0x52, 0x01, 0x42, 0x01, 0x30, 0x2b, 0x54, 0x11, 0x42, | |
+ 0x42, 0x0e, 0xfc, 0x2f, 0xb8, 0x2e, 0x2d, 0x54, 0x00, 0x2e, 0x83, 0x40, | |
+ 0xbd, 0x84, 0x18, 0x1a, 0x80, 0x40, 0x13, 0x2f, 0xc0, 0x90, 0x22, 0x2f, | |
+ 0x03, 0x35, 0x03, 0x0f, 0x0a, 0x2f, 0x09, 0x2e, 0x7e, 0x01, 0x00, 0xb3, | |
+ 0x01, 0x2f, 0x04, 0xa8, 0x04, 0x2f, 0x00, 0x30, 0x80, 0x42, 0x21, 0x2e, | |
+ 0x7f, 0x01, 0xb8, 0x2e, 0x83, 0x42, 0xc0, 0x2e, 0x23, 0x2e, 0x7f, 0x01, | |
+ 0x02, 0x35, 0x82, 0x0e, 0x0d, 0x2f, 0x03, 0x3b, 0x03, 0x00, 0x0c, 0xa8, | |
+ 0x09, 0x2f, 0x2f, 0x58, 0x3b, 0x81, 0x3d, 0x86, 0x04, 0x41, 0xc2, 0x42, | |
+ 0xc8, 0x84, 0x01, 0x87, 0x01, 0x42, 0x83, 0x42, 0xb8, 0x2e, 0xb8, 0x2e, | |
+ 0x01, 0x2e, 0x86, 0x01, 0x01, 0x86, 0x13, 0x25, 0xd2, 0x40, 0x50, 0x50, | |
+ 0xc3, 0x40, 0x23, 0xbd, 0x2f, 0xb9, 0xbc, 0xb9, 0xfb, 0x7f, 0x80, 0xb2, | |
+ 0xe3, 0x7f, 0x0b, 0x30, 0x39, 0x2f, 0x05, 0x2e, 0x7e, 0x00, 0x80, 0x90, | |
+ 0x04, 0x2f, 0x81, 0x84, 0x25, 0x2e, 0x7e, 0x00, 0x37, 0x2e, 0x7f, 0x00, | |
+ 0x41, 0x40, 0x02, 0x40, 0x02, 0x80, 0x94, 0xbc, 0x94, 0xb9, 0x00, 0x40, | |
+ 0x04, 0xbc, 0x21, 0xbd, 0x04, 0xb8, 0x21, 0xb9, 0x07, 0x52, 0xd3, 0x7f, | |
+ 0xc2, 0x7f, 0xb0, 0x7f, 0x98, 0x2e, 0xb3, 0xc0, 0xd1, 0x6f, 0xc2, 0x6f, | |
+ 0x51, 0x28, 0x41, 0x0f, 0x11, 0x30, 0x0d, 0x2f, 0xc2, 0x0e, 0x07, 0x2e, | |
+ 0x7f, 0x00, 0x19, 0x28, 0x04, 0x2f, 0xc0, 0xa6, 0x04, 0x2f, 0x21, 0x2e, | |
+ 0x7f, 0x00, 0x02, 0x2d, 0x21, 0x2e, 0x7f, 0x00, 0x04, 0x2c, 0x02, 0x30, | |
+ 0x02, 0x30, 0x25, 0x2e, 0x7f, 0x00, 0xb0, 0x6f, 0x07, 0x2e, 0x7f, 0x00, | |
+ 0x58, 0x0f, 0xfb, 0x6f, 0xe0, 0x6f, 0xb0, 0x5f, 0x4a, 0x22, 0x80, 0x2e, | |
+ 0x95, 0xcf, 0xe0, 0x6f, 0x01, 0x30, 0x98, 0x2e, 0x95, 0xcf, 0x00, 0x30, | |
+ 0x21, 0x2e, 0x7e, 0x00, 0xfb, 0x6f, 0xb0, 0x5f, 0xb8, 0x2e, 0x03, 0x2e, | |
+ 0xd5, 0x00, 0x16, 0xb8, 0x02, 0x34, 0x4a, 0x0c, 0x21, 0x2e, 0x2d, 0xf5, | |
+ 0xc0, 0x2e, 0x23, 0x2e, 0xd5, 0x00, 0x20, 0x50, 0xf6, 0x7f, 0xe7, 0x7f, | |
+ 0x00, 0x2e, 0x4b, 0x5c, 0x00, 0x2e, 0x87, 0x41, 0xff, 0xbf, 0xff, 0xbb, | |
+ 0xc0, 0x91, 0x02, 0x2f, 0x37, 0x30, 0x2f, 0x2e, 0x69, 0xf5, 0xb8, 0x8f, | |
+ 0x06, 0x32, 0xc7, 0x41, 0xfe, 0x09, 0xc0, 0xb3, 0x04, 0x2f, 0x17, 0x30, | |
+ 0x2f, 0x2e, 0x9c, 0x01, 0x2d, 0x2e, 0x61, 0xf5, 0xf6, 0x6f, 0xe7, 0x6f, | |
+ 0xe0, 0x5f, 0xc8, 0x2e, 0x10, 0x50, 0xfb, 0x7f, 0x98, 0x2e, 0x56, 0xc7, | |
+ 0x98, 0x2e, 0x49, 0xc3, 0x00, 0x30, 0xfb, 0x6f, 0xf0, 0x5f, 0x21, 0x2e, | |
+ 0x7e, 0x00, 0x21, 0x2e, 0xce, 0x00, 0xb8, 0x2e, 0x21, 0x2e, 0x59, 0xf5, | |
+ 0x10, 0x30, 0xc0, 0x2e, 0x21, 0x2e, 0x4a, 0xf1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x9a, 0x01, 0x34, 0x03, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x30, 0x50, 0xe5, 0x7f, 0xf6, 0x7f, 0xd7, 0x7f, 0x00, 0x2e, | |
+ 0x4b, 0x5a, 0x00, 0x2e, 0x46, 0x41, 0x6f, 0xbf, 0x6f, 0xbb, 0x80, 0x91, | |
+ 0x02, 0x2f, 0x36, 0x30, 0x2d, 0x2e, 0x69, 0xf5, 0x46, 0x30, 0x0f, 0x2e, | |
+ 0xa4, 0xf1, 0xbe, 0x09, 0x77, 0x8b, 0x80, 0xb3, 0x06, 0x2f, 0x0d, 0x2e, | |
+ 0xff, 0x00, 0x84, 0xaf, 0x02, 0x2f, 0x16, 0x30, 0x2d, 0x2e, 0xdc, 0x00, | |
+ 0x86, 0x30, 0x46, 0x43, 0x00, 0x2e, 0xf6, 0x6f, 0xe5, 0x6f, 0xd7, 0x6f, | |
+ 0xd0, 0x5f, 0xc8, 0x2e, 0x03, 0x2e, 0x9f, 0x00, 0x1b, 0xbc, 0x60, 0x50, | |
+ 0x9f, 0xbc, 0x0c, 0xb8, 0xf0, 0x7f, 0x40, 0xb2, 0xeb, 0x7f, 0x2b, 0x2f, | |
+ 0x03, 0x2e, 0xfc, 0x00, 0x41, 0x40, 0x01, 0x2e, 0xfd, 0x00, 0x01, 0x1a, | |
+ 0x11, 0x2f, 0x71, 0x58, 0x23, 0x2e, 0xfd, 0x00, 0x10, 0x41, 0xa0, 0x7f, | |
+ 0x38, 0x81, 0x01, 0x41, 0xd0, 0x7f, 0xb1, 0x7f, 0x98, 0x2e, 0x64, 0xcf, | |
+ 0xd0, 0x6f, 0x07, 0x80, 0xa1, 0x6f, 0x11, 0x42, 0x00, 0x2e, 0xb1, 0x6f, | |
+ 0x01, 0x42, 0x11, 0x30, 0x01, 0x2e, 0xb7, 0x01, 0x00, 0xa8, 0x03, 0x30, | |
+ 0xcb, 0x22, 0x4a, 0x25, 0x01, 0x2e, 0xfc, 0x00, 0x3c, 0x89, 0x6f, 0x52, | |
+ 0x07, 0x54, 0x98, 0x2e, 0xc4, 0xce, 0xc1, 0x6f, 0xf0, 0x6f, 0x98, 0x2e, | |
+ 0x95, 0xcf, 0x04, 0x2d, 0x01, 0x30, 0xf0, 0x6f, 0x98, 0x2e, 0x95, 0xcf, | |
+ 0xeb, 0x6f, 0xa0, 0x5f, 0xb8, 0x2e, 0x11, 0x30, 0x81, 0x08, 0x01, 0x2e, | |
+ 0x6a, 0xf7, 0x71, 0x3f, 0x23, 0xbd, 0x01, 0x08, 0x02, 0x0a, 0xc0, 0x2e, | |
+ 0x21, 0x2e, 0x6a, 0xf7, 0x80, 0x2e, 0x00, 0xc1, 0x30, 0x50, 0x98, 0x2e, | |
+ 0xd7, 0x0e, 0x50, 0x32, 0x98, 0x2e, 0x40, 0x03, 0x00, 0x30, 0xf0, 0x7f, | |
+ 0x21, 0x2e, 0x69, 0xf5, 0x00, 0x2e, 0x00, 0x2e, 0xd0, 0x2e, 0x00, 0x2e, | |
+ 0x01, 0x80, 0x08, 0xa2, 0xfb, 0x2f, 0x03, 0x2e, 0x8f, 0x00, 0x01, 0x2e, | |
+ 0x93, 0x00, 0x9f, 0xbc, 0x9f, 0xb8, 0x0f, 0xb8, 0x08, 0x0a, 0x21, 0x2e, | |
+ 0x79, 0x00, 0x98, 0x2e, 0xab, 0xb6, 0x03, 0x2e, 0xa4, 0x01, 0x21, 0x2e, | |
+ 0x7a, 0x00, 0x40, 0xb2, 0x10, 0x2f, 0x01, 0x2e, 0x79, 0x00, 0x00, 0xb2, | |
+ 0x0c, 0x2f, 0x05, 0x2e, 0x8a, 0x00, 0x01, 0x52, 0x98, 0x2e, 0xc7, 0xc1, | |
+ 0xf0, 0x7f, 0x98, 0x2e, 0x46, 0x02, 0x98, 0x2e, 0x34, 0xb2, 0x10, 0x30, | |
+ 0x21, 0x2e, 0x7b, 0x00, 0x01, 0x2e, 0xa0, 0x01, 0x00, 0xb2, 0x07, 0x2f, | |
+ 0x01, 0x2e, 0x7a, 0x00, 0x00, 0xb2, 0x03, 0x2f, 0x03, 0x50, 0x05, 0x52, | |
+ 0x98, 0x2e, 0x07, 0xcc, 0x01, 0x2e, 0x8e, 0x01, 0x00, 0xb2, 0x2c, 0x2f, | |
+ 0x05, 0x2e, 0x8a, 0x00, 0x07, 0x52, 0x98, 0x2e, 0xc7, 0xc1, 0x03, 0x2e, | |
+ 0x9a, 0x01, 0x40, 0xb2, 0xf0, 0x7f, 0x08, 0x2f, 0x01, 0x2e, 0x7a, 0x00, | |
+ 0x00, 0xb2, 0x04, 0x2f, 0x00, 0x30, 0x21, 0x2e, 0x9a, 0x01, 0x98, 0x2e, | |
+ 0x48, 0xb6, 0x01, 0x2e, 0x78, 0x00, 0x00, 0xb2, 0x15, 0x2f, 0x98, 0x2e, | |
+ 0x81, 0xb5, 0x98, 0x2e, 0xb6, 0x03, 0x07, 0x50, 0x98, 0x2e, 0x4d, 0xc3, | |
+ 0x07, 0x50, 0x98, 0x2e, 0x5a, 0xc7, 0x98, 0x2e, 0xb8, 0x02, 0x07, 0x52, | |
+ 0x98, 0x2e, 0xff, 0xc5, 0x21, 0x2e, 0x72, 0x01, 0x98, 0x2e, 0xe6, 0xb2, | |
+ 0x10, 0x30, 0x21, 0x2e, 0x7b, 0x00, 0x01, 0x2e, 0x9c, 0x01, 0x00, 0xb2, | |
+ 0x04, 0x2f, 0x98, 0x2e, 0x29, 0x02, 0x00, 0x30, 0x21, 0x2e, 0x9c, 0x01, | |
+ 0x01, 0x2e, 0xff, 0x00, 0x04, 0xae, 0x0b, 0x2f, 0x01, 0x2e, 0x8e, 0x01, | |
+ 0x00, 0xb2, 0x07, 0x2f, 0x07, 0x52, 0x98, 0x2e, 0x8e, 0x0e, 0x00, 0xb2, | |
+ 0x02, 0x2f, 0x10, 0x30, 0x21, 0x2e, 0xd7, 0x00, 0x01, 0x2e, 0xd7, 0x00, | |
+ 0x00, 0x90, 0x90, 0x2e, 0x2b, 0xb1, 0x01, 0x2e, 0x6c, 0x01, 0x00, 0xb2, | |
+ 0x04, 0x2f, 0x98, 0x2e, 0x2f, 0x0e, 0x00, 0x30, 0x21, 0x2e, 0xdc, 0x00, | |
+ 0x01, 0x2e, 0xdc, 0x00, 0x00, 0xb2, 0x12, 0x2f, 0x01, 0x2e, 0xff, 0x00, | |
+ 0x00, 0x90, 0x02, 0x2f, 0x98, 0x2e, 0x1f, 0x0e, 0x09, 0x2d, 0x98, 0x2e, | |
+ 0x81, 0x0d, 0x01, 0x2e, 0xff, 0x00, 0x04, 0x90, 0x02, 0x2f, 0x50, 0x32, | |
+ 0x98, 0x2e, 0x40, 0x03, 0x00, 0x30, 0x21, 0x2e, 0xdc, 0x00, 0x01, 0x2e, | |
+ 0xd6, 0x00, 0x00, 0xb2, 0x90, 0x2e, 0x43, 0xb1, 0x01, 0x2e, 0xd6, 0x00, | |
+ 0x01, 0x31, 0x01, 0x08, 0x00, 0xb2, 0x04, 0x2f, 0x98, 0x2e, 0x47, 0xcb, | |
+ 0x10, 0x30, 0x21, 0x2e, 0x7b, 0x00, 0x81, 0x30, 0x01, 0x2e, 0xd6, 0x00, | |
+ 0x01, 0x08, 0x00, 0xb2, 0x61, 0x2f, 0x03, 0x2e, 0x89, 0x00, 0x01, 0x2e, | |
+ 0xff, 0x00, 0x98, 0xbc, 0x98, 0xb8, 0x05, 0xb2, 0x11, 0x58, 0x23, 0x2f, | |
+ 0x07, 0x90, 0x0b, 0x54, 0x00, 0x30, 0x37, 0x2f, 0x15, 0x41, 0x04, 0x41, | |
+ 0xdc, 0xbe, 0x44, 0xbe, 0xdc, 0xba, 0x2c, 0x01, 0x61, 0x00, 0x11, 0x56, | |
+ 0x4a, 0x0f, 0x0c, 0x2f, 0xd1, 0x42, 0x94, 0xb8, 0xc1, 0x42, 0x11, 0x30, | |
+ 0x05, 0x2e, 0x6a, 0xf7, 0x2c, 0xbd, 0x2f, 0xb9, 0x80, 0xb2, 0x08, 0x22, | |
+ 0x98, 0x2e, 0xf3, 0x03, 0x21, 0x2d, 0x61, 0x30, 0x23, 0x2e, 0xff, 0x00, | |
+ 0x98, 0x2e, 0xf3, 0x03, 0x00, 0x30, 0x21, 0x2e, 0x5a, 0xf5, 0x18, 0x2d, | |
+ 0xe1, 0x7f, 0x50, 0x30, 0x98, 0x2e, 0x40, 0x03, 0x11, 0x52, 0x09, 0x50, | |
+ 0x50, 0x42, 0x70, 0x30, 0x0f, 0x54, 0x42, 0x42, 0x7e, 0x82, 0xe2, 0x6f, | |
+ 0x80, 0xb2, 0x42, 0x42, 0x05, 0x2f, 0x21, 0x2e, 0xff, 0x00, 0x10, 0x30, | |
+ 0x98, 0x2e, 0xf3, 0x03, 0x03, 0x2d, 0x60, 0x30, 0x21, 0x2e, 0xff, 0x00, | |
+ 0x01, 0x2e, 0xff, 0x00, 0x06, 0x90, 0x18, 0x2f, 0x01, 0x2e, 0x77, 0x00, | |
+ 0x0d, 0x54, 0x09, 0x52, 0xe0, 0x7f, 0x98, 0x2e, 0x7a, 0xc1, 0xe1, 0x6f, | |
+ 0x08, 0x1a, 0x40, 0x30, 0x08, 0x2f, 0x21, 0x2e, 0xff, 0x00, 0x20, 0x30, | |
+ 0x98, 0x2e, 0xe4, 0xb6, 0x50, 0x32, 0x98, 0x2e, 0x40, 0x03, 0x05, 0x2d, | |
+ 0x98, 0x2e, 0x38, 0x0e, 0x00, 0x30, 0x21, 0x2e, 0xff, 0x00, 0x00, 0x30, | |
+ 0x21, 0x2e, 0xd6, 0x00, 0x18, 0x2d, 0x01, 0x2e, 0xff, 0x00, 0x03, 0xaa, | |
+ 0x01, 0x2f, 0x98, 0x2e, 0x45, 0x0e, 0x01, 0x2e, 0xff, 0x00, 0x3f, 0x80, | |
+ 0x03, 0xa2, 0x01, 0x2f, 0x00, 0x2e, 0x02, 0x2d, 0x98, 0x2e, 0x5b, 0x0e, | |
+ 0x30, 0x30, 0x98, 0x2e, 0xf8, 0xb6, 0x00, 0x30, 0x21, 0x2e, 0xd7, 0x00, | |
+ 0x50, 0x32, 0x98, 0x2e, 0x40, 0x03, 0x01, 0x2e, 0x7b, 0x00, 0x00, 0xb2, | |
+ 0x24, 0x2f, 0x98, 0x2e, 0xf5, 0xcb, 0x03, 0x2e, 0x6a, 0x01, 0x13, 0x54, | |
+ 0x01, 0x0a, 0xbb, 0x84, 0x83, 0x86, 0x21, 0x2e, 0x74, 0x01, 0xe0, 0x40, | |
+ 0x15, 0x52, 0xc4, 0x40, 0x82, 0x40, 0xa8, 0xb9, 0x52, 0x42, 0x43, 0xbe, | |
+ 0x53, 0x42, 0x04, 0x0a, 0x50, 0x42, 0xe1, 0x7f, 0xf0, 0x31, 0x41, 0x40, | |
+ 0xf2, 0x6f, 0x25, 0xbd, 0x08, 0x08, 0x02, 0x0a, 0xd0, 0x7f, 0x98, 0x2e, | |
+ 0xa8, 0xcf, 0x06, 0xbc, 0xd1, 0x6f, 0xe2, 0x6f, 0x08, 0x0a, 0x80, 0x42, | |
+ 0x98, 0x2e, 0x07, 0x02, 0x00, 0x30, 0x21, 0x2e, 0xa4, 0x01, 0x21, 0x2e, | |
+ 0xa0, 0x01, 0x21, 0x2e, 0x7b, 0x00, 0x21, 0x2e, 0x8e, 0x01, 0x80, 0x2e, | |
+ 0x08, 0xb0, 0x70, 0x50, 0x0b, 0x2e, 0xa3, 0x01, 0x21, 0x50, 0x03, 0x2e, | |
+ 0x78, 0x01, 0x08, 0x18, 0x3b, 0x54, 0x31, 0x50, 0x94, 0x40, 0x30, 0x00, | |
+ 0x33, 0x52, 0xf0, 0x7f, 0x01, 0x00, 0x4c, 0x16, 0x2c, 0x05, 0xe2, 0x7f, | |
+ 0xcd, 0x16, 0x59, 0x07, 0x97, 0x40, 0xd2, 0x7f, 0x67, 0x04, 0x82, 0x40, | |
+ 0x35, 0x56, 0xab, 0x7f, 0xc4, 0x7f, 0x90, 0x7f, 0xb5, 0x7f, 0xaa, 0x06, | |
+ 0x98, 0x2e, 0x0c, 0xc1, 0x50, 0x25, 0xd0, 0x6f, 0xbb, 0x6f, 0x0b, 0x42, | |
+ 0x3e, 0x80, 0xcb, 0x6f, 0x3b, 0x84, 0xe1, 0x6f, 0x83, 0x40, 0x4b, 0x42, | |
+ 0xc1, 0x86, 0x03, 0x2e, 0xa3, 0x01, 0x83, 0x42, 0x82, 0x84, 0x01, 0x42, | |
+ 0xbc, 0x8e, 0x80, 0x40, 0x00, 0xb2, 0x04, 0x2f, 0x03, 0x2e, 0x7d, 0x01, | |
+ 0x41, 0x82, 0x23, 0x2e, 0x7d, 0x01, 0x67, 0x25, 0xe2, 0x41, 0x2a, 0x0f, | |
+ 0x92, 0x6f, 0xc1, 0x41, 0xe7, 0x7f, 0x37, 0x2f, 0x07, 0x2e, 0x7b, 0x01, | |
+ 0x2b, 0x0e, 0x29, 0x2f, 0x3d, 0x52, 0x02, 0x35, 0x41, 0x40, 0x8a, 0x0e, | |
+ 0x03, 0x30, 0x03, 0x2f, 0x05, 0x2e, 0x7f, 0x01, 0x80, 0xb2, 0x1b, 0x2f, | |
+ 0xc2, 0x35, 0x8a, 0x0e, 0x2f, 0x2f, 0x2f, 0x54, 0x01, 0x30, 0x83, 0x40, | |
+ 0xff, 0x86, 0xc3, 0xa2, 0x02, 0x2f, 0x00, 0x2e, 0x0c, 0x2c, 0x03, 0x30, | |
+ 0x00, 0x90, 0x01, 0x2f, 0x23, 0x2e, 0x7d, 0x01, 0x3d, 0x56, 0xc2, 0x86, | |
+ 0x01, 0x80, 0xc0, 0x42, 0x23, 0x2e, 0x7c, 0x01, 0x13, 0x30, 0xbb, 0x80, | |
+ 0x23, 0x2e, 0x84, 0x01, 0x18, 0x2c, 0x01, 0x42, 0x00, 0x35, 0x21, 0x2e, | |
+ 0x7c, 0x01, 0x13, 0x2d, 0x0a, 0x04, 0x28, 0x1e, 0x21, 0x2e, 0x7b, 0x01, | |
+ 0x10, 0x30, 0x21, 0x30, 0x98, 0x2e, 0x8b, 0x02, 0x0a, 0x2c, 0x03, 0x30, | |
+ 0x0a, 0x00, 0x28, 0x1c, 0x21, 0x2e, 0x7a, 0x01, 0x20, 0x30, 0x11, 0x30, | |
+ 0x98, 0x2e, 0x8b, 0x02, 0x03, 0x30, 0xc3, 0x7f, 0xd6, 0x7f, 0x25, 0x25, | |
+ 0x37, 0x52, 0xe0, 0x6f, 0x98, 0x2e, 0x0c, 0xb7, 0xe1, 0x6f, 0xd0, 0x6f, | |
+ 0x42, 0x40, 0x39, 0x52, 0x98, 0x2e, 0x0c, 0xb7, 0xe1, 0x6f, 0xd0, 0x6f, | |
+ 0x42, 0x40, 0x01, 0x40, 0xf3, 0x6f, 0xd3, 0x00, 0xcb, 0x1e, 0x39, 0x52, | |
+ 0x13, 0x42, 0xe0, 0x7f, 0x98, 0x2e, 0x0c, 0xb7, 0xe0, 0x6f, 0x3e, 0x84, | |
+ 0xf1, 0x6f, 0x82, 0x40, 0x03, 0x40, 0x51, 0x04, 0x59, 0x1c, 0x01, 0x42, | |
+ 0x03, 0x82, 0x00, 0x30, 0x42, 0x40, 0x80, 0xb2, 0x12, 0x2f, 0xc1, 0x6f, | |
+ 0x40, 0x90, 0x10, 0x22, 0x82, 0xac, 0x01, 0x30, 0x04, 0x2f, 0x05, 0x2e, | |
+ 0x7d, 0x01, 0x03, 0x35, 0x13, 0x0e, 0x07, 0x2f, 0x3f, 0x54, 0x86, 0x88, | |
+ 0x39, 0x87, 0x01, 0x43, 0xc1, 0x42, 0xc2, 0x86, 0x81, 0x42, 0xc1, 0x42, | |
+ 0x00, 0x2e, 0xab, 0x6f, 0x90, 0x5f, 0xb8, 0x2e, 0x01, 0x2e, 0x85, 0x01, | |
+ 0x01, 0x80, 0xf0, 0x50, 0x02, 0x40, 0x04, 0x40, 0x1a, 0x25, 0xa3, 0xbe, | |
+ 0x03, 0x40, 0x71, 0x82, 0x12, 0x40, 0xdf, 0xba, 0x42, 0xbe, 0x45, 0x42, | |
+ 0x4f, 0xba, 0xb1, 0xbd, 0x00, 0x40, 0xf1, 0x7f, 0xbf, 0xb8, 0x2f, 0xb9, | |
+ 0x0c, 0xb8, 0x24, 0x7f, 0xd0, 0x7f, 0x31, 0x7f, 0x80, 0xb2, 0xeb, 0x7f, | |
+ 0x08, 0x2f, 0x10, 0x6f, 0x00, 0x90, 0x0b, 0x2f, 0x20, 0x6f, 0x00, 0x90, | |
+ 0x08, 0x2f, 0x30, 0x6f, 0x00, 0x90, 0x05, 0x2f, 0x01, 0x30, 0x23, 0x2e, | |
+ 0x7d, 0x00, 0xd0, 0x6f, 0x98, 0x2e, 0x95, 0xcf, 0x05, 0x2e, 0x7d, 0x00, | |
+ 0x80, 0x90, 0x00, 0x30, 0x41, 0x52, 0x45, 0x56, 0x07, 0x2f, 0x41, 0x58, | |
+ 0x00, 0x2e, 0x10, 0x43, 0x63, 0x0e, 0xfc, 0x2f, 0x81, 0x84, 0x25, 0x2e, | |
+ 0x7d, 0x00, 0x09, 0x2e, 0x85, 0x01, 0x01, 0x85, 0xb0, 0x7f, 0xc0, 0x7f, | |
+ 0x00, 0x2e, 0x82, 0x40, 0x03, 0x41, 0x02, 0x89, 0x24, 0xbd, 0x05, 0x41, | |
+ 0xb1, 0xbd, 0xb1, 0xb9, 0x24, 0xba, 0x54, 0xbd, 0xa3, 0x7f, 0x5c, 0x05, | |
+ 0x24, 0xb9, 0x01, 0x56, 0x43, 0x58, 0x82, 0x7f, 0x95, 0x7f, 0x73, 0x7f, | |
+ 0x64, 0x7f, 0x00, 0x2e, 0xf2, 0x6f, 0x40, 0x7f, 0x51, 0x7f, 0x00, 0x2e, | |
+ 0x90, 0x40, 0xf2, 0x7f, 0x00, 0x90, 0x04, 0x2f, 0x51, 0x6f, 0x00, 0x30, | |
+ 0x40, 0x42, 0x44, 0x2c, 0x62, 0x6f, 0xc1, 0x40, 0x98, 0x2e, 0x74, 0xc0, | |
+ 0x51, 0x6f, 0x00, 0x2e, 0x44, 0x40, 0x00, 0xb3, 0x2c, 0x2f, 0x62, 0x6f, | |
+ 0x95, 0x6f, 0x83, 0x40, 0xc5, 0x0e, 0x07, 0x2f, 0x75, 0x6f, 0x10, 0x30, | |
+ 0x45, 0x41, 0x40, 0xa1, 0x05, 0x30, 0x05, 0x22, 0x18, 0x1a, 0x02, 0x2f, | |
+ 0x00, 0x30, 0x40, 0x42, 0x2b, 0x2d, 0x10, 0x30, 0x20, 0x28, 0x84, 0x6f, | |
+ 0x40, 0x42, 0xc4, 0x0e, 0x24, 0x2f, 0xc0, 0x6f, 0x00, 0x90, 0x21, 0x2f, | |
+ 0x45, 0x6f, 0x10, 0x30, 0x05, 0x15, 0xb3, 0xbd, 0xc4, 0x7f, 0xdc, 0x0a, | |
+ 0x41, 0x58, 0x65, 0x01, 0x45, 0x5c, 0x0b, 0x30, 0x25, 0x1a, 0x00, 0x2f, | |
+ 0x0b, 0x43, 0x01, 0x89, 0x27, 0x2e, 0x73, 0x01, 0x66, 0x0e, 0xf7, 0x2f, | |
+ 0xb0, 0x7f, 0x0e, 0x2d, 0xa2, 0x6f, 0xc2, 0x0e, 0x08, 0x2f, 0x10, 0x30, | |
+ 0x40, 0x42, 0x02, 0x30, 0x74, 0x6f, 0x63, 0x6f, 0x04, 0x41, 0x00, 0xa1, | |
+ 0x02, 0x22, 0xc0, 0x42, 0x00, 0x2e, 0x62, 0x6f, 0x73, 0x6f, 0x40, 0x6f, | |
+ 0x01, 0x80, 0xc1, 0x86, 0x81, 0x84, 0x41, 0x82, 0x03, 0xa2, 0x62, 0x7f, | |
+ 0x73, 0x7f, 0xa5, 0x2f, 0xeb, 0x6f, 0xd0, 0x6f, 0xb1, 0x6f, 0x10, 0x5f, | |
+ 0x80, 0x2e, 0x95, 0xcf, 0x01, 0x2e, 0x87, 0x01, 0x02, 0x40, 0x01, 0x40, | |
+ 0x90, 0x50, 0x2f, 0xbd, 0x93, 0xbc, 0x2f, 0xb9, 0x9c, 0xb8, 0xfb, 0x7f, | |
+ 0xe1, 0x7f, 0x80, 0xb2, 0x0b, 0x30, 0x65, 0x2f, 0x05, 0x2e, 0xce, 0x00, | |
+ 0x47, 0x52, 0x80, 0x90, 0x0b, 0x2f, 0x5b, 0x42, 0x5b, 0x42, 0x81, 0x84, | |
+ 0x25, 0x2e, 0xce, 0x00, 0x37, 0x2e, 0xcf, 0x00, 0x37, 0x2e, 0xd0, 0x00, | |
+ 0x37, 0x2e, 0xd1, 0x00, 0x4b, 0x42, 0x00, 0x2e, 0x03, 0x40, 0x12, 0x40, | |
+ 0x01, 0x40, 0x00, 0x40, 0x0a, 0xbe, 0x27, 0xbd, 0x2e, 0xb8, 0x92, 0xbc, | |
+ 0x18, 0xb9, 0xb9, 0xbd, 0xba, 0xb9, 0x4a, 0xba, 0x07, 0x5a, 0x1a, 0x25, | |
+ 0x17, 0x2e, 0xcf, 0x00, 0x77, 0x82, 0x83, 0x7f, 0xab, 0x7f, 0x75, 0x7f, | |
+ 0x94, 0x7f, 0xd2, 0x7f, 0xc0, 0x7f, 0x98, 0x2e, 0xd1, 0xc3, 0x03, 0x2e, | |
+ 0xcf, 0x00, 0x08, 0x1a, 0xb0, 0x7f, 0x01, 0x30, 0x01, 0x2f, 0x23, 0x2e, | |
+ 0xd1, 0x00, 0x01, 0x2e, 0xd1, 0x00, 0xd1, 0x6f, 0x41, 0x0e, 0x14, 0x2f, | |
+ 0xc1, 0x6f, 0x40, 0xb2, 0x0b, 0x2f, 0x43, 0xb2, 0x09, 0x2f, 0x07, 0x54, | |
+ 0x47, 0x56, 0x98, 0x2e, 0x0b, 0xc4, 0x00, 0x90, 0x06, 0x2f, 0xb1, 0x6f, | |
+ 0x23, 0x2e, 0xd0, 0x00, 0x03, 0x2d, 0xb1, 0x6f, 0x23, 0x2e, 0xd0, 0x00, | |
+ 0xd1, 0x6f, 0x23, 0x2e, 0xd1, 0x00, 0x03, 0x2e, 0xd1, 0x00, 0x41, 0x82, | |
+ 0x23, 0x2e, 0xd1, 0x00, 0x07, 0x50, 0x47, 0x52, 0x12, 0x40, 0x52, 0x42, | |
+ 0x00, 0x2e, 0x12, 0x40, 0x52, 0x42, 0x00, 0x2e, 0x00, 0x40, 0x40, 0x42, | |
+ 0x00, 0x2e, 0x03, 0x2e, 0xd0, 0x00, 0xe0, 0x6f, 0x98, 0x2e, 0x95, 0xcf, | |
+ 0xb1, 0x6f, 0x23, 0x2e, 0xcf, 0x00, 0x06, 0x2d, 0x37, 0x2e, 0xce, 0x00, | |
+ 0xe0, 0x6f, 0x01, 0x30, 0x98, 0x2e, 0x95, 0xcf, 0xfb, 0x6f, 0x70, 0x5f, | |
+ 0xb8, 0x2e, 0xd0, 0x50, 0x80, 0x7f, 0x91, 0x7f, 0xd7, 0x7f, 0xc5, 0x7f, | |
+ 0xb3, 0x7f, 0xa2, 0x7f, 0xe4, 0x7f, 0xf6, 0x7f, 0x7b, 0x7f, 0x00, 0x2e, | |
+ 0x4b, 0x50, 0x00, 0x2e, 0x01, 0x40, 0x9f, 0xbc, 0x9f, 0xb8, 0x40, 0x90, | |
+ 0x02, 0x2f, 0x31, 0x30, 0x23, 0x2e, 0x69, 0xf5, 0x38, 0x82, 0x61, 0x7f, | |
+ 0x20, 0x30, 0x41, 0x40, 0x23, 0x2e, 0xd6, 0x00, 0x03, 0x2e, 0xd6, 0x00, | |
+ 0x08, 0x08, 0x00, 0xb2, 0x0b, 0x2f, 0x49, 0x50, 0x1a, 0x25, 0x12, 0x40, | |
+ 0x32, 0x7f, 0x73, 0x82, 0x12, 0x40, 0x42, 0x7f, 0x00, 0x2e, 0x00, 0x40, | |
+ 0x50, 0x7f, 0x98, 0x2e, 0x6a, 0xd6, 0x01, 0x2e, 0xd6, 0x00, 0x81, 0x30, | |
+ 0x01, 0x08, 0x00, 0xb2, 0x42, 0x2f, 0x03, 0x2e, 0x89, 0x00, 0x01, 0x2e, | |
+ 0x89, 0x00, 0x97, 0xbc, 0x06, 0xbc, 0x9f, 0xb8, 0x0f, 0xb8, 0x00, 0x90, | |
+ 0x23, 0x2e, 0x6d, 0x01, 0x10, 0x30, 0x01, 0x30, 0x2a, 0x2f, 0x03, 0x2e, | |
+ 0xff, 0x00, 0x44, 0xb2, 0x05, 0x2f, 0x47, 0xb2, 0x00, 0x30, 0x2d, 0x2f, | |
+ 0x21, 0x2e, 0xd6, 0x00, 0x2b, 0x2d, 0x03, 0x2e, 0xfd, 0xf5, 0x9e, 0xbc, | |
+ 0x9f, 0xb8, 0x40, 0x90, 0x14, 0x2f, 0x03, 0x2e, 0xfc, 0xf5, 0x99, 0xbc, | |
+ 0x9f, 0xb8, 0x40, 0x90, 0x0e, 0x2f, 0x03, 0x2e, 0x49, 0xf1, 0x4d, 0x54, | |
+ 0x4a, 0x08, 0x40, 0x90, 0x08, 0x2f, 0x98, 0x2e, 0xe4, 0x01, 0x00, 0xb2, | |
+ 0x10, 0x30, 0x03, 0x2f, 0x50, 0x30, 0x21, 0x2e, 0xff, 0x00, 0x10, 0x2d, | |
+ 0x98, 0x2e, 0xe4, 0xb6, 0x00, 0x30, 0x21, 0x2e, 0xd6, 0x00, 0x0a, 0x2d, | |
+ 0x05, 0x2e, 0x69, 0xf7, 0x2d, 0xbd, 0x2f, 0xb9, 0x80, 0xb2, 0x01, 0x2f, | |
+ 0x21, 0x2e, 0xd7, 0x00, 0x23, 0x2e, 0xd6, 0x00, 0x60, 0x6f, 0xe1, 0x31, | |
+ 0x01, 0x42, 0x00, 0x2e, 0xf6, 0x6f, 0xe4, 0x6f, 0x80, 0x6f, 0x91, 0x6f, | |
+ 0xa2, 0x6f, 0xb3, 0x6f, 0xc5, 0x6f, 0xd7, 0x6f, 0x7b, 0x6f, 0x30, 0x5f, | |
+ 0xc8, 0x2e, 0xa0, 0x50, 0x82, 0x7f, 0x90, 0x7f, 0xd7, 0x7f, 0xc5, 0x7f, | |
+ 0xb3, 0x7f, 0xa1, 0x7f, 0xe4, 0x7f, 0xf6, 0x7f, 0x7b, 0x7f, 0x00, 0x2e, | |
+ 0x4b, 0x54, 0x00, 0x2e, 0x80, 0x40, 0x0f, 0xbc, 0x0f, 0xb8, 0x00, 0x90, | |
+ 0x02, 0x2f, 0x30, 0x30, 0x21, 0x2e, 0x69, 0xf5, 0xb7, 0x84, 0x62, 0x7f, | |
+ 0x98, 0x2e, 0xe4, 0x01, 0x00, 0xb2, 0x90, 0x2e, 0x95, 0xb4, 0x03, 0x2e, | |
+ 0x8c, 0x00, 0x07, 0x2e, 0x8e, 0x00, 0x3f, 0xba, 0x05, 0x2e, 0xa0, 0x00, | |
+ 0xa3, 0xbd, 0x9f, 0xb8, 0x01, 0x2e, 0xa0, 0x00, 0x4c, 0x0a, 0xbf, 0xb9, | |
+ 0x04, 0xbe, 0x4b, 0x0a, 0x05, 0x2e, 0xa0, 0x00, 0xcf, 0xb9, 0x01, 0x2e, | |
+ 0x96, 0x00, 0x22, 0xbe, 0xcb, 0x0a, 0x4f, 0xba, 0x03, 0xbc, 0x05, 0x2e, | |
+ 0x98, 0x00, 0xdc, 0x0a, 0x0f, 0xb8, 0x03, 0x2e, 0x90, 0x00, 0x2f, 0xbe, | |
+ 0x18, 0x0a, 0xcf, 0xb9, 0x9f, 0xbc, 0x05, 0x2e, 0x9f, 0x00, 0x9f, 0xb8, | |
+ 0x03, 0x0a, 0x2f, 0xbd, 0x01, 0x0a, 0x2f, 0xb9, 0x82, 0x0a, 0x25, 0x2e, | |
+ 0x78, 0x00, 0x05, 0x2e, 0xc1, 0xf5, 0x2e, 0xbd, 0x2e, 0xb9, 0x01, 0x2e, | |
+ 0x7a, 0x00, 0x31, 0x30, 0x8a, 0x04, 0x00, 0x90, 0x07, 0x2f, 0x01, 0x2e, | |
+ 0xff, 0x00, 0x04, 0xa2, 0x03, 0x2f, 0x01, 0x2e, 0x78, 0x00, 0x00, 0xb2, | |
+ 0x0c, 0x2f, 0x51, 0x50, 0x07, 0x52, 0x98, 0x2e, 0xfc, 0x01, 0x05, 0x2e, | |
+ 0xd8, 0x00, 0x80, 0x90, 0x10, 0x30, 0x01, 0x2f, 0x21, 0x2e, 0xd8, 0x00, | |
+ 0x25, 0x2e, 0x8e, 0x01, 0x98, 0x2e, 0xed, 0x01, 0x00, 0xb2, 0x22, 0x30, | |
+ 0x21, 0x30, 0x03, 0x2f, 0x01, 0x2e, 0x7a, 0x00, 0x00, 0x90, 0x05, 0x2f, | |
+ 0x01, 0x2e, 0x79, 0x00, 0x01, 0xb2, 0x30, 0x30, 0x01, 0x30, 0x41, 0x22, | |
+ 0x01, 0x2e, 0x9b, 0x01, 0x08, 0x1a, 0x0e, 0x2f, 0x23, 0x2e, 0x9b, 0x01, | |
+ 0x33, 0x30, 0x53, 0x50, 0x0b, 0x09, 0x01, 0x40, 0x4f, 0x56, 0x46, 0xbe, | |
+ 0x4b, 0x08, 0x4c, 0x0a, 0x01, 0x42, 0x0a, 0x80, 0x1f, 0x52, 0x01, 0x42, | |
+ 0x00, 0x2e, 0x01, 0x2e, 0x78, 0x00, 0x00, 0xb2, 0x1f, 0x2f, 0x03, 0x2e, | |
+ 0xc0, 0xf5, 0xf0, 0x30, 0x48, 0x08, 0x47, 0xaa, 0x74, 0x30, 0x07, 0x2e, | |
+ 0xdb, 0x00, 0x61, 0x22, 0x4b, 0x1a, 0x05, 0x2f, 0x07, 0x2e, 0x66, 0xf5, | |
+ 0xbf, 0xbd, 0xbf, 0xb9, 0xc0, 0x90, 0x0b, 0x2f, 0x55, 0x56, 0x04, 0x30, | |
+ 0xd4, 0x42, 0xd2, 0x42, 0x81, 0x04, 0x24, 0xbd, 0xfe, 0x80, 0x81, 0x84, | |
+ 0xc4, 0x42, 0x23, 0x2e, 0xdb, 0x00, 0x02, 0x42, 0x02, 0x32, 0x25, 0x2e, | |
+ 0x62, 0xf5, 0x05, 0x2e, 0x6b, 0x01, 0x81, 0x80, 0x21, 0x2e, 0x6b, 0x01, | |
+ 0x62, 0x6f, 0x00, 0x31, 0x80, 0x42, 0x00, 0x2e, 0x05, 0x2e, 0x8a, 0x00, | |
+ 0x0d, 0x50, 0x90, 0x08, 0x80, 0xb2, 0x0b, 0x2f, 0x05, 0x2e, 0xca, 0xf5, | |
+ 0xf0, 0x3e, 0x90, 0x08, 0x25, 0x2e, 0xca, 0xf5, 0x05, 0x2e, 0x59, 0xf5, | |
+ 0xe0, 0x3f, 0x90, 0x08, 0x25, 0x2e, 0x59, 0xf5, 0xf6, 0x6f, 0xe4, 0x6f, | |
+ 0x90, 0x6f, 0xa1, 0x6f, 0xb3, 0x6f, 0xc5, 0x6f, 0xd7, 0x6f, 0x7b, 0x6f, | |
+ 0x82, 0x6f, 0x60, 0x5f, 0xc8, 0x2e, 0xc0, 0x50, 0x80, 0x7f, 0x92, 0x7f, | |
+ 0xd5, 0x7f, 0xc4, 0x7f, 0xb3, 0x7f, 0xa1, 0x7f, 0xe7, 0x7f, 0xf6, 0x7f, | |
+ 0x7b, 0x7f, 0x00, 0x2e, 0x4b, 0x50, 0x00, 0x2e, 0x02, 0x40, 0x2f, 0xbd, | |
+ 0x2f, 0xb9, 0x80, 0x90, 0x02, 0x2f, 0x32, 0x30, 0x25, 0x2e, 0x69, 0xf5, | |
+ 0x37, 0x80, 0x00, 0x2e, 0x00, 0x40, 0x60, 0x7f, 0x98, 0x2e, 0xe4, 0x01, | |
+ 0x63, 0x6f, 0x02, 0x30, 0x62, 0x7f, 0x50, 0x7f, 0x02, 0x32, 0x1f, 0x52, | |
+ 0x80, 0x2e, 0x6e, 0xb5, 0x1a, 0x09, 0x00, 0xb3, 0x14, 0x2f, 0x00, 0xb2, | |
+ 0x03, 0x2f, 0x09, 0x2e, 0x78, 0x00, 0x00, 0x91, 0x0c, 0x2f, 0x43, 0x7f, | |
+ 0x98, 0x2e, 0x32, 0x03, 0x57, 0x50, 0x02, 0x8a, 0x02, 0x32, 0x04, 0x30, | |
+ 0x25, 0x2e, 0x64, 0xf5, 0x1f, 0x52, 0x50, 0x6f, 0x43, 0x6f, 0x44, 0x43, | |
+ 0x25, 0x2e, 0x60, 0xf5, 0xd9, 0x08, 0xc0, 0xb2, 0x6d, 0x2f, 0x98, 0x2e, | |
+ 0xed, 0x01, 0x00, 0xb2, 0x06, 0x2f, 0x01, 0x2e, 0x7a, 0x00, 0x00, 0xb2, | |
+ 0x02, 0x2f, 0x50, 0x6f, 0x00, 0x90, 0x0a, 0x2f, 0x01, 0x2e, 0xda, 0x00, | |
+ 0x00, 0x90, 0x19, 0x2f, 0x10, 0x30, 0x21, 0x2e, 0xda, 0x00, 0x00, 0x30, | |
+ 0x98, 0x2e, 0xcd, 0xb6, 0x13, 0x2d, 0x01, 0x2e, 0xc3, 0xf5, 0x0c, 0xbc, | |
+ 0x0f, 0xb8, 0x12, 0x30, 0x10, 0x04, 0x03, 0xb0, 0x26, 0x25, 0x59, 0x50, | |
+ 0x05, 0x52, 0x98, 0x2e, 0xfc, 0x01, 0x10, 0x30, 0x21, 0x2e, 0xa0, 0x01, | |
+ 0x02, 0x30, 0x60, 0x7f, 0x25, 0x2e, 0xda, 0x00, 0x50, 0x6f, 0x00, 0xb2, | |
+ 0x03, 0x2f, 0x05, 0x2e, 0x79, 0x00, 0x80, 0x90, 0x0e, 0x2f, 0x05, 0x2e, | |
+ 0xd9, 0x00, 0x80, 0x90, 0x2c, 0x2f, 0x11, 0x30, 0x02, 0x30, 0x23, 0x2e, | |
+ 0xd9, 0x00, 0x23, 0x2e, 0x7c, 0x00, 0x25, 0x2e, 0x7d, 0x00, 0x25, 0x2e, | |
+ 0xa5, 0x01, 0x22, 0x2d, 0x05, 0x2e, 0xa5, 0x01, 0x81, 0x82, 0x23, 0x2e, | |
+ 0xa5, 0x01, 0x12, 0x30, 0x4a, 0x08, 0x40, 0xb2, 0x05, 0x2f, 0x03, 0x2e, | |
+ 0x58, 0xf5, 0x98, 0xbc, 0x9e, 0xb8, 0x43, 0x90, 0x10, 0x2f, 0x01, 0x2e, | |
+ 0xc1, 0xf5, 0x0e, 0xbc, 0x0e, 0xb8, 0x32, 0x30, 0x90, 0x04, 0x5b, 0x50, | |
+ 0x01, 0x52, 0x98, 0x2e, 0xfc, 0x01, 0x12, 0x30, 0x25, 0x2e, 0xa4, 0x01, | |
+ 0x00, 0x30, 0x21, 0x2e, 0xd9, 0x00, 0x50, 0x6f, 0x62, 0x7f, 0x00, 0x2e, | |
+ 0x62, 0x6f, 0x80, 0x90, 0x05, 0x2f, 0x02, 0x30, 0x25, 0x2e, 0x9b, 0x01, | |
+ 0x1f, 0x54, 0x25, 0x2e, 0x64, 0xf5, 0x1f, 0x52, 0x23, 0x2e, 0x60, 0xf5, | |
+ 0x02, 0x32, 0x00, 0x90, 0x02, 0x2f, 0x03, 0x30, 0x27, 0x2e, 0xd8, 0x00, | |
+ 0x07, 0x2e, 0x60, 0xf5, 0x1a, 0x09, 0x00, 0x91, 0x90, 0x2e, 0xde, 0xb4, | |
+ 0x19, 0x09, 0x00, 0x91, 0x90, 0x2e, 0xde, 0xb4, 0x80, 0x6f, 0x92, 0x6f, | |
+ 0xa1, 0x6f, 0xb3, 0x6f, 0xc4, 0x6f, 0xd5, 0x6f, 0x7b, 0x6f, 0xf6, 0x6f, | |
+ 0xe7, 0x6f, 0x40, 0x5f, 0xc8, 0x2e, 0x5d, 0x52, 0x00, 0x51, 0x52, 0x40, | |
+ 0x47, 0x40, 0xf8, 0xbc, 0x9c, 0xb9, 0x1a, 0x25, 0x01, 0x2e, 0x9f, 0x00, | |
+ 0xf3, 0x7f, 0x8f, 0xbe, 0x72, 0x88, 0xeb, 0x7f, 0x5f, 0xbb, 0x0b, 0x30, | |
+ 0x78, 0xb8, 0x6b, 0x56, 0xd3, 0x08, 0x70, 0x8a, 0xfc, 0xbf, 0x0b, 0x43, | |
+ 0xc4, 0x7f, 0xfc, 0xbb, 0x1e, 0x0b, 0x21, 0x2e, 0xe1, 0x00, 0x1b, 0x7f, | |
+ 0x4b, 0x43, 0x00, 0xb3, 0xd6, 0x7f, 0xa7, 0x7f, 0xb5, 0x7f, 0x93, 0x7f, | |
+ 0x90, 0x2e, 0x39, 0xb6, 0x01, 0x2e, 0xfb, 0x00, 0x00, 0xb2, 0x0b, 0x2f, | |
+ 0x5f, 0x52, 0x01, 0x2e, 0xf6, 0x00, 0x82, 0x7f, 0x98, 0x2e, 0xbb, 0xcc, | |
+ 0x0b, 0x30, 0x37, 0x2e, 0xfb, 0x00, 0x82, 0x6f, 0x93, 0x6f, 0x1a, 0x25, | |
+ 0xc0, 0xb2, 0x8b, 0x7f, 0x14, 0x2f, 0x26, 0xbc, 0x25, 0xbd, 0x06, 0xb8, | |
+ 0x2f, 0xb9, 0x80, 0xb2, 0x14, 0xb0, 0x0c, 0x2f, 0x61, 0x50, 0x63, 0x54, | |
+ 0x0b, 0x30, 0x0b, 0x2e, 0xa0, 0x00, 0x69, 0x58, 0x1b, 0x42, 0x9b, 0x42, | |
+ 0x6c, 0x09, 0x2b, 0x2e, 0xa0, 0x00, 0x0b, 0x42, 0x8b, 0x42, 0x86, 0x7f, | |
+ 0x73, 0x84, 0x6d, 0x50, 0xd8, 0x08, 0x67, 0x52, 0x07, 0x50, 0x72, 0x7f, | |
+ 0x63, 0x7f, 0x98, 0x2e, 0xc2, 0xc0, 0xd1, 0x6f, 0x62, 0x6f, 0xd1, 0x0a, | |
+ 0x01, 0x2e, 0xf6, 0x00, 0xc5, 0x6f, 0xb4, 0x6f, 0x72, 0x6f, 0x5f, 0x52, | |
+ 0x65, 0x5c, 0x98, 0x2e, 0x06, 0xcd, 0x23, 0x6f, 0x90, 0x6f, 0x61, 0x52, | |
+ 0xc0, 0xb2, 0x04, 0xbd, 0x54, 0x40, 0xaf, 0xb9, 0x45, 0x40, 0xd1, 0x7f, | |
+ 0x02, 0x30, 0x06, 0x2f, 0xc0, 0xb2, 0x02, 0x30, 0x03, 0x2f, 0x63, 0x5c, | |
+ 0x12, 0x30, 0x94, 0x43, 0x85, 0x43, 0x03, 0xbf, 0x6f, 0xbb, 0x80, 0xb3, | |
+ 0x20, 0x2f, 0x06, 0x6f, 0x26, 0x01, 0x16, 0x6f, 0x6e, 0x03, 0x45, 0x42, | |
+ 0xc0, 0x90, 0x29, 0x2e, 0xf7, 0x00, 0x63, 0x52, 0x14, 0x2f, 0x63, 0x5c, | |
+ 0x00, 0x2e, 0x93, 0x41, 0x86, 0x41, 0xe3, 0x04, 0xae, 0x07, 0x80, 0xab, | |
+ 0x04, 0x2f, 0x80, 0x91, 0x0a, 0x2f, 0x86, 0x6f, 0x73, 0x0f, 0x07, 0x2f, | |
+ 0x83, 0x6f, 0xc0, 0xb2, 0x04, 0x2f, 0x54, 0x42, 0x45, 0x42, 0x12, 0x30, | |
+ 0x04, 0x2c, 0x11, 0x30, 0x02, 0x2c, 0x11, 0x30, 0x11, 0x30, 0x02, 0xbc, | |
+ 0x0f, 0xb8, 0xc2, 0x7f, 0x00, 0xb2, 0x0a, 0x2f, 0x01, 0x2e, 0xb7, 0x01, | |
+ 0x05, 0x2e, 0x71, 0x01, 0x10, 0x1a, 0x02, 0x2f, 0x21, 0x2e, 0x71, 0x01, | |
+ 0x03, 0x2d, 0x02, 0x2c, 0x01, 0x30, 0x01, 0x30, 0xf0, 0x6f, 0x98, 0x2e, | |
+ 0x95, 0xcf, 0xc1, 0x6f, 0xa0, 0x6f, 0x98, 0x2e, 0x95, 0xcf, 0xd2, 0x6f, | |
+ 0x1b, 0x52, 0x01, 0x2e, 0xf7, 0x00, 0x82, 0x40, 0x50, 0x42, 0x0c, 0x2c, | |
+ 0x42, 0x42, 0x11, 0x30, 0x23, 0x2e, 0xfb, 0x00, 0x01, 0x30, 0xf0, 0x6f, | |
+ 0x98, 0x2e, 0x95, 0xcf, 0xa0, 0x6f, 0x01, 0x30, 0x98, 0x2e, 0x95, 0xcf, | |
+ 0x00, 0x2e, 0xeb, 0x6f, 0x00, 0x5f, 0xb8, 0x2e, 0x60, 0x51, 0x0a, 0x25, | |
+ 0x36, 0x88, 0xf4, 0x7f, 0xeb, 0x7f, 0x00, 0x32, 0x7b, 0x52, 0x32, 0x30, | |
+ 0x13, 0x30, 0x98, 0x2e, 0x15, 0xcb, 0x0a, 0x25, 0x33, 0x84, 0xd2, 0x7f, | |
+ 0x43, 0x30, 0x07, 0x50, 0x35, 0x52, 0x98, 0x2e, 0x95, 0xc1, 0xd2, 0x6f, | |
+ 0x73, 0x52, 0x98, 0x2e, 0xd7, 0xc7, 0x2a, 0x25, 0xb0, 0x86, 0xc0, 0x7f, | |
+ 0xd3, 0x7f, 0xaf, 0x84, 0x75, 0x50, 0xf1, 0x6f, 0x98, 0x2e, 0x4d, 0xc8, | |
+ 0x2a, 0x25, 0xae, 0x8a, 0xaa, 0x88, 0xf2, 0x6e, 0x77, 0x50, 0xc1, 0x6f, | |
+ 0xd3, 0x6f, 0xf4, 0x7f, 0x98, 0x2e, 0xb6, 0xc8, 0xe0, 0x6e, 0x00, 0xb2, | |
+ 0x32, 0x2f, 0x7d, 0x54, 0x83, 0x86, 0xf1, 0x6f, 0xc3, 0x7f, 0x04, 0x30, | |
+ 0x30, 0x30, 0xf4, 0x7f, 0xd0, 0x7f, 0xb2, 0x7f, 0xe3, 0x30, 0xc5, 0x6f, | |
+ 0x56, 0x40, 0x45, 0x41, 0x28, 0x08, 0x03, 0x14, 0x0e, 0xb4, 0x08, 0xbc, | |
+ 0x82, 0x40, 0x10, 0x0a, 0x79, 0x54, 0x26, 0x05, 0x91, 0x7f, 0x44, 0x28, | |
+ 0xa3, 0x7f, 0x98, 0x2e, 0xd9, 0xc0, 0x08, 0xb9, 0x33, 0x30, 0x53, 0x09, | |
+ 0xc1, 0x6f, 0xd3, 0x6f, 0xf4, 0x6f, 0x83, 0x17, 0x47, 0x40, 0x6c, 0x15, | |
+ 0xb2, 0x6f, 0xbe, 0x09, 0x75, 0x0b, 0x90, 0x42, 0x45, 0x42, 0x51, 0x0e, | |
+ 0x32, 0xbc, 0x02, 0x89, 0xa1, 0x6f, 0x7e, 0x86, 0xf4, 0x7f, 0xd0, 0x7f, | |
+ 0xb2, 0x7f, 0x04, 0x30, 0x91, 0x6f, 0xd6, 0x2f, 0xeb, 0x6f, 0xa0, 0x5e, | |
+ 0xb8, 0x2e, 0x01, 0x2e, 0x77, 0xf7, 0x09, 0xbc, 0x0f, 0xb8, 0x00, 0xb2, | |
+ 0x10, 0x50, 0xfb, 0x7f, 0x10, 0x30, 0x0b, 0x2f, 0x03, 0x2e, 0x8a, 0x00, | |
+ 0x96, 0xbc, 0x9f, 0xb8, 0x40, 0xb2, 0x05, 0x2f, 0x03, 0x2e, 0x68, 0xf7, | |
+ 0x9e, 0xbc, 0x9f, 0xb8, 0x40, 0xb2, 0x07, 0x2f, 0x03, 0x2e, 0xfe, 0x00, | |
+ 0x41, 0x90, 0x01, 0x2f, 0x98, 0x2e, 0xcd, 0xb6, 0x03, 0x2c, 0x00, 0x30, | |
+ 0x21, 0x2e, 0xfe, 0x00, 0xfb, 0x6f, 0xf0, 0x5f, 0xb8, 0x2e, 0x20, 0x50, | |
+ 0xe0, 0x7f, 0xfb, 0x7f, 0x00, 0x2e, 0x73, 0x50, 0x98, 0x2e, 0x3b, 0xc8, | |
+ 0x75, 0x50, 0x98, 0x2e, 0xa7, 0xc8, 0x03, 0x50, 0x98, 0x2e, 0x55, 0xcc, | |
+ 0xe1, 0x6f, 0x77, 0x50, 0x98, 0x2e, 0xe0, 0xc9, 0xfb, 0x6f, 0x00, 0x30, | |
+ 0xe0, 0x5f, 0x21, 0x2e, 0xfe, 0x00, 0xb8, 0x2e, 0x03, 0xbc, 0x21, 0x2e, | |
+ 0x6a, 0x01, 0x03, 0x2e, 0x6a, 0x01, 0x40, 0xb2, 0x10, 0x30, 0x21, 0x2e, | |
+ 0x7b, 0x00, 0x01, 0x30, 0x05, 0x2f, 0x05, 0x2e, 0x6d, 0x01, 0x80, 0x90, | |
+ 0x01, 0x2f, 0x23, 0x2e, 0x6f, 0xf5, 0xc0, 0x2e, 0x21, 0x2e, 0x6e, 0x01, | |
+ 0x30, 0x25, 0x00, 0x30, 0x21, 0x2e, 0x5a, 0xf5, 0x10, 0x50, 0x21, 0x2e, | |
+ 0xdc, 0x00, 0x21, 0x2e, 0xd6, 0x00, 0xfb, 0x7f, 0x98, 0x2e, 0xf3, 0x03, | |
+ 0x40, 0x30, 0x21, 0x2e, 0xff, 0x00, 0xfb, 0x6f, 0xf0, 0x5f, 0x03, 0x25, | |
+ 0x80, 0x2e, 0xe4, 0xb6, 0x10, 0x50, 0x03, 0x40, 0x19, 0x18, 0x83, 0x56, | |
+ 0x19, 0x05, 0x36, 0x25, 0xf7, 0x7f, 0x4a, 0x17, 0x54, 0x18, 0xec, 0x18, | |
+ 0x09, 0x17, 0x01, 0x30, 0x0c, 0x07, 0xe2, 0x18, 0xde, 0x00, 0xf2, 0x6f, | |
+ 0x97, 0x02, 0x7f, 0x58, 0xdc, 0x00, 0x91, 0x02, 0xbf, 0xb8, 0x21, 0xbd, | |
+ 0x8a, 0x0a, 0xc0, 0x2e, 0x02, 0x42, 0xf0, 0x5f, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, | |
+ 0x01, 0x2e, 0x5d, 0xf7, 0x08, 0xbc, 0x80, 0xac, 0x0e, 0xbb, 0x02, 0x2f, | |
+ 0x00, 0x30, 0x41, 0x04, 0x82, 0x06, 0xc0, 0xa4, 0x00, 0x30, 0x11, 0x2f, | |
+ 0x40, 0xa9, 0x03, 0x2f, 0x40, 0x91, 0x0d, 0x2f, 0x00, 0xa7, 0x0b, 0x2f, | |
+ 0x80, 0xb3, 0x7f, 0x58, 0x02, 0x2f, 0x90, 0xa1, 0x26, 0x13, 0x20, 0x23, | |
+ 0x80, 0x90, 0x10, 0x30, 0x01, 0x2f, 0xcc, 0x0e, 0x00, 0x2f, 0x00, 0x30, | |
+ 0xb8, 0x2e, 0x81, 0x50, 0x18, 0x08, 0x08, 0xbc, 0x88, 0xb6, 0x0d, 0x17, | |
+ 0xc6, 0xbd, 0x56, 0xbc, 0x83, 0x58, 0xda, 0xba, 0x04, 0x01, 0x1d, 0x0a, | |
+ 0x10, 0x50, 0x05, 0x30, 0x32, 0x25, 0x45, 0x03, 0xfb, 0x7f, 0xf6, 0x30, | |
+ 0x21, 0x25, 0x98, 0x2e, 0x37, 0xca, 0x16, 0xb5, 0x9a, 0xbc, 0x06, 0xb8, | |
+ 0x80, 0xa8, 0x41, 0x0a, 0x0e, 0x2f, 0x80, 0x90, 0x02, 0x2f, 0x35, 0x50, | |
+ 0x48, 0x0f, 0x09, 0x2f, 0xbf, 0xa0, 0x04, 0x2f, 0xbf, 0x90, 0x06, 0x2f, | |
+ 0x83, 0x54, 0xca, 0x0f, 0x03, 0x2f, 0x00, 0x2e, 0x02, 0x2c, 0x83, 0x52, | |
+ 0x35, 0x52, 0xf2, 0x33, 0x98, 0x2e, 0xd9, 0xc0, 0xfb, 0x6f, 0xf1, 0x37, | |
+ 0xc0, 0x2e, 0x01, 0x08, 0xf0, 0x5f, 0x8b, 0x56, 0x85, 0x54, 0xd0, 0x40, | |
+ 0xc4, 0x40, 0x0b, 0x2e, 0xfd, 0xf3, 0x8b, 0x52, 0x90, 0x42, 0x94, 0x42, | |
+ 0x95, 0x42, 0x05, 0x30, 0x8d, 0x50, 0x0f, 0x88, 0x06, 0x40, 0x04, 0x41, | |
+ 0x96, 0x42, 0xc5, 0x42, 0x48, 0xbe, 0x73, 0x30, 0x0d, 0x2e, 0x6d, 0x01, | |
+ 0x4f, 0xba, 0x84, 0x42, 0x03, 0x42, 0x81, 0xb3, 0x02, 0x2f, 0x2b, 0x2e, | |
+ 0x6f, 0xf5, 0x06, 0x2d, 0x05, 0x2e, 0x77, 0xf7, 0x89, 0x56, 0x93, 0x08, | |
+ 0x25, 0x2e, 0x77, 0xf7, 0x87, 0x54, 0x25, 0x2e, 0xc2, 0xf5, 0x07, 0x2e, | |
+ 0xfd, 0xf3, 0x42, 0x30, 0xb4, 0x33, 0xda, 0x0a, 0x4c, 0x00, 0x27, 0x2e, | |
+ 0xfd, 0xf3, 0x43, 0x40, 0xd4, 0x3f, 0xdc, 0x08, 0x43, 0x42, 0x00, 0x2e, | |
+ 0x00, 0x2e, 0x43, 0x40, 0x24, 0x30, 0xdc, 0x0a, 0x43, 0x42, 0x04, 0x80, | |
+ 0x03, 0x2e, 0xfd, 0xf3, 0x4a, 0x0a, 0x23, 0x2e, 0xfd, 0xf3, 0x61, 0x34, | |
+ 0xc0, 0x2e, 0x01, 0x42, 0x00, 0x2e, 0x60, 0x50, 0x1a, 0x25, 0x7a, 0x86, | |
+ 0xe0, 0x7f, 0xf3, 0x7f, 0x03, 0x25, 0x8f, 0x52, 0x41, 0x84, 0xdb, 0x7f, | |
+ 0x33, 0x30, 0x98, 0x2e, 0x16, 0xc2, 0x1a, 0x25, 0x7d, 0x82, 0xf0, 0x6f, | |
+ 0xe2, 0x6f, 0x32, 0x25, 0x16, 0x40, 0x94, 0x40, 0x26, 0x01, 0x85, 0x40, | |
+ 0x8e, 0x17, 0xc4, 0x42, 0x6e, 0x03, 0x95, 0x42, 0x41, 0x0e, 0xf4, 0x2f, | |
+ 0xdb, 0x6f, 0xa0, 0x5f, 0xb8, 0x2e, 0xb0, 0x51, 0xfb, 0x7f, 0x98, 0x2e, | |
+ 0xe8, 0x0d, 0x5a, 0x25, 0x98, 0x2e, 0x0f, 0x0e, 0x97, 0x58, 0x32, 0x87, | |
+ 0xc4, 0x7f, 0x65, 0x89, 0x6b, 0x8d, 0x91, 0x5a, 0x65, 0x7f, 0xe1, 0x7f, | |
+ 0x83, 0x7f, 0xa6, 0x7f, 0x74, 0x7f, 0xd0, 0x7f, 0xb6, 0x7f, 0x94, 0x7f, | |
+ 0x17, 0x30, 0x93, 0x52, 0x95, 0x54, 0x51, 0x7f, 0x00, 0x2e, 0x85, 0x6f, | |
+ 0x42, 0x7f, 0x00, 0x2e, 0x51, 0x41, 0x45, 0x81, 0x42, 0x41, 0x13, 0x40, | |
+ 0x3b, 0x8a, 0x00, 0x40, 0x4b, 0x04, 0xd0, 0x06, 0xc0, 0xac, 0x85, 0x7f, | |
+ 0x02, 0x2f, 0x02, 0x30, 0x51, 0x04, 0xd3, 0x06, 0x41, 0x84, 0x05, 0x30, | |
+ 0x5d, 0x02, 0xc9, 0x16, 0xdf, 0x08, 0xd3, 0x00, 0x8d, 0x02, 0xaf, 0xbc, | |
+ 0xb1, 0xb9, 0x59, 0x0a, 0x65, 0x6f, 0x11, 0x43, 0xa1, 0xb4, 0x52, 0x41, | |
+ 0x53, 0x41, 0x01, 0x43, 0x34, 0x7f, 0x65, 0x7f, 0x26, 0x31, 0xe5, 0x6f, | |
+ 0xd4, 0x6f, 0x98, 0x2e, 0x37, 0xca, 0x32, 0x6f, 0x75, 0x6f, 0x83, 0x40, | |
+ 0x42, 0x41, 0x23, 0x7f, 0x12, 0x7f, 0xf6, 0x30, 0x40, 0x25, 0x51, 0x25, | |
+ 0x98, 0x2e, 0x37, 0xca, 0x14, 0x6f, 0x20, 0x05, 0x70, 0x6f, 0x25, 0x6f, | |
+ 0x69, 0x07, 0xa2, 0x6f, 0x31, 0x6f, 0x0b, 0x30, 0x04, 0x42, 0x9b, 0x42, | |
+ 0x8b, 0x42, 0x55, 0x42, 0x32, 0x7f, 0x40, 0xa9, 0xc3, 0x6f, 0x71, 0x7f, | |
+ 0x02, 0x30, 0xd0, 0x40, 0xc3, 0x7f, 0x03, 0x2f, 0x40, 0x91, 0x15, 0x2f, | |
+ 0x00, 0xa7, 0x13, 0x2f, 0x00, 0xa4, 0x11, 0x2f, 0x84, 0xbd, 0x98, 0x2e, | |
+ 0x79, 0xca, 0x55, 0x6f, 0x83, 0x54, 0x54, 0x41, 0x82, 0x00, 0xf3, 0x3f, | |
+ 0x45, 0x41, 0xcb, 0x02, 0xf6, 0x30, 0x98, 0x2e, 0x37, 0xca, 0x35, 0x6f, | |
+ 0xa4, 0x6f, 0x41, 0x43, 0x03, 0x2c, 0x00, 0x43, 0xa4, 0x6f, 0x35, 0x6f, | |
+ 0x17, 0x30, 0x42, 0x6f, 0x51, 0x6f, 0x93, 0x40, 0x42, 0x82, 0x00, 0x41, | |
+ 0xc3, 0x00, 0x03, 0x43, 0x51, 0x7f, 0x00, 0x2e, 0x94, 0x40, 0x41, 0x41, | |
+ 0x4c, 0x02, 0xc4, 0x6f, 0x9d, 0x56, 0x63, 0x0e, 0x74, 0x6f, 0x51, 0x43, | |
+ 0xa5, 0x7f, 0x8a, 0x2f, 0x09, 0x2e, 0x6d, 0x01, 0x01, 0xb3, 0x21, 0x2f, | |
+ 0x97, 0x58, 0x90, 0x6f, 0x13, 0x41, 0xb6, 0x6f, 0xe4, 0x7f, 0x00, 0x2e, | |
+ 0x91, 0x41, 0x14, 0x40, 0x92, 0x41, 0x15, 0x40, 0x17, 0x2e, 0x6f, 0xf5, | |
+ 0xb6, 0x7f, 0xd0, 0x7f, 0xcb, 0x7f, 0x98, 0x2e, 0x00, 0x0c, 0x07, 0x15, | |
+ 0xc2, 0x6f, 0x14, 0x0b, 0x29, 0x2e, 0x6f, 0xf5, 0xc3, 0xa3, 0xc1, 0x8f, | |
+ 0xe4, 0x6f, 0xd0, 0x6f, 0xe6, 0x2f, 0x14, 0x30, 0x05, 0x2e, 0x6f, 0xf5, | |
+ 0x14, 0x0b, 0x29, 0x2e, 0x6f, 0xf5, 0x18, 0x2d, 0x99, 0x56, 0x04, 0x32, | |
+ 0xb5, 0x6f, 0x1c, 0x01, 0x51, 0x41, 0x52, 0x41, 0xc3, 0x40, 0xb5, 0x7f, | |
+ 0xe4, 0x7f, 0x98, 0x2e, 0x1f, 0x0c, 0xe4, 0x6f, 0x21, 0x87, 0x00, 0x43, | |
+ 0x04, 0x32, 0x9b, 0x54, 0x5a, 0x0e, 0xef, 0x2f, 0x1f, 0x54, 0x09, 0x2e, | |
+ 0x77, 0xf7, 0x22, 0x0b, 0x29, 0x2e, 0x77, 0xf7, 0xfb, 0x6f, 0x50, 0x5e, | |
+ 0xb8, 0x2e, 0x10, 0x50, 0x01, 0x2e, 0xff, 0x00, 0x00, 0xb2, 0xfb, 0x7f, | |
+ 0x51, 0x2f, 0x01, 0xb2, 0x48, 0x2f, 0x02, 0xb2, 0x42, 0x2f, 0x03, 0x90, | |
+ 0x56, 0x2f, 0xa3, 0x52, 0x79, 0x80, 0x42, 0x40, 0x81, 0x84, 0x00, 0x40, | |
+ 0x42, 0x42, 0x98, 0x2e, 0x93, 0x0c, 0xa5, 0x54, 0xa3, 0x50, 0xa1, 0x40, | |
+ 0x98, 0xbd, 0x82, 0x40, 0x3e, 0x82, 0xda, 0x0a, 0x44, 0x40, 0x8b, 0x16, | |
+ 0xe3, 0x00, 0x53, 0x42, 0x00, 0x2e, 0x43, 0x40, 0x9a, 0x02, 0x52, 0x42, | |
+ 0x00, 0x2e, 0x41, 0x40, 0x1f, 0x54, 0x4a, 0x0e, 0x3a, 0x2f, 0x3a, 0x82, | |
+ 0x00, 0x30, 0x41, 0x40, 0x21, 0x2e, 0x94, 0x0f, 0x40, 0xb2, 0x0a, 0x2f, | |
+ 0x98, 0x2e, 0xb1, 0x0c, 0x98, 0x2e, 0x45, 0x0e, 0x98, 0x2e, 0x5b, 0x0e, | |
+ 0xfb, 0x6f, 0xf0, 0x5f, 0x00, 0x30, 0x80, 0x2e, 0xf8, 0xb6, 0xa9, 0x52, | |
+ 0x9f, 0x54, 0x42, 0x42, 0x4f, 0x84, 0x73, 0x30, 0xa7, 0x52, 0x83, 0x42, | |
+ 0x1b, 0x30, 0x6b, 0x42, 0x23, 0x30, 0x27, 0x2e, 0x6c, 0x01, 0x37, 0x2e, | |
+ 0xff, 0x00, 0x21, 0x2e, 0x6b, 0x01, 0x7a, 0x84, 0x17, 0x2c, 0x42, 0x42, | |
+ 0x30, 0x30, 0x21, 0x2e, 0xff, 0x00, 0x12, 0x2d, 0x21, 0x30, 0x00, 0x30, | |
+ 0x23, 0x2e, 0xff, 0x00, 0x21, 0x2e, 0x7b, 0xf7, 0x0b, 0x2d, 0x17, 0x30, | |
+ 0x98, 0x2e, 0x51, 0x0c, 0xa1, 0x50, 0x0c, 0x82, 0x72, 0x30, 0x2f, 0x2e, | |
+ 0xff, 0x00, 0x25, 0x2e, 0x7b, 0xf7, 0x40, 0x42, 0x00, 0x2e, 0xfb, 0x6f, | |
+ 0xf0, 0x5f, 0xb8, 0x2e, 0x70, 0x50, 0x0a, 0x25, 0x39, 0x86, 0xfb, 0x7f, | |
+ 0xe1, 0x32, 0x62, 0x30, 0x98, 0x2e, 0xc2, 0xc4, 0x81, 0x56, 0xa5, 0x6f, | |
+ 0xab, 0x08, 0x91, 0x6f, 0x4b, 0x08, 0xab, 0x56, 0xc4, 0x6f, 0x23, 0x09, | |
+ 0x4d, 0xba, 0x93, 0xbc, 0x8c, 0x0b, 0xd1, 0x6f, 0x0b, 0x09, 0x97, 0x52, | |
+ 0xad, 0x5e, 0x56, 0x42, 0xaf, 0x09, 0x4d, 0xba, 0x23, 0xbd, 0x94, 0x0a, | |
+ 0xe5, 0x6f, 0x68, 0xbb, 0xeb, 0x08, 0xbd, 0xb9, 0x63, 0xbe, 0xfb, 0x6f, | |
+ 0x52, 0x42, 0xe3, 0x0a, 0xc0, 0x2e, 0x43, 0x42, 0x90, 0x5f, 0x9d, 0x50, | |
+ 0x03, 0x2e, 0x25, 0xf3, 0x13, 0x40, 0x00, 0x40, 0x9b, 0xbc, 0x9b, 0xb4, | |
+ 0x08, 0xbd, 0xb8, 0xb9, 0x98, 0xbc, 0xda, 0x0a, 0x08, 0xb6, 0x89, 0x16, | |
+ 0xc0, 0x2e, 0x19, 0x00, 0x62, 0x02, 0x10, 0x50, 0xfb, 0x7f, 0x98, 0x2e, | |
+ 0x81, 0x0d, 0x01, 0x2e, 0xff, 0x00, 0x31, 0x30, 0x08, 0x04, 0xfb, 0x6f, | |
+ 0x01, 0x30, 0xf0, 0x5f, 0x23, 0x2e, 0x6b, 0x01, 0x21, 0x2e, 0x6c, 0x01, | |
+ 0xb8, 0x2e, 0x01, 0x2e, 0x6c, 0x01, 0x03, 0x2e, 0x6b, 0x01, 0x48, 0x0e, | |
+ 0x01, 0x2f, 0x80, 0x2e, 0x1f, 0x0e, 0xb8, 0x2e, 0xaf, 0x50, 0x21, 0x34, | |
+ 0x01, 0x42, 0x82, 0x30, 0xc1, 0x32, 0x25, 0x2e, 0x62, 0xf5, 0x01, 0x00, | |
+ 0x22, 0x30, 0x01, 0x40, 0x4a, 0x0a, 0x01, 0x42, 0xb8, 0x2e, 0xaf, 0x54, | |
+ 0xf0, 0x3b, 0x83, 0x40, 0xd8, 0x08, 0xb1, 0x52, 0x83, 0x42, 0x00, 0x30, | |
+ 0x83, 0x30, 0x50, 0x42, 0xc4, 0x32, 0x27, 0x2e, 0x64, 0xf5, 0x94, 0x00, | |
+ 0x50, 0x42, 0x40, 0x42, 0xd3, 0x3f, 0x84, 0x40, 0x7d, 0x82, 0xe3, 0x08, | |
+ 0x40, 0x42, 0x83, 0x42, 0xb8, 0x2e, 0xa9, 0x52, 0x00, 0x30, 0x40, 0x42, | |
+ 0x7c, 0x86, 0x85, 0x52, 0x09, 0x2e, 0x7f, 0x0f, 0x8b, 0x54, 0xc4, 0x42, | |
+ 0xd3, 0x86, 0x54, 0x40, 0x55, 0x40, 0x94, 0x42, 0x85, 0x42, 0x21, 0x2e, | |
+ 0x6c, 0x01, 0x42, 0x40, 0x25, 0x2e, 0xfd, 0xf3, 0xc0, 0x42, 0x7e, 0x82, | |
+ 0x05, 0x2e, 0xd7, 0x00, 0x80, 0xb2, 0x14, 0x2f, 0x05, 0x2e, 0x89, 0x00, | |
+ 0x27, 0xbd, 0x2f, 0xb9, 0x80, 0x90, 0x02, 0x2f, 0x21, 0x2e, 0x6f, 0xf5, | |
+ 0x0c, 0x2d, 0x07, 0x2e, 0x80, 0x0f, 0x14, 0x30, 0x1c, 0x09, 0x05, 0x2e, | |
+ 0x77, 0xf7, 0x89, 0x56, 0x47, 0xbe, 0x93, 0x08, 0x94, 0x0a, 0x25, 0x2e, | |
+ 0x77, 0xf7, 0xb3, 0x54, 0x50, 0x42, 0x4a, 0x0e, 0xfc, 0x2f, 0xb8, 0x2e, | |
+ 0x50, 0x50, 0x02, 0x30, 0x43, 0x86, 0xb1, 0x50, 0xfb, 0x7f, 0xe3, 0x7f, | |
+ 0xd2, 0x7f, 0xc0, 0x7f, 0xb1, 0x7f, 0x00, 0x2e, 0x41, 0x40, 0x00, 0x40, | |
+ 0x48, 0x04, 0x98, 0x2e, 0x74, 0xc0, 0x1e, 0xaa, 0xd3, 0x6f, 0x14, 0x30, | |
+ 0xb1, 0x6f, 0xe3, 0x22, 0xc0, 0x6f, 0x52, 0x40, 0xe4, 0x6f, 0x4c, 0x0e, | |
+ 0x12, 0x42, 0xd3, 0x7f, 0xeb, 0x2f, 0x03, 0x2e, 0x95, 0x0f, 0x40, 0x90, | |
+ 0x11, 0x30, 0x03, 0x2f, 0x23, 0x2e, 0x95, 0x0f, 0x02, 0x2c, 0x00, 0x30, | |
+ 0xd0, 0x6f, 0xfb, 0x6f, 0xb0, 0x5f, 0xb8, 0x2e, 0x40, 0x50, 0xf1, 0x7f, | |
+ 0x0a, 0x25, 0x3c, 0x86, 0xeb, 0x7f, 0x41, 0x33, 0x22, 0x30, 0x98, 0x2e, | |
+ 0xc2, 0xc4, 0xd3, 0x6f, 0xf4, 0x30, 0xdc, 0x09, 0xb7, 0x58, 0xc2, 0x6f, | |
+ 0x94, 0x09, 0xb9, 0x58, 0x6a, 0xbb, 0xdc, 0x08, 0xb4, 0xb9, 0xb1, 0xbd, | |
+ 0xb5, 0x5a, 0x95, 0x08, 0x21, 0xbd, 0xf6, 0xbf, 0x77, 0x0b, 0x51, 0xbe, | |
+ 0xf1, 0x6f, 0xeb, 0x6f, 0x52, 0x42, 0x54, 0x42, 0xc0, 0x2e, 0x43, 0x42, | |
+ 0xc0, 0x5f, 0x50, 0x50, 0xcd, 0x50, 0x31, 0x30, 0x11, 0x42, 0xfb, 0x7f, | |
+ 0x7b, 0x30, 0x0b, 0x42, 0x11, 0x30, 0x02, 0x80, 0x23, 0x33, 0x01, 0x42, | |
+ 0x03, 0x00, 0x07, 0x2e, 0x80, 0x03, 0x05, 0x2e, 0xd5, 0x00, 0x49, 0x52, | |
+ 0xe2, 0x7f, 0xd3, 0x7f, 0xc0, 0x7f, 0x98, 0x2e, 0xb6, 0x0e, 0xd1, 0x6f, | |
+ 0x08, 0x0a, 0x1a, 0x25, 0x7b, 0x86, 0xd0, 0x7f, 0x01, 0x33, 0x12, 0x30, | |
+ 0x98, 0x2e, 0xc2, 0xc4, 0xd1, 0x6f, 0x08, 0x0a, 0x00, 0xb2, 0x0d, 0x2f, | |
+ 0xe3, 0x6f, 0x01, 0x2e, 0x80, 0x03, 0x51, 0x30, 0xc7, 0x86, 0x23, 0x2e, | |
+ 0x21, 0xf2, 0x08, 0xbc, 0xc0, 0x42, 0x98, 0x2e, 0x0b, 0x03, 0x00, 0x2e, | |
+ 0x00, 0x2e, 0xd0, 0x2e, 0xb0, 0x6f, 0x0b, 0xb8, 0x03, 0x2e, 0x1b, 0x00, | |
+ 0x08, 0x1a, 0xb0, 0x7f, 0x70, 0x30, 0x04, 0x2f, 0x21, 0x2e, 0x21, 0xf2, | |
+ 0x00, 0x2e, 0x00, 0x2e, 0xd0, 0x2e, 0x98, 0x2e, 0x6d, 0xc0, 0x98, 0x2e, | |
+ 0x5d, 0xc0, 0xbb, 0x50, 0x98, 0x2e, 0x46, 0xc3, 0xbd, 0x50, 0x98, 0x2e, | |
+ 0xfc, 0xc5, 0xbf, 0x50, 0x21, 0x2e, 0x77, 0x01, 0x6f, 0x50, 0x98, 0x2e, | |
+ 0x64, 0xcf, 0xc3, 0x50, 0x21, 0x2e, 0x85, 0x01, 0xc1, 0x56, 0xc5, 0x52, | |
+ 0x27, 0x2e, 0x86, 0x01, 0x23, 0x2e, 0x87, 0x01, 0xc7, 0x50, 0x98, 0x2e, | |
+ 0x53, 0xc7, 0xc9, 0x50, 0x98, 0x2e, 0x44, 0xcb, 0x10, 0x30, 0x98, 0x2e, | |
+ 0xcd, 0xb6, 0x20, 0x26, 0xc0, 0x6f, 0x02, 0x31, 0x12, 0x42, 0xab, 0x33, | |
+ 0x0b, 0x42, 0x37, 0x80, 0x01, 0x30, 0x01, 0x42, 0xf3, 0x37, 0xcf, 0x52, | |
+ 0xd3, 0x50, 0x44, 0x40, 0xa2, 0x0a, 0x42, 0x42, 0x8b, 0x31, 0x09, 0x2e, | |
+ 0x5e, 0xf7, 0xd1, 0x54, 0xe3, 0x08, 0x83, 0x42, 0x1b, 0x42, 0x23, 0x33, | |
+ 0x4b, 0x00, 0xbc, 0x84, 0x0b, 0x40, 0x33, 0x30, 0x83, 0x42, 0x0b, 0x42, | |
+ 0xe0, 0x7f, 0xd1, 0x7f, 0x98, 0x2e, 0x07, 0x02, 0xd1, 0x6f, 0x80, 0x30, | |
+ 0x40, 0x42, 0x03, 0x30, 0xe0, 0x6f, 0xcb, 0x54, 0x04, 0x30, 0x00, 0x2e, | |
+ 0x00, 0x2e, 0x01, 0x89, 0x62, 0x0e, 0xfa, 0x2f, 0x43, 0x42, 0x11, 0x30, | |
+ 0xfb, 0x6f, 0xc0, 0x2e, 0x01, 0x42, 0xb0, 0x5f, 0xc1, 0x4a, 0x00, 0x00, | |
+ 0x6d, 0x57, 0x00, 0x00, 0x77, 0x8e, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, | |
+ 0xd3, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xff, 0xff, 0xee, 0xe1, 0xff, 0xff, | |
+ 0x7c, 0x13, 0x00, 0x00, 0x46, 0xe6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0x80, 0x2e, | |
+ 0x00, 0xc1, 0x80, 0x2e, 0x00, 0xc1, 0xfd, 0x2d | |
+}; | |
-- | |
2.43.2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment